Vous êtes sur la page 1sur 9

Laboratoire 1

Switches, Lights, et Multiplexers

Lobjectif de ce premier exercice est de prendre en main les notions dentit et darchitecture en VHDL. Nous mettrons ces notions en pratique par linterconnexion de priphriques simple dentres et de sorties (comme les SWitchs, les afcheurs 7 segments et les LED) du circuit FPGA. Part I La carte DE2 fournit 18 switchs relis aux pins notes SW170 , 18 LED rouges notes LEDR170 , utilises pour afcher des valeurs binaires. 8 LED vertes notes LEDG70 . 4 boutons poussoirs KEY30 . 8 afcheurs 7 segments HEX0 HEX7. La gure 1 montre un exemple simple de code VHDL utilisant les Switchs et afchant leur tat sur les LED. Laffectation des signaux est ralise ici bit bit mme si laffectation du tableau complet de SW sur LEDR peut galement tre ralis. LEDR(17) <= SW(17); LEDR(16) <= SW(16); ... LEDR(0) <= SW(0); Les noms donnes aux pins dentres/sorties sont xs dans un chier spcique la carte DE2, appel DE2_pin_assignments.qsf ou DE2_115_pin_assignments.qsf dans le cas des 2 cartes disponibles au dpartement SI de lUCP. Cest pourquoi vous devez utiliser exclusivement ces noms de priphriques dans votre code, moins de raliser votre propre chier .qsf. Ce chier prcise par exemple que le bit SW0 est connect au pin N25 du FPGA, LEDR0 sur le pin AE23 pour la carte DE2. Pour utiliser ces affectations de pins, vous devez donc au pralable les importer comme indiqu dans la gure .

Figure 1. DE2-70 Import Assignments window.

(Noter que Quartus II utilise des crochets [ ] pour les types tableaux, alors que la syntaxe VHDL utilise des parenthses ( ) ). 1

Figure 2. DE2-70 Advanced Import Settings window. LIBRARY ieee; USE ieee.std_logic_1164.all; - - Simple module that connects the SW switches to the LEDR lights ENTITY part1 IS PORT ( SW : IN STD_LOGIC_VECTOR(17 DOWNTO 0); LEDR : OUT STD_LOGIC_VECTOR(17 DOWNTO 0)); - - red LEDs END part1; ARCHITECTURE Behavior OF part1 IS BEGIN LEDR <= SW; END Behavior Figure 3. Code VHDL utilisant les priphriques des cartes DE2-series. Raliser les tapes suivants pour implmenter le code de la Figure 3. 1. Crer un nouveau projet Quartus II. Si vous utilisez la carte Altera DE2, slectionner le circuit Cyclone II EP2C35F672C6, Cyclone II EP2C70F896C6 pour la DE2-70 board, ou Cyclone IV EP4CE115F29C7 pour la DE2-115 board. 2. Crer une entit VHDL pour le code de la Figure 3. 3. Inclure dans le projet le pin assignments pour la carte correspondant aux DE2-series et compilez le projet. 4. Tlcharger le chier de conguration du FPGA sur la carte avec Tools-Programmer. Vrier le bon fonctionnement des priphriques. 2

Part II La Figure 4a montre une somme de produits qui implmente un circuit multiplexer 2 vers 1 avec une entre de slection s. Si s = 0 la sortie du mux m est gale lentre x, et si s = 1 la sortie est y . La partie b de la gure donne la table de vrit et la partie c montre le symbole reprsentant le circuit.
x m s y

a) Circuit
s s 0 1 m x y x y
0 1

b) Truth table

c) Symbol

Figure 4. Un multiplexer 2 vers 1.

Le comportement du multiplexer peut tre reprsent par le code VHDL suivant: m <= (NOT (s) AND x) OR (s AND y); A vous dcrire lentit VHDL dcrivant le circuit de la Figure 5a et qui utilise 8 affectations comme celle prcdente. Le circuit utilise 2 entres de 8 bits X et Y et produit la sortie de 8 bits M . Si s = 0 alors M = X , et si s = 1 alors M = Y . Nous appellerons ce circuit un multiplexeur 2 vers 1 de largeur 8. Son symbole est reprsent en Figure 5b, dans lequel X , Y , et M apparaissent comme des bus de 8 bits.

