Changes between Initial Version and Version 1 of MipsTp1


Ignore:
Timestamp:
Dec 16, 2009, 11:42:18 AM (14 years ago)
Author:
cobell
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MipsTp1

    v1 v1  
     1{{{
     2#!html
     3<h1> TP1 : Plate forme de simulation + Synthèse </h1>
     4}}}
     5
     6[[PageOutline]]
     7
     8= Introduction =
     9
     10Le but des 4 TPs est d'effectuer la conception physique d'un Mips R3000 pipeline.
     11
     12Vous devez appliquer la méthodologie vue dans les Tps de Tools.
     13
     14Vous avez à disposition une archive contenant l'ensemble des fichiers nécessaires aux TPs.
     15Pour décompresser cette archive, utilisez la commande suivante :
     16
     17{{{
     18> tar xjvf sources.tar.bz2
     19}}}
     20
     21Vous obtenez un répertoire sources contenant lui même six autres répertoires :
     22
     23    * '''asm''' : contient les programmes assembleurs qui seront exécutés sur la carte contenant le MIPS pour vérifier son fonctionnement.
     24    * '''design''' : contient les descriptions comportementales ou structurelles des différentes parties du MIPS, que vous devez utiliser pour écrire la description structurelle de l'ensemble du circuit (en python).
     25    * '''mips''' : contient un fichier comportemental décrivant le mips dans lequel le découpage chemin de données / partie contrôle n'est pas effectué.
     26    * '''misc''' : contient les fichiers utiles à la création de l'environnement de test du MIPS.
     27    * '''ram''' : contient les fichiers décrivant le fonctionnement de la ram.
     28    * '''test_mips''' : contient les fichiers de test.Le répertoire test_mips contient un script shell nommé test.sh vous permettant de lancer l'intégralité des tests sur votre MIPS.
     29
     30En récupérant les fichiers fournis, vous pouvez tester deux mises en oeuvre du MIPS à l'aide des commandes suivantes :
     31
     32{{{
     33> ./test.sh v1
     34}}}
     35
     36permet de lancer tous les tests en utilisant la description comportementale du mips (fichier dans le répertoire '''mips''').
     37
     38{{{
     39> ./test.sh v2
     40}}}
     41
     42permet de tester le découpage des parties contrôle et chemin de données (en comportemental) instanciées par une hiérarchie structurelle du coeur et du circuit complet (avec plots) (fichiers dans le répertoire '''design''').
     43
     44Notez bien que pour utiliser cette seconde commande vous devez au préalable avoir généré les fichiers mips_r3000_1m.vst et mips_r3000_1m_core.vst à l'aide du script '''gen_mips.py''' et du '''Makefile''' situés dans le répertoire '''design'''.
     45
     46Vous avez également à disposition la commande :
     47
     48{{{
     49> ./test.sh v3
     50}}}
     51
     52qui permettra de lancer tous les tests en utilisant tous les fichiers .vst générés une fois votre MIPS terminé.
     53
     54Notez que vous pouvez tout à fait compléter ce script de façon à tester des versions "intermédiaires", la partie controle en ''.vst'' et le chemin de données en ''.vbe'' par exemple pour tester l'étape d'aujourd'hui : la synthèse de la partie controle.
     55
     56= 1 Plate forme de simulation =
     57
     58  == 1.1 Les programmes assembleurs pour la plate forme de simulation ==
     59
     60Lors de la conception du processeur, à chaque étape, il faut vérifier que le résultat obtenu est conforme aux spécifications du processeur.
     61Une des vérifications qui doit être appliquée systématiquement est la vérification fonctionnelle.
     62Elle consiste à s'assurer que le circuit obtenu à cette étape de conception est toujours conforme à l'architecture du Mips.
     63Bien évidemment, cette vérification ne peut être que partielle.
     64
     65Pour vous aider dans cette tâche, un ensemble de programmes de test est fourni.
     66A priori, on peut imaginer qu'un programme de test consiste simplement à exécuter une instruction.
     67Puis, il suffit de vérifier à travers les patterns en affichant la valeur des registres visibles que l'instruction a été correctement exécutée.
     68Toutefois cette méthode est très pénible et nécessite l'intervention du concepteur pour valider la bonne exécution de chacune des instructions.
     69
     70Nous vous proposons une autre méthode.
     71Les programmes assembleur fournis sont écrits de telle manière qu'ils vérifient le résultat de l'exécution de l'instruction objet du test à travers une suite d'instructions.
     72A l'issue de ce test, le programme se branche à deux adresses différentes en fonction du résultat du test.
     73Dans chacune de ces branches une valeur différente est écrite en mémoire.
     74Un dispositif particulier sur la plateforme de simulation surveille les valeurs écrites en mémoire.
     75Lorsque ce dispositif voit l'écriture de la valeur qui signale l'exécution correcte du programme, il arrête la simulation et affiche un message qui indique que l'exécution s'est déroulée correctement.
     76A l'inverse l'écriture de la valeur qui dénote un dysfonctionnement déclenche l'arrêt de la simulation et un message indiquant la mauvaise exécution du programme est affiché.
     77
     78  == 1.2 Exemple ==
     79
     80{{{
     81  ###----------------------------------------------------------------###
     82  # file   : add000.u                                                  #
     83  # date   : Mar 26 1996                                               #
     84  # descr. : functional test for Mips R3000                            #
     85  ###----------------------------------------------------------------###
     86
     87                .text
     88
     89  ###--------------------------------------------------------###
     90  #   signed addition                                          #
     91  ###--------------------------------------------------------###
     92
     93good_val        .equ    0x01
     94bad_val         .equ    0x02
     95sim_addr        .equ    user_cntl_begin
     96
     97val1            .equ    0x0000000a
     98val2            .equ    0x00000002
     99
     100init:
     101
     102                li      r1 , val1
     103                li      r2 , val2
     104                add     r3 , r2 , r1
     105
     106                li      r5 , (val1 + val2)
     107                beq     r5 , r3 , good
     108                nop
     109
     110                j       bad
     111                nop
     112
     113  ###--------------------------------------------------------###
     114  #   signaling good / bad                                     #
     115  ###--------------------------------------------------------###
     116
     117good:
     118                li      r1 ,      sim_addr
     119                addiu   r2 , r0 , good_val
     120                j       end_loop
     121                nop
     122
     123bad:
     124                li      r1 ,      sim_addr
     125                addiu   r2 , r0 , bad_val
     126                j       end_loop
     127                nop
     128end_loop:
     129                sb      r2 , 0(r1 )
     130                j       end_loop
     131                nop
     132
     133                .end
     134}}}
     135
     136  == 1.3 L'assemblage des programme ==
     137
     138L'outil '''assembleur''' permet de générer une image mémoire à partir de fichiers écrits en assembleur.
     139Cet outil prend en entrée une liste de fichiers assembleur et le fichier '''ldscript''' et génère une image mémoire dans un fichier de sortie.
     140
     141{{{
     142> asm -set noreorder -ld <ldscript> -mips1 -o <fichier_image> <fichier_ass> …
     143}}}
     144
     145  == 1.4 La plateforme de simulation pour le processeur MIPS ==
     146
     147Une plateforme de simulation construite autour d'un processeur MIPS permet de simuler l'exécution d'un programme assembleur.
     148Outre le processeur Mips, cette plateforme comporte des bancs mémoires pour les instructions et les données, un terminal d'affichage, un dispositif de détection de fin de simulation et un décodeur d'adresses.
     149Le décodeur d'adresses sélectionne, en fonction de l'adresse émise par le processeur, le banc mémoire qui doit répondre au processeur ou bien le terminal d'affichage ou encore le dispositif qui arrête la simulation.
     150
     151Sur cette plateforme les bancs mémoires sont initialisés à partir de l'image mémoire obtenue par l'assemblage d'un programme assembleur.
     152Cette image doit se trouver dans le fichier '''ram.ini''' et ce fichier doit être placé dans le répertoire où la simulation est lancée.
     153
     154Le fichier de patterns nécessaire à la simulation est très simple.
     155En pratique, cette plateforme n'a que deux entrées : l'horloge et le signal de reset.
     156Pendant le premier cycle de simulation, le signal reset est actif (ce signal est actif à l'état bas) puis, il reste inactif pendant le reste de la simulation.
     157L'horloge est un signal périodique qui passe successivement de 0 à 1 et de 1 à 0.
     158
     159[[Image(simu.jpg, nolink)]]