Gast
#2469040
Hallo Ich verwende einen Virtex 5 FPGA und einen externen AD-Wandler. Die Digitalisierung funktioniert auch schon ganz gut nur manchmal kommen fehlerhafte Werte zustande. Ich vermute mal dies liegt am Timing. Bis jetzt habe ich leider noch nicht so viele Erfahrung mit den Constraints. Ich habe einen Takt von max. 200MHz. Die Daten werden per DDR-Verfahren an den FPGA übertragen. Laut Datenblatt des AD-Wandlers kommen die Daten typischer Weise immer genau bei einer ansteigenden und fallenden Flanke. Im Worst Case können aber die Daten 0.5ns vor oder hinter der CLK-Flanke noch nicht stabil sein. Daher sollte man diesen Bereich meiden. Ich habe es wie folgt programmiert. Die CLK geht auf einen CLK-BUFGDS und von dort auf einen internen BUFG. Die Daten werden auf einen IBUDS gelget. Danach werden diese direkt mit einem IDDR verbunden. Der IDDR-Datenausgang ist dann direkt mit einem BLOCK-RAM verbunden. Demnach habe ich meine Constraints wie folgt erzeugt: Alle Datenleitungen zu einer Gruppe zusammenfassen: INST "IDDR_ADC_1_DATA_0" TNM = GROUP_IDDR_ADC_1_DATA; INST "IDDR_ADC_1_DATA_1" TNM = GROUP_IDDR_ADC_1_DATA; ... Die Clockfrequenz festlegen NET "ADC_1_DRY_P" TNM_NET = ADC_1_DRY_P; TIMESPEC TS_ADC_1_DRY_P = PERIOD "ADC_1_DRY_P" 5 ns HIGH 50%; Die Daten sollen 2ns vor der ansteigenden Flanke für 1,5ns stabil anliegen. OFFSET = IN 2.0 ns VALID 1.5 ns BEFORE "ADC_1_DRY_P" TIMEGRP "GROUP_IDDR_ADC_1_DATA" RISING; OFFSET = IN 2.0 ns VALID 1.5 ns BEFORE "ADC_1_DRY_P" TIMEGRP "GROUP_IDDR_ADC_1_DATA" FALLING Und genau bei diesem OFFSET-IN-Constarint habe ich so meine Probleme. In Anhang habe ich 2 Screenshits hinzugefügt. Hier kann man sehen das vor und hinter jeder Flanke die Daten noch nicht stabil anliegen. Genau dies will ich verwenden. Laut diesem Bild muss der OFFSET-IN-Parameter siehe 2. Screenshot 0.5ns groß sein. Da bei 200MHz die High Phase 2.5ns entspricht muss Data Valid Parameter 1.5ns sein. (Sorry fehler auf dem Screenshot hier steht 2) Jedoch habe ich ein Beispiel Constraint im Internet gefunden was den Offset-In-Parameter auf 2ns setzt und den Data Valid Parameter auf 1.5ns. Diese Variante halte ich auch für logisch richtig jedoch bin ich verunsichert und wollte Euren Rat einholen. Da die Datenleitungen ja direkt mit IDDR verbunden werde habe ich kein IDELAY für die Datenleitungen vorgesehen. Ich verwende nur ein IDELAY für die CLOCK-Leitung. Hierzu habe ich mit einem DCM aus 50MHz 200MHz erzeugt. Diese 200MHz habe ich mit dem IDELAYCNTRL verbunden. Den IDELAY habe ich auf FIX eingestellt. Was mich nur wundert ist das pro Stuffe ein Delay von 78ps erzeugt wird. Veränder ich jedoch den Wert und mache erneut eine Timing Analyse sehe aich das dies nicht konstant ist. Ich verwende ISE 11.4 und einen Virtex 5 mit dem langsamsten Speedgrade.

