Derived Clocks in VHDL

Gast #4171088
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
Persönliche Seite #4171104
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?
Gast #4172188
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 :).
Gast #4173512
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.
Gast #4173589
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?
Gast #4173610
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren