Forum: FPGA, VHDL & Co. for_schleife mit std_logic Signal


von for_user (Gast)


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!

von Klaus F. (kfalser)


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.

von Valko Z. (hydravliska)


Lesenswert?

Was erwartest du denn?

So wie das geschrieben ist "s_signal2" eine ODER-Verknüpfung von 
"s_data_valid".

"i=7" ist nicht die letzte Zuweisung. Wenn s_data_valid(7) = '0' dann 
wird nixx zugewiesen.

Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Valko Zapalko schrieb:
> Wenn s_data_valid(7) = '0' dann wird nixx zugewiesen.
Es wird nichts Neues mehr zugewiesen. s_data_valid behält also 
einfach den Wert von der vorigen Runde mit i=6...

: Bearbeitet durch Moderator
von Valko Z. (hydravliska)


Lesenswert?

Das war schlecht ausgedrückt von mir sorry :)

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
Noch kein Account? Hier anmelden.