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