Bien concevoir avec un FPGA

Le 01/05/2002 à 0:00 par La rédaction

Réussir une application à base de FPGA, c'est respecter un certain nombre de principes comme une bonne connaissance de la topologie du réseau logique programmable et l'adoption d'une méthodologie synchrone.

Dès l'origine, les FPGA, tels que Xilinx les a inventés, avaient la réputation de mettre à disposition de l'utilisateur une conception rapide, fiable et simple. Si cette réputation est totalement justifiée, les progrès technologiques ont permis, depuis, d'accéder à des matrices logiques programmables de plusieurs millions de portes. Cette complexité actuelle reste absolument gérable et permet la réalisation d'applications très performantes moyennant une bonne connaissance des ressources offertes et le respect d'une méthodologie de conception.

Malheureusement, certains concepteurs débutants, voyant dans la souplesse du programmable une possibilité infinie de corrections d'erreurs, dédaignent toute méthode et connaissent des échecs. Ces déboires, relevant de leur entière responsabilité, les amènent parfois à déclarer à tort que l'utilisation de certains FPGA haut de gamme est difficile. L'objet de cet article est de montrer que les adjectifs « simple » ou « difficile » sont hors de propos pour ce type de conception. C'est la réussite du projet qui est facile à obtenir si l'on suit avec sérieux et méthode un certain nombre d'étapes.

La haute densité des matrices de Xilinx n'est pas un obstacle car un jeu d'outils de développement accompagne efficacement l'utilisateur. Les quatre règles de base sont :

- bien connaître les caractéristiques du FPGA ciblé pour assurer son adéquation avec les besoins du projet ;
- respecter une méthodologie de conception et un style d'écriture ;
- opter pour des outils de synthèse de qualité ;
- maîtriser les outils d'implantation.

Autrement dit, il faut bien comprendre les possibilités offertes par le réseau logique programmable choisi ainsi que les moyens à mettre en œuvre pour en tirer le meilleur profit.

En nous appuyant sur différentes architectures de FPGA, nous allons décrypter les principales possibilités mises à la disposition des utilisateurs et les points qu'ils doivent absolument connaître et maîtriser, pas seulement pour concevoir simplement et rapidement, mais aussi pour réussir leurs conceptions. La démonstration de cette méthode de conception sera faite sur des FPGA Xilinx. Les familles proposées sont Spartan-II, Spartan-IIE, Virtex-E et Virtex-II.

Méthodologie de développement : vous avez dit synchrone ?

Il est important de rappeler quelques notions de base sur la méthodologie à adopter dans le cadre de conception d'électronique numérique. La citation suivante donne une idée assez précise des ennuis encourus si une certaine méthodologie de conception n'est pas prise en compte : « Les développements asynchrones peuvent ruiner votre projet, votre carrière professionnelle et même votre santé. Refusez simplement de concevoir en asynchrone… » Les conceptions asynchrones présentent facilement des défauts de fonctionnement aléatoires. Certaines d'entre elles manifesteront des problèmes de fonctionnement en température, d'autres liés au vieillissement du composant ou autres paramètres externes.

La figure 7a montre un des montages source d'asynchronismes et donc de fonctionnement aléatoire communément appelé « Gated clock ». Dans cet exemple, l'horloge est générée à partir d'une fonction combinatoire de plusieurs signaux. La sortie de cette fonction présentera des parasites qui pourront être interprétés par certaines bascules comme des fronts d'horloge ; d'où un fonctionnement non prédictible des bascules. De plus, dans ce type de montage, le signal de sortie de la logique combinatoire sera normalement routé par des ressources d'interconnexions générales. Le temps de propagation jusqu'à l'entrée des bascules présentera un décalage (skew) difficilement contrôlable. Ceci augmentera encore le risque de fonctionnement aléatoire. Dans l'exemple illustré sur la figure 7b, une fonction combinatoire va effectuer un « set » (ou un « reset ») asynchrone d'une ou plusieurs bascules. Comme dans toute fonction combinatoire, le signal de sortie ne sera généralement pas exempt de parasites, et des remises à « 1 » intempestives sont à prévoir.

