Forum: FPGA, VHDL & Co. Quickstart CPLD


von Michael (Gast)


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

von Jochen Pernsteiner (Gast)


Lesenswert?

Kannst Du mal den Code posten?

>obwohl Simulationergebnis das Richtige anzeigt.

Funktionale Simulation oder Timingsimulation?

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Im Anhang ist der VHDL- Code.

Danke schon mal im vorraus.
Michael

von Michael (Gast)


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.

von Jochen Pernsteiner (Gast)


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?

von Michael (Gast)


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

von Hagen (Gast)


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

von DerInder (Gast)


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=-

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Inder,

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

von DerInder (Gast)


Lesenswert?

Schade, währe ja auch zu einfach ;-)

von DerInder (Gast)


Lesenswert?

Stimmt den die Pinbelegung der LEDs mit dem Design überein?

-=jens=-

von Jochen Pernsteiner (Gast)


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.

von Michael (Gast)


Lesenswert?

Hallo Jochen,

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

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

von Henrik (Gast)


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

von Michael (Gast)


Angehängte Dateien:

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

von DerInder (Gast)


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=-

von DerInder (Gast)


Lesenswert?

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

von DerInder (Gast)


Lesenswert?

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

von Jochen Pernsteiner (Gast)


Lesenswert?

>der 555 liegt lt. XAPP078 auf Pin 43 (GCK1)

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

von Michael (Gast)


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

von Michael (Gast)


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

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
Noch kein Account? Hier anmelden.