Commit 331377f9 authored by Martin Pépin's avatar Martin Pépin
Browse files

Ajoute le rapport

parent 8dd59d96
*.pdf
*_build
test/*_sch.net
*.native
*.byte
*.swp
*.pdf
*.aux
*.bbl
*.blg
*.fdb_latexmk
*.fls
*.log
MD_SOURCES=$(wildcard *.md)
BUILD_DIR=_CPU_build
TEST_DIR=_test_build
SRC=$(wildcard cpu/src/*.mj)
......@@ -39,13 +38,10 @@ test: minijazz simulator pre_build
@echo "==> Running minijazz tests"
test/test_mj.sh
pdf: $(MD_SOURCES:.md=.pdf)
%.pdf: %.md
@echo "==> Trying to build $@ using pandoc"
@(pandoc -sS -t latex -o $@ $< 2>/dev/null && echo "Success") \
|| echo "Failed, read $< instead"
pdf:
@echo "==> Building RAPPORT.pdf"
cd rapport && make
cp rapport/RAPPORT.pdf .
clean:
rm -rf $(BUILD_DIR)
......@@ -55,6 +51,8 @@ clean:
fullclean: clean
rm -f *.pdf
rm -f RAPPORT.pdf
cd simulator && make clean
cd minijazz && make clean
cd cpu && make clean
cd rapport && make clean
% Simulateur de circuits
% Martin Pépin
% 7 novembre 2016
# Mode d'emploi
Le simulateur doit être compilé avec Ocamlbuild et Ocaml $4.03$. Ceci peut être
fait à l'aide de la commande `make` et le binaire généré s'appelle `simul.byte`.
Pour lancer lacer le simulateur sur un fichier `foo.net`, entrer la comamnde
./simul.byte foo.net
- L'option `-n <int>` permet de préciser le nombre de tours de boucle. Par
défaut le programme boucle à l'infini et on peut le quitter non-violemment
en envoyant le caractère fin de fichier : `Ctrl+D`.
- L'option `-print` permet de calculer seulement la netlist après ordonnancement
sans l'interpréter
# Choix techniques
## Structure du programme
1. On parse d'abord les entrées de l'utilisateur à l'aide de `Scanf`, on
vérifie au passage que les entrées sont bien formées.
2. On fait une première passe sur la liste des équations pour déterminer si la
RAM et la ROM sont utilisées et préparer la mémoire (cf plus bas).
3. On évalue les instructions.
4. On met à jour les registres.
5. On oublie les variables intermédiaires (cf plus bas)
## La mémoire
Tout ce qui est relatif à la mémoire est encapsulé dans le module
`Interpreter.Env`. Cela m'a permis de faire plusieurs changements
d'implémentation sans trop d'efforts au cours de l'écriture de l'interpréteur.
L'implémentation finale est la suivante :
### RAM et ROM
La RAM et la ROM sont des matrices dont les lignes sont les mots stockés en
mémoire. Lors de chaque accès, la taille de l'adresses mémoire fournie est
vérifiée puis transformées en entier (conversion binaire - décimal)
Le simulateur commence par lire une première fois toutes les instructions pour
savoir si la RAM et la ROM sont utilisées et instancier une matrice de la bonne
taille le cas échéant. À cette occasion on vérifie que les tailles des adresses
et des mots spécifiées par le programmes sont cohérentes entre elles pour ne
plus avoir à le faire plus tard.
### Variables
Les variables sont stockées dans une table de hachage, facile à gérer tout le
long du programme car mutable. À la fin de chaque tour de boucle, cette table
est vidée.
### Registres
Les registres sont aussi représentés par une table de hachage, ils sont mis à
jour à la fin de chaque tour de boucle avant la remise à zéro des variables.
Au premier tour de boucle, cette table est vide, on considère que toutes les
registres sont à `false` et on profite de ce premier passage pour remplir la
table des registres
all:
latexmk -pdf > /dev/null 2>&1
clean:
latexmk -c
rm -f *.bbl
This diff is collapsed.
@misc{ wiki-mips,
author = "Wikipedia",
title = "MIPS instruction set",
year = "2016",
howpublished = "\url{https://en.wikipedia.org/wiki/MIPS_instruction_set\#MIPS_assembly_language}",
note = "[accédée le 4 décembre 2016]"
}
@misc{ mars-syscall,
author = "Sanderson, Pete and Vollmar, Ken",
title = "MIPS syscall functions available in MARS",
howpublished = "\url{http://courses.missouristate.edu/KenVollmar/mars/Help/SyscallHelp.html}",
note = "[accédée le 9 décembre 2016]"
}
@book{patterson2013computer,
title={Computer organization and design: the hardware/software interface},
author={Patterson, David A and Hennessy, John L},
year={2013},
publisher={Newnes}
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment