Umstieg Xilinx auf Altera/Intel -> kein wait for, wie testbench?

Gast #5403211
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
Gast #5403281
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.
Moderator (Firma: Titel) Persönliche Seite #5403335
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?
Moderator (Firma: Titel) Persönliche Seite #5403895
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;
Persönliche Seite #5404658
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;
Moderator (Firma: Titel) Persönliche Seite #5404671
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.
Persönliche Seite #5404682
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.
Moderator (Firma: Titel) Persönliche Seite #5404901
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...
Gast #5404920
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren