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

ทําไมมาตรการกระตุ้นการรับส่งข้อมูลจึงไม่ส่งการรับส่งข้อมูลไปยัง IP การสอบเทียบเมื่อใช้ Intel Agilex® 7 FPGA ตัวอย่างการออกแบบการจําลอง PHYLite ที่มีการเปิดใช้งานการกําหนดค่าใหม่แบบไดนามิก

สิ่งแวดล้อม

  • Intel® Quartus® Prime Pro Edition
  • IP เอฟพีจีเอ Intel® Stratix® 10 PHY Lite สำหรับอินเทอร์เฟซแบบขนาน
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    คำอธิบาย

    การออกแบบตัวอย่างการ®จําลอง INTEL AGILEX 7 FPGA PHYLite ที่เปิดใช้งานการกําหนดค่าใหม่แบบไดนามิกควรแสดงตัวอย่างของการกําหนดค่าใหม่แบบไดนามิกที่ทํางานโดยการเปลี่ยนความล่าช้าของ interpolator ผ่านมาตรการกระตุ้นการรับส่งข้อมูล อย่างไรก็ตาม เนื่องจากปัญหาในซอฟต์แวร์ Intel® Quartus® Prime Pro Edition เวอร์ชั่น 20.4 สัญญาณกระตุ้นการรับส่งข้อมูลในการออกแบบตัวอย่างการจําลอง PHYLite Intel Agilex® 7 FPGA ไม่ได้ส่งการรับส่งข้อมูลไปยัง IP การปรับเทียบหากกลุ่ม PHYLite ถูกตั้งค่าเป็นประเภทพินอินพุต เนื่องจากเฟส interpolator ถูกตั้งค่าเป็นค่าฮาร์ด

    หมายเหตุ: ปัญหานี้จะไม่เกิดขึ้นหากกลุ่ม PHYLite ถูกตั้งค่าเป็นประเภทพินเอาต์พุตหรือประเภทพินสองทิศทาง

    ความละเอียด

    เพื่อแก้ไขปัญหานี้ในซอฟต์แวร์ Intel® Quartus® Prime Pro Edition เวอร์ชั่น 20.4 เฟส interpolator ต้องไม่ใช่ค่าแบบ Hardcoded ซึ่งจําเป็นต้องทําการแก้ไขไฟล์ phylite_tester.sv และ test_logic_iossm.sv เพื่อให้ค่ากระตุ้นการรับส่งข้อมูลสามารถอ่านเฟส interpolator เพิ่มมูลค่าในการอ่าน แล้วจึงปรับเปลี่ยนเฟสตัวกลางเป็นค่าใหม่

    ดําเนินการเปลี่ยนแปลงต่อไปนี้ในไฟล์ที่ชื่อ "phylite_tester.sv":

    1. Line #159: ลบ State Declaration PHASE DELAY และ เพิ่ม การประกาศสองสถานะ: CORE_PHASE_DELAY และ IO_PHASE_DELAY

    2. บรรทัดที่ #177: เปลี่ยน จาก

    มอบหมาย iossm_test_start = (prbs_fsm == PHASE_DELAY);

    ถึง

    มอบหมาย iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY);

    3. Line #323: เปลี่ยน สัญญาณ prbs_fsm ในสถานะ INIT จาก

    prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE : ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE);

    ถึง

    prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "INPUT" ? IO_PHASE_DELAY : CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "INPUT" ? IO_DRIVE : CORE_DRIVE);

    4. Line #338: เปลี่ยนสัญญาณ prbs_fsm ในสถานะ IO_CHECK จาก

    prbs_fsm <= (CHANNEL_PIN_TYPE == "OUTPUT") ? ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE) : IO_DRIVE;

    ถึง

    prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "OUTPUT" ? CORE_PHASE_DELAY : IO_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "OUTPUT" ? CORE_DRIVE : IO_DRIVE);

    5. Line #338: เปลี่ยน สัญญาณ prbs_fsm ในสถานะ CORE_CHECK จาก

    prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE : ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE);

    ถึง

    prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "INPUT" ? IO_PHASE_DELAY : CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "INPUT" ? IO_DRIVE : CORE_DRIVE);

    6. Line #341: ลบออก

    PHASE_DELAY: เริ่ม

    if (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED;

    หาก (iossm_phase_shift_done)

    prbs_fsm <= CORE_DRIVE;

    สิ้น สุด

    และ แทนที่ ด้วยทั้งสองนี้:

    IO_PHASE_DELAY: เริ่ม

    if (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED;

    หาก (iossm_phase_shift_done)

    prbs_fsm <= IO_DRIVE;

    สิ้น สุด

    CORE_PHASE_DELAY: เริ่ม

    if (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED;

    หาก (iossm_phase_shift_done)

    prbs_fsm <= CORE_DRIVE;

    สิ้น สุด

    ทําการเปลี่ยนแปลงต่อไปนี้ในไฟล์ชื่อ "test_logic_iossm.sv":

    1. บรรทัดที่ #43: เปลี่ยน ค่าของ IOSSM_INIT_PIN_DELAY เป็น 196

    2. After line #45: เพิ่ม การประกาศพารามิเตอร์ภายในเครื่อง:

    WAIT_INTERVAL localparam = 8;

    3. Line #59: เพิ่ม การประกาศสถานะสามสถานะต่อไปนี้หลังจาก IOSSM_WAIT_REQ

    IOSSM_PRE_READ

    IOSSM_PRE_RDATA

    IOSSM_PRE_WAIT

    4. บรรทัดที่ #72: เปลี่ยน จาก

    ถ้า (!reset_n) เริ่มต้น

    pin_dly_write <= IOSSM_INIT_PIN_DELAY;

    prev_pin_dly_write <= IOSSM_INIT_PIN_DELAY;

    สิ้นสุด อย่างอื่นถ้า (cal_debug_write && !cal_debug_waitrequest) เริ่มต้น

    prev_pin_dly_write <= pin_dly_write;

    pin_dly_write <= pin_dly_write IOSSM_DELAY_STEP;

    สิ้น สุด

    ถึง

    ถ้า (!reset_n) เริ่มต้น

    pin_dly_write <= 0;

    prev_pin_dly_write <= 0;

    สิ้นสุดอย่างอื่นหาก (เริ่ม cal_debug_read_data_valid &iossm_fsm == IOSSM_PRE_RDATA)

    prev_pin_dly_write <= cal_debug_read_data[IOSSM_PIN_DELAY_WIDTH-1:0] IOSSM_DELAY_STEP;

    pin_dly_write <= cal_debug_read_data[IOSSM_PIN_DELAY_WIDTH-1:0] IOSSM_DELAY_STEP;

    สิ้น สุด

    5. บรรทัดที่ #85: เปลี่ยน จาก

    สิ้นสุดอย่างอื่นหาก (cal_debug_read_data_valid) เริ่มต้น

    ถึง

    สิ้นสุดอย่างอื่นถ้า (cal_debug_read_data_valid &iossm_fsm == IOSSM_RDATA) เริ่มต้น

    6. Line #108: เปลี่ยนสัญญาณ iossm_fsm ในสถานะ IOSSM_INIT จาก

    iossm_fsm <= IOSSM_WRITE;

    ถึง

    iossm_fsm <= IOSSM_PRE_READ;

    7. หลังจากสถานะ IOSSM_INIT ให้ เพิ่ม สถานะสองสถานะต่อไปนี้:

    IOSSM_PRE_READ: เริ่ม

    if (!cal_debug_waitrequest)

    iossm_fsm <= IOSSM_PRE_RDATA;

    สิ้น สุด

    IOSSM_PRE_RDATA: เริ่ม

    ถ้า (cal_debug_read_data_valid)

    iossm_fsm <= IOSSM_WRITE;

    สิ้น สุด

    8. แถวที่ #139: เปลี่ยน จาก

    กําหนด cal_debug_read = iossm_fsm == IOSSM_READ;

    ถึง

    มอบหมาย cal_debug_read = (iossm_fsm == IOSSM_READ) || (iossm_fsm == IOSSM_PRE_READ);

    9. แถวที่ #146: เปลี่ยน จาก

    มอบหมาย wait_done = (req_wait_interval == 7) ? 1 : 0;

    ถึง

    มอบหมาย wait_done = (req_wait_interval == WAIT_INTERVAL-1) ? 1 : 0;

    ปัญหานี้แก้ไขได้ด้วยซอฟต์แวร์ Intel® Quartus® Prime Pro Edition เวอร์ชั่น 21.1

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

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

    เอฟพีจีเอ Intel® Agilex™ และเอฟพีจีเอ SoC

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