Ümeyir G. schrieb:
> Sie können die Aufgabenstellung und meinen derzeitigen VHDL-Code vom
> Anhang entnehmen.
Code kannst und solltest du direkt als .vhd Datei anhängen.
Zur Aufgabe:
Aufgaben in diesem Stil, vermutlich von der gleichen Vorlesung, kamen in
den letzten Wochen öfter.
Die Aufgabe ist wie die anderen Aufgaben die hier gestellt wurden recht
einfach.
Du brauchst quasi eine Uhr, also etwas das eine Zeitdauer lang zählt.
Und dann soll das Licht an sein, solange der Zähler kleiner als sein
Maximalwert (das ist der Wert der Schalter) ist.
Durch Tastendruck kann der Zähler wieder auf Null zurückgesetzt werden.
Was ist der Defaultzustand und auch der Zustand der durch Reset
ausgelöst werden soll?
Licht ist aus, der Zähler steht auf seinem Maximalstand.
Aber:
Du kannst auch einen Zähler nehmen der runterzählt. Der Defaultzustand
ist dann Zählerstand Null und licht aus.
Bei Tastendruck wird der Zähler auf den Wert gesetzt der über die
Schalter eingestellt wird.
Zu deinem Code:
- Was sollen Q und D? Die werden nicht benötigt.
- Sonst macht der Code noch nichts von dem was in der Aufgabe gefordert
wird.
- ieee.std_logic_arith.all und use ieee.std_logic_unsigned.all sind
obsolet. Verwende die ieee.numeric_std.all .
- Du kannst dir einige Klammern sparen.
- Verwende einen ordentlichen Editor der dir auch die Syntak schön
hervorhebt wie https://notepad-plus-plus.org/ und lass deine Datei mit
der Endung .vhd, es gibt keinen Grund da .txt ranzuhängen.
Im Anhang habe ich dir eine Testbench geschrieben die die Schalter auf
den Wert 13 setzt. Dann wird der Button gedrückt und so lange gewartet
bis das Licht wieder ausgeht. Das sind 13 Takte also bei den
eingestellten 100 MHz 130 ns. Die Testbench wartet 200 ns. Danach wird
der Button erneut gedrückt, allerdings nicht lange genug gewartet
sondern erneut gedrückt.
Danach wird erneut lange genug gewartet, dass das Licht wieder aus geht.
Button wird erneut gedrückt und dann kommt schon recht früh der Reset.
Die Testbench reicht um das alles zu testen, die brauchst du also gar
nicht anfassen oder umzuschreiben.
Ausserdem im Anhang ein Konstrukt für deine Komponente mit Kommentaren.
Die hat alle benötigten Eingänge.
Was du machen sollst ist unterhalb der Zeile
architecture Behavior of lightLED is
die Funktionalität zu beschreiben.
Edit:
Und schon einen Fehler gemacht, der Button ist active low, also der ist
gedrückt wenn der eine logische '0' liefert. Ist aber erstmal egal für
dich. Ich habe das jetzt jedenfalls mit active low Button in der
Testbench beschrieben (und meine erste Antwort gelöscht).
Lexa81 schrieb:
> Was geht im Code, wenn dieser im Simulator läuft?
Exakt, simuliere deine Beschreibung. Dadurch lernst du am meisten. Lies
die Fehlermeldungen und versuche sie zu verstehen. Gerade Modelsim hat
recht aussagekräftige Fehlermeldungen die sich auch gut googeln lassen.
Edit2: Der Reset ist ebenfalls active low, also jetzt mit korrekter
Testbench. Was unklar ist aus der Zeichnung:
Da geht das Licht sofort an wenn der Button gedrückt wird. Das sieht
nach Kombinatorik aus, aber ist nicht genauer spezifiziert. Ich würde
sagen eine getaktete Beschreibung ist ebenfalls korrekt.