Afin d'éviter ces problèmes très difficilement maîtrisables par des techniques d'implantation complexes et coûteuses, il est important d'adopter une méthodologie adéquate. Un développement fiable doit pouvoir être reproduit de manière totalement prédictible et indépendamment de la technologie utilisée qui évolue tous les jours. Il doit présenter un fonctionnement sans faille quelle que soit la fréquence de fonctionnement, du continu jusqu'à une fréquence limite, dans toute la plage active de l'application. Il se trouve que cette reproductibilité est particulièrement aisée à obtenir : il suffit pour cela de concevoir avec une méthodologie synchrone. Un développement (ou une partie de développement) synchrone est entièrement séquencé par une horloge. Celle-ci est distribuée sur des ressources spécialisées (buffer global ou BUFG, et arbres d'horloges associés), de manière à garantir la simultanéité parfaite des fronts sur tous les éléments destinataires. La figure 8 illustre quelques recommandations utiles pour une conception synchrone. Les bascules et autres éléments séquencés reçoivent l'horloge précisément au même moment, car celle-ci est distribuée par un arbre spécialisé, grâce au buffer global, lui-même automatiquement inféré par l'outil de synthèse sur l'analyse du code. Le set (ou reset) asynchrone n'est pas utilisé en cours de fonctionnement, mais seulement pour l'initialisation lors de la mise sous tension.

Lorsque deux modules travaillant dans des domaines d'horloges différents échangent des données, le concepteur devra prendre les précautions nécessaires pour s'assurer de la validité de l'interprétation des données par l'élément récepteur. La figure 9 expose l'une des manières de faire communiquer entre elles deux portions de circuit séquencées par des horloges asynchrones. Dans cet exemple, les échanges de données entre les deux domaines d'horloge s'effectuent par l'intermédiaire d'une mémoire Fifo. L'horloge CK2 est utilisée comme horloge d'écriture, alors que la lecture est séquencée par CK1. Les signaux « autorisation d'écriture » (WR-ENA) et « autorisation de lecture » (RD-ENA) sont respectivement générés à partir des horloges CK2 et CK1. L'asynchronisme entre les deux horloges est absorbé dans la Fifo. Sa profondeur devra prendre en compte les différences de cadence sur chacun des deux ports.

De nombreux autres cas de figure peuvent être envisagés. En tout état de cause, le passage d'informations d'un domaine d'horloge vers un autre devra faire l'objet d'une attention particulière pour assurer l'intégrité du transfert.

MVD

Edgard Garcia a créé la société MVD, spécialisée dans le traitement d'images et référence française en matière de FPGA Xilinx. Depuis de nombreuses années, MVD conçoit des FPGA en langage VHDL pour tous types d'applications, y compris le prototypage d'Asic.

Edgard Garcia

Performances et densités à la carte

Les différentes architectures de FPGA Xilinx sont Spartan-II, Spartan-IIE, Virtex-E et Virtex-II. Leurs caractéristiques principales sont :

Complexités allant de 15 000 à plus de 8 millions de portes.
Faible consommation.
Grande souplesse d'utilisation des entrées-sorties avec adaptation d'impédance (Virtex-II) et configuration en mode différentiel (Spartan-IIE, Virtex-E et Virtex-II).
Fonctions mémoire (distribuée et blocs de Ram).
Dispositifs de gestion des horloges (DLL et DCM).
Multiplieurs câblés (Virtex-II).

Et bien d'autres possibilités permettant d'optimiser à la fois la performance et la densité des fonctions logiques et/ou arithmétiques.

Comme le montre la figure ci-après sur l'organisation générale des FPGA Xilinx, l'essentiel des fonctions logiques sera implanté en CLB (blocs de logique configurable), eux-mêmes constitués de « slices ». Un « slice » comprend deux bascules D, de la logique combinatoire et arithmétique et/ou des fonctions de mémoire distribuée ou de registre à décalage. Suivant les familles, un CLB peut être constitué de deux ou quatre slices, c'est-à-dire qu'il peut comprendre jusqu'à huit bascules D, et, par exemple, 128 bits de mémoire ou des fonctions arithmétiques et/ou logiques.

Copy link
Powered by Social Snap