Recherche, industrie, informatique : Elaboration du langage Cassandre, 1966-1975 (11/12 - année 2021)
Publié par ACONIT (Association pour un Conservatoire de l'Informatique et de la Télématique), le 22 octobre 2021 1.8k
Illustration d'en-tête : couverture de la thèse d'état de Docteur es-sciences mathématiques soutenue par Jean MERMET à l'Université Scientifique et Médicale de Grenoble en 1973 (détail)
CASSANDRE
Chronologie et intervenants (Juillet 1966 – Septembre 1975)
Synthèse par Xavier HIRON (ACONIT), à partir d'un témoignage de Jean MERMET,
ancien directeur de recherches au CNRS. Business angel.
Cassandre est un Langage de Transferts entre Registres (RTL) dont la conception et la réalisation nécessitèrent des recherches approfondies, menées au sein de l’IMAG, laboratoire auquel Jean Mermet était, à l’époque, rattaché en tant que jeune ingénieur en informatique. Celui-ci témoigne, dans un article posté sur le site de l’ACONIT (*voir la version complète), des tenants et aboutissants de cette aventure qui dura environs dix ans
En Juillet 1966, Jean Mermet, jeune étudiant-chercheur en informatique, sort de l’ENSIMAG. Il connait et fréquente l’équipe du Pr. Jean Kuntzmann et avait déjà à son actif quelques publications. Ce dernier le présenta à M. Sokoloff, de la compagnie Thomson, au sujet d’une formule écrite en APL (A Programming Language), langage inventé par Kenneth Iverson (IBM). M. Sokoloff, séduit par la description formelle du système 360 en APL, souhaitait lancer une coopération avec le laboratoire IMAG pour la compilation d’un système digital.
Cette coopération prit la forme d’un contrat de la DGRST. Elle fut d’autant plus efficace que l’interlocuteur chez Thomson (branche Française CFTH-HB) était F. Lustman, jeune docteur ingénieur à l’IMAG. Elle commença par un examen critique d’APL, suivi d’une large étude bibliographique. Ce travail jeta les bases de CASSANDRE, langage synthétisant l’état de l’art en 1966-67, et de ses deux compilateurs : l’un destiné à produire un programme de simulation du système logique décrit dans ce langage, l‘autre conçu pour générer les circuits matérialisant ce système.
Bientôt se joindront à l’aventure F. Anceau, qui développa un simulateur CASSANDRE codé en langage assembleur 360, et P. Liddell, qui produisit une thèse de 3ième cycle sur la compilation en schémas logiques de CASSANDRE.
I- CASSANDRE, un langage RTL
En 1966, aucun langage HDL (Hardware Description Language) n’était commercialisé. L’industrie de l’EDA (Electronic Design Automation) n’allait surgir qu'au début des années 1980, avec la création, sur la côte ouest des USA, des sociétés MENTOR Graphics, DAISY Systems et VALID Logic. La conception assistée par ordinateur (CAO) des circuits consistait essentiellement à utiliser des formalismes graphiques aidant les concepteurs à placer et interconnecter sur les cartes de circuits imprimés les boitiers de composants de la technologie de l’époque, ainsi que des programmes de vérification des connections et d’optimisation du nombre de couches planaires. Les outils utilisés étaient des stations de travail graphiques (Computer Vision ou Calma) équipées de programmes adaptés au marché des circuits imprimés. De petites compagnies constituèrent leurs catalogues de composants. Certaines offrirent un modèle exécutable, sorte de simulateur qui permettait de vérifier le fonctionnement et les performances attendus à partir d’un prototype virtuel.
Il existait dès le milieu des années 1960, chez les fabricants comme IBM, Burroughs, DEC et CAE en France, des études ayant débouché sur l’emploi de langages de nature fonctionnelle et se plaçant à un haut niveau d’abstraction. Pour stocker l’information, les primitives utilisées n’étaient plus des variables simples mais des variables de type tableaux et des fonctions de complexité arbitraire, appelées registres.
Le fonctionnement de l’ensemble était synchronisé par une ou plusieurs horloges. Le postulat était que tout transfert d’un élément de type registre à un autre, quel que soit le nombre de couches des circuits combinatoires les séparant, pouvait s’effectuer entre deux impulsions d’horloges. Les langages offrant ce type de spécifications s’appelèrent RTL : Register Transfer Languages, ou langages de transferts entre registres. CASSANDRE (Conception Assistée et Simulation des Systèmes logiques, leur ANalyse, Description et REalisation) appartient à cette catégorie.
L’adoption des RTL par l’industrie fut longue, car elle allait changer la méthodologie de conception : de bottom up (du structurel au fonctionnel) à top down (du fonctionnel à une implantation par un compilateur de circuits logiques (hardware compiler)). S’agissant du seul moyen d’accompagner la croissance explosive de la complexité des circuits (voir ci-dessous), ce type d’outil fut l’un des objets de nos travaux avec CASSANDRE.
(En 1966, Moore n’avait pas encore énoncé sa loi empirique sur la croissance de la complexité des circuits (boutade restée vraie durant 50 ans). Mais on pouvait pressentir la complexité exponentielle des modèles associés : un circuit dont le nombre de transistors double tous les 18 mois pendant 50 ans en contient 2**33 ; une unité contenant une hiérarchie à 10 niveaux, chacun contenant aussi 10 unités, en contient 10 milliards. Les 2 nombres étant du même ordre de grandeur, cette hiérarchie doit être suffisamment bien construite pour autoriser un concepteur à travailler simultanément sur 3 à 4 niveaux voisins.)
Au début des années 1980, EFCIS, filiale du CEA-LETI travaillant sur ses propres projets (Hanczakowski), se vit proposer le hardware compiler Synopsys. Bien qu’à l’état de prototype, ce produit fut adopté par EFCIS. Cet épisode était révélateur de la raison d’être de l’industrie EDA. Les concepteurs de circuits devant concentrer leurs efforts face à une concurrence mondiale, il leur fallut externaliser cette technologie stratégique, quitte à la racheter ultérieurement. En la mutualisant avec leurs concurrents, ils se prémunissaient contre le risque de la voir disparaître. De plus, en organisant la concurrence au sein même de l’EDA, ils exerçaient une pression sur les prix, ce qui explique que cette niche technologique n’a jamais pesé plus de 1 à 2 % du marché de la microélectronique.
II- Caractéristiques du langage
Ces langages destinés à décrire des circuits électroniques hardware devaient se voir attribuer une sémantique hardware éloignée de celle des langages de programmation dont ils mimaient la syntaxe, mais présentant une sémantique algorithmique. Cette distinction étant, en 1966, encore confuse, elle suscita de nombreuses discussions sur l’usage du langage d’Iverson. S’ajoutait à cela le fait que la syntaxe choisie pour les premiers HDL, dont CASSANDRE fait partie, était de type Algol, donc éloignée d’APL. Néanmoins, certains opérateurs d’APL apportaient une concision et une puissance d’expression du parallélisme qui séduisaient.
En bref, les éléments primitifs de CASSANDRE sont : Unité, Registre, Signal, État.
- une Unité représente un module élémentaire du matériel décrit (entité structurelle). Elle peut contenir un réseau d’autres unités interconnectées dont chacune, à son tour, peut contenir un réseau d’unités. C’est donc une notion récursive qui définit une hiérarchie de modèles imbriqués. Les feuilles de cette hiérarchie sont des unités dont les contenus sont entièrement synthétisés. Une telle unité intégrant une importante fonction synthétisée testée et réutilisable dans d’autres conceptions serait aujourd’hui appelée IP.
Exemple de conception hiérarchique

Arbre d’imbrication de toutes les unités du Z0001 (outil David, Ménard)
- un Registre représente un tableau d’éléments de mémorisation. Ce peut être un vecteur, une matrice ou un vecteur de matrices. Chaque élément d’un registre a une sortie de type Signal et 3 entrées : une donnée, une horloge et une condition. Seule l’occurrence d’un signal d’horloge peut changer le contenu d’un registre en lui affectant la valeur de l’entrée donnée.
- un Signal représente une sortie de circuit combinatoire ou de registre. Il dénote les entrées donnée et condition d’un registre, ou l’opérande d’une fonction booléenne dans un circuit combinatoire. Un signal a donc la sémantique d’une connexion, dont la valeur est stabilisée en fin de cycle. Il ne peut être modifié par une horloge en mode synchrone. Toutefois, François Anceau utilisera en mode asynchrone un opérateur de dérivation permettant de fabriquer des horloges locales. Un signal peut être un tableau de dimensions quelconques.
- un Etat désigne « un état non encore encodé ». Chaque unité peut en effet présenter une structure de contrôle locale constituée d’une liste déclarée d’états et de transitions entre ces états, conditionnées ou non par des instructions. Un automate d’états fini contrôle son comportement. Au moment de la synthèse, un codage est créé pour cet ensemble d’états, ainsi qu’un registre pour stocker l’état courant de l’unité. En gardant la liberté d’implémentation du contrôle d’une unité, on se réserve la possibilité de réaliser un contrôle micro-programmé (chaque état devient l’adresse d’un mot d’une mémoire ROM), avec la liste des conditions qui en libèreront l’exécution. Cela ouvre le champ de la microprogrammation, de la compilation de microprogrammes et de l’optimisation des architectures. Ce domaine fut le champ le plus exploité de CASSANDRE dans l’industrie. Voir ci-dessous un exemple simple du style d’une description :
L’unité Z0001, sommet de la hiérarchie produite par le compilateur de circuits logiques Liddell-Fantino
Description en CASSANDRE d’un additionneur parallèle 16 bits

Génération en Algol d’un modèle simulable de l’unité ADD CASSANDRE