Wie verbindet man einen ADC mit FPGA über das CLKOUT-Signal in Verilog?

Ich habe einen ADC (TLC2323-12), der (soweit ich aus dem Datenblatt verstehe) zwei Modi zur Steuerung der Ausgabe des konvertierten Signals hat. Eine Methode ist mit dem Eingangssignal SCK, das vom FPGA gesteuert werden kann, wann immer Sie den Wert zum FPGA verschieben möchten, und die andere über CLKOUT, das ist ein interner Takt vom ADC, der "automatisch und platzend" (sorry Ich bin neu dabei) spucken die Ergebnisse nach und nach von der 12-Bit-Auflösung insgesamt aus. Diese letzte Methode wird im Datenblatt als "High-Speed" im Vergleich zur SCK-Methode beschrieben.

Jetzt konnte ich den ADC mit der SCK-Methode steuern, da ich die Signale vom FPGA-Obermodul einfach senden und den gewünschten Wert auswählen kann, im Allgemeinen arbeite ich mit nur 1 Takt. Aber mit dem CLKOUT verhält sich dieser anscheinend wie eine zweite Uhr, also ist dies ein Dual-Clock-System?

Was sollte ich tun, um die Schnittstelle richtig zu codieren, wenn ich die CLKOUT-Methode verwende? Es gibt jetzt 2 Uhren. Der FPGA-interne Takt und das vom ADC kommende CLKOUT, das dem FPGA die Verfügbarkeit der Daten "mitteilen" kann.

Ich habe gelesen, dass ein einfacher Weg vielleicht darin besteht, ein asynchrones FIFO zu codieren, das vom CLKOUT schreiben und von der FPGA-Uhr lesen kann. Ist das richtig?

Die Schnittstelle ist seriell, 2 Kanäle.

Antworten (1)

Ich denke, Sie müssen ein wenig weiter gehen als Ihre vorgeschlagene Lösung. Ich würde vorschlagen, dass Sie die Daten mit der ADC-Uhr vom ADC in ein Register lesen lassen. Das Register sollte lang genug sein, um den gesamten ganzzahligen Wert vom ADC aufzunehmen. Sobald dieses Register mit einem Lesewert voll ist, würde die zugeordnete Zustandsmaschinenlogik ein Signal erzeugen, um anzuzeigen, dass der Wert gültig war und sich nicht ändern wird und von der Haupt-FPGA-Logik gelesen werden kann.

Aus Sicht der vom Haupt-FPGA-Systemtakt angesteuerten Logik wäre das Register-Complete-Signal asynchron, Sie könnten es jedoch als Freigabesignal verwenden, um die Daten in einem Systemtaktzyklus bei der nächsten Systemtaktflanke in ein anderes Register zu kopieren . Damit hätten Sie nun die Daten synchron zum FPGA-Systemtakt zur Verfügung.

Die einzige Einschränkung bei diesem Schema, die ich vorhersehen kann, besteht darin, dass der FPGA-Takt höher sein müsste als der ADC-Takt, um sicherzustellen, dass die Daten ausreichend lange verfügbar sind.

Sollte ich in diesem Fall 12 verschiedene Datenregister und 12 verschiedene "Bereit" -Signale verwenden? Da der ADC-Takt die Daten nacheinander verschiebt, stehen sie nacheinander zur Verfügung, und ich möchte nicht warten, bis 12 Bits abgeschlossen sind, damit das FPGA mit dem Lesen beginnt. Und ich war auch besorgt über das, was Sie gesagt haben, was ist, wenn die Ausgabedaten nicht lange genug da sind oder sich im falschen Moment ändern, sodass das FPGA sie nicht aufnehmen kann, wäre es nicht besser, den ADC die Daten speichern zu lassen fester Speicher, beenden Sie die Konvertierung gleichzeitig mit dem fpga-Lesen, um schließlich den fpga-Befehl adc zu erstellen, um die Konvertierung erneut zu starten.
Ich bin davon ausgegangen, dass Sie den gesamten ganzzahligen Wert vom ADC für den nachfolgenden Prozess benötigen, daher schlage ich ein einzelnes 12-Bit-Register vor, das in über 12 ADC-Taktzyklen eingelesen werden könnte [wahrscheinlich als Schieberegister], aber dann würden alle 12 Bit ausgelesen durch das FPGA in einem Systemtaktzyklus. Das Bereitstellen des Datensignals als Freigabesignal für die Leselogik löst das Synchronisationsproblem. Ich habe die Antwort geändert, um dies hoffentlich klarer zu machen.