Thiết kế ví dụ mô phỏng Intel Agilex® 7 FPGA PHYLite với bật cấu hình lại động sẽ hiển thị một ví dụ về việc cấu hình lại động làm việc bằng cách thay đổi độ trễ nội suy thông qua configi lưu lượng. Tuy nhiên, do có vấn đề trong Phần mềm phiên bản Intel® Quartus® Prime Pro phiên bản 20.4, lưu lượng truy cập trong thiết kế mẫu mô phỏng Intel Agilex® 7 FPGA PHYLite không gửi bất kỳ lưu lượng nào đến IP hiệu chỉnh nếu nhóm PHYLite được đặt thành Loại chân đầu vào vì pha nội suy được đặt thành giá trị mã hóa cứng.
Lưu ý: Sự cố này không xảy ra nếu nhóm PHYLite được đặt thành Loại chân đầu ra hoặc loại chân hai chiều.
Để giải quyết vấn đề này trong Phiên bản Phần mềm phiên bản Intel® Quartus® Prime Pro phiên bản 20.4, pha nội suy không được là giá trị mã hóa cứng, yêu cầu thực hiện một số sửa đổi đối với các tệp phylite_tester.sv và test_logic_iossm.sv để cho phép lưu lượng truy cập đọc giai đoạn nội suy, tăng giá trị đọc, sau đó sửa đổi giai đoạn nội suy sang giá trị mới.
Thực hiện các thay đổi sau đây đối với tệp có tên "phylite_tester.sv":
1. Dòng #159 : Xóa tuyên bố trạng thái PHASE DELAY và thêm tuyên bố hai trạng thái: CORE_PHASE_DELAY và IO_PHASE_DELAY
2. Dòng #177: Thay đổi từ
gán iossm_test_start = (prbs_fsm == PHASE_DELAY);
Để
gán iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY);
3. Dòng #323: Thay đổi tín prbs_fsm hành ở trạng thái INIT từ
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. Dòng #338: Thay đổi tín hiệu prbs_fsm ở trạng IO_CHECK từ
prbs_fsm <= (CHANNEL_PIN_TYPE == "ĐẦU RA") ? ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE) : IO_DRIVE;
Để
prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "ĐẦU RA" ? CORE_PHASE_DELAY: IO_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "ĐẦU RA" ? CORE_DRIVE: IO_DRIVE);
5. Dòng #338: Thay đổi tín hiệu prbs_fsm ở trạng CORE_CHECK từ
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. Dòng #341: Tháo ra
PHASE_DELAY: bắt đầu
nếu (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
khác nếu (iossm_phase_shift_done)
prbs_fsm <= CORE_DRIVE;
Cuối
và thay thế bằng hai:
IO_PHASE_DELAY: bắt đầu
nếu (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
khác nếu (iossm_phase_shift_done)
prbs_fsm <= IO_DRIVE;
Cuối
CORE_PHASE_DELAY: bắt đầu
nếu (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
khác nếu (iossm_phase_shift_done)
prbs_fsm <= CORE_DRIVE;
Cuối
Thực hiện các thay đổi sau đây đối với tệp có tên "test_logic_iossm.sv":
1. Dòng #43: Thay đổi giá trị của IOSSM_INIT_PIN_DELAY 196
2. Sau dòng #45: Thêm khai báo tham số cục bộ:
tỷ lệ WAIT_INTERVAL cục bộ = 8;
3. Dòng #59 : Thêm ba tuyên bố ba trạng thái sau đây sau IOSSM_WAIT_REQ
IOSSM_PRE_READ,
IOSSM_PRE_RDATA,
IOSSM_PRE_WAIT,
4. Dòng #72: Thay đổi từ
nếu (!reset_n) bắt đầu
pin_dly_write <= IOSSM_INIT_PIN_DELAY;
prev_pin_dly_write <= IOSSM_INIT_PIN_DELAY;
đầu khác nếu (cal_debug_write && !cal_debug_waitrequest)bắt đầu
prev_pin_dly_write <= pin_dly_write;
pin_dly_write <= pin_dly_write IOSSM_DELAY_STEP;
Cuối
Để
nếu (!reset_n) bắt đầu
pin_dly_write <= 0;
prev_pin_dly_write <= 0;
end else if (cal_debug_read_data_valid && iossm_fsm == IOSSM_PRE_RDATA) bắt đầu
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;
Cuối
5. Dòng #85: Thay đổi từ
đầu khác nếu (cal_debug_read_data_valid) bắt đầu
Để
end else if (cal_debug_read_data_valid && iossm_fsm == IOSSM_RDATA) bắt đầu
6. Dòng #108: Thay đổi tín iossm_fsm ở trạng IOSSM_INIT từ
iossm_fsm <= IOSSM_WRITE;
Để
iossm_fsm <= IOSSM_PRE_READ;
7. Sau khi ở IOSSM_INIT , hãy thêm hai trạng thái sau:
IOSSM_PRE_READ: bắt đầu
nếu (!cal_debug_waitrequest)
iossm_fsm <= IOSSM_PRE_RDATA;
Cuối
IOSSM_PRE_RDATA: bắt đầu
nếu (cal_debug_read_data_valid)
iossm_fsm <= IOSSM_WRITE;
Cuối
8. Dòng #139: Thay đổi từ
gán cal_debug_read = iossm_fsm == IOSSM_READ;
Để
gán cal_debug_read = (iossm_fsm == IOSSM_READ) || (iossm_fsm == IOSSM_PRE_READ);
9. Dòng #146: Thay đổi từ
gán wait_done = (req_wait_interval == 7) ? 1: 0;
Để
gán wait_done = (req_wait_interval == WAIT_INTERVAL-1) ? 1: 0;
Sự cố này được khắc phục bắt đầu với phiên Intel® Quartus® Prime Phiên bản Phần mềm Pro phiên bản 21.1.