Forum: FPGA, VHDL & Co. Erstes CPLD Design


von Netbandit (Gast)


Lesenswert?

Hallo,

ich habe vor mir dieses Weihnachten den Einstieg in die CPLD-Technik zu
gönnen :)
Also bestelle ich mir ein XC95144XL und entwerfe ein
Experimentierboard.

Allerdings möchte ich vorher noch ein paar Fragen klären.
Inzwischen habe ich schon verschiedene Datenblätter von Xilinx
durchgearbeitet. Leider gibt es da sehr viele verschiedene und nicht
DAS Datenblatt. Daher besteht die größte Herausforderung darin
irgendwelche Funktionen zu erahnen und dann auf der Xilinx Website nach
dem richtigen Begriff zu suchen.
Daher möchte ich hier nur nochmal Sicherheitshalber nachfragen ob ich
alles richtig verstanden habe.

Mir sind folgende Global Pins aufgefallen:
GCK - Global Clock
GTS - Global Enable Output
GSR - Global Set/Reset

Global Clock:
Ist eine extra geführte "Leitung" im CPLD, welche es ermöglicht ein
Clocksignal zum syncronen Design an alle Notwendigen Punkte
gleichzeitig zu liefern (z.b. an FlipFlops).
Man könnte zwar auch andere Leitungen für den Clock mißbrauchen, was
jedoch zu unterschiedlichen Laufzeiten führen könnte...

Gloabl Enable Output:
Ist ebenfalls eine extra geführte "Leitung", welche es ermöglicht
TRI-State Buffer an den Ausgangpins ein oder aus zu schalten.
Ich nehme an, daß diese Buffer optional sind, da in einigen Layouts mit
solchen CPLDs die GTS Leitung nicht bestückt war.

Gloabl Set/Reset:
Ist auch eine extra geführte "Leitung" womit man ein Globales Reset
Signal an alle Notwendigen Punkte gleichzeitig senden kann (ohne
unterschiedliche Laufzeiten) z.b. an ein Flip Flop.

Ich hoffe das habe ich so richtig verstanden, fall nicht: Einfach sagen
:)

Der XC95144XL hat ganze 81 IO Pins. Das ist dufte, denn so teile ich
diese Pins in 10 Gruppen mit je 8 Leitungen und führe sie dann auf
meinem Board an 10 Klemmen mit je 8 Pins.
Bleibt dabei ein PIN übrig und da habe ich den GSR Pin ausgewählt.
Diesen schließe ich an die Resetleitung meines Boards.
Ist nur die frage ob man den GSR Pin normalerweise High oder Low Aktiv
betreibt? Was kommt bei euren Designs am meisten vor, wie handhabt ihr
dieses Signal?
Im Notfall kann ich mein Schaltungsdesign so auslegen, daß man den
Reset durch das umlöten von zwei Widerstandänden sowohl als auch
betreiben kann. Was findet ihr besser?

Und als letztes habe ich mir gedacht, das es vielleicht keine schlechte
Idee ist allen restlichen IO-Pins (also 80) Pull Up oder Pull Down
Widerstände zu schenken (ist ja Weihnachten).

Zwar verfügt der CPLD selbst über die Möglichkeit ungenutzte Pins mit
internen PULL Up oder PULL Downs auszustatten, aber vielleicht sind ja
externe gar nicht schlecht?

Oder sehe ich das falsch? Habt ihr jemals externe PULL Up/Down
verwendet oder gebraucht? Sind immerhin 80 Widerstände die man sich
sparen könnte :)

Falls ich diese doch im Design lasse, dann werde ich es so handhaben,
daß durch einen Jumper zwischen PULL Up und PULL Down gewählt werden
kann.

Ich hoffe ich habe hier niemanden durch Fragen genervt, die schon
tausend mal vorgekommen sind (ich habe vorher zumindest nach den
Antworten gesucht) und vielleicht hat der eine oder andere noch ne
dufte Idee für meine Experimentierplatine :)

Bis denn,
Netbandit

von Dirk (Gast)


Lesenswert?