x7 y7

0 1

m7

x6 y6

0 1

m6

s
8 0 1 8 8

X Y

x0 y0

0 1

m0

a) Circuit

b) Symbol

Figure 5. Multiplexer 2 vers 1 de 8 bits.

Vous devez donc 1. Crer un nouveau projet Quartus II. 2. Ajouter le chier VHDL de description de ce circuit. Vous utiliserez les pins SW17 comme entre s, les switches SW70 comme entre X et SW158 comme entre Y . Connecter enn les entres SW aux LED rouges LEDR et la sortie M aux LED vertes LEDG70 . 3. Importer les pins assignments, comme dcrit prcdemment. 4. Compiler le projet. 5. Tlcharger et tester les fonctionnalits. Part III Aprs une slection de un parmi 2, nous considrons maintenant un circuit de slection dune sortie m parmi 5 entres u, v , w, x, et y . La partie a de la Figure 6 montre comme concevoir ce multiplexer 5 vers 1 en utilisant quatre mux 2-to-1. Le circuit utilise 3 bits de slection s2 s1 s0 et implmente la table de vrit de la Figure 6b. La gure 7 montre le rsultat attendu pour ce circuit en travaillant sur des mots de 3 bits. Vous utiliserez pour cela 3 instances du circuit de la gure 6a.

s2 s1 s0

u v

0 1

0 1

0 1

w x y

0 1

a) Circuit
s2 s1 s0 u v w x y

s2 s1 s0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1

m u v w x y y y y

000 001 010 011 100

b) Truth table

c) Symbol

Figure 6. A 5-to-1 multiplexer.

s2 s1 s0 U V W X Y
3 3 3 3 000 001 010 011 100 3

Figure 7. Multiplexer 5 vers 1 sur mots de 3 bits.

vous devez donc.

1. Crer un nouveau projet. 2. Crer une nouvelle entit VHDL. Les entres de slection seront relies aux switches SW1715 , les 15 switches restant SW140 seront relies de manire fournir au circuits les 5 entres de 3 bits U Y . Connecter tous les SW switches aux LEDR et la sortie M aux LEDG20 . 3. Inclure les pin assignments et compiler le projet. 4. Tlcharger le bitstream. Assurer vous que chaque entre de U Y peut tre slectionn vers M . Part IV Nous allons nous resservir de ces circuits prcdents pour dcoder les afcheurs 7 segments de la Figure 8. Chaque dcodeur dispose dune entre de 3 bits c2 c1 c0 . La Table 1 liste les caractres afchables en fonction de la valeur de c2 c1 c0 . Pour simplier le dcodeur seuls 4 caractres seront utiliss (plus le blank de code 100 111). Les 7 segments sont identis par un indice de 0 6 (cf. gure 8). Chaque segment est dit actif ltat bas (la valeur du signal est zro). Vous devez donc crire une entit VHDL qui active les 7 segments pour ce jeu de caractres.

0 c2 c1 c0 7-segment decoder 5 4 3 6 1 2

Figure 8. Un dcodeur 7-segments.

c2 c1 c0 000 001 010 011 100 101 110 111

Character H E L O

Table 1. Codes caractres. Vous devrez donc : 1. Crer un nouveau projet Quartus II. 2. Implmenter le dcodeur. Connecter c2 c1 c0 aux switches SW20 , et les sorties du dcodeur lafcheur HEX0. Chaque segment est not HEX00 , HEX01 , . . ., HEX06 , comme dans la Figure 8 et dans le code suivant : 6

