Forum: FPGA, VHDL & Co. Buch Reichardt/Schwarz: Frage zu while Schlaufe


von Martin K. (mkohler)


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

von SuperWilly (Gast)


Lesenswert?

Es wird die Anzahl Takte gewartet, solange die STOP-Bedingugn greift,
d.h. sobald die Schleife betreten wurde, ist START irrelevant.

Gruß,
SuperWilly

von Martin K. (mkohler)


Lesenswert?

SuperWilly schrieb:
> d.h. sobald die Schleife betreten wurde, ist START irrelevant.
Jetzt ist der Groschen gefallen, danke!

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


Lesenswert?

> Kann mir das jemand noch etwas durchleuchten?
Und im Auge behalten:
Die Autoren schreiben selber, diese Beschreibung sei das extremste, was 
heutige Synthesetools noch in Harware umsetzen können.

Fazit: Gewöhne dir diesen Stil (vorerst) nicht an.

von Martin K. (mkohler)


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.

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


Lesenswert?

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...

von Martin K. (mkohler)


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.

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.