ปัญหาสำคัญ
เมื่อทําการรีเซ็ตหลายครั้งของการออกแบบการควบคุมเครื่องสถานะ IP RTL ของ JESD204B ดําเนินการใน Intel® Arria® 10 Stratix® V, Arria® V Cyclone® หรืออุปกรณ์ V คุณอาจสังเกตเห็นพินที่ขัดจังหวะ (jesd204_tx_int และ/หรือ jesd204_rx_int) ที่กําลังถูกตรวจสอบเนื่องจากข้อผิดพลาด ซึ่งสามารถอ่านได้จาก tx_err (0x60), rx_err0 (0x60) และการลงทะเบียนrx_err1 (0x64)
สําหรับอุปกรณ์ Intel Arria 10 ให้ใช้ตัวอย่างการออกแบบโปรเซสเซอร์ Nios® II แทน
สําหรับอุปกรณ์ Stratix V, Arria V หรือ Cyclone V ให้ดําเนินการแก้ไข RTL ดังต่อไปนี้ :
- ปรับเปลี่ยน jesd204b_edโมดูลระดับบนสุดในไฟล์ jesd204b_ed.sv
กําหนด สายรีเซ็ตสูงที่ใช้งานอยู่:
tx_link_rst_syncสายไฟ
tx_frame_rst_syncสายไฟ
rx_link_rst_syncสายไฟ
rx_frame_rst_syncสายไฟ
global_rst_syncสายไฟ
ปรับเปลี่ยน ขั้วการรีเซ็ตในการบ้านสายต่อไปนี้:
ถือคอร์ในโหมดรีเซ็ตจนกว่าตัวรับส่งสัญญาณจะพร้อม
กําหนดglobal_rst_n_sync = ~global_rst_sync; เพิ่มการบ้านglobal_rst_n_sync
กําหนดtx_avs_rst_n = avs_rst_n;
กําหนดrx_avs_rst_n = avs_rst_n;
กําหนดtx_frame_rst_n = ~tx_frame_rst_sync;
กําหนดrx_frame_rst_n = ~rx_frame_rst_sync;
กําหนดtx_link_rst_n = ~tx_link_rst_sync;
กําหนดrx_link_rst_n = ~rx_link_rst_sync;
altera_reset_controllerคือตัวซิงโครไนซ์การรีเซ็ตระดับสูงที่ทํางานอยู่ ปรับเปลี่ยนอินพุตและเอาต์พุตของการสร้างอินสแตนซ์ตัวซิงโครไนซ์รีเซ็ตตามที่แสดงถึงขั้วที่ถูกต้อง:
//
รีเซ็ตตัวซิงโครไนซ์สําหรับการรีเซ็ตทั่วโลก (โดเมนนาฬิกา mgmt)
//
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)
);
ดําเนินการ AND ตามบิตบนwire_tx_ready &wire_rx_ready ซึ่งเป็นสัญญาณบัส
//
รีเซ็ตตัวซิงโครไนซ์สําหรับการรีเซ็ตเลเยอร์การขนส่ง (โดเมนเฟรมนาฬิกา)
//
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)
);
//
รีเซ็ตตัวซิงโครไนซ์สําหรับการรีเซ็ตคอร์พื้นฐาน (โดเมนลิงก์นาฬิกา)
//
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. ในโมดูล control_unit (control_unit.sv) ให้ เปลี่ยน ค่าการรีเซ็ตสําหรับframe_rst link_rst avs_rst และxcvr_rst
//
ทะเบียนเอาต์พุตสําหรับการรีเซ็ตตัวรับส่งสัญญาณคอร์ฐาน
//
เสมอ @ (posedge clk หรือ negedge rst_n)
เริ่ม ต้น
ถ้า (~rst_n) เริ่มต้น
frame_rst
link_rst
avs_rst
xcvr_rst
สิ้นสุดอย่างอื่นเริ่มต้น
ไม่มีแผนแก้ไขปัญหาสําหรับปัญหานี้