Changes between Version 1 and Version 2 of SoclibCourseTp2


Ignore:
Timestamp:
Sep 5, 2009, 3:14:32 PM (16 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp2

    v1 v2  
    1010Pour des raisons d'inter-opérabilité, tous les composants matériels de la plate-forme de prototypage SoCLib
    1111respectent le protocole de communication VCI, qui a été présenté en cours. On va donc modifier les deux
    12 composants matériels du TP1, pour qu'ils utilisent des ports de communication VCI.
     12composants matériels du TP1, pour qu'ils utilisent des ports de communication VCI plutôt que des ports FIFO.
    1313Ceci va permettre d'interconnecter plusieurs composants ''initiateurs'' et plusieurs composants ''cibles''
    1414à travers un micro-réseau à commutation de paquets intégré sur puce.
     
    1616= 2. Architecture matérielle =
    1717
    18 L'architecture matérielle instancie deux composants matériels: Le premier
    19 composant est un coprocesseur cablé (c'est à dire non programmable)
     18L'architecture matérielle pour de ce second TP instancie également deux composants matériels qui possèdent des fonctionnalités identiques à celles des composants utilisés dans le premier TP, mais ces composants possèdent maintenant des ports de communication qui respectent le standard VCI/OCP. Le premier
     19composant est le coprocesseur cablé (c'est à dire non programmable)
    2020qui calcule le PGCD (plus grand commun diviseur) de deux nombres entiers positifs A et B, codés sur 32 bits.
    2121Le second composant est chargé de transmettre les valeurs des opérandes A et B au coprocesseur, et de récupérer
    2222le résultat. Ces deux composants matériels fonctionnent en parallèle, et communiquent entre eux par des canaux de communication de type FIFO.
    2323
    24 [[Image(soclib_tp1_fig1_archi.png)]]
    25 
    26 Conformément aux principes CFSM, ces deux composants sont donc modélisés par deux automates synchrones (c'est à dire cadencés par la même horloge CK). L'écriture dans les tous les registres du système se fait sur le front montant de CK. Ils sont initialisés par le même signal  RESETN, actif à l'état bas.
    27 
    28 == 2.1 Canal de communication FIFO ==
    29 
    30 Le canal de communication FIFO implante un protocole de communication très simple supportant le contrôle de flux.
    31 
    32 [[Image(soclib_tp1_fig2_fifo.png)]]
    33 
    34 Chacune des deux entités communicantes considère que son interlocuteur est une simple FIFO. Une FIFO est une mémoire double accès de type First-In-First-Out sans adressage explicite. Le producteur peut écrire dans la FIFO en activant le signal W. L'écriture est effective lorsque la FIFO n'est pas pleine (WOK peut être considéré comme un signal d'état signifiant FIFO non pleine). Le producteur peut lire une donnée dans la FIFO en activant le signal R. La lecture est effective lorsque la FIFO n'est pas vide
    35 (ROK peut être considéré comme un signal d'état signifiant FIFO non vide).
    36 
    37 Attention : Il n'y a donc pas de mécanisme de ''handshacking'' : le producteur n'a pas besoin de consulter la consommateur
    38 pour envoyer un ordre d'écriture (c'est à dire W = true). De même, le consommateur n'a pas besoin de consulter le producteur pour envoyer un ordre de lecture (c'est à dire R = true). Simplement, une donnée est effectivement transmise à chaque cycle où les deux  signaux WOK et ROK ont simultanément la valeur true.
    39 Ce protocole supporte un débit maximal d'une donnée par cycle, et permet à chacun des interlocuteurs d'interrompre la transmission quand il n'est pas prêt.
    40 
    41 Un des avantages de ce protocole est que les deux composants communicants se comportent tous les deux comme des automates de Moore :
    42 Il n'y a évidemment qu'un seul émetteur par signal, et la valeur des signaux échangés ne dépend que de l'état interne de l'émetteur.
    43 
    44 == 2.2 Composant ''fifo_lcd_coprocessor'' ==
     24[[Image(soclib_tp2_fig1_archi.png)]]
     25
     26== 2.1 Canal de communication VCI ==
     27
     28Le protocol de communication VCI permet de construire des architectures multi-processeurs implante un protocole de communication très simple supportant le contrôle de flux.
     29
     30La figure ci-dessous détaille les signaux utilisés par le protocole VCI.
     31
     32[[Image(soclib_tp2_fig2_fifo.png)]]
     33
     34La plupart des champs VCI on des largeurs paramètrables (en nombre de bits) :
     35 * le paramètre X définit le nombre de bits du champs ADDRESS. Les adresses VCI sont des adresses octets,
     36mails elles doivent  être alignées sur des frontières de mot.
     37 * le paramètre '''B''' définit le nombre d'octets d'un mot de donnée VCI. Ce paramètre définit le largeur des trois
     38champs WDATA, RDATA et BE.
     39 * le paramètre '''K''' définit le nombres de bits termettant de coder la longueur PLEN d'un paquet (en nombre d'octets).
     40La valeur PLEN  doit également être un multiple du paramètre B.
     41 * le paramètre '''S''' définit le nombre de bits du champs SRCID, qui permet de coder le numéro de l'initiateur
     42VCI qui a démarré la transaction. Ce paramètre définit donc le nombre maximum d'initiateurs dans le système.
     43 * Le paramètre '''E''' définit le nombre de bits permettant de coder le type d'erreur dans le champs RERROR
     44du paquet commande. La valeur 0 signifie "pas d'erreur".
     45 * Les deux paramètres '''T''' et '''P''' définissent le nombre de bits des deux champs TRDID et PKTID. Ces deux champs permettent d'étiqueter une commande VCI par une numéro de thread et/ou par un numéro de transaction. Ceci
     46permet à un même initiateur d'envoyer une commande ''n+1'' sans attendre d'avoir reçu la réponse à la commande ''n''.
     47
     48Bien sûr les valeurs de ces paramètres VCI doivent être les mêmes pour tous les composants matériels d'une même architecture.
     49
     50=== Modélisation ===
     51
     52Cette généricité des interfaces de communication VCI est évidemment une souplesse très utile,
     53mais elle crée une difficulté pour la modélisation des composants matériels, puisqu'ilfaut écrire des modèles de
     54simulation génériques, capable de s'adapter à différentes largeurs d'adresse ou de donnée.
     55On utilise pour cela la techique des ''templates'' du langage C++ : on regroupe toutes les valeurs de ces paramêtres dans un oblet C++ de type ''VciParams'', qui est utilisé comme paramètre ''template'' par tous les composants matériels
     56qui possèdent des ports de communication VCI.
     57
     58On définit également trois autres objets, qui facilitent l'écriture des modèles de simulation CABA :
     59 * l'objet ''VciSignals'' regroupe tous les signaux (commande et réponse) d'un canal VCI.
     60 * l'objet ''VciInitiator'' regroupe tous les ports utilisés par un initiateur VCI pour émettre une commande,
     61et recevoir la réponse.
     62 * l'objet ''VciTarget'' regroupe tous les ports utilisés par une cible VCI pour émettre une réponsee,
     63et recevoir une commande.
     64Ces trois objets utilisent évidemment un paramètre template de type ''VciParams''.
     65
     66== 2.2 Composant ''VciLcdCoprocessor'' ==
     67
     68Le composant ''!VciLcdCoprocessor'' se comporte comme un périphérique adressable qui doit être
     69modélisé comme une cible VCI. Il possède donc un seul port de type ''!VciTarget'', et 4 registres
     70(ou pseudo-registres) implantés dans l'espace addressable, qui peuvent donc - en principe - être
     71lus ou écrits par n'importe quel initiateur.
     72du sytème. Chacun de ces registres a une largeur de 4 octets. Par conséquent, le occupé par le périphérique
     73 segment de
    4574
    4675L'algorithme de calcul du PGCD implanté par cet automate cablé peut être décrit par le code C suivant :