Problem mit Xilinx-ISE und FPGA

Ich habe angefangen, mich mit den Xilinx Spartan FPGAs zu beschäftigen. Ich benutze die Xilinx ISE9.2 um ein Design für einen XC3S200 zu erzeugen (VHDL) und bin jetzt auf folgendes Problem gestoßen: Zur Erzeugung eines schnellen internen Taktes benutze ich den DCM (Digital Clock Manager). Wenn ich aber die Taktquelle für den DCM zuvor noch durch Logik laufen lasse (konkret teile ich den Eingangstakt durch

6 und möchte auch noch zwischen zwei Taktquellen selektieren können) kommen beim Übersetzen immer diese Fehlermeldungen:

ERROR:NgdBuild:455 - logical net 'clk10mhz' has multiple driver(s): pin O on block clk10mhz1 with type LUT3, pin PAD on block clk10mhz with type PAD ERROR:NgdBuild:924 - input pad net 'clk10mhz' is driving non-buffer primitives: pin O on block clk10mhz1 with type LUT3

Ich kann das umgehen, indem ich das ausgewählte Clock-Signal auf einen Ausgang gebe und an einem damit verbundenen Eingang wieder einlese. Ich möchte das Problem aber lieber ordentlich lösen. An welcher Stelle muss ich was tun?..

Mathias

Reply to
Mathias Weierganz
Loading thread data ...

Der DCM kann auch einen Takt teilen.

Dafür gibt es Takt Multiplexer

Da hast du zwei Ausgänge mit einander verbunden, das ist nicht erlaubt.

Tom

Reply to
Thomas Reinemann

Das lässt die Fehlermeldung zunächst vermuten, ja.

In diesem Fall besagt sie allerdings nicht, daß Mathias das war; den Fehler kann auch ISE selbst verursacht haben (die Fehlermeldung stammt ja auch nicht vom HDL-compiler, und bezieht sich auf Bausteine, die Mathias vermutlich gar nicht explizit instanziert hat).

Ist schon 'ne Weile her, daß ich zuletzt mit ISE gearbeitet habe, aber ich meine mich zu entsinnen, daß ISE sich in Zusammenhang mit DCMs ganz gerne recht zickig anstellt, wenn man Clocks intern erzeugt. Weiter besagen meine Erinnerungsfragmente, daß das Problem relativ leicht in den Griff zu bekommen war, wenn man die nur begrenzt verfügbaren GCBs verschwendet (je einen pro externer Clock, dann die intern generierte, die endgültige hinter DCM, sowie eine für FB).

Irgendwie ging das aber. Weiss ich nicht. Möge jemand, der da jetzt etwas mehr mit zu tun hat, da was zu sagen.

Gruss

Jan Bruns

--
Ein paar Fotos: http://abnuto.de/gal/
Reply to
Jan Bruns

Richtig. Das Design funktioniert ja, wenn ich das intern erzeugte Clocksignal extern verbinde. Bei interner Verbindung gibt es diesen Fehler.

Auf die Abkürzung GCB bin ich noch nicht gestoßen. (Globla Clock Buffer?)

Vermutlich kann man das im UCF-File machen mit user constraints. Aber in dem Bereich bin ich noch Anfänger. Bin gerade auf UG331.pdf von Xilinx gestoßen. Aber 524 Seiten zu den 216 von DS099 und den 396 Seiten des Constraints Guide erzeugen einen gewissen Widerstand, insbesondere wenn das Design mit Trick funktioniert.

Vielleicht weiss jemand noch mehr?

Mathias.

Reply to
Mathias Weierganz

Ja. Mag sein, daß ich die Abk. einfach falsch wiedergegeben habe. Halt die ca. 8 globalen, superguten Clock-lines. Die kann man (ich glaube unter dem Namen TBUF, oder so ähnlich) per HDL instanzieren. Unter irgendwelchen Voraussetzungen musste man das sogar mehr oder weniger.

Wie gesagt, es gibt dazu noch diese Problematik mit dem DCM Clock-Feedback. Das blöde dabei war wohl, daß ISE unbedingt die Phasendifferenz korrigieren will, selbst wenn man eine solche Optimierung gar nicht benötigt, bzw. hinterher manuell regeln (oder einmalig fixieren) will.

Ferner solte man für Tests mit Clocks immer ein Projekt mit irgendeiner Mindest-Komplexität verwenden (ansonsten kann's wegen irgendwelcher Rausoptimierungen an einer Stelle dann zu Fehlern in Folgegliedern der Toolchain kommen).

Mehr weiss ich dazu jetzt erstmal nicht mehr auswendig, sorry. Viel Erfolg!

Gruss

Jan Bruns

--
Ein paar Fotos: http://abnuto.de/gal/
Reply to
Jan Bruns

Jetzt muss ich mir mal selber antworten. Es ist immer wieder erstaunlich: Kaum macht mans richtig, schon funktionierts.

Die Lösung ist ein kleines Kreuz an der richtigen Stelle, wenn man mit dem architecture wizard arbeitet: clkin source external oder internal. Bei externer Source wird ein Buffer eingefügt, der zu der Fehlermeldung führt, wenn trotzdem der Takt durch interne Verknüpfungen erzeugt wird.

Allerdings sollte man sich nach dem Ändern auch noch mal das instantiation template anschauen und den eigenen Code entsprechend anpassen.

Mathias.

Reply to
Mathias Weierganz

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.