README.md 3.36 KB
Newer Older
Martin Pépin's avatar
Martin Pépin committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Projet du cours de système digital 2016-2017


## HOWTO

La commande pour compiler le processeur est `make` il faut ensuite le lancer à
l'aide de `make run` (tourne dans le vide) ou 
`./run.sh _CPU_build/cpu.net <asm file>``<asm file>` désigne le code
assembleur à charger dans la ROM avant l'exécution.

### Compiler séparément les différentes parties

Voici la liste des commandes makefile disponibles :

- `make`, `make run` : cf ci dessus.
- `make simulator` : compile uniquement le simulateur.
- `make minijazz` : compile uniquement le compilateur minijazz.
- `make pre_build` assemble les sources minijazz en un seul fichier.
- `make test` : lance une batterie de tests, cf plus bas.
- `make pdf` : génère un pdf à partir de `RAPPORT.md` et `README.md` à l'aide de
  pandoc si pandoc est disponible. Ces fichiers sont lisibles tels quels à
  défaut.
- `make clean` : nettoie le dépôt des fichiers générés par `make` et
  `make test` uniquement.
- `make fullclean` : Nettoie tout le dépôt, y compris les fichiers générés par
  ocamlbuild et le pdfs.


---


## Structure du dépôt

- `simulator/` : les sources du simulateur.
    - Un parseur de netlist
    - Un parseur d'assembleur MIPS
    - L'ordonnancement et l'exécution du circuit
- `minijazz/` : le compilateur minijazz vers netlist.
- `cpu/` : le code minijazz du processeur lui même.
    - Les différentes parties du processeur sont sous `cpu/src/`. Le point
      d'entrée est dans le fichier `main.mj`.
    - Un script Ocaml qui assemble les différents morceaux du CPU en un seul
      fichier. Cf la section suivante.
- `test/` : des tests unitaires plus ou moins exhaustifs.

Les dossiers `_CPU_build/` et `_test_build/` sont générés automatiquement pour y
stocker les fichiers générés lors de la compilation.

Enfin, le script `run.sh` sert à lancer le simulateur sur un programme
assembleur donné en entrée. Usage : `run.sh <file.net> [<asm file>]`

## Système de build custom pour minijazz

Le script `cpu/pre_build.ml` sert à séparer le code du CPU en plusieurs fichiers
(dans `cpu/src/`). Ces fichiers doivent contenir sur leurs premières lignes la
liste des fichiers dont ils dépendent au format `require foo` (pour signifier
"dépend de `foo.mj`"). Le graphe de dépendance des différents morceaux de
circuit et ensuite construit et les fichiers sont concaténés dans le bon ordre. 

**Attention** : ce n'est **pas** un vrai système de module au sens où il n'y a
pas de namespace : si deux fichiers génèrent des blocs avec le même nom il y
aura conflit.


---


## Tests

Le dossier `test/` contient trois types de tests :

- Des fichiers `.net` pour tester le simulateur (utilisés lors de l'écriture du
  simulateur, plus utiles désormais).
- Des fichiers `.mj` avec pour chacun, des fichiers `.in` et `.out` qui
  correspondent respectivement à des entrées données au circuit à chaque cycle
  et les sorties attendues correspondantes. Le script `test_mj.sh` teste ces
  circuits un à un sur les entrées spécifiées et vérifie la sortie.
- Des fichiers assembleur. Actuellement le script `test_asm.sh` vérifie
  uniquement que les programmes sont chargés sans incident dans la ROM. À terme
  il faudrait que le CPU soit lancé sur ces programmes et qu'on vérifie que
  l'exécution se déroule correctement.

La commande `make test` permet de lancer tous les tests et d'afficher le
résultat.