在Verilog中舍入浮点数?

时间:2013-11-03 22:19:32

标签: verilog fpga

所以我在Verilog上使用64位浮点数进行合成,所有都在{-1,1}的区域内。现在,我正在尝试创建类似直方图的东西,我想我可以通过创建一个像二维数组一样工作的RAM来做。但我正面临着四舍五入的问题。

例如,

我的值为0.94394(FltPt)。我想将此转换为just,

0.82394 = 8和0.8862 = 9(所有数据均为64位flt pt)

这样我就可以访问RAM上的特定地址了。

使用另一个乘数来解决这个问题最理想的方法是开销过高。是否有一些技巧可以通过截断部分位来做到?我应该将它们转换为固定点吗?

1 个答案:

答案 0 :(得分:0)

我能想到的两个选择: 最简单的是更改您的bin,因此边界是2的幂。然后您可以直接使用输入的某些位来处理直方图。我必须去看浮点格式才能知道要使用哪些位。

另一种可能性就是进行一系列比较以查看要放入哪个bin。大号 您可以为两个坐标执行此操作。

reg [4:0] ram_aadr;

always @* begin
  if(data < -.95)
    ram_addr = 5'd0;
  else if(data < -.85)
    ram_addr = 5'd1;
...
  else if(data < .95)
    ram_addr = 5'd19;
  else
    ram_addr = 5'd20;
end