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).
对于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 无法立即处理浮点数。您需要实现或导入一个浮点核心。
我想得到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).
对于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 无法立即处理浮点数。您需要实现或导入一个浮点核心。