使用 FIRRTL Annotations 连接多位线和引脚
Use FIRRTL Annotations to connect multi-bit wires and pins
我正在写下一些 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 位端口。
有什么方法可以使用注解建立这种联系,或者我应该专注于寻找另一种更可行的方法。
WiringTransform
将连接多位组件, include a test of this。
但是,引脚类型是 source 的函数,而不是 sink 的函数。你能确认你的信号源也是多位信号吗?
对于上面引用的测试,以下 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>
)。
我正在写下一些 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 位端口。 有什么方法可以使用注解建立这种联系,或者我应该专注于寻找另一种更可行的方法。
WiringTransform
将连接多位组件, include a test of this。
但是,引脚类型是 source 的函数,而不是 sink 的函数。你能确认你的信号源也是多位信号吗?
对于上面引用的测试,以下 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>
)。