我想得到浮点乘法的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
答案 0 :(得分:0)
当你运行这个时,你应该得到警告:
Port size (16 or 16) does not match connection size (64)
for port 'a'. The port definition is at: calc.sv(2).
对于a
,b
和o
,因为您已将它们定义为16位且实数为64位。
只需将端口更改为64位将使verilog认为您传递的是64位整数。您需要创建类型为real的端口:
module calc(
input real a,
input real b,
output real o
);
assign o = a * b;
endmodule
请注意,这不可合成。 Synthesisable Verilog无法处理开箱即用的浮点数。您需要实现或导入浮点核心。