2016-04-01 15 views
0

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 
+0

des 'assign' im Anfangsblock – Greg

+0

Verwenden Befreien Sie' immer @ * 'oder' always_comb' statt manuelle Empfindlichkeitsliste. – sharvil111

Antwort

0
initial begin   
assign C_m_tmp = 46'b0; 
end 

gibt es keine Notwendigkeit des obigen Codes.

Stattdessen können Sie tun

[email protected](C_m_tmp)begin 
C_m_tmp = 'b0; 
     if (C_m_tmp[45] == 1) begin 
      C_e_tmp = C_e_tmp + 1'b1; 
     end 

    end 
+0

Ich musste C_m_tmp in einem anderen Block initialisieren, aber es war der erste Block, der den Code durcheinander brachte. Vielen Dank. – willieG