Forum: FPGA, VHDL & Co. Pinning vom XC9572


von Gargamel (Gast)


Lesenswert?

Hallo,

weiß jemand, wieso die Pins vom XC9572 nicht einfach I/O genannt werden, 
sondern explizit die Information verfügent an welchem "Function-Block" 
und welcher "Macro Zelle" die Pins hängen?

Ist es da nicht egal wie man wo seine Leitungen anschließt und darauf 
vertraut, dass das Synthesetool alles richtig macht?

gruß
Gargamel

von Falk (Gast)


Lesenswert?

@Gargamel

>weiß jemand, wieso die Pins vom XC9572 nicht einfach I/O genannt werden,
>sondern explizit die Information verfügent an welchem "Function-Block"
>und welcher "Macro Zelle" die Pins hängen?

Ganz einfach, weil eben trotz des hohen Freihitsgrades eben doch nicht 
alle Logik beliebig verteilt werden kann. Wenn zusammgehörige Logik auf 
verschiedene Funktion-Bloks verteilt wird, wird sie unter Umständen 
langsamer, braucht mehr Verdrahtungsrssourcen und Produkttereme. Im 
schlimmsten Fall passt das Design nicht in den CPLD, obwohl es bei 
geordneter Verteilung gepasst hätte.

>Ist es da nicht egal wie man wo seine Leitungen anschließt und darauf
>vertraut, dass das Synthesetool alles richtig macht?

"Vertrauen ist gut, Kontrolle ist besser."
  W.I.L.

;-)
Falk

von Gargamel (Gast)


Lesenswert?

@Falk:

Danke schonmal. Das heißt also ich sollte darauf achten, dass ich 
ähnliche Leitungen zusammenfasse - wie z.B. 8Bit Datenleitungen usw - 
und an ein Function-Block anschließe. Okay das sollte möglich sein. Ich 
hab bisher nur mit FPGAs gearbeitet und da ging es halt immer irgendwie 
:-)

gruß
gargamel

von Gargamel (Gast)


Lesenswert?

Äääh ...

Ich hab da noch eine Frage :-(

Hab einen kleinen taktsynchronen Adress-Dekoder mit einem gemultiplexten 
8Bit Adress/Datenbus und jeweils 8 Ein- und Ausgänge synthetisiert. Dazu 
hab ich ISE9.1 verwendet.

Kann mir jemand sagen, ob es bei den CPLDs auch Timing-Informationen 
gibt? Woher weiß ich wie schnell mein Takt sein darf?

gruß
Gargamel

von Klaus Falser (Gast)


Lesenswert?

> Das heißt also ich sollte darauf achten, dass ich
> ähnliche Leitungen zusammenfasse - wie z.B. 8Bit Datenleitungen usw -
> und an ein Function-Block anschließe.

Eher würde ich nicht zu viele Datenleitungen in einen Funktionblock 
legen, aber das hängt auch von der Anwendung ab.
Angenommen Du hast 8 interne 8-Bit Register und Du möchtest diese über 
den Datenbus lesen. Für jedes Bus-Signal gehen dann 8 Signale in den 
Function Block hinein, also insgesamt 64. Dazu kommen mindesten 3 
Signale für den Selektor, ergibt 67.
Der Function Block hat aber nicht so viele Eingänge, ich glaube 54 beim 
XC9500XL und 36 beim CoolRunner -> Problem !


von Falk (Gast)


Lesenswert?

@Klaus Falser

>Eher würde ich nicht zu viele Datenleitungen in einen Funktionblock
>legen, aber das hängt auch von der Anwendung ab.
>Angenommen Du hast 8 interne 8-Bit Register und Du möchtest diese über

Das klappt so oder so nicht. Ein Function-Block hat bestenfalls 18 
Macrozellen, das wird eng mit 64 FlipFlops . . .

Generell ist anzuraten, bei sehr ausgelasteten CPLDs das Design 
möglichst vor dem Layout der Leitperplatte komplett zu synthetisieren 
und dem Compiler das Pinning aussuchen lassen. Sonst könnte es passieren 
dass es mit dem festgelegten Pinning nicht passt.

MFG
Falk

von Gargamel (Gast)


Lesenswert?

@Falk:
Ja das hab ich dann auch gemacht. Erst synthetisiert, dann nach und nach 
die Pins gelockt und es geht noch einwandfrei.

Sind auch nur um die 35% belegt - also noch genug Resourcen übrig und es 
kommt im Normalfall auch nichts mehr dazu.

gruß
Gargamel

von Joerg W. (joergwolfram)


Lesenswert?

Eventuell ist es noch ratsam, den Fitter-Report nach hohen 
"Konzentrationen" an Produkttermen zu checken. Wenn man die Tools die 
Pins vergeben lässt (und nach Speed optimiert), liegen manchmal sehr 
produkttermlastige Signale eng nebeneinander. Wenn die Pins so gelockt 
sind und dann doch noch etwas geändert werden muss, kann es dann 
Probleme geben. Wenn das CPLD recht voll ist, kann dann das Design 
möglicherweise nicht mehr gefittet werden oder das Timing wird 
schlechter, da "Zwischensignale" gebildet werden müssen. Ich hatte schon 
Designs, die bei 65% Ressourcenverbrauch sorgfältige manuelle 
Optimierung der Pins gebraucht haben damit der Fitter nicht abbricht.

Gruß Jörg

von Klaus F. (kfalser)


Lesenswert?

>>Eher würde ich nicht zu viele Datenleitungen in einen Funktionblock
>>legen, aber das hängt auch von der Anwendung ab.
>>Angenommen Du hast 8 interne 8-Bit Register und Du möchtest diese über

>Das klappt so oder so nicht. Ein Function-Block hat bestenfalls 18
>Macrozellen, das wird eng mit 64 FlipFlops . . .

Die 8 internen Register sind natürlich in anderen Function Blocks! Aber 
die Multiplexer, welche zwischen den Register-Ausgängen umschalten sind 
aus Produkttermen des FB aufgebaut, und stehlen Produktterme von der 
benachbarten Macrozelle (beim XC9500). Deshalb sollte man bei 
Datenbussen immer ein Pin, zw. Macrozelle zwischen den Signalen 
freilassen.
Klaus

von Falk (Gast)


Lesenswert?

@Klaus Falser

>benachbarten Macrozelle (beim XC9500). Deshalb sollte man bei
>Datenbussen immer ein Pin, zw. Macrozelle zwischen den Signalen
>freilassen.

Nöö.
Man muss die Register bzw. Datenleitungen bitweise sortiert in 
Function-Blocks mappen.
Wahrscheinlich macht das der Compiler automatisch, wenn man ihm freie 
Hand lässt.

MfG
Falk

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.