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
@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
@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
Äää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
> 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 !
@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
@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
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
>>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
@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
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.