ปัญหาสำคัญ
สถานะport_okในบิต-0 ข้อผิดพลาดของพอร์ต 0 และสถานะ CSR (0x158) อาจอยู่ที่ระดับต่ําหลังจากมีการเตรียมใช้งานลิงก์อีกครั้ง การเริ่มต้นลิงก์ใหม่ทําได้โดยการกระตุ้นPORT_DISบิต 23 ใน Port 0 Control CSR (0x15C) หรือเมื่อมีการรีเซ็ตพาร์ทเนอร์ลิงก์ ซึ่งอาจทําให้เกิดข้อผิดพลาดร้ายแรงระหว่างการทํางานปกติ
ปัญหานี้เกิดขึ้นเนื่องจากสาเหตุต่อไปนี้:
- คอร์ RapidIO อาจออกจากการรีเซ็ตก่อนที่จะมีการรีเซ็ตตัวรับส่งสัญญาณ ซึ่งจะทําให้คอร์ RapidIO เริ่มทํางานในขณะที่ตัวรับส่งสัญญาณยังอยู่ในการรีเซ็ต
- กระบวนการปรับแนวคําใหม่จะจํากัดอยู่ที่เลน 0 และจะทํางานเพียงครั้งเดียวในระหว่างการเริ่มต้นลิงก์ใหม่
ปัญหานี้มีผลต่อตัวแปร RapidIO I ต่อไปนี้:
- Arria® V/Cyclone® V พร้อมโหมด x2
- Arria V/Cyclone V ที่อัตรารับส่ง 5000 Mbaud
- Arria V พร้อมโหมด x4 ที่อัตรารับส่ง 3125 Mbaud
เพื่อให้แน่ใจว่าตัวรับส่งสัญญาณไม่ได้รีเซ็ตและพร้อมที่จะเริ่มการทํางานใดๆ ก่อนคอร์ RapidIO ให้มีสิทธิ์ RapidIO Core Reset ด้วยสัญญาณสถานะ พร้อมใช้งานของตัวรับส่งสัญญาณในโมดูล _riophy_reset:
TX_SIDE
@(posedge tx_clk หรือ negedge reset_n) เสมอ
เริ่ม ต้น
ถ้า (!reset_n) เริ่มต้น
tx_ready_s0 <= 1'b0;
tx_ready_s1 <= 1'b0;
สิ้นสุดอย่างอื่นเริ่มต้น
tx_ready_s0 <= tx_ready;
tx_ready_s1 <= tx_ready_s0;
สิ้น สุด
สิ้น สุด
เริ่ม @ เสมอ (posedge tx_clk หรือ negedge reset_n)
if(!reset_n)เริ่มต้น
txreset_n_p2 <= 1'b0;
txreset_n_p1 <= 1'b0;
txreset_n <= 1'b0;
สิ้นสุดอย่างอื่นเริ่มต้น
ถ้า (!gxbpll_locked_tx_clk_d2 || !tx_ready_s1) เริ่มต้น
txreset_n_p2 <= 1'b0;
txreset_n_p1 <= 1'b0;
txreset_n <= 1'b0;
สิ้นสุดอย่างอื่นเริ่มต้น
txreset_n_p2 <= 1'b1;
txreset_n_p1 <= txreset_n_p2;
txreset_n <= txreset_n_p1;
สิ้น สุด
สิ้น สุด
สิ้น สุด
RX_SIDE
@(posedge rx_clk หรือ negedge reset_n) เสมอ
เริ่ม ต้น
ถ้า (!reset_n) เริ่มต้น
rx_ready_s0 <= 1'b0;
rx_ready_s1 <= 1'b0;
สิ้นสุดอย่างอื่นเริ่มต้น
rx_ready_s0 <= rx_ready;
rx_ready_s1 <= rx_ready_s0;
สิ้น สุด
สิ้น สุด
เริ่ม @ เสมอ (posedge rx_clk หรือ negedge reset_n)
if(!reset_n)เริ่มต้น
rxreset_n_p2 <= 1'b0;
rxreset_n_p1 <= 1'b0;
rxreset_n <= 1'b0;
สิ้นสุดอย่างอื่นเริ่มต้น
ถ้า (!rx_ready_s1) เริ่มต้น
rxreset_n_p2<=1'b0;
rxreset_n_p1<=1'b0;
rxreset_n<=1'b0;
สิ้นสุดอย่างอื่นเริ่มต้น
rxreset_n_p2 <= 1'b1;
rxreset_n_p1 <= rxreset_n_p2;
rxreset_n <= rxreset_n_p1;
สิ้น สุด
สิ้น สุด
สิ้น สุด
หากต้องการกระตุ้นกระบวนการปรับแนวคําใหม่ด้วยตนเอง ให้ทําตามขั้นตอนต่อไปนี้ผ่านอินเทอร์เฟซตัวรับส่งสัญญาณ Avalon-MM phy_mgmt:
(1) ตอบกลับ phy_mgmt_write=1'b1 เพื่อระบุการดําเนินการเขียน
(2) เขียนข้อมูล phy_mgmt_writedata=32'b0 ลงในที่อยู่ phy_mgmt_address=9'h80 เพื่อกําหนดเป้าหมายสําหรับเลน 0
(3) เขียนข้อมูล phy_mgmt_writedata=32'b1 ลงในที่อยู่ phy_mgmt_address=9'h85 เพื่ออธิบายrx_enapatternalignซึ่งจะกระตุ้นการทํางานของการจัดตําแหน่งคําสําหรับเลน 0
(4) เขียนข้อมูล phy_mgmt_writedata=32'b0 ลงในแอดเดรส phy_mgmt_address=9'h85 เพื่อถอดrx_enapatternalign
ทําซ้ําขั้นตอนข้างต้นสําหรับเลนอื่นๆ ทั้งหมด: เลน 1 (0x80=32'b1), เลน 2 (0x80=32'b2) และเลน 3 (0x80=32'b3)