Projet système digital de L3: tuto faire un processeur
  • C++ 78.6%
  • OCaml 17.6%
  • TeX 2.5%
  • Standard ML 0.5%
  • Makefile 0.4%
  • Other 0.3%
Find a file
2017-01-17 14:22:52 +01:00
as clean code 2017-01-16 07:20:38 +01:00
beamer image for beamer 2017-01-17 14:09:06 +01:00
clock changes 2017-01-16 21:32:26 +01:00
minijazz 7seg 2017-01-14 17:11:51 +01:00
mjblocks clean code 2017-01-16 07:20:38 +01:00
panda Replace shoots.ml 2017-01-11 18:26:51 +01:00
report added tex report 2017-01-17 14:22:52 +01:00
simulateur_netlist added beamer, and Ofast TO GO AS FAST AS POSSIBLE 2017-01-17 00:21:04 +01:00
build_all.sh changes 2017-01-16 21:32:26 +01:00
README.txt fixed set time + inlined quick mode 2017-01-16 14:38:25 +01:00

================================================================================
========================= PROJET SYSTÈME DIGITAL ===============================
================================================================================

Afin de compiler le projet il faut mener à bien la compilation dans l'ordre des
différentes sous parties du projet.

* minijazz: une version modifiée de minijazz a été utilisée. Elle autorise les
opérations binaires sur des nappes de fils.
 -> Compilation en tapant "ocamlbuild -use-menhir mjc.native" dans le dossier.

* mjblocks: contient la description en langage minijazz du processeur.

* as: assembleur transformant le jeu d'instructions en code binaire.
-> Compilation en tapant "make" dans le dossier.

* simulateur_netlist: prend en entrée une netlist issue de minijazz et la
compile afin de la simuler. (pour plus d'informations voir le readme du
simulateur.)
-> Compilation en tapant "make" dans le dossier.

* panda: compilateur d'un langage haut niveau dérivé du BASIC vers l'assembleur.
-> se compile avec ocamlbuild (non nécessaire pour la compilation de l'horloge)

* clock: contient le programme de l'horloge ainsi que le code de l'afficheur
digital à base de 7-segments.
-> Il faut au préalable compiler le processeur grâce à au script "build_proc.sh"
Important: l'afficheur utilise la bibliothèque SDL2 qui peut-être installée via
un gestionnaire de paquets.
(distributions Debian: sudo apt-get install libsdl2-dev)

Deux programmes sont disponibles:
 - clock_realtime.arm qui exécute l'horloge en temps réel synchronisé.
 - clock_quick.arm qui exécute l'horloge à la vitesse maximale possible.
Ils sont directement exécutables grâces aux scripts "execute.sh" et
"execute_quick.sh"

====
==== Pour compiler ses propres programmes ARM
====

La spécification du processeur a été modifiée pour avoir ses sorties dans
l'afficheur 7-segments. Cependant on peut modifier les paramètres de la
spécification Minijazz pour convenir à un usage plus général.

- Les valeurs en sortie texte peuvent être ajoutées comme des valeurs de sorties
standard en Minijazz et permettent d'afficher flags, registres..
- L'utilisation d'un 7-segment se fait en calculant une nappe de 7 bits et en
la spécifiant au simulateur. En effet le 3ème paramètre de compilateur_netlist
est la spécification de l'affichage, de la forme
"|variable1||variable2|\n|variable3|". Quand les modifications nécessaires sont
apportées à la spécification du processeur, on peut le compiler en exécutant
 -> cpp -P mjblocks/proco.mmj > clock/proc.mj
 -> minijazz/mjc.native clock/proc.mj
 -> simulateur_netlist/compilateur_netlist clock/proc.mj clock/proc.out "|x||y|"

Une fois le processeur compilé, il reste à lui donner un programme à exécuter:
- as/as.native est un programme qui convertis l'assembleur ARM en une série
d'instructions binaires. Attention: il faut utiliser le paramètre -b qui crée
le fichier dans le bon format pour le simulateur.
- une fois ce fichier obtenu, le placer dans le dossier du processeur.
- exécuter le tout en lançant ""./proc". 3 entrées sont ensuite demandées:
  -> le nom du programme compilé par l'assembleur
  -> le nom d'un fichier de ram (pour initialiser à la ram vide mettre "~")
  -> le nombre d'instructions à exécuter (-1 pour ne jamais s'arrêter)