Hallo zusammen
vielen Dank für Eure Antworten! Ich hoffe, dass ich es nun richtig
verstanden habe und keinen Knoten im Kopf habe.
Ich fasse mal kurz zusammen, wie ich die Delta Zyklus Thematik
verstanden habe:
- Die Zuweisung oFastClk <= sFastClk; verzögert oFastClk gegenüber
sFastClk um einen Takt.
- Zuordnungen wie z.B. sAbstractedOddrInputBits <=
sDirectOddrInputBits_20 sollten unkritisch sein, da es sich hierbei um
Daten und nicht um Taktsignale handelt (zumindest aus der Sicht der
Simulation)
- Die Clock Verzögerung kann dazu führen, dass sich Signale
vermeintlich schon kurz vor der Taktflanke ändern, nämlich genau dann,
wenn ich sie mit sFastClk schreibe und mit oFastClk lese
Dies ist in meinem Beispiel der Fall, da ich im Global Module mit
sFastClk arbeite und ausserhalb mit oFastClk. Der folgende Code sollte
somit mein Problem beheben:
1 | ilPll100M0 : PLL100M0
|
2 | port map (
|
3 | CLK => iExtClk, -- external clock "ExtClk"
|
4 | RESET => sPllReset100, -- External Reset
|
5 | CLKOP => sSysClkPll, -- normal internal system clock (= 50.0 MHz)
|
6 | CLKOS => sFastClkPll, -- fast internal system clock (= 100.0 MHz)
|
7 | LOCK => sPllLock100 -- PLL Lock Signal, used for PLL20M0 reset
|
8 | );
|
9 |
|
10 | -- Output Assignment
|
11 | oSysRst <= sSysRstSyn(sSysRstSyn'high);
|
12 | sSysRst <= sSysRstSyn(sSysRstSyn'high);
|
13 | sSysClk <= sSysClkPll;
|
14 | oSysClk <= sSysClkPll;
|
15 | sFastClk <= sFastClkPll;
|
16 | oFastClk <= sFastClkPll;
|
Liege ich mit meiner Annahme richtig?
Muss ich das Reset Signal ebenfalls mit dieser doppelten Zuweisung
versehen? (Reset ist in Prozessen asynchron beschrieben)
Simuliere ich so, dann stelle ich fest, dass ich noch einen Fehler in
meiner Implementierung habe, da die ODDR Ausgänge eben doch nicht
synchron zu sReferenceClk sind.
Wo wir gerade bei dem Thema sind:
sSysClk und sFastClk kommen beide aus der PLL, unterscheiden sich in der
Frequenz um den Faktor 2 und sind phasengleich. In der Synthese brauche
ich mir bei Taktübergängen somit keine Gedanken machen, da das FPGA Tool
ja die Taktbeziehung kennt und somit sich auch um das Timing kümmern
kann. Ich muss lediglich darauf achen, die entsprechenden Signale auf
einen schnellen Takt zu verkürzen oder auf dem Rückweg auf 1 langsamen
Takt zu velängern.
Wie sieht es jedoch in der Simulation aus? Kann ich von einer
Gleichzeitigkeit der beiden Takt Events ausgehen? Muss ich hier noch
Vorkehrungen treffen?