Forum: FPGA, VHDL & Co. VHDL Generate & Testbenches


von VHDL_Neuling (Gast)


Lesenswert?

Hallo zusammen, ich habe schon einiges zu dem Thema Testbench & und der 
Generate Anweisung in VHDL hier im Forum und anderen Seiten gelesen. Ich 
möchte doch auf Nummer sicher gehen ob ich es richtig verstanden habe.

Also erstmal zu der Generate-Anweisung:
Sofern ich das weiß gibt es nur 2 Generate-Anweisungen und zwar If und 
For.
Mit den Generate hat man die Möglichkeit dem Synthesizer mitzuteilen ob 
etwas bzw. wieviel synthetiziert werden soll. Als Beispiel nehme ich mal 
einen Volladdierer kurz VA, an dem ich immer wieder "Änderungen" 
vornehme. Mit If-Generate kann ich nun entscheiden ob der Synthesizer 
diesen VA überhaupt erzeugen soll oder nicht und mit For-Generate könnte 
ich angeben es reicht mir ein einziger VA oder ich benötige ein ganzes 
Rudel von VA in meiner Schaltung. Stimmt das an dieser Stelle soweit?


Nun zu der Testbench:
Ich verstehe das so, ich habe meine Schaltung soweit so gut 
aufgebaut/entwickelt. Nun möchte ich diese testen und dies mache ich 
indem ich das Projekt zwar kompiliere aber trotzdem ein weiteres Projekt 
anlege, um dort mein zu testendes Projekt als Komponente Einfüge. Im 
Anschluss kann ich das Projekt Kompilieren und im Simulator als Black 
Box Testen (hier frage ich mich, könnte ich nicht auch schon das 
eigentliche Projekt im Simulator testen? Ist das nicht ein unnötiger 
Schritt? oder habe ich den Begriff Testbench bisher falsch verstanden?)


Noch eine zusätzliche Frage und zwar ich habe mir die Studenten Version 
von ModelSim heruntergeladen um damit zu üben. Mein Problem ist, ich 
kann zwar Projekte erstellen und kompilieren aber der Simulator 
funktioniert nicht. Er sagt mir immer das die Lizenz nicht gefunden 
werden kann. Das macht mich ein wenig stutzig da ich das Programm eben 
erst heruntergeladen und installiert habe und das auch von der 
www.mentor.com/ Website. Ich habe nur ein eigenes Projekt erstellt eine 
eigene Entity + Architecture für einen Halbaddierer und trotzdem startet 
es nicht. Hat jemand zufällig das selbe problem gehabt oder weiß 
villeicht was zu tun ist?

von Duke Scarring (Gast)


Lesenswert?

VHDL_Neuling schrieb:
> Mit If-Generate kann ich nun entscheiden ob der Synthesizer
> diesen VA überhaupt erzeugen soll oder nicht und mit For-Generate könnte
> ich angeben es reicht mir ein einziger VA oder ich benötige ein ganzes
> Rudel von VA in meiner Schaltung. Stimmt das an dieser Stelle soweit?

Ja, passt schon:
if --> ja oder nein
for --> x bis viele (mit x ~> 2)

Auf Kosten der Übersichtlichkeit kann man diese Konstrukte natürlich 
beliebig verschachteln...

Duke

von Fitzebutze (Gast)


Lesenswert?

Es gibt ja auch freie Simulatoren, die keine Bremse drin haben wie 
Modelsim und dich sogar noch zu richtig striktem Einhalten des Standards 
"motivieren" (zwingen), wie GHDL und gtkWave. Habe lange mit modelsim 
gearbeitet, es aber schliesslich zugunsten GHDL schlafenlegen können.

Zum Thema 'generate': Passt so ganz gut. Als Anmerkung: Auch wenn die 
if-Bedingung nicht erfüllt ist, muss die Komponente die innerhalb des 
generate-Konstrukts lebt,bei GHDL im projekt vorhanden sein.

Testbench: Du musst ja deine Hardware um dein Projekt herum modellieren. 
Also mindestens einen virtuellen Clock anlegen..
Wenn dein Projekt sich quasi selbst testet, dann brauchst du natürlich 
nicht mehr viel Drumherum. Aber wichtig ist definitiv eine saubere 
Reset-Sequenz, um Initialisierungsprobleme frühzeitig zu erkennen.

von Christoph (Gast)


Lesenswert?

