Fragen zur Anbindung von ADC: ADS5463 mit FPGA

Im Anfänger FPGA Designer.

Ich muss die ADC-Komponente anschließen: ADS5463. Datenblatt: http://www.ti.com/lit/ds/symlink/ads5463.pdf mit einem FPGA (lattice ecp3).

Ich brauche Vorschläge, wie ich mit der Implementierung beginnen kann. Nach meinem Verständnis muss ich nur eine Zustandsmaschine basierend auf der Zeittabelle und dem Diagramm aus dem Datenblatt ausführen:Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

und um die Ein- und Ausgänge dieses ADC zu verstehen, insbesondere die digitalen Signale: (clk, dry, d[11:0], ovr)

Geben Sie hier die Bildbeschreibung einIch habe einen Text für den Verilog-Code geschrieben, denke aber immer noch darüber nach, wie ich die Logik wirklich schreiben soll:

    module top(
    input clk,                       //clock input = 250MHz
    input rst,
    output reg dry,              //DRY
    output reg ovr,              //OVR
    output reg [11:0] d_o;       //D[11:0]
    );

    reg [5:0] cs, ns;

    localparam  idle        = 6'b000001,
                start       = 6'b000010,
                busy        = 6'b000100,
                read_middle = 6'b001000,
                read_end    = 6'b010000,
                done        = 6'b100000;    

//clock input = 250MHz -> Ts=1/fs=4ns
    localparam  t_aperture = 200 ,   //200ps
                latency    = 8   ,   //3.5 input clock cycles -> 8 rising+falling edges of clock
                t_dry      = 1600,   //950-1600ps CLK to DRY delay
                t_data     = 2100,   //750-2100ps CLK to DATA/OVR delay
                t_skew     = 650 ;   //-350-650ps: t_data-t_dry: DATA to DRY skew.


        always @(posedge clk or posedge rst)
        if (rst) begin
            cs <= idle;
        end else begin
            cs <= ns;
        end

    always @(posedge clk or posedge rst)
        if (rst) begin
            ns = idle;
            dry = 1'b0;
            ovr   = 1'b0;
            d_o   = 12'b000000000000;


        end else begin
            case (curr_state)
                idle:

                start:

                busy:

                read_middle:

                read_end:

                done:

endmodule

Meine Fragen:

  1. Was ist meine Aufgabe bei dieser Art von Design? Ich muss nur Zustandsbearbeitung basierend auf der Zeittabelle schreiben und alle Ein-/Ausgänge mit dem FPGA verbinden und ich werde die richtigen Ergebnisse sehen?

  2. Auf welche Signale sollte ich basierend auf dem Datenblatt die Kontrolle haben? Zum Beispiel ist DRY ein Signal, das der ADC erzeugt und das ich in meinem Code verwenden sollte, oder ich sollte die Logikpegel in meinem Code steuern => nehmen Sie den CLK, teilen Sie ihn durch 2 und verzögern Sie ihn auf die Mitte der Uhr?

  3. Irgendeine Idee, wie ich meine Zustandsmaschine bauen sollte? Anscheinend brauche ich hier 3-4 Zustände: IDLE, BUSY, DONE. Irgendeine Idee, wie ich eine Verzögerung von 200 ps mit 150-250 MHz clk erzeuge? Ich dachte darüber nach, nur 1 clk Verzögerungszyklus zu machen, und es wird gut funktionieren. Vielleicht ein bisschen langsamer als das, was das Datenblatt empfiehlt, aber sicher und funktioniert.

  4. Ich würde mich sehr über eine gute Erklärung oder einen Code für den Anfang freuen.

Danke!!

Springen Sie nicht zur Verwendung einer Finite State Machine (FSM) oder einer anderen Logikschaltung für diese Angelegenheit. Verwenden Sie einen FSM, da die Schaltung Zustände benötigt. Einige Ingenieure mögen FSMs, weil sie mit ihnen spielen können, indem sie Zustände und Müll hinzufügen, bis es zu funktionieren scheint, aber verwirrend und schwer zu verstehen ist. Ihr ADC hat keine unterschiedlichen Zustände. Es hat einen vorhersagbaren, sich wiederholenden Betrieb, also verwenden Sie stattdessen eine vorhersagbare, sich wiederholende Zählerschaltung. Es wird viel kürzer und einfacher zu entwerfen, zu verstehen und Fehler zu finden. Einfachheit: Einfachheit führt zu Zuverlässigkeit. Lesen Sie das Datenblatt erneut, sehen Sie sich die Muster im ADC-Bus an.

Antworten (1)

Alles, was Sie vom FPGA bereitstellen müssen, ist das Taktsignal für den ADC. Achten Sie darauf, dass DRY aktiviert wird, und wenn dies der Fall ist, können Sie die 12 Datenbits und das Überlaufsignal parallel laden. Was danach passiert, hängt davon ab, was Sie mit den abgetasteten Daten tun möchten.

Also soll meine Zustandsmaschine nur 3,5 Taktzyklen und eine steigende Flanke von trocken warten, danach nach gültigen Ausgängen von D[11:0] suchen?
Wenn Sie dieses Adc-Modul disgn würden. Was wären die Ein-/Ausgänge in Ihrem Code? Was ich angefangen habe, scheint ok zu sein?
Ich denke, bis Ihre Zustandsmaschine betriebsbereit ist, wird der ADC bereits viel mehr als 3,5 Taktzyklen gesehen haben. Sorgen Sie sich nur um DRY.
Du hast nichts angefangen . Sie müssen nicht all diese Zeitverzögerungen und Latenzen angeben. Achten Sie einfach darauf, dass DRY hoch geht, und speichern Sie dann die 12 oder 13 Eingangssignale, die Ihnen wichtig sind. Ich habe keine Ahnung, was Sie tun möchten, wenn es einen Überlauf gibt, oder was mit den Daten passiert, nachdem Sie sie erhalten haben.
Okay danke. Wie viele Werte würden Sie für diese Schnittstelle verwenden? scheint nach dem, was Sie sagen, alles, was ich brauche, nur 1 zu sein. Warten Sie auf die steigende Flanke von DRY und das ist alles. Ich bin mir nicht sicher, warum ich überhaupt eine Zustandsmaschine dafür brauche
Im Moment hat es keinen Sinn. Ich möchte nur sehen, wie der ADC funktioniert