SynDEx-Ic

Présentation

SynDEx-Ic est un logiciel d'aide au prototypage  rapide d'applications temps réel qui permet la synthèse automatique de circuits ASIC et de circuits reconfigurables de type FPGA.  C'est un logiciel  libre développé à l'ESIEE par l'équipe "Conception d'architecture" du laboratoire A2SI, c'est une extension du logiciel SynDEx  de l'INRIA.

 Les architectures matérielles supportées actuellement par SynDEx sont des architectures de type "multiprocesseurs hétérogènes" (architectures basées sur des composants programmables à jeux d'instruction figé de type microprocesseurs, microcontrôleur, DSP, station de travail, utilisation d'ASIC dédiés). En générant du VHDL synthétisable, SynDEx-Ic, quand à lui, permet de couvrir les architectures basées sur des circuits dédiés de type ASIC et/ou FPGA.


SynDEx implémente la méthodologie Adéquation Algorithme Architecture développée à l'INRIA. Les travaux issus de deux thèses en collaboration avec l'INRIA (Ailton Dias, Linda Kaouane) ont permis d'étendre cette méthodologie aux architectures à base de circuits (reconfigurables ou non) : l'algorithme à implanter est spécifié sous la forme d'un graphe flot de données conditionné factorisé hiérarchique saisi à l'aide de l'interface graphique du logiciel. L'objectif est de trouver hors-ligne (i.e. avant l'exécution) une implantation de l'algorithme qui respecte une contrainte de latence donnée (durée d'exécution) tout en étant implantable sur le circuit ciblé (en terme de ressources utilisées, par exemple le nombre de CLB pour un FPGA).  Pour cela nous avons choisi de travailler sur la factorisation, c'est à dire dérouler plus ou moins les boucles : plus une boucle est déroulée, plus il y a de parallélisme, plus il est possible de diminuer la latence, mais en contrepartie la surface nécessaire à son implantation augmente. Il s'agit donc d'explorer les boucles et boucles imbriquées de façon à trouver pour chaque boucle le taux de défactorisation (taux de déroulage) qui  permet de respecter les contraintes d'exécution données. Comme il est impossible d'explorer toutes les possibilités de défactorisation dans des temps raisonnables, il faut utiliser des méthodes approchées basées sur des heuristiques. Nous avons développé plusieurs heuristiques capable de rechercher des taux de déroulage de boucles permettant de faire tenir l'application dans le circuit (contrainte de surface) tout en respectant la contrainte de latence spécifiée. Il s'agit d'heuristiques gloutones couplées avec des heuristiques de recuit simulé. Le résultat de l'heuristique est ensuite transformé en un code VHDL directement synthétisable pour être exécuté sur le composant cible ou bien pour être simulé.

Le schéma  ci-dessous illustre les différentes étapes du processus  de prototypage avec  SynDEx-Ic :



 


  1. Spécification :
  2. Choix et exécution d'une des heuristiques de SynDEx-Ic. Selon le niveau d'optimisation exigé et le temps disponible du concepteur, deux familles d'heuristique sont disponibles :
  3. Affichage de la prédiction de performance : ceci permet d'afficher les choix de défactorisation effectués par l'heuristique choisie et les durées d'exécutions calculées.
  4. Synthèse automatique du code VHDL correspondant aux choix d'implantation de l'heuristique. SynDEx-Ic génère l'ensemble du code VHDL nécessaire à l'exécution de l'algorithme spécifié initialement sous forme de graphe. Pour cela il a besoin, bien sûr, du code VHDL de chaque sommet du graphe, mais il est capable de synthétiser toute la partie de contrôle des partie répétées du graphe (boucles) et des parties conditionnées. Notons que nous générons un contôle réparti plutôt qu'un contrôle centralisé ce qui permet de rapprocher les unités dépendantes et ainsi minimier les surcout dû au routage et contrairons aux approches classiques notre chemin de contrôle n'est pas une machine à états monolithiques mais au contraire un ensemble de circuits combinatoires simples synthétisés automatiquement.
  5. Une fois le code généré, il est possible de simuler (étape 5) ou implanter ce code (étape 6) dans un FPGA.
Dernière mise à jour : 15 Avril 2008 par Thierry Grandpierre.