Wann nimmt man "Wait until." und wann "If.." ?

Gast #3824080
Hallo, guten Tag.
ZU welchen Zweck mit man das eine oder das andere?

Danke.
Gruss

-------------------------
process
begin
  wait until rising_edge(clock);
  .....
-------------------------

-------------------------
if rising_edge(clk50_in) then
  ......
end if;
------------------------
Moderator (Firma: Titel) Persönliche Seite #3824106
peter schrieb:
> ZU welchen Zweck mit man das eine oder das andere?
So wie es hier dasteht ist es gleichwertig.
Die Variante mit "if reset ... elsif rising_edge(clk)" ist sinnvoll, 
wenn man ein Flipflop mitasynchronem Reset beschreiben will. Bei der 
Schreibweise mit "wait until rising_edge(clk)" wird garantiert ein 
synchrones Design und ein synchroner Reset (wenn überhaupt nötig) 
erzeugt.

Siehe dort unten: 
http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
Gast #3824337
mit "wait until rising_edge(clk)"
kann man bequem für Testbenches nehmen

z.B.
1
process
2
begin
3
  wait until rising_edge(clock);
4
  Signal <= 1;
5

6
  wait until rising_edge(clock);
7
  Signal <= 2
8

9
  wait until rising_edge(Trigger_signal);
10
  Signal <= 2;
11
end process

mit der anderen Beschreibung definiert man kontrollierter die FFs.
Moderator (Firma: Titel) Persönliche Seite #3824418
P_ Richner schrieb:
> Aus meiner Sicht
Ist das Software-Sicht?

Es ist einfach so, dass aus jeder der beiden Beschreibungen immer ein 
Flipflop entsteht. Nur kann mit der "if elsif endif" Variante auch eines 
mit asynchronem Reset erzeugt werden. Bei der Variante mit "wait until" 
nur eines mit synchronem Reset.

> Bei If geht das Programm weiter
Es ist nach wie vor kein Programm, weil es nicht VHPL sondern VHDL 
heißt.
Gast #3825424
Lothar Miller schrieb:
> Klakx schrieb:
>> mit der anderen Beschreibung definiert man kontrollierter die FFs.
> Was bedeutet "kontrollierter"?
> Auf welche Hardware beziehst du diese Aussage?
>

Es ist z.b. eine mögliche Beschreibung für FPGA und ASIC, die kompatibel 
zu Coding-Checker in Standardeinstellungen ist. "kontrollierter" ist 
vielleicht streitbar, ich sehe jedoch in dieser Struktur einfacher die 
Umsetzung.

>> mit "wait until rising_edge(clk)"
>> kann man bequem für Testbenches nehmen
> Du hast den Link nicht angeklickt oder die Mitte der verlinkten Seite
> überblättert. Stimmts?

Ich habe nur meine Herangehensweise beschrieben. Um den Vergleich der 
Synthesefähigkeit oder anderen Dingen ging es mir nicht. Deine Seite ist 
gut beschrieben.
Moderator (Firma: Titel) Persönliche Seite #3825497
Klakx schrieb:
> Es ist z.b. eine mögliche Beschreibung für FPGA und ASIC
Es liegt in der Natur von ASICs, dass der Reset-Pfad dort natürlich 
extra in die Hand genommen und deshalb auch auscodiert werden muss. Bei 
SRAM-FPGAs ist das nicht nötig, weil bis zum Start des Designs sowieso 
schon alle Flipflops aus dem Config-Prom geladen wurden.

Meine Verallgemeinerung in Richtung FPGA basiert auf dem Titel des 
Forums und der Tatsache, dass der weit überwiegende Teil der VHDL 
Anwender FPGAs beschreibt...
Gast #3831869
wait until wird nur in Testbenches verwendet, da sich der VHDL-Code 
sonst nicht synthetisieren lässt.

Eine saubere Struktur für einen getakteten Prozess sieht so aus:

LABEL: process(CLOCK,RESET)
begin
    if RESET = '0' then
        --hier Reset Logik
    elsif rising_edge(CLOCK) then
        --hier getaktete Logik
    end if;
end process LABEL;

Die Struktur ist auch einleuchtend, wenn man sie mit der Struktur eines 
Flip-Flops vergleicht, welches auf eine Taktflanke reagiert (auch nur 
auf eine!! nur ein rising_edge bzw. falling_edge auch wenn es Ausnahmen 
gibt).
Ein normales FlipFlop reagiert auf nur eine Taktflanke und hat einen 
asynchronen Reset.

VG,

Nuxlio
Gast #3831919
>> wait until wird nur in Testbenches verwendet, da sich der VHDL-Code
>> sonst nicht synthetisieren lässt.

Das stimmt so nicht! Siehe: 
http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html

Wäre aber schon aufgefallen, wenn man den Thread durchgelesen hätte. 
Z.B.:
Lothar Miller schrieb:
> peter schrieb:
>> ZU welchen Zweck mit man das eine oder das andere?
> So wie es hier dasteht ist es gleichwertig.
> Die Variante mit "if reset ... elsif rising_edge(clk)" ist sinnvoll,
> wenn man ein Flipflop mitasynchronem Reset beschreiben will. Bei der
> Schreibweise mit "wait until rising_edge(clk)" wird garantiert ein
> synchrones Design und ein synchroner Reset (wenn überhaupt nötig)
> erzeugt.
>
> Siehe dort unten:
> http://www.lothar-miller.de/s9y/categories/34-Getakteter-Prozess
Moderator (Firma: Titel) Persönliche Seite #3832299
Nuxlio schrieb:
> Ein normales FlipFlop reagiert auf nur eine Taktflanke und hat einen
> asynchronen Reset.
Was ist "normal"? Ein synchrones Flipflop, wie es bei Xilinx seit der 
Spartan3 Serie "Standard" ist, hat keinen asynchronen Reset.

> Eine saubere Struktur für einen getakteten Prozess sieht so aus:
Mit diesen Allgemeinfloskeln aus dem letzten Jahrtausend sollte man sehr 
aufpassen! Siehe den Beitrag "Re: Hardware mit VHDL "richtig" beschreiben."

Fazit: /eine saubere Struktur für einen getakteten Prozess sieht so 
aus/, wie es im Handbuch zum FPGA und zum Synthesizer beschrieben ist.

Vor allem MUSS man beim Einsatz eines asynchronen Resets UNBEDINGT 
darauf hinweisen, dass das Resetsignal in jedem Fall trotzdem 
einsynchronisiert werden MUSS! Sonst passiert nämlich das wie dort in 
der Mitte: 
http://www.lothar-miller.de/s9y/categories/35-Einsynchronisieren
Und das halbe Design startet evtl. jetzt gleich, und der Rest erst einen 
Takt später. Das ist dann der Fall, wenn das Design manchmal nicht 
"anläuft". Wenn es aber läuft, dann problemlos tagelang...

> wait until wird nur in Testbenches verwendet, da sich der VHDL-Code
> sonst nicht synthetisieren lässt.
Ein "wait until" kann jeder Synthesizer schon locker seit 5 Jahren in 
Hardware umsetzen. Und manche sogar noch mehr: 
http://www.lothar-miller.de/s9y/archives/47-wait-im-Prozess.html

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.