Forum: FPGA, VHDL & Co. Constraint - Verzögerung zwischen DCM Clock und PAD oder DCM Clock und Data Eingang


von Gustl B. (-gb-)


Lesenswert?

Hallo,

ich habe einen externen Takt, 50MHz. Der geht in einen DCM der daraus 
200MHz macht.

Diese 200MHz gebe ich auf einen Pin an dem ein ADC hängt.
Als Eingänge habe ich die 8 Datenpins vom ADC, die ich zu einem 
Zeitpunkt im FPGA speichern muss.

Ich würde also gerne irgendwie angeben wie lange nach der Flanke am 
Ausgang zum ADC die Daten richtig an den Eingängen anliegen.

Oder:
Bestimmen wie die Taktflanke am Ausgang zum ADC verschoben ist zum 
internen generierten Takt.

Aus dem DCM kommt also ein Takt raus mit 200MHz, sagen wir Takt200, den 
gebe ich auf ein PAD mit

Port(
   ADCCLK: out std_logic
);

und dann

ADCCLK <= Takt200;

Jetzt speichere ich die ankommenden Daten vom ADC mit dem internen 
Takt200. Und gegenüber dem würde ich gerne den ausgegebenen Takt, also 
ADCCLK verschieben, oder eben angeben wann die Dateneingänge valide 
sind.

Ich schaffe es nichtmal den Takt200 oder ADCCLK als Taktnetz zu 
beschreiben.

Wie geht sowas? Ich kann da wo man die Verzögerung auswählen kann immer 
nur gegenüber dem externen 50MHz verschieben, aber das will ich ja 
nicht.

Danke!

Edit:
Jetzt versuche ich das mit einem zweiten DCM, der bekommt den 200MHz 
Takt rein, und da kann man dann die Phasenverschiebung einstellen und 
auf CLK0 ausgeben.

Oder gibt der das nur auf CLKFX aus? Dann wsind die 200MHz zu viel als 
Eingang für den DCM im Spartan 3E.

Was passiert wenn ich beim DCM als Eingang 75MHz nehme, als Ziel 200MHz 
einstelle und dann eine Phasenverschiebung von 90°? Was wird da gegen 
was verschoben?

: Bearbeitet durch User
von Duke Scarring (Gast)


Lesenswert?

Gustl Buheitel schrieb:
> Diese 200MHz gebe ich auf einen Pin an dem ein ADC hängt.
Keine gute Idee.
Der Jitter der durch den FPGA erzeugt wird, schlägt sich als 
Amplitudenrauschen in den gesampelten Werten nieder.
Was für einen FPGA verwendest Du? Xilinx, Sparten 3E?

Besser ist es den ADC mit dem saubersten Takt zu versorgen, denn man 
hat.


> Aus dem DCM kommt also ein Takt raus mit 200MHz, sagen wir Takt200, den
> gebe ich auf ein PAD mit
>
> Port(
>    ADCCLK: out std_logic
> );
>
> und dann
>
> ADCCLK <= Takt200;
Hier ist es günstiger einen ODDR-Flip-Flop zu verwenden. Bei Spartan6 
geht es nur noch mit dem DDR-FF.


> Ich schaffe es nichtmal den Takt200 oder ADCCLK als Taktnetz zu
> beschreiben.
>
> Wie geht sowas?
Spätestens im Timing Report findest Du die Namen der abgeleiteten Takte 
bzw. der constraints dazu.
Auf die kannst Du Dich beziehen.

Duke

von Gustl B. (-gb-)


Lesenswert?

Hallo,

also ich habe auf dem Board, ein Nexys2 einen 50MHz Takt drauf, und 
einen Spartan3e. Dann habe ich da auch einen Board mit Flash-ADC 
drangelötet.

Board: http://www.knjn.com/ShopFlashy.html
ADC: http://www.ti.com/product/adc08200

Jetzt habe ich auch einen Monitor dran auf dem ich den Signalverlauf 
ausgebe, mit 1024x768 Pixeln und 75MHz Pixeltakt. Den ADC habe ich 
bisher sauber mit dem Pixeltakt betrieben, und auch mit im FPGA 
generierten 100MHz.
Ich hätte aber natürlich gerne die vollen 200MHz die der ADC kann. Doch 
wenn ich das einfach wie bisher mache, bekomme ich Datenmüll als 
Antwort, also ich dann dann nichtmehr nur einen Takt zum Erfassen der 
Daten und Takten des ADCs verwenden, sondern brauche da irgendwie 
verschobene Takte oder muss die Dateneingänge verzögern.

Mit zwei (eigentlich drei) DCMs funktioniert das jetzt bei 150MHz 
sauber.
(Zuerst mache ich aus den 50MHz die 75MHz Pixeltakt)
Dann macht ein DCM aus den 75MHz die 150MHz und dann ein weiterer DCM 
aus den 150MHz wieder 150MHz aber mit Phasenverschiebung, die gehen dann 
auf das Pad zum ADC, mit den ersten 150MHz werden die Daten gespeichert.

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.