首页 > 解决方案 > 用凿子实现高阻抗“Z”输入输出属性

问题描述

我的电路板 ( apf27 ) 有一个处理器 (i.MX27) 和一个 FPGA (Spartan3A),它们通过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”的东西,它是要使用的东西吗?

标签: fpgachiselspartan

解决方案


模拟是您正在寻找的。允许 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 中进行。


推荐阅读