# Very High Speed Integrated Circuit Hardware Description Language/Travail pratique/TP 5

Nous allons dans ce dernier chapitre mettre en œuvre des processeurs softcore variés. Je ne pense pas qu’il y ait un intérêt particulier pour un étudiant de connaître tous les processeurs softcores présentés. Faites votre choix parmi le PicoBlaze, le PIC 16F84 et le ATMega8. Nous commençons par le PicoBlaze.

## Le PicoBlaze

Avant de débuter ce TP, essayez d'obtenir le fichier "kcpsm3.zip" chez Xilinx. Cela vous permettra d’avoir l'assembleur (sous Windows), et surtout le fichier kcpsm3.vhd qui décrit le PicoBlaze.
Nous allons commencer par une mise en œuvre du PicoBlaze sans nous occuper de la lecture d'un clavier PS/2. Le plus simple est donc d’utiliser les interrupteurs de la carte et les afficheurs sept segments.

### PicoBlaze sans clavier PS/2

On désire faire fonctionner le PicoBlaze pour réaliser l’affichage complet sur 8 bits et deux digits du TP 1.

#### Architecture

* Entrées : 8 bits en entrées correspondent à un PORT. Il vous faut donc partir de l'architecture à quatre PORTs présentée dans le cours et la simplifier pour en garder un seulement.
* Sorties : un port est nécessaire pour gérer les sept segments, un autre pour gérer la sélection des afficheurs.
Il est temps de présenter le schéma à implanter :
Dans ce schéma le démultiplexeur est responsable d'envoyer le signal write_strobe en fonction du bit de poids faible de port_id sur une de ses deux sorties. Les bascules D sont naturellement des registres 8 bits avec entrée de validation. Quelque chose comme :
devrait convenir.
* Le morceau de programme donné ci-dessus est une implantation sans composant, donc directement dans un process d'où la présence de signaux (que je note souvent avec le préfixe "s_"). Si vous utilisez des composants changez les noms de variables ci-dessus.
Le contenu de la mémoire programme à gauche de la figure vous est donné un peu plus loin dans ce document.

#### Programme

Pour simplifier le développement on vous donne le programme complet de gestion des afficheurs. Évidemment le PicoBlaze fonctionnant à 50 Mhz, il faut gérer des boucles d'attentes.
* La boucle d'attente présentée est relativement rapide avec une horloge à 50 Mhz, mais des tests ont montré le bon fonctionnement de ce programme. Pour une autre carte il faudrait éventuellement ralentir en faisant une double boucle ou en appelant plusieurs fois de suite le sous-programme "wait".
Un programme assembleur est ensuite assemblé pour donner un composant VHDL représentant le contenu de la ROM du PicoBlaze. Pour éviter la compilation aux étudiants dans un premier temps, je donne le contenu VHDL équivalent au programme adssembleur. Pour éviter de polluer cette page avec un long programme VHDL pas utile pour tout le monde, je met le programme correspondant dans une boîte déroulante :

#### Exercice

On vous demande de réaliser l'architecture globale utilisant le PicoBlaze, la mémoire les PORTs de sortie. En ce qui concerne le PORT d'entrée on se contentera de faire ce qu'on ne fait jamais, de relier directement les entrées au PORT d'entrée du PicoBlaze.
Comme indiqué dans l'exercice il est fortement déconseillé de relier des entrées asynchrones directement sur une architecture synchrone. Normalement il faut rajouter un registre en entrée. Dans le cadre de cette formation, on ne respectera pas cette règle pour cet exercice puisqu'on n'a pas l'intention de commercialiser ce montage.

### PicoBlaze et clavier

Nous allons maintenant interfacer le clavier du TP 3 à notre PicoBlaze. Nous allons nous intéresser à la version dans laquelle on a ajouté un registre d'affichage. Ce registre d'affichage constituera un port d'entrées. Un autre port d'entrée sera encore constitué par les interrupteurs. Ces interrupteurs doivent servir à naviguer dans la mémoire donnée du picoblaze. Le fonctionnement est donc le suivant :
* Pour chaque appui de touches sur le clavier une interruption est générée qui vient lire l'octet qui vient d’être lu pour le ranger en mémoire (après l'adresse 0x00F).
* La session d'acquisition étant terminée, il vous est possible de naviguer dans la mémoire donnée pour afficher les scancodes reçus : la navigation se fait en binaire avec les quatre interrupteurs.

#### Notre programme

Le programme est naturellement plus complexe que le précédent puisqu’il gère une interruption.

#### Exercice

Réaliser l'architecture complète.

## Le PIC 16F84 embarqué

* L'ensemble de ce chapitre n'a pas encore été testé. Ainsi le programme C donné ne comporte aucune erreur de syntaxe puisqu’il a été compilé mais peut comporter des erreurs sémantiques !!!
Un moyen de commencer avec un projet simple est d’utiliser le PIC 16F84 pour afficher sur deux afficheurs sept segments multiplexés. L'intérêt par rapport au PicoBlaze est que maintenant on peut travailler avec le langage C.

### Le PIC16F84 pour gérer des afficheurs sept segments

Notre objectif est assez modeste : afficher une donnée provenant de huit interrupteurs sur deux afficheurs sept segments en hexadécimal. Nous commençons par donner notre programme en C.

#### Le programme de départ en C

Nous avons choisi PORTA pour gérer les afficheurs et PORTB en entrée pour les interrupteurs et PORTB en sortie pour les afficheurs sept segments.
Les habitués aux processeurs physiques ne percevront pas de suite comment un même PORT (le PORTB) peut être utilisé à la fois en entrée et en sortie. Il me faut donc rappeler que notre cœur possède physiquement deux ports séparés, un pour les entrées et l'autre pour les sorties.
On rappelle qu'une fois le programme C compilé, on dispose d'un fichier .hex qui doit être transformer en VHDL avec l'utilitaire approprié.

#### Le fichier mémoire ROM

Si le fichier à convertir s’appelle demo16F84.hex on utilise la commande :
Le fichier progrom.vhd possède plus de 1000 lignes et il nous est donc impossible de le donner pour éviter aux utilisateurs la compilation. On va vous donner le fichier .hex, beaucoup plus compact :
    10001000840A0408503A03191528FF0A0319FE0A36
    1000200006287E088A007F0882001628031083169F
    1000300000300318013085008316FF3086008312DC
    100040000608D20052080F39D0005208D3000430FD
    100050000310D30CFF3E031D282853080F39D1008D
    1000600003108316003003180130860083125008F5
    10007000403E8313840000088600FE308500FF3078
    10008000DE2383125108403E83138400000886005B
    0C009000FD308500FF30DE231C28002816
    1007BC00D400073083168100031083120030031815
    1007CC0001308100E92B54080102031CEE2BEF2BA6
    1007DC00E92B080001344F34123406344C342434E1
    1007EC0020340F340034043408346034313442344F
    0407FC003034383429
    00000001FF

#### Le fichier RAM

Ce fichier a déjà été donné dans le chapitre Embarquer un PIC 16F84.

#### Le projet complet

À faire
| TP 4 | Autres projets pour ATMEL ATMega8 |