firrtl_interpreter.InterpreterException: error: ConcreteSInt(303, 9) bad width 9 needs 10
firrtl_interpreter.InterpreterException: error: ConcreteSInt(303, 9) bad width 9 needs 10
我有一个生成以下 FIRRTL 的模块
module Deep_1 :
input clock : Clock
input reset : UInt<1>
output io : {in : {flip data : SInt<8>[4]}, constIn : {flip data : SInt<8>[4]}, ...}
...
... (elided)
...
wire inputData : SInt<8>[4] @[Deep.scala 32:23]
wire constInputData : SInt<8>[4] @[Deep.scala 33:28]
reg outputData : SInt<8>[4], clock @[Deep.scala 34:23]
inputData[2] <= io.in.data[2] @[Deep.scala 37:18]
constInputData[2] <= io.constIn.data[2] @[Deep.scala 38:23]
node _T_209 = add(inputData[2], constInputData[2]) @[package.scala 32:44]
node _T_210 = tail(_T_209, 1) @[package.scala 32:44]
node _T_211 = asSInt(_T_210) @[package.scala 32:44]
outputData[2] <= _T_211 @[Deep.scala 39:19]
...
... (elided)
...
但是当我尝试通过 firrtl 解释器 运行 我的测试时,我得到
Exception during evaluation: error: ConcreteSInt(303, 9) bad width 9 needs 10 @[package.scala 32:44:@82.4]
Expression Evaluation stack
0 dut.outputData_2:Reg -> dut._T_211
1 dut._T_211:Node -> asSInt(dut._T_210)
2 dut._T_210:Node -> tail(dut._T_209, 1)
3 dut._T_209:Node -> add(dut.inputData_2, dut.constInputData_2)
如果我没理解错的话,意思是outputData[2]
的宽度是9,但是需要10。然而,据我所知,outputData[2]
和 _T_211
的宽度都应该是 8,第一个是定义的,第二个是 add()
和 tail()
的结果已应用操作。
我错过了什么?
您的软件有多新?我无法用当前版本的解释器重现该问题。我在要点 Attempt to reproduce firrtl-interpreter width error 中未省略的地方使用了以下 firrtl 测试。正如@Kamyar 所说,您可以尝试使用 Treadle 后端吗?在这一点上,它比解释器更现代,也得到更好的支持。
我有一个生成以下 FIRRTL 的模块
module Deep_1 :
input clock : Clock
input reset : UInt<1>
output io : {in : {flip data : SInt<8>[4]}, constIn : {flip data : SInt<8>[4]}, ...}
...
... (elided)
...
wire inputData : SInt<8>[4] @[Deep.scala 32:23]
wire constInputData : SInt<8>[4] @[Deep.scala 33:28]
reg outputData : SInt<8>[4], clock @[Deep.scala 34:23]
inputData[2] <= io.in.data[2] @[Deep.scala 37:18]
constInputData[2] <= io.constIn.data[2] @[Deep.scala 38:23]
node _T_209 = add(inputData[2], constInputData[2]) @[package.scala 32:44]
node _T_210 = tail(_T_209, 1) @[package.scala 32:44]
node _T_211 = asSInt(_T_210) @[package.scala 32:44]
outputData[2] <= _T_211 @[Deep.scala 39:19]
...
... (elided)
...
但是当我尝试通过 firrtl 解释器 运行 我的测试时,我得到
Exception during evaluation: error: ConcreteSInt(303, 9) bad width 9 needs 10 @[package.scala 32:44:@82.4]
Expression Evaluation stack
0 dut.outputData_2:Reg -> dut._T_211
1 dut._T_211:Node -> asSInt(dut._T_210)
2 dut._T_210:Node -> tail(dut._T_209, 1)
3 dut._T_209:Node -> add(dut.inputData_2, dut.constInputData_2)
如果我没理解错的话,意思是outputData[2]
的宽度是9,但是需要10。然而,据我所知,outputData[2]
和 _T_211
的宽度都应该是 8,第一个是定义的,第二个是 add()
和 tail()
的结果已应用操作。
我错过了什么?
您的软件有多新?我无法用当前版本的解释器重现该问题。我在要点 Attempt to reproduce firrtl-interpreter width error 中未省略的地方使用了以下 firrtl 测试。正如@Kamyar 所说,您可以尝试使用 Treadle 后端吗?在这一点上,它比解释器更现代,也得到更好的支持。