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.10. La concaténation

Le composant est avant tout numérique. Sa spécialité est la manipulation de bits.

Il est souvent utile de regrouper des bits (concaténation) pour les utiliser en tant que mot. Avec Verilog, il est possible de concaténer tous bits, groupe de bits, bus autant en entrée qu’en sortie.

Ce sont les accolades qui définissent cette opération.

La syntaxe est :

{bits ou liste de bits séparés par des virgules (,)}

 

Exemple :

S = {1'b1, a[2], a[2], b[2 :1]}

Si le nombre de bits de l’affecté et de l’affectant ne sont pas égaux, des troncatures s’opèrent ou des 0 sont ajoutés.

Exemple :

input [3:0] a ;

output [4:0] b ;

output [2:0] c ;

assign b = {a, 1'b1, 2'b0} ;

Cette dernière ligne met dans b, la concaténation de (a, d'un bit à 1 et de 2 bits à 0), soit 7 bits. b ne fait que 5 bits donc le résultat sera amputé de a[3] et a[2].

 

assign {c, b[2]} = {1'b1, a} ;

De même, la dernière ligne se traduit par : mettre dans la concaténation (c et le bit 2 de b), la concaténation (de 1 et a). La concaténation affectée étant plus grande de 1 bit, se verra ajouter un bit à 0 dans C[2]

La ligne suivante aurait donné le même résultat final, aurait été élaborée sur 32 bits (1 (sur 32 bits) concaténée avec a est évaluée sur 32 bits avant d'être affectée :

assign {c, b[2]} = {1, a} ;

Rappel : les opérations arithmétiques sont réalisées par défaut sur 32 bits et les résultats sont tronqués au moment des affectations dans les variables.

Pour réaliser une rotation à droite de 1 bit (opérateur qui n'existe pas ce langage) sur la variable r :

output [7 : 0] r ;

assign r = {r[0], r[7 : 1]} ;

ou encore

assign {r[6 : 0], r[7]} = r ;

 

IMPORTANT : de même, les variables qui sont telles que le nombre de bits réellement utilisés est inférieur à celui de la déclaration, seront amputées de bits inutiles. Ceci génère un certain nombre de warnings dont il faut s’enquérir à la compilation.

Il est possible de réaliser des répétitions de concaténations (ou concaténations imbriquées) :

{2{a[1], b[2]}, b[0]} est équivalent à {a[1], b[2], a[1], b[2], b[0]}

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