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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.