Ich möchte die 16-Bit-Daten für die Fließkommamultiplikation erhalten, aber die Ergebnisse waren falsch und nicht das, was ich gefordert habe.
module calc(input [15:0]a, b,
output [15:0]o);
assign o = a * b;
endmodule
hier ist die testbench:
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
Antworten:
0 für die Antwort № 1Wenn Sie das ausführen, sollten Sie folgende Warnungen erhalten:
Port size (16 or 16) does not match connection size (64)
for port "a". The port definition is at: calc.sv(2).
Zuma
,b
und o
, wie Sie sie als 16 Bit definiert haben und reelle 64 Bit.
Wenn Sie nur den Port auf 64 Bit ändern, wird Verilog bei der Übergabe einer 64-Bit-Ganzzahl denken. Sie müssen die Ports des Typs real machen:
module calc(
input real a,
input real b,
output real o
);
assign o = a * b;
endmodule
Beachten Sie, dass dies nicht synthetisierbar ist. Synthesisable Verilog kann Floating Point nicht sofort verarbeiten. Sie müssen einen Gleitkommakern implementieren oder importieren.