Couverture fonctionnelle et critère de fin
Mesurer les scénarios prévus, croiser les conditions importantes et fermer les trous sans confondre activité et correction.
Mesurer le plan de vérification
La couverture fonctionnelle mesure si les situations prévues ont été observées. Contrairement à la couverture de code, elle est définie par l'équipe à partir des fonctions et risques du produit.
Une couverture à 100 % ne prouve pas que le DUT est correct. Elle indique seulement que tous les bins définis ont reçu des échantillons. Il faut un scoreboard et des assertions pour juger les résultats.
Covergroup et coverpoints
covergroup command_cg @(posedge i_clk);
option.per_instance = 1;
cp_opcode: coverpoint i_opcode iff (i_valid && i_ready) {
bins read = {2'b00};
bins write = {2'b01};
bins flush = {2'b10};
illegal_bins reserved = {2'b11};
}
cp_wait: coverpoint wait_cycles {
bins none = {0};
bins short = {[1:3]};
bins long = {[4:15]};
}
opcode_x_wait: cross cp_opcode, cp_wait;
endgroupLe covergroup échantillonne au front montant. iff limite le coverpoint aux transferts réels. Les bins regroupent les valeurs selon le plan. illegal_bins signale une valeur qui ne devrait jamais se produire, mais une assertion reste souvent préférable pour un message et une politique d'erreur explicites.
Le croisement vérifie que chaque commande a été vue avec plusieurs durées d'attente. Il peut vite produire beaucoup de bins. Il faut croiser seulement les dimensions qui représentent un risque ou une exigence réelle.
Échantillonnage manuel
Un covergroup peut aussi être déclenché avec sample() lorsqu'une transaction complète est reconstruite par le monitor.
covergroup packet_cg with function sample(packet_t tr);
cp_length: coverpoint tr.length {
bins single = {1};
bins small = {[2:15]};
bins large = {[16:255]};
}
endgroupÉchantillonner des transactions plutôt que des fils bruts évite de compter des valeurs qui n'ont jamais été acceptées par le protocole.
Fermer un trou
Lorsqu'un bin reste vide, quatre questions aident :
- le scénario est-il atteignable ?
- le stimulus ou ses contraintes l'empêchent-ils ?
- l'échantillonnage a-t-il lieu au bon moment ?
- le bin correspond-il encore au cahier des charges ?
La réponse peut être un test dirigé, une distribution aléatoire ajustée, une correction du monitor ou une exclusion justifiée. Modifier les bins uniquement pour obtenir un meilleur pourcentage ne renforce pas la vérification.
Critère de fin
La fermeture combine tests passés, assertions propres, couverture atteinte et bugs traités. Chaque exclusion de couverture doit avoir une raison vérifiable et être revue si le design change.
À retenir
- La couverture fonctionnelle vient du plan et des risques du produit.
- Un coverpoint mesure une dimension, un cross mesure une combinaison utile.
- L'échantillonnage doit correspondre à une transaction réelle.
- Un trou peut venir du stimulus, du DUT, du monitor ou d'un bin impossible.
- Le pourcentage de couverture ne prouve pas la correction des résultats.
📝 Tester mes connaissances - Quiz du chapitre