Archive for Architecture des ordinateurs

Circuits : du transistor à l’ordi !

après 33 ans à dessiner des circuits électroniques, logiques, combinatoires, séquentiels, […] en tant qu’étudiant, puis enseignant (sans que cela soit ma spécialité) il était temps que je me rende compte, par moi-même, si la théorie fonctionnait ou pas et dessiner un ordinateur (même simple) du début à la fin : du transistor à l’ordi.

et oui, en sortant de ma formation, j’avais bien vu et dessiné un additionneur, de la mémoire, l’architecture de von Neumann ; en tant qu’enseignant, j’avais approfondis mes connaissances avec les circuits à flots de données, la micro-programmation, la machine de Manchester, etc. Mais, toujours, c’étaient des éléments pris un à un, indépendamment les uns des autres, sur le papier, ou au tableau, lors d’un TD d’1h30 ; au mieux, simulés à gros grains, à la main ou par un didacticiel. C’était dans un contexte didactique et théorique et non pas dans un projet global ou avec une vision concrète, complète, pratique.

et pourtant, depuis longtemps je connais des outils pour dessiner ou décrire un ordinateur complet à partir de portes logiques et le simuler (i.e. : le langage lustre, le logiciel de dessin Logisim), mais peut-être parce que la complexité d’une réalisation complète d’un ordinateur à partir de rien (ou presque) ou l’existence de logiciels simulant bien une machine complète (i.e. : Procesim) l’empêchait, je n’avais rien entrepris pour construire ou au moins dessiner, de A à Z, un ordi. Même quand l’utilisation de Procesim devint hasardeuse, une vidéo suppléait pour montrer le fonctionnement de l’ensemble. Cela suffisait. Et sur le web, on trouvait d’autres projets similaires ; avec Logisim, parfois. Alors pourquoi le faire, moi aussi. Peut-être parce que l’organisation que l’on trouve chez les collègues ou le niveau de détail n’est pas celui que je souhaitais et qu’ici ou là l’architecture était plus orientée chemin de données que machine de von Neumann (PC/PO).

mais progressivement, avec youtube, puis avec caseine (un Moodle spécialisé pour les mathématiques, les mathématiques appliquées et l’informatique), puis finalement avec la pandémie, j’ai de plus en plus utilisé Logisim pour faire et simuler des circuits, des circuits de plus en plus gros, des circuits combinatoires, des circuits à mémoire, des automates, des circuits à flots de données. Au départ, pour faire des vidéos, sur les sujets que je ne pouvais aborder en cours, comme compléments, ou pour mettre à disposition des corrections d’examen, en fin de semestre. Plus rarement, des vidéos de parties de cours centrales, mais parfois, cependant, pour diffuser la connaissance, vulgariser les savoirs. Ensuite, à marche forcée, au moment de la pandémie, pour mettre en place des exercices à faire à distance. Cela aurait pu être des exercices classiques avec juste une zone de dépôt sur caseine pour un pdf ou un circuit, quitte à en faire ensuite une correction manuelle. Mais l’expérience de caseine dans la mise en place d’exercices auto-évalués (VPL) et un peu (beaucoup) de travail de mise au point ont permis l’intégration de Logisim à la plateforme et un début de travail de mise en place d’exercices associés à des circuits.

après 1 an et demi de pandémie, à la rentrée 2022, le cours de circuit sur caseine comportait donc des exercices sur de petits circuits logiques (combinatoires), puis quelques exercices classiques pour passer de ces petits circuits à de plus gros circuits (combinatoires) : l’additionneur, l’unité arithmétique et logique, les multiplexeurs et enfin deux séries d’exercices de circuits à mémoire, des exercices sur des automates, des exercices sur des circuits à flots de données, avec évaluation automatique. En comparaison du cours donné par moi en amphi ou pratiqué en TD, il manquait des séquences sur la réalisation des portes logiques (à partir des transistors) et des mémoires (bascule RS, etc.) et la fin du cours où automates et parties opératives (vue comme circuits à flot de données) sont assemblés avec de la mémoire (RAM) pour faire une architecture de von Neumann avec comme point final la mise en place d’un langage machine élémentaire interprété par l’automate : la réalisation d’un ordinateur.

