Forum: FPGA, VHDL & Co. unsigned zu std_logic_vector typecast problem


von Thomas (Gast)


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

von Jan M. (mueschel)


Lesenswert?

Du möchtest die oberen 9 bits von result in die unteren 9 bits von 
data_out geben und die oberen 3 Bit von data_out auf 0 setzen? Das 
kannst du so machen:

> data_out(8 downto 0) <= std_logic_vector(result);
> data_out(11 downto 9)<= "000";

von Ich (Gast)


Lesenswert?

> data_out(8 downto 0) <= std_logic_vector(result);
> data_out(11 downto 9)<= "000";

oder noch einfacher so:

data_out <= "000" & std_logic_vector(result);


Gruß

Ich

von Thomas (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.