AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 TICS - The Integrated Circuit Simulator

Aller en bas 
AuteurMessage
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: TICS - The Integrated Circuit Simulator   Sam 3 Fév 2018 - 14:33

Un petit projet sur lequel je bosse, qui permet d’interpréter des circuits logiques facilement a partir de bêtes images bitmaps.

J'ai documenté tout le projet sur github ICI.

Quelques exemples visuels:
Un compteur binaire qui affiche la valeur hexa sur un afficheur 7-segment:


Une RAM de 64 octets:


Une grosse RAM de 1ko:
https://i.imgur.com/jxnkkHN.gif

Les circuits sont de simples images avec des code couleurs spécifiques.
Par ex un compteur comme celui du gif (mais qui utilise des blocs de mémoire a la place des ou en cascade):


L'interpreteur est dispo pour linux/windows: https://github.com/onidev/TICS/releases

Si vous faites des circuits cool hésitez pas a les poster ou a les pull sur github Smile

_________________
                 
Revenir en haut Aller en bas
daminetreg
Administrateur
avatar

Messages : 16996
Localisation : Siege du CBNA!
Projet Actuel : Site Web du CBNA, version beta :

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Dim 4 Fév 2018 - 12:36

C'est vraiment abouti !
Tu l'utilises à des fins de vérification de tes propres circuits ou tu as une autre idée en tête ?

_________________
Mon CV : fr - de - en
Le CBNA Tous Ensemble! Réalisons!
Revenir en haut Aller en bas
http://lecbna.org/
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Dim 4 Fév 2018 - 12:46

Dans l'idée, c'est juste un test pour voir si je pourrais intégrer ça dans centauri sous forme d’électronique bas niveau (facultative, couplée a l'electronique haut niveau).
En l'état le système bien que performant n'est pas viable, il faut encore que je fasse un système de compilation et que j'ai un proof of concept assez gros (genre un petit ordinateur programmable 8 bit conçu avec) pour faire mes tests. Car dans centauri on pourrait se retrouver avec des centaines de simulations simultanées...

Par contre le système ne prend pas en compte plusieurs choses comme les décalages temporels donc en théorie on ne peut pas l'utiliser pour une application réelle.
C'est vraiment juste sous forme de jeu, comme the powder toy, mais pour la logique combinatoire :p

_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Mar 6 Fév 2018 - 8:45

Multiplication et division 8bits:



_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1357
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Jeu 8 Fév 2018 - 22:46

C'est assez magnifique! J'adore voir les animations!

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Ven 9 Fév 2018 - 22:07

Une ALU (Unité arithmétique et logique) 8 bits, qui permet de faire (presque) tous les calculs de base:


Je vais pouvoir commencer les choses sérieuses avec ça Very Happy

_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Mer 14 Fév 2018 - 20:03

Mon premier chipset programmable (pas super utile, mais fonctionnel):


Le plus dur était surtout de faire tout tenir ensemble, gérer les sleeps et le fetch correctement.
Prochaine étape: ajouter des registres (afin de rendre les calculs un peu plus utiles) et des sauts conditionnels.

_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Jeu 15 Fév 2018 - 20:48

Un nouveau chipset plus élaboré:


Plus qu'a ajouter du branching et j'aurais un truc Turing complet a priori.

_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1357
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Sam 17 Fév 2018 - 13:24

C'est vraiment cool!

L’exécutable fonctionne très bien sous linux.
Pourquoi ne donner que l’exécutable et pas les sources?
ça serait difficile de le faire fonctionner avec WebAssembly sur une page web?

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Lun 19 Fév 2018 - 10:44

Merci :p

C'est simple, le git est fait pour les circuits, pas le logiciel. En fait les circuits ont pris vraiment beaucoup de temps a être designé, et le code est pas vraiment intéressant, c'est implémentable en 2-3h si on a une classe d'image et un workflow de base.
Et le programme est fait avec mon workflow personnel du coup il ne pourra pas être compilé vu que je ne le distribue pas (bien que ça doit pas être dur a porter sur SDL2).
Enfin je pourrais toujours poster un snippet si ça t’intéresse, mais c'est pas vraiment la partie centrale du truc.

Pour un export web je pense pas qu'il y ai de soucis. Mais comme c'est juste un interpréteur sans édition c'est pas très intéressant pour le moment.
Je travaille petit a petit sur un éditeur complet, je pense que je me pencherais sur l'export web quand il sera fini, la ce sera bien plus intéressant.

Sinon hier j'ai fait ma première chipset turring complete (si on omet la limite de mémoire actuelle):

Petite démo avec la suite de Fibonacci qui se calcule dessus: https://i.imgur.com/I6tdx8A.gif

Je retravaillerais l'architecture pour ajouter un carry flag, et la multiplication 8 bit (qui est un peu chiante car elle doit output dans 2 registres, vu que le résultat est en 16 bits).
Avec un peu plus d'instructions et de registres on pourra commencer a programmer des choses intéressantes avec.


Mais pour vous donner un peu une idée au niveau de la suite, quand l'éditeur de circuit logiques sera finis, il y aura un éditeur de circuits électroniques ou l'on pourra utiliser ses puces sous forme de boîtiers DIP (avec les I/O), des protocoles de communication entre les chipsets (comme I2C), un assembleur universel avec un interpréteur C intégré pour pouvoir créer ses propres assembleurs, et ainsi pouvoir coder ses chipsets personnalisés facilement (actuellement je rentre tout en binaire directement dans la cellule de mémoire, mais ce sera pas possible une fois la puce "crée" dans son boîtier DIP, il faudra lui envoyer le code).
Une fois tout cela finis ça me permettra de faire un jeu complet et ludique pour apprendre les bases de la logique combinatoire en situation relativement "réelle", mais aussi certains aspects de l’électronique (au niveau de la prog des puces et leur communication).

Bref, y a encore pas mal de taf au niveau soft (faire les GUI etc), mais y a aussi beaucoup de taf encore au niveau du design des circuits logiques.
Il faut que je fasse des protocoles de communication, que je crée des architectures pratiques a programmer (j'aimerais bien avoir un truc qui ressemble a de l'AVR a la fin), et que j'ai un gros proof of concept qui sera utilisé dans le jeu en lui même (le joueur aura accès a des chipsets tous prets pour pouvoir s'amuser avec).

_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Jeu 1 Mar 2018 - 12:55

Quelques news.
J'ai commencé le compilateur de circuit pour optimiser les performances.
C'était assez marrant a faire donc je vais décrire un peu les tests que j'ai fait pour optimiser les calculs tout en restant dans des choses pas trop complexes.

A ce stade le compilateur ne gère pas les mémoire et les sous circuits.
J'ai donc fais tous mes essais sur mon plus gros circuit "simple", l'alu 8 bits.

1. Compilation en une VM simple avec 4 instructions (and, or, nand, nor)
Sur 1000 iterations:
- avant: 3842.32 ms / 1000 => ~3.8ms
- apres:    6.68 ms / 1000 => ~6.7us

Le code d'execution de la VM ressemble a ça:
Code:
for(const Instr& instr: instructions) {
    switch(instr.opcode) {
    case OpCode::And:
        registers[instr.r1] = registers[instr.r2]&registers[instr.r3];
        break;
    case OpCode::Nand:
        registers[instr.r1] = !(registers[instr.r2]&registers[instr.r3]);
        break;
    case OpCode::Or:
        registers[instr.r1] = registers[instr.r2]|registers[instr.r3];
        break;
    case OpCode::Nor:
        registers[instr.r1] = !(registers[instr.r2]|registers[instr.r3]);
        break;
    }
}

2. On change l'ordre de l'enum: les temps varient beaucoup étrangement (pourquoi?)
Sur 100k iterations, on arrive a obtenir ~570 ms contre ~670 avant.

3. On ajoute une instruction xor pour diminuer le nombre d'instructions On passe de 1903 instructions a 1506.
Sur 100k iterations, on passe dans les 720 ms (donc beaucoup moins performant).
> Le branching semble être ce qui joue le plus sur les performances, bien plus que le nombre d'instructions.

4. On convertis toutes les portes logiques en NANDs pour ne plus avoir qu'un seul type d'instruction. On passe a 2314 instructions.
Sur 100k iterations, on obtiens ~450 msec soit un beau gain de performances malgres le nombre d'instructions en plus.

5. Essayons de ne garder que des Xor et des Nands:
Sur 100k iterations, on passe dans les 520 ms. Avoir plus d'instructions d'un seul type reste donc la meilleur chose a faire.
> On restera par la suite que sur du NAND du coup.

