Le jeu sera décrit en Verilog sous la forme d’un module Squash
dans le fichier Squash.v
.
Il sera découpé en deux sous-modules :
SquashCore
sera chargé de gérer les données du jeu
indépendamment de leur apparence à l’écran.SquashDisplay
définira les caractéristiques visuelles des éléments
du jeu et pilotera la sortie VGA.Dans les fichiers Squash.v
, SquashCore.v
et SquashDisplay.v
,
ajoutez les déclarations de ports en respectant les indications ci-dessous :
La notion de module et les déclarations de ports sont expliqués dans la page Décrire et interconnecter des composants.
Squash
Port | Direction | Taille | Rôle |
---|---|---|---|
clk_i |
Entrée | 1 | Signal d’horloge à 100 MHz |
btn_left_i |
Entrée | 1 | État du bouton-poussoir gauche |
btn_center_i |
Entrée | 1 | État du bouton-poussoir droit |
btn_up_i |
Entrée | 1 | État du bouton-poussoir haut |
btn_down_i |
Entrée | 1 | État du bouton-poussoir bas |
vga_red_o |
Sortie | 4 | Composante rouge du pixel courant |
vga_green_o |
Sortie | 4 | Composante verte du pixel courant |
vga_blue_o |
Sortie | 4 | Composante bleue du pixel courant |
vga_hsync_n_o |
Sortie | 1 | Commande de synchronisation horizontale de l’écran |
vga_vsync_n_o |
Sortie | 1 | Commande de synchronisation verticale de l’écran |
SquashCore
Port | Direction | Taille | Rôle |
---|---|---|---|
clk_i |
Entrée | 1 | Signal d’horloge à 25 MHz |
reset_i |
Entrée | 1 | Commande de réinitialisation générale |
up_i |
Entrée | 1 | Commande de déplacement de la raquette vers le haut |
down_i |
Entrée | 1 | Commande de déplacement de la raquette vers le bas |
restart_i |
Entrée | 1 | Commande de démarrage d’une nouvelle partie |
ball_x_o |
Sortie | 10 | Coordonnée X de la balle |
ball_y_o |
Sortie | 9 | Coordonnée Y de la balle |
paddle_x_o |
Sortie | 10 | Coordonnée X de la raquette |
paddle_y_o |
Sortie | 9 | Coordonnée Y de la raquette |
game_over_o |
Sortie | 1 | Indicateur de défaite |
success_o |
Sortie | 1 | Indicateur de victoire |
SquashDisplay
Port | Direction | Taille | Rôle |
---|---|---|---|
clk_i |
Entrée | 1 | Signal d’horloge à 25 MHz |
ball_x_i |
Entrée | 10 | Coordonnée X de la balle |
ball_y_i |
Entrée | 9 | Coordonnée Y de la balle |
paddle_x_i |
Entrée | 10 | Coordonnée X de la raquette |
paddle_y_i |
Entrée | 9 | Coordonnée Y de la raquette |
game_over_i |
Entrée | 1 | Indicateur de défaite |
success_i |
Entrée | 1 | Indicateur de victoire |
vga_rgb_o |
Sortie | 3 | Couleur du pixel courant |
vga_hsync_n_o |
Sortie | 1 | Commande de synchronisation horizontale de l’écran |
vga_vsync_n_o |
Sortie | 1 | Commande de synchronisation verticale de l’écran |
Squash
Complétez le module Squash
avec les éléments suivants :
clk25
à 25 MHz, destiné aux modules SquashCore
et SquashDisplay.
SquashCore
.SquashDisplay
.vga_red_o
, vga_green_o
et vga_blue_o
en fonction de chaque bit de la sortie vga_rgb_o
de SquashDisplay
.
Par exemple, lorsque vga_rgb_o[2]
vaut 1, il faut mettre tous les bits de
vga_red_o
à 1.Sur le schéma, les petits carrés bleus correspondent à des signaux qui doivent
être déclarés en tant que wire
ou reg
selon le contexte.
Pour réaliser cette étape, vous devrez appliquer les notions suivantes :
Dans la console Tcl de Vivado, exécutez les commandes suivantes :
Squash
est le module principal à simuler :set_property top Squash [get_filesets sim_1]
launch_simulation
restart
add_force -repeat_every 10ns clk_i 0 0ns 1 5ns
run 200ns
close_sim -force