unsigned zu std_logic_vector typecast problem

Gast #1833499
Lesenswert?

Hallo!

Ich bin hier am verzweifeln, deswegen bitte ich euch um Hilfe. Folgendes 
Problem:

in der Entity ist definiert:
1
data_out : out std_logic_vector(11 downto 0);

und als Signal:
1
result : unsigned(10 downto 0);

im Code kommt dann folgende Anweisung:
1
data_out <= std_logic_vector(resize(result(10 downto 2)),data_out'high));

Letzteres gibt mir immer falsche Ergebnisse. Wenn ich das resize 
wegnehme sehe ich, das dem Ausgang immer die komplette Vectorbreite vom 
Signal übergeben wird, obwohl ich die doch durch das (10 downto 2) 
eingegrenzt habe - die letzten beiden Bits werden immer mit 
"bearbeitet"!?

Wie kann ich das umgehen? Freue mich über jede Antwort!

Vielen Dank

Thomas
Gast #1833784
Lesenswert?

Ach, tut mir leid - ich habe vergessen zu schreiben, dass der unsigned 
Wert an anderer Stelle auf signed gecastet wird. Müsste dem
1
....result(10 downto 0)...

auch in dem Fall nur ein ... "000" & ... vorangestellt werden?

Gruß

Thomas
Moderator (Firma: Titel) Persönliche Seite #1834714
Lesenswert?

Thomas schrieb:
>> data_out <= std_logic_vector(resize(result(10 downto 2)),data_out'high));
> Letzteres gibt mir immer falsche Ergebnisse.
Was ist falsch?
1. da sind zuviele Klammern: 3 auf, 4 zu...
std_logic_vector(((  ))));
2. die Klammer ist falsch: resize braucht die Breite, nicht der cast auf 
den Vektor...
3. 'high ist eins zu wenig. Du solltest 'length nehmen...
std_logic_vector(  resize(result(10 downto 2), data_out'lenght) );

> dass der unsigned Wert an anderer Stelle auf signed gecastet wird.
> Müsste dem
> ....result(10 downto 0)...
> auch in dem Fall nur ein ... "000" & ... vorangestellt werden?
Ja. Denn es ändert sich dabei nichts am Vorzeichen.

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