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'event
wird dann immer die erste Art der Codierung mit empfohlen? ?
Antworten:
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
'event
fü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
:Ergebnisse von Xilinx XST für
if clk = '1' then
: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:
quelle
Beginnend mit der Definition von VHDL aus Wikipedia
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.
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.
quelle