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 | constant period : time := 10 ns; |
3 | begin
|
4 | clk <= '0'; |
5 | wait for period / 2; |
6 | clk <= '1'; |
7 | wait for period / 2; |
8 | end process clock_driver; |
9 | |
10 | reset_driver : process |
11 | constant reset_time : time := 200 ns; |
12 | begin
|
13 | reset <= '1'; |
14 | wait for reset_time; |
15 | reset <= '0'; |
16 | wait; |
17 | end process reset_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.
Was ist denn die genaue Fehlermeldung, wenn du eine RTL Simulation starten willst? wait for wird in jedem Falle in Testbench Code unterstützt.
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?
:
Bearbeitet durch Moderator
Hi Leute, habe den Fehler gefunden. Bei Task musste von Compilation auf RTL Simulation umgestellt werden. Dann geht es. Gruß, Thomas
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:
1 | -- Ansatz 1
|
2 | clock : process (clk_i) begin |
3 | clk_i <= not clk_i after 20 ns; |
4 | end process clock; |
5 | |
6 | -- Ansatz 2
|
7 | clk_i <= not clk_i after 20 ns; |
Ich sehe bei Ansatz 1 als einzigen Unterschied die vermehrte Schreibarbeit.
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?
Altera gibt's doch gar nicht mehr. Das einzige was da noch auf Altera hindeutet ist der Anfangsbuchstabe von "An Intel FPGA": https://www.altera.com/
:
Bearbeitet durch Moderator
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.