Structure générale

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 :

Entrées/Sorties

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.

Module Squash

Entrées/sorties du module 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

Module SquashCore

Entrées/sorties du module 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

Module SquashDisplay

Entrées/sorties du module 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

Corps du module Squash

Complétez le module Squash avec les éléments suivants :

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.

Implémentation du module Squash

Afficher la légende des schémas.

Pour réaliser cette étape, vous devrez appliquer les notions suivantes :

Simuler le fonctionnement du diviseur de fréquence

Dans la console Tcl de Vivado, exécutez les commandes suivantes :

  1. Indiquer que le module Squash est le module principal à simuler :
set_property top Squash [get_filesets sim_1]
  1. Démarrer la simulation :
launch_simulation
restart
  1. Créer une horloge de fréquence 100 MHz (période 10 ns) :
add_force -repeat_every 10ns clk_i 0 0ns 1 5ns
  1. Simuler pendant 200 nanosecondes :
run 200ns
  1. Après avoir observé les chronogrammes, fermer la session de simulation :
close_sim -force