9 | | Le principal objectif de la modélisation TLM-DT (Trasaction Level Modeling with Distributed Time) |
10 | | est d'accélérer la vitesse de simulation du |
11 | | prototype virtuel, au prix d'une légère perte de précision temporelle. Cette accélération est |
12 | | particulièrement importante dans le cas d'architectures multi-processeurs comportant un |
13 | | grand nombre de processeurs, puisque |
14 | | le temps de simulation augmente proportionnellement au nombre de processeurs. |
15 | | |
16 | | Le but de ce TP est donc de modéliser, et de simuler en TLM-DT l'architecture quadri-clusters du TP5. |
17 | | |
18 | | = 2 Top-Cell TLM-DT = |
19 | | |
20 | | Pour chaque composant matériel de la bibliothèque SoCLib, il existe en principe deux modèles de simulation: |
21 | | un modèle CABA (que vous connaissez délà), et un modèle de simulation TLM-DT. |
22 | | |
23 | | Comme les communications entre composants en TLM-DT utilisent des appels de fonctions et non des |
24 | | signaux, l'écriture de la top-cell décrivant l'architecture matérielle est simplifiée. . |
25 | | |
26 | | Les prototypes des constructeurs TLM-DT ressemblent beaucoup aux prototypes des constructeurs CABA. |
27 | | La principale différence est que les composants d'interconnexion ('''!VciVgmn''' et '''!VciLocalCrossbar''') |
28 | | n'utilisent pas le paramètre template '''vci_param'''. |
29 | | En principes les noms des ports sont identiques pour les modèles CABA et TLM-DT (même si le |
30 | | mécanisme de communication est très différent. Prenez le temps de consulter la documentation |
31 | | des composants [https://www.soclib.fr/trac/dev/wiki/Component/ ici]). |
32 | | |
33 | | La modélisation TLM-DT correspondant à une représentation plus abstraite de l'architecture, on n'a pas besoin |
34 | | 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 : |
35 | | |
36 | | {{{ |
37 | | typedef VciParams<uint32_t, uint32_t> vci_param; |
38 | | }}} |
39 | | |
40 | | C'est la description de la connectique qui est la plus profondément modifiée : |
41 | | La modélisation TLM-DT ne permet que des connexions point à point entre deux ports de deux composants |
42 | | 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 : |
43 | | {{{ |
44 | | (A.px)(B.py); |
45 | | }}} |
46 | | ou de façon équivalente : |
47 | | {{{ |
48 | | (B.py)(A.px); |
49 | | }}} |
50 | | |
51 | | Si un composant C possède un vecteur de ports indexés, chaque élément pz[i] est en fait un pointeur sur un port, et il faut écrire : |
52 | | {{{ |
53 | | (A.px)(*C.pz[i]); |
54 | | }}} |
55 | | |
56 | | * Les signaux CK et RESETN des modèles CABA sont des signaux multi-points, mais ces deux signaux ne sont plus représentés explicitement dans la modélisation TLM-DT. |
57 | | * Les signaux VCI sont des connexions point-à-points, qui s'expriment très simplement en TLM-DT. |
58 | | * Les signaux correspondant à des lignes d'interruption sont également des signaux point-à-point. |
59 | | |
60 | | Tous les ports d'un module doivent être explicitement connectés. En CABA, les entrées inutilisées d'un composant sont généralement connectées à un même signal possédant la valeur constante ''false''. Dans l'architecture à 4 clusters qui nous intéresse, ceci concerne par exemple les ports IRQ[1] à IRQ[5] des |
61 | | processeurs MIPS, ou certaines entrées des composants ICU, puisque le vecteur d'interruption comporte 4 entrées (TIMER, TTY, IOC et DMA), mais les |
62 | | clusters 2 et 3 n'utilisent que deux ligne d'interruption (TIMER et TTY). |
63 | | clusters ne contiennent que |
64 | | |
65 | | Puisqu'en TLM-DT, les connexions multi-points sont interdites, , on instancie dans chaque cluster un pseudo-composant matériel '''!VciBlackhole''' possédant le nombre de ports nécéssaires pour connecter les ports inutilisés des composants processeurs et ICU: |
66 | | |
67 | | {{{ |
68 | | VciBlackhole<tlm::tlm_initiator_socket<> >* fake[4]; |
69 | | fake[0] = new VciBlackhole<tlm::tlm_initiator_socket<> >("fake_0", 6); |
70 | | fake[1] = new VciBlackhole<tlm::tlm_initiator_socket<> >("fake_1", 6); |
71 | | fake[2] = new VciBlackhole<tlm::tlm_initiator_socket<> >("fake_2", 7); |
72 | | fake[3] = new VciBlackhole<tlm::tlm_initiator_socket<> >("fake_3", 7); |
73 | | }}} |
74 | | |
75 | | Dans l'exemple ci-dessous, la variable ''fake'' est un tableau de 4 pointeurs. Chacun de ces pointeurs fake[i] pointe sur un module de type ''VciBlakhole'' possédant le nom ''fake_i'', et possédant soit 6 ports, soit 7 ports. |
76 | | On connecte ensuite ces ports '''p_socket[i]''' de ces pseudo-composants aux ports inutilisés du processeur ou de l'ICU: |
77 | | |
78 | | {{{ |
79 | | for( size_t n = 0 ; n <5 ; n++) (*mips0.p_irq[n+1])(*fake0.p_socket[n]); |
80 | | }}} |
81 | | |
82 | | Il ne faut pas oublier d'inclure le fichier '''vci_blackhole.h''' dans la top-cell, et de compléter le fichier de description de la top-cell en conséquence. |
83 | | |
84 | | Enfin le lancement de la simulation se réduit à la ligne suivante : |
85 | | {{{ |
86 | | sc_start(); |
87 | | }}} |
88 | | |
89 | | = 3 Travail à réaliser = |
90 | | |
91 | | Créez un répertoire TP7 pour ce TP, et placez-vous dans ce répertoire. |
92 | | |
93 | | Modifiez la top-cell de l'architecture quadri-clusters du TP5, que vous renommerez '''tp7_tlmdt_top.cpp''', ainsi que le fichier |
94 | | de description utilisé par soclib-cc, que vous renommerez '''tp7_tlmdt_top.desc'''. |
95 | | |
96 | | Vous pouvez conserver sans modifications les différents répertoires et fichiers définissant le code binaire du logiciel embarqué utilisés |
97 | | (et validés) dans le TP5. Recopiez donc ces répertoires dans le répertoire TP7, et regénérez le code binaire. |
98 | | |
99 | | Générez le simulateur TLM-DT en utilisant soclib-cc, et lancez la simulation. |
100 | | |
101 | | La modélisation TLMDT permet de réduire les temps de simulation, au prix d'une légère perte de précision temporelle. |
102 | | Comparez la modélisation CABA et la modélisation TLMDT en simulant la méme application logicielle s'exécutant |
103 | | pendant 10 millions de cycles sur la même architecture matériellemodélisée en CABA (TP5) et en TLMDT (TP6). |
104 | | * Quelle est le rapport des temps de simulation CABA et TLMDT (temps de simulation mesurés en secondes) ? |
105 | | * Quelle est la perte de précision (en pourcentage) ? |
106 | | Pour évaluer la terte de précision, on comparera les dates des interruptions affichées par la simulation TLMDT (approximative) |
107 | | aux dates affichées par la simulation CABA (exacte). Et on calculera l'erreur relative par rapport à la valeur de la période. |
108 | | On pourra faire cette comparaison pour différentes valeurs de la période du timer. |
109 | | |
110 | | = 4 Compte-rendu = |
111 | | |
112 | | 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... |