Forum: FPGA, VHDL & Co. Xilinx VHDL Blinker-Programm Problem


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 Alex C. (lexanders)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Software: Xilinx-ISE 10.1
Hardware: Spartan 3A FPGA Board



Hallo, ich suche hier im Forum Hilfe zur Lösung meiner kleinen Probleme 
in meinem Blinkerprogramm.



Kurze Funktionsbeschreibung wie ich es meine:
Der Blinker soll so wie in einem Auto funktionieren. Einmal tasten, 
dreimal blinken (Boardtaster =West,East). Für Links und Rechts mit 1Hz 
oder 2Hz Taktfrequenz, hauptsache man kann es auf dem Board wahrnehmen 
(LEDs =LD7,LD8). Ein Gleichzeitiges Blinken von Links und Rechts sollte 
unmöglich sein, muss also iwie veriegelt werden. Und ein Blinkvorgang 
kann resetet (Boardtaster =South) werden, so dass der Zähler wieder bei 
0 steht.

Eigentlich hört sich das ganz simpel an, nur meine Versuche scheitern 
immer wieder.
Habe zu Testversuchen erst nur eine x-beliebige LED und Taster 
verwendet.

Problem:
Auf dem Board blinkt die LED nur einmal 1s auf und dann bleibt sie 
permanent an.

Im Dateianhang ist das VHDL Programm als pdf-Dokument.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Alex C. schrieb:
> Problem:
> Auf dem Board blinkt die LED nur einmal 1s auf und dann bleibt sie
> permanent an.
Was sagt die Simulation?
Gerade sowas wie dieser Blinker lässt sich wunderhübsch und einfach 
simulieren.

> Im Dateianhang ist das VHDL Programm als pdf-Dokument.
Das ist 1. kein VHDL-Programm, sondern eine VHDL-Beschreibung,
und 2. hättest du die besser als *.vhd-Datei angehängt.
Denn blöderweise lässt sich die Beschreibung aus dem PDF nicht sinnvoll 
darstellen oder gar editieren...


  signal Counter_Takt: std_logic_vector (25 downto 0):="00000000000000000000000000";
Als Tipp: nimm für Zähler einfach einen Integer und statt der alten 
Synopsys-Libs die numeric_std...
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std

> Der Blinker soll so wie in einem Auto funktionieren.
>  ... Und ein Blinkvorgang kann resetet (Boardtaster =South) werden
Mit welchem Taster geht das im Auto?

> Kurze Funktionsbeschreibung wie ich es meine:
> Der Blinker soll so wie in einem Auto funktionieren.
Hast du da mal ein Timing-Diagramm gezeichnet, und dir überlegt, wie 
diese Funktionen mit Hardwarebausteinen (Zähler, Vergleicher, Logik) 
erreicht werden könnten? Denn sinnvollerweise solltest du zuerst eine 
Hardwarevorstellung haben, dann daraus eine Beschreibung ableiten...

von Xyz X. (Firma: xyz) (khmweb)


Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Was sagt die Simulation?

@Lothar
Ich hatte noch nicht die Zeit, momentan gar keine, mich mit der 
Simulation zu beschäftigern, aber: Warum fragst Du danach? Gibt es 
Unterschiede zw. Realität und Simulation? Dann wäre die Simulation doch 
unsinnig. Bitte klär mich mal auf, danke.

von Dietmar (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alex C. (lexanders), du kannst uns helfen, ein Mysterium zu lösen, das 
viele von uns schon lange beschäftigt.

Da gibt es als eine Funktion im Forum, mit der man eine Datei auswählen 
und hochladen kann. Aber anstatt genau die Datei auszuwählen, in der die 
Informationen sind, die man anhängen möchte, wird ein ganz anderer Weg 
beschritten. Wie um alles in der Welt kommt ein User auf die Idee, von 
einen Text einen Screenshot zu machen, dieses in irgendeinem anderen 
Programm einzufügen, das als PDF zu speichern, und das anschließen 
hochzuladen?

Ich will ich jetzt nicht kritisieren mit meiner Frage (oder nur ein 
bisschen ;-) ), sondern mich interessiert ganz ehrlich, wie bist du auf 
die Idee gekommen?

von Klaus (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Karl-Heinz M. schrieb:
> Ich hatte noch nicht die Zeit, momentan gar keine, mich mit der
> Simulation zu beschäftigern, aber: Warum fragst Du danach? Gibt es
> Unterschiede zw. Realität und Simulation? Dann wäre die Simulation doch
> unsinnig. Bitte klär mich mal auf, danke.

Ich denke, der Hauptgrund für diese Frage ist immer, der Fragesteller 
dazu zu bewegen, überhaupt eine Simulation zu machen ;-) Als Anfänger 
hat man häufig keine Lust sich erst mit dem Thema Simulation auseinander 
zu setzten, man beschreibt ja schließlich Hardware, und da will man auch 
Ergebnisse in Hardware sehen ;-) Das Äquivalent einen Debugger mit 
Einzelschritt Ausführung in der Software Welt ist bei FPGAs halt die 
Simulation. Und je früher man damit anfängt auch den Simulator zu nutzen 
desto besser.

