Le processeur HoMade utilisé est la version 6. (Une version 7 existe, elle introduit en particulier la notion de Massively Parallel Processing on Demand.)
Une présentation du processeur HoMade existe également à cette adresse : http://www.lifl.fr/~dekeyser/Homade . Vous y trouverez des informations qui se mettent à jour au fur et à mesure des développements du processeur, en particulier sur les IPs mis à disposition ainsi que les évolutions entre les différentes versions du processeur HoMade. Vous pourrez/devrez ajouter, supprimer des IPs avant la synthèse mais il faudra que vos instructions machines le prennent en compte.
L’ensemble des TPs HoMade ont été testés sur la version ISE12.4 et sur VIVADO 2018.1. Dorénavant c'est la version VIVADO qui sera utilisée pour ces TPs. Le .zip du processeur peut être chargé depuis cette page (cf en bas de page). Cette année vous allez tester la V6 sur Basys3. La V5 est toujours disponible, les différences majeures sont la prise en compte d'interruptions pour les I/O. Une fois installé le fichier Basys3V6.zip et décompressé vous pouvez commencer les manipulations proposées.
Dans VIVADO, ouvrez le projet Basys3v6.xipr depuis votre dossier décompressé, puis vérifiez que le projet possède les bonnes propriétés.
Lancer la génération du bitstream...
On peut anticiper certaines questions pendant la synthèse du code par VIVADO qui risque de prendre quelques minutes.
Travaux à réaliser et à valider
Question 1 : Dans le bas de page, vous trouverez le fichier TP7.hmd, chargez-le dans un dossier voisin de Basys3V6 qui contiendra vos programmes et votre compilateur par la suite. Ce sont les codes binaires des instructions qui seront exécutées par HoMade maître et esclaves. Pour l'instant vous n'avez pas instancié d'esclave mais juste un maître! Pour en être persuadé il vous suffit de lire dans le fichier Hmaster.vhd les lignes :
----- salve
constant NX_SLAVE : integer := 0;
constant NY_SLAVE : integer := 0;
Le code pour les slaves est donc sans intérêt ici puisque aucun processeur ne l'exécutera.
Pour en revenir au fichier TP7_test.hmd, il est composé de mots de 64 bits codés sur des octets, le mot ffff_ffff_ffff_ffff indique la fin du programme binaire pour le maître puis pour les esclaves. La seconde partie sera utilisé pour le calcul parallèle sur les processeurs esclaves par la suite… Les codes de plusieurs IPs sont choisis par défaut car je les ai développés et instanciés dans le cœur HoMade pour vous.
Editeur Hexa
Il vous faudra un éditeur de texte hexa!!! voici quelques liens :
En vous aidant des deux fichiers homade_opcode.vhd et Ipcode.vhd ou du site web HoMade IP Library, décodez la suite des instructions qu’exécute ce programme. Précisez à quoi correspond le code A402 et comment peut-on modifier le programme pour n’accepter qu’un seul bouton parmi les 5 boutons de la carte Basys3. Il faudra sans doute retrouver l’IP qui traite cette instruction pour en comprendre le fonctionnement (entity IP_waitbt dans le fichier IPwaitBT1.vhd).
Vous allez également utiliser le simulateur de VIVADO pour ce programme. Le programme de simulation masterbench (visible dans la partie simulation du projet) intègre le programme de test dans un tableau appelé rom, il faut y recopier votre programme TP7_test.hmd 64 bits par 64 bits. Vous pourrez simuler tous vos programmes en changeant le contenu de ce tableau. Il faudra bien entendu respecter la syntaxe VHDL. Dans Run simulation lancez la simulation pour 5 us afin d'observer l'exécution du programme. Vous pouvez afficher la valeur des signaux out16 et ins, ces deux signaux sont accessibles dans la hiérarchie aux niveaux masterbench>HoMade>HCU_Master.
type rom_array is array (natural range <>) of std_logic_vector ( 63 downto 0 ) ;
constant rom : rom_array := (
-- Master code
x"0C00_0000_000C_FFFF", -- 0000
x"201F_A402_8804_8003", -- 0004
x"A002_03FB_1400_FFFF", -- 0008
x"1000_0000_0004_1C00", -- 000C
x"FFFF_FFFF_FFFF_FFFF", -- 0010
-- Slave code
x"1C00_FFFF_FFFF_FFFF", -- 0000
x"FFFF_FFFF_FFFF_FFFF" -- 0004
);
Figure 58 simulation du programme de test
Vous y retrouvez :
Le fichier binaire de votre programme doit être chargé (en binaire , pas en ascii) via la connexion USB/UART. Une fois chargé le programme s'exécute...
La commande cat TP7_test.hmd > /dev/ttyUSB0 ( ou sur un autre port USB...) déclenche ce chargement ...
Sous windows7 la commande TYPE TP7_test.hmd > COM4 fonctionne également dans une fenêtre de commande. ( choisir le bon port COM!! ), Sous windows , j'utilise Tera Term :il faut ouvrir une connexion sur le bon port série , puis envoyer le fichier xxx.hmd en cochant le bouton binaire.
Question 2 : vous allez vous inspirer du programme TP7.hmd fourni afin de construire un additionneur 16 bits non signés avec résultats tronqué sur 16 bits. Dans une boucle infinie, il faut saisir successivement deux nombres de 16 bits sur les switches, chaque saisie est validée par une pression d'un bouton. Vous faites la somme par déclenchement de l'IP addition puis le résultat sur 16 bits est envoyé à l’afficheur par l'IP_bufO qui utilise l'afficheur 7seg. Construire le fichier test2.hmd. Valider par simulation avec VIVADO, vous pourrez visualiser le résultat affiché sur out32 qui sert en sortie de Hmaster de transfert vers l'affichieur, puis par une exécution sur la carte.
Question 3 : en utilisant d’autres IPs disponibles dans votre implémentation de HoMade, proposez un additionneur sur mots de 16 bits non signé, résultats sur 17 bits. Même validation en affichant les 16 bits de poids faibles, et en allumant la LED0 en cas de retenue.