Buch Reichardt/Schwarz: Frage zu while Schlaufe

#1268167
Lesenswert?

Hallo zusammen,
einige haben sicher auch das Buch"VHDL Synthese" von Reichardt/Schwarz, 
mir liegt es in der 4.Auflage vor.

Aus Urheberrechtsgründen zitiere ich das Problem hier nicht komplett, es 
mögen doch bitte diejenigen im Buch nachsehen, welche es auch haben ;-)

Zum Problem:
In Kapitel 3.2.3.2 wird der while loop erklärt. Im Beispielcode auf 
Seite 42, Code 3-9, wird ein process gezeigt, der wie folgt aufgebaut 
ist:
1
P: process
2
  variable PAR: boolean;
3
  begin
4
    wait until (CLK'event and CLK='1')
5
    if START then
6
      ..
7
      while not STOP loop
8
        ..
9
        wait until (CLK'event and CLK='1')
10
      end loop;
11
    end if;
12
end process P;

Wie ist hier das zweite "wait until" zu verstehen? Warten auf eine 
einzelne weitere Taktflanke? Nach der Beschreibung müsste gewartet 
werden, bis erneut START eintrifft.

Kann mir das jemand noch etwas durchleuchten?

Gruss, Martin
#1269439
Lesenswert?

Lothar Miller schrieb:
> Fazit: Gewöhne dir diesen Stil (vorerst) nicht an.

Das habe ich nicht vor, keine Angst.

Bei mir sind die Prozesse ungefähr so aufgebaut:
1
process (CLK)
2
  begin
3
    if rising_edge(CLK) then
4
      if (RST) then
5
        -- sync reset wo nötig
6
        ...
7
      else
8
        -- work to do
9
        ...
10
      end if;
11
    end if;
12
end process;

Da könnte man gemäss deiner Homepage noch diskutieren, ob die 
sensitivity list überhaupt nötig ist.
Auch die Frage, ob jetzt rising_edge() oder die andere Schreibweise 
"richtiger" ist, ist nicht abschliessend geklärt.
#1269838
Lesenswert?

Lothar Miller schrieb:
> Sieh dir die Funktion von
>> rising_edge()
> mal genauer an und entscheide selber....
>
> Ich nehme es abgesehen von der Simulationsthematik hauptsächlich, weil
> es sich schöner liest...

Ich nehme rising_edge() auch weil es einfacher zu lesen ist. Die 
marginalen Unterschiede in der Simulation stören mich nicht, weil der 
Takt bei mir in der Testbench sowieso nie etwas anderes als 0 oder 1 
ist.

Meine Infos stammen von hier:
Beitrag "CLK'event oder rising_edge(clk)"
http://www.mikrocontroller.net/articles/VHDL#CLK.3D.271.27_and_CLK.27event_oder_rising_edge.28.29.3F
sowie weiteren Freds in diesem Forum.

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