取 UInt 的 log2Ceil
Taking log2Ceil of UInt
我正在计算以下计算的 log2:
tl_out.a.bits.size := log2Ceil(s1_row * s2_column * 4.U)
其中,s1_row 和 s2_column 是 UInt。
我收到以下错误:
[info] Compiling 1 Scala source to ...rocket-chip/target/scala-2.12/classes ...
[error] ...scala:199:25: overloaded method value apply with alternatives:
[error] (in: Int)Int <and>
[error] (in: BigInt)Int
[error] cannot be applied to (chisel3.core.UInt)
[error] tl_out.a.bits.size := log2Ceil(s1_row * s2_column * 4.U)
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
似乎无法在UInt/SInt上执行log2Ceil。有什么方法可以通过 UInt 执行类型转换 UINT/SInt 或 log2Ceil 的替代方法?
请协助...
感谢和问候,
log2Ceil()
是查找单词大小的好函数。但请注意,对于 UInt()
Wire 或 Reg,它不是 "synthesizable"。 log2Ceil()
计算在综合时完成一次,它不是硬件功能。那么你的输出信号tl_out.a.bits.size
将是一个常数。
如果你想找到最重要的设置位,你应该使用名为 PriorityEncoder(Reverse(s1_row * s2_column * 4.U))
的硬件函数。
PriorityEncoder() return信号中最低有效“1”的位置。
Reverse() 反转信号中的位顺序。
我正在计算以下计算的 log2:
tl_out.a.bits.size := log2Ceil(s1_row * s2_column * 4.U)
其中,s1_row 和 s2_column 是 UInt。 我收到以下错误:
[info] Compiling 1 Scala source to ...rocket-chip/target/scala-2.12/classes ...
[error] ...scala:199:25: overloaded method value apply with alternatives:
[error] (in: Int)Int <and>
[error] (in: BigInt)Int
[error] cannot be applied to (chisel3.core.UInt)
[error] tl_out.a.bits.size := log2Ceil(s1_row * s2_column * 4.U)
[error] ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
似乎无法在UInt/SInt上执行log2Ceil。有什么方法可以通过 UInt 执行类型转换 UINT/SInt 或 log2Ceil 的替代方法? 请协助...
感谢和问候,
log2Ceil()
是查找单词大小的好函数。但请注意,对于 UInt()
Wire 或 Reg,它不是 "synthesizable"。 log2Ceil()
计算在综合时完成一次,它不是硬件功能。那么你的输出信号tl_out.a.bits.size
将是一个常数。
如果你想找到最重要的设置位,你应该使用名为 PriorityEncoder(Reverse(s1_row * s2_column * 4.U))
的硬件函数。
PriorityEncoder() return信号中最低有效“1”的位置。 Reverse() 反转信号中的位顺序。