komischer fehler in vhdl mit modelsim

Gast #2273825
Lesenswert?
• ▲
▼
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
Gast #2274268
Lesenswert?
• ▲
▼
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
Gast #2274362
Lesenswert?
• ▲
▼
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
Gast #2274402
Lesenswert?
• ▲
▼
>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

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