fpga - 用凿子实现高阻抗“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”的东西,它是要使用的东西吗?
解决方案
模拟是您正在寻找的。允许 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 中进行。
推荐阅读
- python - 调试要从终端运行的python应用程序
- php - 在刀片中执行 Foreach 时收到非对象错误
- javascript - How to detect if vue-router is used in current Vue instance?
- reactjs - 从本地库导入时,React 钩子不起作用
- android - 如何修复“在模块中发现重复的类 android.support.v4.app.INotificationSideChannel”
- python - 将 pickle 从 Python 传递到 IronPython - cPickle.UnpicklingError: invalid opcode: x
- php - PHP PSR-12 这是示例中的语法错误吗?
- c++ - 在 Visual Studio 2019 中查找或 LINQ C++
- visual-studio-code - 为什么 Node.JS 包必须用 Electron 编译才能在 VSCode 扩展开发中使用它们?
- tensorflow - 如何从 Google 存储桶加载 Tensorflow 冻结图模型?