我想使用Log2()
在IO中提取位宽。哪个Log2()
是Uint,但是位宽声明可能需要Int类型。因此,我想将(广播)从Uint转换为Int。
我尝试在IO中执行以下操作;
val hoge = Output(Uint(Log2(BitWidth).W))
然后这会产生类型不匹配的错误。我找不到UInt到Int的转换。怎么做?
答案 0 :(得分:1)
val hoge = Output(UInt((Log2Up(BitWidth : Int) : Int).W))
我不确定您是否只能使用Log2,请尝试使用具有上述语法的Log2Up或Log2Down。我想这应该可以,请告诉我是否可以解决错误,并且可以使用UInt代替Uint
答案 1 :(得分:1)
Chisel具有chisel3.util.log2Ceil(i:Int),该函数返回保存i
值所需的位数。您的示例输入了Uint
而不是UInt
的错字,这可能会引起问题。我不确定您的示例中的BitWidth
是什么?是class
还是Int
,如果是Int
,最好将scala约定用于变量名的小写开头。如果您有val x = UInt(8.W)
,并且想在x
声明中使用IO
的宽度,则它看起来像
val a = IO(Input(chiselTypeOf(x)))
我希望这对您有帮助
答案 2 :(得分:0)
如果您要严格强制转换,则UInt具有asSInt方法。参见: