Logiciel de simulation de circuits logiques

Bonjour à tous,
Certains ici connaissent mon intérêt pour la simulation sous LTspice.
Aujourd’hui, je vous présente un des ses cousins orienté logique pure : Logisim Evolution
J’ai commencé à simuler quelques petits circuits, histoire de me faire la main.
Ces derniers jours, je me suis attelé à reproduire le jeu de puzzle lumineux « Lights Out » sorti en 1995 dans un mix de logique séquentielle et combinatoire.
Je me suis contenté d’une matrice de 3 x 3, le jeu existait jusqu’à 5 x 5
Le plus compliqué a été de gérer le côté « aléatoire » du tirage de départ du jeu.
J’ai demandé un petit coup de main au « chat » pour me générer le contenu de la ROM en mélangeant les 511 états possibles des codes sur 9 bits, car à la main, ça aurait été vraiment fastidieux.

Le schéma du jeu :

Et sa version « jouable »

Et pour finir, une petit vidéo de démonstration (sans résoudre le jeu… :rofl:)

4 « J'aime »

Je pense que les simulateurs logiques sur base de schémas graphiques ne sont pas nombreux car dès que cela devient un peu plus conséquent, aujourd’hui, cela passe par de la synthèse à partir de VHDL ou de Verilog, avec des simulateurs opérant avec des sources de ce type.

On peut créer des blocs et on peut aussi faire l’export VHDL.
Evidemment de mon côté, c’est uniquement pour le fun.

Il fait chaud, j’ai les neurones en ébulition… :rofl:

Petite vidéo de la simulation du scanner de KITT, la voiture de K2000
Les arrangements des groupes de LED sont codés dans une ROM parcourue par un compteur.

1 « J'aime »

Donc il serait possible de simuler le générateur pseudo-aléatoire d’un appareil bien connu des 80’s ?

Oui, et heureusement. Tous les circuits numériques créés en particulier pour les fpga sont simulés, d’abord sans prendre en compte les timing, puis on le fait avec les temps de propagation. C’est obligatoire vu la complexité, plusieurs milliers de bascules et portes logiques est aujourd’hui parfaitement banal. Et les bugs qui vont avec…
C’est aussi pour cela que la logique se décrit aujourd’hui en vhdl ou verilog, c’est bien plus efficace que saisir des schémas graphiquement.
Mais ces logiciels en graphique sont très bien pour de petits schémas et pour la formation, sans passer en plus par ces langages de description.

Bonjour à tous,
Aujourd’hui, on fait sonner Logisim avec la reproduction presque (pas tout à fait) parfaite du fameux carillon de Big Ben…
Cette simulation m’a été inspirée par l’article « Digicarillon » paru dans Elektor de février 1979.

Voilà le principe que j’ai adopté (voir la vidéo de 2mn) plutôt que l’usine à gaz Elektor…

2 « J'aime »

Bonjours à tous, Je continue à explorer ce logiciel et je me suis aperçu que sa fréquence d’horloge unique était parfois un écueil.
Je me suis attelé à faire un bloc proposant plusieurs fréquences fixes indépendantes de la fréquence choisie.
C’est en cours et dans la foulée, j’ai fait de fréquence mètre qui me semble un outil indispensable pour mes développements futurs.

Voici son schéma Logisim.
Le principe : on génère la base de temps de la mesure fixée à 1Hz et on compte les évenements de la fréquence à mesurer.
Je n’ai rien inventé, c’est le principe de fonctionnement
La problématique était de toujours avoir 1H quelque soit la fréquence de l’horloge disponible dans Logisim (elles sont en puissance de 2)
Je vais préparer une petite vidéo pour le voir en fonctionnement (en attendant je vais arroser mes tomates…)

1 « J'aime »

La ch’tite vidéo, brute de décoffrage, sans montages, sans trucages et de toutes façons, je ne sais pas faire ça… :rofl:
Alors soyez indulgents avec ma mesure ratée du 2kHz si je me souviens

Et ne me dites pas, bof! la vraie fréquence n’est même pas affichée.
J’y travaille mais c’est une autre paire de manches.
Connaissez vous l’algorithme " Double Dabble" sinon, une petite explication ici.
Autrement dit c’est l’art de décaler le bits, à ne pas confondre avec l’art de décaler les sons…
:je_sors:

Les prémices de mon décodeur Binaire vers BCD.
Dans un autre temps que nous ne connaitrons plus, c’était confié à des 74185 et son modèle n’existe pas sous Logisim, ce qui clôt le débat.

Je sais que ça intéresse peu de monde mais ayé! j’affiche la fréquence directement grâce à mon décodeur binaire BCD réalisé avec une quarantaine de 74185.
Meuh nan, j’déconne.
J’ai rempli une ROM de 131 000 valeurs en partant de zéro et en ajoutant 1 à chaque fois.
Un petit script Python de quelques lignes m’a créé le fichier texte à y importer.

Le principe, et c’est magique, c’est que chaque ligne d’adresse est remplie avec sa propre valeur en décimal.

Par exemple 128 000 converti en hexadécimal donne 1F400 ( comme l’affichage au message 8)

Et bingo, à l’adresse 1F400, la ROM contient la valeur 128 000.
C’était pas plus compliqué que ça.
Je vais maintenant m’attaquer à la fréquence maxi de Logisim soit 2 048kHz, ça va faire quelques millions de cases mémoire à remplir…

1 « J'aime »

J’aime bien tes simulations Jean Paul

1 « J'aime »

Moi non plus

Bonjour à tous,
Ma ROM 24bits pour afficher la fréquence max de 2048kHz est terminée.
Pour générer les quelques 2 097 152 entrées de la table, le site Python Online m’a envoyé balader, il ne gère que des fichiers de 2Mo maxi, le mien fait plus de 60Mo.
Mais windows possède un outil magique accessible en ligne de commande : Windows PowerShell

J’ai un peu merdé avec le script mais j’y suis arrivé avec au final ce résultat.

1 « J'aime »

Bon, ça fonctionne mais avec un échantillonage de 1hZ, pour mesure 2045kHz, ça prend plus de 30s…
Tu parles d’un fréquencemètre :rofl:
Solution trouvée : échantilloner à 1ms pour les fréquences les plus hautes par découpage de la ROM en 2 sections d’adresses BF/HF selectionnables par un dip switch.
Là, c’est hyper rapide mais ça affiche 2048 et je voudrais 2 048 000.
J’y travaille avec comme solution probable un décalage de groupes de bits vers la gauche et un affichage des 0 non significatifs à droite.
Comme quoi, la manipulation de bits, ça peut payer … :je_sors:

Et ça a fini par payer :

Et la technique de décalage confiée à un multiplexeur et des répartiteurs croisés intégrés à mon convertisseur binaire vers BCD.
J’ai préféré y mettre les labels A à D parce que d’une part, les fils c’est chiant à croiser et en plus ça dessinait une croix qui aurait pu provoquer un signalement à la modération… :rofl:

1 « J'aime »