C'est l'élément essentiel
qui définit les entrées - sorties du composant.
Le mot composant est à prendre au sens le plus large
possible. Ce peut être le
composant le plus élémentaire (la
porte inverseuse du schéma) ou le plus large (l'application entière).
Pour débuter, on
ne mettra qu'un composant sur notre schéma. Il n'y
aura pas de hiérarchisation des composants.
Un module est un bloc possédant des
entrée(s) et sortie(s). Il peut être issu d’un
découpage fonctionnel et contient le traitement d’une
fonctionnalité. Il doit posséder au moins
une entrée et au moins une sortie. Son traitement
peut faire appel à des ressources extérieures
au fichier.
On peut considérer
que le module de Verilog est la fonction du langage C.
Il est complètement défini
entre les mots clés : module
et endmodule
Cette facon de gérer les
modules permet d'envisager l'interconnexion des modules afin de
« câbler » les composants ou de réaliser
un schéma hiérarchisé.
Pour le composant définissant l'application, contrairement au langage C où le point d'entrée
du programme porte toujours le même nom (main),
le nom est à définir. Il devra être
défini dans le projet et portera souvent le même
nom que le fichier source Verilog (d'extension .v). C'est
celui qui sera appelé « Top Level Design Name » dans
le projet.
On prendra soin de mettre
entre parenthèses la liste des entrées - sorties
juste après le mot « module ».
Conseil : mettre les entrées
en premier, suivies des sorties.
Conseil : écrire
les noms en minuscules pour les entrées et majuscules
pour les sorties.
Conseil : donner des noms
parlants au modules comme aux entrées - sorties.
ATTENTION : la ligne de
déclaration du module se termine par un séparateur
d’instructions ( ;). Ce n'est pas le cas en langage
C.
Remarque : le logiciel
tient compte de la casse des lettres (mots_clés et
identificateurs).
Si on souhaite
définir un nouveau composant qui serait une porte
ET à 4 entrées. Le premier conseil est de
lui donner un nom parlant tel que ET4. Le cadre du module
sera alors:
module ET4 (a, b, c, d, S) ;
// contenu du module …
endmodule
Remarque : l’ordre
d’écriture des entrées-sorties est à
priori sans importance sauf dans le cas de réutilisation
ou d'interconnexion. Il doit être conservé
dans le cas d’instanciation.
Remarque : l'ordre d'écriture
des modules est indifférent.
Important : les identificateurs
peuvent contenir des lettres, chiffres et le souligné
(underscore _) avec comme seule condition que le premier
caractère ne soit pas un chiffre.
Les mots-clés
ne peuvent pas être des identificateurs.
Le séparateur
d’instructions est le point virgule ( ; ).
L’espace est un
séparateur (pas d’espace dans les noms), sauf
dans le cas des nombres ou il est accepté dans le
but de faciliter la lecture tout comme le souligné
(underscore).
Les commentaires sont inline (après //) ou multilignes (entre /*
et */). Ils ne peuvent pas être au milieu d'un identificateur
ou mot-clé.
Remarques : les commentaires
multilignes ne peuvent pas être imbriqués
Remarque : l'ordre d'écriture
des modules est indifférent
Remarque : endmodule s'écrit
en 1 seul mot (end et module sont aussi des mots-clés)
Un fichier source peut comporter plusieurs
modules, le module principal (Top Level Module) définit
seul les entrées-sorties réelles du composant
programmable. Les autres modules sont des ressources utilisées
par d'autres modules ou le module principal.
module ET4 (a, b, c, d,
S) ;
// contenu du module…
ET2 ....
endmodule
module ET2 (a, b, S) ;
// contenu du module…
endmodule
...