| 1 | {{{ |
| 2 | #!html |
| 3 | <h1>TP7 : Modélisation TLM-DT </h1> |
| 4 | }}} |
| 5 | [[PageOutline]] |
| 6 | |
| 7 | = 1 Objectifs = |
| 8 | |
| 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... |