}}}
[[PageOutline]]
= 1 Objectifs =
Le principal objectif de la modélisation TLM-DT est d'accélérer la vitesse de simulation du
prototype virtuel, au prix d'une légère perte de précision temporelle. Ce typte de modélisation est particulièrement important dans le cas d'architectures multi-processeurs complexes, et on va donc modéliser
en TLM-DT l'architecture quadri-clusters du TP5 dont le schéma est rappellé ci-dessous:
[[Image(soclib_tp6_multi.png)]]
= 2 Top-Cell TLM-DT =
Pour chaque composant matériel de la bibliothèque !SoCLib, il existe en principe deux modèles de simulation:
un modèle CABA (que vous connaissez délà), et un modèle de simulation TLM-DT.
Comme les communications entre composants en TLM-DT utilisent des appels de fonctions et non des
signaux, la top-cell décrivant l'architecture matérielle à simuler doit être modifiée.
Les prototypes des constructeurs TLM-DT ressemblent beaucoup aux prototypes des constructeurs CABA.
La principale différence est que les composants d'interconnexion ('''!VciVgmn''' et '''!VciLocalCrossbar''')
n'utilisent pas le paramètre template '''vci_param'''.
En principes les noms des ports sont identiques pour les modèles CABA et TLM-DT (même si le
mécanisme de communication est très différent. Prenez le temps de consulter la documentation
des composants [https://www.soclib.fr/trac/dev/wiki/Component/ ici]).
La modélisation TLM-DT correspondant à une représentation plus abstraite de l'architecture, on n'a pas besoin
de décrire précisément les largeurs des différentes nappes de fils de l'interface VCI. On se contente de préciser le type C++ utilisé pour véhiculer les adresses et les données :
{{{
typedef VciParams vci_param;
}}}
C'est la description de la connectique qui est la plus profondément modifiée :
La modélisation TLM-DT ne permet que des connexions point à point entre deux ports de deux composants
matériels : Pour connecter le port px du composant A au port py du composant B , on ne fait plus référence à un signal intermédiaire, et on écrit directement :
{{{
(A.px)(B.py);
}}}
ou de façon équivalente :
{{{
(B.py)(A.px);
}}}
Si un composant C possède un tableau de ports pz[i], il faut écrire :
{{{
(A.px)(*C.pz[i]);
}}}
Dans la modélisation CABA, les signaux CK et RESETN sont des signaux multi-points. Ces deux signaux
ne sont plus utilisés dans la modélisation TLM-DT. Tous les autres signaux sont des connexions bi-points,
qui s'expriment très simplement en TLM-DT... sauf les signaux connectées aux ports d'entrée IRQ[1] à IRQ[5]
des processeurs. En effet, seule l'enrée IRQ[0] est utilisée, et les 5 autres entrées doivent être connectées à un ''signal'' ayant la valeur '''false'''.
Pour modéliser un signal (ou plusieurs signaux) possédant une valeur constante false, on instancie dans chaque cluster un pseudo-composant matériel '''!VciBlackhole''' possédant le nombre de ports de sortie nécéssaires :
{{{
VciBlackhole > fake0("fake0", 5);
VciBlackhole > fake1("fake1", 5);
VciBlackhole > fake2("fake2", 5);
VciBlackhole > fake3("fake3", 5);
}}}
On connecte ensuite les ports '''p_socket[i]''' de ces pseudo-composants aux ports '''irq[i+1]''' des processeurs :
{{{
for( size_t n = 0 ; n <5 ; n++) (*mips0.p_irq[n+1])(*fake0.p_socket[n]);
for( size_t n = 0 ; n <5 ; n++) (*mips1.p_irq[n+1])(*fake1.p_socket[n]);
for( size_t n = 0 ; n <5 ; n++) (*mips2.p_irq[n+1])(*fake2.p_socket[n]);
for( size_t n = 0 ; n <5 ; n++) (*mips3.p_irq[n+1])(*fake3.p_socket[n]);
}}}
Il ne faut pas oublier d'inclure le fichier '''vci_blackhole.h''' dans la top-cell, et de compléter
le fichier '''tp6.desc''' en conséquence.
Enfin le lancement de la simulation se réduit à la ligne suivante :
{{{
sc_start();
}}}
= 3 Travail à réaliser =
Créez un répertoire TP6 pour ce TP, et placez-vous dans ce répertoire.
Modifiez la top-cell de l'architecture quadri-clusters du TP5, que vous renommerez '''tp6_top.cpp''', ainsi que le fichier
de description utilisé par soclib-cc, que vous renommerez '''tp6.desc'''.
Vous pouvez conserver sans modifications les différents fichiers définissant le code binaire du logiciel embarqué utilisés
(et validés) dans le TP5. Recopiez donc ces fichiers dans un sous-répertoire '''soft''', et regénérez le code binaire.
Générez le simulateur TLM-DT en utilisant soclib-cc, et lancez la simulation.
La modélisation TLMDT permet de réduire les temps de simulation, au prix d'une légère perte de précision temporelle.
Comparez la modélisation CABA et la modélisation TLMDT en simulant la méme application logicielle s'exécutant
pendant 10 millions de cycles sur la même architecture matériellemodélisée en CABA (TP5) et en TLMDT (TP6).
* Quelle est le rapport des temps de simulation CABA et TLMDT (temps de simulation mesurés en secondes) ?
* Quelle est la perte de précision (en pourcentage) ?
Pour évaluer la terte de précision, on comparera les dates des interruptions affichées par la simulation TLMDT (approximative)
aux dates affichées par la simulation CABA (exacte). Et on calculera l'erreur relative par rapport à la valeur de la période.
On pourra faire cette comparaison pour différentes valeurs de la période du timer.
= 4 Compte-rendu =
Il ne vous est pas demandé de compte-rendu pour ce TP, mais on vous demandera une démonstration de votre simulateur au début du TP de la semaine suivante...