mikrocontroller.net

Forum: FPGA, VHDL & Co. Quickstart CPLD


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei mich in die CPLDs zu vertiefen. Ich habe mir einen
Programmer und ein Testboard geätzt & bestückt mit einem XC9536...

Beim Durcharbeiten des Quickstart.pdf für das WEBPACK ISE 7.0 bin ich
leider nicht ganz glücklich geworden. Ich habe das Tutorial auf den
XC9536 umgemünzt. In dem Tutorial wird ein einfacher UP/DOWN-Counter in
VHDL programmiert, simuliert, gemappt...Das hat auch alles schön
funktioniert. Auch das downloaden auf das Target funktioniert. ABER die
LEDs machen alles andere als binär zählen. Sie blinken in einem nicht
auszumachenden Wechselspiel, obwohl Simulationergebnis das Richtige
anzeigt.

Ich glaube ich habe ein Problem mit dem CLOCK-Signal,bei dem Counter.
In dem UCF File müssen die Zeiten für die CLOCK angegeben werden. Da
bin ich mir überhaupt nicht schlüssig was ich da eintragen soll. Bzw.ob
sich das überhaupt auf den Code auswirkt.

Vielleicht hatte ja jemand das gleiche Problem und hat es schon gelöst.
Ich bin dankbar für jede Idee.

MfG Michael

PS:Ich auch ein paar einfache Logikverknüpfungen programmiert, die
funktionieren alle super. (Also Hardware scheint zu stimmen).

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du mal den Code posten?

>obwohl Simulationergebnis das Richtige anzeigt.

Funktionale Simulation oder Timingsimulation?

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Anhang ist der VHDL- Code.

Danke schon mal im vorraus.
Michael

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry Jochen. Ich hab' vergessen auf Deine zweite Frage zu antworten.

Die Simulation habe ich gestartet mittels anklicken von "Simulate
Behavioral VHDL Model". Ich vermute funktionale Simulation.

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code ist OK.

Wie hoch ist Deine Taktfrequenz?
Welches Gehäuse hat der CPLD und welchen Pin benutzt Du als
Takteingang?
Was genau machen die LEDs? Wird da binär gezählt, aber die LEDs sind
falsch angeordnet?
Was passiert wenn Du die Taktfrequenz ordentlich runterdrehst,
z.B. 1 Hz?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Taktfrequenz liegt bei ca 10 Hz. Das Gehäuse ist ein PLCC44.
Ich benutze den Pin5 IO_GCLK.
Die LEDs blicken schon in einem Code der sich nach 15 mal wiederholt.
Die LEDs sind definitiv nicht vertauscht.

Vielen Dank für die Hilfe und sorry für die verspätete Antwort.

Michael

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geht ja auch, du selektierst mit linken Mausklick die Testbench
Source und stellst über rechten Mausclick die ModelSim Properties ein.
Es sollte sich ein Popup öffnen. Dort kannst du "Simulation
Resolution" und "Simulation Run Time" einstellen. Wichtig ist das
die Zeitangabe ein Vielfaches der Auflösung ist. Wenn du also mit
Picosekunden Auflösung arbeitest kann in Laufzeit ein ziemlich großer
Wert drinnen stehen.

Gruß Hagen

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
hast du zufällig die Schaltung von Holger Klabunde aufgebaut?
Damit hatte ich das gleiche Problem ;-) Ich hatte einfach nur die
LED-Platine verkehrt gesteckt :(

-=jens=-

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Inder,

ne hab' ich nicht. Die Schaltung, die ich aufgebaut habe, ist ein
Abwandlung von der Xilinx vorgeschlagenen Schaltung xapp078.pdf.

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade, währe ja auch zu einfach ;-)

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt den die Pinbelegung der LEDs mit dem Design überein?

-=jens=-

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die LEDs blicken schon in einem Code der sich nach 15 mal wiederholt.
>Die LEDs sind definitiv nicht vertauscht.

Das sieht für mich aber verdammt nach danach aus.

Programmier halt einfach mal ein Lauflicht:

