Interfaces et modports
Regrouper les signaux d'un protocole, préciser le rôle de chaque bloc et réduire les erreurs de connexion.
Regrouper un protocole
Une interface rassemble les signaux qui forment une même liaison. Elle peut aussi contenir des types, paramètres, fonctions, tâches et assertions liés au protocole.
interface simple_stream_if #(
parameter int unsigned WIDTH = 32
) (
input logic clk
);
logic valid;
logic ready;
logic [WIDTH-1:0] data;
logic last;
modport source (
input clk, ready,
output valid, data, last
);
modport sink (
input clk, valid, data, last,
output ready
);
endinterfaceAu lieu de répéter quatre ports à chaque niveau, un module reçoit une instance de l'interface.
module stream_register (
simple_stream_if.sink upstream,
simple_stream_if.source downstream
);
always_ff @(posedge upstream.clk) begin
if (upstream.valid && upstream.ready) begin
downstream.data <= upstream.data;
downstream.last <= upstream.last;
downstream.valid <= 1'b1;
end else if (downstream.ready) begin
downstream.valid <= 1'b0;
end
end
assign upstream.ready = downstream.ready || !downstream.valid;
endmoduleLe rôle des modports
Un modport décrit la vue d'un participant. Pour source, valid, data et last sont des sorties, tandis que ready est une entrée. Pour sink, les directions sont inversées.
Cette information aide le compilateur à repérer un signal piloté du mauvais côté. Elle documente aussi le protocole sans devoir relire tous les modules connectés.
Les directions d'un modport sont vues depuis le module qui l'utilise. C'est un point fréquent de confusion lors de la première écriture.
Instanciation au niveau supérieur
simple_stream_if #(.WIDTH(16)) link (.clk(i_clk));
producer u_producer (.bus(link.source));
consumer u_consumer (.bus(link.sink));Une seule instance link contient les signaux. Les modports limitent la vue fournie à chaque module.
Ce qu'une interface ne règle pas
Une interface ne définit pas à elle seule le comportement temporel. Il faut toujours écrire les règles du protocole : quand valid peut changer, quand un transfert a lieu, combien de cycles une donnée reste stable et comment le reset agit.
Les interfaces sont synthétisables dans de nombreux outils modernes, mais certaines limites existent sur les tâches, les paramètres, les tableaux d'interfaces ou les frontières d'IP. Une interface plate et simple est généralement la plus portable.
À retenir
- Une interface regroupe les signaux et déclarations d'un protocole.
- Un modport donne une vue et des directions propres à un rôle.
- Les directions sont exprimées depuis le module utilisateur.
- Une interface réduit les connexions répétées, pas le besoin de spécifier le protocole.
- Il faut vérifier le support de synthèse aux frontières du projet.
📝 Tester mes connaissances - Quiz du chapitre