mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: dzopf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,
ich nutze bei Quartus Prime immer folgende Konstrukte bei Testbenches:
    clock_driver : process
        constant period : time := 10 ns;
    begin
        clk <= '0';
        wait for period / 2;
        clk <= '1';
        wait for period / 2;
    end process clock_driver;

    reset_driver : process
        constant reset_time : time := 200 ns;
    begin
        reset <= '1';
        wait for reset_time;
        reset <= '0';
        wait;
    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.

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
2 lesenswert
nicht 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
Autor: Thomas (Gast)
Datum:

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

Gruß,
Thomas

Autor: Donni D. (donnidonis)
Datum:

Bewertung
2 lesenswert
nicht 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.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
-- Ansatz 1
   clock : process (clk_i) begin
      clk_i <= not clk_i  after 20 ns;  
   end process clock;

-- Ansatz 2
   clk_i <= not clk_i  after 20 ns;  

Autor: Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe bei Ansatz 1 als einzigen Unterschied die vermehrte 
Schreibarbeit.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jürgen S. (engineer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: PLDler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar M. (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.