Mach count_int anstatt 4 Bits 2 Bits breit und schreib anstatt
"count_out <= count_int" folgendes:

  with count_int select
    count_out <= "0001" when "00",
                 "0010" when "01",
                 "0100" when "10",
                 "1000" when others;


Da siehst Du ja dann ob die LEDs in der richtigen Reihenfolge leuchten.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jochen,

ich habe Deine Vorschlag programmiert. Ich habe ein perfektes
Lauflicht. :-) oder doch :-(

Ich hab' keine Ahnung, worans noch liegen kann....

Autor: Henrik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der Code (wie schon jemand schrieb) scheint in Ordnung zu sein.
Das einzige, was mir noch einfällt, ist, dass die Pins des CPLD
softwaremäßig falsch zugeordnet sind. Schau mal, ob unter
"Properties" im Kontext von "User Constraints", "Use Location
Constraints" die Option "Always" aktiviert ist. Wenn "Try" aktiv
ist, dann schau nach, ob die Pinbelegung wirklich mit der von dir
gewünschten übereinstimmt.

Gruss Henrik

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Henrik,

danke für den Tip. Es ist (leider) always aktiv.

Mir fällt da noch was ein. Ich hatte beim Punkt Implement Design immer
eine Warning bei Fit.

CPLD:823 - Clock CLK appearing in an
OFFSET timespec currently must be explicitly declared as a global
clock...".

Ich habe dann die Warnung nach dem vorgeschlagenen Tipp repariert.
--------------------------------------------------------------------

The OFFSET constraint applies only to CPLDs when the clock is on a
global clock net. This can be achieved by performing one of the
following:

1. Placing the following constraint on the clock net
NET myclock BUFG=CLK;
(replace myclock with the name of the clock signal).

2. Inserting a BUFG component in the clock path immediately after the
input pin.

Either of the above will force the CPLD Implementation tools to use a
global clock pin of the CPLD for this input. You might also pin assign
to a specific global clock pin if desired.

Currently OFFSET constraints may not be applied to clocks on non-global
clock nets. To work around this issue, apply From:To constraints for the
clock path and the data paths individually.

Ich war mir da nicht sicher ob ich das richtig verstanden habe. Ich
habe in User Constraints (text), die Zeile:

NET "CLOCK"  LOC = "P5" | BUFG = CLK ;
----------------------------------------------------
eingebunden.

Evt hab' ich da was falsch gemacht....
Im Anhang ist das counter.ucf File. Vielleicht kann da jemand mal einen
Blick drauf werfen.

Vielen Dank,
Michael

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,
wenn du dein Board nach der XAPP078 aufgebaut hast, liegen deine LEDs
an den Pins:13,14,16,18-22 und nicht wie von dir angegeben auf 25-28.

-=jens=-

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach ja CLK macht sich auf einen der GCKn Pins besser (muss allerdings
nicht unbedingt)

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch ein Nachtrag ;-)
der 555 liegt lt. XAPP078 auf Pin 43 (GCK1)

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>der 555 liegt lt. XAPP078 auf Pin 43 (GCK1)

Weil das ein VQFP-Gehäuse ist.
Beim PLCC stimmt Pin 5.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab mir das pdf nochmal angeschaut. Ich habe mir ja nur die
Idee von der Schaltung geholt.

Die Package in der pdf-Schaltung ist ein VQFP ich habe ein PLCC.
PLCC != VQFP oder ????


Wie gesagt das mapping meiner Pins sollte stimmen, da ja das Lauflicht
perfekt funktioniert.

Michael

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die blödesten Fehler sind die, wo man anschliessend nicht weiss woran es
lag.

Ich habe mir das Service Pack 2 über Nacht gezogen. Also Updatepackete
größer 300 MB kann man nicht als Update bezeichnen, oder? Sondern
vielmehr als neues Programm.

Aufjedenfall funktioniert jetzt der unveränderte Code, ein gutes hat
natürlich auch eine verlängerte Fehlersuche man lernt das Programm
richtig gut kennen :-).

Vielen Dank an alle die mir geholfen haben,
Michael

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.