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 | 
SquashComplé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