Modélisation et Simulation de Systèmes sur Puce avec Soclib François Pêcheux Laboratoire LIP6/ASIM francois.pecheux@lip6.fr
Plan de la présentation Principes de SoCLib Interfaces normalisées Composants disponibles Un exemple de plate-forme Outils associés Conclusion
SocLib, les principes Résultat du travail collaboratif de 13 Laboratoires Nationaux et 6 partenaires industriels (dont ST et Thalès) Plate-forme labellisée par le CNRS en 2003 La coordination est assurée par le LIP6 Bibliothèque de modèles de composants Ecrits en SystemC Deux types de modèles (CABA et TLM/T) Interopérables (VCI) Performants (automates d’états synchrones) Open-source Conçue pour la modélisation et la simulation efficace de plate-formes multiprocesseurs à espace mémoire partagé. Conçue pour l’exploration architecturale
Niveaux d’abstraction Granularité du temps Modèles TLM/T Transaction : Plusieurs cycles 1 ordre De grandeur Modèles CABA Cycle d’horloge 1 ordre De grandeur Modèles RTL synthétisables (VHDL, Verilog) Delta Cycle
Interface normalisée : VCI (Virtual Component Interface) Séparer clairement (au niveau du matériel) la fonction de calcul de la fonction de communication. => réutilisation des composants matériels Supporter les architectures multi-processeurs => plusieurs dizaines de maîtres Conserver le paradigme de communication « espace d ’adressage partagé » : Un initiateur désigne sa cible par les bits de poids fort de l ’adresse et une case mémoire particulière par les bits de poids faible. => réutilisation des composants logiciels Fournir à chaque maître l’illusion qu ’il dispose d ’un canal de communication point à point avec chaque cible. => simplification du protocole d ’accès au « bus » Possibilité de mécanismes de communication autres que le bus. => bande passante « illimitée »
Envoi d’une commande VCI INITIATEUR VCI CIBLE VCI ADDRESS WDATA CMD ~90 fils BE EOP SRCID … CMDVAL CMDACK
Les FSMs correspondantes INITIATEUR VCI CIBLE VCI ADDRESS WDATA CMD BE EOP SRCID CMDACK=0 CMDVAL=0 … CMDACK=1 CMDVAL=1 CMDVAL CMDACK
Envoi d’une réponse VCI INITIATEUR VCI CIBLE VCI RDATA RERROR ~50 fils REOP RSRCID … RSPVAL=0 RSPACK=0 RSPVAL=1 RSPACK=1 RSPACK RSPVAL
Décodage d’adresse TABLE DES SEGMENTS CIBLE VCI (0) CIBLE VCI (1) ADDRESS WDATA CMD BE EOP SRCID … CMDVAL CMDACK ADDRESS WDATA CMD BE EOP SRCID … CMDVAL CMDACK INTERCONNECT VCI TABLE DES SEGMENTS ADDRESS WDATA CMD BE EOP SRCID … CMDVAL CMDACK INITIATEUR VCI
2 niveaux de routage CMD et RSP ADDRSIZE MSB LSB ADRESSE CMD SRCIDSIZE SRCID MSB SRCID LSB Indice de cluster Indice local RSP Indice de cluster Indice local segtable.setMSB(4); segtable.setLSB(3); segtable.addSegment(« seg », adrBase, segSize, idxCluster, idxTarget, segAttr);
VCI compliant on-chip interconnect CPU Icache Dcache VCI compliant on-chip interconnect Interrupt controller ROM RAM Timer FIFO interface Coprocessor … DSPIN to VCI router North South East West Local Notion de cluster
Ecriture sous forme d’automates d’états synchrones communiquants 1 modèle = 1 SC_METHOD transition(), appelée sur chaque front montant de l’horloge + 1 SC_METHOD genMoore(), appelée sur chaque front descendant de l’horloge N SC_METHOD genMealy(), sensibles aux entrées TRANSITION ETAT Fonction de MEALY Fonction de Moore S ’ S VCI favorise la réalisation d’automates de Moore N=0, ce qui accélère notablement la vitesse de simulation pour M composants transition() 1..M genMoore() 1..M
Modèles de composants disponibles Processeurs + caches MIPS R3000, soclib_multi_mips.h OpenRISC 1200, soclib_or1200.h Power PC Sparc V8 Réseau d’interconnexion VGMN (Virtual Generic Micro Network), soclib_vci_gmn.h Local crossbar, soclib_vci_local_crossbar.h DSPIN (présentation à suivre) Mémoire Multi-segments, soclib_vci_multiram.h Verrous, soclib_vci_ramlocks.h Interfaçage coprocesseur Soclib_vci_threader, soclib_vci_threader.h Soclib_vci_target_multififo, soclib_vci_target_multififo.h Périphériques d’entrées/sorties Terminal, soclib_vci_multitty.h Timer, soclib_vci_multitimer.h
Contrôleur de cache unifié PROCESSEUR MIPS R3000 SPARC V8 OPENRISC 1200 POWERPC 405 XCACHE Direct Mapped Write-Through Write Buffer REQ ADDRESS WDATA UNC CMD MISS BE INS EOP BERR SRCID … CMDVAL IRQ CMDACK REQ RDATA ADR REOP TYPE RERROR WDATA RSRCID MISS RSPVAL RDATA RSPACK BERR XCACHE VCI
Mémoire SoCLib Sources C de l’application gcc_x ld_x Cluster,Index « TEXT » : 0x00400000 SIZE : 0x00010000 Caché initSegmentExec() ADDRESS WDATA CMD BE « RESET » : 0xBFC00000 SIZE : 0x00010000 Caché EOP gcc_x SRCID … « DATA » : 0x10000000 SIZE : 0x00010000 Caché CMDVAL ld_x CMDACK RDATA REOP « TEXT » : 0x00400000 SIZE : 0x00010000 RERROR RSRCID « RESET » : 0xBFC00000 SIZE : 0x00010000 RSPVAL RSPACK « DATA » : 0x10000000 SIZE : 0x00010000 Cluster,Index Binaire exécutable, Sections BFD VCI TARGET
Entrées/sorties : Terminal SOCLIB_VCI_TTY ADDRESS WDATA Application X-Window CMD BE EOP Lecture caractère SRCID … CMDVAL CMDACK Pipe Unix RDATA REOP Ecriture caractère RERROR RSRCID RSPVAL RSPACK VCI TARGET
Un exemple : La plate-forme date04 TTY T I1 TTY T I2 TTY T I3 TTY T I4 MultiRAM 0 T I5 MultiRAM 1 T Micro-réseau I0 T0 Cache I+D I T T1 MIPS R3000 Cache I+D I T T2 MIPS R3000 Cache I+D I T T3 MIPS R3000 I7 Multi-Timer T I6 Locks T Cache I+D I T MIPS R3000 I
L’application embarquée en C de date04 it.c void SwitchOnIt(int it) { char s[10]; int i,ti; int *p=(int*)0xB0000000; /* Identify the active interrupt of highest priority */ for (i=0; i<8; i++) if (it&(1<<i)) break; switch (i) { ... case 2: /* It 0 */ uputs("timer interrupt",procnum()); ti=*(p+0); itoa(ti,s); uputs("Interrupt acknowledged at cycle :", procnum()); uputs(s,procnum()); uputs("",procnum()); *(p+3+(procnum()<<2))=0; // reset irq default: } main.c int main0(void) { int *p=(int*)0xB0000000; uputs("Hello from processor 0",procnum()); *(p+2)=10000; // Initalize timer *(p+1)=3; // Run timer while (1); return 0; } … int main3(void) int *p=(int*)0xB0000030; uputs("Hello from processor 3",procnum()); *(p+2)=13000; // Initalize timer and run
Exécution de la simulation
date04 : Les quatre terminaux
Outils associés SystemCass, Simulateur à ordonnancement statique, 7 fois plus rapide que SystemC SocView, Outil de mise au point des modèles et des plates-formes DSG, outil de génération automatique de plate-forme et de déploiement de l’application multi-thread « Serendipity », En cours de développement : Simulateur multi-niveaux d’abstraction : commutation «à chaud» entre simulation TLM/T et CABA.
DSG : Un exemple de cluster générique CPU Icache Dcache VCI compliant on-chip interconnect Interrupt controller ROM RAM Timer FIFO interface Coprocessor … N processors M rams Semaph
Conclusion Bibliothèque opérationnelle de modèles de composants Environnement, bibliothèque et outils disponibles sur http://soclib.lip6.fr Méthode simplifiée de déploiement d’une application logicielle parallèle sur une plate-forme matérielle générique par l’emploi de générateurs de systèmes Réalisation d’un CI système sur puce, AoC, s’appuyant sur les principes de SoCLib Point chaud : La conception d’un système embarqué opérationnel revient à trouver un placement optimal pour les threads de l’application embarquée sur les processeurs les canaux de communicationsur les bancs mémoire physique les coprocesseurs matériels dans l’espace mémoire partagé
Contacts dans l’équipe SoCLib du LIP6 Direction du projet SocLib, alain.greiner@lip6.fr Coordination, francois.pecheux@lip6.fr SystemCASS, richard.buchmann@lip6.fr MUTEK, franck.wajsburt@lip6.fr, pascal.gomez@lip6.fr Modélisation TLM/T, emmanuel.viaud@lip6.fr Déploiement de plates-formes, SoCView, wahid.bahroun@lip6.fr Processeur Réseau, daniela.genius@lip6.fr, etienne.faure@lip6.fr, Modèles Interconnect, herve.charlery@lip6.fr, laurent.mortiez@lip6.fr, Modèle Processeur Java, maxime.palus@lip6.fr Modèle Processeur Mips, pirouz.bazargan@lip6.fr, mathieu.rosiere@lip6.fr Micro-réseau DSPIN alain.greiner@lip6.fr, hamed.sheybanirad@lip6.fr Modèle Processeur test mounir.benabdenbi@lip6.fr, matthieu.tuna@lip6.fr