pour mettre le tout sur caseine, c’était encore pas mal de travail, et je n’étais pas sûr de pouvoir le mener à bien ; en fait il fallait que je réalise un ordinateur (même simple) du début à la fin, à partir des transistors jusqu’au processeur. Malgré mes 32 années à en dessiner les parties, je n’avais jamais fait l’exercice complet, de bout en bout ! De plus, le projet n’était pas seulement de dessiner un ordinateur complet et fonctionnel mais de le faire dans l’optique d’une mise en place d’exercices (vpl) pour que des étudiants puissent le faire, eux-aussi. Là encore, des questions restaient à résoudre, comment découper certaines étapes qui semblaient trop complexes et trop vastes pour en faire des exercices réalisables. À vrai dire, en amphi ou en td, certaines de ces étapes sont faites ou même seulement parfois exposées par l’enseignant uniquement, apportées toutes faites comme abouties et à observer seulement, à comprendre tout au plus et non pas à refaire ou à découvrir comme dans un exercice. Parmi ces étapes qui ne correspondaient pas usuellement à des exercices, quelles productions demander à l’étudiant, comment évaluer cette production, comment la faire entrer dans le cadre usuel des évaluations avec caseine (de type test fonctionnel boite-noire).

essentiellement, cependant, tout était là, automates et circuits à flots de données, pour la partie haute, transistors pour la partie basse ; avec un peu de méthode et de réflexion, faire un ordinateur complet était possible. Et effectivement, en moins de 15 jours, le dessin d’une architecture PC-PO, puis d’une architecture de von Neumann a pris place, et dans les derniers jours un langage machine simple a été défini et interprété par un circuit. Pour finir, la semaine suivante, les parties manquantes, les portes logiques et les mémoires ont été mises en place. Et en plus cela marchait. Des programmes simples en langage machine pouvaient être définis et exécutés. Le tout sous forme d’exercices, cernant à chaque étape l’avancée fonctionnelle réalisée et proposant un exercice associé. Par exemple, pour la mise en place d’une architecture PC-PO en supposant que le travail sur les automates avait déjà eu lieu et qu’une PO générique était issue du travail sur les circuits à flots de données, l’exercice de réalisation d’un circuit de calcul du pgcd était proposé en demandant que sa réalisation soit effectuée en utilisant une PO générique (fournie) et en définissant et dessinant la PC adaptée. À travers le test du pgcd, c’est cette association et la PC qui est testée et validée.

ainsi, j’ai réalisé, moi-même, pour la première fois un ordinateur complet (turing-complet) et fonctionnel sous forme d’exercices qui permettront, je l’espère, aux étudiants de finir leur scolarité en pouvant dire qu’ils sont capable de faire, eux-mêmes aussi, un ordinateur complet qui tourne ; en tout cas, ils auront fait toutes les étapes, du transistor jusqu’à l’ordinateur :

  • les portes logiques à partir des transistors (*)
  • les premiers petits circuits combinatoires (*, *)
  • quelques circuits combinatoires classiques plus gros (*=>*, *=>*)
  • un peu de mémoire (*)
  • un automate simple (*)
  • un circuit à flot de données préalable à une PO (*)
  • un circuit composé d’une PC+PO (*)
  • un circuit composé d’une PC+PO et d’une mémoire (*)
  • un automate de contrôle pour interpréter un petit langage machine (*)
  • la programmation d’un algorithme avec ce petit langage machine (*)

Merci, vraiment merci, c’était un réel plaisir d’y arriver, merci donc à tous ceux qui m’ont permis de faire mon premier ordi, pour n’en citer que quelques uns/es : Michel Duprat, Jean-Michel Muller ; Paul Amblard, Philippe Waille, Fabienne Lagnier, Philippe Sicard ; Juan Carlos Rodríguez-del-Pino, Carl Burch ; Nadia Brauner, Nicolas Catusse, Guillaume Huard, Astor Bizard. C’est à dire, dans l’ordre, mes premiers enseignants, puis mes premiers collègues, ensuite ceux qui ont diffusé les outils que j’ai utilisés sur caseine (vpl et logisim) et enfin ceux de caseine.

 

 

mais, à propos, dites-moi, vous, avez-vous déjà eu l’occasion de faire ce grand voyage : du transistor à l’ordi ?

