Hallo zusammen,
ich möchte gerne für ein ise Projekt (Spartan 6) Timing Constraints
erstellen.
Zunächst ein Überblick über mein System:
Ich habe synchrone 2 Interfaces.
Das erste bringt für Input und Output Daten jeweils eine eigene CLK mit,
die an das FPGA angeschlossen sind.
Für das zweite liefert das FPGA die CLK, zu der Input und Output Daten
erstellt werden.
Daraus resultiert folgende CLK Struktur:
DataInClk für Input Daten des ersten Interfaces
DataOutClk für Output Daten des ersten Interfaces
Externe Clk --> nur Input CLK für PLL
PLL/SysClk --> System Clock, Haupttakt für die interne Logik
PLL/IfClk --> Interface Clock, Datentakt für das zweite Interface
(Input und Output), wird an externe Komponente via ODDR2 ausgegeben
Daraus entstehend folgende CLK Constraints:
1 | NET "ExtClkC" TNM_NET = "ExtClkC";
|
2 | TIMESPEC TS_iExtClkC = PERIOD "ExtClkC" 25 MHz HIGH 50 %;
|
3 | NET "DataInClk" TNM_NET = "DataInClk";
|
4 | TIMESPEC TS_iPhy1RxcC = PERIOD "DataInClk" 25 MHz HIGH 50 %;
|
5 | NET "DataOutClk" TNM_NET = "DataOutClk";
|
6 | TIMESPEC TS_iPhy1RxcC = PERIOD "DataOutClk" 25 MHz HIGH 50 %;
|
die PLL macht daraus:
--> SysClk 30 MHz
--> IfClk 25 MHz
--> IfClkN 25 MHz, 180° Phasenverschoben für ODDR2
Aus den Datenblättern kann ich die entsprechenden Setup und Hold Zeiten
entnehmen.
Für das erste Interface sind die Inputdaten +- 10ns um die steigende
Flanke stabil.
Dies würde ich über folgendes Constraint abdecken:
1 | NET "DataIn<0>" OFFSET = IN 8 ns VALID 16 ns BEFORE "DataInClk" RISING;
|
Für die Output Daten benötigt das erste Interface eine Setup Zeit von 10
ns und eine Hold Zeit von 0 ns
Dies würde ich über das folgende Constraint abdecken. (CLK Period = 40
ns)
1 | NET "DataOut<0>" OFFSET = OUT 28 ns AFTER "DataOutClk";
|
Die Setup und Hold zeiten am Interface 2 können exemplarisch als
identisch zu Interface 1 angenommen werden.
Nun meine Fragen:
1. Sind meine Timing Constraints so korrekt?
2. Wie kann ich Timing Constraints erstellen, die sich auf meine PLL
Takte beziehen? Ich habe diese ja nicht als Net zur Verfügung.
3. Wie kann ich Timing Constraints erstellen, die sich auf den CLK
Ausgangspin beziehen?
4. Wie muss ich Übergänge zwischen den Clk Domains konstrainen?
Entsprechende Synchonisierungen sind in der FW vorgesehen ("Handshake",
einsynchronisieren der Handshake Signale)
Viele Grüße,
Jürgen P.