Hallo zusammen, ich verwende einen Softcore in meinem Design. Der Core besitzt zwei Taktdomänen, einen für den Kern (ALU etc.) und einen für die Peripherie (Timer, UART etc.). Ich würde mir jetzt gerne ein Register hinzufügen, über das ich einen Prescaler konfigurieren kann, der aus dem Kerntakt einen Peripherietakt herunterteilt. Wie mache ich das? Der "Clock Enable Generator" aus Taktung FPGA/CPLD passt hier nicht, da der Softcore wirklich eine Taktleitung verwendet. Ich müsste also in jeden Prozess gehen und ihn so umschreiben, dass er das Gate-Signal "CE" akzeptiert. Das wäre wahnsinnig aufwändig! Es gibt doch aber sicher eine elegantere Lösung! Wie kann ich aus einer Taktdomäne einen zweiten, einstellbaren Takt ableiten? BUFGCE vielleicht?! Wie funktioniert das?! Grüße Steffen P.s.: Ich verwende einen Xilinx Spartan 3E und ISE Webpack.
Eine umkonfigurierbare PLL müsste das leisten, oder man macht es per Hand mit einem echten Teiler, einem BUFG und geht dann auf eine PLL und das Design. Es kann aber geschehen, dass das trotzdem nicht läuft, weil deine internen Module gfs Annahmen über den Peripherietakt machen, um Verzöerungen zu berechnen, etc.
Jürgen S. schrieb: > Eine umkonfigurierbare PLL müsste das leisten, oder man macht es per > Hand mit einem echten Teiler, einem BUFG und geht dann auf eine PLL und > das Design. > > Es kann aber geschehen, dass das trotzdem nicht läuft, weil deine > internen Module gfs Annahmen über den Peripherietakt machen, um > Verzöerungen zu berechnen, etc. Während der Frequenzänderung das Modul im Reset halten und die resetleitung auf den höchsten Takt constrainen. Wenn du eine PLL/DLL nutzt dann das Locksignal zur Freigabe des resets mit heranziehen.
Nur zur Verdeutlichung: Dies hier: > Es kann aber geschehen, dass das trotzdem nicht läuft, weil deine > internen Module gfs Annahmen über den Peripherietakt machen, um > Verzöerungen zu berechnen, etc. war so zu verstehen, dass - wenn nicht im Modul verschiedene Takte vorgesehen waren . es passieren kann, dass das Modul funktionell nicht richtig arbeitet, weil gerade bei den Interfaces oft mit waits, Taktverzögerungen und mit Delays gerarbeitet wird, bei denen der Programmierer den eigentlichen Takt im Hinterkopf hatte. Bei anderem Tatk muss das also nicht unbedingt richtig arbeiten.
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.