Unsigned zu Signed Fehlermeldungen in Modelsim

Gast #2711345
Lesenswert?
• ▲
▼
Hallo,
ich habe folgenden Code um meine Eingangssignale die in unsigned(5 
downto 1), also 0..63 vorliegen in den Wertebereich von signed -32..31 
zu verschieben:
1
signal din : unsigned(Width downto 0);
2
signal d_r : signed(Width downto 0);
3
signal dout : signed(Width downto 0);
4

5
d_r <= signed(din);
6
dout  <= d_r + 2**(Width-1);

Funktioniert auch so wie es soll, allerdings bekomme ich viele Warnungen 
in Modelsim dieser Art:

# ** Warning: NUMERIC_STD.TO_SIGNED: vector truncated
#    Time: 592 ns  Iteration: 0  Instance: /xxx

Wie kann ich das warnungsfrei schreiben?

gruß und danke schonmal,

Simon
Gast #2711428
Lesenswert?
• ▲
▼
Die Frage ist doch was passieren soll.

unsigned passt nunmal nicht in signed, er weiß nicht was er mit Zahlen > 
31 machen soll.

Wenns nur um 0..31 geht dürfte sowas funktionieren:

d_r <= '0' & signed(din(Width-1 downto 0));
Gast #2712044
Lesenswert?
• ▲
▼
Lothar, hier ist die ausgefüllte Tabelle. Wie gesagt, es kommt das raus, 
was ich haben möchte. Nur die Warnungen stören mich.

Das hier teilweise Überläufe stattfinden ist mir klar und ist ja auch 
beabsichtigt. Geht es vielleicht eleganter (bei gleichem oder besserem 
Ressourcenverbrauch)?

unsigned  | signed
----------+-------
  0       | -32
  1       | -31
 30       | -2
 31       | -1
 32       | 0
 62       | 30
 63       | 31

Ich werde mal den Tipp mit 2**(Width-1) als unsigned Konstante 
ausprobieren.

Danke für eure Hilfe schonmal!
Gast #2712626
Lesenswert?
• ▲
▼
Dass sich durch die Addition nur das höchste Bit invertiert hätte mir 
eigentlich auch auffallen können...

Danke Lothar, so werde ich es umsetzen.

Im ersten Post hätte es übrigens bei den Signaldeklarationen (Width-1 
downto 0) heißen müssen.

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