vhdl typumwandlung

OP #6020350
Lesenswert?

Moin,


Ich hab' sowas:
1
signal vcl : integer range 0 to 2047;
2
signal evenodd : std_logic;


Wie greif' ich denn da in VHDL auf's LSB von vcl zu?
Also sows von dem Kaliber:
1
if (LSB_von(vcl) = evenodd) then
2
  ...
3
else
4
  ...
5
end if;

Das kotzt mich grad wieder ordentlich an bei vhdl. Da wird sich 
angestellt wie ein Profi-Informatiker, weil die Typen nicht 100% 
zusammenpassen wollen. Aber wenn man mal 2 std_logic_vector mit 
(versehentlich) unterschiedlichen laengen auf Groesse vergleicht, da 
geht natuerlich alles OK. Da muss man nicht mal ne Warning schmeissen. 
Grmpf.

Gruss
WK
Gast #6020368
Lesenswert?

Ich würde es so probieren:

> signal vcl : integer range 0 to 2047;
> signal evenodd : std_logic;

signal vcl_uns : unsigned( 10 downto 0);

vcl_uns <= unsigned( vcl);

if vcl_uns(0) = evenodd then
>   ...
> else
>   ...
> end if;



Dergute W. schrieb:
> Aber wenn man mal 2 std_logic_vector mit
> (versehentlich) unterschiedlichen laengen auf Groesse vergleicht
Nimmt da etwa jemand noch std_logic_arith?!?

Duke
Gast #6020437
Lesenswert?

Lothar M. schrieb:
>> vclstlv <= std_logic_vector(to_unsigned(vcl,11));
> Den Cast zum std_logic_vector kannst du im Prinzip weglassen, denn auch
> von einem unsigned Vektor lassen sich einzelne Bits indizieren.

Und damits noch universeller wird:
1
vclstlv <= std_logic_vector(to_unsigned(vcl, vclstlv'legnth));


Maus
Gast #6020446
Lesenswert?

Dergute W. schrieb:
> Moin,
>
> Merci - ich seh' schon: An der Grundproblematik aendert sich nix.
> Elegant isses nicht. Naja. Maguggn obs geht...

Wir sind hier aber nicht auf dem Bolschoi Theater beim Schwanensee, hier 
geht's nicht um Eleganz, sondern um lösungsorientiertes Code 
runterschreiben.
Diese Geseire um "Eleganz" ist so ziemlich das Gegenteil von "geradlinig 
auf die Problemlösung zu arbeiten".
Gast #6020452
Lesenswert?

Es geht bei Eleganz und zwei Dinge : Schreibarbeit und Lesbarkeit. 
Beides ist bei VHDL und konkret dem Konstrukt so dolle  nicht.

Maus schrieb:
> vclstlv <= std_logic_vector(to_unsigned(vcl, vclstlv'legnth));

Ich würde "length" nehmen und darüber nachdenken, ob man dem Vector 
nicht einen aussagefähigen Namen verpasst. Sowas wie:

Katze.Type <= conv_to_std_animal (resize (Maus.Type, size_of (Maus) * 
10);
Gast #6020496
Lesenswert?

Lothar M. schrieb:
> ... to_unsigned(vcl);
> bringt hier weniger Fehlermeldungen ;-)
Ja, natürlich. Die Modelsim-Session war schon wieder zu für heute...

Dergute W. schrieb:
> Aber wenn man mal 2 std_logic_vector mit
> (versehentlich) unterschiedlichen laengen auf Groesse vergleicht, da
> geht natuerlich alles OK.
Das andere Problem ist doch viel interessanter als der Syntaxkram:

WIMRE hatte ich auch mal den Fall, wo
1
signal vec5 : std_logic_vector( 2 downto 0) := "101";
2
signal vec3 : std_logic_vector( 1 downto 0) := "11";
3

4
if vec5 < vec3 then
5
...
ohne Warnung 'true' war. Da habe ich auch eine Weile nach dem Fehler 
suchen müssen.

Wenn man den Code auf numeric_std umstellt, kommt auch die erwartete 
Warnung beim Cast auf unsigned.

Duke

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