Forum: FPGA, VHDL & Co. Einstellbare Taktdomain erstellen


von Steffen Hausinger (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Fpgakuechle K. (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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