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?
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
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.
> 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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.