Przykładowy projekt symulacji Intel® Agilex™ PHYLite z włączoną dynamiczną rekonfiguracją powinien wskazywać przykład dynamicznej rekonfiguracji, która działa poprzez zmianę opóźnienia interpolatora poprzez zmianę chyłonnego ruchu. Jednakże, z powodu problemu w oprogramowaniu® Intel Quartus Prime Pro Edition wersji 20.4, ruch w programie Intel Agilex PHYLite przykładowy projekt symulacji nie wysyła żadnego ruchu do IP kalibracji, jeśli grupa PHYLite jest ustawiona na typ pinu wejściowego, ponieważ faza interpolatora jest ustawiona na wartość hardcoded.
Uwaga: ten problem nie występuje, jeśli grupa PHYLite jest ustawiona na typ pinu wyjściowego lub typu dwukierunkowego pinu.
Aby obejść ten problem w oprogramowaniu Intel® Quartus® Prime Pro Edition w wersji 20.4, faza interpolatora nie może być wartością zakodowaną, która wymaga dokonania modyfikacji plików phylite_tester.sv i test_logic_iossm.sv, aby umożliwić chyłkocie ruchu na odczytanie etapu interpolatora, przyrost wartości odczytu, a następnie modyfikację fazy interpolatora na nową wartość.
Wykonuj następujące zmiany w pliku o nazwie "phylite_tester.sv":
1. Wiersz 159: Usuń opóźnienie etapu deklaracji państwowej i dodaj deklarację dwóch państw: CORE_PHASE_DELAY i IO_PHASE_DELAY
2. Wiersz 177: Zmiana z
przypisać iossm_test_start = (prbs_fsm == PHASE_DELAY);
do
przypisać iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY);
3. Wiersz nr 323: Zmień sygnał prbs_fsm w stanie INIT z
prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE: ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE);
do
prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "WEJŚCIE"? IO_PHASE_DELAY: CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "INPUT" ? IO_DRIVE: CORE_DRIVE);
4. Wiersz 338: Zmień sygnał prbs_fsm w stanie IO_CHECK z
prbs_fsm <= (CHANNEL_PIN_TYPE == "WYJŚCIOWY") ? ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE) : IO_DRIVE;
do
prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "WYJŚCIOWY"? CORE_PHASE_DELAY: IO_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "WYJŚCIOWY" ? CORE_DRIVE: IO_DRIVE);
5. Wiersz 338: Zmień sygnał prbs_fsm w stanie CORE_CHECK z
prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE: ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE);
do
prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "WEJŚCIE"? IO_PHASE_DELAY: CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == "INPUT" ? IO_DRIVE: CORE_DRIVE);
6. Wiersz 341: Usuń
PHASE_DELAY: zacznij
jeśli (core_checker_failed | io_checker_failed)
prbs_fsm < = CHECKER_FAILED;
inaczej jeśli (iossm_phase_shift_done)
prbs_fsm < = CORE_DRIVE;
Końcu
i wymienić na te dwa
IO_PHASE_DELAY: zacznij
jeśli (core_checker_failed | io_checker_failed)
prbs_fsm < = CHECKER_FAILED;
inaczej jeśli (iossm_phase_shift_done)
prbs_fsm < = IO_DRIVE;
Końcu
CORE_PHASE_DELAY: zacznij
jeśli (core_checker_failed | io_checker_failed)
prbs_fsm < = CHECKER_FAILED;
inaczej jeśli (iossm_phase_shift_done)
prbs_fsm < = CORE_DRIVE;
Końcu
Wykonuj następujące zmiany w pliku o nazwie "test_logic_iossm.sv":
1. Wiersz 43: Zmień wartość IOSSM_INIT_PIN_DELAY na 196
2. Po wierszu 45: dodaj deklarację parametru lokalnego:
WAIT_INTERVAL localparam = 8;
3. Wiersz 59: Dodaj te trzy następujące deklaracje państw po IOSSM_WAIT_REQ
IOSSM_PRE_READ,
IOSSM_PRE_RDATA,
IOSSM_PRE_WAIT,
4. Wiersz 72: zmiana z
jeśli (!reset_n) rozpocznie się
pin_dly_write < = IOSSM_INIT_PIN_DELAY;
prev_pin_dly_write < = IOSSM_INIT_PIN_DELAY;
koniec, jeśli (cal_debug_write && !cal_debug_waitrequest)rozpocznie się
prev_pin_dly_write < = pin_dly_write;
pin_dly_write < = pin_dly_write IOSSM_DELAY_STEP;
Końcu
do
jeśli (!reset_n) rozpocznie się
pin_dly_write <= 0;
prev_pin_dly_write <= 0;
koniec, jeśli (cal_debug_read_data_valid && iossm_fsm == IOSSM_PRE_RDATA) rozpocznie się
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;
Końcu
5. Wiersz 85: zmiana z
koniec, jeśli (cal_debug_read_data_valid) rozpocznie się
do
koniec, jeśli (cal_debug_read_data_valid && iossm_fsm == IOSSM_RDATA) rozpocznie się
6. Wiersz nr 108: Zmień sygnał iossm_fsm w stanie IOSSM_INIT z
iossm_fsm < = IOSSM_WRITE;
do
iossm_fsm < = IOSSM_PRE_READ;
7. Po IOSSM_INIT stanie dodaj następujące stany:
IOSSM_PRE_READ: zacznij
jeśli (!cal_debug_waitrequest)
iossm_fsm < = IOSSM_PRE_RDATA;
Końcu
IOSSM_PRE_RDATA: zacznij
jeśli (cal_debug_read_data_valid)
iossm_fsm < = IOSSM_WRITE;
Końcu
8. Wiersz 139: zmiana z
przypisz cal_debug_read = iossm_fsm == IOSSM_READ;
do
przypisaj cal_debug_read = (iossm_fsm == IOSSM_READ) || (iossm_fsm == IOSSM_PRE_READ);
9. Wiersz 146: zmiana z
przypisać wait_done = (req_wait_interval == 7) ? 1 : 0;
do
przypisać wait_done = (req_wait_interval == WAIT_INTERVAL-1) ? 1 : 0;
Ten problem został naprawiony począwszy od oprogramowania Intel® Quartus® Prime Pro Edition w wersji 21.1.