signed division in VHDL

Gast #1362748
Lesenswert?

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?
Gast #1362925
Lesenswert?

Problem gelöst! Ich hatte nur einen Kopierfehler und bezog mich auf das 
falsche Signal, das zu cutten war. So, wie es oben ist, geht es nämlich 
sehr wohl.

Ich verwende die Definitionenen:
1
use IEEE.std_logic_1164.all;
2
--use IEEE.std_logic_misc.all;
3
-- use IEEE.std_logic_arith.all;
4
-- use IEEE.std_logic_signed.all;
5
-- use IEEE.std_logic_signed.all;
6
use IEEE.numeric_std.all;
7

8
signal ergebnis : ergebnis24_temp (23 downto 0) := to_signed (0,24);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren