Vous êtes sur la page 1sur 4

Institut Supérieur d'Informatique A.U.

2021 – 2022

TD N°2 : Chenillard à 8 leds sur écran VGA piloté par picoBlaze

I. Objectif

Ce TD a pour objectif d'utiliser le microcontrôleur embarqué picoBlaze afin d'afficher, sur un


écran VGA, un chenillard à 8 leds.

II. Description du fonctionnement

Une led (à afficher sur l'écran) consiste en un rectangle de pixels dont la couleur n'est pas
noire (voir TD1). Ce rectangle est caractérisé par sa position décrite par les valeurs x_rect et
y_rect et par ses dimensions décrites par les valeurs delta_x et delta_y. Dans le TD1, ces
valeurs ont été fixées dans la description VHDL. Dans ce TD, la valeur de x_rect est
déterminée et incrémentée par l'application à implémenter sur le picoBlaze (voir
implémentation logicielle) afin d'avoir l'effet d'un chenillard.

Figure 1 : Chenillard à 8 leds sur écran

On aligne toutes les leds à la même hauteur (elles ont la même valeur de y_rect à savoir
y_rect=200). Les leds ont des côtés de 32 pixels (delta_x=delta_y=32) et sont espacées les
unes des autres de 50 pixels. Le coin en haut à gauche de l'écran correspond aux
coordonnées(0,0) et le coin en bas à droite correspond aux coordonnées (639,479). La led n°0
sera la led à gauche de l'écran et la led n°7 sera la led à droite de l'écran. On suppose que la
led n°0 est placée à la position (x_rect=17, y_rect=200). Toutes les leds ont la même couleur
qui est choisie à travers trois switches.
L'architecture du système est donnée par la figure 2.

Le travail sera divisé en deux parties: la première partie est consacrée à l'implémentation
matérielle et la deuxième partie est consacrée à l'implémentation logicielle.
Institut Supérieur d'Informatique A.U. 2021 – 2022

Figure 2 : Architecture du système affichant un chenillard à 8 leds sur écran VGA piloté par
picoBlaze

III. Implémentation matérielle


Pour l'implémentation matérielle, on fera appel au contrôleur VGA qui a été développé dans
le TD1. Ce contrôleur, comme il a été conçu, permet d'afficher un rectangle de pixels d'une
couleur fixée par trois switches (8 couleurs possibles) de dimensions bien définies et à une
position bien déterminée de l'écran VGA de résolution 640 x 480.

Dans ce TD, seule la valeur x_rect du rectangle (led) est déterminée et communiquée par le
microcontrôleur picoBlaze (voir figure 2). Le picoBlaze et la mémoire associée (la mémoire
qui contient les instructions à exécuter doit être incluse dans l'architecture matérielle comme
le montre la figure 2.

Le décodeur permet de récupérer le LSB ou le MSB de la valeur x_rect (selon l'adresse sur le
port ID_port du picoblaze) et ce en mettant à '1' l'entrée enable du registre Reg_1 ou Reg_2.
Le bloc concat permet de faire la concaténation du LSB et des deux bits de poids faible du
MSB pour fournir un résultat sur 10 bits.

2
Institut Supérieur d'Informatique A.U. 2021 – 2022

1. Ecrire l'entité et l'architecture du décodeur.


2. Ecrire l'entité et l'architecture du registre sachant que l’entrée En est asynchrone.
3. Ecrire l'entité et l'architecture du système.

IV. Implémentation logicielle


L'application à implémenter dans le picoBlaze permet de :
- lire la valeur de delta_x sur le le port d'entrée d'adresse 02h,
- initialiser la valeur de x_rect (on doit utiliser deux registres pour la valeur de x_rect),
- envoyer la valeur courante sur les ports de sortie d'adresse:
00h : pour communiquer le LSB de x_rect
01h : pour communiquer le MSB de x_rect
- introduire un délai d'attende d'une demi-seconde entre deux valeurs successives (délai
d'affichage d'une led avant de passer à la led suivante). On rappelle que le signal d'horloge clk
est de fréquence 100MHz,
- calculer la nouvelle valeur de x_rect du led à afficher.

Le jeu d'instructions du picoBlaze (kcpsm3) est donné dans l'annexe 1.

4. Ecrire le code assembleur d'un sous-programme delai qui permet d'introduire un délai
d'attente d'une demi-seconde.

5. Ecrire le code assembleur du programme principal qui fait appel au sous-programme delai.

Annexe 1 : Ensemble d'instructions du picoBlaze KCPSM3

Program Control Group Arithmetic Group Logical Group Shift and Rotate Group

JUMP aaa ADD sX,kk LOAD sX,kk SR0 sX


JUMP Z,aaa ADDCY sX,kk AND sX,kk SR1 sX
JUMP NZ,aaa SUB sX,kk OR sX,kk SRX sX
JUMP C,aaa SUBCY sX,kk XOR sX,kk SRA sX
JUMP NC,aaa COMPARE sX,kk TEST sX,kk RR sX

CALL aaa ADD sX,sY LOAD sX,sY SL0 sX


CALL Z,aaa ADDCY sX,sY AND sX,sY SL1 sX
CALL NZ,aaa SUB sX,sY OR sX,sY SLX sX
CALL C,aaa SUBCY sX,sY XOR sX,sY SLA sX
CALL NC,aaa COMPARE sX,sY TEST sX,sY RL sX

RETURN Interrupt Group Storage Group Input/Output Group


RETURN Z
RETURN NZ ENABLE INTERRUPT STORE sX,ss INPUT sX,pp
RETURN C DISABLE INTERRUPT STORE sX,(sY) INPUT sX,(sY)
RETURN NC FETCH sX,ss OUTPUT sX,pp
RETURNI FETCH sX,(sY) OUTPUT sX,(sY)

3
Institut Supérieur d'Informatique A.U. 2021 – 2022

Annexe 2 : Déclaration du picoBlaze KCPSM3

Component kcpsm3
port( address : out std_logic_vector (9 downto 0);
instruction : in std_logic_vector (17 downto 0);
port_id : out std_logic_vector (7 downto 0);
write_strobe : out std_logic;
out_port : out std_logic_vector (7 downto 0);
read_strobe : out std_logic;
in_port : in std_logic_vector (7 downto 0);
interrupt : in stad_logic;
interrupt_a ck : out std_logic;
reset : in std_logic;
clk : in std_logic);
end component;

Vous aimerez peut-être aussi