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:
und um die Ein- und Ausgänge dieses ADC zu verstehen, insbesondere die digitalen Signale: (clk, dry, d[11:0], ovr)
Ich 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:
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?
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?
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.
Ich würde mich sehr über eine gute Erklärung oder einen Code für den Anfang freuen.
Danke!!
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.
Toni M