verilog中的浮点数乘法

Floating point numbers multiplication in verilog

我想得到16位的数据进行浮点乘法,但是结果是错误的,不是我的demanded.By真正的方式必须是64针吗?

module calc(input [15:0]a, b,
            output [15:0]o);

assign o = a * b;

endmodule

这是测试台:

module calc_tb();

real a,b,o;

calc U1 (.a(a),.b(b),.o(o));
initial begin
a <= 2.2;
b <= 2.5;
#2;
a <= -4.8;
b <= 2.9;
#2;
end
endmodule

当您 运行 执行此操作时,您应该会收到以下警告:

Port size (16 or 16) does not match connection size (64) 
  for port 'a'. The port definition is at: calc.sv(2).

对于abo,因为您将它们定义为16位,实数是64位。

只需将端口更改为 64 位,verilog 就会认为您传递的是 64 位整数。您需要使类型为 real 的端口:

module calc(
  input  real a,
  input  real b,
  output real o
);

assign o = a * b;

endmodule

请注意,这是不可合成的。 Synthesisable Verilog 无法立即处理浮点数。您需要实现或导入一个浮点核心。