TP 1 SystemC - Portes logiques - Uuu.enseirb.fr
TP 1 SystemC - Portes logiques - Uuu.enseirb.fr
TP 1 SystemC - Portes logiques - Uuu.enseirb.fr
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>TP</strong>‐1 de <strong>SystemC</strong> : « <strong>Portes</strong> <strong>logiques</strong> » <br />
<br />
Bertrand LE GAL <br />
bertrand.legal@ims‐bordeaux.<strong>fr</strong> <br />
http://uuu.<strong>enseirb</strong>.<strong>fr</strong>/~legal/ <br />
<br />
<br />
<br />
Filière Electronique <br />
3ème année ‐ Option CSI <br />
2008 / 2009 <br />
Laboratoire IMS – UMR‐CNRS 5218 ENSEIRB ‐ Université de Bordeaux 1 <br />
351, cours de la Libération 33405 Talence ‐ France
2/6
1. INTRODUCTION<br />
L’objectif de ce premier <strong>TP</strong> est de vous permettre de prendre en main le langage <strong>SystemC</strong><br />
ainsi que le flot des outils nécessaires. Les exemples que nous allons manipulé lors de cette<br />
première séance sont volontairement simplistes mais vous permettront d’observer les<br />
phénomènes dont la compréhension est nécessaire par la suite.<br />
2. ECRITURES DES PORTES LOGIQUES ELEMENTAIRES<br />
Dans un premier temps afin de vous faire la main, vous allez commencer par modéliser<br />
l’ensemble des portes <strong>logiques</strong> suivantes : ET, OU, NON.<br />
⇒ Ecrivez les modèles <strong>SystemC</strong> correspondants.<br />
A<br />
B<br />
Porte_ET<br />
S<br />
A<br />
B<br />
Porte_OU<br />
S<br />
A<br />
A<br />
B<br />
Porte_NON Porte_OU Porte_ET<br />
S<br />
Figure : Schéma des portes <strong>logiques</strong> que vous devez modéliser.<br />
REMARQUE : Pour une plus grande simplicité d’écriture, ces portes seront décrites à l’aide de<br />
processus de type SC_METHOD.<br />
3. SIMULATION DES MODELES DE PORTE LOGIQUES<br />
Dans un second temps nous allons utiliser le moteur de simulation inclus dans les<br />
bibliothèques <strong>SystemC</strong> afin de vérifier le comportement de vos modèles.<br />
Afin de tester vos composants de manière pseudo-automatique, développez (à l’aide des<br />
exemples fournis dans le fascicule de cours) les composants générateurs et affichage<br />
permettant de générer des stimulus aléatoires et afficher les résultats obtenus comme cela est<br />
présenté ci-dessous.<br />
Générateur<br />
Générateur<br />
S<br />
S<br />
A<br />
B<br />
Composant<br />
S<br />
E<br />
Affichage<br />
Figure : Schéma des portes <strong>logiques</strong> que vous devez modéliser.<br />
⇒ Ecrivez les modèles « Générateur » et « Affichage ».<br />
⇒ Créez un fichier contenant les modèles à simuler ainsi que les liens les unissant.<br />
3/6
Remarque : les générateurs de données devront fournir dans votre modèle une nouvelle donnée<br />
toutes les 10ns secondes.<br />
⇒ Compilez le fichier à l’aide de g++ et exécutez le. Les résultats que vous observez sont ils<br />
cohérents ?<br />
Remarque : afin de générer des valeurs booléennes aléatoires uniformément réparties, vous pouvez<br />
utiliser : “(bool)(rand()%2)” et non “(bool)rand()” qui produirait environ une seule valeur “0” tous les<br />
2^32 tirages...<br />
4. OBSERVATION DES SIGNAUX<br />
Comme nous l’avons vu en cours, <strong>SystemC</strong> of<strong>fr</strong>e des possibilités afin de visualiser des signaux<br />
manipulés dans le modèle sous forme de chronogrammes. Dans le cadre de l’exemple<br />
présent, utiliser un tel affichage rendrait la vérification de vos composants plus facile…<br />
⇒ Recherchez dans le cours comment faire pour stocker les données sous forme de<br />
chronogrammes (dans un fichier). Modifiez vos fichiers en conséquence.<br />
⇒ Recompilez vos fichiers source et lancez une simulation de la porte logique XOR par<br />
exemple. Ouvrez le fichier VCD généré à l’aide de l’outil nommé GtkWave. et observer les<br />
signaux produits, sont ils corrects ?<br />
Remarque : Afin de lancer le visualisateur de signaux, il vous suffit de taper XXX dans un terminal.<br />
5. MODELISATION COMPORTEMENTALE (PORTE XOR)<br />
A partir de maintenant nous allons nous intéresser à l’impact du niveau de la description sur<br />
le temps de simulation. Cette partie doit vous permettre de prendre conscience que ces<br />
derniers augmentent de manière trop importante lorsque l’on rajoute des détails… Ce point<br />
important vous permettra de comprendre pourquoi dans les <strong>TP</strong> suivants nous axerons nos<br />
travaux (raffinement matériel) sur un composant et non sur l’ensemble d’un système.<br />
Afin de commencer cette étude, vous allez développer un modèle de porte de type XOR de<br />
manière similaire à celle déjà développées. Simulez ce nouveau modèle de composant à l’aide<br />
d’un « grand nombre » de simulations (100 ms).<br />
A<br />
B<br />
Porte_XOR<br />
S<br />
Figure : Schéma de la porte XOR que vous devez concevoir.<br />
⇒ Ecrivez le modèle de la porte XOR. Compiler votre modèle et simulez là afin de vérifier son<br />
fonctionnement.<br />
Remarque : Supprimer la génération des chronogrammes, cela créerait des fichiers de plusieurs<br />
centaines de Mo sur votre compte…<br />
4/6
⇒ Maintenant afin de mesurer le temps nécessaire à la simulation vous allez supprimer<br />
l’ensemble des sorties à l’écran (cout ou printf). Recompilez votre programme et lancez la<br />
simulation.<br />
Remarque : Pour mesurer le temps d'exécution de votre programme simulant le modèle vous pourrez<br />
utiliser la commande Unix nommée “time”. Cette dernière doit précéder le nom de votre programme<br />
dans un terminal : “time mon_programme”.<br />
6. ETAPE V. DESCRIPTION STRUCTURELLE (XOR)<br />
Vous allez maintenant développer une nouvelle description de la porte XOR (nommée<br />
XOR_Struc) basée non plus sur le comportement de la porte mais sur sa structure interne.<br />
Cette description structurelle sera basera sur les modèles de portes <strong>logiques</strong> que vous avez<br />
mis au point précédemment.<br />
La figure suivante vous rappelle la composition structurelle d’une porte XOR.<br />
NOT<br />
AND<br />
OR<br />
NOT<br />
AND<br />
Figure : Schéma de la porte XOR composée à l’aide des portes <strong>logiques</strong> de base.<br />
⇒ Développez ce nouveau modèle et mesurez son temps de simulation (pour une durée de<br />
simulation identique). Que pouvez vous en conclure ? Pourquoi ?<br />
7. INSERTION DES CONTRAINTES TEMPORELLES<br />
Maintenant nous allons modéliser le temps de traversé des différentes portes <strong>logiques</strong> que<br />
vous avez mis modélisées afin d’observer le comportement plus précis du système.<br />
Pour cela nous allons considérer que le temps de traversé des portes NON, ET et OU est de<br />
1ns alors que la porte XOR “comportementale” possédera un temps de traversé de 3ns.<br />
⇒ Transformez le code source de vos modèles afin d’intégrer ces délais.<br />
délai = 1ns<br />
délai = 1ns<br />
délai = 1ns<br />
A<br />
B<br />
Porte_ET<br />
S<br />
A<br />
B<br />
Porte_OU<br />
S<br />
A<br />
Porte_NON<br />
S<br />
Figure : Schéma des portes <strong>logiques</strong> et du temps de traversé associé.<br />
⇒ Simulez la porte XOR structurelle et vérifiez sont bon fonctionnement sur une trentaine de<br />
5/6
stimuli, corrigez votre modèle au besoin.<br />
⇒ Mesurez le temps nécessaire à la simulation. Comparez les résultats.<br />
⇒ Observer les signaux post-simulation (à l’aide de gtkwave par exemple). Quelles sont les<br />
différences observables ? Expliquez à quoi sont dues ces “différences” ?<br />
8. CONCLUSION<br />
Vous venez de terminer votre premier <strong>TP</strong> autour du langage <strong>SystemC</strong>. Vous devez<br />
maintenant comprendre que le temps de simulation d’un système complexe est « trop<br />
important » et qu’il est donc nécessaire de décrire précisément que certaines parties.<br />
Dans le même temps vous avez pu vous rendre compte dans la dernière question que la<br />
visualisation de signaux « non conformes » ne permet pas simplement d’identifier les causes<br />
d’un problème potentiel.<br />
Dans la prochaine séance nous étudierons les possibilités offertes par le langage afin de<br />
définir l’architecture d’un composant en fonction des contraintes système.<br />
6/6