Forum: FPGA, VHDL & Co. Syntax Frage zu Zählvariablen


von Cihan K. (lazoboy61)


Lesenswert?

Hallo allezusammen,

habe wieder mal eine kleine Frage. Es geht um folgenden Code:
1
...
2
signal COUNT_DELAY: natural range 0 to 2;
3
4
process(clk)
5
begin
6
if clk = '1' and clk'event then
7
   ...
8
   if START = '1' then -- irgendeine Start-Bedingung
9
      if COUNT_DELAY = 0 then
10
         COUNT_DELAY <= 2;                -- *** (1)
11
         ...
12
         if END = '1' then
13
            COUNT_DELAY <= 0;             -- *** (2)
14
            START <= '0';
15
         end if;
16
      elsif COUNT_DELAY > 0 then
17
         COUNT_DELAY <= COUNT_DELAY - 1;
18
      end if;
19
   end if;
20
end if;
21
end process;
22
...

Meine Frage beläuft sich auf die Zeilen mit den ***. Wenn die Bedingung 
START erfüllt ist, startet die Funktion und jedesmal wenn die Funktion 
aufgerufen wird ein Delay = 2 gesetzt (siehe (1)). Irgendwann wird nun 
die Endbedingung END = 1 aufgerufen, sodass nun COUNT_DELAY = 0 (siehe 
(2)) gesetzt wird. Doch aber noch im gleichem Takt wird das Delay auf 2 
gesetzt, d.h. konkret, welchen Wert würde COUNT_DELAY beim Verlassen der 
Funktion einnehmen? 2 oder 0?

Gruß Cihan

von T. M. (xgcfx)


Lesenswert?

Cihan Kalayci schrieb:
1
...
2
if COUNT_DELAY = 0 then
3
         COUNT_DELAY <= 2;                -- *** (1)
4
         ...
5
         if END = '1' then
6
            COUNT_DELAY <= 0;             -- *** (2)
7
            START <= '0';
8
         end if;
9
...

Wenn COUNT_DELAY = 0 und END = '1' ist, bleibt COUNT_DELAY auf 0. Die 
letzte Zuweisung eines Signals in einem Prozess "überschreibt" quasi 
alle vorhergehenden.

von Cihan K. (lazoboy61)


Lesenswert?

Das bedeutet also, dass man es auch so betrachten kann:
1
...
2
if COUNT_DELAY = 0 then
3
  ...       
4
  COUNT_DELAY <= 2;
5
  COUNT_DELAY <= 1;
6
  ...
7
...

Ganz grob betrachtet, wenn ich einen Signal innerhalb eines Prozesses 
zweimal hintereinander einen Wert zuweise (ergibt ja normalerweise 
keinen Sinn), dann würde COUNT_DELAY = 1 sein, oder?

Danke für die Antwort.

Cihan

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


Lesenswert?

Es ist bei einem VHDL Prozess bei Zuweisungen an Signale genau andersrum 
wie im echten Leben: die Letzte gewinnt.
Und was viel wichtiger ist: bis zum Ende des Prozesses ändert sich der 
Wert des Signals überhaupt nicht!

von Cihan K. (lazoboy61)


Lesenswert?

Super, Danke für die Aufklärungen.

Ihr habt mir geholfen.

Cihan

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.