Das Intel® Agilex™ PHYLite Simulationsbeispieldesign mit aktivierter dynamischer Neukonfiguration sollte ein Beispiel für eine dynamische Neukonfiguration anzeigen, die funktioniert, indem die Verzögerung durch den Datenverkehr geändert wird. Aufgrund eines Problems in der Intel Quartus® Prime Pro Edition Software Version 20.4 sendet der Datenverkehr im Intel Agilex PHYLite Simulationsbeispieldesign jedoch keinen Datenverkehr an die Kalibrierungs-IP, wenn die PHYLite-Gruppe auf Input-Pin-Typ eingestellt ist, da die Phase der Verschriftlicherung auf einen hardcodierten Wert gesetzt ist.
Hinweis: Dieses Problem tritt nicht auf, wenn die PHYLite-Gruppe auf Output pin type oder Bidirectional pin type gesetzt ist.
Um dieses Problem in der Intel® Quartus® Prime Pro Edition Software Version 20.4 zu beheben, darf es sich bei der Phase der Aktualisierung nicht um einen hardkodierten Wert handelt, der einige Änderungen an den phylite_tester.sv- und test_logic_iossm.sv-Dateien erfordert, damit der Datenverkehr die Lese-Phase lesen, den Lesewert erhöhen und dann die Verarbeitungsphase auf den neuen Wert ändern kann.
Führen Sie die folgenden Änderungen an der Datei mit dem Namen "phylite_tester.sv" durch:
1. Zeile 159: Entfernen Sie die Zustandserklärung PHASE DELAY und fügen Sie zwei Zustandserklärungen hinzu: CORE_PHASE_DELAY und IO_PHASE_DELAY
2. Zeile 177: Ändern von
zuweisen iossm_test_start = (prbs_fsm == PHASE_DELAY);
An
zuweisen iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY);
3. Zeile 323: Ändern Sie das prbs_fsm signal im INIT-Zustand von
prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE: ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE);
An
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. Zeile 338: Ändern Sie das prbs_fsm Signal in IO_CHECK Zustand von
prbs_fsm <= (CHANNEL_PIN_TYPE == "OUTPUT") ? ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE): IO_DRIVE;
An
prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == "AUSGABE" ? CORE_PHASE_DELAY: IO_PHASE_DELAY): (CHANNEL_PIN_TYPE == "OUTPUT" ? CORE_DRIVE: IO_DRIVE);
5. Zeile 338: Ändern Sie das prbs_fsm Signal in CORE_CHECK Zustand von
prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE: ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE);
An
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. Zeile #341: Entfernen
PHASE_DELAY: beginnen
wenn (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
else if (iossm_phase_shift_done)
prbs_fsm <= CORE_DRIVE;
Ende
und ersetzen Sie sie durch diese beiden
IO_PHASE_DELAY: beginnen
wenn (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
else if (iossm_phase_shift_done)
prbs_fsm <= IO_DRIVE;
Ende
CORE_PHASE_DELAY: beginnen
wenn (core_checker_failed | io_checker_failed)
prbs_fsm <= CHECKER_FAILED;
else if (iossm_phase_shift_done)
prbs_fsm <= CORE_DRIVE;
Ende
Führen Sie die folgenden Änderungen in der Datei "test_logic_iossm.sv" durch:
1. Zeile 43: Ändern Sie den Wert der IOSSM_INIT_PIN_DELAY auf 196.
2. Nach Zeile 45: Lokale Parameterdeklaration hinzufügen:
localparam WAIT_INTERVAL = 8;
3. Zeile 59: Fügen Sie diese drei folgenden Zustandserklärungen nach IOSSM_WAIT_REQ
IOSSM_PRE_READ,
IOSSM_PRE_RDATA,
IOSSM_PRE_WAIT,
4. Zeile 72: Ändern von
wenn (!reset_n) beginnen
pin_dly_write < = IOSSM_INIT_PIN_DELAY;
prev_pin_dly_write <= IOSSM_INIT_PIN_DELAY;
end else, wenn (cal_debug_write && !cal_debug_waitrequest) beginnen
prev_pin_dly_write <= pin_dly_write;
pin_dly_write <= pin_dly_write IOSSM_DELAY_STEP;
Ende
An
wenn (!reset_n) beginnen
pin_dly_write < = 0;
prev_pin_dly_write < = 0;
end else, wenn (cal_debug_read_data_valid && iossm_fsm == IOSSM_PRE_RDATA) beginnen
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;
Ende
5. Zeile 85: Ändern von
end else, wenn (cal_debug_read_data_valid) beginnen
An
end else, wenn (cal_debug_read_data_valid && iossm_fsm == IOSSM_RDATA) beginnen
6. Zeile 108: Ändern iossm_fsm Signals im IOSSM_INIT Zustand von
iossm_fsm < = IOSSM_WRITE;
An
iossm_fsm < = IOSSM_PRE_READ;
7. Fügen Sie nach IOSSM_INIT Zustand die folgenden zwei Zustände hinzu:
IOSSM_PRE_READ: beginnen
wenn (!cal_debug_waitrequest)
iossm_fsm < = IOSSM_PRE_RDATA;
Ende
IOSSM_PRE_RDATA: Beginnen
wenn (cal_debug_read_data_valid)
iossm_fsm < = IOSSM_WRITE;
Ende
8. Zeile 139: Ändern von
assign cal_debug_read = iossm_fsm == IOSSM_READ;
An
Zuweisen cal_debug_read = (iossm_fsm == IOSSM_READ) || (iossm_fsm == IOSSM_PRE_READ);
9. Zeile 146: Ändern von
zuweisen wait_done = (req_wait_interval == 7) ? 1 : 0;
An
weisen Sie wait_done = (req_wait_interval == WAIT_INTERVAL-1) zu? 1 : 0;
Dieses Problem wird ab der Intel® Quartus® Prime Pro Edition Software Version 21.1 behoben.