Le travail sur des variables simples (1
bit) est plutôt limité. La
notion de fils groupés (bus) est indispensable notamment
lorque l'on imagine manipuler des nombres ou des groupes
de fils appelés ports.
Cette description se fera par la mise entre
crochets des indices extrêmes séparés
par (:) le tout entre le type et le nom de la variable.
la syntaxe de déclaration est :
type [indicemax : indicemin]
nomdelavariable;
Ainsi :
input [3:0] a ;
-
Pour décrire
la variable b comme étant une entrée
à 4 fils dont les repères vont de
1 à 4
input [4:1] b ;
-
Pour décrire
la variable S comme étant une sortie
à 4 fils dont le repères vont
de 3 à 0
output [0:3] S ;
ATTENTION : les opérations
sont toujours faîtes avec le poids faible à
droite. Conventionnellement, le bit de gauche est repéré
0. Il est fortement déconseillé d’utiliser
la 3ème symbolique.
L’accès
au mot complet est possible directement par le nom (sans
crochets) de la grandeur dans l’équation.
Exemple :
S = a ;
L’accès
au bit se fait en précisant le bit dans le crochet
Exemple :
S[2] = a[1] | b[3] ;
L’accès
à un groupe de bits consécutifs se fait à
la manière de la déclaration.
Exemple :
S[1 :3] = b[4 :2] ;
Un bus peut être
déclaré par une opération avec des
valeurs, mais ne comportant pas de variables.
Exemple :
output [4*8 : 0] S ;
Il faut éviter les écritures
suivantes qui ne génèrent pas les mêmes
variables :
input a , [7:0] b ;
génère un
entrée a (1 bit) et une entrée b du type bus
de 8 bits
input [7:0] b, a ;
génère une
entrée b du type bus de 8 bits et une seconde entrée a
identique
Conseil : on déclarera
chaque variable de type bus sur une ligne propre. Seules
les variables 1 bit seront déclarées
sur la même ligne
Attention : les débutants
confondent la déclaration de tableaux (comme en C)
et de bus (ou vecteur).
Exemple : le OU à 4 entrées
module OU4( e, S) ;
input [3 : 0] e ;
output S ;
assign S = |e ;
endmodule
Important: un tableau
n'est pas un bus. On accède à un bus directement
par le nom de la variable. On n'accède
qu'à un seul élément à la fois dans un tableau.
reg Tableau [7 : 0] ; //
tableau de 7 valeurs
reg [7 : 0] Bus ;
Tableau = 1; // est illégal
Bus = 1 ; // est légal
Tableau[2] = 1 ; // est légal
Bus[2] = 1 ; // est légal
Une mémoire de 12
octets se déclare ainsi :
reg [7 : 0] Memoire [11
: 0] ;
Elle peut utiliser ainsi :
Memoire [2] = 25 ;