Modélisation TLM en SystemC

De Ensiwiki
Aller à : navigation, rechercher

Supports de cours (Git)

Les supports de cours (transparents, exemples de code, ...) sont disponibles sous la forme d'un dépôt Git. Le dépôt est hébergé sur github. Vous pouvez consulter le contenu en ligne à l'URL http://github.com/moy/cours-tlm

Pour récupérer l'ensemble des fichiers (à faire une fois, au début du cours) :

git clone https://github.com/moy/cours-tlm.git

(on peut aussi tenter git clone git://github.com/moy/cours-tlm.git mais ça ne marchera pas toujours sur le Wifi car le protocole git:// est filtré par le firewall d'eduroam et wifi-campus)

Pour récupérer la dernière version (le contenu évoluera au fur et à mesure du cours) :

git pull

Plus d'information sur Git : Git.

Pour utiliser Git entre vous (pour travailler à plusieurs sur vos TPs), voir la page : Dépôt Git partagé et dépôt en lecture seule.

Ressources sur le web

Anales d'examens

Des anales avec corrigés partiels sont disponibles dans le répertoire exam/ de l'archive Git.

FAQ sur l'utilisation de SystemC/TLM

Installer les outils sur une machine personnelle

  • Pour le TP2 : Bibliothèque X11 et en-têtes (libx11-dev sous Debian et Ubuntu)

Pour tester que l'installation est complète :

./TPs/test-install/test-install.sh

Utilisation de SystemC et TLM sur les machines de l'Ensimag

Les bibliothèques SystemC et TLM sont installées dans /matieres/5MMMTSP/tlm/. Pour les utiliser, faites simplement :

source /matieres/5MMMTSP/tlm/setup-ensimag.sh

ceci définira une variable $SYSTEMCROOT qui pointe sur le répertoire où SystemC et TLM sont installés, et place la chaine de cross-compilation MicroBlaze dans votre $PATH. Ces variables sont utilisées dans les Makefiles fournis pour les TPs et les exemples. Par exemple, pour compiler le petit exemple de rendez-vous (cours-tlm est un clone du dépôt Git du cours) :

cd cours-tlm
cd code/rendezvous/
source /matieres/5MMMTSP/tlm/setup-ensimag.sh
make
./run.x

Messages d'erreur de G++

error: `sc_time' has not been declared
error: expected class-name before ',' token
error: expected class-name before ‘{’ token
error: expected ‘)’ before ‘name’

Vous vouliez probablement dire sc_core::sc_time ou sc_core::sc_module(ou bien utiliser "using namespace sc_core;")

target_socket.h:66: error: ‘struct Memory’ has no member named ‘read’

Vous avez probablement déclaré la méthode read du mauvais type (attention, le moindre const compte !)

error: ‘SC_CURRENT_USER_MODULE’ has not been declared

Il manque la macro SC_HAS_PROCESS(nom-du-module) dans la déclaration du module.

Numéro de ligne incorrect dans les messages d'erreur

Il arrive, vraisemblablement à cause d'un bug de GCC, que les messages d'erreurs utilisent des numéros de ligne fantaisistes (par exemple, un numéro de ligne plus grand que le nombre de ligne du fichier). On peut contourner ce bug en ajoutant -no-internal-preprocessor aux CXXFLAGS dans le Makefile.

autre

Voir la page Les Erreurs de GCC. N'hésitez pas à ajouter d'autres messages ici.

Erreurs à l'exécution

Error: (E115) sc_signal<T> cannot have more than one driver: 
 signal `IRQ' (sc_signal)
 first driver `Generator1.compute' (sc_thread_process)
 second driver `LCDC.compute' (sc_thread_process)

Cette erreur arrive lorsque plusieurs composants tentent d'écrire sur le même sc_signal (dans le cas ci-dessus, un composant a levé un signal d'interruption, et le processeur, via une transaction sur le bus, va exécuter un morceau de code qui redescend le signal. Ce dernier morceau de code se trouve dans le composant LDCD, mais il est exécuté dans le contexte de Generator1, d'où l'erreur).

La solution est d'instancier le sc_signal comme ceci :

 sc_signal<bool,SC_MANY_WRITERS> irq_signal("IRQ");

pour autoriser explicitement cet accès.

<systemc.h> ou <systemc> ?

Certains programme utilisent

 #include <systemc.h>

d'autres

 #include <systemc>

En fait, systemc.h est la forme obsolète, qui fait à peu près la même chose que systemc-sans-le-point-h, mais aussi des using namespace ...; qui facilitent la vie, mais qui sont reconnus universellement comme étant une mauvaise pratique dans les fichiers .h.

Erreurs fréquentes dans les TPs

Indentation avec des mélanges de tabs et d'espaces

Cf. Écrire du code de qualité#tabs.

Trop de commentaires

cf. Écrire du code de qualité#commentaires.

Lignes trop longues

cf. Écrire du code de qualité#lignes-longues.