ID de l'article: 000086754 Type de contenu: Dépannage Dernière révision: 10/02/2021

Pourquoi l’exemple de conception de simulation PHYLite de Intel Agilex 7 FPGA® PHYLite n’envoie-t-il pas du trafic à l’IP d’étalonnage lorsque la reconfiguration dynamique est activée ?

Environnement

  • Intel® Quartus® Prime Pro Edition
  • FPGA Intel® Stratix® 10 IP PHY Lite pour interfaces parallèles
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Descriptif

    La conception de l’exemple de simulation PHYLite Intel Agilex® 7 FPGA avec reconfiguration dynamique activée devrait montrer un exemple de reconfiguration dynamique fonctionnant en modifiant le retard de l’interpolateur via le travail de suppression de la circulation. Toutefois, en raison d’un problème dans la version 20.4 du logiciel Prime Pro Edition Intel® Quartus®, le fichier de trafic de l’exemple de simulation PHYLite Intel Agilex® 7 FPGA n’envoie pas de trafic à l’IP de calibrage si le groupe PHYLite est défini sur une broche d’entrée car la phase d’interpolation est réglée sur une valeur codée.

    Remarque : ce problème ne se produit pas si le groupe PHYLite est défini sur le type de broche De sortie ou le type de broche bidirectionnelle.

    Résolution

    Pour contourner ce problème dans la version 20.4 du logiciel Intel® Quartus® Prime Pro Edition, la phase d’interpolation ne doit pas être une valeur à coder dur, ce qui nécessite de apporter des modifications aux fichiers phylite_tester.sv et test_logic_iossm.sv pour permettre à la circulation de l’auteur de lire la phase d’interpolation, d’incrémenter la valeur de lecture, puis de modifier la phase d’interpolation à la nouvelle valeur.

    Effectuez les modifications suivantes dans le fichier appelé « phylite_tester.sv » :

    1. Ligne #159 : Supprimer le retard de la phase de déclaration d’état et ajouter deux états de déclaration : CORE_PHASE_DELAY et IO_PHASE_DELAY

    2. Ligne #177 : changer de

    assigner iossm_test_start = (prbs_fsm == PHASE_DELAY) ;

    À

    attribuer iossm_test_start = (prbs_fsm == CORE_PHASE_DELAY) ;

    3. Ligne #323 : changez le signal prbs_fsm dans l’état INIT à partir de

    prbs_fsm <= (CHANNEL_PIN_TYPE == « ENTRÉE ») ? IO_DRIVE : ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE) ;

    À

    prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == « ENTRÉE » ? IO_PHASE_DELAY : CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == « ENTRÉE » ? IO_DRIVE : CORE_DRIVE) ;

    4. Ligne #338 : changez le signal de prbs_fsm dans IO_CHECK état de

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

    À

    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. Ligne #338 : changez le signal de prbs_fsm dans CORE_CHECK état de

    prbs_fsm <= (CHANNEL_PIN_TYPE == « ENTRÉE ») ? IO_DRIVE : ((IOSSM_TEST_EN == 1) ? PHASE_DELAY : CORE_DRIVE) ;

    À

    prbs_fsm <= (IOSSM_TEST_EN == 1) ? (CHANNEL_PIN_TYPE == « ENTRÉE » ? IO_PHASE_DELAY : CORE_PHASE_DELAY) : (CHANNEL_PIN_TYPE == « ENTRÉE » ? IO_DRIVE : CORE_DRIVE) ;

    6. Ligne #341 : Supprimer

    PHASE_DELAY : commencez

    si (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED ;

    d’autre si (iossm_phase_shift_done)

    prbs_fsm <= CORE_DRIVE ;

    Fin

    et remplacez par ces deux éléments :

    IO_PHASE_DELAY : commencez

    si (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED ;

    d’autre si (iossm_phase_shift_done)

    prbs_fsm <= IO_DRIVE ;

    Fin

    CORE_PHASE_DELAY : commencez

    si (core_checker_failed | io_checker_failed)

    prbs_fsm <= CHECKER_FAILED ;

    d’autre si (iossm_phase_shift_done)

    prbs_fsm <= CORE_DRIVE ;

    Fin

    Effectuez les modifications suivantes dans le fichier appelé « test_logic_iossm.sv » :

    1. Ligne #43 : changez la valeur de IOSSM_INIT_PIN_DELAY à 196

    2. Après la ligne #45 : Ajoutez la déclaration des paramètres locaux :

    WAIT_INTERVAL localparam = 8 ;

    3. Ligne #59 : Ajoutez ces trois états suivants déclaration après IOSSM_WAIT_REQ

    IOSSM_PRE_READ

    IOSSM_PRE_RDATA

    IOSSM_PRE_WAIT

    4. Ligne #72 : changer de

    si (!reset_n) commencez

    pin_dly_write <= IOSSM_INIT_PIN_DELAY ;

    prev_pin_dly_write <= IOSSM_INIT_PIN_DELAY ;

    la fin si (cal_debug_write &&> !cal_debug_waitrequest) commencent

    prev_pin_dly_write <= pin_dly_write ;

    pin_dly_write <= pin_dly_write IOSSM_DELAY_STEP ;

    Fin

    À

    si (!reset_n) commencez

    pin_dly_write < = 0 ;

    prev_pin_dly_write < = 0 ;

    fin si (cal_debug_read_data_valid &iossm_fsm == IOSSM_PRE_RDATA) commencent

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

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

    Fin

    5. Ligne #85 : change de

    autre si (cal_debug_read_data_valid) commencent

    À

    fin si (cal_debug_read_data_valid &iossm_fsm == IOSSM_RDATA) commencent

    6. Ligne #108 : Modifier le signal iossm_fsm dans l’état IOSSM_INIT de

    iossm_fsm <= IOSSM_WRITE ;

    À

    iossm_fsm <= IOSSM_PRE_READ ;

    7. Après l’état IOSSM_INIT , ajoutez ces deux états suivants :

    IOSSM_PRE_READ : commencez

    si (!cal_debug_waitrequest)

    iossm_fsm <= IOSSM_PRE_RDATA ;

    Fin

    IOSSM_PRE_RDATA : commencez

    si (cal_debug_read_data_valid)

    iossm_fsm < = IOSSM_WRITE ;

    Fin

    8. Ligne #139 : remplacement

    assigner cal_debug_read = iossm_fsm = = IOSSM_READ ;

    À

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

    9. Ligne #146 : modification de

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

    À

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

    Ce problème est résolu à partir de la version 21.1 du logiciel Intel® Quartus® Prime Pro Edition.

    Produits associés

    Cet article concerne 1 produits

    FPGA et FPGA SoC Intel® Agilex™

    Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.