Académique Documents
Professionnel Documents
Culture Documents
Gnralits
Nous commenons par prsenter les conventions de la reprsentation des circuits programmables : regardez l'image ci-dessous avec gauche la convention schmatique habituelle et droite la nouvelle convention.
On voit sur cette image que les entres des portes ET sont, par convention, ramenes sur un fil. Pour connatre le nombre d'entres des portes ET ainsi dessines, il vous faut compter le nombre d'intersections avec des fils perpendiculaires et de diviser par deux. Par exemple sur l'image, le fil d'entre (vertical) de la porte ET de gauche rencontre 6 fils (horizontaux), ce qui signifie que la porte ET comporte trois entres (ce qui correspond bien au schma de gauche). Une division par deux est ralise car en gnral il arrive la variable et son complment. Nous avons utilis ici la mme convention pour le OU logique qui suit le ET. Mais, en gnral, pour les circuits simples, on dessine toutes les entres des OU comme ce sera fait dans les schmas internes dcrits plus loin dans ce chapitre. Les croix indiquent les liaisons sur des fils qui se croisent. Cette convention n'est utile qu'avec les circuits programmables simples (PLD, PAL et PLA)
''
Remarque : un rseau PLA ne contient que rarement tous les "minterms" (termes produits) contrairement une mmoire. Dans l'exemple de la figure ci-dessus, le fait que le OU ne contient que 4 entres veut dire que seulement quatre termes produits sont ralisables simultanment. Pourtant, avec trois entres, il existe huit termes produits.
Son nom indique que l'on 4 sorties squentielles, ce qui n'est pas difficile remarquer. Ces sorties sont compltes par 4 sorties combinatoires. Les 64 termes produits indiqus sur la figure sont rpartis galit sur les 8 sorties, ce qui indique que les OU ont tous 8 entres.
Exercice 1
On veut raliser le circuit schmatis ci-contre dans une PAL 16R8 dont le schma partiel est prsent ci-dessous. crire le programme VHDL correspondant en remarquant que la variable Ena n'a pas besoin d'tre dclare dans l'entit. Placez les croix correspondantes au programme sur le schma ci-aprs. Remarque : mme si cette structure (ci-dessous) avec OU nombre d'entres fix est appele PAL, on utilisera indiffremment dans la suite PAL ou PLA.
Remarque : La PAL tant une 16R8, le schma ci-dessus est incomplet : il manque 7 sorties et aussi 28 fils verticaux (2 x 16 moins les 4 que l'on a). Indication : transformez votre schma en quation de rcurrence. Ce qui se trouve avant Qout dans le schma original est une commande trois tats sans inversion. Quand vous essayez d'implanter votre quation partez de la sortie physique de votre PAL. Pour changer de champ d'application voici un exercice concernant l'arithmtique lmentaire.
Remarque : La PAL tant une 16X4, le schma ci-dessus est incomplet : il manque 6 sorties et aussi 24 fils verticaux (2 x 16 moins les 8 que l'on a). 1) La cellule de base d'un PAL destin l'arithmtique est donne ci-dessus. Reprer et exprimer les valeurs logiques des fils internes 8, 9, 10 et 11 en fonction de A1 et B1. A quoi sert I ? 2) On cherche utiliser ce genre de cellule pour raliser . On rappelle les quations de C1 et A1+ une addition 1 bit :
C1 = (A1 xor B1).C0 + A1.B1 A1+ = A1 xor B1 xor C0 En dduire les quations de S1= (sous forme de ou exclusifs et/ou fonctions identits) et de /C1 (sous forme
disjonctive). 3) Calculs intermdiaires : calculer les produits (fonctions ET logique) (8).(9), (9).(11), (9).(10), (8).(11), (8).(9).(11) et (8).(10).(11) et montrer qu'ils interviennent tous dans les quations prcdentes de S1 et de /C1. 4) Dessiner les fusibles non grills sur la figure ci-dessus. Nous allons maintenant nous intresser aux nouvelles catgories de composants programmables, ceux qui utilisent des cellules "versatiles" (configurables) et que l'on appelle parfois GAL.
La GAL 20V8
On prsente ci-dessous le schma partiel du circuit de la GAL 20V8 (24 broches dont 8 sorties configurables).
Brochage de la 20V8
On peut distinguer 13 entres vritables notes de I1 I13. Chaque sortie est note de I/O0 I/O7. La notation laisse penser, juste titre, que si l'on manque d'entre, on peut transformer des sorties en entres. Si vous n'avez pas d'horloge (en logique combinatoire par exemple), vous pouvez aussi utiliser la broche CLK/I0 en entre.
Dfinition On appelle cellule configurable, un cellule, c'est dire un ensemble de circuits, dont le fonctionnement est conditionn par des bits internes. Cet ensemble de circuits reprsente le schma interne de la cellule qui suffit, en gnral, expliquer son fonctionnement.
Chaque sortie est constitue par une cellule configurable l'aide de bits internes. Le schma de cette cellule configurable est donn ci-dessous :
On peut y distinguer des multiplexeurs, commands par les bits SG1 et SL0x (o x est le numro de la sortie correspondante), un ou exclusif command par un bit SL1x. L'objectif de ce ou exclusif est de complmenter ou pas la sortie du ou logique qui le prcde.
Dfinition On appelle bit global tout bit dont la deuxime lettre du nom est "G". On appelle bit local tout bit dont la deuxime lettre du nom est un "L".
Un bit global est forcment identique pour les 8 cellules configurables. Un bit local est dpendant de la macrocellule, et c'est pour cela qu'il est termin par un x. Pour terminer sur ce composant on donne un schma interne partiel o l'on reconnat ces cellules configurables :
''
Remarque : La PAL tant une 20V8, le schma ci-dessus est incomplet : il manque 4 sorties et aussi 16 fils verticaux (2 x 20 moins les 24 que l'on a).
La GAL 22V10
La GAL 22V10 est plus rcente que la 20V8. On pourrait penser que la cellule configurable de ce composant est plus complexe que celle de la 20V8, puisque plus moderne, mais il n'en est rien. Nous commenons par prsenter cette cellule configurable :
TD2 VHDL et logique programmable On distingue sur ce schma une simplification sur les entres du OU logique l'aide de pointills. Cela est d au fait que le nombre de ET logique arrivant sur le OU logique est variable suivant la cellule configurable : les broches 14 et 23 ont en 8, les broches 15 et 22 ont en 10, les broches 21 et 16 ont en 12, les broches 17 et 20 ont en 14 et enfin les broches 18 et 19 ont en 16. Le nombre de multiplexeurs a franchement diminu (en taille comme en nombre) ce qui facilite sa comprhension. Voici un exemple de composant 22V10 :
Remarque : La PAL tant une 22V10, le schma ci-dessus est incomplet : il manque 6 sorties et aussi 28 fils verticaux (2 x 22 moins les 16 que l'on a). Le schma interne complet est complexe et peut tre simplifi comme sur la figure ci-dessous :
10
Exercice 3
La polarit de chaque cellule configurable peut tre programme individuellement pour tre inverse ou non. D'autre part la sortie peut tre combinatoire ou squentielle. 1) Lequel des deux bits bits (S0 et S1) dtermine la polarit ? 2) Dessinez les quatre circuits quivalents la cellule configurable.
Les CPLD
Un CPLD peut tre dfini comme un assemblage de PLDs de type 22V10. Nous en donnons la structure ci-dessous :
11
Tous les "Logic Blocs" sont peu prs quivalents des PALs 22V10. Comme on peut le voir, ces PALs sont connectes par le bloc "Programmable Interconnect". Dans cette architecture une implantation ne ncessite pas de placements et routages mais seulement des interconnexions.
Les FPGA
Les FPGA sont des composants plus complexes encore que les CPLD. Nous allons examiner quelques unes de leurs particularits travers des exemples d'implantation.
Les LUTs
Les LUTs sont des lments importants des FPGA. Nous allons essayer de les manipuler en VHDL.
12
e2 e1 e0 s 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 b0 1 1 b1 0 1 b2 1 0 b3 0 1 b4 1 0 b5 0 1 b6 1 0 b7
Vous pouvez synthtiser la table de vrit l'aide d'un seul nombre sur 8 bits (poids faible en haut) : 1. en binaire ce nombre vaut : 0b01010110 2. en hexadcimal ce nombre vaut : 0x56 (not X"56" en VHDL) La valeur hexadcimale 56 (note X"56" en VHDL) est la valeur avec laquelle il faudra initialiser votre LUT avec un composant lut3. Pour 4 entres (ce qui est notre cas), on utilise une lut4 avec 4 chiffres hexadcimaux.
13
Exercice 4
Raliser le schma correspondant au "port map" de l'exemple ci-dessus dans le composant "transcodeur" (deux rectangles, un appel "transcodeur" et un appel "LUT4"). Complter ce schma avec d'ventuels pointills en montrant que sept LUTs seront ncessaires pour raliser le transcodeur complet. Raliser une table de vrit complte du dcodage demand. En dduire les 7 valeurs hexadcimales d'initialisation des LUTs. Raliser l'architecture complte de "transcodeur".
RAM et FPGA
La nomination de la mmoire dans un FPGA n'est pas trs simple : s'agit-il de RAM ou de ROM ? La documentation parle de RAM mais comme il est possible de l'initialiser lors de son criture en VHDL, on peut facilement l'utiliser comme une ROM. C'est naturellement ce que l'on fait lorsque l'on implante un processeur dans le FPGA pour lui donner un programme excuter (voir livre sur SOC (System on Chip)). Il est possible de raliser des protocoles pour charger cette mmoire partir des fichiers HEX (Intel) ou binaire comme ce sera dvelopp dans le chapitre Programmer in Situ et dboguer du livre prcdemment cit.
TD2 VHDL et logique programmable X"00900", X"02023", X"00102", X"04004", X"0030D", X"00302", X"00303", X"02137", X"00304", X"02341", X"00102", X"02433", X"02036", X"04040", X"08201", X"04002", X"00900", X"00301", X"04004", X"00301", X"00102", X"02500", X"02500", X"0400D"); X"08201", X"00301", X"02237", X"02500",
14
begin process (clk) begin if (clk'event and clk = '1') then if (en = '1') then data <= ROM(conv_integer(addr)); end if; end if; end process; end syn; Exercice 5 (spcifique Xilinx et carte Spartan3) Compteur sortie sept segments ralis avec une mmoire Nous allons utiliser un compteur normal, c'est dire qui compte en binaire sur 4 bits suivi d'une mmoire pour le transcodage pour l'affichage sur un afficheur sept segments. Dimensionner la ROM ncessaire votre problme. Calculer les valeurs hexadcimales contenues dans cette ROM. 1. Raliser un compteur 4 bits avec initialisation asynchrone. 2. Raliser un diviseur de frquence par 2**24 3. Assembler le tout Commentaires sur l'exercice 5 (spcifique Xilinx) Votre fichier rapport de compilation doit faire apparatre une ROM : dans "detailed reports" chercher "Synthesizing Unit <rams_21a>", et vous verrez :
WARNING:Xst:1781 - Signal <ROM> is used but never assigned. Tied to default value. Found 16x8-bit ROM for signal <$varindex0000> created at line 62. Found 8-bit register for signal <data>. Summary: inferred 1 ROM(s). inferred 8 D-type flip-flop(s). Unit <rams_21a> synthesized.
Malheureusement, le fait qu'il dtecte une ROM ce point n'est pas suffisant pour tre sr qu'il l'implante tel quel (je veux dire en BRAM). Si vous voulez forcer une BRAM donc, dans la fentre "Design", 1. 2. 3. 4. il faut bien cliquer bouton droit sur "Synthesize -XST". Mais ensuite il faut slectionner "Process properties" (et pas "design goals and strategies" ). L il faut slectionner "HDL options" dans la "fentre" "Category" . Et ensuite cocher "rom extract" et pour "rom style" slectionner "block".
On peut voir le rsultat en dmarrant PlanAhead (un exemple provenant d'un autre projet est montr ci-dessous) aprs le placement routage complet de l'application (avec un fichier de contraintes .UCF) depuis la mme fentre "Design" en dveloppant l'arborescence de "Place and Route" et en lanant "Analyze Timing / Floorplan Design (PlanAhead)".
15
Les blocs mmoires utiliss sont dessins en blanc. L'ensemble des blocs disponibles est reprsent par les 12 rectangles rouges dont la taille et le nombre dpendent trs fortement du type du FPGA utilis. Nous croyons qu'il est bon de s'habituer ce genre d'outil pour bien comprendre ce que l'on fait. Il existe mme des situations (pas trs frquentes) pour lesquelles l'utilisation de PlanAhead est quasiment obligatoire. Dans PlanAhead, on ne voit pas forcment le chevelu et les blocs utiliss par l'application. Il faut tre sur l'onglet "Device" et cliquer sur les 3 icnes (bande verticale d'icnes cot du dessin du circuit) "show/hide loc constraints" "show/hide bundle nets" et "show/hide I/O nets".
16
La RAM distribue
La RAM distribue est plus facile utiliser : il suffit de prendre l'exercice 5 sans choisir les options pour raliser une BRAM et c'est tout. Nous prsentons ci-dessous un exemple qui utilise de la ROM distribue.
Cet exemple provient d'un autre projet sur VHDL. On distingue encore les rectangles rouges reprsentant les BRAM non utiliss. L'ensemble des blocs utiliss se trouve encore en blanc et cet exemple montre bien pourquoi on appelle cela de la ROM distribue.
Rfrences
[1] http:/ / www. cypress. com/
17
Licence
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/