Etape 5 : Enfin une séquence vidéo...

Pas de TAG pour cette étape.

 

0) Introduction

Cette dernière étape consiste à connecter le hps (Hard Processor System) du circuit FPGA à la matrice FPGA. Ainsi, les processeurs ARM du HPS pourront accéder au contrôleur de SDRAM de votre design et l'utiliser comme mémoire d'image (framebuffer). Nous avons mis en place un petit système Linux sur le HPS. Au démarrage il lance mplayer pour afficher une séquence vidéo via le framebuffer. 

L'essentiel du travail est donc d'adapter le module fpga afin d'une part de mettre le hps en place et d'autre part de le connecter à l'arbitre Wishbone à la place de la mire.

1) Mise à jour de l'environnement de travail

Placez-vous dans votre dépôt git personnel (cd)
Importez les code nécessaires à la mise en place du hps

  • git checkout master
  • git remote update
  • git merge projet_video/étape5

Vous disposez d'une part d'un nouveau sous-répertoire hps et de quelques nouveaux fichiers dans les répertoires existants.

2) Adaptation du module fpga

Le hps correspond à un nouveau module (hps.sv) qui sera instancié dans le module fpga et devra communiquer avec le monde extérieur.

  •  Il faut, tout d'abord modifier les entrées/sorties de fpga.sv de manière à ajouter les entrées sorties nécessaires au hps. Ajoutez simplement la ligne suivante en début de liste des entrées-sorties du module fpga.
 // Partie hps
           `include "HPS_IO.svh"

Le fichier HPS_IO.svh situé dans le répertoire fpga/src contient simplement une série de déclaration de signaux....

  • Supprimez ou commentez l'instanciation du module mire dans le module fpga
  • Ajoutez une instance d'un module hps_block qui remplacera le module mire:
hps_block hps0(.wshb_ifm(wshb_if_mire),.*) ;

La syntaxe proposée indique que l'instance hps0 est :

  • d'une part connectée au bus wishbone dédiée à la mire 
  • d'autre part connectée à tous les signaux ayant des noms identiques à ses I/O (.*). 

Cette dernière syntaxe permet de connecter le hps aux entrées sorties que nous avons ajouté.

3) Simulation

Attention, en l'état votre FPGA n'est plus simulable. Il n'est pas du ressort de cette UE de simuler les processeurs ARM exécutant du code...

4) Synthèse 

  • Éditez le fichier file_list.tcl. Ajoutez les lignes suivantes en entête de fichier:
# Ajout du hps
if {$enable_hps} {
  set_global_assignment -name QIP_FILE     ${TOPDIR}/hps/hps/synthesis/hps.qip
  set_global_assignment -name VERILOG_FILE ${TOPDIR}/hps/hps/synthesis/hps.v
  set_global_assignment -name SYSTEMVERILOG_FILE ${TOPDIR}/hps/src/hps_block.sv
}
  • Editez le fichier pins_assignment.tcl. Ajoutez les lignes suivantes en fin de fichier:
# Le HPS
source pins_assignment_hps.tcl

Enfin modifiez le drapeau enable_hps concernant l'usage du processeur ARM dans le fichier syn_DE1-Soc_quartus.tcl

# On utilise les processeurs ARM... ou non
set enable_hps 1

 

  • Relancez une synthèse complète, vous avez intéret à tout nettoyer avant de démarrer:
    • make clean
    • make syn

ATTENTION:

  • La synthèse est relativement longue, il ne faut pas s'inquiéter
  • Il y a beaucoup de Warnings, il ne faut pas s'inquiéter.

Si tout ce passe bien, programmez votre fpga (pas besoin de précharger quoi que ce soit)

  • make program

Si tout va bien, vous avez une vidéo...., sinon voir vos encadrants...