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

De Ensiwiki
Aller à : navigation, rechercher
(Messages d'erreur de G++ : SC_CURRENT_USER_MODULE)
(Messages d'erreur de G++)
Ligne 37 : Ligne 37 :
 
; <nowiki>error: `sc_time' has not been declared</nowiki>:
 
; <nowiki>error: `sc_time' has not been declared</nowiki>:
 
; <nowiki>error: expected class-name before ',' token</nowiki>:
 
; <nowiki>error: expected class-name before ',' token</nowiki>:
 +
; <nowiki>error: expected class-name before ‘{’ token</nowiki>:
 
Vous vouliez probablement dire <code>sc_core::sc_time</code> ou <code>sc_core::sc_module</code>(ou bien utiliser "<code>using namespace sc_core;</code>")
 
Vous vouliez probablement dire <code>sc_core::sc_time</code> ou <code>sc_core::sc_module</code>(ou bien utiliser "<code>using namespace sc_core;</code>")
  

Version du 16 octobre 2009 à 11:22

Sur le Kiosk

Ressources sur le web

FAQ sur l'utilisation de TLM/SystemC

Installer SystemC et TLM sur sa machine personnelle

Cf. la page Installer SystemC et TLM.

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 :

wget 'http://www-verimag.imag.fr/~moy/cours/tlm/code-rendezvous.tar.gz'
tar xzvf code-rendezvous.tar.gz
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)

Notre manière d'utiliser sc_signal n'est pas compatible avec les vérifications faites par SystemC en version 2.2, il faut faire export SC_SIGNAL_WRITE_CHECK=DISABLE pour la désactiver.

<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.