Ce que SystemVerilog ajoute à Verilog
Comprendre le rôle de SystemVerilog et choisir ses apports utiles pour écrire du RTL et le vérifier.
Une extension de Verilog
SystemVerilog reprend Verilog et lui ajoute des types, des blocs procéduraux plus précis, des interfaces et un ensemble complet d'outils de vérification. Un fichier .sv peut donc contenir du RTL synthétisable, un testbench, ou les deux.
Le langage ne change pas la nature du travail. Il faut toujours décrire un circuit, gérer les tailles de données, séparer le combinatoire du séquentiel et vérifier le timing. Son intérêt est surtout de rendre l'intention plus claire et de permettre aux outils de signaler davantage d'erreurs.
Un petit module RTL
module event_counter #(
parameter int unsigned WIDTH = 16
) (
input logic i_clk,
input logic i_rst,
input logic i_event,
output logic [WIDTH-1:0] o_count
);
always_ff @(posedge i_clk) begin
if (i_rst)
o_count <= '0;
else if (i_event)
o_count <= o_count + 1'b1;
end
endmodulelogic remplace ici les anciens usages de reg. always_ff indique que le bloc décrit des bascules. Le paramètre est typé et sa valeur doit être non signée.
Ces mots-clés ne rendent pas le circuit correct à eux seuls. Ils donnent en revanche plus d'informations au compilateur. Un outil peut par exemple refuser qu'une variable affectée dans un always_ff soit également écrite par un autre bloc.
Deux parties du langage
Pour le RTL, les ajouts les plus utiles sont :
logicet des types entiers mieux définis ;always_comb,always_ffetalways_latch;typedef, les énumérations, structures et tableaux ;- les packages, interfaces et modports ;
- les paramètres de valeur et de type.
Pour la vérification, SystemVerilog apporte notamment :
- les classes et les objets ;
- la randomisation avec contraintes ;
- les assertions temporelles ;
- la couverture fonctionnelle ;
- des mécanismes de communication entre tâches.
Les classes, la randomisation et la couverture ne décrivent normalement pas du matériel. Elles vivent dans le testbench.
Garder une frontière nette
Une bonne organisation sépare le RTL synthétisable du code de vérification. Le RTL doit rester compréhensible avec un ensemble limité de constructions bien prises en charge par l'outil de synthèse. Le testbench peut utiliser les fonctions plus riches du langage pour générer des cas, observer le DUT et contrôler les résultats.
Cette séparation évite de croire qu'une construction simulable sera forcément transformée en matériel. La documentation de l'outil de synthèse reste la référence pour connaître le sous-ensemble accepté.
À retenir
- SystemVerilog contient Verilog et ajoute des outils pour le RTL et la vérification.
- Les blocs spécialisés et les types rendent l'intention plus facile à contrôler.
- Le code simulable n'est pas toujours synthétisable.
- L'extension
.svactive normalement l'analyse SystemVerilog. - Le RTL et le testbench gagnent à rester séparés.
📝 Tester mes connaissances - Quiz du chapitre