การออกแบบตัวอย่างการ®จําลอง 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