Kritisches Problem
Bei der Durchführung mehrerer Resets des JESD204B IP RTL State Machine Control DesignBeispiels, das in Intel® Arria® 10, Stratix® V, Arria® V oder Cyclone® V Geräten implementiert ist, können Sie beobachten, dass Interrupt-Pins (jesd204_tx_int und/oder jesd204_rx_int) aufgrund von Fehlern bestätigt werden, die aus dem tx_err (0x60) rx_err0 (0x60) gelesen werden können, und rx_err1 (0x64) Registern.
Verwenden Sie für Intel Arria 10 Geräte stattdessen das Designbeispiel Nios® II Prozessors.
Führen Sie für Stratix V-, Arria V- oder Cyclone V-Geräte die folgenden Änderungen am RTL durch:
- Ändern Sie die jesd204b_ed des Top-Level-Moduls in der Datei jesd204b_ed.sv.
Definieren Sie aktive High-Reset-Leitungen:
tx_link_rst_sync;
kabelgebundene tx_frame_rst_sync;
rx_link_rst_sync;
rx_frame_rst_sync;
kabelgebundene global_rst_sync;
Ändern Sie die Polarität des Resets in den folgenden Drahtzuweisungen:
Halten Sie den Kern im Reset-Modus gedrückt, bis der Transceiver bereit ist
weisen Sie global_rst_n_sync = ~global_rst_sync zu; Zuweisung global_rst_n_sync hinzufügen
zuweisen tx_avs_rst_n = avs_rst_n;
assign rx_avs_rst_n = avs_rst_n;
zuweisen tx_frame_rst_n = ~tx_frame_rst_sync;
zuweisen rx_frame_rst_n = ~rx_frame_rst_sync;
weisen Sie tx_link_rst_n = ~tx_link_rst_sync zu;
assign rx_link_rst_n = ~rx_link_rst_sync;
altera_reset_controller ist ein aktiver High-Reset-Synchronizer. Ändern Sie die Eingabe und Ausgabe der Reset-Synchronizer-Instanziierungen entsprechend, um die richtige Polarität widerzuspiegeln:
//
Reset-Synchronizer für globales Reset (mgmt clock domain)
//
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) u_avs_rst_sync (
.reset_in0 (~global_rst_n),
.clk (mgmt_clk),
.reset_out (global_rst_sync)
);
Führen Sie bitweise UND auf wire_tx_ready &wire_rx_ready aus, bei denen es sich um Bussignale handelt.
//
Reset-Synchronizer für Transport Layer Reset (Frame-Clock-Domäne)
//
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) u_tx_frame_rst_sync (
.reset_in0 (~(wire_frame_rst_n &wire_tx_ready))
.clk (frame_clk),
.reset_out (tx_frame_rst_n_sync)
);
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) u_rx_frame_rst_sync (
.reset_in0 (~(wire_frame_rst_n &wire_rx_ready))
.clk (frame_clk),
.reset_out (rx_frame_rst_n_sync)
);
//
Reset-Synchronizer für Basiskern-Reset (Link-Clock-Domain)
//
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) u_tx_link_rst_sync (
.reset_in0 (~(wire_link_rst_n &wire_tx_ready))
.clk (link_clk),
.reset_out (tx_link_rst_n_sync)
);
altera_reset_controller #(
. NUM_RESET_INPUTS (1),
. OUTPUT_RESET_SYNC_EDGES ("deassert"),
. SYNC_DEPTH (2)
) u_rx_link_rst_sync (
.reset_in0 (~(wire_link_rst_n &wire_rx_ready))
.clk (link_clk),
.reset_out (rx_link_rst_n_sync)
);
----------------------------------------
2. Ändern Sie im Modul control_unit (control_unit.sv) den Reset-Wert für frame_rst, link_rst, avs_rst und xcvr_rst.
//
Ausgaberegister für Basiskern-Transceiver-Resets
//
always @ (posedge clk oder negedge rst_n)
Beginnen
wenn (~rst_n) beginnen
frame_rst < = 1'b1;
link_rst < = 1'b1;
avs_rst < = 1'b1;
xcvr_rst < = 1'b1;
end else beginnt
Für dieses Problem ist keine Lösung geplant.