用凿子实现高阻抗'Z'输入输出属性

时间:2018-05-15 12:06:07

标签: fpga chisel spartan

我的电路板(apf27)有一个处理器(i.MX27)和一个FPGA(Spartan3A)communicate through a "memory bus"在proc数据表中称为WEIM。

我想将数据从FPGA传输到处理器。我设法用一个简单的Output()IO:

来做到这一点
  val io = IO(new Bundle {
  ...
    val data = Output(UInt(16.W))
    val oen = Input(Bool())
  ...  

我可以从处理器读取数据,但是“锁定”总线。我必须为它上面的nand组件释放它。

要释放它,我可以使用信号 oen (输出使能),但是我无法在Verilog / VHDL中指定像Z一样的高阻抗值来“释放”它。

在Chisel3中使用它的正确方法是什么?我在chisel3 github中看到了一个名为'AnalogRawModule'的东西,它是用的东西吗?

1 个答案:

答案 0 :(得分:1)

模拟是您正在寻找的。它基本上是一种逃避,允许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)
}

你不能在Chisel中驱动模拟类型的线路,不幸的是你不能进行连接或位选择(尽管我们应该支持),但你至少可以连接信号。如果您需要进行任何类型的位选择或连接,您需要在BlackBox中执行此操作。