乘法,乘法寄存器verilog

时间:2013-12-15 07:32:46

标签: verilog multiplication

有没有办法将寄存器/导线与值相乘?

e.g。

... input wire [13:0] setpoint ...
 if (timer>(setpoint*0.95)) 

1 个答案:

答案 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。