Forum: FPGA, VHDL & Co. Clock umschalten


von R. K. (uc_student)


Lesenswert?

Hallo zusammen

Ich arbeite mit einem CyclonIII und Quartus. Ich möchte meinen ADC und 
somit auch die Verarbeitungsblöcke mit unterschiedlichen Clocks treiben.

Dafür habe ich einen PLL mit 4 Ausgängen erzeugt. Danach wollte ich mit 
einem Block den korrekten Ausgang anhand von 2 leitungen auswählen. Doch 
Quartus meinte dies sei nicht optimal weil ein normaler Ausgang kein 
Clock sein sollte.
Somit wollte ich den Block ALTCLKCTRL nehmen und so meinen Clock 
auswählen. Leider funktioniert dieser Block anscheinend nut mit externen 
Clock-Eingängen...
Gibt es eine geschickte Möglichkeit einen Clock anhand von 2 Leitungen 
auszuwählen?

von Christian R. (supachris)


Lesenswert?

Wenn nicht ganz akut zwingende Gründe wie Strom sparen am ADC es 
erfordern macht man das nicht so, sondern arbeitet intern und am ADC mit 
vollem Takt und Clock Enable.

von R. K. (uc_student)


Lesenswert?

Den ADC treibe ich immer mit demselben Clock. Jedoch habe ich eine 
Kommunikations-Datenraten-abhängige Dezimation. Nach der 
Daten-Dezimation möchte ich eben mit unterschiedlichen Frequenzen die 
Signalverarbeitung machen.

von Vanilla (Gast)


Lesenswert?

R. K. schrieb:
> Hallo zusammen
>
> Ich arbeite mit einem CyclonIII und Quartus. Ich möchte meinen ADC und
> somit auch die Verarbeitungsblöcke mit unterschiedlichen Clocks treiben.

...

R. K. schrieb:
> Den ADC treibe ich immer mit demselben Clock. Jedoch habe ich eine
> Kommunikations-Datenraten-abhängige Dezimation. Nach der
> Daten-Dezimation möchte ich eben mit unterschiedlichen Frequenzen die
> Signalverarbeitung machen.


was denn nun, uterschiedliche Clocks am ADC oder Verarbeitung mit 
unterschiedlicher Abtastrate im FPGA? Ich bin verwirrt...

Aber unabhängig ein paar algemeine Tipps:

1) Einen ADC versorgt man, wenn einem die LSBs lieb sind nicht über eine 
PLL aus einem FPGA heraus. Noch weniger über Nichtclockresourcen aus dem 
selben.

2) Wenn die Abtastrate am ADC gleich bleibt, spricht nichts dagegen im 
FPGA alles mit der selben Frequenz laufen zu lassen. Gegebenenfalls 
packt man ein Clockenablenetzwerk und mit in die Verarbeitung und kann 
so die Abtastrate (und EMV Austrahlung) im FPGA reduzieren. Literatur 
findet sich zumeist unter dem Begriff Multicycle(constraints) da hier 
die Nutzung eines hohen Taktes und einer niedrigeren 
Verarbeitungsgeschwindigkeit zu relaxten Timinganforderungen führen 
können (und entsprechend genutzt werden wollen)...

Gruß

Vanilla

von R. K. (uc_student)


Lesenswert?

Also sehe ich dies korrekt:

Ich nutze den PLL für den ADC (dies kann sich bei einer späteren 
Implementation auf einem eigenen Board ändern)

Die langsameren Clocks für die spätere Verarbeitung kann ich auch mit 
einem einfachen Logik-Mux zuteilen, welch die Timinganforderungen sowiso 
erfüllt sind?

von John D. (Firma: Privat) (doejohn)


Lesenswert?

R. K. schrieb:
> Also sehe ich dies korrekt:
>
> Ich nutze den PLL für den ADC (dies kann sich bei einer späteren
> Implementation auf einem eigenen Board ändern)

Ja, wenn dir der Jitter nix ausmacht. Da man die Clock gedoch nicht auf 
Ausgänge legen soll kann man einen Trick verwenden. Man instantiert ein 
DDR Outputregister am Ausgang. Ein Eingang wird auf '0', der andere auf 
'1' gesetzt und mit der Clock getaktet. Dadurch bleibt die Clock da wo 
sie hingehört, nämlich auf dem internen Clocknetzwerk.
>
> Die langsameren Clocks für die spätere Verarbeitung kann ich auch mit
> einem einfachen Logik-Mux zuteilen, welch die Timinganforderungen sowiso
> erfüllt sind?

Kannst man (theoretisch) machen. Je nach Taktfrequenz bekommt man dann 
ein Design was gar nicht tut, dann hast du Glück gehabt. 
Wahrscheinlicher ist es jedoch, dass dein Design Dinge tut, die es nicht 
soll das aber sporadisch. Und jede neue Synthese/Place&Route läuft dann 
so ab. Neues Spiel, neues Glück!
Nee, im Ernst. FPGAs habe intern dediziert Netzwerke für bestimmte 
Signale, z.B. Reset oder auch Clock, wobei das Clocknetzwerk das 
Wichtigste ist. Dieses Netzwerk versorgt innerhalb des Chips nur die 
Clockeingänge von Flip-Flops, RAMS, etc. Der Jitter ist minimal und der 
Delay fest und minmal. In dem Moment in dem du mehrere Clocks auf einen 
Multiplexer gibst wird das Signal nach dem Multiplexer über das 
Logik-Netzwerk geroutet und nicht mehr über das Clocknetzwerk. Je nach 
deiner Logik, die dann an dieser generierten Clock hängt, gibt es einen 
schönen, großen Fan-Out und für jedes Signal unterschiedliche 
Laufzeiten. Die sich bei jedem neuen Place & Route auf's neue ändern, 
d.h. selbst wenn du Glück hast und dein Design tut, nach dem nächsten 
P&R muss das nicht mehr so sein.
Finger weg von Clock-Multiplexern, es sei denn man hat sie im 
Clock-Netzwerk zur Verfügung (Xilinx hat die, Altera weis ich nicht). 
Die sollte man aber auch nur verwenden, wenn man die Logik gut unter 
Kontrolle hat, saubere Resets, etc. Ansonsten wirst du ziemlich schnell 
Bekanntschaft mit einem Phaenomen machen welches sich "Metastability" 
nennt. Kein Spass, das ist der Debugging Alptraum schlechthin.

Gruss,
  JD

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.