Hallo, nachdem ich bisher nur mit Verilog programmiert habe, versuche ich mich nun einmal kurz an VHDL. Hmmm, scheitern tue ich schon an den einfachsten Sachen: 1. signal dreg : std_logic_vector(2 downto 0); if dreg = x"7" then Hier scheitert der Vergleich mit dem Hinweis, dass der Arrayvergleich immer FALSE sei. 2. if dreg = std_logic_vector(to_unsigned(7, dreg'length)) then Das scheint zu funktionieren. 3. if dreg = std_logic_vector(to_unsigned(x"7", dreg'length)) then Das hier nicht. Was ist an x"7" nicht ok? Evtl. wäre jemand so nett, mich aufzuklären. Vielen Dank.
x"7" sind 4 bit, dein Vector hat nur 3. nimm "111" dann sollte es gehen.
Danke sehr. Allerdings gefällt mir die binäre Schreibweise nicht unbedingt. Wenns 23 bit sind, wirds etwas unübersichtlich. Mit Verilog würde ich die Konstante wie folgt schreiben: 3'h7. Gibt es nicht entsprechendes in VHDL?
Ich beantworte meine Frage der Vollständigkeit halber selbst. Seit VHDL 2008 können Konstanten auch so formuliert werden: 3x"7".
Wie wäre es mit "others" oder x"123456" als Hex? Wenn es mit der Vektorlänge nicht passt, dann erweitert man ihn auf ein komplettes nibble, oder man nutzt einen Konversion ds Vektors und vergleicht auf den integer-Wert. Festvergleiche sollte man ohnehin aus Gründen der Pflegbarkeit mit Konstanten durchführen, aus deren Name die Funktion hervor geht.
Es geht auch mit "Stückeln" um zB. 7 bit zu erhalten if vec = "010" & x"4" then
oder auch gerne genommen if vec = (vec'range => '1') then
Danke für all die Alternativen. Am besten gefällt mir dennoch: if dreg = 3x"7" then
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.