在verilog中舍入一个数字

时间:2013-09-23 10:10:12

标签: verilog

基本上我正在尝试用verilog编写一个可合成模块,它在两个数字之间进行划分并舍入结果。例如,如果我正在做56/30,那么结果值是1.86并且该值应四舍五入为2,或者如果我正在做42/30,则结果值为1.4,应该四舍五入为1。可以用verilog编写可合成的代码来实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

如果<size>小于返回的值,则Verilog会截断数字的结尾。因此,如果除以42/30,则返回的值为1.4。只需将<size>定义为1,小数就会被截断。

但是,请记住,此解决方案截断小数,并且不会将其四舍五入。我不是Verilog的专家,但您可以参考here来进一步解决您的问题。

答案 1 :(得分:1)

答案LSB的值由输入格式决定。如果将分子输入更改为固定点至少有1个小数位而不是整数,则输出将有一个代表0.5的位,可用于控制截断(向下舍入)或向上舍入。

module test;

reg[4:0] a = 5'b0011_0; //3 with 1 Fractional bit
reg[4:0] b = 5'b00010;  //2 no fractional bits
reg[9:0] c;

initial begin
  c = a/b ; //LSB => 0.5
  // c= 5'b01_1 => 1.5
  #1 $display("C = %b", c);
end
endmodule