การออกแบบตัวอย่างการจําลอง Intel® Agilex™ PHYLite ที่เปิดใช้งานการกําหนดค่าใหม่แบบไดนามิกควรแสดงตัวอย่างของการกําหนดค่าใหม่แบบไดนามิกที่ทํางานโดยการเปลี่ยนความล่าช้าของ interpolator ผ่านมาตรการกระตุ้นการรับส่งข้อมูล อย่างไรก็ตาม เนื่องจากปัญหาในซอฟต์แวร์ Intel Quartus® Prime Pro Edition เวอร์ชั่น 20.4 ปัญหาการรับส่งข้อมูล Intel Agilexในการออกแบบตัวอย่างการจําลอง PHYLite ไม่ได้ส่งการรับส่งข้อมูลไปยัง 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: เริ่ม
ถ้า (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
หาก (iossm_phase_shift_done)
prbs_fsm <= CORE_DRIVE;
สิ้น สุด
และแทนที่ด้วยทั้งสองนี้
IO_PHASE_DELAY: เริ่ม
ถ้า (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
หาก (iossm_phase_shift_done)
prbs_fsm <= IO_DRIVE;
สิ้น สุด
CORE_PHASE_DELAY: เริ่ม
ถ้า (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