verilog中的浮点数乘法

时间:2015-03-08 07:10:39

标签: floating-point verilog multiplication

我想得到浮点乘法的16位数据,但是结果是错误的而不是我要求的。那么真的必须是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

1 个答案:

答案 0 :(得分:0)

当你运行这个时,你应该得到警告:

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无法处理开箱即用的浮点数。您需要实现或导入浮点核心。