有没有办法将寄存器/导线与值相乘?
e.g。
... input wire [13:0] setpoint ...
if (timer>(setpoint*0.95))
答案 0 :(得分:3)
是的,这是可能的,但乘数可能非常大,因此请谨慎使用。在这种情况下,被乘数是固定的,因此它会将逻辑降低很多。
在RTL中,一个实数(如0.95)没有太大的意义,你需要乘以一个固定的点数,这也将限制你可以代表0.95的精度。
允许10个二进制位,缩放为2 ^ 10。 0.1111001100 => 0.94921875
。为了进行比较,您需要跟踪乘法结果的增长情况。
a_int_bits.a_frac_bits * b_int_bits.b_frac_bits =
(a_int_bits + b_int_bits) . (a_frac_bits + b_frac_bits)
因此,比较中的timer
需要为添加到0.95表示的小数位填充LSB。