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!
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. –