2016-11-13 4 views
0

ich versuche, zwei 32-Bit-signierte gebrochene Zahl (1 Vorzeichenbit, 8-Bit-Ganzzahl, 23 Bit-Fraktion) zu multiplizierenVerilog Multiplikationsergebnisse ist Null?

die ersten ist

32'b0_00000001_00000000000000000000000 // 1.00

die 2. ist

32'b0_00000100_00000000000000000000000 // 4.00

, wenn ich zum Beispiel so tun

Ausgabe signiert [31: 0] a;

assign a = 32'b0_00000001_00000000000000000000000 * 32'b0_00000100_00000000000000000000000;

das Ergebnis ist Null? Warum ist es nicht 4?

bitte bitte helfen Sie mir in welchem ​​Teil ich irre und was soll ich tun. vielen Dank

Grüße

Isaac

Antwort

0

Weil Sie ein 64-Bit-Wert auf einen 32-Bit-Draht zuweisen möchten, und Verilog den Wert, halten nur die unteren 32 Bits des Ergebnisses wird gestutzt , was null ist.

ein richtiges Ergebnis zu haben, Sie können dies tun:

module mult; 
    reg [31:0] a = 32'b0_00000001_00000000000000000000000; // 1.0 
    reg [31:0] b = 32'b0_00000100_00000000000000000000000; // 4.0 

    reg [63:0] t; 
    reg [31:0] c; 

    initial begin 
    t = a * b; 
    c = t[54:23]; 

    $display ("%b",c); 
    $finish; 
    end 
endmodule 
+0

ich danke Ihnen sehr für Ihre Bemühungen und Antwort, ich wirklich zu schätzen: D –