IMA3/IMA4 2021/2023 P2
Sommaire
Résumé
Le projet consiste à réaliser une bibliothèque logicielle pour la simulation d'un circuit logique. Il est destiné à la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur.
D'un point de vue utilisation, cette bibliothèque vise à décrire dans un code C, un assemblage de composants logiques interconnectés (ports, bascule, registre...) comportant des entrées/sorties (bouton, LED, afficheur...).
Ensuite, à l'exécution, le programme simule le comportement de ces composants et affiche une interface avec les différentes entrées/sorties pour l'utilisateur.
En fin de projet, cette bibliothèque vise à être couplée avec un émulateur existant d'un microprocesseur de type Arduino (ou Avr8)
Présentation Générale
Contexte
Dans le monde des Systèmes Embarqués, les portes logiques sont la base de l'électronique numérique.
Les applications de ces portes logiques sont infinies. Avec ces « briques » essentielles, on peut construire une multitude de circuits numériques allant d'un simple additionneur, à un processeur complexe En fait, de nombreux systèmes qu'on utilise quotidiennement, tels que le PC, téléviseur, téléphone portable, etc., ont des milliards de portes logiques.
Objectif
Le but consiste en la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur. En effet, le projet est de développer une bibliothèque en langage informatique (Python) comportant des composants logiques contenant des entrées/sorties.
Pour être plus précis, projet consiste à réaliser une bibliothèque logicielle pour la simulation d'un circuit logique.
Il est destiné à la conception d'un outil d'émulation de circuit logique combiné à un microcontrôleur.
Description
1. Créer un circuit logique:
Exemple basique de la composition d'un circuit logique via la librairie Simutech associé à la librairie graphique Gtkmm.
1.1. Initialiser les entrées, sorties et les composants:
Afin d'initialiser les entrées et sorties du circuit logique, nous avons besoins de le créer et de récupérer son pointeur comme indiqué sur l'exemple ci-dessus.
Ainsi, la syntaxe à utiliser est la suivante : Object *nomComposant = new Object()
où Object est le nom du composant à créer (par exemple Button, And ou Led), nomComposant est le nom que l'on souhaite attribuer à notre composant.
Attention ! C'est un pointeur d'objet qu'il nous faut, donc ne pas oublier l'astérisque (*) après la déclaration d'Object.
Et enfin on peut assigner la création de l'objet avec la fonctionnalité new du langage C++.
Par ailleurs, vous n'êtes pas obligé de mettre des parenthèses à ... = new Object.
1.2. Réaliser les liaisons entre les composants logiques
Afin de lier les composants que l'on vient de créer, nous entrons dans la deuxième partie en dessous du commentaire //Affectation of the sources.
Il y'a deux façons de lier les composants entre eux :
Soit comme dans l'exemple ci-dessus, qui suit la syntaxe suivante : nomComposant->add_sources(nomAutreComposant)
Ou l'on peut suivre une autre syntaxe : (*nomComposant).add_sources(nomAutreComposant)
Par ailleurs, la fonction add_sources est une fonction surchargée, donc on peut ajouter plusieurs composant en même temps plutôt que de répéter x fois l'étape add_sources. Cependant la librairie de dispose que de 4 surcharges de cette fonction, on ne peut seulement ajouter 4 sources en même temps au maximum. La syntaxe est la suivante : add_sources(nomComposant1, nomComposant2, ..., nomComposant4).
1.3. Lier les entrées et sorties à la fenêtre
Si lors la conception de votre circuit logique vous avez créer des entrées ainsi que des sorties telles que des boutons et des leds, il faut les lier à la fenêtre graphique maintenue par la librarie Gtkmm.
Pour ce faire, on utilise la fonction add_input spécifique aux composants d'entrées et de sorties.
La syntaxe pour utiliser cette fonction est la suivante : nomComposant->add_input(mainGrid, posX, posY)
où posX et posY sont les positions de ces composants sur la fenêtre.
2. Simuler le circuit logique:
Notre librairie fonctionne, pour le moment, sur code::Blocks afin de nous faciliter la compilation des fichiers nécessaires pour la création d'un exécutable qui représente actuellement notre circuit logique.
Il est nécessaire d'ajouter ces deux lignes d'options lors de la compilation si l'on veut pouvoir compiler le programme avec la librairie Gtkmm : `pkg-config gtkmm-3.0 --libs` `pkg-config gtk+-3.0 --libs`
2.1. Charger un circuit logique
Afin de charger un circuit logique, pour le moment, il suffit de récupérer le constructeur Fenetre (la méthode nommée Fenetre::Fenetre()) d'un fichier fenetre.cpp et de le mettre à la place du constructeur Fenetre de notre programme.
2.2. Lancer la simulation
Il nous suffit qu'à build (sur code::Blocks) notre exécutable et de le lancer pour voir apparaître notre fenêtre et un terminal de débogage si l'on a crée une application console plutôt qu'une application GUI sur code::Blocks.
2.3. Résultat
3. Téléversement vers un émulateur ou un µ-Processeur Arduino:
A venir
3.1. Lien entre la bibliothèque et le logiciel Arduino ou l’émulateur de circuit logique.
Équipements
Ordinateur de bureau
Réalisations et résultats
Bilan
Gestion de projet
Diagramme de Gantt Github - Dépôt du code source