À la suite, je me suis demandé s’il pouvait y avoir d’autres projets de cette ampleur qui puisse structurer une scolarité : après avoir fait un ordinateur, faire un OS (avec la partie réseau), puis un compilateur et un SGBD ? (même réduits). Car à la sortie de ma scolarité, je n’ai pas non plus fait d’OS, ni un compilateur fonctionnel (il y avait des morceaux, mais pas tout) et encore moins un SGBD. Est-ce trop ambitieux, n’est-ce pas inutile, mais n’est-ce très tentant en même temps ? Pour avoir le sentiment que l’on maîtrise sa discipline. D’avoir vu de l’intérieur l’autre côté du monde numérique. Car ensuite, après sa scolarité, que risque-t-on de connaitre et explorer, l’univers applicatif surtout ? un peu au dessus de ces bases, à cette distance de la « vraie » grande image complète, sans pouvoir trop y revenir.

Validation d’exercices sur les circuits

En 2017-2018, j’avais le plaisir de découvrir

  • jupyter
  • moodle/vpl

depuis, les promesses se sont confirmées : ce sont des outils de grande qualité pour l’enseignement

 

En particulier,

Portables (téléphones)

Au départ, c’était pour pouvoir programmer en assembleur sur une machine qui exécute du ARM. En fait, je n’avais que mon téléphone (portable) à disposition (toutes les autres machines tournent avec Intel ou assimilé) donc j’ai cherché et trouvé CCTools.

A la suite, j’ai réaliser mes 2 premières applis pour portable (téléphone), dont une pour exécuter de l’assembleur (et comparer les temps d’exécution).

Depuis, dans la même veine, et parce que j’ai changer de portable, j’ai réussi à installer TermUX et UserLand pour continuer à accéder aux couches basses (et hautes) de la machine. [lancer Lxde ou Xfce sur un téléphone, mais pourquoi ?]

Et enfin, pour dessiner, j’ai testé plein d’applis (là encore, on peut se demander si c’est une bonne idée, si ce n’est pas mieux de rester sur un vrai ordi) :

[:fr]Vrac …[:]

[:fr]J’avais un site sous drupal pour voir comment cela marchait, mais il a disparu, voici qlq’un des posts :

 

Popularité – Vidéo

Submitted by bdenis on dim, 11/01/2015 – 09:34

Il doit y avoir une raison, entre mes deux dernières vidéos sur l’assembleur et le calcul en binaire (à la main), la plus populaire est la seconde :     Elle n’est pourtant pas « meilleure » techniquement, mais concerne un sujet probablement moins pointu …

**************************************

192 h * K * 2 = 35 h * (52-5) ?

Submitted by bdenis on lun, 01/04/2016 – 14:13

Petit calcul, trouver K tel que 192 h * K * 2 = 35 h * (52-5)

Réponse : k = 4. 28

**************************************

Le maximum, le minimum ?

Submitted by bdenis on ven, 04/15/2016 – 06:13

Sur machine, il y a souvent une limite de taille pour représenter les nombres et donc un entier maximum ($MAX$) et un entier minimum ($min$), à votre avis est-ce que : $min$ = – $MAX$ ?  sinon, il y a aussi des langages qui permettent de ne pas avoir cette limite, ce qui parfois ne les empèchent pas de définir $MAX$ et $min$, et aussi $MAX$+1, $MAX$+2, $MAX$+3, …  mais à propos, pour les langages qui ne font pas l’effort de proposer des entiers en précision infinie, que vaut $MAX$+1, $min$-1 ?

**************************************

FracTran

Submitted by bdenis on ven, 04/05/2013 – 13:26

Prenez un nombre ne se terminant ni par 5 ni par 0, tant qu’il est pair : multiplier ce nombre par 5/2, idem s’il est multiple de 3 le multiplier par 5/3. Qu’avez-vous fait ?     Des multiplications ? oui, mais pas seulement …  Des divisions ? oui, mais pas seulement …  Le calcul d’une suite de Syracuse ? non, je ne crois pas …  Par contre, je crois que vous avez aussi fait une addition ![:]

[:fr]Arm on Android ?[:]

[:fr]

Où programmer en ARM ?

réponse paradoxale : le plus facile, c'est de le faire sur son portable

La preuve : https://www.youtube.com/watch?v=BFMc5Ba9_cQ

[:]