Forum: FPGA, VHDL & Co. Umstieg Xilinx auf Altera/Intel -> kein wait for, wie testbench?


von Thomas (Gast)


Lesenswert?

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

von dzopf (Gast)


Lesenswert?

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.

von Erik (Gast)


Lesenswert?

Was ist denn die genaue Fehlermeldung, wenn du eine RTL Simulation 
starten willst?

wait for wird in jedem Falle in Testbench Code unterstützt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Thomas (Gast)


Lesenswert?

Hi Leute,
habe den Fehler gefunden.
Bei Task musste von Compilation auf RTL Simulation umgestellt werden.
Dann geht es.

Gruß,
Thomas

von Donni D. (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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;

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Ich sehe bei Ansatz 1 als einzigen Unterschied die vermehrte 
Schreibarbeit.

von J. S. (engineer) Benutzerseite


Lesenswert?

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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von PLDler (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.