Desain contoh simulasi Intel Agilex® 7 FPGA PHYLite dengan rekonfigurasi dinamis yang diaktifkan harus menunjukkan contoh rekonfigurasi dinamis yang bekerja dengan mengubah penundaan interpolator melalui stimulus lalu lintas. Namun, karena masalah di Intel® Quartus® Perangkat Lunak Prime Edisi Pro versi 20.4, stimulus lalu lintas dalam desain contoh simulasi Intel Agilex® 7 FPGA PHYLite tidak mengirim lalu lintas apa pun ke IP kalibrasi jika grup PHYLite diatur ke Jenis pin Input karena fase interpolator diatur ke nilai hardcoded.
Catatan: Masalah ini tidak terjadi jika grup PHYLite diatur ke Jenis pin Output atau jenis pin dwiarah.
Untuk mengatasi masalah ini di Intel® Quartus® Prime Pro Edition Software versi 20.4, fase interpolator tidak boleh berupa nilai hardcoded, yang mengharuskan membuat beberapa modifikasi pada file phylite_tester.sv dan test_logic_iossm.sv untuk memungkinkan stimulus lalu lintas membaca fase interpolator, menambah nilai baca, kemudian memodifikasi fase interpolator ke nilai baru.
Lakukan perubahan berikut pada berkas dengan nama "phylite_tester.sv":
1. Baris #159: Hapus penundaan FASE deklarasi status dan tambahkan dua deklarasi negara: CORE_PHASE_DELAY dan IO_PHASE_DELAY
2. Baris #177: Ubah dari
alokasikan iossm_test_start = (prbs_fsm == PHASE_DELAY);
Untuk
alokasikan iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY);
3. Baris #323: Ubah sinyal prbs_fsm dalam status INIT dari
prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE: ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE);
Untuk
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. Baris #338: Ubah sinyal prbs_fsm dalam keadaan IO_CHECK dari
prbs_fsm <= (CHANNEL_PIN_TYPE == "OUTPUT") ? ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE) : IO_DRIVE;
Untuk
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. Baris #338: Ubah sinyal prbs_fsm dalam keadaan CORE_CHECK dari
prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE: ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE);
Untuk
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. Baris #341: Hapus
PHASE_DELAY: mulai
jika (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
lain jika (iossm_phase_shift_done)
prbs_fsm <= CORE_DRIVE;
Akhir
dan ganti dengan kedua:
IO_PHASE_DELAY: mulai
jika (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
lain jika (iossm_phase_shift_done)
prbs_fsm <= IO_DRIVE;
Akhir
CORE_PHASE_DELAY: mulai
jika (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
lain jika (iossm_phase_shift_done)
prbs_fsm <= CORE_DRIVE;
Akhir
Lakukan perubahan berikut pada berkas dengan nama "test_logic_iossm.sv":
1. Baris #43: Ubah nilai IOSSM_INIT_PIN_DELAY ke 196
2. Setelah baris #45: Tambahkan deklarasi parameter lokal:
localparam WAIT_INTERVAL = 8;
3. Baris #59: Tambahkan tiga pernyataan status berikut setelah IOSSM_WAIT_REQ
IOSSM_PRE_READ,
IOSSM_PRE_RDATA,
IOSSM_PRE_WAIT,
4. Baris #72: Ubah dari
jika (!reset_n) dimulai
pin_dly_write <= IOSSM_INIT_PIN_DELAY;
prev_pin_dly_write <= IOSSM_INIT_PIN_DELAY;
berakhir di lain waktu jika (cal_debug_write &&&cal_debug_waitrequest)mulai
prev_pin_dly_write <= pin_dly_write;
pin_dly_write <= pin_dly_write IOSSM_DELAY_STEP;
Akhir
Untuk
jika (!reset_n) dimulai
pin_dly_write <= 0;
prev_pin_dly_write <= 0;
jika (cal_debug_read_data_valid && iossm_fsm == IOSSM_PRE_RDATA) dimulai
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;
Akhir
5. Baris #85: Ubah dari
jika (cal_debug_read_data_valid) dimulai
Untuk
jika (cal_debug_read_data_valid && iossm_fsm == IOSSM_RDATA) dimulai
6. Baris #108: Ubah sinyal iossm_fsm dalam keadaan IOSSM_INIT dari
iossm_fsm <= IOSSM_WRITE;
Untuk
iossm_fsm <= IOSSM_PRE_READ;
7. Setelah status IOSSM_INIT , tambahkan dua status berikut:
IOSSM_PRE_READ: mulai
jika (!cal_debug_waitrequest)
iossm_fsm <= IOSSM_PRE_RDATA;
Akhir
IOSSM_PRE_RDATA: mulai
jika (cal_debug_read_data_valid)
iossm_fsm <= IOSSM_WRITE;
Akhir
8. Baris #139: Ubah dari
alokasikan cal_debug_read = iossm_fsm == IOSSM_READ;
Untuk
menetapkan cal_debug_read = (iossm_fsm == IOSSM_READ) || (iossm_fsm == IOSSM_PRE_READ);
9. Baris #146: Ubah dari
menetapkan wait_done = (req_wait_interval == 7) ? 1 : 0;
Untuk
menetapkan wait_done = (req_wait_interval == WAIT_INTERVAL-1) ? 1 : 0;
Masalah ini telah diperbaiki dimulai dengan Intel® Quartus® Perangkat Lunak Prime Edisi Pro versi 21.1.