Le Verilog est un langage de description matériel (HDL) utilisé pour concevoir, simuler et vérifier des systèmes électroniques numériques, en particulier des circuits intégrés (IC). Conçu dans les années 1980, le Verilog permet aux ingénieurs de décrire le comportement et la structure des systèmes électroniques à divers niveaux d'abstraction, allant de l'algorithme de haut niveau jusqu'au niveau des portes. Son rôle principal est de faciliter la simulation et la synthèse de circuits logiques numériques, permettant la conception et la vérification efficaces de composants matériels complexes tels que les CPU, les FPGA (Field-Programmable Gate Arrays) et les ASIC (Application-Specific Integrated Circuits).
Le Verilog a vu le jour en 1984 en tant que langage propriétaire développé par Gateway Design Automation. Son objectif initial était de fournir un outil de modélisation pour les systèmes numériques. En 1990, il a été acquis par Cadence Design Systems, ce qui a facilité une adoption plus large du langage dans l'industrie électronique.
En 1995, le Verilog a été standardisé en tant qu'IEEE 1364, marquant son statut de norme officielle HDL. Cette standardisation a contribué de manière significative à la popularité du Verilog, lui permettant de rivaliser avec d'autres HDL, notamment le VHDL, qui avait gagné en importance dans les années 1980 grâce à son utilisation dans des applications militaires et aérospatiales.
Au fil des ans, le Verilog a évolué pour inclure des constructions pour des méthodologies de conception modernes telles que le SystemVerilog, une extension qui incorpore des fonctionnalités à la fois du Verilog et des paradigmes de programmation orientée objet. Aujourd'hui, le SystemVerilog représente à la fois un outil de vérification et de conception, renforçant encore les capacités du Verilog.
À l'heure actuelle, le Verilog et ses extensions continuent d'être un langage fondamental dans l'industrie de l'automatisation de la conception électronique (EDA), avec un écosystème robuste d'outils fournis par diverses grandes entreprises telles que Synopsys, Mentor Graphics et Cadence.
Le bloc de construction fondamental dans le Verilog est le module. Les modules contiennent des entrées, des sorties et une logique interne.
module mon_adder(input a, input b, output somme);
assign somme = a + b;
endmodule
Le Verilog prend en charge des blocs procéduraux tels que always
et initial
, qui permettent une logique séquentielle et une initialisation.
always @(posedge clk) begin
q <= d; // À la montée de clk, assigner d à q
end
Des assignations continues peuvent être effectuées à l'aide de l'instruction assign
, qui garantit que la sortie reflète immédiatement le changement des entrées.
wire out;
assign out = a & b; // Porte AND
Le Verilog permet une modélisation directe à l'aide de primitives intégrées telles que AND, OR et NOT.
and mon_and(out, a, b); // Instancie une porte AND
Les bancs d'essai sont utilisés dans le Verilog pour simuler et vérifier la fonctionnalité d'une conception.
module tb_mon_adder;
reg a, b;
wire somme;
mon_adder dut (.a(a), .b(b), .somme(somme)); // Instancie la conception
initial begin
a = 0; b = 0; #10; // Appliquer les entrées et attendre
a = 1; #10;
b = 1; #10;
end
endmodule
Le Verilog prend en charge des instructions conditionnelles comme if
, case
pour la prise de décision dans les blocs procéduraux.
if (sel) begin
out = a;
end else begin
out = b;
end
Des boucles peuvent être utilisées dans le Verilog pour des assignations et des opérations répétitives.
for (i = 0; i < 8; i = i + 1) begin
// Effectuer des opérations
end
Le Verilog permet des modules paramétrés, permettant de réutiliser des conceptions avec différentes configurations.
module mon_multiplicateur #(parameter LARGEUR = 8)(input [LARGEUR-1:0] a, input [LARGEUR-1:0] b, output [2*LARGEUR-1:0] produit);
assign produit = a * b;
endmodule
Le Verilog offre la possibilité de définir des tâches et des fonctions pour une conception de code modulaire.
function [7:0] add(input [7:0] a, input [7:0] b);
add = a + b;
endfunction
Les assignations non-bloquantes utilisant l'opérateur <=
permettent une meilleure modélisation des conceptions synchrones.
always @(posedge clk) begin
q <= d; // Planifié pour une exécution ultérieure
end
Le développement en Verilog est facilité par une variété d'outils et d'IDE. Les logiciels couramment utilisés incluent ModelSim, Synopsys VCS et Cadence Incisive, qui offrent des capacités de simulation, de synthèse et de débogage.
Pour construire un projet Verilog, vous écrivez généralement votre code Verilog dans des fichiers .v
. Vous pouvez ensuite invoquer un simulateur ou un outil de synthèse depuis la ligne de commande ou dans un IDE. Par exemple, une commande de compilation pourrait ressembler à :
vcs mon_design.v -o ma_sim
Après la compilation, vous pouvez exécuter la simulation avec :
./ma_sim
Le Verilog est principalement utilisé dans la conception et la vérification de circuits numériques, y compris :
Sa capacité à modéliser le matériel à divers niveaux d'abstraction le rend polyvalent pour de nombreuses applications dans l'industrie électronique.
Le Verilog est souvent comparé à d'autres langages HDL tels que le VHDL. Bien que les deux servent des objectifs similaires, le Verilog est généralement considéré comme plus facile à apprendre en raison de sa syntaxe simplifiée, similaire à celle du langage de programmation C. Le VHDL est préféré pour des conceptions plus verbeuses qui nécessitent un contrôle de type strict et est souvent utilisé dans des applications gouvernementales et aérospatiales.
Comparé aux langages de programmation logiciels comme C et Java, le Verilog se concentre sur les structures matérielles et les processus concurrents, tandis que les langages logiciels traitent la logique séquentielle et procédurale. Python peut être utilisé pour des tests de haut niveau et le traitement des données de simulation, mais ne fournit pas de méthode directe pour la description matérielle.
Pour ceux qui cherchent à traduire des conceptions Verilog vers d'autres formats HDL, des outils comme Calyx et d'autres logiciels open-source existent pour faciliter ce processus. Cependant, les caractéristiques spécifiques du Verilog peuvent rendre les traductions directes difficiles en raison des différences inhérentes dans l'abstraction et l'intention de chaque langage.
Des outils comme Verilator ou Yosys ont été développés pour aider à convertir le code Verilog en divers formats ou à l'optimiser, et ils offrent des capacités de synthèse et de simulation. Ces outils sont particulièrement utiles pour intégrer des conceptions Verilog dans des environnements orientés flux.