Mal eine Frage an die Profis:
Ich habe eine Schaltung mit einem CPLD mit vielen Pins. Ich kann die
Pin-Belegung des CPLD (da ich die Grenzen des CPLD nicht voll ausnutze)
recht gut beeinflussen.
Und:
In EAGLE ist der CPLD, um den es geht (Beispiel: XC9572), als PLCC 84
vorhanden.
Nun, nach einem Platzieren der Bausteine auf der Platine würde sich erst
die günstigste Zuordnung "Echt-Pin" zu "Funktions-Pin" ergeben, die ich
beim CPLD constraints design noch gar nicht kenne.
Ich höre, es gibt Autorouter (nicht Eagle :-) ) welche CPLDs oder FPGAs
"mitrouten" können.
Aber wie geht ihr da vor?
CPLD plazieren, von Hand ein wenig "rumrouten" und dann die Pins des
CPLD "nach gutdünken möglichst günstig" belegen? CPLD neu fitten und
dann im Schematik korrigieren, dann wieder Board und erneut routen? Und
das ein Paar mal?
Bis auf triviale Fälle (alle Eingänge kommen von links, alle Ausgänge
gehen nach rechts weg) ist das so einfach nicht - und die "optimalen
Verteilungen" des Fitters möchte ich auch nicht unbedingt einfach so
hinnehmen, falls sich da viele Leiterbahnen kreuzen würden ausserhalb
des Chips.
Für Tipps bin ich dankbar.
@ Mike (Gast)
>CPLD plazieren, von Hand ein wenig "rumrouten" und dann die Pins des>CPLD "nach gutdünken möglichst günstig" belegen? CPLD neu fitten und>dann im Schematik korrigieren, dann wieder Board und erneut routen? Und>das ein Paar mal?
Es gibt zwei Probleme.
a) Routing der Platine
b) Routing des CPLDs intern.
Da muss man aufpassen, dass man sich nciht ins Knie schiesst. Auch so
ein CPLD hat das bisweilen enge Grenzen.
>Für Tipps bin ich dankbar.
Ich würde die Pins erstmal so verteilen, dass die Luftlinien
kreuzungsarm aussehen. Dann den CPLD mit diesen Pinzuordnungen fitten.
Wenns passt -> OK.
MfG
Falk
Hallo Mike,
Du hast, auch beim Eagle, ja die Möglichkeit, über die Bibliothek Deines
Bausteins den I/O-Pins die gleiche Priorität zu geben. Dann hast Du die
Möglichkeit, im Schematic ein Pin-Swapping durchzuführen, das die
Luftlinien in der Board-Ansicht im Sinne der Kreuzungsfreiheit (resp.
-armut) optimiert.
Und die eigentliche Zuweisung erfolgt dann ja zwischen Deinen
Signalnamen und den physikalischen Pins durch die FPGA-Programmierung.
Gruß Uwe
@ Mike
1. Bei FPGA überlege ich bereits beim Zeichnen des Stromlaufes, wie die
großen d.h vielbeinigen Teile zueinander plaziert werden müssen
(Handskizze). Das Geschieht anhand der dicken Busse und der Lage von
Stteckverbindern an den Lp-Kanten.
2. Unter Berücksichtigung der Bankeigenschaften wird der FPGA auf der
Skizze in die richtige Lage gedreht.
3. Dann werden mit dem FPGA-Constraints-Editor die Beine in die richtige
Reihenfolge gebracht und die Implementierung laufen gelassen.
4. Wenn keine Warnungen bezüglich Laufzeiten usw. ausgegeben werden,
kann man es so lassen, wenn nicht, müssen die Beine evtl. noch mal
umsortiert werden.
5. Stromlauf mit der als funktionsfähig erkannten Beinzuordnung
zeichnen.
6. Placen
7. Routen (meist doch interaktiv)
8. Wenn es nicht aufgeht, diese Prozedur möglicherweise mehrmals
durchlaufen.
Das war der Tip vom Profi. Auch die Benutzung von PADS (TM) verringert
das Problem nicht wesentlich, außer man kauft die Kopplung zwischen PADS
und z.B ISE, mit der man Pins im Layout verschieben kann und die ISE
merkt es und richtet sich danach. Der Preis dafür liegt aber jenseits
von Gut und Böse.
Danke an Euch!
Nun, man wird übermütig und füllt den CPLD bis auf den Rand, und schon
streikt der Fitter bei Sonderwünschen.
Ok, ich bin beim vielleicht 10. Durchgang mit "kleinen" Schrittweisen
Änderungen. Es ist nicht immer so einfach Nachzuvollziehen unter welchen
Umständen der Fitter (bei XILINX) streikt.
Und dann muss man entscheiden.
Verstehe jetzt wieso man da Wochen verbringen kann.
Die Hinweise waren wertvoll. Folgendes habe ich rausdestilliert:
1. Man lasse im CPLD genug Raum für den Kompromiss zwischen "Balance"
(beim XC95288 offensichtlich in Kombination mit "Low/High Power" eine
Möglichkeit, ihn abrauchen zu lassen...) und Density zu haben. Dann kann
man einige Pins gut "verschieben".
2. Zu viele Änderungen auf einmal und man ist evtl. so weit verloren,
daß man "reset" machen kann und fängt fast neu an.
3. Die Platine muss nicht so aussehen wie wenn jemand Linien mit einem
Kamm durch Butter gezogen hätte. Nice, aber wenn's der Router hinbekommt
und die Sache vom Timing etc. kein Problem macht, dann nehme ich es hin.
4. Manuell nacharbeiten ist ein Muss. Wobei ich inzwischen gerne dem
Autorouter "Hinweise" lege, ein wenig "Rip-Up" mache und ihn nochmal
starte. Hinweise sind: Geringfügig verschobene Bauteile, Barrieren aus
tRestrict oder bRestrict und evtl. Änderungen in den Router-Parametern:
OrthStep und DiagStep wirken recht schön wenn man sie behutsam über ALLE
Steps (auch die Optimizer) konsequent durch ändert. Es bringt nichts,
beim Routen so zu bewerten und dann beim Optimizen ganz anders.
Ein sehr Fader Geschmack bleibt übrig. Der Autorouter macht bei solchen
Pin-Dichten teilweise einen solchen Blödsinn, daß ich ihn am
liebsten....
Was mich auch stört, ist daß die Back-Annotation nicht schlau genug ist,
mich im Board Leitungen tauschen zu lassen und diese dann im Schematik
zu korrigieren. Es geht immer nur von Schematik-Änderung zu Board. Oder
habe ich da was nicht begriffen oder falsch gemacht?
Grüße,
Mike
@ Mike (Gast)
>3. Die Platine muss nicht so aussehen wie wenn jemand Linien mit einem>Kamm durch Butter gezogen hätte.
. . . willst du ein Muster auf der Butter, geh mitm Kamm rüber
. . . Schwamm drüber, das ist der Schwamm drüber Blues . . .
;-)
>Ein sehr Fader Geschmack bleibt übrig. Der Autorouter macht bei solchen>Pin-Dichten teilweise einen solchen Blödsinn, daß ich ihn am>liebsten....
Dan tu das einfach. Machen die Profis auch. Auch der beste Autorouter
ist nicht halb so schlau wie ein guter Designer. Ganz zu schweigen von
einem sehr guten Designer.
>Was mich auch stört, ist daß die Back-Annotation nicht schlau genug ist,>mich im Board Leitungen tauschen zu lassen und diese dann im Schematik>zu korrigieren. Es geht immer nur von Schematik-Änderung zu Board. Oder
Ja und? Reicht doch. Im Layout die Leitungen mit dem Auge anclicken, die
werden "gehighlightet" (gibts da kein schönes deutsches Wort?) und unten
der Name angezeigt. Dann einfach in den Schaltplan gehen und die Pins
tauschen.
Mfg
Falk
@ Uwe (Gast)
Ich habe auch einen Footprint, in dem jeder CPLD Pin als swapbares
Einzelgatter definiert ist. Leider kann man aber in Eagle nicht danach
suchen, wo das Gatter mit der Pinnummer X ist. Das macht dann die Suche
recht schwer.
Zum Problem "Fitten des CPLD" bei vorher festgelegten Pinning. Muss man
nicht auf Zeit optimieren, hat der Fitter mehr Freiheiten und kommt
meist zu einem Ergebniss.
@ Uwe Bonnes (Firma TU Darmstadt) (uwebonnes)
>Ich habe auch einen Footprint, in dem jeder CPLD Pin als swapbares>Einzelgatter definiert ist.
Als Gatter? Ob das so sinnvoll ist?
MfG
Falk