Guten Tag, ich lerne gerade VHDL und übe an einem 4x1 Multiplexer. Ich verwende Quartus und Modelsim. Die vhd Datei dafür habe ich bereits geschrieben und ohne Probleme compilieren lassen. Für die Testbench habe ich mir ein paar Beispiele angeschaut und damit dann versucht die Testbench für meinen Multiplexer zu schreiben, die aber noch nicht ganz funktionieren kann. Ich muss doch noch irgendwie festlegen, damit die Werte in Y (Ausgang) geschrieben werden? Für mich wäre es extrem hilfreich, wenn ihr meine Testbench korrigieren könntet. Dann hätte ich eine Vorlage mit der ich Lernen kann.
1 | port map( |
2 | S => S_TB, |
3 | E => E_TB, |
4 | Y => Y_TB); |
Da muss noch hin, für welche Component das die Port Map ist, also
1 | mux:mux4x1 port map(… |
Dann sollte das so auf den ersten Blick funktionieren.
Dussel schrieb: > Da muss noch hin, für welche Component das die Port Map ist, > alsomux:mux4x1 port map(…Dann sollte das so auf den ersten Blick > funktionieren. Habe dies noch eingefügt. Wieso muss dort vor den Komponentenname noch das "mux:" ? Ich habe nun beide Dateien in Modelsim eingebunden und wollte sie dann kompilieren lassen. Allerdings sind in der Testbench noch 13 errors: In fast jeder Zeile habe ich noch diesen Fehler: TB.vhd(16): String literal found where non-array type std.STANDARD.BIT was expected. In Zeile 22 und 23: (22): Signal "S_TB" is type std.STANDARD.BIT; expecting type std.STANDARD.BIT_VECTOR. Und noch am Ende: (32): VHDL Compiler exiting
Ich habe von VHDL keine Ahnung, lese nur aus Interesse mit, aber ich würde die Fehlermeldung so deuten, dass component mux4x1 is port(S: in bit_vector (1 downto 0); E: in bit_vector (3 downto 0); Y: out bit); end component; --Signale deklarieren signal S_TB :bit:= "00"; -- festlegen Startwert: initialisieren für Modelsim signal E_TB :bit:= "1010"; signal Y_TB :bit; oben S und E als bit_vector definiert sind, unten S_TB und E_TB aber nut als bit, nicht als bit_vector. Hilft dir dies vielleicht weiter?
Peter P. schrieb: > oben S und E als bit_vector definiert sind, > unten S_TB und E_TB aber nut als bit, nicht als bit_vector. Dankeschön. Habe die Signal nun auch noch als bit_vector definiert. Nun lässt sich alles kompilieren. Aber die Simualtion bekomme ich immer noch nicht hin. Ich habe alle Variablen zur Wave hinzugefügt und dann auf Run all geklickt. Dann passiert aber nicht. Bei den Variablen steht dann jeweils: -No Data-
Nach dem Hinzufügen in die Wave die Simulation resetten und nochmal laufen lassen.
Ip E. schrieb: > Nach dem Hinzufügen in die Wave die Simulation resetten und nochmal > laufen lassen. Ich habe auf den Restart Taster gedrückt und danach wieder auf Run-All. Nun steht bei den Werten überall eine 0. Auch wenn ich auf Zoom Full gehe, also liegt es nicht an der Auflösung.
balle schrieb: > Wieso muss dort vor den Komponentenname noch das "mux:" ? Das weiß ich nicht. Ist so, passt so. Allerdings muss es nicht mux sein. Es kann fast jeder beliebige Name verwendet werden. balle schrieb: > Ich habe alle Variablen zur Wave hinzugefügt und dann auf Run all > geklickt. Welche Variablen sind das? Hast du die Testbench simuliert?
Dussel schrieb: > Welche Variablen sind das? Hast du die Testbench simuliert? Ich habe mal ein Bild angehängt, wie Modelsim bei mir gerade aussieht. Die Variablen sind alle meine Ein- und Ausgänge, in meiner Testbench habe ich diesen doch Werte festgeschrieben - also dürften diese nicht Null sein. Hier zu meiner Vorgehensweise: -Neues Projekt erstellt, dort die Testbench und die "normale" Vhdl datei reingepackt -kompiliert -Simulation gestartet -Variablen in Wave gepackt -Restart -Run All Dann tut sich überhaupt nichts, wie man in der Wave sehen kann.
Dussel schrieb: > Hast du die Testbench simuliert? Was meinst du mit Testbench simulieren? Was muss ich da genau machen?
Angehängt ist die Simulation mit gtkwave. Eine angepasste Version (bit_vector) deiner Dateien funktioniert also. In deinem Bild sind die Signale nicht 0, sondern sie werden gar nicht angezeigt. Die Nullen stehen wahrscheinlich nur als Platzhalter. balle schrieb: > Was meinst du mit Testbench simulieren? Du musst im Simulator nicht den Multiplexer, sondern die Testbench ausführen. Wie das bei dir geht, weiß ich nicht, das hängt vom Programm ab. Du lässt dir die Signale E und S anzeigen, die Signale der Testbench sind aber E_TB und S_TB. Außerdem würde ich empfehlen, std_logic statt bit zu verwenden, weil damit mehr Zustände möglich sind. In der Simulation wird als Wert 0 angezeigt. Da weiß man nicht, ob wirklich der Wert 0 zugewiesen wurde, oder noch kein Wert. Bei std_logic stände da wahrscheinlich ein U für uninitialised, woran man sehen würde, dass keine Werte zugewiesen sind.
Du hattest Recht, ich habe nicht die Testbench ausgeführt. Jetzt klappt es. Danke euch!
Hätte aber noch eine Frage: Wenn ich mein Programm (wie nennt man das bei VDHL?) kompiliert habe und alles klappt, dann kann ich mir bei quartus doch auch irgendwo den Schaltplan dazu anschauen. Also wie die einzelnen Gatter verdrahtet werden. Wie geht das bei Quartus?
Dussel schrieb: > Außerdem würde ich empfehlen, std_logic statt bit zu verwenden, weil > damit mehr Zustände möglich sind. Und nochmal was, was ist der Datentyp std_logic bzw. welche Werte kann er annehmen?
balle schrieb: > Und nochmal was, was ist der Datentyp std_logic bzw. welche Werte kann > er annehmen? Für den Anfang (und wahrscheinlich auch später meistens) reichen aus der von Peter verlinkten Liste 0,1,U und X. U heißt, dass dem Signal noch kein Wert zugewiesen wurde und X bedeutet, dass mit dem Signal 'irgendwas nicht stimmt'. Das kann zum Beispiel sein, dass einem Signal zwei unterschiedliche Werte zugewiesen werden.
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.