Modélisation TLM en SystemC : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(Erreurs à l'exécution)
(Supports de cours (Git))
Ligne 11 : Ligne 11 :
 
  <nowiki>git clone http://github.com/moy/cours-tlm.git</nowiki>
 
  <nowiki>git clone http://github.com/moy/cours-tlm.git</nowiki>
  
(on peut aussi tenter <code>git clone git://github.com/moy/cours-tlm.git</code> mais ça ne marchera pas toujours sur le Wifi car le protocole git:// est filtré par le firewall)
+
(on peut aussi tenter <code>git clone git://github.com/moy/cours-tlm.git</code> 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 à
 
Pour récupérer la dernière version (le contenu évoluera au fur et à

Version du 29 novembre 2012 à 09:18

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 http://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 : Archive Git partagée et archive en lecture seule.

Ressources sur le web

FAQ sur l'utilisation de SystemC/TLM

Installer SystemC et TLM sur sa machine personnelle

Cf. la page Installer SystemC et TLM.

Installer la chaîne de cross-compilation MicroBlaze sur sa machine personnelle

Cf. la page Installer une chaine de cross-compilation MicroBlaze.

Utilisation de SystemC et TLM sur ensisun

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

source ~moy/tlm/setup-ensisun.sh

ceci définiera deux variables $SYSTEMCROOT et $TLMOSCI qui pointent sur les répertoires où SystemC et TLM sont installés. 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 ~moy/tlm/setup-ensisun.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

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.

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.