Forum: FPGA, VHDL & Co. Retriggerbares Treppenlicht - VHDL


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.
von Ümeyir G. (meyir_g)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin leider noch ein ziemlicher Anfänger im VHDL-Bereich. Ich hab ein 
paar Fragen und hoffe, dass ihr mir vielleicht helfen könntet.

Nun zu meinen Fragen:
Könnte mir jemand die Aufgabe in simplen Worten erklären und eventuell 
auch noch sagen, ob ich paar Punkte von der Aufgabenstellung mit meinem 
Code schon gelöst habe. Außerdem wäre ich noch dankbar, wenn ich eine 
Erklärung kriegen könnte, wie ich bei dem Code vorankommen kann.

Sie können die Aufgabenstellung und meinen derzeitigen VHDL-Code vom 
Anhang entnehmen. Die Aufgabe muss ich bis zum 27.04. abgeben, d.h., 
dass ich noch eine knappe Woche dafür Zeit habe.

Ich bedanke mich schon im Voraus bei jeglicher Art von Hilfe.

MfG

von Lexa81 (Gast)


Lesenswert?

Rückfrage:
Was geht im Code, wenn dieser im Simulator läuft?

a) kann per Tastendruck, eine LED aktiviert werden?
b) wie a) und wird ein Timer auf einen Wert gesetzt?
c) wie b) und dieser "immer" beim Sekundentakt dekrementiert, sofern >0?
d) ... bei erreichen von 0 wird der LED Ausgang inaktiv gesetzt

Re triggern ... ist einfach den Tiger vor Ablauf bewahren und erneut ab 
Startseite sekündlich dekrementieren.

https://www.tu-chemnitz.de/etit/sse/Sonstiges/vhdl_buch.html

https://www.vhdl-online.de/vhdl_workshop/lab_8

Beitrag #6664348 wurde vom Autor gelöscht.
Beitrag #6664357 wurde vom Autor gelöscht.
von Gustl B. (-gb-)


Angehängte Dateien:

Lesenswert?

Ü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.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ümeyir G. schrieb:
> Die Aufgabe muss ich bis zum 27.04. abgeben, d.h.,
> dass ich noch eine knappe Woche dafür Zeit habe.
Der Toni im Beitrag "VHDL Code Aufgabe, HILFE! :/" hat sich da 
schon früher Gedanken zum Thema gemacht...

> Außerdem wäre ich noch dankbar, wenn ich eine
> Erklärung kriegen könnte, wie ich bei dem Code vorankommen kann.
Du musst dir eine Hardware z.B. in Form eines rücksetzbaren Zählers mit 
nachgeschaltetem Vergleicher auf ein Blatt Papier malen. Und dann 
beschreibst du diese Hardware mit der HardwareBESCHREIBUNGssprache 
VHDL. Mach am Anfang ein einfaches Blinklicht: 
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

Wenn du das kannst, musst du noch einen Taster und die Schalter für die 
Leuchtdauer einlesen und hast dann alle Komponenten, die man für die 
Lösung der Hausaufgabe braucht.

Auch hier gilt: das ist eine hübsche kleine Fingerübung. Ein Zähler, der 
hoch zählt und per Tastendruck zurückgesetzt wird. Der Dozent gefällt 
mir, wenigstens nicht gleich einen Arbiter für einen Speichercontroller 
eines Quadcores zu Beginn. Kurz: wenn der fertige VHDL-Code mehr als 1 
Bildschirmseite braucht, dann ist er zu umständlich.

: 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]
  • [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.

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