Реализуйте входное свойство с высоким импедансом Z с долотом - PullRequest
0 голосов
/ 15 мая 2018

Моя плата ( apf27 ) имеет процессор (i.MX27) и FPGA (Spartan3A), которые обмениваются данными через "шину памяти" , называемую WEIM в таблице данных proc.

Я хочу передать данные с FPGA на процессор. Мне удалось сделать это с помощью простого Output () IO:

  val io = IO(new Bundle {
  ...
    val data = Output(UInt(16.W))
    val oen = Input(Bool())
  ...  

Я могу читать данные с процессора, но это "блокирует" шину. Я должен выпустить его для компонента nand, также присутствующего на нем.

Чтобы освободить его, я могу использовать сигнал oen (выходное разрешение), но я не могу присвоить значение высокого импеданса, например, 'Z' в Verilog / VHDL, чтобы 'освободить' его.

Как правильно сделать это в Chisel3? Я видел что-то под названием AnalogRawModule в gisub chisel3 это вещи для использования?

1 Ответ

0 голосов
/ 16 мая 2018

Аналог - это то, что вы ищете. По сути, это выход, позволяющий двунаправленным проводам и другим сигналам, которые на самом деле не поддерживаются Chisel, по-прежнему подключаться через ваш дизайн Chisel.

Вот пример:

import chisel3._
import chisel3.experimental.Analog

class AnalogBlackBox extends BlackBox {
  val io = IO(new Bundle {
    val bus = Analog(32.W)
  })
}

class AnalogModule extends Module {
  val io = IO(new Bundle {
    val bus = Analog(32.W)
  })

  val inst = Module(new AnalogBlackBox)
  inst.io.bus <> io.bus
}


object AnalogDriver extends App {
  chisel3.Driver.execute(args, () => new AnalogModule)
}

Вы не можете управлять аналоговыми проводами в долоте, и, к сожалению, вы не можете выполнять конкатенацию или выбор битов (хотя мы должны это поддерживать), но вы можете по крайней мере подключить сигналы через. Если вам нужно выполнить какой-либо выбор или объединение битов, это необходимо сделать в BlackBox.

...