Und ja: es gibt Unterschiede zwischen Simulation und Realität. Mit 
Simulation meint man im Allgemeinen eine funktionale Simulation. Das 
heißt, es wird rein das simuliert, das im VHDL Code steht, ohne jede 
Hardwareabhängigkeiten, wie z. B. Signallaufzeiten. Dazu kommt, dass 
Simulator und Synthesizer manche Sprachkonstrukte anders interpretieren. 
Aber wenn man sich an gewisse Spielregeln hält, bekommt man auch eine 
passende Simulation. Das heißt z. B.: synchrones Design, vollständige 
Sesitivity-Lists, keine kombinatorischen Schleifen, keine wait for 
Statements in synthetisierbarem Code, etc.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Karl-Heinz M. schrieb:
> Ich hatte noch nicht die Zeit, momentan gar keine, mich mit der
> Simulation zu beschäftigern, aber: Warum fragst Du danach?
Der Simulator ist der Debugger für VHDL-Beschreibungen.
Und gerade mit Xilinx ist das Aufsetzen einer Testbench geradezu simpel. 
Lies das ab Seite 13:
http://www.lothar-miller.de/s9y/uploads/Tutorial_Xilinx_ISE13.pdf

> Gibt es Unterschiede zw. Realität und Simulation?
Normalerweise nicht, und genau das ist der Vorteil: mit dem Simulator 
kannst du Schritt für Schritt und Takt für Takt deine Beschreibung 
abarbeiten, interne Signale und Zustände anschauen, und hast nicht nur 
ein paar LEDs, die nicht das tun, was du erwartest...

> Dann wäre die Simulation doch unsinnig.
Nein, sie wäre falsch.

von Alex C. (lexanders)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich habe jetzt nochmal ein bisschen rumprogrammiert. In der Testbench 
geht es jetzt wohl. Wird die Taste links (west) oder die Taste rechts 
(east) betätigt blinkt der jeweilige LED Ausgang 3 mal. Der Reset 
funktioniert und die Verriegelung auch.
Wenn es jedoch auf dem FPGA-Board (SPartan 3a Starter Kit) ausgeben 
lassen möchte tut sich gar nichts.

Synthesize-XST, Implement Desgin, Generate Programming File und 
Configure Target Device sind alle OK. Die Übertragung des Programms 
wurde mir auch mit Program succeed bestätigt.

Jetzt zu meiner tollen pdf...
Ich habe das letzte mal nicht soweit Gedacht die vhd Datei hochzuladen.

Hier die aktuelle vhd-Datei;)

von Duke Scarring (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alex C. schrieb:
> In der Testbench
> geht es jetzt wohl.
Kannst Du uns die Testbench auch noch zur Verfügung stellen?

Duke

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Und wofür sind die ganzen "Sim_xxxx"-Ausgänge?

Aha:
    -------------------------------------------------------------
    --       Hier die Externen Variablen zur beobachtung    -----
    -------------------------------------------------------------
1. es sind GARANTIERT keine Variablen    und
2. mit dem Simulator kannst du auch ganz problemlos interne Signale 
anschauen, ohne sie nach aussen zu verdrahten. Das ist ja der 
eigentliche Witz an dem Ding...

Nachtrag:
  elsif clock='1' and clock'event then
    if Counter_Takt = 10 then
      Counter_Takt <= "00000000000000000000000000";
  else
      Counter_Takt <= Counter_Takt + 1;--einfach weiterzählen
    end if;
  end if;

:
:

Takt_1_HZ <=  '0' when Counter_Takt = 0 else 
              '1' when Counter_Takt >= 5 else
              '0';
Das sieht nicht gut aus. So werden keine Takte erzeugt!


BTW: ich habe das Ding mal bereinigt und simuliert. Offenbar soll das ja 
um den Faktor 500000 schneller simuliert werden, oder? Bei mir tut sich 
da nichts sinnvolles an den Ausgängen...

Und noch was:
Takt_1_HZ <=  '0' when Counter_Takt = 0 else 
              '1' when Counter_Takt >= 5 else
              '0';                                <--- Wozu das hier?
  
--Takt_1_HZ <=  '0' when Counter_Takt = 5000000 else
--          '1' when Counter_Takt = 0 else
--              Takt_1_HZ;                        <--- Aua, ein Latch...

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Ich habe da jetzt mal was gebastelt. Sollte das in etwa so aussehen?

Falls ja, dann kannst du ja mal meine Testbench gegen dein Design laufen 
lassen...

von Doof (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Karl-Heinz M. schrieb:
> Ich hatte noch nicht die Zeit, momentan gar keine, mich mit der
> Simulation zu beschäftigern

Tu das! Es lohnt sich! Wirklich :)

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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