for_schleife mit std_logic Signal

Gast #3969454
Lesenswert?

Hallo,

ich habe folgendes Konstrukt:
1
signal s_signal1 : std_logic_vector( 7 DOWNTO 0);
2
signal s_signal2 : std_logic;
3
...
4
FOR i IN 0 TO 7 LOOP
5
  IF s_data_valid(i) = '1' THEN
6
    s_signal1(i) <= '1';
7
    s_signal2    <= '1';
8
  END IF;
9
END LOOP;

s_signal1 wird also komplett auf '1' gesetzt.
Aber was genau passiert mit s_signal2?

Nimmt es den Zustand von i=7 an, weil es die letzten Zuweisung im 
Prozess ist?
Oder ist sowas nicht erlaubt und der Compiler müsste eigentlich sowas 
wie "multiple drivers" melden, was er aber nicht tut?

Ich simuliere gerade an einer dieser Stellen und erhalte nicht das von 
mir erwartete Verhalten :)

Vielen Dank!
#3969498
Lesenswert?

for_user schrieb:
> Nimmt es den Zustand von i=7 an, weil es die letzten Zuweisung im
> Prozess ist?

Jein.
Vom größten i, bei dem s_data_valid(i) = '1' erfüllt war.

for_user schrieb:
> Oder ist sowas nicht erlaubt und der Compiler müsste eigentlich sowas
> wie "multiple drivers" melden, was er aber nicht tut?

Bei der Simulation gibt es keine "multiple drivers", nur bei der 
Synthese.
Außerdem hat man "multiple drivers" nur dann, wenn s_signal2 von 
unterschiedlichen Prozessen aus geschrieben wird.
Deine Loop Schleife ist aber innerhalb desselben Prozesses.

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