ID บทความ: 000076355 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 24/05/2017

ทําไม RapidIO I อาจport_okสัญญาณสถานะไม่ทํางานหลังจากเริ่มต้นการเชื่อมต่อใหม่

สิ่งแวดล้อม

  • Intel® Quartus® Prime Pro Edition
  • IP เอฟพีจีเอ Intel® RapidIO (IDLE1 สูงสุด 5.0 Gbaud)
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT

    ปัญหาสำคัญ

    คำอธิบาย

    สถานะ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)

    ผลิตภัณฑ์ที่เกี่ยวข้อง

    บทความนี้จะนำไปใช้กับ 2 ผลิตภัณฑ์

    Arria® V FPGA และ SoC FPGA
    Cyclone® V FPGA และ SoC FPGA

    เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้