vhdl typumwandlung

OP #6020350
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.