1. Introduction 2. Le circuit à concevoir TRANSMISSION

Transcription

1. Introduction 2. Le circuit à concevoir TRANSMISSION
Elec4- ASICs
TP n°3 : FSMD concurrentes(1)
Objectif : Etude des techniques de transformation d’une solution fonctionnelle en solution
VHDL synthétisable.
1. Introduction
Les circuits digitaux, et principalement les FPGA, ont été conçus pour recevoir le signal d’horloge des
registres depuis l’extérieur. Les FPGA étant des circuits préfabriqués paramétrables, il est
physiquement impossible de connecter plus d’horloges que le nombre prévus par le concepteur.
D’autre part, le caractère synchrone de ces circuits fait que les délais de routage ont été soigneusement
calculés par le fabriquant pour satisfaire ces contraintes, les horloges et rst utilisant des entrées et des
canaux de communication privilégiés. Les ASICs sont plus flexibles mais un trop grand nombre
d’horloges peut compliquer la tâche du routage. Les designs mono synchrones utilisés dans les TP
précédents sont des circuits pour lesquels on utilise un seul signal d’horloge en provenance de
l’extérieur, signal permettant la commutation des différents registres. En définissant une contrainte de
fréquence maximale d’horloge, l’outil de synthèse dispose du temps maximal mis à disposition pour la
logique combinatoire. Généralement, on utilise un seul flanc du signal d’horloge, même s’il devient de
plus en plus fréquent de trouver des applications utilisant les deux flancs (montants et descendants).
Les designs synchrones se sont imposés en raison de leur simplicité de conception.
La complexité de nombreux circuits fait qu’il est souvent nécessaire de partitionner le circuit en
composants élémentaires communiquant pour partager des données et/ou se synchronisant lors du
séquencement de leurs opérations. Un design multi-synchrone est alors un circuit construit à partir
d’horloges multiples n’ayant pas obligatoirement des fréquences différentes. La conception de designs
multi-synchrones peut conduire à une amélioration des performances, une réduction de la surface et/ou
consommation. Dans ce TP, on se propose d’étudier les problèmes de synchronisation entre 2 FSMD
concurrentes.
2. Le circuit à concevoir
On s’intéresse à l’implémentation sur FLEX10K du circuit de transmission série étudié en cours sur
les systèmes embarqués. La partie mémorisation ne sera pas prise en compte ici.
Cts
Txrdy
TRANSMISSION
D
Txd
trans
HD
C
DIVISEUR DE
FREQUENCE
Figure 1: Solution fonctionnelle du circuit
1
La délimitation fonctionnelle du circuit apparaît sur la Figure 1. Pour la fonction de transmission, on
retient la solution pour laquelle la variable txrdy n’est qu’en lecture par le circuit, ce qui nous donne:
•
•
•
•
•
cts (pour clear to send) est une variable partagée qui définit la disponibilité du récepteur à
recevoir une donnée série
l’entrée txrdy définit la disponibilité du circuit à transmettre une donnée parallèle présente sur
l’entrée D (valeur de 8 bits).
trans est un événement signalant la prise en compte de D
C est une variable partagée qui définit la vitesse de transmission
txd est une variable partagée pour l’émission des bits en série
process
txd<= false ;
loop
wait until HD=’1’;
if (not txrdy) and cts then
trans<=not trans;
DI:=data;
end if;
txd<=true;
wait until HD=’1’; -- durée du bit start
for I in 1 to NBB loop
Txd<=DI[I];
wait until HD=’1’; -- duree du bit de donnée
end for ;
P :=0 ;
for I in 1 to NBB loop
P :=P xor DI[I] ;
end loop;
Txd <= P;
wait until HD=’1’; -- durée du bit de parité
Txd<= false ;
wait until HD=’1’ ; -- durée des 2 bits de stop
wait until HD=’1’ ;
end process ;
Figure 2: Description en VHDL behavioral de la transmission
En l’absence de partage de variable et d’échange de messages, la transposition de la solution
fonctionnelle en une solution synthétisable est relativement simple. Les événements clk et HD seront
utilisées comme horloges des composants dviseur et transmission. Un signal rst est ajouté pour
permettre les initialisations des registres internes aux composants.
Cts
C
clk
DIVISEUR DE
FREQUENCE
HD
Txrdy
D
Txd
TRANSMISSION
Trans
rst
Figure 3: Transposition en une solution architecturale
2
2.1 La variation de fréquence
C
DIVISEUR DE
FREQUENCE
rst
clk
HD
Figure 4: Symbole du diviseur de fréquence
La description au niveau RTL du variateur de fréquence est relativement simple. La traduction en
VHDL s’effectue de manière classique en style séquentiel à l’aide d’instructions d’affectation située
sdans les branches d’un IF. La variable I peut être déclaré en natural, si le concepteur le souhaite.
Etat
courant
(C=00 et I=3) ou
T
(C=01 et I=7) ou
T0
I=15
Etat
suivant
Transfert
Condition
F
IÅ 0
HD
T0
IÅ I+1
Figure 5: Description RTL du variateur
Signalons la possibilité de décrire le diviseur d’horloge sous forme asynchrone, afin de réduire la
consommation. On obtient alors une cascade de FF rebouclées en mode inversion. La fréquence de
chaque étage étant moitié de celle de l’étage précédent, la consommation est bien inférieure à celle
d’un diviseur synchrone. Mais, la fréquence maximale peut s’en trouver affectée et la structure est
assez peu adaptée aux composants programmables du fait de l’accroissement du nombre de signaux
d’horloge que cela engendre.
2.2 La transmission série
Cts
txrdy
D
HD
rst
txd
TRANSMISSION
trans
Figure 6: Symbole du module de transmission
La description au niveau RTL du module de transmission série est plus complexe. La conception RTL
doit déboucher sur l’ordonnancement des opérations sur des cycles d’horloge. Autrement dit, il s’agit
de définir le comportement de la fonction, non plus sous forme d’un algorithme séquentiel mais sous
forme d’un algorithme dit du niveau RT (pour register Transfer). La Figure 7 montre un tel
algorithme formalisé à l’aide d’une notation ASM et construit en identifiant des pas de contrôle sur
lesquels les opérations peuvent être déclenchés, éventuellement sous conditions exprimées dans les
losanges. Il conviendra d’ajouter une condition sur en à chaque cycle d’horloge. Le découpage de
l’algorithme en pas de contrôle s’est effectué ici très simplement en considérant qu’un cycle d’horloge
correspond à la durée de la valeur de TxD. On notera que le type booléen à était remplacé par la valeur
3
binaire ‘0’ si on considère le signal vrai à l’état bas, ‘1’ dans le cas contraire. On notera également que
le dernier bit de stop est implicitement pris en compte par le retour dans l’état repos (qui dure une
période d’horloge au minimum).
repos
Txd ← ‘1’
repos
Txd ← ‘1’
autre
TxRDY||CTS
=10
TxRD||CTS
DI ← D
trans ←not trans
autre
=10
P=D[0]+..+D[7] ;
trans ← not trans; I ← 0;
DI(10..0) ← {‘1’, P, D[7..0],’0’}
transm
start
TxdÅ ‘0’
I←0
Txd Å DI[I]
transm
Txd ← DI[I]
I=7 ?
=1 parité
=0
I=10?
=1
=0
I ← I+1
I ← I+1
Txd ← ∑ DI[j] mod2
stop
Txd ← ‘1’
Figure 7: a) Ordonnancement initial b) Optimisation après pré positionnement des données
Des optimisations peuvent ensuite être envisagées pour réduire la complexité de l’implémentation. Les
techniques d’optimisation de la conception RTL sont très voisines de celles utilisées dans les
compilateurs des langages de programmation de haut niveau. Une première optimisation consiste à
réaliser le pré positionnement des données de contrôle de la transmission (bits de start,parité,stops)
dans le registre DI, au coté du caractère à transmettre. Ceci permet d’uniformiser les opérations de
transfert en ne faisant aucune distinction entre l’émission de chacun des bits. Le nombre d’états de la
machine peut ainsi être réduit à 2 états : repos et transm (simplification de l’unité de contrôle). On
notera que la calcul de la parité est déplacé (anticipé) de manière à ce que sa valeur puisse être pré
positionnée. Par ailleurs, son calcul doit être effectué sur la valeur de D et non sur celle de DI, la
valeur de ce dernier registre n’étant connue qu’à la fin de l’état courant. Une autre optimisation
consiste à transformer les opérations. Plutôt que de faire varier un indice I sur le registre DI (ce qui
induit l’inférence d’un multiplexeur par l’outil de synthèse), l’utilisation d’un registre à décalage est
moins coûteuse.
4
Repos
Repos
Txd ← ‘1’
Txd ← ‘1’
autre
TxRDY||CTS
TxRDY||CTS
=10
=10
P=(((D[0]+D[1])+(D[2]+D[3]))+…
I ← 10; trans ← not trans;
DI(10..0) ← {‘1’, P, D[7..0],’0’}
P=D[0]+..+D[7] ;
I ← 0; trans ← not trans;
DI(10..0) ← {‘1’, P, D[7..0],’0’}
Transm
DI[10..0] ← {‘1’,DI[10..1]}
Txd ← DI[0] ;
Transm
DI[10..0] ← {‘1’,DI[10..1]}
Txd ← DI[0] ;
=1
I=10?
=0
I←I+1
autre
=1
I=0?
=0
I←I–1
Figure 8: a) Optimisation par transformation d’opérations b) Algorithmic state machine finale
Les opérations de transfert d’une valeur d’un tableau et d’incrémentation de cet indice sont donc
remplacées par une opération de transfert simple du bit de poids faible du registre et un décalage à
droite de ce registre à chaque cycle d’horloge. Une dernière optimisation consiste à simplifier les
opérations de comparaison en effectuant les tests par rapport à une valeur nulle plutôt qu’à une valeur
quelconque, l’opération sur le compteur devenant une décrémentation. La complexité des équations
s’en trouve réduite.
3. Travail à réaliser
3.1 La fonction diviseur de fréquence
A Effectuez une description en VHDL de l’entité diviseur (architecture rlt1) dans le fichier
diviseur.vhd. Le reset sera actif à l’état bas. On vérifiera attentivement que le signal HD du diviseur
soit bien à haut sur les valeurs de I=3,7 ou 15 selon le cas. Ecrivez une seconde architecture rtl2 dans
laquelle l signal HD sera synchrone à l’horloge. Proposez un testbench permettant la validation de ce
composant (testdivision.vhd).
B Ecrivez un script scriptdiv.tcl en insérant les commandes permettant la compilation du fichier
division.vhd, suivi de la visualisation du schéma rtl, Demandez ensuite la synthèse technologique
sur Flex10K, en optimisant globalement puis en timing sur la base d’une contrainte d’horloge de
50 Mhz. Demandez la visualisation du schéma technologique ainsi que les rapports de surface et
de performance.
C Effectuez le placement routage du diviseur à l’aide de la commande appropriée, après avoir
affecté les pattes comme suit :
•
•
•
Le signal HD sera affecté à la pin 231 qui correspond au trou 56 du bornier C
Le signal rst sera affecté à la pin 29
le signal C sera affecté aux pins 33, 34 (poids fort à gauche) connectés aux switchs.
5
•
le signal clk sera affecté à la pin 181 qui correspond au trou 16 du bornier C
D. Effectuez la simulation post-routage du composant pour l’architecture rtl1. Examinez attentivement
la forme d’onde de HD.
E. Testez le fonctionnement du diviseur sur la plaque d’expérimentation. Utilisez pour cela le fichier
diviseur.LA disponible sur PCII-serveur pour l’analyseur logique et pour lequel le signal clk sera sur le
pod 1A voie 0, tandis que le signal à analyser HD sera branché sur le pod 3A voie 16.
C
1
2
…
Clk(16)
HD(56)
33
34
35
36
38
39
40
41
59
60
…
Bornier C
29
…
rst
Figure 9: Branchements pour le test du diviseur
3.2. La fonction transmission
A Effectuez une description en VHDL de l’entité transmission (version algorithmique optimisée de la
figure 8b) dans le fichier transmission.vhd. N’utilisez qu’un seul process pour la description de la
transmission. Proposez un testbench permettant la validation du composant (fichier
testtransmission.vhd).
B. Ecrivez un script de synthèse du transmetteur dans un script scripttrans.tcl en appliquant une
contrainte d’horloge de 20 Mhz. Au niveau du schéma RTL, examinez la génération de la parité.
C. Effectuez le placement routage de la transmission. L’affectation des signaux aux pattes du
composant suivra la convention suivante :
•
•
•
•
•
•
•
Les signaux d seront connectés à la barre d'interrupteurs gauche, poids fort en haut (pin 33), poids
faible en bas (pin 41).
Le signal txrdy sera affecté à la pin 226 qui correspond au trou 51 du bornier C
Le signal trans sera affecté à la pin 229 qui correspond au trou 54 du bornier C
Le signal txd sera affecté à la pin 231 qui correspond au trou 56 du bornier C.
Le signal rst sera affecté à la pin 29 qui correspond au bouton poussoir
le signal cts sera affecté à la pin 223 qui correspond au trou 49 du bornier C
le signal HD sera affecté à la pin 181 qui correspond au trou 16 du bornier C
6
60
HD(16)
D
…
Cts(49)
Txrdy(51)
Trans(54)
Txd(56)
33
34
35
36
38
39
40
41
1
2
…
Bornier C 59
29
…
rst
Figure 10: Configuration des pattes pour le test de la transmission
C. Effectuez une simulation post-routage du composant et validez.
D. Utilisez le fichier transmission.LA pour le test sous analyseur logique. Respectez les voies
indiquées par l’analyseur pour la connexion des signaux.de l’analyseurs :
•
sorties (Pod générateur 1A)
clk : voie 0
txrdy : voie 1
C0 : voie 2
C1 : voie 3
Cts : voie 4
Rst : voie 5
•
entrée (Pod 3A analyseur).
Txd : voie 16
Trans : voie 17
7

Documents pareils