|
@@ -1,4 +1,7 @@
|
1
|
|
-
|
|
1
|
+# Projet Système Info
|
|
2
|
+### Yohan SIMARD - Arnaud VERGNET
|
|
3
|
+4IR A1 2020-2021
|
|
4
|
+
|
2
|
5
|
Ce dépôt inclut notre compilateur, un cross assembleur et le code VHDL de notre processeur.
|
3
|
6
|
|
4
|
7
|
## Fonctionnalités du parser
|
|
@@ -20,18 +23,8 @@ Toutes les fonctionnalités du parser sauf les boucles while (par manque de temp
|
20
|
23
|
- Pipeline à 5 étage
|
21
|
24
|
- Gestion des aléas si écriture puis lecture dans le même registre
|
22
|
25
|
|
23
|
|
-## Tests unitaires
|
24
|
|
-Nous avons écrit des tests unitaires pour la table des symboles, dans lesquels nous créons une table des symboles, ajoutons des éléments, et vérifions qu’ils sont bien présents après. Nous testons aussi les erreurs retournées par les fonctions.
|
25
|
|
-
|
26
|
|
-## Particularités de l’implémentation
|
27
|
|
-### Tables
|
28
|
|
-Toutes nos tables sont implémentées sous la forme de tableaux. Nous avons préféré cette approche plutôt que des listes chaînées car nous itérons souvent dessus, ce qui est très lent quand les données sont éparpillées dans la mémoire, comme dans le cas des listes chaînées.
|
29
|
|
-Ceci implique cependant que nous avons une taille maximum pour nos tables.
|
30
|
|
-
|
31
|
|
-###
|
32
|
|
-
|
33
|
26
|
## Installation
|
34
|
|
-Voici les commandes à entrer dans un terminal pour récupérer, compiler et exécuter le projet
|
|
27
|
+Voici les commandes à entrer dans un terminal pour récupérer, compiler et exécuter le projet:
|
35
|
28
|
```shell
|
36
|
29
|
# Clone le dépôt git avec les submodules
|
37
|
30
|
git clone --recurse-submodules https://git.etud.insa-toulouse.fr/ysimard/projet_systeme_info.git
|
|
@@ -55,24 +48,24 @@ En plus des fichiers `al.lex` et `as.y` classiques, ce projet contient plusieurs
|
55
|
48
|
|
56
|
49
|
#### Compilation et lancement
|
57
|
50
|
|
58
|
|
-Un `Makefile`est fourni pour compiler le projet, qui s’utilise comme suit:
|
|
51
|
+Un `Makefile` est fourni pour compiler le projet, qui s’utilise comme suit:
|
59
|
52
|
|
60
|
|
-Compiler le compilateur
|
|
53
|
+- Compiler le compilateur
|
61
|
54
|
```shell
|
62
|
55
|
make compilateur
|
63
|
56
|
```
|
64
|
|
-Compiler les tests unitaires
|
|
57
|
+- Compiler les tests unitaires
|
65
|
58
|
```shell
|
66
|
59
|
make test
|
67
|
60
|
```
|
68
|
|
-Nettoyer le projet
|
|
61
|
+- Nettoyer le projet
|
69
|
62
|
```shell
|
70
|
63
|
make clean
|
71
|
64
|
```
|
72
|
65
|
|
73
|
66
|
Une fois compilé, le compilateur s'exécute de la manière suivante (en remplaçant `INPUT_FILE` par le fichier `C` souhaité et `OUTPUT_FILE` par le fichier destination voulu):
|
74
|
67
|
```shell
|
75
|
|
-./compilateur OUTPUT_FILE < INPUT_FILE
|
|
68
|
+./compilateur [OUTPUT_FILE] < INPUT_FILE
|
76
|
69
|
```
|
77
|
70
|
|
78
|
71
|
Pour lancer les tests unitaires, exécuter la commande suivante:
|
|
@@ -80,11 +73,21 @@ Pour lancer les tests unitaires, exécuter la commande suivante:
|
80
|
73
|
./test
|
81
|
74
|
```
|
82
|
75
|
|
83
|
|
-Pour vérifier l’asembleur à l’aide de l’interpréteur, copier le contenu du fichier de sortie du compilateur dans le fichier `interpreter/input.txt`, compiler l’interpreteur à l’aide de la commande `make`, et executer la commande suivante:
|
|
76
|
+Pour vérifier le code assembleur à l’aide de l’interpréteur, copier le contenu du fichier de sortie du compilateur dans le fichier `interpreter/input.txt`, compiler l'interpréteur à l’aide de la commande `make`, et exécuter la commande suivante:
|
84
|
77
|
|
85
|
78
|
```shell
|
86
|
79
|
./interpreter < input.txt
|
87
|
80
|
```
|
|
81
|
+#### Particularités de l’implémentation
|
|
82
|
+##### Tables
|
|
83
|
+Toutes nos tables sont implémentées sous la forme de tableaux. Nous avons préféré cette approche plutôt que des listes chaînées car nous itérons souvent dessus, ce qui est très lent quand les données sont éparpillées dans la mémoire, comme dans le cas des listes chaînées.
|
|
84
|
+Ceci implique cependant que nous avons un nombre d’instructions et un nombre de symboles maximum.
|
|
85
|
+
|
|
86
|
+##### Tests unitaires
|
|
87
|
+Nous avons écrit des tests unitaires pour la table des symboles. Dans ces tests, nous créons une table des symboles, ajoutons des éléments, et vérifions qu’ils sont bien présents après. Nous testons aussi les erreurs retournées par les fonctions.
|
|
88
|
+
|
|
89
|
+##### Fonctions utilitaires
|
|
90
|
+Pour éviter d’avoir un fichier yacc trop imposant, nous avons créé un fichier `yacc_util.c` qui contient toutes les fonctions qui écrivent des instructions dans la table des instructions.
|
88
|
91
|
|
89
|
92
|
### Cross-assembleur (crossassembler-2000)
|
90
|
93
|
Le cross-assembleur a été écrit en majorité par Paul Faure. Nous l’avons simplement adapté pour notre compilateur et notre processeur.
|
|
@@ -100,4 +103,7 @@ Nettoyer le projet
|
100
|
103
|
make clean
|
101
|
104
|
```
|
102
|
105
|
|
|
106
|
+### Processeur (processor-2000)
|
|
107
|
+#### Simulation et tests
|
|
108
|
+Ouvrir le projet dans ISE et lancer la simulation. Le fichier `config_simu.wcfg` contient une configuration du simulateur qui permet de visualiser tous les signaux intéressants.
|
103
|
109
|
|