>Ist nur die frage ob man den GSR Pin normalerweise High oder Low >Aktiv
betreibt? Was kommt bei euren Designs am meisten vor, wie >handhabt ihr
dieses Signal?


Ich halte mich gerne an den AVR Standard (logisch 0 = Reset aktiv)

Gruß,
Dirk

von Stefan (Gast)


Lesenswert?

Hallo,
ich würde den GCK nicht auf einen Pin führen, sondern auf einen
Quarzoszillator, der mit auf dem Board ist. Einen Takt braucht man
immer, einen Reset nicht :-)
Wenn du die Leitungen eh auf 10 x 8er klemmen führst, so kannst du auch
einfach 10 SIL Widerstandsnetzwerke nehmen, du weist schon, diese
länglichen mit 9 Beinen alle in einer Reihe, von denen einer der
Gemeinsame ist, das sollte Layouttechnisch auch keinen großen
mehraufwand machen. Wenn man Pull Ups hat ist man immer auf der
sicheren Seite, wenn man z.B einen Taster nach GND anklemmt. Und wenn
schon Weinachten ist und du deinem Demo Board was spendieren willst,
dann bau noch n paar LEDs und Taster gleich mit aufs Board. Stören tun
sie ja nicht wenn die da sind, es stört aber wenn man bei jedem kleinen
Text immer Taster und LEDs rannfriemeln muss.

mfg
stefan

von Hagen (Gast)


Lesenswert?

>>Der XC95144XL hat ganze 81 IO Pins. Das ist dufte, denn so teile ich
>>diese Pins in 10 Gruppen mit je 8 Leitungen und führe sie dann auf
>>meinem Board an 10 Klemmen mit je 8 Pins.

Diese Vorgehensweise ist zu pauschal und du wirst mit späteren "on the
fly" Designs immer wieder Probleme bekommen auf diesen Headern die
Busse logisch zu gruppieren. Es wird nämlich öfters der Fall sein das
die Synthese ein Bus nicht exakt zu einem IO-Block zuordnen kann.
Der Effekt ist dann das ein zb. 16 Bit Datenbus auf deinen gruppierten
Headern ungleichmäßig verteilt sein dürfte.

Ich rate daher zu folgedenem. In der Mitte dein CPLD, drumherum ein
Karret aus Pin Headern. Am Boardrand dann mehrere 8/16/32 Bit Header
die per Steckbrücken verdrahtet werden können. Du brauchst dann nur
noch entsprechend viele kleine Litzen mit Buchsen.

Gruß Hagen

von Netbandit (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

danke schonmal wegen den Tips.

@Dirk:
>Ich halte mich gerne an den AVR Standard (logisch 0 = Reset aktiv)

An sich habe ich selten Bausteine gesehen, welche ein High Aktiven
Reset haben. Vielleicht verzichte ich ganz und gar auf diese
Möglichkeit zu gunten etwas mehr Platz auf der LP :)

@Stefan:
Ja grundsätzlich ist das eine gute Idee, man könnte ja einen IC Sockel
nehmen und einen Quarzoszillator draufsetzen. Andererseits ist so ein
Oszillator auch ganz schnell an die Klemme rangesteckt (der Klemmpin
für GCK)
Für Taster und Leds habe ich nicht genug Platz (bzw. nicht genug Platz
um diese abschaltbar zu gestalten) und pauschal an jedem Pin eine LED
oder einen Taster das gefällt mir nicht.
Jedoch werde ich mit sicherheit noch LED Platinen und Tasterplatinen
zum ranklemmen dazudesignen.

@Hagen:
Deine Idee gefällt mir sehr gut, doch wid auf einer Standart
Europlatine der Platz dann etwas knapp. An sicht müßte man eigendlich
eine schöne große Platine nehmen (doppelte EURO z.b.) und noch so
richtig schon viel schnickschnack dazu packen (Speicher etc.)
Aber das System mit den Klemmkontakten ist schon recht flexibel und
erlaubt mir einzelne Pins auf den 10 Klemmkontakten anabhänig zu
beschalten. Dadurch erziele ich ja schon fast wieder den Effekt den du
vorschlägst.

