IMA3/IMA4 2021/2023 P2

De Wiki de Projets IMA

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

Exemple d'un circuit électronique à une seule sortie.jpeg


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:

CompoCircuitWiki.png

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()

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)

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

RésultatCircuit.png

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 de la librairie
Github - Dépôt du code source du convertisseur