Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Simulateur de circuits logiques | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Simulateur de circuits logiques Ven 27 Avr 2012 - 0:56 | |
| Ceci est pour les amateurs de circuits logiques basés sur les portes NAND, AND, OR et XOR. Dans un passé encore pas si récent, on utilisait les circuits intégrés TTL, et plus tard CMOS etc, pour réaliser des objets élémentaires informatiques. Des exemples archi-connus sont des flip-flop (pardon, "bascules"...) de type RS, JK etc, et des horloges numériques, additionneurs etc. Tous ces circuits peuvent être composés de portes NAND et OR, selon quelques règles simples. J'ai fait un programme de simulation de ces circuits, et pour la commodité, j'ai ajouté les portes AND et XOR. On peut définir des "liens" qui sont en fait les liaisons électriques entre une sortie de porte et une entre d'une autre porte, entre une borne de contact et une entrée de porte ou une sortie de porte et une borne de contact. Le programme permet de saisir la configuration d'un circuit dans un memo, sous forme de commandes verbales avec les paramètres séparés par des virgules. Chaque objet (porte ou lien) doit avoir un nom qui est une chaîne de caractères libre. Il y a 30 bornes de contacts qui sont identifiés par #n où n est un numéro entre 1 et 30. Une sortie de porte est identifiée simplement par son nom, et une entrée de porte par son nom, suivi de /n où n représente le numéro de l'entrée. Les lignes commençant par un ";" sont des commentaires et sont ignorées. Les objets ont les caractéristiques suivants: - bornes: visibles dans une fenêtre séparée sous forme de cases à cocher. Les bornes utilisées comme entrée d'un lien sont visibles et actifs. On peut ainsi les cocher pour leur donner la valeur 1, ou les décocher pour leur donner la valeur 0. Les bornes utilisées comme sortie d'un lien sont visibles mais inactifs. On peut ainsi visualiser les sorties du circuit, voir des points de test ou de mesure à l'intérieur du circuit, sans toutefois pouvoir modifier leur état. - LIEN: Un lien a exactement une entrée et une sortie. Il reporte la valeur de son entrée sur sa sortie. Il représente un câble électrique. - NAND: porte logique de 1 à 8 entrées et une sortie. La sortie vaut 1 si au moins une des entrées est 0, et 0 sinon - AND: porte logique de 1 à 8 entrées et une sortie. La sortie vaut 1 si toutes les entrées sont 1, et 0 sinon - OR: porte logique de 1 à 8 entrées et une sortie. La sortie vaut 1 au moins une entrée est 1, et 0 sinon - XOR: porte logique de exactement 2 entrées et une sortie. La sortie vaut 1 si les deux entrées sont différentes, et 0 sinon - JK: bascule JK, mémoire de 1 bit à 2 entrés de pilotage J et K et 1 entrée CLK (clock), et une sortie Q Format des commandes: - Citation :
- LIEN,nomLIEN,in,out
NAND,monNAND,n_in,val_out AND,monAND,n_in,val_out OR,monOR,n_in,val_out XOR,monXOR,n_in,val_out JK,monJK,val_out
Si le paramètre val_out n'est pas spécifié, la valeur de sortie par défaut est 0. Les commandes de définition du circuit peuvent être saisies directement dans le mémo, ou être générés de façon assistée par un "expert" appelé par des boutons portant le libellé de l'objet à créer. On peut ainsi saisir les paramètres (avec un minimum de contrôle de validité), et la ligne correspondante est générée automatiquement. Les commandes pour les portes et liens peuvent être générés dans n'importe quel ordre, à condition que les éléments auquel fait appel un lien doit exister au moment de la création d'un lien. Après la constitution du "script", on utilise le bouton "Générer le circuit" qui analyse le script et remplit les tables internes. Toute erreur est signalée par un "--> " devant la ligne en défaut, et il faut regarder ce qui ne va pas. S'il n'y a pas d'erreur, on peut utiliser le bouton "Simuler une étape" pour obtenir le résultat en fonction de l'état des cases des contacts d'entrée. On peut alors cocher ou décocher une ou plusieurs cases d'entrée et refaire une étape pour voir le changement de résultat. A chaque modification du script, if faut regénérer le circuit. Un circuit simple est ceci: - Citation :
NAND,maporte,3 LIEN,#1,maporte/1 LIEN,#2,maporte/2 LIEN,#3,maporte/3 LIEN,maporte,#30
La borne 30 doit être cochée (valeur 1) si au moins une des bornes 1 à 3 sont décochées (valeur 0) et être décochée sinon (valeur 0). Voici un exemple plus complexe: le flip-flop JK: Un dernier mot: le programme est insensible à la casse: de façon interne, il transforme tout en minuscules. - Citation :
- ; flipflop JK
; portes commandées nand,a1,2 nand,a2,2 lien,J,#1,a1/1 lien,Tick1,#2,a1/2 lien,Tick2,#2,a2/1 lien,K,#3,a2/2 ; puis un flipflop RS nand,gate3,2 nand,gate4,2 ; entrées lien,l1,a1,gate3/1 lien,l2,a2,gate4/2 ; liens croisés lien,l3,gate3,gate4/1 lien,l4,gate4,gate3/2 ; sorties lien,l5,gate3,#11 lien,l6,gate4,#13 et voici le même flipflop en objet natif: - Citation :
- JK,monJK,0
lien,l1,#1,monJK/1 lien,l2,#2,monJK/2 lien,l3,#3,monJK/3 lien,l4,monJK,#12 Il y a aussi la possibilité de faire des macros afin de pouvoir réutiliser des morceaux de circuit. Exemple: - Citation :
- macro RS
nand,nanda%,2 nand,nandb%,2 lien,f1%,nanda%,nandb%/1 lien,f2%,nandb%,nanda%/2 fin
et on l'utilise comme ceci: - Citation :
- copier,RS,1
copier,RS,2 copier,RS,3
Ceci crée 3 copies de la bascule RS, et à chaque fois, le signe "%" sera remplacé par "1", "2" ou "3" pour personnaliser chaque exemplaire de la bascule. Il y a la possibilité d'établir le circuit graphique. Pour cela, on attribue des coordonnées (x,y) à chaque objet (sauf les liens). On bouton permet de dessiner le schéma, un autre permet de l'afficher ou de le cacher. Une commande supplémentaire est introduite pour positionner un objet: - Citation :
- position,nom,x,y
Le programme est dorénavant trop long pour pouvoir être posté dans un message. Il est donc disponible sur mon WEBDAV aux coordonnées suivantes: Site: http://www.mydrive.ch/Identifiant: panoramic@klausgunther Mot de passe: panoramic123 Dossier: Logic Circuit
Dernière édition par Klaus le Lun 30 Avr 2012 - 12:23, édité 11 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 2:03 | |
| Salut Klaus ! J’été un grand amateur de circuits logiques, il y a bien longtemps ! J’ai essayé très rapidement ton programme (sans même lire les informations pour l’utilisation du programme). J’ai détecté une toute petite erreur à la ligne 214, il faut mettre : au lieu de ; J’y retournerai sûrement, au moins pour voir comment ça marche. A+
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 2:09 | |
| Exact ! Merci beaucoup ! C'est corrigé dans le source du premier post.
Pour le coup, je suis étonné que Panoramic n'ait pas rejeté le programme - aucune erreur au lancement et à l'exécution ! Bizarre...
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 11:25 | |
| Une nouvelle version avec un traçage beaucoup plus lisible... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 14:31 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 15:16 | |
| @ Jean-Claude: tout ceci traite effectivement du type de circuit qu'on peut simuler avec mon programme. C'étaient mes débuts en informatique, à la fac, et j'en, ai fait, des platines avec des circuits intégrés TTL genre SN7400, SN7410, etc...
Nouvelle version: - correction d'un petit bug au niveau de l'affichage du traçage - ajout d'une fonctionnalité majeure: la possibilité de faire des macros pour pouvoir réutiliser facilement une partie du circuit, en le dédoublant. Tout est documenté dans le premier post et dans le source. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 15:45 | |
| Ca me rappelle le bon vieux temps. J'ai toujours ma platine de test et mes circuits dans mon sous-sol ... Je ne tarderais pas à le ressortir pour mon fils, mais c'est encore un peu tot. Je teste ton programme ce soir | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 19:49 | |
| Nouvelle version. Nouveautés: - correction d'un petit bug - ajout d'un paramètre supplémentaire pour la définition de toutes les portes: valeur de sortie initiale ! Ceci permet d'avoir initialement une situation aberrante qui conduit à une boucle infinie. Avec tout ça, on peut simuler un flipflop JK, de la manière suivante: - Citation :
- ; flipflop JK
; portes commandées nand,a1,3,1 nand,a2,3,1 lien,J,#1,a1/2 lien,Tick1,#2,a1/3 lien,Tick2,#2,a2/1 lien,K,#3,a2/2 ; puis un flipflop RS nand,b1,2,0 nand,b2,2,1 ; entrées lien,l1,a1,b1/1 lien,l2,a2,b2/2 ; liens croisés lien,l3,b1,b2/1 lien,l4,b2,b1/2 ; sorties lien,l5,b1,#11 lien,l6,b2,#13 ; liens de rebouclage lien,l7,b1,a2/3 lien,l8,b2,a1/1 Le schéma d'un flipflop JK est: Dans mon exemple, J=contact 1, CLK=contact 2, K=contact 3, Q=contact 11, notQ=contact 13 Le flipflop réagit si CLK (contact 2) est mis à 1. Il utilise alors les valeurs de J et K pour définir son nouvel état. Remettre CLK à 0 bloque toute modification de l'état. La table de vérité est: - Citation :
J K C Q ======================= 0 0 0 pas de changement 0 0 1 pas de changement 1 0 1 1 0 1 1 0 1 1 1 interdit !
Un conseil: après la génération du circuit, effectuer la simulation d'une étape, de sorte que le système s'initialise bien. Après, on peut agir sur J, K et CLK pour voir l'effet. Attention: J=K=1 est interdit et conduit à une boucle infinie - ceci est normal. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 20:00 | |
| Bon désolé Klaus, mais je n'ai pas tout compris et mes lignes sont en erreur, mais je relirais les explications à tête reposée demain, je n'ai pas le courage de m'y replonger ce soir ... Quand je créé un porte, je peux entrer le nom et modifier le nombre d'entrée, mais les 2 lignes en dessous ne sont pas modifiable Entrée et Sortie. Mais c'est sans doute normale, je n'arrive juste pas à me mettre dedans, ce soir ...
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 20:48 | |
| Par l'expert de saisie, les zones qui ne s'appliquent pas à un objet, restent inactives. Les zones "Entrée" et "Sortie" ne s'appliquent qu'à un objet LIEN. Essaie ceci: - Citation :
; définir un NAND avec 3 entrées. La sortie vaut 1 par défaut NAND,porte_nand,3,1 ; contact 1 sur entrée 1 du NAND LIEN,lien_1,#1,porte_nand/1 ; contact 2 sur entrée 2 du NAND LIEN,lien_2,#2,porte_nand/2 ; contact 3 sur entrée 3 du NAND LIEN,lien_3,#3,porte_nand/3 ; sortie du NAND sur contact 12 LIEN,lien_4,porte_nand,#12
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 21:29 | |
| OK, j'ai compris, je n'étais pas loin, mais je n'avais pas compris qu'il fallait utiliser le nom seul pour la sortie ^^ Ca marche mieux comme ça, en effet !! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Ven 27 Avr 2012 - 21:34 | |
| Petite mise à jour: la valeur par défaut de la sortie est maintenant gérable dans l'expert de saisie ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Sam 28 Avr 2012 - 19:38 | |
| Nouvelle version: Il y a un nouvel objet natif: la bascule JK. Commande: JK,nom,out_val Voici un extrait des commentaires du programme: - Citation :
- ' La bascule JK est une cellule de mémorisation de 1 bit. Elle a 3 entrées
' et 2 sorties, mais les deux sorties sont complémentaires (nommées Q et not-Q). ' Les 3 entrées sont J, CLK et K. L'entrée CLK (clock comme horloge) détermine ' un cycle de l'objet. Il faut une transition de 0->1 puis de 1->0 pour ' compléter un cycle. Tant que CLK=0, aucun changement des entrées J et K n'est ' pris en compte. Si CLK=1: J=K=0 maintient l'état de la bascule, J=1 et K=0 ' forcent l'état à 1 (la sortie Q produit 1), et J=0 et K=1 force l'état de la ' bascule à 0 (la sortie Q produit 1). La combinaison J=K=1 est interdite et ' produit des résultats imprédictibles. La table de vérité est: ' J 0 0 0 0 1 1 1 1 ' K 0 0 1 1 0 0 1 1 ' T 0 1 0 1 0 1 0 1 ' Q x x x 0 x 1 ? ? ' (x signifie valeur inchangée)
Avec ça, on peut faire des compteurs, un horloge, ... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Sam 28 Avr 2012 - 19:56 | |
| Hum, Klaus, je suis fort pour donner du boulot aux autres ... La preuve ... maintenant que ton moteur de traitement est opérationnel, ça ne te dirait pas de faire une interface visuelle ? A priori, tu connais les symboles des portes logiques. Tu peux mettre des interrupteur 0/1 en entrée et de leds éteintes / allumées en sortie pour voir l'état, par exemple. En fait, on se servirait de tes menu actuels pour éditer ou créer une nouvelle entrée / porte, mais les liens seraient géré à la souris en cliquant sur les entrées ou sortie des objets. Ton traçage d'étapes pourrait alors être directement visualisé sur les entrées sorties (par exemple par un petit rond qui représente l'entrée ou la sortie et qui s'allume quand l'état est à 1) Bon, c'est juste une idée de la part du mec qui a toujours des idées pour donner du travail ..... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Sam 28 Avr 2012 - 21:08 | |
| Pourquoi pas ? Je vais voir ce que cela implique. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Dim 29 Avr 2012 - 20:02 | |
| Nouvelle version:
début de la représentation graphique du circuit. Pour le moment, on peut placer les objets sur un canvas de 800x400 pixels. Les liens ne sont pas encore gérés, mais on peut déjà voir les objets et les contacts. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Dim 29 Avr 2012 - 20:45 | |
| Tu as bien avancé (J'ai réussi sans problème a afficher mes 2 circuit sur le schéma, il a juste fallu que je fasse attention au bouton dessiner les portes a cliquer après avoir généré le circuit | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Dim 29 Avr 2012 - 21:09 | |
| Oui, c'est ça. Avant la génération, les informations ne sont pas "connues" puisqu'elles ne sont pas encore dans les tables.
Au moment du dessin, le programme demande si l'on veut déplacer les objets. En cas de réponse négative, les positionnements mémorisés seront maintenues; sinon, le programme propose chaque objet pour modification des seules coordonnées, et retrace le circuit avec les nouvelles coordonnées.
Petite info: la grille affichée est une grille de 10x10 pixels.
Le gros morceau vien maintenant: le traçage des liens ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Lun 30 Avr 2012 - 12:36 | |
| J'ai mis une nouvelle version en ligne, avec le début du traçage des lignes.
Pour le moment, les lignes se tracent si le point de départ est à gauche du point d'arrivée. On peut utiliser les contacts comme départ et arrivée, et les objets divers comme départ.
Les autres cas: - départ à la verticale de l'arrivée - départ à droite de l'arrivée - entrées des objets sont en cours de réalisation.
Les liens se dessinent en bleu. L'algorithme de création de liens ne tien pas compte de la superposition des liens. Mais les liens sont TOUJOURS en segments perpendiculaires. Le programme affiche une combo avec la listre des liens. En choisissant un lien, une liste des segments pour ce lien apparaît. On peut choisir un segment, puis utiliser le bouton "Déplacer" pour le décaler (verticalement pour un segment horizontal, horizontalement pour un segment vertical). Si le décalage concerne le premier ou dernier segment, il sera automatiquement divisé en 3 segments, et le décalage aura lieu sur celui le plus à l'intérieur, de sorte à ne pas décaler les points de départ ou arrivée.
Reste à faire: - les cas cités ci-dessus - couper un segment "intérieur" - optimiser les segments en cas de "boucles" inutiles
Un lien peut avoir 30 segments. Si le déplacement des liens gêne l'affichage, il suffit de redessiner les portes, et le dessin sera neuf et propre, en respectant le nouveau tracé des liens.
Je prévois la sauvegarde d'un circuit AVEC le tracé de ses liens, et le chargement d'un circuit préalablement sauvegardé. C'est pour bientôt. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Lun 30 Avr 2012 - 15:39 | |
| Tu continues d'avancer, j'ai fais un programme test pour voir les avancées. A ce jour, il trace le segment allant de la sortie du Nand au contact 13 Je le resterais avec les versions à venir (les entrées principalement) - Code:
-
JK,monJK,0 position,monJK,40,20 lien,l1,#1,monJK/1 lien,l2,#2,monJK/2 NAND,monNand,2,0 position,monNand,120,40 lien,l3,monNand,monJK/3 lien,l4,monJK,monNand/1 lien,l5,#3,monNand/2 lien,l6,monNand,#13 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Lun 30 Avr 2012 - 19:51 | |
| Je me suis rendu compte que pour un résultat acceptable pour le tracé des liens, il faut tenir compte de l'orientation, à la fois de l'entrée ET de la sortie du lien. Je reprends donc le mécanisme de construction de tracé. J'ai trouvé le moyen de tenir compte de cet aspect de façon simple - donc, c'est à venir bientôt. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Lun 30 Avr 2012 - 21:40 | |
| C'est un gros boulot, mais je pense que le principe est utilisable pour différentes applications | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Lun 30 Avr 2012 - 21:54 | |
| Oui, je pense aussi. Ceci dit, ça avance très bien - j'ai trouvé un moyen de discriminer les cas possibles et de les traiter par des pavés indépendants. Toute la routine "optimiser_lien" sera remplacé par un moteur de génération de tracé plus approprié, et modifiable qui plus est. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simulateur de circuits logiques Mar 1 Mai 2012 - 10:15 | |
| Nouvelle version.
Il n'y a pas encore les entrées, mais le moteur de génération de liens est entièrement revu, et tient compte des différents cas: début à gauche, à droite ou à la verticale de l'arrivée, début plus haute, plus basse ou à l'horizontale de l'arrivée, orientation du début et de l'arrivée vers la droite, le bas, la gauche ou vers le haut - ça fait beaucoup de combinaisons possibles.
Je ferai les entrées maintenant.
Mais il y a un grand plus: à partir de maintenant, quand on sélectionne un segment, il s'affiche en rouge. C'est beaucoup plus visible comme ça. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Simulateur de circuits logiques Mar 1 Mai 2012 - 10:47 | |
| J'ai testé mon circuit de test en mettant la sortie du Nand sur le contact 6, pas de problème de traçage maintenant que ton moteur de tracé fonctionne, les entrées sont presque une formalité ... Est-ce que tu affichera les états des entrées par un petit rond vert / rouge ou rouge / vide ou autre truc du genre ? En fait ce serait sympa, si on fait des boucles, mais il faudrait définir un temps pour afficher les changement d'état. (Si ça va trop vite, on ne verrait rien je sens que la nouvelle commande (pause) va être utilisée bientôt ...) | |
| | | Contenu sponsorisé
| Sujet: Re: Simulateur de circuits logiques | |
| |
| | | | Simulateur de circuits logiques | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |