SOMMAIRE

 

1) GENERALITES 
1.1) Principe du projet
1.2) Caractéristiques
1.3) Ma vision du projet

2) HARDWARE
2.1) Carte de développement
2.2) Verilog, schéma global
2.3) Verilog, coeur CPU
2.4) Verilog, Vidéo VGA
2.5) Verilog, périphériques

3) OUTILS DEVELOPPEMENT SOFTWARE
3.1) Généralités
3.2) Langage A2Z Basic
3.3) Compilateur
3.4) Assembleur
3.5) Autres outils
3.6) Emulateur sur PC

4) LES LOGICIELS A2Z
4.1) Le Boot
4.2) Système fichier & OS
4.3) Editeur texte
4.4) Image viewer & map viewer
4.5) Le jeu : Micromachines

Blog (hackaday.io)

2.5) Verilog - Autres périphériques

Rom de Boot :
C’est en fait une RAM de 2ko interne au FPGA, qui contient initialement le programme Bootloader. C’est le premier périphérique que j’ai utilisé. C’est avec cette  RAM que j’ai codé les premiers programmes, sans aucun autre périphérique. L’outil « in system memory content editor » d’ALTERA permet d’écrire et de lire dans cette RAM à la volée, à la façon d’un « émulateur de RAM / EPROM ». Ca m’a permis de débugger les premiers programmes, en les exécutant dans cette RAM, et en leur faisant manipuler des données dans cette RAM.

Interface PS/2 :
Là encore, j’ai fait des erreurs, vu mon inexpérience, mais ça fonctionne. J’aurais pu coder quelque chose de beaucoup plus simple.
Remarque : comme le CPU ne sait pas gérer les interruptions (c’est volontaire pour simplifier le CPU), je suis obligé d’introduire une petite FIFO entre l’interface PS/2 et le CPU, pour être certain de ne rater aucune information issue du clavier.  
J’ai donc en sortie du PS/2 : 1 flag pour indiquer que la FIFO contient des données, et la lecture des données de la FIFO en elle-même.

Interface série :
Je n’ai pas d’interface série à proprement parler. Juste 2 bits d’entré et 2 bits de sortie du style GPIO. J’émule par logiciel l’interface série : c’est du bit-banging. Je n’ai codé que la partie RX, pour télécharger des données depuis le PC de développement vers A2Z.
Le choix du bit-banging est très discutable, il limite fortement le débit. Je ne peux pas dépasser 56kBauds, c’est quand même bien lent quand je veux charger 1Mo de donnée ou plus (j’ai du télécharger 6Mo pour Map Viewer). En hardware, j’aurais pu facilement faire 10 fois plus rapide.

Interface SPI :
L’interface SPI maitre sert (pour l’instant) uniquement à raccorder la mémoire Flash 16Mo externe au FPGA.
La configuration de l’interface est volontairement fixe, pour des raisons de simplification : les transferts se font sur obligatoirement sur 8 bits, et la fréquence est de 12.5MHz.
J’utilise naturellement 2 shift registers, un pour la lecture (MISO) un pour l’écriture (MOSI).
L’adresse mémoire est volontairement identique pour la lecture (MISO) et pour l’écriture (MOSI) sur le port SPI, même si les buffers sont  physiquement différents ; ça permet d’économiser des instructions de changement d’adresse dans le code exécutable, et donc d’accélérer le tout.
Chaque écriture du CPU vers le périphérique SPI déclenche une « transaction » de 8 bits automatiquement sur le port SPI sans autre intervention (ça réduit le nombre d’instructions nécessaires). Donc le shift register de lecture se remplit aussi à chaque transaction 8 bits.


F4HDK| Janvier 2017
f4hdk_arob_free.fr