ID articolo: 000086754 Tipo di contenuto: Risoluzione dei problemi Ultima recensione: 10/02/2021

Perché gli stimoli del traffico non inviano alcun traffico all'IP di calibrazione quando si utilizza il design dell'esempio di simulazione Intel® Agilex PHYLite con riconfigurazione dinamica abilitata?

Ambiente

  • Intel® Quartus® Prime Pro Edition
  • IP Intel® Stratix® 10 FPGA PHY Lite per interfacce parallele
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descrizione

    L'esempio di simulazione Intel® Agilex™ PHYLite con riconfigurazione dinamica attivata dovrebbe mostrare un esempio di riconfigurazione dinamica che funziona modificando il ritardo dell'interpolatore tramite gli stimoli del traffico. Tuttavia, a causa di un problema nella Intel Quartus® Prime Pro Edition Software versione 20.4, gli stimoli del traffico nella progettazione dell'esempio di simulazione PHYLite Intel Agilex non invia alcun traffico all'IP di calibrazione se il gruppo PHYLite è impostato sul tipo di pin di input perché la fase dell'interpolatore è impostata su un valore hardcoded.

    Nota: questo problema non si verifica se il gruppo PHYLite è impostato su Tipo pin di output o tipo di pin bidirezionale.

    Risoluzione

    Per risolvere questo problema nella Intel® Quartus® Prime Pro Edition Software versione 20.4, la fase di interpolazione non deve essere un valore hardcoded, il che richiede alcune modifiche ai file phylite_tester.sv e test_logic_iossm.sv per consentire agli stimoli del traffico di leggere la fase dell'interpolatore, aumentare il valore di lettura, quindi modificare la fase di interpolazione al nuovo valore.

    Eseguire le seguenti modifiche al file denominato "phylite_tester.sv":

    1. Riga #159: rimuovere la dichiarazione di stato PHASE DELAY e aggiungere due stati di dichiarazione: CORE_PHASE_DELAY e IO_PHASE_DELAY

    2. Riga n. 177: cambiare da

    assegnare iossm_test_start = (prbs_fsm == PHASE_DELAY);

    A

    assegnare iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY);

    3. Linea n. 323: modificare il segnale prbs_fsm in stato INIT da

    prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE : ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE);

    A

    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. Linea n. 338: cambiare il segnale prbs_fsm in stato IO_CHECK da

    prbs_fsm <= (CHANNEL_PIN_TYPE == "OUTPUT") ? ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE) : IO_DRIVE;

    A

    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. Linea n. 338: modificare il segnale prbs_fsm in CORE_CHECK stato da

    prbs_fsm <= (CHANNEL_PIN_TYPE == "INPUT") ? IO_DRIVE: ((IOSSM_TEST_EN == 1) ? PHASE_DELAY: CORE_DRIVE);

    A

    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. Riga n. 341: rimuovere

    PHASE_DELAY: iniziare

    if (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED;

    else if (iossm_phase_shift_done)

    prbs_fsm <= CORE_DRIVE;

    Fine

    e sostituire con questi due

    IO_PHASE_DELAY: iniziare

    if (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED;

    else if (iossm_phase_shift_done)

    prbs_fsm <= IO_DRIVE;

    Fine

          

    CORE_PHASE_DELAY: iniziare

    if (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED;

    else if (iossm_phase_shift_done)

    prbs_fsm <= CORE_DRIVE;

    Fine

     

    Eseguire le seguenti modifiche al file denominato "test_logic_iossm.sv":

    1. Riga n. 43: modificare il valore di IOSSM_INIT_PIN_DELAY a 196

    2. Dopo la riga n. 45: aggiungere la dichiarazione dei parametri locali:

    localparam WAIT_INTERVAL = 8;

    3. Riga n. 59: aggiungere questi tre seguenti stati dopo IOSSM_WAIT_REQ

    IOSSM_PRE_READ,

    IOSSM_PRE_RDATA,

    IOSSM_PRE_WAIT,

    4. Riga n. 72: cambiare da

    se (!reset_n) inizia

    pin_dly_write <= IOSSM_INIT_PIN_DELAY;

    prev_pin_dly_write <= IOSSM_INIT_PIN_DELAY;

    end else if (cal_debug_write & !cal_debug_waitrequest)begin

    prev_pin_dly_write <= pin_dly_write;

    pin_dly_write <= pin_dly_write IOSSM_DELAY_STEP;

    Fine

    A

    se (!reset_n) inizia

    pin_dly_write <= 0;

    prev_pin_dly_write <= 0;

    end else if (cal_debug_read_data_valid &iossm_fsm == IOSSM_PRE_RDATA) iniziano

    prev_pin_dly_write <= IOSSM_DELAY_STEP[IOSSM_PIN_DELAY_WIDTH-1:0] cal_debug_read_data;

    pin_dly_write <= IOSSM_DELAY_STEP cal_debug_read_data[IOSSM_PIN_DELAY_WIDTH-1:0];

    Fine

    5. Riga n. 85: cambiare da

    end else if (cal_debug_read_data_valid) inizia

    A

    end else if (cal_debug_read_data_valid &iossm_fsm == IOSSM_RDATA) iniziano

    6. Linea n. 108: cambiare iossm_fsm segnale in stato IOSSM_INIT da

    iossm_fsm <= IOSSM_WRITE;

    A

    iossm_fsm <= IOSSM_PRE_READ;

     

    7. Dopo IOSSM_INIT stato, aggiungere questi due stati seguenti:

    IOSSM_PRE_READ: iniziare

    if (!cal_debug_waitrequest)

    iossm_fsm <= IOSSM_PRE_RDATA;

    Fine

    IOSSM_PRE_RDATA: iniziare

    if (cal_debug_read_data_valid)

    iossm_fsm <= IOSSM_WRITE;

    Fine

    8. Riga n. 139: cambiare da

    assegnare cal_debug_read = iossm_fsm == IOSSM_READ;

    A

    assign cal_debug_read = (iossm_fsm == IOSSM_READ) || (iossm_fsm == IOSSM_PRE_READ);

    9. Riga n. 146: cambiare da

    assegnare wait_done = (req_wait_interval == 7) ? 1 : 0;

    A

    assegnare wait_done = (req_wait_interval == WAIT_INTERVAL-1) ? 1 : 0;

     

    Questo problema è risolto a partire dal software Intel® Quartus® Prime Pro Edition versione 21.1.

    Prodotti correlati

    Questo articolo si applica a 1 prodotti

    FPGA e FPGA SoC Intel® Agilex™

    Disclaimer

    1

    Tutti i post e l'utilizzo dei contenuti su questo sito sono soggetti ai Termini di utilizzo Intel.com.

    Il contenuto di questa pagina è il risultato della combinazione tra la traduzione umana e quella automatica del contenuto originale in lingua inglese. Questo contenuto è fornito soltanto a titolo di informazione generale e non ha pretese di completezza o accuratezza. In presenza di contraddizioni tra la versione in lingua inglese di questa pagina e la sua traduzione, fa fede la versione inglese. Visualizza la versione in lingua inglese di questa pagina.