Changes between Version 2 and Version 3 of SoclibCourseTp1


Ignore:
Timestamp:
Aug 30, 2009, 12:29:03 PM (16 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp1

    v2 v3  
    1010L'objectif de ce premier TP est de vous amener à écrire vous-même, en utilisant le langage SystemC
    1111quelques  modèles de composants matériels très simples, en respectant le niveau d'abstraction CABA
    12 (Cycle Accuratesimula
     12(Cycle Accurate, Bit Accurate) utilisé pour modéliser les composants de la bibliothèque SoCLib.
     13Ce type de modélisation s'appuie sur la théorie des automates d'états synchrones communicants (CFSM),
     14et permet d'utiliser des technique d'ordonnancement statique permettant d'accélérer la simulation.
    1315
    1416= 1. Architecture à modéliser =
    1517
    16 L'architecture matérielle à modéliser réalise Elle ne comporte que deux composants matériels: Lgénérere premier
     18L'architecture matérielle à modéliser réalise Elle ne comporte que deux composants matériels: Le premier
    1719composant est un coprocesseur cablé (c'est à dire non programmable)
    1820qui calcule le PGCD (plus grand commun diviseur) de deux nombres entiers positifs A et B, codés sur 32 bits.
     
    2426Ces deux composants sont donc modélisés par deux automates cadencés par la même horloge CK, avec écriture dans les tous les registres du système sur le front montant de CK. Ils sont initialisés par le même signal  NRESET, actif à l'état bas.
    2527
    26 == 1.2 Composant fifo_lcd_coprocessor ==
     28== 1.1 Canal de communication FIFO ==
     29
     30== 1.2 Composant ''fifo_lcd_coprocessor'' ==
    2731
    2832L'algorithme de calcul du PGCD implanté par cet automate cablé peut être décrit par le code C suivant :
     
    5559[[Image( )]]
    5660
    57  * Dans l'état '''READ_OPA''' (resp. '''READ_OPB'''), on écrit dans le registre ''r_opa'' (resp ''r_opb'') la valeur ''p_in.data''
    58 lue sur le port FIFO d'entrée ''p_in.data''. On ne sort de cet état que si la donnée est valide (condition ''p_in.rok'' = true).
     61Outre le registre d'état de l'automate ''r_fsm'', cet automate contrôle donc deux autres registres ''r_opa" et ''r_opb''
     62utilisés pour le calcul :
     63 * Dans l'état '''READ_OPA''' (resp. '''READ_OPB'''), on écrit dans le registre ''r_opa'' (resp ''r_opb'') la valeur de l'opérande OPA (resp. OPB) lue sur le port FIFO d'entrée (champs ''p_in.data''). On ne sort de cet état que si la donnée est valide (condition ''p_in.rok'' = true).
    5964 * Dans l'état '''WRITE_RES''', on écrit le contenu du registre ''r_opa'' sur le port FIFO de sortie ''p_out.data''. On ne sort de cet état que si la donnée est acceptée (condition ''p_out.wok"" = true).
    6065 * Dans l'état COMPARE, on effectue la comparaison entre les contenus des registres ''r_opa'' et ''r_opb''. On n'écrit pas dans les registres ''r_opa'' et ''r_opb'', mais conditions de sortie dépendent du résultatde la comparaison.
    61  * Dans l'état DECR_A''' (resp. '''DECR_B'''), on écrit le dans le registre ''r_opa'' (resp. 'r_opb''). On ne reste qu'un cycle dans les états DECR_A et DECR_B, puisque cette opération ne dépend d'aucune condition extérieure.
     66 * Dans l'état '''DECR_A''' (resp. '''DECR_B'''), on écrit le dans le registre ''r_opa'' (resp. 'r_opb''). On ne reste qu'un cycle dans les états DECR_A et DECR_B, puisque cette opération ne dépend d'aucune condition extérieure.
    6267
    63  == 1.3 Composant ''fifo_lcd_master ==
     68 == 1.3 Composant ''fifo_lcd_master'' ==
    6469
    65 Ce composant matériel est chargé de générer aléatoirement les deux opérandes
     70Ce composant matériel effectue le travail normalement effectué par un processeur programmable, consistant à générer les valeurs des deux opérandes, à transmettre ces valeurs d'entrée au coprocesseur, à récupérer le résultat calculé par le coprocesseur, et à afficher ce résultat sur un terminal. L'utilisation de processeurs programmables suppose qu'on est capable de déployer le code binaire exécutable par le processeur programmable sur l'architecture matérielle simulée.
     71Ce problème sera traité dans la suite de ce cours, mais dans ce premier TP, on se contente d'utiliser un ''processeur cablé'', qui exécute en boucle le programme suivant:
     72 1. génération  (pseudo-aléatoire) de deux valeurs OPA et OPB.
     73 1. écriture de l'opérande OPA sur son port FIFO de sortie.
     74 1. écriture de l'opérande OPB sur son port FIFO de sortie
     75 1. lecture du du résultat sur son port FIFO d'entrée.
     76 1. affichage des valers sur le terminal.
     77Pour modéliser la génération aléatoire, on utilise la fonction ''rand()'' fournie par la LibC de la station de travail
     78qui exécute la simulation. On génère évidemment des valeurs aléatoires différentes à chaque itération de la boucle,
     79mais pour faciliter le deboguage, on garantit un fonctionnement reproductible, en contrôlant la valeur initiale du générateur aléatoire grace à la fonction ''srand()'' utilisée dans le constructeur du modèle.
     80
     81Le composant ''fifo_lcd_master''est donc un composant matériel paramètrable (un paramètre permettant de contrôler
     82la séquence de valeurs aléatoires), modélisé comme un automate à 5 états :
     83
     84[[Image( )]]
     85
     86Outre le registre d'état de l'automate ''r_fsm'', cet automate contrôle quatre autres registres : les registres ''r_opa'', ''r_opb'', et ''r_res'' permettent de stocker respectivement  les deux opérandes et le résultat du calcul. Le registre
     87''r_cyclecount'' est incrémenté à chaque cycle, e permet de gérer une date (en nombre de cycles) depuis l'initialisation
     88du système.
     89 * dans l'état '''RANDOM''' on écrit les valeurs pseudo-aléatoires OPA et OPB dans les registres ''r_opa'' et ''r_opb''. On ne reste q'un cycle dans cet état.
     90 * dans l'état '''WRITE_OPA''' (resp. '''WRITE_OPB''') on écrit le contenu du registre ''r_opa'' (resp ''r_opb'') sur le port FIFO de sortie (champs ''p_out.data''). On ne sort de ces états que si la donnée est acceptée (condition ''p_out.wok'' = true).
     91 * dans l'état '''READ_RES''', on écrit dans le registre ''r_res'' la valeur lue sur le port FIFO d'entrée (champs ''p_in.data''). On ne sort de cet état que si la donnée lue est valide (condition ''p_in.rok'' = true).
     92 * Dans l'état '''DISPLAY''', on ne modifie pas le contenu des registres ''r_opa'', ''r_opb'', et ''r_res'', mais on affiche la date
     93courante ainsi que les valeurs des opérandes et du résultat sur le terminal standard de la station de travail qui exécute la simulation. On ne reste qu'un cycle dans cet état.
     94
     95= 2. Travail à réaliser =
     96
     97== 2.1 ==
     98
     99== 2.2 ==
     100
     101== 2.3 ==