Forum: FPGA, VHDL & Co. Derived Clocks in VHDL


von Optimus (Gast)


Lesenswert?

Hallo!

Ich sitze gerade vor einem kleinem Problem in meinem VHDL Design. Ich 
verwende in diesem Design eine Haupt-Clock (CLKA) sowie eine davon 
abgeleitete (CLKB).

Mein Problem liegt in den Clock-Domain-Übergängen:
 __            __
|FFA| -------> |FFB|
 ^             ^
CLKA          CLKB

Daduch, dass CLKB einige Delta-Delays mehr besitzt als CLKA passiert es, 
dass der FFB den Ausgang vom ersten FFA bereits im selben Zyklus 
sampelt:
1
           ____      ____
2
CLKA  ____|    |____|    |____
3
           _________
4
CLKB  ____|         |_________
5
      ________________________
6
FFA_d
7
           ___________________
8
FFA_q_____|
9
           ___________________
10
FFB_d_____|
11
           ___________________
12
FFB_q_____|

Ich hoffe es wird deutlich, was ich meine. Mir ist klar, dass es sich 
hierbei um ein Simulations"problem" handelt. Meine Idee wäre nun, um ein 
"normales" Verhalten des FFs zu erlangen, die CLKA um die selbe Anzahl 
an Delta-Delays zu verzögern wie CLKB (variabel). Was wäre hierfür die 
einfachste Methode bzw. gäbe es Alternativen?

Grüße

: Bearbeitet durch Moderator
von J. S. (engineer) Benutzerseite


Lesenswert?

Du wirst das manuell so hindrehen müssen, wie es simulieren soll. Dabei 
ist zu beachten, welche Fälle es in der Realität gibt. Ich mache das so, 
dass ich die Takte so entkopple, dass es kein Taktflankenproblem gibt, 
bzw es umgekehrt provoviere, um die Lösung, die den Fall in der Realität 
abfängt, (die man ja vorsehen muss), zu testen.

Kommen diese Takte aus einer PLL?

von Optimus (Gast)


Lesenswert?

Danke für die schnelle Antwort.

Ja, die Takte sollen später aus eine PLL kommen, wobei ich von 
synchronen Taktflanken ausgehen kann.

von user (Gast)


Lesenswert?

erzeuge doch extra delta-delays so dass es passt.

clk_delta1 <= clk_i;
clk_delta2 <= clk_delta1;

usw

von Klakx (Gast)


Lesenswert?

Mit dem delta Delay ist zumindest die simulation behoben. Im asic 
Entwurf geht das unter Umständen auch. Im fpga ist es vielleicht besser 
das Signal von der fallenden Flanke zu starten

von Optimus (Gast)


Lesenswert?

Danke für die Antworten! Ich glaube ich werde es für die Simulation 
zunächst so lösen, dass ich dem Ausgangssignal vom ersten FF ein 
minimales Delay hinzufügen werden, sodass es ein Zeitevent später erst 
aktualisiert wird.

Die Idee der eingefügten Delta-Delays hatte ich auch erst, allerdings 
können diese variieren, da die abgeleitete Clock einen variablen Teiler 
besitzt. Dann zwar immer noch möglich, aber das Einfügen eines minimalen 
"echten" Delays zum Signal à la "q <= d after 1 ps" erscheint mir 
einfacher.

Falls ich mich nicht irre, sollte die Synthese doch sowieso zwei 
Register daraus produzieren. Das Synthese-Tool sollte es doch nicht 
interessieren, wie die Clocks zu einander stehen, sondern sieht den 
Aufbau zweier Register. Oder denke ich dort falsch?

PS: Danke an den Mod für das Einfügen der Code Formatierung :).

von Klakx (Gast)


Lesenswert?

Stichwort: Setup & Hold Zeiten
solang ein Datum sich vor oder nach der Clock-Flanke sich in diesem 
Zeitfenster ändert, kannst du nicht ausschließen, dass es sich beliebig 
verhält (mal übernommen/mal nicht).

mit 1ps erschlägst du natürlich alle Deltay-Delays in der Simulation. 
Aber was macht dein Place&Route? "Warning unusual high holdvialoations 
trying to fix.."
In der Testbench ist das natürlich nicht verkehrt. Im Design siehst du 
eigentlich gerade deine Fehlerquelle.

von Optimus (Gast)


Lesenswert?

Hi Klakx!
Ich weiß nicht genau ob ich deinen Hinweis 100%ig richtig verstehe, 
allerdings dachte ich, dass ich keine zusätzlichen Probleme bezüglich 
Setup&Hold haben sollte.

Zur Situation:
Ich habe das Design mit einer einheitlichen globalen Clock bereits 
synthetisiert und validiert. Jetzt habe ich es modifiziert, so dass 
gewisse Teile des Designs mit einer abgeleiteten Clock arbeiten. Die 
Flanken der abgeleiteten Clock können als synchron zu der Hauptclock 
angenommen werden.
Daher meine vielleicht naive Frage: Wenn ich die Flanken der 
abgeleiteten Clock als synchron zur Hauptclock annehmen kann und mein 
Design bei der höchstmöglichen Clock keine S&H Fehler aufweist, woher 
sollten dann neue S&H Probleme kommen?

von Klakx (Gast)


Lesenswert?

Optimus schrieb:
> [..] Wenn ich die Flanken der
> abgeleiteten Clock als synchron zur Hauptclock annehmen kann und mein
> Design bei der höchstmöglichen Clock keine S&H Fehler aufweist, woher
> sollten dann neue S&H Probleme kommen?

Wenn du keine S&H Probleme hast, dann hast du keine S&H Probleme :)

Es hängt immer von den Tools ab. Wenn die Tools sich nicht darum kümmern 
bzw. den derived Clock nicht erkennen, hast du immer mindestens eine 
C->Q-Verzögerung (z.B. bei D-FF durch 2 Teiler) zwischen Haupt- und 
Derived Clock.

Natürlich kann die Sache auch gut ausgehen. Man sollte nur aufpassen.

von VHDL hotline (Gast)


Lesenswert?


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.