Was nützt 'event in vhdl?

7

Im VHDL-Code für den synchronen Zähler habe ich den folgenden Teil ersetzt

process(clock)
begin
    if(clock'event and clock='1')then
        count <= count + 1;
    end if;
end process

mit

process(clock)
begin
    if(clock='1')then
        count <= count + 1;
    end if;
end process

Ergebnis bleibt gleich. Warum clock'eventwird dann immer die erste Art der Codierung mit empfohlen? ?

Tollin Jose
quelle
Sind Sie sicher, dass das Ergebnis das gleiche ist? Sprechen wir von einem simulierten Ergebnis oder einer Implementierung dieses Codes durch Logikgatter?
Vladimir Cravero
Die Kombination von beiden dient zur Angabe einer steigenden Flanke. clock'event ist eine Änderung der Uhr, und clock = '1' ist der Logikpegel. Also jede Änderung, die zu logisch hoch = steigende Flanke führt.
efox29
simuliertes Ergebnis @VladimirCravero
Tollin Jose
"clock'event ist eine Änderung der Uhr", aber das Gleiche gilt, wenn wir die Uhrvariable in die Empfindlichkeitsliste des Prozesses aufnehmen. Liege ich falsch? @ efox29
Tollin Jose
Ich dachte, dass Sie mindestens ein Ereignis für eines der Signale in der Empfindlichkeitsliste benötigen, entweder ich irre mich oder Sie verwenden einen seltsamen Simulator ... Ich würde sagen, mein Gedächtnis versagt hier.
Vladimir Cravero

Antworten:

8

Die Sensitivitätsliste ist hauptsächlich ein Konzept, das vom Simulator verwendet wird, um die Ausführung von Prozessen zu planen. Ein Synthesewerkzeug verwirft normalerweise die Empfindlichkeitsliste.
Was sind die Ergebnisse, wenn die obigen Codefragmente über ein Synthesetool ausgeführt werden? Die Implementierung ohne 'eventführt zu einem Latch, da ein Synthesetool dies beim Betrachten des Codes "sieht".

Ergebnisse von Xilinx XST für if clk'event and clk = '1' then:

Adders/Subtractors : 1  
8-bit adder        : 1  
Registers          : 1  
8-bit register     : 1 

Ergebnisse von Xilinx XST für if clk = '1' then:

Adders/Subtractors : 1  
8-bit adder        : 1  
Latches            : 8  
1-bit latch        : 8

Die obigen Ergebnisse wurden durch Synthetisieren eines 8-Bit-Aufwärtszählers erhalten.

EDIT (2015-06-11): In IEEE-1076.6-1999 "IEEE-Standard für die RTL-Synthese (VHDL Register Transfer Level)" werden die Ausdrücke explizit angegeben, die "eine positive Taktflanke darstellen sollen, wenn sie als Bedingung in einer if- Anweisung verwendet werden" definiert als:

  • RISING_EDGE (clk_signal_name)
  • clk_signal_name'EVENT und clk_signal_name = '1'
  • clk_signal_name = '1' und clk_signal_name'EVENT
  • nicht clk_signal_name'STABLE und clk_signal_name = '1'
  • clk_signal_name = '1' und nicht clk_signal_name'STABLE
andrsmllr
quelle
Was meinst du damit, dass es einen Riegel schließt? Ich verstehe nicht
Goldname
9

Beginnend mit der Definition von VHDL aus Wikipedia

VHDL (VHSIC Hardware Description Language) ist eine Hardwarebeschreibungssprache, die in der elektronischen Entwurfsautomatisierung zur Beschreibung von Digital- und Mixed-Signal- Systemen wie feldprogrammierbaren Gate-Arrays und integrierten Schaltkreisen verwendet wird. VHDL kann auch als allgemeine Parallelprogrammiersprache verwendet werden.

VHDL wird hauptsächlich zur Beschreibung digitaler Schaltungen für ASIC oder FPGAs verwendet, kann jedoch für digital-analoge Systeme (Mixed-Signal) oder sogar zur Beschreibung paralleler Prozesse verwendet werden.

'Ereignis bedeutet eine Änderung eines digitalen Signals, dh eine Flanke . In Kombination mit '1' definieren Sie eine steigende Flanke . Dies ist fast dasselbe wie die Funktion running_edge (clk) . Hier der kleine Unterschied zwischen ihnen (für fortgeschrittene Benutzer).

Wenn Sie also kein Ereignis verwenden, beschreiben Sie einen Prozess, der während der hohen Stufe von clk aktiviert wurde. Beispielsweise befindet sich bei einem 40-MHz-Takt mit einem Tastverhältnis von 50% der Takt während 12,5 ns im Zustand '1'. Was passiert mit dem Zähler während dieser 12,5 ns? Wie oft wird während dieser 12,5 ns gezählt? Und das Wichtigste: Das System, in das dieser Code geschrieben wurde, kann einen Zähler mithilfe eines Taktpegels inkrementieren. Wahrscheinlich nicht, obwohl Ihr Simulator die gleichen Ergebnisse liefert. Seien Sie vorsichtig mit Simulatorergebnissen , da sich Simulatoren von Synthesizern unterscheiden und sehr unterschiedliche Ergebnisse liefern können.

VHDL ist eine generalistische Sprache , die häufig zur Beschreibung digitaler Schaltungen verwendet wird. Also, jeder Hersteller ihre optimalen Vorlagen hat zu beschreiben , Zähler, Register, Speicher ... Und clock'event und clock = ‚1‘ oder rising_edge (clk) ist de-facto - Standard eine ansteigende Flanke eines Signals in der Empfindlichkeit aufgeführt zu beschreiben Liste. Wenn Sie einen asynchronen Reset beschreiben, setzen Sie auf die gleiche Weise ein Reset-Signal in die Empfindlichkeitsliste und einen hohen oder niedrigen Pegel, der das Register immer dann initialisiert, wenn das Signal aktiviert wird, und nicht zu einem mit einer Flanke definierten Zeitpunkt.

process (clock, reset) 
begin
   if reset='1' then 
      count <= (others => '0');
   elsif clock='1' and clock'event then
      <count> <= <count> + 1;
   end if;
end process;

Zusammenfassend verwendet jeder Hersteller programmierbarer Logik einen begrenzten und definierten Satz von VHDL-Definitionen, um seine Systeme zu beschreiben. Ich empfehle Ihnen, nach den VHDL- oder Verilog-Vorlagen für Xilinx oder Altera zu suchen. Diese Vorlagen werden vom Synthesizer korrekt verstanden, um in Elemente eines bestimmten programmierbaren Logikchips oder ASIC oder anderer Systeme übersetzt zu werden.

David Quiñones
quelle
Es gibt Inkonsistenzen in dieser zitierten "Autorität", die ihre Begriffe in Wikipedia selbst nachschlägt. Was eine allgemeine Programmiersprache ist, kann sich mit einer domänenspezifischen Sprache überschneiden. Die einzige Domäne, die in VHDL vorkommt, ist die Beschreibung der Hardware. "Können Sie einen VHDL-Analysator, eine Ausarbeitung und einen Simulator in VHDL implementieren?" Und nein, Sie können nicht, obwohl Sie Hardware beschreiben können, um diese Dinge zu tun, die Hardware wäre riesig - zu groß und langsam zu simulieren, anstatt wie in einer C-Implementierung auszuführen, nicht in einer domänenspezifischen Sprache. Delta-Zyklen emulieren Parallelität, die Signalereignisse erfordert.
user8352
Was meinst du? Wollen Sie damit sagen, dass ein paralleles System in C besser beschrieben wird als in VHDL? Ich werde mich fragen, ob ein agilerer Workflow oder eine agilere Sprache zur Beschreibung von Hardware oder Parallelverarbeitungsschaltungen erstellt werden könnte. Ich erwarte das tatsächlich. HLS-Software ist nicht ausgereift genug, um optimale Ergebnisse zu erzielen.
David Quiñones
Ich sage, das unterstützende Zitat für Ihre Antwort ist nicht zutreffend.
user8352
Sie beziehen sich auf das Zitat "Allzweck parallel" Zitat? Ich bin kein Experte für diesen Aspekt von VHDL. Vielleicht wurde in ihren Ursprüngen so gedacht.
David Quiñones
Um streng zu sein, müssen wir uns auf den VHDL-Standard beziehen. Trotzdem soll klargestellt werden, dass jeder Simulator und jeder Synthesizer auf seinem Weg und manchmal mit sehr unterschiedlichen Ergebnissen interpretiert werden, da der Standard generalistisch ist und nicht in allen Fällen abdeckt, was zu tun ist.
David Quiñones