Hallo Leute,
aufgrund von Firmenenentscheidung werde ich von Xilinx auf Altera
umsteigen.
Nun versuche ich mich schon seit einigen Tagen in Quartus prime Lite
einzuarbeiten.
Ich dachte immer, VHDL ist VHDL, allerdings scheint das nicht so zu
sein.
Alteras Software unterstützt anscheinend kein "wait for xx ns". Dies
habe ich schon durch Suchen herausgefunden.
Für einen clk bietet sich alternativ die Variante
clock : process (clk_i)
begin
clk_i <= not clk_i after 20 ns;
end process clock;
an.
Aber wie schreibe ich eine stimuli für die Testbench?
Muss ich dann jedes Signal in die Sensitivitikist schreiben?
Hat jemand ein einfaches Beispiel (braucht ja nur 4-5 Zeilen sein).
In den Manuals finde ich immer nur Beispiele für Verilog.
Gruß,
Thomas
Hallo Thomas,
ich nutze bei Quartus Prime immer folgende Konstrukte bei Testbenches:
1
clock_driver:process
2
constantperiod:time:=10ns;
3
begin
4
clk<='0';
5
waitforperiod/2;
6
clk<='1';
7
waitforperiod/2;
8
endprocessclock_driver;
9
10
reset_driver:process
11
constantreset_time:time:=200ns;
12
begin
13
reset<='1';
14
waitforreset_time;
15
reset<='0';
16
wait;
17
endprocessreset_driver;
Zugegeben, das bezieht sich auf Quartus Prime Pro 17.1.2. Ich weiß
nicht, wie es bei Quartus Prime Lite ist, aber solange du nicht
synthetisierst, sollte folgendes Konstrukt möglich sein.
Thomas schrieb:> Alteras Software unterstützt anscheinend kein "wait for xx ns".
Kein Synthesizer unterstützt "wait for". Aber jeder aktuelle kann
"wait until".
Und jeder Simulator kann beides.
> Dies habe ich schon durch Suchen herausgefunden.
Wonach hast du denn da gesucht?
> Hat jemand ein einfaches Beispiel (braucht ja nur 4-5 Zeilen sein).
Drehen wir den Spieß doch einfach um: wie sieht denn die Zeile genau
aus, die da Probleme macht? An welcher Stelle steht die Zeile? Und
welche Probleme in Form welcher Meldung macht die Zeile? Und wann
passiert der Fehler?
Du kannst außerdem in den Projekteigenschaften auf VHDL 2008 umstellen,
dann geht sich ‚all‘ in der sensitivity list und du musst nicht alles
reinschreiben. Quartus ergänzt sonst selber alle Signale.
Donni D. schrieb:> dann geht sich ‚all‘ in der sensitivity list und du musst nicht alles> reinschreiben.
Mein Tipp: verwende das "all" nicht, sondern schreibe explizit jedes
Signal in die Sensitvliste und sieh dir die daraus resultierenden
Warnungen genau an und denk drüber nach. So mancher Anfänger hat dadurch
einen (Denk-)Fehler in seinem Design gefunden...
Thomas schrieb:> Für einen clk bietet sich alternativ die Variante an> clock : process (clk_i) begin> clk_i <= not clk_i after 20 ns;> end process clock;
Ähem, das war jetzt aber nicht ernst gemeint, oder? Dann müsstest du
nämlich nochmal grundlegend darüber nachdenken und begründen, ob da
ein Unterschied und falls ja, welcher zwischen diesen beiden Ansätzen
ist:
Andreas S. schrieb:> Ich sehe bei Ansatz 1 als einzigen Unterschied die vermehrte> Schreibarbeit.
Der Unterschied besteht in der Möglichkeit des Compilers, die Anweisung
nur auszuführen, wenn ein Ereignis in der Sens-Liste erfüllt ist (denn
genau dafür ist die da). Das geht wieder in Richtung der gestern schon
diskutierten Optimierung der Beschreibung für effiziente Simulation.
In diesem Fall allerdings glaube Ich, dass die inzwischen verfügbaren
Opimierungen der Übersetzung der Sim dafür sorgen, dass Gleiches bei
rauskommt.
In anderen Fällen ist das aber anders. Daher empfiehlt es sich
eigentlich immer, Processes zu schreiben und die Aktivitäten
ausdrücklich zu kapseln.
Beitrag "VHDL Code Ausserhalb clk-process"
Ich biete übrigens noch den:
-- Ansatz 3
clk_i <= '0';
wait for 10ns; -- kein Leerzeichen vor den "ns"
clk_i <= '1';
wait for 20 ns; -- mit Leerzeichen vor den "ns"
clk_i <= '0';
wait for 10 ns;
Jürgen S. schrieb:> Der Unterschied besteht in der Möglichkeit des Compilers, die Anweisung> nur auszuführen, wenn ein Ereignis in der Sens-Liste erfüllt ist (denn> genau dafür ist die da).
Der Simulator erzeugt für nebenläufige Anweisungen sowieso seine
"interne" Sensitivliste. Deshalb ist zwischen den beiden Varianten
abgesehen von der schlechteren Übersichtlichkeit und der potentiellen
Verwirrung, wann denn beim Prozess mit dem "after" die Sensitivliste
jetzt "triggert", kein Unterschied zwischen den beiden Varianten.
Jürgen S. schrieb:> Daher empfiehlt es sich eigentlich immer, Processes zu schreiben und die> Aktivitäten ausdrücklich zu kapseln.
Ich versuche (wo möglich, weil z.B. keine Variablen nötig sind) Logik
nebenläufig zu beschreiben.
Lothar M. schrieb:> Der Simulator erzeugt für nebenläufige Anweisungen sowieso seine> "interne" Sensitivliste.
Die Frage ist, nach welcher Maßgabe. Ohne eine ausdrückliche
Einschränkung derselben durch den Designer, welche sich ja an Funktion
und Notwendigkeit orientiert, muss für eine korrekte Simulation eine
Liste über alle Signale erzeugt werden, weil der Simulator vor der
Simulation nicht "weiß" wann sich zu welchen Zeitpunkten welches Signal
ändern wird oder nicht ändert und welche Vereinfachungen sich darauf
ergeben könnten.
Es gibt zu diesen Betrachtungen ein gutes Buch:
"abstrakte Modellierung von Schaltungen" von ten Hagen.
Jürgen S. schrieb:> muss für eine korrekte Simulation eine Liste über alle Signale erzeugt> werden
Das ist für eine nebenläufige Zuweisung ja auch durchaus sinvoll, denn
ein entsprechender funktionsgleicher Prozess müsste ja auch alle Signale
in der Sensitivliste haben.
> Ohne eine ausdrückliche Einschränkung derselben durch den Designer
Eine Einschränkung der Sensitivliste durch den Designer ist bestenfalls
für eine Testbench "sinnvoll". Und genau dann empfiehlt es sich, diesen
Trick aber auch extra und ausdrücklich zu vermerken.
Der Synthesizer wird auch "von sich aus" alle fehlenden Signale in die
Sensitivliste "aufnehmen" und dann bestenfalls eine Warnung oder auch
nur eine Info zur nicht mehr passenden Simulation ausgeben...
Thomas schrieb:> aufgrund von Firmenenentscheidung werde ich von Xilinx auf Altera> umsteigen.
Hi,
darf man erfahren wieso diese Endscheidung getroffen wurde? Wurde es mit
den Entwicklern vorher so abgesprochen? Oder war es vom Teamleiter/Chef
die Endscheidung weil sich "Altera" leichter aussprechen lässt?