Ich multipliziere zwei signed Zahlen (16 Bit) und (8Bit) in einen
24Bit-Vektor, was offenbar funktioniert und im ModelSIM auch korrekt
angezeigt wird. Da ich mit 16 Bit weiterrechnen muss, möchte ich runden
und teilen.
Daher habe ich folgendes:
1 | ergebnis24_temp <= (input * faktor + 128);
|
2 | ergebnis16 <= ergebnis24_temp (23 downto 8);
|
Die "23" werden angemeckert, weil sie angeblich nicht dem signed Typ
entsprechen.
# ** Fatal: (vsim-3471) Slice range (23 downto 8) does not belong to the
prefix index range (15 downto 0).
Zuvor hatte ich probiert:
1 | ergebnis16 <= ergebnis24_temp / 256;
|
Dann war ihm aber das Ergebnis zu gross. Er will - trotzdem nie mehr als
16 bit rauskommen können - auf einen 24Bit-Vector schreiben.
Wie mache ich das am Besten?
Erst alles wieder nach std_logic_vector und dann cutten?