Das Intel Agilex-7-FPGA-PHYLite-Simulationsbeispieldesign® mit aktivierter dynamischer Neukonfiguration sollte ein Beispiel für eine dynamische Neukonfiguration anzeigen, die funktioniert, indem die Verzögerung durch die Datenverkehrsverspätung geändert wird. Aufgrund eines Problems in der Intel® Quartus® Prime Pro Edition Software Version 20.4 sendet der Datenverkehr im Intel Agilex® 7 FPGA PHYLite Simulationsbeispiel-Design jedoch keinen Datenverkehr an die Kalibrierungs-IP, wenn die PHYLite-Gruppe auf Eingabe-Pin-Typ gesetzt ist, da die Entwicklungsphase auf einen festcodierten 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 Entwicklungsphase 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
assign iossm_test_start = (prbs_fsm == PHASE_DELAY);
An
assign 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 == "EINGABE") ? 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 == "AUSGABE") ? ((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 im CORE_CHECK Zustand von
prbs_fsm <= (CHANNEL_PIN_TYPE == "EINGABE") ? 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 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
zuweisen 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
zuweisen wait_done = (req_wait_interval == WAIT_INTERVAL-1) ? 1: 0;
Dieses Problem wird ab der Intel® Quartus® Prime Pro Edition Software Version 21.1 behoben.