Академический Документы
Профессиональный Документы
Культура Документы
1. Logique combinatoire
A. Additionneur B. Oppos
A. Additionneur
i. Architecture structurelle ii. Architecture flot de donnes iii. Simulation
i. Architecture structurelle
L'additionneur binaire peut se construire partir d'lments plus simples.
On peut ainsi construire une porte non-et, puis un demi-additionneur, puis un additionneur 1 bit et enfin un additionneur N bits. La dpendance des fichier sera le suivante : addN add1 demi_add nand2
Bourguiba Riadh - ENIT - Gnie Electrique
Top-level
i. Architecture structurelle
La porte nand2 scrit directement en flot de donnes, avec loprateur nand du paquetage std_logic_1164 de la librairie IEEE.
i. Architecture structurelle
Pour le demi-additionneur il suffit dassembler plusieurs portes Nand2 conformment au schma suivant :
i. Architecture structurelle
Le code VHDL du demi-additionneur scrit :
i. Architecture structurelle
Remarquez que la porte nand2 nest pas dclare dans la zone de dclaration de larchitecture. En effet, la dclaration est faite dans un fichier de paquetage pack. Le demi-additionneur fait appel ce paquetage grce aux lignes 4 et 5.
La porte nand2 est utilisable dans tous les fichiers VHDL qui font appel au paquetage pack. Si lon modifie lentit de nand2, il suffira de mettre jour le paquetage pack, pour quautomatiquement toutes les instances de nand2 bnficient des modifications de son entit. Centraliser les dclarations de composants prsente un grand intrt lorsque lon dveloppe des systmes complexes.
i. Architecture structurelle
Le code VHDL du paquetage pack scrit :
10
Dornavant, nous ajouterons ce paquetage les dclarations de tous les composants au fur et mesure de nos dveloppements, sans le montrer. Aussi on se contentera de faire appel pack en supposant que les dclarations y sont dj contenues.
Bourguiba Riadh - ENIT - Gnie Electrique
i. Architecture structurelle
Maintenant, il faut assembler deux demi-additionneurs pour crer un additionneur 1 bit :
11
a b cin
i. Architecture structurelle
Le code VHDL de ladditionneur 1 bit scrit :
12
i. Architecture structurelle
Les modules prcdents n'avaient qu'une seule entit et une seule architecture. Leur description commenait par les appels aux paquetages, continuait avec l'entit et se terminait par l'architecture.
13
Dans le cas o un module possde plusieurs architectures, il est dusage de placer lentit en dbut du fichier source VHDL, suivie de ses diffrentes architectures. Chaque unit de conception doit alors tre prcde de ses propres appels aux paquetages externes dont elle a besoin. Nous allons suivre cette organisation pour notre top-level (addN).
i. Architecture structurelle
Son entit prsentera donc un paramtre N de type entier.
14
Ladditionneur N bits est un composant gnrique, capable de sadapter un nombre de bits paramtrable .
i. Architecture structurelle
Une architecture possible pour raliser addN repose sur linstanciation rptitive dadd1. Celle-ci utilise le paramtre N dans une boucle de gnration itrative : : for ... in generate end generate;
15
Notez qu'en VHDL le compteur de boucle est obligatoirement un entier. Il na donc pas besoin dtre dclar. Reste maintenant dcomposer notre additionneur N bits en N additionneurs 1 bit.
i. Architecture structurelle
La somme sur N bits et laddition 1 bit scrivent :
16
cn +
c1 an-1 a0 bn-1 b0
cout cin a + b s
sn sn-1 s0
Il faut normaliser les largeurs de donnes pour dessiner une structure rgulire que lon pourra dcrire simplement.
i. Architecture structurelle
Pour cela, on ajoute les bits en rouge :
17
i. Architecture structurelle
Le code VHDL de larchitecture structurelle de addN (partie 1/2) s'crit :
18
i. Architecture structurelle
Le code VHDL de larchitecture structurelle de addN (partie 2/2) s'crit :
19
A. Additionneur
i. Architecture structurelle ii. Architecture flot de donnes iii. Simulation
20
21
A. Additionneur
i. Architecture structurelle ii. Architecture flot de donnes iii. Simulation
22
iii. Simulation
23
La simulation de notre composant ncessite la cration de banc de test ou testbench. Un testbench est un composant virtuel destin crer un environnement de simulation pour un composant rel. A ce titre, il ne possde aucun port, mais il peut avoir des paramtres gnriques. Il est conu en vue de la simulation uniquement, pas de la synthse. Il instancie le composant tester et stimule ses entres. Par convention, son nom est celui du module test (ex : module), prcd du prfixe tb_ (ex : tb_module).
iii. Simulation
Pour notre testbench, nous utiliserons un paramtre gnrique N. La valeur de N sera fixe par dfaut, directement dans lentit.
24
Nous appellerons galement le paquetage std_logic_arith , qui contient la fonction conv_std_logic_vector qui permet de convertir un entier en un vecteur logique et dont on se servira dans larchitecture.
iii. Simulation
Par ailleurs, le choix de larchitecture simule se fait la ligne 16, => Un testbench sert simuler toutes les architectures dune mme entit.
25
tant donn le grand nombre de valeurs binaires possibles, nous utilisons deux boucles imbriques pour gnrer a et b (lignes 32 38).
iii. Simulation
26
iii. Simulation
On obtient pour les chronogrammes suivant :
27
1. Logique combinatoire
A. Additionneur B. Oppos
28
B. Oppos
i. Introduction ii. Architecture structurelle iii. Architecture flot de donnes iv. Simulation
29
i. Introduction
30
La recherche de loppos dun nombre sign not en complment 2 est une opration trs courante dans les systmes logiques. Algorithme 1 : Recopier tous les bits de la droite vers la gauche jusquau premier bit 1 inclus, puis inverser les bits suivants. Algorithme 2 : Inverser tous les bits, puis ajouter 1.
Bourguiba Riadh - ENIT - Gnie Electrique
B. Oppos
i. Introduction ii. Architecture structurelle iii. Architecture flot de donnes iv. Simulation
31
32
Cette structure exploite une proprit intressante de la porte XOR : linversion commande.
Commande 0 0 e 0 1 0 1 Xor 0 1 1 0
a1
b1
1 1
a0 0
Commande=0 => e
b0
33
Notre description utilisera donc ce bloc lmentaire 1 bit (opp1), pour gnrer un bloc de taille variable (oppN).
c
oppN opp1 Top Level
a b
34
35
B. Oppos
i. Introduction ii. Architecture structurelle iii. Architecture flot de donnes iv. Simulation
36
37
Pour cette description, on aura besoin de loprateur not et de loprateur + appliqus un vecteur de bits sign. Ceux-ci sont dfinis dans le paquetage std_logic_signed de la librairie IEEE. Larchitecture obtenue scrit :
B. Oppos
i. Introduction ii. Architecture structurelle iii. Architecture flot de donnes iv. Simulation
38
iv. Simulation
Entit
39
iv. Simulation
Architecture
40
iv. Simulation
Chronogrammes :
41
42
2. Logique squentielle
A. Bascule D B. Registre C. Registre dcalages D. Compteur/dcompteur
43
A. Bascule D
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
44
i. Introduction
45
La bascule D est une circuit squentiel synchronis avec une horloge, clk, qui mmorise une simple information binaire, un instant privilgi du cycle, si certaines conditions sont runies. L'instant privilgi de l'horloge est indiqu par un front qui peut tre montant ou descendant, selon le type de bascule. Un signal permet de forcer la valeur de sortie de la bascule au dmarrage : reset set : valeur de sortie force zro. : valeur de sortie force un.
La prise en compte de ce signal peut dpendre de l'horloge (reset ou set synchrone), ou bien ne pas en dpendre (reset ou set asynchrone). Un signal de validation, enable, permet de valider ou d'ignorer les fronts actifs de l'horloge. Enfin, reset, set et enable sont facultatifs et peuvent tre actif l'tat bas ou l'tat haut.
Bourguiba Riadh - ENIT - Gnie Electrique
i. Introduction
On considre la bascule D suivante :
46
e D r clk Q
La bascule D est remise zro de faon asynchrone lorsque r est vrai. La donne D est recopie dans Q, sur front montant de clk, condition que e soit vrai.
A. Bascule D
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
47
ii. Entit
L'entit s'crit conformment au symbole :
48
e D r clk Q
A. Bascule D
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
49
50
51
Elle est extrmement importante. Elle comporte une liste des signaux susceptibles de modifier le rsultat du process (ici q_tmp). Ces dernier doivent donc provoquer l'activation du process. Elle contient les signaux asynchrones (qui ne dpendent pas de l'horloge), ainsi que l'horloge elle mme. En revanche, les signaux synchrones n'ont pas besoin d'y tre placs, car leur valeur n'est prise en compte que sur front actif de l'horloge et que celle-ci est dj dans le liste. Si on ajoute les signaux synchrones la liste, ils ralentiront inutilement la simulation.
Bourguiba Riadh - ENIT - Gnie Electrique
52
C'est un signal de contrle particulier : il doit se propager sur un rseau de routage optimis pour garantir que les fronts dhorloge actifs se produiront au mme instant travers tout le circuit. => il faut donc le distinguer des autres signaux. Pour cela, on le teste sparment, aprs avoir test les signaux asynchrones (r) et avant de tester les signaux synchrones (e). Ainsi les outils de synthse seront mme de lidentifier sans aucune ambigut.
53
q_tmp tant un signal, il faut prciser sa valeur de sortie dans TOUTES les circonstances. => Sinon, loutil de synthse risque de choisir les valeurs qui larrangent pour les cas de non spcifis Toute affectation d'une valeur un signal dans un process ne deviendra effective qu' la sortie du process (franchissement de end process). Signal q_tmp On travaille avec le signal q_tmp, car ce signal interne peut tre lu et crit, contrairement au port de sortie q, qui ne peut tre que crit. q_tmp est connect au port de sortie q, n'importe o l'extrieur du process.
Bourguiba Riadh - ENIT - Gnie Electrique
A. Bascule D
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
54
55
56
Cette fois ci, on dfinit q_tmp comme une variable et non plus comme un signal. Une variable est locale au process et conserve sa valeur entre deux activations successives (come une variable static en C). Par consquent, il est possible cette fois-ci de supprimer les lignes 58 et 60, puisqu'il n'y a pas de modification de la valeur de la variable et que celle-ci est conserve automatiquement. On prfre toutefois rester explicite par soucis de maintenabilit du code. L'oprateur d'affectation d'une variable est := et l'affectation est immdiate. Aprs laboration du rsultat, la variable q_tmp doit tre affecte au port de sortie q. En gnral, on effectue cela la fin du process, pour que q reflte les changements.
A. Bascule D
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
57
v. Simulation
Il faut gnrer trois signaux de contrle :
58
le reset (r)
lhorloge (clk)
le enable (e)
Il existe plusieurs faons de les crer. En voici deux diffrentes, mais toutes aussi efficaces.
Bourguiba Riadh - ENIT - Gnie Electrique
v. Simulation
Pour le reset il faut gnrer une impulsion au dmarrage du systme.
Solution 1 1. Lui affecter une premire valeur dans un processus et attendre un certain dlai, 2. puis changer cette valeur et suspendre dfinitivement le processus. Solution 2
59
Lui affecter une valeur dinitialisation, puis lui affecter une valeur dfinitive aprs un dlai, partir dune seule instruction.
v. Simulation
Pour lhorloge, il faut gnrer un signal priodique.
Solution 1 1. Dclarer le signal dhorloge normalement. Solution 2
60
2. Lui affecter une premire valeur dans un processus et attendre un certain dlai, 3. puis changer cette valeur et attendre le mme dlai avant de recommencer.
2. Inverser cette valeur au bout dun dlai et recommencer, le tout avec une seule instruction.
v. Simulation
L'entit du testbench est vide :
61
Elle n'a pas besoin de paquetages, puisqu'elle n'a ni ports d'entre/sortie, ni paramtres. Nous allons maintenant envisager deux architectures pour le testbench de la bascule D, afin d'illustrer les diffrentes syntaxe de gnration du reset et de clk.
v. Simulation
1re architecture
62
v. Simulation
2me architecture
63
v. Simulation
Chronogrammes
64
2. Logique squentielle
A. Bascule D B. Registre C. Registre dcalages D. Compteur/dcompteur
65
B. Registre
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
66
i. Introduction
67
Les registres que nous tudions ici sont construits exclusivement partir de bascules D assembles en parallle. Ds lors, deux solutions s'offrent nous : Construire le registre l'aide d'une boucle de gnration de bascules D. Construire le registre partir d'une description comportementale squentielle, comme nous l'avons fait pour la bascule D. => Nous choisissons la seconde solution. Cette dernire offre galement deux possibilits, avec signal ou avec variable, que nous verrons toutes les deux.
B. Registre
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
68
ii. Entit
69
L'entit s'crit conformment comme celle de la bascule, sauf que les donnes sont dsormais des vecteurs logiques paramtrs :
B. Registre
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
70
71
72
Nous allons utiliser une notation nouvelle. En effet, laccs aux lments dun vecteur de bits peut se faire de diffrentes faons en VHDL. : a(7) <= b(2);
b <=(1,1,others=>0);
B. Registre
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
73
74
B. Registre
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Architecture squentielle avec variable v. Simulation
75
v. Simulation
76
L'entit comporte cette fois-i un paramtre (N) qui sera attribu au composant test (regN).
v. Simulation
L'architecture dclare les signaux et instancie le composant tester.
77
v. Simulation
78
Puis, elle gnre les valeurs qui seront affects aux signaux, et donc aux ports d'entre du composant tester.
v. Simulation
Chronogrammes
79
2. Logique squentielle
A. Bascule D B. Registre C. Registre dcalages D. Compteur/dcompteur
80
C. Registre dcalages
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
81
i. Introduction
82
Un registre dcalage est un registre classique, auquel on ajoute une fonction de dcalage. Il prsente ainsi deux signaux de contrle en plus du reset et de clk: load : provoque le chargement du registre lorsqu'il vaut '1'. shift : provoque le dcalage de la donne contenue dans le registre et pralablement charge lorsqu'il vaut '1'. Gnralement, le chargement (load) est prioritaire sur le dcalage (shift). Il existe plusieurs sortes de dcalages. De plus, la distance du dcalage dpend de l'application ralise.
Bourguiba Riadh - ENIT - Gnie Electrique
i. Introduction
Voici quelques exemples avec une distance de 1 bit :
gauche droite
83
Rotation
Dcalage
Dcalage
C. Registre dcalages
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
84
ii. Entit
Les donnes sont paramtres
85
C. Registre dcalages
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
86
87
88
: Il est galement synchrone. En revanche, il n'est test que si load vaut '0'. Il est donc moins prioritaire.
C. Registre dcalages
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
89
iv. Simulation
90
iv. Simulation
91
iv. Simulation
92
iv. Simulation
93
2. Logique squentielle
A. Bascule D B. Registre C. Registre dcalages D. Compteur/dcompteur
94
D. Compteur/dcompteur
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
95
i. Introduction
96
Un compteur/dcompteur est un circuit logique squentiel dont la valeur s'incrmente ou se dcrmente au rythme de l'horloge (clk). Pour cela, il faut une valeur initiale qui peut tre charge comme dans un registre, si le registre a une entre de chargement (load). Sinon le compteur/dcompteur est simplement initialis zro (reset). Le compteur/dcompteur travaille sur un nombre de bits fixe, ce qui dtermine un intervalle de valeurs reprsentables. Arriv aux limites de cet intervalle le compteur peut tre bloqu, s'il possde un circuit de dtection des limites. Sinon, il fait un dpassement de capacit, c'est dire qu'il passe d'une limite de l'intervalle, l'autre.
Bourguiba Riadh - ENIT - Gnie Electrique
i. Introduction
97
Nous allons considrer ici le cas d'un compteur/dcompteur avec dtection des limites. La valeur initiale sera toujours nulle et fixe par le signal reset (pas de chargement). Le choix du sens du comptage s'effectuera en fonction de la valeur du signal up_down : '1' : le compteur/dcompteur compte. '0' : le compteur/dcompteur dcompte. Enfin, les front montants de l'horloge seront valids par un signal enable.
D. Compteur/dcompteur
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
98
ii. Entit
Nous obtenons donc l'entit suivante :
99
D. Compteur/dcompteur
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
100
101
102
Les tests de enable, de up_down et des limites de l'intervalle sont tous regroups ensembles. Seul le test du front d'horloge reste isol, afin de garantir une interprtation correcte du code VHDL au moment de la synthse.
D. Compteur/dcompteur
i. Introduction ii. Entit iii. Architecture squentielle avec signal iv. Simulation
103
iv. Simulation
104
iv. Simulation
105
iv. Simulation
106
iv. Simulation
107
iv. Simulation
108
iv. Simulation
109