Hallihallo, Um zwei Bits in einem Vektor zu löschen, wollte ich folgende VHDL-Zeile verwenden: signal vec:std_logic_vector(7 downto 0); signal logic_bit1:std_logic_vector(7 downto 0); signal logic_bit2:std_logic_vector(7 downto 0); .... vec <= (7 downto 0 => '1'); logic_bit1 <= (7 downto 0 => '0'); logic_bit2 <= (7 downto 0 => '0'); logic_bit1(0) <= '1'; logic_bit2(1) <= '1'; vec <= vec and (not(logic_bit1 or logic_bit2)); somit sollte eigentlich 1111 1100 rauskommen ... aber leider ändert sich bei mir in modelsim nichts. nur wenn ich in meiner testbench schreibe: variable tmp:std_logic_vector(7 downto 0); ... tmp <= logic_bit1 or logic_bit2; vec <= vec and (not tmp); kommt am ende das richtige ergebnis raus. ist es nicht möglich beliebig viele erschachtelungen von bitverküpfungen in modelsim zu beschreiben? mfg
Könntest du deinen kompletten Code zeigen? Mit den gezeigten Bruchstücken sollte in Modelsim fast alles undefiniert sein. IsKlar
mikrofriendly schrieb: > variable tmp:std_logic_vector(7 downto 0); > ... > tmp <= logic_bit1 or logic_bit2; das sollte dir ModelSim allerdings schon um die Ohren hauen!
Die ganzen Zuweisungen stehen in einem >Process< und die >Sensitive Lit< ist nicht vollständig?
Hallo, Es handelt sich um eine Testbench. Ich habe keine sensitivity list :) architecture ... signal vec:std_logic_vector(7 downto 0):= x"FF"; signal logic_bit1:std_logic_vector(7 downto 0):= x"01"; signal logic_bit2:std_logic_vector(7 downto 0):= x"02"; begin ... process begin wait on irgendeinsignal; vec <= vec and (not(logic_bit1 or logic_bit2)); end process; -- hier sollte 1111 1100 rauskommen, wenn sich etwas -- an irgendeinsignal aendert, leider erscheint 1111 1111 tmp <= logic_bit1 or logic_bit2; vec <= vec and (not tmp); process variable tmp:std_logic_vector(7 downto 0); begin wait on irgendeinsignal2; tmp <= logic_bit1 or logic_bit2; vec <= vec and (not tmp); end process; -- hier kommt 1111 1100 raus
mikrofriendly schrieb: > tmp <= logic_bit1 or logic_bit2; > vec <= vec and (not tmp); > > > > process > variable tmp:std_logic_vector(7 downto 0); > begin > > wait on irgendeinsignal2; > > tmp <= logic_bit1 or logic_bit2; > vec <= vec and (not tmp); > > end process; -- hier kommt 1111 1100 raus wie schon oben bemerkt: tmp := ... waere richtig (variable). Und ausserdem kannst du dann oben nicht ausserhalb des process tmp <= ... schreiben, da ist es naemlich concurrent und muss dann ein signal sein, keine variable
>wie schon oben bemerkt: tmp := ... waere richtig (variable). Und >ausserdem kannst du dann oben nicht ausserhalb des process tmp <= ... >schreiben, da ist es naemlich concurrent und muss dann ein signal sein, >keine variable Da hast du recht, sorry ich hab das eben mal schnell geschreiben ohne zu guggn was der compiler dazu sagt. in meiner testbench, habe ich natürlich keine signale auf denen schreibend in mehreren prozessen zugergiffn wird. mfg
Mal abgesehen von dem Fehler, den ich nicht ganz nachvollziehen kann - ist das nicht ein wenig arg umständlich, auf diese Weise bits zu nullen??
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.