Vérification avec AXI VIP
Vérifier un esclave AXI-Lite en simulation avec un agent maître, des transactions contrôlées et des assertions de protocole.
Vérifier avant la carte
Une IP AXI peut être synthétisable et rester incorrecte. Une réponse peut arriver sur le mauvais canal, un signal VALID peut dépendre de READY, ou une écriture partielle peut ignorer WSTRB.
L'AXI Verification IP, ou AXI VIP, est un composant réservé à la simulation. Il peut jouer le rôle d'un maître, d'un esclave ou d'un moniteur afin de générer des transactions et de contrôler le protocole.
Le banc de test remplace le processeur par un AXI VIP maître. Il écrit plusieurs valeurs dans le contrôleur de LED puis relit le registre.

Construire le banc de test
Le Block Design de simulation contient l'AXI VIP, l'IP à tester, une horloge et un reset. Son wrapper devient le Device Under Test, ou DUT, c'est-à-dire le bloc dont le comportement doit être vérifié.
Le testbench importe les packages générés et crée un agent à partir de l'interface hiérarchique de l'instance VIP.
import axi_vip_pkg::*;
import design_axi_vip_0_0_pkg::*;
design_axi_vip_0_0_mst_t agent;
initial begin
agent = new("master vip agent", DUT.design_i.axi_vip_0.inst.IF);
agent.start_master();
endLe chemin hiérarchique dépend des noms du Block Design. Une régénération peut modifier les packages ou les classes générées.
Émettre une écriture AXI-Lite
Une transaction contient l'adresse, la taille et la donnée. AXI-Lite ne transporte pas de rafales.
task axi_lite_write(input bit [31:0] addr,
input bit [31:0] data);
axi_transaction wr;
wr = agent.wr_driver.create_transaction("write");
wr.set_write_cmd(addr, XIL_AXI_BURST_TYPE_INCR, 0, 0, xil_axi_size_t'(xil_clog2(32 / 8)));
wr.set_data_block(data);
agent.wr_driver.send(wr);
endtaskLe scénario écrit 0x4B, 0x36 puis 0x98 à l'adresse de base 0x44A00000. Il attend que le pilote soit inactif avant de lancer une lecture.
Ne pas seulement générer du trafic
Un bon test vérifie le résultat. Après une écriture, il faut lire le registre ou observer la sortie LED et comparer la valeur attendue.
if (leds !== 8'h98) begin
$error("Unexpected LED value: %h", leds);
endLes cas minimaux comprennent la valeur de reset, plusieurs motifs, une écriture partielle, une lecture, deux transactions successives et une adresse non implémentée.
Assertions de protocole
Le VIP vérifie les règles AXI pendant la simulation. Il peut détecter une violation même si le test fonctionnel semble réussir. Le registre peut recevoir la bonne valeur dans un scénario favorable alors que le handshake, l'échange validé par VALID et READY, reste illégal.
Une propriété essentielle est la stabilité. Lorsqu'un émetteur place VALID à un et que le récepteur garde READY à zéro, l'adresse ou la donnée doit rester stable jusqu'au handshake.
Backpressure et indépendance des canaux
Un test avec READY toujours actif ne couvre pas le comportement réel. Le VIP peut insérer de la backpressure, ou pression de retour, en retardant l'acceptation d'un transfert. L'IP doit alors conserver ses informations sans se bloquer.
Les canaux d'adresse d'écriture et de données sont indépendants. Une IP ne doit pas supposer qu'ils arrivent dans le même cycle. Le template du wizard fournit une base, mais toute modification doit conserver cette propriété.
Régression
Un test automatique doit terminer avec un statut clair. Les transactions doivent être déterministes ou utiliser une graine enregistrée. Une régression consiste à relancer cet ensemble de tests après chaque modification afin de détecter un défaut réintroduit.
La simulation ne remplace pas le test sur carte. Elle réduit le risque avant la synthèse et localise mieux les défauts de protocole.
Références officielles
Le catalogue des guides Vivado référence le guide AXI Verification IP. Les modèles générés par Vivado et les packages associés restent la référence exacte pour la version de l'outil utilisée.
À retenir
AXI VIP remplace un partenaire de bus et surveille le protocole. Un test utile génère des transactions, vérifie les données, applique de la backpressure et couvre les erreurs. La réussite fonctionnelle et la conformité AXI sont deux résultats distincts.
Tester mes connaissances - Quiz du chapitre