Ich versuche, einen Verilog-Code zu schreiben, der zwei Gleitkommazahlen multipliziert. Der Versuch, sich durch Verschieben und Hinzufügen auf zwei Mantisse zu vervielfachen, ist der Punkt, an dem ich in Schwierigkeiten gerate. Das Problem ist, dass wenn ich versuche, die Variable "shift and add", C_m_tmp, zu aktualisieren, nichts passiert (C_m_tmp = C_m_tmp + tmp;). Ich habe alle Code-Blöcke weggelassen, die für mein Problem nicht relevant sind. Kann mir jemand sagen, dass ich falsch liege?Zusatz funktioniert nicht in For-Schleife Verilog
`timescale 1ns/1ps
module float_mult(A_m, B_m, C_m);
input [22:0]A_m, B_m;
output [45:0]C_m;
reg [45:0] C_m_tmp;
reg [22:0] A_m_tmp;
reg [22:0] B_m_tmp;
reg [45:0] tmp;
reg [4:0]i;
initial begin
assign C_m_tmp = 46'b0;
end
//need to remove the leading one from mantissas
[email protected] (A_m) begin
A_m_tmp = A_m >> 1;
A_m_tmp = A_m_tmp^23'b10000000000000000000000;
end
[email protected] (B_m) begin
B_m_tmp = B_m >> 1;
B_m_tmp = B_m_tmp^23'b10000000000000000000000;
end
[email protected](A_m_tmp, B_m_tmp) begin
for (i=0; i <=22; i=i+1)
if (B_m_tmp[i] == 1)begin
tmp = {23'b0,A_m_tmp};
tmp = tmp <<i;
C_m_tmp = C_m_tmp + tmp; //this line does nothing
end
end
[email protected](C_m_tmp)begin
if (C_m_tmp[45] == 1) begin
C_e_tmp = C_e_tmp + 1'b1;
end
end
assign C_e = C_e_tmp + 8'b01111111;
assign C_m = C_m_tmp[45:23];
assign C_s = C_s_tmp;
endmodule
des 'assign' im Anfangsblock – Greg
Verwenden Befreien Sie' immer @ * 'oder' always_comb' statt manuelle Empfindlichkeitsliste. – sharvil111