2016-10-07 2 views
1

Ich teste eine benutzerdefinierte Co-Prozessor-IP auf Xilinx Vivado aus. Bei der Verwendung des Operators '*' zur vorzeichenlosen Multiplikation für zwei 32-Bit-Vektoren erkannte ich, dass das Ergebnis, wenn es mehr als 32 Bit in Anspruch nimmt, nicht in den höherwertigen 32 Bits, genauer gesagt den oberen 32 Bits, widergespiegelt wird sind alle 0 und die unteren 32 Bits zeigen ihren Teil des Ergebnisses an.Umgang mit Überläufen bei Verwendung des Operators '*' in IEEE.numeric_std

16449 * 4171239345 gives 613432305 

las ich die numeric_std Bibliothek und liest:

-- Id: A.15 
    function "*" (L, R: UNSIGNED) return UNSIGNED; 
    -- Result subtype: UNSIGNED((L'LENGTH+R'LENGTH-1) downto 0). 
    -- Result: Performs the multiplication operation on two UNSIGNED vectors 
    -- that may possibly be of different lengths. 

Ist der '*' Operator für die Multiplikation von mehr als 32 Bits nicht geeignet?

danke im voraus!

+0

Lassen Sie uns ein MCVE sehen, die dieses Verhalten zeigt. Es gibt keinen Grund, warum der Operator "ieee.numeric_std.unsunsigned." * "" Auf 32 Bits beschränkt ist. –

Antwort

1

Die von Ihnen angezeigte Multiplikation scheint zu multiplizieren ganze Zahlen. Ganzzahlen sind in vhdl auf 32-Bit beschränkt und normalerweise signiert. Ihre zweite Zahl ist also zu groß, um sie darzustellen (in Hex: 0xf8a00fb1). Ohne ein bestimmtes Codebeispiel gehe ich davon aus, dass auch dieser Wert von Ihrem Simulator nicht korrekt interpretiert wird.

Die Werte unsigned von Numeric_std sind nicht auf eine bestimmte Breite beschränkt. Die Verwendung des Typs unsigned für jeden Wert vermeidet Verwirrung. Z.B. wenn Sie dies auf Signale getan werden müssen, erklären:

signal a: unsigned(31 downto 0); 
signal b: unsigned(31 downto 0); 
signal y: unsigned(63 downto 0); 

Körper:

a <= x"00004041"; 
b <= x"f8a00fb1"; 
y <= a*b; 
+0

@CasperW danke für die Erklärung !! –

+0

Gern geschehen. Vielleicht möchten Sie ein bisschen mehr Details darüber, wie Sie die Multiplikation in Ihrer Frage gemacht haben, hinzufügen, damit andere es finden können, wenn sie ein ähnliches Problem haben. – Casperrw

Verwandte Themen