HEX0 : OUT STD_LOGIC_VECTOR(0 TO 6); 3. Importer les pin assignments, compiler le projet. 4. Tlcharger et vrier le comportement. Part V Considrez le circuit de la Figure 9. Il utilise le multiplexeur 5 vers 1 prcdent pour choisir quelle commande activera le code caractre de lafcheur. Par exemple, chaque commande pourra commander un des 5 caractre H, E, L, O, et blank. Les codes correspondant (Table 1) seront positionnes sur SW140 , et le choix du caractre afcher se fera sur SW1715 . Une partie du code raliser est fournie en Figure 10. Ici, de manire illustrer les commandes dinstanciation du VHDL les parties III et IV sont utilises comme sous-circuits. tendre ce code pour utiliser 5 afcheurs au lieu dun seul. Notre but sera dafcher nimporte quel mot de 5 caractres de la Table 1, et de permettre la rotation de ces mots lorsque les switches SW1715 sont modis. Par exemple, si le mot afch est HELLO, alors votre circuit produira les patterns illustrs dans la Table 2.

SW 17 SW 16 SW 15 SW 14 12 SW 11 9 SW 8 6 SW 5 3 SW 2 0
3 3 3 3 000 001 010 011 100

0
3

7-segment decoder

5 4

1 2

Figure 9. Un circuit qui permet de slectionner et afcher un des 5 caractres.

LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY part5 IS PORT ( SW : IN HEX0 : OUT END part5;

STD_LOGIC_VECTOR(17 DOWNTO 0); STD_LOGIC_VECTOR(0 TO 6));

ARCHITECTURE Behavior OF part5 IS COMPONENT mux_3bit_5to1 PORT ( S, U, V, W, X, Y : IN STD_LOGIC_VECTOR(2 DOWNTO 0); M : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT; COMPONENT char_7seg PORT ( C : IN STD_LOGIC_VECTOR(2 DOWNTO 0); Display : OUT STD_LOGIC_VECTOR(0 TO 6)); END COMPONENT; SIGNAL M : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN M0: mux_3bit_5to1 PORT MAP (SW(17 DOWNTO 15), SW(14 DOWNTO 12), SW(11 DOWNTO 9), SW(8 DOWNTO 6), SW(5 DOWNTO 3), SW(2 DOWNTO 0), M); H0: char_7seg PORT MAP (M, HEX0); END Behavior; LIBRARY ieee; USE ieee.std_logic_1164.all; - - implements a 3-bit wide 5-to-1 multiplexer ENTITY mux_3bit_5to1 IS PORT ( S, U, V, W, X, Y : IN STD_LOGIC_VECTOR(2 DOWNTO 0); M : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END mux_3bit_5to1; ARCHITECTURE Behavior OF mux_3bit_5to1 IS . . . code not shown END Behavior; LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY char_7seg IS PORT ( C : IN Display : OUT END char_7seg;

STD_LOGIC_VECTOR(2 DOWNTO 0); STD_LOGIC_VECTOR(0 TO 6));

ARCHITECTURE Behavior OF char_7seg IS . . . code not shown END Behavior; Figure 10. code VHDL de la Figure 9.

SW17 SW16 SW15 000 001 010 011 100 H E L L O

Character pattern E L L O H L L O H E L O H E L O H E L L

Table 2. Rotation du mot HELLO sur les 5 afcheurs.

Raliser les tapes suivantes : 1. Crer un nouveau projet. 2. Coder votre entit VHDL de rotation. Connecter les switches SW1715 aux entres de slection de chacune des 5 instances du multiplexeur 5 vers 1 de 3 bits. Connecter SW140 chaque instance de multiplexeur pour raliser le schma dafchage reprsent dans la Table 2. Connecter les sorties des dcodeurs aux afcheurs 7-segment HEX4, HEX3, HEX2, HEX1, et HEX0. 3. Compiler. 4. Tlcharger et vrier le fonctionnement en positionnant les codes caractres sur SW140 puis en jouant sur SW1715 pour observer la rotation. Si vous avez termin, ajouter un compteur qui automatise la gnration des commandes SW1 7, SW1 6, SW1 5 pour la rotation des caractres.