> Also erstmal zu der Generate-Anweisung:
> Sofern ich das weiß gibt es nur 2 Generate-Anweisungen und zwar If und
> For.

Genau. Seit VHDL2008 gibt es "sogar" das If/else. Bei älteren VHDL 
Versionen gibt es nur If.

> Mit If-Generate kann ich nun entscheiden ob der Synthesizer
> diesen VA überhaupt erzeugen soll oder nicht und mit For-Generate könnte
> ich angeben es reicht mir ein einziger VA oder ich benötige ein ganzes
> Rudel von VA in meiner Schaltung. Stimmt das an dieser Stelle soweit?

Ja, soweit Richtig.

Deiner Analogie folgend wäre ein praktisches Beispiel, dass du deinen 
Volladdierer zuerst mit for generate aus Halbaddierern zusammensetzt.
(Dieses Beispiel wirst du aber in der Praxis nicht an treffen, da ein 
Synthesizer weiss wie man Zahlen addiert)

> Nun zu der Testbench:
> Ich verstehe das so, ich habe meine Schaltung soweit so gut
> aufgebaut/entwickelt. Nun möchte ich diese testen und dies mache ich
> indem ich das Projekt zwar kompiliere aber trotzdem ein weiteres Projekt
> anlege, um dort mein zu testendes Projekt als Komponente Einfüge. Im
> Anschluss kann ich das Projekt Kompilieren und im Simulator als Black
> Box Testen (hier frage ich mich, könnte ich nicht auch schon das
> eigentliche Projekt im Simulator testen? Ist das nicht ein unnötiger
> Schritt? oder habe ich den Begriff Testbench bisher falsch verstanden?)

Vielleicht hast du den Begriff Testbench falsch verstanden. Es ist genau 
das Ziel der Testbench, "das eigentliche Projekt im Simulator zu 
testen".

Wie andere schon geschrieben haben, ist die Testbench dazu da, die 
Umwelt zu simulieren (Clock, Reset, Sensordaten, Kommunikationspartner 
etc.), damit dein eigentliches Projekt, überhaupt das machen kann, was 
es tun sollte.

Es ist möglich, Sachen als Black Box zu testen. Ist aber nur üblich wenn 
IP Cores von anderen Firmen (FPGA Hersteller oder sonst zugekauft) 
verwendet werden. (Du bekommst dann das vorcompilierte Model geliefert).

Alles was du selber an Code schreibst oder z. B. als Open Source 
bekommst wird zusammen mit der Testbench in einem einzigen Projekt 
verwaltet und alles zusammen vom Simulator compiliert.

> Noch eine zusätzliche Frage und zwar ich habe mir die Studenten Version
> von ModelSim heruntergeladen um damit zu üben. Mein Problem ist, ich
> kann zwar Projekte erstellen und kompilieren aber der Simulator
> funktioniert nicht. Er sagt mir immer das die Lizenz nicht gefunden
> werden kann.

Du hast es heruntergeladen und installiert. Üblicherweise hat das nichts 
damit zu tun, ob du nun eine Lizenz hast oder nicht. Irgendwo wird 
beschrieben sein, wie du als Student jetzt an ein Lizenzfile kommst. 
(Üblicherweise musst du dazu auch noch deine MAC Adresse, Dics ID oder 
ähnliches dabei angeben).

von Vancouver (Gast)


Lesenswert?

VHDL_Neuling schrieb:
> und mit For-Generate könnte
> ich angeben es reicht mir ein einziger VA oder ich benötige ein ganzes
> Rudel von VA in meiner Schaltung.

Ja, wobei die generate-Loop meistens verwendet wird, um mehrere 
gleichartige Komponenten erzeugen und auf regelmäßige Art und Weise 
miteinander zu verbinden. Ein schönes Beispiel ist ein 
m*n-Schieberegister. Man erzeugt n m-Bit-Register und verbindet den 
Ausgang von Register i mit dem Eingang des Registers i+1. Das geht sehr 
elegant, weil man in der generate-Loop auch Arrays von Signalen 
indizieren kann. Auf dese Weise kannst Du mit ein paar Zeilen Code 
riesige Strukturen erzeugen.

Um, wie in deinem Beispiel, mehrere Addierer erzeugen, die aber logisch 
nicht direkt zusammenhängen, würde man eher keine generate-Loop 
verwenden.

Übrigens kannst du innerhalb einer generate-Loop nicht nur Komponenten 
instanziieren, sondern auch Prozesse.

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.