Ich habe mal ein Bild meiner Mega128 Experimentalplatine angehangen.
Dort verwende ich die gleichen Klemmkontakte. Ich habe mir für das
nächste Jahr auch vorgenommen verschiedene kleine Zusatzplatinen (mit
Tastern  SRAM  LEDs ) hinzuzubauen, damit dürfte dann das System
perfekt sein.
Von den Klemmen erwarte ich mir eine sehr lange Lebenszeit (im
gegensatz zu Präzisionsstiftleisten die leicht mal verbiegen und
abbrechen).

von ope (Gast)


Lesenswert?

>>Ich halte mich gerne an den AVR Standard (logisch 0 = Reset aktiv)

>An sich habe ich selten Bausteine gesehen, welche ein High Aktiven
>Reset haben. Vielleicht verzichte ich ganz und gar auf diese
>Möglichkeit zu gunten etwas mehr Platz auf der LP :)

Nun, das ist nur die halbe Wahrheit. Stimmt, die meisten IC der 74xx
Reihe haben low active reset. Intern arbeiten zumindest die Xilinx
Teile mit ihren vordef. Blöcken (LSR16 etc.) jedoch (fast immer?) mit
active high. Intern müsste man dann wieder (indirekt) einen Inverter
für active low nehmen.

Zwei Möglichkeiten, die ich kenne:

1) in der architecture
1
constant RESET_ACTIVE : std_logic := '0'; -- oder '1'

2) als generic bei der entity
1
generic (
2
  RESET_ACTIVE : std_logic := '1';
3
);

und dann:
1
if (reset = RESET_ACTIVE) then
2
   ...
3
else ...

Damit kann man bis zum Zeitpunkt des PCB die Entscheidung
herauszögern.

Was Hagen schon angedeutet hat, dass die I/O von Bussystemen nicht
zwingend alle auf aufeinander folgende I/O Pins gelegt werden können
aufgrund der internen Struktur, ist schon problematisch. Dafür habe ich
allerdings keine Lösung (ist imo nervig).

Viele Grüße
Olaf

von Netbandit (Gast)


Lesenswert?

Hi Olaf,

danke für die Tips. Ins VHDL bin ich zwar noch nicht eingestiegen (habe
erst ein wenig mit Schematic eine Trockenübung betrieben) aber das habe
ich mir im neuen Jahr ganz fest vorgenommen.
Ich werde dann Sicherheitshalber das Reset für beide varianten
Layouten.
Und so kann ich im Notfall ein paar Widerstände umlöten.

Das mit den IOs ist wirklich etwas nervig, aber man kann halt nicht
alles haben :)

von A. N. (netbandit)


Lesenswert?

Hi,

so nun (im neuen Jahr) ist mein erstes Projekt zum Thema CPLD fertig.
Ich habe wie angekündigt eine Experimentierplatine gebaut und schon die
ersten kleinen Schematics getestet. Sie geht sehr gut und entspricht
meinen Erwartungen voll und ganz. Damit ich auch noch in einem Jahr
weiß welcher Pin zu welcher Klemmleiste geht und die wichtigsten
Informationen zum Betrieb und Nachbau immer parat habe, hab ich nun
eine Art "Projektdokumentation" bzw. "Datenblatt" dafür
geschrieben.

Ich bin ja kien Dipl.-Ing. und habe daher nie gelernt nach welchen
Regeln soetwas geschehen sollte, daher stelle ich es mal online.
Vielleicht hat der eine oder andere noch Tips welche Infos noch
dringend reingehören. Also ich bin ganz Ohr :)

von Gast Gast (Gast)


Lesenswert?

Hi!
Das ist mal ganz interessant zu sehen! Vielen Dank!
Möchte auch demnächst mit CPLDs anfangen und suche gerade alle
möglichen Infos zusammen.

von A. N. (netbandit)


Angehängte Dateien:

Lesenswert?

@Gast Gast

Hier sind die Eagle Datein für das Board, den CPLD_ISP und die
Bibliothekn für die verwendeten Bauteile.
Vielleicht hilft es ja.
Zusätzlich empfehle ich dir http://www.ulrichradig.de/
Viel Erfolg

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.