Floating point Verilog系统中的浮点除法

Floating point Verilog系统中的浮点除法,floating-point,verilog,division,system-verilog,integer-division,Floating Point,Verilog,Division,System Verilog,Integer Division,我想使用real数据类型在系统Verilog中使用浮点数。我尝试了以下代码,但似乎不起作用。我得到了2.000000我期望的2.500000 模块: module real_check(input [31:0]a, [31:0]b, output real c); assign c = a/b; endmodule 试验台: module tb_real_check(); real c; reg[31:0] a, b; real_check dut

我想使用
real
数据类型在系统Verilog中使用浮点数。我尝试了以下代码,但似乎不起作用。我得到了
2.000000
我期望的
2.500000

模块:

module real_check(input [31:0]a, [31:0]b,
                  output real c);
    assign c = a/b;
endmodule
试验台:

module tb_real_check();

real c;
reg[31:0] a, b;
real_check dut(a, b, c);

initial 
begin

  a <= 5;
  b <= 2;
  #50;
  $display("Answer : %f ", c);

end
endmodule
模块tb_real_check();
实数c;
reg[31:0]a,b;
实校验dut(a、b、c);
首字母
开始
a你在做什么。计算
int/int
reg[31:0]/reg[31:0]
)时,结果是一个整数。因此,当您计算
5/2
时,您会得到
2.5
截断为
2
,然后将其转换为一个浮点(
real
)数,即
2.000…
。如果需要浮点除法(不丢弃小数),则需要将操作数(被除数和除数)设为浮点

因此,要修复代码,模块需要采用两个浮点数作为输入:

module real_check(input real a, real b,
                  output real c);
在测试用例中,您需要将
a
b
声明为浮点数:

real a, b;

如果我想要一个特定的位浮点呢?我的意思是如果我想要一个浮点a=0.5,我想要它的宽度为4位。我能买一些像4'b0100这样的东西吗?我正在为Newton-Raphson除法建立一个查找表。该表包含128个24位值,值X=48/17-32/17*D,其中D为8位二进制,区域为[0.5,1]。我正在努力编写一个.sv代码来自动生成查找表。@ShuaiyuJiang您是指具有指定精度的浮点吗?所以,不是说,32位精度(单精度),而是4?对不起,让我简化我的问题。我想要一个24位的输出逻辑a[23:0],a=48/17(例如)。我知道如果我只使用逻辑类型,答案将是2,因为余数被截断。我尝试使用“real”语句,得到了a=2.823529。。。。。问题是,我实际上想要一个二进制逻辑输出,而不是一个实数,有什么方法可以帮助我得到48/17的逻辑输出吗?天啊,我的英语演讲不好,你能理解我的意思吗?塔特