Lors de ce deuxième TP, nous allons prendre en main un HDL(Hardware Description Language ou Langage de description de matériel en français), celui du livre nand2tetris : https://www.nand2tetris.org/ . Cette première question servira à vous aider à setup tous les outils nécessaires pour les autres questions.
Pour commencer, vous devez télécharger les différentes ressources à l'adresse suivante : https://drive.google.com/open?id=1xZzcMIUETv3u3sdpM_oTJSTetpVee3KZ
Assurez-vous d'avoir Java installer sur votre ordinateur, si ce n'est pas le cas, vous pouvez trouver un lien de téléchargement ici : https://www.java.com/en/download/manual.jsp
Sous Ubuntu :
sudo apt install default-jdk sudo apt install default-jre
Vous pouvez ensuite lancer le programme nandtetris/tools/HardwareSimulator:
WINDOWS :
Vous pouvez simplement double-cliquer sur HardwareSimulator.
LINUX/MacOS :
Vous pouvez ouvrir un terminal et lancer la commande "bash HardwareSimulator.sh" depuis le dossier nand2tetris/tools.
Une fois le programme lancé, voilà à quoi ressemble la fenêtre
![https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_main.png](https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_main.png)
Pour comprendre comment fonctionne le logiciel, nous allons vous guider dans la réalisation et le testing d'une porte logique simple : la porte NOT.
Un circuit est décrit par un fichier avec l'extension .hdl, vous pouvez trouver par exemple le circuit Not dans le dossier projects/01/Not.hdl. Le contenu devrait ressembler à ceci :
/** * Not gate: * out = not in */ CHIP Not { IN in; OUT out; PARTS: // Put your code here: }
Pour le moment, il déclare un circuit appelé Not qui a un seul input: in et un seul output out. Afin d'implementer le circuit, il faut compléter la partie PARTS en liant l'input à l'output au moyen de portes NAND qui sont notre brique de base. Le circuit peut être écrit comme suis :
CHIP Not { //Le mot clef CHIP permet de définir un nouveau circuit IN in; //input du circuit OUT out; //output du circuit PARTS: //Description du circuit Nand(a=in, b=true, out=out); //Not(in) == NAND(in,true) //Les keywords true et false sont acceptés //Ici on utilise la porte Nand afin de construire la porte Not }
Pour vous assurer du bon fonctionnement de vos circuits, vous devrez effectuer des tests, ces derniers sont décrits dans des fichiers .tst, exemple Not.tst
//Ne vous préoccupez par de ceci pour le moment load Not.hdl, output-file Not.out, compare-to Not.cmp, output-list in%B3.1.3 out%B3.1.3; //On set la valeur de in à 0 et on vérifie que le circuit se comporte correctement set in 0, eval, output; //On set la valeur de in à 1 et on vérifie que le circuit se comporte correctement set in 1, eval, output;
Not.tst compare l'output du circuit à celui spécifié dans Not.cmp pour vérifier que le circuit est correct,
Not.cmp :
| in | out | | 0 | 1 | | 1 | 0 |
La suite de screenshot suivante décrit l'utilisation du logiciel,
on commence par load le chip,
![https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_loadchip.png](https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_loadchip.png)
on choisit le bon fichier,
![https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_selectChip.png](https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_selectChip.png)
on va maintenant loader le script de test,
![https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_loadscript.png](https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_loadscript.png)
le nom du test est Not.tst,
![https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_selectScript.png](https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_selectScript.png)
on run le script,
![https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_runScript.png](https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_runScript.png)
on vérifie que le test a réussi,
![https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_solution_is_correct.png](https://inginious.info.ucl.ac.be/course/LSINC1102/$common/TP2/HWS_solution_is_correct.png)