![]()
![]()
![]()
![]()
![]()
Next: Simulateur : les connexions Up: Example : Simulateur logique Previous: Cahier des charges   Contents   Index
Exemple d'utilisation Nous commençons maintenant la réalisation du simulateur. Le simulateur comprend plusieurs parties, dont la définition de l'agenda, les connexions, les portes élémentaires et le moteur de simulation.
L'agenda est une structure qui enregistre les évènements qui restent à exécuter. Il sera décrit dans le prochain chapitre. Les évènements sont des couples formés par une date et une procédure. L'agenda est une liste d'événements ordonnée par les dates.
Les connexions sont des structures de données qui relient les portes entre elles, et qui ont la capacité de propager des valeurs. Les connexions sont responsables de la propagation des valeurs entre les portes.
Les portes élémentaires sont décrites à l'aide de leur comportement programmé en Scheme, par opposition aux portes composées dont seule la structure est décrite.
Lorsque l'outil sera terminé, nous pourrons écrire :
(define agenda (agenda:créer))Cette instruction crée l'agenda, qui permet de stocker les évènements restants.
La prochaine étape consiste en la création des connexions qui correspondent aux fils du schéma électrique :
(define a (connexion:créer)) (define b (connexion:créer)) (define s (connexion:créer))Pour le moment, les connexions ne sont pas reliées à des portes. Les portes sont créées en les reliant à des connexions :
(porte:and agenda a b s)Cette instruction crée une poste ET dont les deux entrées sont reliées aux connexions a et b, et dont la sortie est reliée à la connexion s.
(porte:sonde agenda "s" s)Cette instruction relie la sortie s à une sonde qui va permettre de visualiser les valeurs circulant sur la connexion.
Le schéma obtenu par cette série d'instruction est :
Pour simuler de schéma, nous allons placer explicitement des valeurs sur les entrées et nous allons examiner à l'aide de la sonde l'effet sur la sortie :
(connexion:changer! a 1) (agenda:simuler agenda)La fonction agenda:simuler lance le simulateur. Dans ce cas, la modification effectuée sur l'entrée a n'a généré aucun événement sur la sortie, et la sonde n'a détecté aucune modification sur la sortie s. Modifions maintenant l'entrée b :
(connexion:changer! b 1) (agenda:simuler agenda)Cette fois-ci, la modification de l'entrée b entraîne la modification de la sortie s, que la sonde détecte en affichant :
SONDE(0) s~: 1La sonde affiche l'instant entre parenthèses, ici 0.
Avec ce simulateur, il est possible de réaliser un système instable, c'est à dire qui provoque une infinité de changements sur les sorties.
Un moyen simple de réaliser un système instable est de connecter la sortie d'un inverseur à son entrée. De cette manière, quelle que soit la valeur initiale de la sortie, elle est toujours inversée, ce qui conduit le système à osciller. Le schéma du système instable est le suivant :
La programmation de ce schéma est :
; création des connexions (define a (connexion:créer)) ; création de l'agenda (define agenda (agenda:créer)) ; connexion des portes (porte:not agenda a a) ; sonde (porte:sonde agenda "a" a) ; simulation (connexion:changer! a 1) (agenda:simuler agenda) ; la valeur de sortie de s change SONDE(0) s~: 0 SONDE(1) s~: 1 SONDE(2) s~: 2 SONDE(3) s~: 3 ...La sonde détecte une infinité de changements sur la sortie, et la simulation ne s'arrête jamais. Ce système instable peut servir à générer des horloges pour des systèmes plus complexes.
![]()
![]()
![]()
![]()
![]()
Next: Simulateur : les connexions Up: Example : Simulateur logique Previous: Cahier des charges   Contents   Index © 1993 to 2001 Erian Concept