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.
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.