E. André, E. Encrenaz, L. Fribourg AVANCEMENT TACHE 3 Construction des automates temporisés Génération automatique de contraintes E. André, E. Encrenaz, L. Fribourg E. Encrenaz – Réunion VALMEM – 02/06/2008
Traduction du modèle VHDL en automates temporisés Hytech var x_abs_d0, x_abs_csn, x_abs_net13, x_reg_10 : clock automaton abs_d0 synclabs: down_D, up_D, -- inputs down_v18_E_data_delay_H, up_v18_E_data_delay_H; -- outputs initially init_abs_d0; loc init_abs_d0 : while True wait {} when True sync up_D do {x_abs_d0'=0} goto A_abs_d0; when True sync down_D do {x_abs_d0'=0} goto B_abs_d0; loc A_abs_d0 : while x_abs_d0 <= d_abs_d0 wait {} when x_abs_d0 = d_abs_d0 sync up_v18_E_data_delay_H do {} goto init_abs_d0; loc B_abs_d0 : while x_abs_d0 <= d_abs_d0 wait {} when x_abs_d0 = d_abs_d0 sync down_v18_E_data_delay_H do {} goto init_abs_d0; Temps E. Encrenaz – Réunion VALMEM – 02/06/2008
Principes de traduction Parser VHDL Affectations concurrentes Processus représentant des points mémoire ou registres Pour chaque affectation concurrente ou processus : Représenter la table de vérité associée à l’affectation Construire le TA correspondant Associer le délai max (ou l’intervalle [min,max]) pour front montant et descendant Réalisé pour les affectations concurrentes E. Encrenaz – Réunion VALMEM – 02/06/2008
Génération automatique de contraintes En entrée Un fichier HyTech Des valeurs de tous les paramêtres donnant une « bonne » exécution : N'allant pas dans le mauvais état (« bad ») En sortie Un ensemble de contraintes garantissant une trace identique à celle des valeurs en entrée. Implantation - Script Python avec appels à HyTech E. Encrenaz – Réunion VALMEM – 02/06/2008
Algorithme d’extraction des contraintes Input : parameter instantiation 0 Output : constraint C U Init, S Init, C True do do until Post(S) = S or U has a 0-incompatible trace. S Post(S); U succ(U) od if Post(S) = S and U has no 0-incompatible trace then return ("success", C). select an avoidable 0-incompatible trace in U and an avoidable atom J of the associated P-constraint. C := C J ; S := {Init C} ; U := {init C}. od E. Encrenaz – Réunion VALMEM – 02/06/2008
Exemple – bascule D Des valeurs initiales garantissant une bonne trace déterministe pHI = 30 pLO = 20 pSetup = 10 pHold = 15 pu_g1 = 6 pl_g1 = 5 pu_g3 = 5 pl_g3 = 4 pu_g2 = 4 pl_g2 = 3 Pu_g4 = 4 pl_g4 = 3 E. Encrenaz – Réunion VALMEM – 02/06/2008
Contraintes obtenues Contraintes : pLO > pSetup pSetup > pu_g1 pHold > pu_g3 pHold > pu_g4 + pu_g3 Trace obtenue à partir de ces contraintes (en noir) identique (par construction) à la trace de référence E. Encrenaz – Réunion VALMEM – 02/06/2008
Portion de SPSMALL analysée E. Encrenaz – Réunion VALMEM – 02/06/2008
Propriété vérifiée D est bien écrite dans la latch REG12 E. Encrenaz – Réunion VALMEM – 02/06/2008
Instanciation initiale (0 ) falling () raising() d_abs_d0 78 104 d_abs_csn 14 12 d_abs_net13 3 10 d_reg_10 7 10 d_reg_12 14 18 d_or_net13 3 10 d_not_v18_E 10 12 tHI = 45 tLO = 90 d_setup_D < THI + tLO d_setup_CSN < d_setup_D d_hold_D < d_or_net13 d_hold_CSN < d_or_net13 -- d_setup_D = 130 d_hold_D = 1 // utilisées pour la 0 compatibilité -- d_setup_CSN = 50 d_hold_CSN = 2 Optimisation de d_setup_D, d_hold_D d_setup_CSN, d_hold_CSN E. Encrenaz – Réunion VALMEM – 02/06/2008
Contraintes obtenues (26 itérations / 2 mn) d_setup_CSN < 83 d_setup_D < d_setup_CSN + 104 d_setup_D > 104 d_setup_D < d_setup_CSN + 90 d_setup_CSN > 24 E. Encrenaz – Réunion VALMEM – 02/06/2008
Générateur d’impulsions Instanciation initiale dClockHigh = 1000 -- & dClockLow = 1000 & dNot1Down_l = dNot1Down_u -- & dNot1Down_l = 147 & dNot1Up_l = dNot1Up_u -- & dNot1Up_l= 219 & dNot2Down_l = dNot2Down_u -- & dNot2Down_l = 163 & dNot2Up_l = dNot2Up_u -- & dNot2Up_l = 155 & dXorUp2Up_u = dXorUp2Up_l -- & dXorUp2Up_l = 147 & dXorDown1Up_u = dXorDown1Up_l -- & dXorDown1Up_l = 416 & dAndUp2_u = dAndUp2_l -- & dAndUp2_l = 80 & dAndDown1_u = dAndDown1_l -- & dAndDown1_l = 155 & dAndDown1_l>0 & dLatchUp_l = dLatchUp_u -- & dLatchUp_l = 240 -- & dHold = 350 -- & dSetup = 1 E. Encrenaz – Réunion VALMEM – 02/06/2008
Générateur d’impulsions Contraintes obtenues (50 sec) : dNot1Down_u < dLatchUp_u + dAndUp2_l & dSetup < dClockLow & dAndUp2_l < dNot1Down_u & dXorUp2Up_l < dHold & dHold < dNot2Up_l + dNot1Down_u + dXorDown1Up_u & dAndUp2_l < dXorUp2Up_l & dNot2Up_l + dNot1Down_l < dHold & dLatchUp_l + dAndUp2_l < dHold & dLatchUp_l + dAndUp2_l < dNot2Up_l + dNot1Down_u + dXorDown1Up_u & dNot1Down_u < dHold & dNot2Up_l + dNot1Down_l < dLatchUp_l + dAndUp2_l E. Encrenaz – Réunion VALMEM – 02/06/2008
Conclusion Automatiser la traduction des processus VHDL Appliquer l’extraction automatique de contraintes pour une portion plus large de SPSMALL (réduite à 1 mot de 1 bit) Améliorations Traiter un ensemble de traces : ordre partiel Intégration de l’algorithme d’extraction dans l’outil Hytech (ou Phaver) plutôt que de rester extérieur à Hytech E. Encrenaz – Réunion VALMEM – 02/06/2008