3

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

4

2 回答 2

1

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

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

于 2013-09-23T10:17:41.913 回答
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
于 2013-09-23T12:23:23.380 回答