我正在编写一些firrtl转换,并使用注释连接引脚和连接线,例如:
val named = ComponentName(inputWire.name, ModuleName(mod.name, CircuitName(top)))
val anno = Traversable(SinkAnnotation(named, pinName))inputWire是:
val inputWire = DefWire(NoInfo,localNS.newTemp, con.expr.tpe)pinName是一个字符串:
val pinName = namespace.newName(faultPinPrefix)如果inputWire的类型是UIntType(IntWidth(2)),或者在其他一些情况下可能超过2。
在这个转换之后,我运行firrtl.passes.wiring.WiringTransform来发出连接,我现在面临的问题是verilog输出如下所示:
input faultPin_0
//...
//Some code
//..
assign _GEN_1 = {{1'd0}, faultPin_0};这不是我所期望的行为。它只创建一个1位的输入端口,并将其连接起来,生成2位信号。可能问题是,我没有指定端口的类型,而是让编译器来决定它,它正在自动创建一个1位端口。是否有任何方法可以使用注释来建立这种连接,或者我应该集中精力寻找另一种更可行的方法。
发布于 2019-10-07 15:14:08
WiringTransform将连接多位组件并执行包括这方面的测试。
然而,引脚的类型是源的函数而不是接收器的函数。你能证实你的源也是一个多位信号吗?
对于上面引用的测试,请使用以下FIRRTL:
circuit Top :
module Top :
input clk: Clock
inst x of X
x.clk <= clk
reg r: UInt<5>, clk
module X :
input clk: Clock
wire s: UInt<5>以及以下说明:
SourceAnnotation(ComponentName("r", ModuleName("Top", CircuitName("Top"))), "pin")SinkAnnotation(ComponentName("s", ModuleName("X", CircuitName("Top"))), "pin")在运行WiringTransform时产生以下电路
circuit Top :
module Top :
input clk: Clock
wire r_0 : UInt<5>
inst x of X
x.clk <= clk
reg r: UInt<5>, clk
x.pin <= r_0
r_0 <= r
module X :
input clk: Clock
input pin: UInt<5>
wire s: UInt<5>
s <= pin这似乎是对的。但是,如果我把源设为1位信号(reg r: UInt<1>, clk),那么引脚也将是1位(input pin : UInt<1>).
https://stackoverflow.com/questions/58269003
复制相似问题