在Chisel中能否对Analog类型的信号值执行翻转操作?
Chisel 1bit Analog信号翻转实现方案
Chisel 中的 Analog 类型是用于描述模拟信号、双向无源信号的抽象类型,本身不支持 ~、! 这类面向数字信号的逻辑运算符,所有针对模拟信号的电平处理都需要依赖对应模拟电路单元实现,可参考以下两种常用方案:
方案1:封装模拟反相器BlackBox(推荐,可综合)
因为你原本就需要在两个BlackBox之间传递信号,直接新增一个反相器的BlackBox封装即可:
- 首先定义1bit模拟反相器的BlackBox:
class Analog1bInverter extends BlackBox { val io = IO(new Bundle { val in = Analog(1.W) val out = Analog(1.W) }) }
- 在顶层模块中调用,实现两个业务BlackBox的信号连接:
class TopDesign extends Module { val io = IO(new Bundle { val ext_analog = Analog(1.W) }) // 实例化你自己的两个业务BlackBox val blackbox1 = Module(new YourBlackBox1) val blackbox2 = Module(new YourBlackBox2) // 实例化模拟反相器 val inv = Module(new Analog1bInverter) // 原始模拟信号同时接第一个BlackBox和反相器输入 attach(io.ext_analog, blackbox1.io.analog_port, inv.io.in) // 翻转后的模拟信号接入第二个BlackBox attach(inv.io.out, blackbox2.io.analog_port) }
方案2:纯仿真场景快速实现
如果你的设计仅用于功能仿真、不需要流片综合,也可以直接在第二个业务BlackBox的Verilog实现内部,对输入的模拟端口直接做取反连接,不需要额外新增反相器模块,减少Chisel层面的代码改动。
注意:不要尝试直接把
Analog类型强制转换为Bool/UInt等数字类型做取反,Chisel不支持模拟域和数字域的直接类型转换,此类代码无法通过综合检查。
内容的提问来源于stack exchange,提问作者metzkorn
相关产品推荐
相关产品推荐

