wiki:SoclibCourseTp1

Version 2 (modified by alain, 16 years ago) (diff)

--

TP1: Modélisation CABA (Cycle Accurate Bit Accurate)

0. Objectif

L'objectif de ce premier TP est de vous amener à écrire vous-même, en utilisant le langage SystemC quelques modèles de composants matériels très simples, en respectant le niveau d'abstraction CABA (Cycle Accuratesimula

1. Architecture à modéliser

L'architecture matérielle à modéliser réalise Elle ne comporte que deux composants matériels: Lgénérere premier composant est un coprocesseur cablé (c'est à dire non programmable) qui calcule le PGCD (plus grand commun diviseur) de deux nombres entiers positifs A et B, codés sur 32 bits. Le second composant est chargé de transmettre les valeurs des opérandes A et B au coprocesseur, et de récupérer le résultat. Ces deux composants matériels fonctionnent en parallèle, et communiquent entre eux par des canaux de communication de type FIFO.

Ces 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.

1.2 Composant fifo_lcd_coprocessor

L'algorithme de calcul du PGCD implanté par cet automate cablé peut être décrit par le code C suivant :

uint32_t lcd( uint32_t opa, uint32_t opb)
{
    while (opa != opb )
        {
        if ( opa > opb ) opa = opa - opb;  
        if ( opa < opb ) opb = opb - opa 
        }
    return( opa );
}

Le chemin de donnée permettant de réaliser ce calcul doit donc comporter deux registres r_opa et r_opb pour stocker les valeurs opa et opb qui évoluent au cours du calcul, ainsi qu'un comparateur et un soustracteur sur 32 bits.

Par ailleurs l'automate cablé reçoit les deux valeurs des opérandes OPA et OPB sur son port FIFO d'entrée, et renvoie le résultat sur son port FIFO d'entrée.

Finalement, l'automate qui contrôle le composant "fifo_lcd_coprocesseur exécute un boucle infinie, dans laquelle il effectue successivement les 4 opérations suivantes:

  1. lecture de l'opérande A sur son port FIFO d'entrée
  2. lecture de l'opérande B sur son port FIFO d'entrée
  3. calcul effectif du PGCD
  4. écriture du résultat sur son port FIFO de sortie

Ces quatres opérations ont des durées d'exécution variables, puisque le nombre de cycles pour effectuer le calcul (étape 3) dépend de la valeur des opérandes, et que les opérations de communications (étapes 1, 2 ou 4) ont des durées qui dépendent de la disponibilité du composant fifo_lcd_master.

  • Dans l'état READ_OPA (resp. READ_OPB), on écrit dans le registre r_opa (resp r_opb) la valeur p_in.data

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).

  • 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).
  • 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.
  • 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.

1.3 Composant fifo_lcd_master

Ce composant matériel est chargé de générer aléatoirement les deux opérandes

Attachments (5)

Download all attachments as: .zip