LOGIQUE PROGRAMMABLE EN VERILOG
Chapitre 1. Introduction
Chapitre 2. Traitement combinatoire et syntaxe du langage
2.1. Le module
2.2. Les entrées - sorties
2.3. Les niveaux logiques
2.4. Le corps du programme
2.5. Les opérations logiques binaires
2.6. Les opérations logiques unaires
2.7. Les opérations arithmétiques
2.8. Les bus
2.9. La déclaration de paramètre
2.10. La concaténation
2.11. Exemple: l'additionneur 1 bit complet
2.12. Taille et codage des nombres
2.13. Extension des modules
2.14. Avantages et Inconvénients des différentes approches sur un exemple
2.15. Exercices
2.16. Solution des exercices
Chapitre 3. L'usage de l'outil QUARTUS II
Chapitre 4. Description comportementale
Chapitre 5. Projets : énoncés
Chapitre 6. Projets : vers la solution
Page d'accueil Table des matières Niveau supérieur Page précédente Bas de la page Page suivante

2.8. Les bus

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 :

  • pour décrire la variable a comme étant une entrée à 4 fils dont les repères vont de 0 à 3.

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 ;

 

Page d'accueil Table des matières Niveau supérieur Page précédente Haut de la page Page suivante