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