0
有没有办法将一个寄存器/线与一个值相乘?乘法,乘法寄存器verilog
例如
... input wire [13:0] setpoint ...
if (timer>(setpoint*0.95))
有没有办法将一个寄存器/线与一个值相乘?乘法,乘法寄存器verilog
例如
... input wire [13:0] setpoint ...
if (timer>(setpoint*0.95))
是的,这是可能的,但乘数可能相当大,请谨慎使用。在这种情况下,被乘数是固定的,所以它会减少相当多的逻辑。
在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
将需要LSB填充适用于添加到0.95表示的小数位。