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表示的小數位。