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

Implement high impedance 'Z' input output property with chisel

我的电路板(apf27) has a processor (i.MX27) and a FPGA (Spartan3A) that 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())
  ...  

我可以从处理器读取数据,但是 "lock" 总线。我必须发布它,因为它上面还有 nand 组件。

要释放它,我可以使用信号 oen(输出使能),但我不能在 Verilog/VHDL 中分配高阻抗值,如 'Z'到 'release' 它。

在 Chisel3 中正确的做法是什么?我在 chisel3 中看到了一个叫做“AnalogRawModule”的东西 github 是要用的东西吗?

模拟正是您要找的。允许 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 中驱动模拟类型的电线,不幸的是您不能进行串联或位 select(尽管我们应该支持),但您至少可以连接信号。如果您需要进行任何类型的 selection 或连接,则需要在 BlackBox 中进行。