Le code de la VM ressemble maintenant à ça:
Code:
for(const InstrNand& instr: nands) {
    registers[instr.r1] = !(registers[instr.r2]&registers[instr.r3]);
}

6. Actuellement on a une case mémoire par instruction.
On utilise un algorithme d'allocation de registres avec coloration de graphs pour diminuer le nombre de registres/variables et optimiser le cache:
- avant: 2346 registres
- apres: 177 registres
Performances: le gain est minime... domage.

7. On passe les registres (sensé contenir un booléen) de 8bits par valeur (un tableau de uint8_t) a 32 bits par valeur:
Sur 100k iterations, on gagne ~10ms. Le gain est faible mais non négligeable.
On a des résultats quasi identiques en optimisant ou non le nombre de "registres".


Conclusion: les performances sont vraiment prometeuses sans avoir a passer par des algorithmes très complexes.
Je vais rester sur ces optimisations et continuer la compilation en prennant en compte les mémoires et sous circuits, en esperant ne pas trop y perdre de performances.


Sinon j'ai commencé un peu a designer l'éditeur de circuits haut niveau:

_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1357
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Jeu 1 Mar 2018 - 20:32

Tu veux dire que tu as fait quelque chose qui convertit un "programme" en un "circuit"? Un peu comme ce qu'on pourrait faire en VHDL?
Ou peut-être bien un compilateur vers un code assembleur lisible par un une machine écrit dans ton système de circuit?

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Jeu 1 Mar 2018 - 21:54

Ça converti le circuit en bytecode Smile
Pour l'instant l’interpréteur traitait l'image directement (ce qui permet de faire les animations par exemple).
Sous forme de bytecode le circuit est bien plus rapide a exécuter du coup.

Pour le VHDL ça aurait été marrant d'avoir un équivalent mais je crois que c'est un peu trop complexe a mettre en place pour moi Very Happy

_________________
                 
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Sam 3 Mar 2018 - 18:36

J'ai finis la compilation et les résultats sont prometteurs.
Ça gère tout, les sous circuits, les mémoires...
Sans avoir encore optimisé la (nouvelle) VM, pour exécuter le calcul de la suite de fibonacci sur ma puce de test, on passe de:
-non compilé: 2985.29 ms
-compilé: 3.97123 ms

Edit: je m'étais fail sur les flags de compilation...
On passe de:
-non compilé: 400.117 ms
-compilé: 0.79237 ms

_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1357
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Mar 6 Mar 2018 - 21:14

Donc tu fais la compilation dans l'autre sens: du circuit vers le code. J'ai compris ^^
Intéressant ! J'ai pas grand chose à dire, mais donne nous quand même des nouvelle dès que tu as quelque chose de nouveau.

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Dim 18 Mar 2018 - 18:11

Je me suis amusé a simuler game of life dans TICS:
https://i.imgur.com/BjcuCII.gif

_________________
                 
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
avatar

Messages : 1357
Localisation : Grenoble / Méribel
Projet Actuel : CBNA

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Mar 20 Mar 2018 - 21:55

Chapeau! Very Happy

_________________

D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
[TheDarkTiger]
Modérateur
avatar

Messages : 7389
Localisation : Essonne

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Dim 22 Avr 2018 - 19:46

Monsieur Onilink_, vous êtes fous, et j'admire / adore !

Franchement, je sais pas quoi ajouter, c'est trop cool ! =D
(et sacrément zinzin ! Mais trop cool XD )

_________________
Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^
l'antique http://www.membres.lycos.fr/thedarkminousite/
Bienvenue au 2540eme utilisateur : Mordoxiss !
Revenir en haut Aller en bas
http://www.tdms.fr
onilink_
Modérateur
avatar

Messages : 8962
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: TICS - The Integrated Circuit Simulator   Lun 23 Avr 2018 - 12:41

Ahah merchi :p

_________________
                 
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: TICS - The Integrated Circuit Simulator   

Revenir en haut Aller en bas
 
TICS - The Integrated Circuit Simulator
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Vos enfants ont-ils des tics?????
» Le "circuit Guillaume" sur son portable.
» Tics faciaux
» COUPE CIRCUIT COBRA SRA4* .:VENDU:.
» Tics nerveux

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Informations :: Projets-
Sauter vers: