Apprendre à programmer pour les FPGA à l'aide de SystemVerilog. FPGA. Comprenons comment fonctionnent les circuits logiques programmables et pourquoi ils sont efficaces.Utiliser PLS dans les appareils modernes

FPGA (Programmable Logic Integrated Circuit) est un circuit intégré conçu pour construire des circuits numériques à partir d'une description dans un langage de programmation spécial. En d’autres termes, un FPGA est une puce qui semble contenir un tas d’éléments comme le 74HCxx. Quels seront exactement ces éléments logiques, quelles connexions il y aura entre eux et quelles connexions le circuit résultant aura avec le monde extérieur sont déterminés au stade de la programmation du FPGA.

Note: Autant que j'ai pu le découvrir, en russe aujourd'hui, les termes FPGA et FPGA (Field-Programmable Gate Array, User-Programmable Gate Array) sont considérés comme interchangeables, ce qui sera utilisé plus loin dans le texte. Cependant, il convient de connaître l'existence d'un point de vue alternatif, selon lequel le FPGA (FPGA) est l'une des variétés de FPGA (PLD, Programmable Logic Device).

Bases du FPGA

Pour programmer les FPGA, des langages de description matérielle (HDL, Hardware Description Language) sont utilisés. Parmi eux, les plus populaires sont Verilog (et ses dialectes, notamment SystemVerilog), ainsi que VHDL. Les langages sont similaires à bien des égards, mais ont une syntaxe différente et diffèrent sur certains détails. Si Verilog est le C du monde de la description matérielle, alors VHDL est donc Pascal. Autant que je sache, VHDL est un peu moins populaire, notamment en raison de sa verbosité par rapport à Verilog. Parmi les avantages du VHDL (ou les inconvénients, selon qui) on peut citer strict typage statique. Verilog autorise parfois la conversion de type implicite. Pour poursuivre l’analogie avec C et Pascal, les langages ne sont pas si différents qu’on ne puisse pas les apprendre tous les deux.

Sur ce moment Les principaux fabricants de FPGA sont Altera (désormais propriété d'Intel) et Xilinx. Selon des informations provenant de diverses sources, ils contrôlent ensemble au moins 80 % du marché. D'autres acteurs à noter sont Actel (acquis par Microsemi), Lattice Semiconductor, Quicklogic et SiliconBlue. Vous pouvez travailler avec le matériel Xilinx uniquement à partir de l'environnement de développement Xilinx (appelé Vivado), et l'environnement de développement Altra (appelé Quartus) ne comprend que le matériel Altera. C'est-à-dire un verrouillage complet du fournisseur, et lors du choix d'un FPGA spécifique pour votre projet, vous sélectionnez automatiquement les outils de développement du fabricant correspondant, leur soutien technique, la documentation, les conditions de licence logicielle, la politique concernant l'arrêt du support matériel, etc.

Les FPGA sont souvent utilisés dans des tâches pour lesquelles vous souhaitez accélérer considérablement certains calculs en les implémentant directement dans le matériel. Par exemple, les FPGA ont trouvé de nombreuses applications dans le domaine du traitement du signal, par exemple dans les oscilloscopes, les analyseurs de spectre, les analyseurs logiques, les générateurs de signaux, la radio définie par logiciel et même certains moniteurs. En particulier, LimeSDR utilise Altera Cyclone IV et l'oscilloscope Rigol DS1054Z utilise Xilinx Spartan-6, ainsi que ProASIC 3 d'Actel. D'autres applications dont j'ai entendu parler incluent la vision par ordinateur, la reconnaissance vocale et la bioinformatique. Il existe d'autres projets, notamment pour le développement de serveurs web et de SGBD fonctionnant sur FPGA. Mais, à ma connaissance, cette direction est encore très expérimentale.

Xilinx ou Altéra ?

Comme on dit, meilleur Linux celui que votre collègue gourou Linux utilise.

Mon ami, gourou du FPGA en la personne de Dmitry Oleksyuk, m'a conseillé de commencer par la carte de développement Arty Artix-7 de Digilent. Le FPGA utilisé est Artix-7 de Xilinx. Digilent lui-même ne livre pas en Russie, mais l'appareil est également disponible sur AliExpress, mais avec une majoration notable (le prix officiel est de 99 $). Il est également vendu sur eBay. Il s'agit d'une carte assez puissante, qui coûte néanmoins de l'argent tout à fait raisonnable.

Fait amusant! Si vous souhaitez simplement programmer en Verilog ou en VHDL, à proprement parler, vous n'avez pas besoin d'acheter de carte FPGA. Dans un premier temps, vous pouvez vous limiter à un simulateur dont le travail sera discuté ci-dessous.

L'une des caractéristiques intéressantes de la carte est la disposition des prises de manière compatible avec les blindages Arduino. La carte comprend également un insert avec lequel vous pouvez obtenir une licence pour Vivado, qui ouvre toutes ses capacités. La licence est valable un an à compter de l'activation et est également liée à un ordinateur par type de système d'exploitation et adresse MAC.

À la livraison. J'ai entendu dire que les appareils équipés de FPGA ont de fortes chances de ne pas passer la douane. La boutique AliExpress, dont j'ai fourni le lien ci-dessus, livre des planches en Russie via messagerie SPSR. Pour passer la douane, il était nécessaire de remplir un formulaire en ligne avec les données du passeport (données uniquement, pas de photo) et le numéro de téléphone du contact, comme l'exige la législation russe en vigueur. Après cela, la planche a été livrée par coursier directement à la porte sans aucune question posée.

Installation de Vivado

L'environnement de développement Vivado est disponible en téléchargement sur le site Xilinx. Préparez-vous mentalement au fait qu'avant de télécharger, vous devrez vous inscrire et remplir un formulaire assez détaillé vous concernant. Téléchargez l'archive intitulée « Vivado HLx 2017.2 : Téléchargement d'un seul fichier du programme d'installation du système d'exploitation ». Ne le confondez pas accidentellement avec certaines « Vivado Lab Solutions », ce n’est absolument pas ce dont vous avez besoin. L'archive pèse plus de 20 Go, il faut donc être patient.

Décompressez l'archive et exécutez le programme d'installation. Installez Vivado HL Édition Système. Sa version complète occupera 47 Go d'espace disque. Personnellement, j'ai décoché le kit de développement logiciel et laissé la prise en charge uniquement pour les appareils de la série 7, ce qui a réduit la taille à 12 Go. Avec un peu d'avance, je constate que cette configuration s'est avérée tout à fait suffisante.

Avant de lancer Vivado, vous devez y ajouter le support Arty Artix-7, car dès la sortie de la boîte, il ne sait rien de cette carte. Cela a fait quelque chose comme ceci :

cd ~/ opt/ xilinx/ Vivado/ 2017.2 / data/ boards/ board_files
wget https:// github.com/ Digilent/ vivado-boards/ archive/ master.zip
décompresser master.zip
mv vivado-boards-master/ new/ board_files/* ./
rm -r vivado-boards-master
rm master.zip

Nous téléchargeons et enregistrons également le fichier Arty_Master.xdc quelque part. Nous en aurons besoin plus tard. Le fichier contient une description des LED, des interrupteurs, etc. situés sur la carte. Sans cela, faire clignoter les LED sur Verilog ne sera pas facile.

Premier projet sur SystemVerilog

Dans Vivado, nous disons Fichier → Nouveau projet... Sélectionnez Projet RTL comme type de projet, cochez la case Ne pas spécifier les sources pour le moment. Dans la boîte de dialogue de sélection du type de carte, recherchez Arty dans la liste.

Tout d'abord, ajoutez le fichier XDC précédemment téléchargé au projet. Copiez-le dans le répertoire contenant le projet. Ensuite, nous disons Fichier → Ajouter des sources... → Ajouter ou créer des contraintes → Ajouter des fichiers, recherchez une copie du fichier, cliquez sur Terminer. Dans l'arborescence des fichiers du projet (Sources), dans le groupe Contraintes, le fichier Arty_Master.xdc, ou quel que soit le nom que vous avez donné à la copie, apparaîtra. Ouvrez-le et décommentez toutes les lignes des groupes Signal d'horloge, Commutateurs et LED.

Ensuite, nous disons Fichier → Ajouter des sources… → Ajouter ou créer des sources de conception → Créer un fichier. Dans le type de fichier, sélectionnez SystemVerilog, entrez quelque chose comme bonjour dans le nom du fichier. Nous disons Terminer. Ensuite, la boîte de dialogue Définir le module apparaîtra, qui vous invitera à cliquer sur l'interface du module. La boîte de dialogue est assez inutile, car il est plus pratique de faire la même chose directement dans le code, cliquez donc sur Annuler.

Dans l'arborescence des sources, nous trouvons nouveau fichier hello.sv, ce sera dans le groupe Design Sources. Ouvrez et écrivez le code suivant :

`échelle de temps 1ns/1ps

module bonjour(
logique d'entrée CLK100MHZ,
logique d'entrée [3 : 0] sw,
LED logique de sortie [3:0]
) ;

toujours @ (posedge CLK100MHZ)
commencer
si (sw[ 0 ] == 0 )
commencer
dirigé<= 4"b0001 ;
fin
autre
commencer
dirigé<= 4"b0000 ;
fin
fin

module final

Si tout a été fait correctement, à ce stade, Vivado ressemblera à ceci (cliquable, PNG, 71 Ko) :

L'élaboration du programme s'effectue en deux étapes : synthèse et mise en œuvre. Au stade de la synthèse, le programme est traduit en un circuit abstrait de portes logiques et d'autres éléments. Au stade de la mise en œuvre, une décision est prise sur la manière de flasher ce circuit dans un élément matériel spécifique.

Commençons la synthèse en disant Flow → Run Synthesis, ou simplement en appuyant sur F11. Dans le coin supérieur droit, vous verrez une indication indiquant que le processus est en cours. Cela peut prendre beaucoup de temps, selon votre ordinateur et la complexité du programme. Sur mon ordinateur portable, la synthèse du programme ci-dessus a été terminée en 10 secondes environ. Si vous dites maintenant Flow → Open Synthesized Design, vous pouvez voir une belle image comme celle-ci :

Il est temps de flasher notre tableau. Nous disons Flow → Run Implementation, puis Flow → Generate Bitstream. Nous connectons la carte à l'ordinateur via USB, dans Vivado nous disons Flow → Open Hardware Manager → Open target → Auto Connect → Program Device. Vous devrez spécifier le chemin d'accès au fichier bit. Pour moi c'était le suivant :

./first-project.runs/impl_1/hello.bit

Nous disons Programme. Désormais, la LED LD4 de la carte s'allume si l'interrupteur SW0 est abaissé (voir la photo de la carte ci-dessus). Si l'interrupteur est relevé, la LED ne s'allume pas. Simple, bien sûr, mais c’est « bonjour tout le monde », à quoi vous attendiez-vous ? :)

Simulation

La simulation est l'exécution virtuelle de code Verilog ou VHDL directement sur votre ordinateur, sans aucun FPGA. C'est à la fois un outil de débogage et une sorte de framework pour couvrir le code avec des tests.

Lorsque j’ai essayé la simulation, la première chose que j’ai découvert, c’est que cela ne fonctionnait pas pour moi. Les journaux étaient simples :

ERREUR : échec de la compilation du fichier C généré [...]xsim_1.c.

Pour cette erreur, Google n'a trouvé que toutes sortes d'absurdités du style « essayez de désactiver votre antivirus ». En conséquence, l'ajout de l'indicateur -v 2 au script ~/opt/xilinx/Vivado/2017.2/bin/xelab a aidé à résoudre le problème. Avec son aide, j'ai découvert que Clang, le binaire dont Vivado emporte avec lui, plante avec l'erreur suivante :

/a/long/path/to/clang : erreur lors du chargement des bibliothèques partagées :
libncurses.so.5 : impossible d'ouvrir le fichier objet partagé : aucun fichier de ce type ou
annuaire

Et cette erreur et sa solution sont déjà décrites sur Arch Wiki. Personnellement, je viens de copier un fichier déjà existant du répertoire Vivado_HLS :

cp ~/opt/xilinx/Vivado_HLS/2017.2/lnx64/tools/gdb_v7_2/libncurses.so.5\
~/opt/xilinx/Vivado/2017.2/lib/lnx64.o/libncurses.so.5

... après quoi tout a fonctionné. Alors maintenant, en fait, un exemple de simulation.

Par analogie avec la façon dont nous avons créé hello.sv précédemment, nous créons un nouveau fichier hello_sim.sv dans le groupe Sources de simulation. Dans le fichier nous écrivons le code suivant :

`échelle de temps 1ns/1ps

module bonjour_sim() ;
logique clck_t ;
logique [ 3 : 0 ] sw_t ;
logique [ 3 : 0 ] led_t ;

Bonjour hello_t(clck_t, sw_t, led_t) ;

début initial
clck_t<= 0 ;
sw_t<= 4"b0000 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
affirmer (led_t === 4"b0001 ) ;

Sw_t<= 4"b0001 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
affirmer (led_t === 4"b0000 ) ;
fin

module final

Dans l'arborescence source, cliquez avec le bouton droit sur le fichier et sélectionnez Propriétés du nœud source. Dans la section Utilisé dans, décochez les cases Synthèse et Implémentation. Nous ne voulons pas que des tests obstruent notre FPGA, loin d’être caoutchouteux, n’est-ce pas ?

Maintenant, nous disons Flux → Exécuter la simulation → Exécuter la simulation comportementale. En conséquence, vous verrez quelque chose comme ceci :

On voit que lorsque sw vaut zéro, led vaut un et vice versa. Dans ce cas, tous les changements se produisent au bord du signal d’horloge. Le programme semble fonctionner correctement. Eh bien, rien n'est tombé sur les affirmations, ce qui semble faire allusion.

Conclusion

L'archive avec le projet décrit ci-dessus peut être téléchargée. Je recommanderais les sources suivantes comme sources d’informations supplémentaires :

  • Si vous êtes intéressé par des détails sur le matériel, faites attention à

Imaginez que le processeur, au lieu d'exécuter un ensemble spécifique d'instructions, soit reconstruit pour chaque programme et transforme l'algorithme directement en matériel. C’est exactement ainsi que fonctionnent les FPG. Dans l'article d'aujourd'hui, je vais vous expliquer comment cela est possible et vous présenter diverses méthodes de conception de FPGA.

Pour commencer, vous devez comprendre un peu la logique numérique des puces ASIC, mais commencer avec elles est très difficile et coûteux, et il est préférable de commencer par les FPGA.

Qu’est-ce que le FPGA ?

FPGA signifie Field-Programmable Gate Array (réseaux de portes programmables par l'utilisateur, FPGA). Plus généralement, on les appelle FPGA – circuits intégrés logiques programmables.

À l'aide d'un FPGA, vous pouvez littéralement concevoir des microcircuits numériques tout en étant assis à la maison avec une carte de débogage disponible sur la table et un logiciel de développement pour plusieurs milliers de roubles verts. Mais il existe aussi des options gratuites. Attention : il s'agit de concevoir, pas de programmer, car en sortie nous obtiendrons un circuit numérique physique qui exécute un certain algorithme au niveau matériel, et non un programme pour le processeur.

Cela fonctionne comme suit. Il existe une carte de circuit imprimé prête à l'emploi avec un ensemble d'interfaces connectées à une puce FPGA installée sur la carte, quelque chose comme cette carte cool pour un centre de données ou cette carte de débogage pour la formation.

Jusqu'à ce que nous configurions le FPGA, il n'y a tout simplement aucune logique à l'intérieur de la puce pour traiter les données des interfaces et, par conséquent, bien sûr, rien ne fonctionnera. Mais à la suite de la conception, un firmware sera créé qui, après chargement dans le FPGA, créera le circuit numérique dont nous avons besoin. De cette façon, vous pouvez créer un contrôleur Ethernet 100G qui recevra et traitera les paquets réseau.

Une caractéristique importante du FPGA est sa reconfigurabilité. Disons que nous avons maintenant besoin d'un contrôleur Ethernet 100G et qu'en une semaine, la même carte peut être utilisée pour implémenter quatre interfaces Ethernet 25G indépendantes.

Il existe deux principaux fabricants de puces FPGA sur le marché : les célèbres Intel et Xilinx. Ils contrôlent 58 et 42 % du marché. Les fondateurs de Xilinx ont inventé leur première puce FPGA en 1985. Intel est entré sur le marché assez récemment - en 2015, après avoir absorbé Altera, fondée en même temps que Xilinx. Les technologies Altera et Xilinx sont similaires à bien des égards, tout comme les environnements de développement. J'ai travaillé plus souvent avec les produits Xilinx, alors ne soyez pas surpris par sa mention constante dans l'article.

Les FPGA sont largement utilisés dans divers domaines : électronique grand public, équipements de télécommunications, cartes accélératrices pour utilisation dans les centres de données, robotique, prototypage de puces ASIC. Je vais examiner quelques exemples ci-dessous.

Nous examinerons également la technologie qui permet la reconfiguration matérielle, nous familiariserons avec le processus de conception et examinerons un exemple simple de mise en œuvre d'un compteur matériel dans Verilog. Si vous disposez d'une carte de développement FPGA, vous devriez pouvoir la reproduire vous-même. S'il n'y a pas de carte, vous pouvez toujours vous familiariser avec Verilog en simulant le fonctionnement du circuit sur votre ordinateur.

Principe de fonctionnement du FPGA

Une puce FPGA est la même puce ASIC personnalisée, composée des mêmes transistors à partir desquels sont assemblés des bascules, des registres, des multiplexeurs et d'autres éléments logiques pour circuits conventionnels. Bien entendu, il est impossible de modifier l’ordre dans lequel ces transistors sont connectés. Mais sur le plan architectural, le microcircuit est construit de manière si intelligente qu'il est possible de modifier la commutation des signaux entre des blocs plus gros : ils sont appelés CLB - blocs logiques programmables.

Il est également possible de modifier la fonction logique exécutée par le CLB. Ceci est obtenu grâce au fait que la puce entière est imprégnée de cellules de mémoire de configuration de RAM statique. Chaque bit de cette mémoire contrôle une sorte de clé de commutation de signal ou fait partie de la table de vérité d'une fonction logique implémentée par le CLB.

Étant donné que la mémoire de configuration est construite à l'aide de la technologie Static RAM, d'une part, lorsque le FPGA est allumé, la puce doit être configurée, et d'autre part, la puce peut être reconfigurée un nombre presque infini de fois.

Structure de puce 2D très simplifiée sans mémoire de configuration

Les CLB sont situés dans une structure de commutation qui définit les connexions entre les entrées et les sorties des CLB.

Schéma de la matrice de commutation

A chaque intersection de conducteurs se trouvent six interrupteurs de commutation contrôlés par leurs propres cellules mémoire de configuration. En ouvrant certains et en fermant d'autres, vous pouvez fournir une commutation de signal différente entre les CLB.

BEC

CLB est très simplement constitué d'un bloc qui définit une fonction booléenne à partir de plusieurs arguments (on l'appelle Look Up Table, LUT) et d'un déclencheur (flip-flop, FF). Dans les FPGA modernes, la LUT dispose de six entrées, mais la figure en montre trois par souci de simplicité. La sortie de la LUT est transmise à la sortie CLB soit de manière asynchrone (directement) soit de manière synchrone (via une bascule FF fonctionnant sur l'horloge système).

Principe de mise en œuvre de la LUT

Il est intéressant de s’intéresser au principe d’implémentation des LUT. Ayons une fonction booléenne y = (a & b) | ~c. Son schéma de circuit et sa table de vérité sont présentés sur la figure. La fonction a trois arguments, elle prend donc 2^3 = 8 valeurs. Chacun d'eux correspond à sa propre combinaison de signaux d'entrée. Ces valeurs sont calculées par le programme de développement du micrologiciel FPGA et écrites dans des cellules mémoire de configuration spéciales.

La valeur de chaque cellule est transmise à son entrée du multiplexeur de sortie LUT, et les arguments d'entrée de la fonction booléenne sont utilisés pour sélectionner l'une ou l'autre valeur de la fonction. Le CLB est la ressource matérielle la plus importante du FPGA. Le nombre de CLB dans les puces FPGA modernes peut varier et dépend du type et de la capacité de la puce. Xilinx est décédé avec un nombre de CLB allant d'environ quatre mille à trois millions.

En plus du CLB, le FPGA contient un certain nombre d'autres ressources matérielles importantes. Par exemple, les unités matérielles à multiplication-accumulation ou les unités DSP. Chacun d'eux peut effectuer des opérations de multiplication et d'addition sur des nombres de 18 bits à chaque cycle d'horloge. Dans les cristaux haut de gamme, le nombre de blocs DSP peut dépasser 6 000.

Une autre ressource sont les blocs de mémoire interne (Block RAM, BRAM). Chaque bloc peut stocker 2 Ko. La capacité totale d'une telle mémoire, selon le cristal, peut atteindre de 20 Ko à 20 Mo. Comme les CLB, les BRAM et les blocs DSP sont connectés par une structure de commutation et s'étendent dans toute la puce. En interconnectant les blocs CLB, DSP et BRAM, des circuits de traitement de données très efficaces peuvent être obtenus.

Avantages du FPGA

La première puce FPGA créée par Xilinx en 1985 ne contenait que 64 CLB. À cette époque, l'intégration des transistors sur les puces était bien inférieure à ce qu'elle est aujourd'hui, et les appareils numériques utilisaient souvent des puces à « logique dispersée ». Il y avait des microcircuits séparés pour les registres, les compteurs, les multiplexeurs et les multiplicateurs. Un circuit imprimé spécifique a été créé pour un appareil spécifique, sur lequel ces microcircuits à faible intégration ont été installés.

L'utilisation du FPGA a permis d'abandonner cette approche. Même un FPGA avec un 64 CLB permet d'économiser considérablement de l'espace sur la carte de circuit imprimé, et la disponibilité de la reconfiguration a ajouté la possibilité de mettre à jour les fonctionnalités des appareils après la fabrication pendant le fonctionnement, comme on dit « sur le terrain » (d'où le nom - champ -réseau de portes programmables).

Étant donné que n'importe quel circuit numérique matériel peut être créé à l'intérieur d'un FPGA (l'essentiel est qu'il y ait suffisamment de ressources), l'une des applications importantes des FPGA est le prototypage de puces ASIC.

Le développement d'ASIC est très complexe et coûteux, le coût des erreurs est très élevé et la question des tests logiques est cruciale. Ainsi, l'une des étapes de développement, avant même de commencer les travaux sur la topologie physique du circuit, a été son prototypage sur une ou plusieurs puces FPGA.

Pour le développement des ASIC, des cartes spéciales sont produites contenant de nombreux FPGA connectés les uns aux autres. Le prototype de microcircuit fonctionne à des fréquences nettement inférieures (peut-être des dizaines de mégahertz), mais permet d'économiser sur l'identification des problèmes et des bugs.

Cependant, à mon avis, il existe des applications plus intéressantes des FPGA. La structure flexible du FPGA permet la mise en œuvre de circuits matériels pour le traitement de données parallèle et à grande vitesse avec la possibilité de modifier l'algorithme.


Comparaison des plates-formes matérielles

Pensons aux différences fondamentales entre CPU, GPU, FPGA et ASIC. Le CPU est universel, vous pouvez y exécuter n'importe quel algorithme, c'est le plus flexible et le plus simple à utiliser grâce au grand nombre de langages de programmation et d'environnements de développement.

Dans le même temps, en raison de la polyvalence et de l'exécution séquentielle des instructions du processeur, les performances diminuent et la consommation électrique du circuit augmente. Cela se produit parce que pour chaque opération arithmétique utile, le processeur effectue de nombreuses opérations supplémentaires liées à la lecture des instructions, au déplacement des données entre les registres et le cache, ainsi qu'à d'autres mouvements.

De l’autre côté se trouve l’ASIC. Sur cette plateforme, l'algorithme requis est implémenté matériellement en connectant directement des transistors ; toutes les opérations sont liées uniquement à l'exécution de l'algorithme et il n'y a aucun moyen de le modifier. D'où les performances maximales et la consommation d'énergie la plus faible de la plateforme. Mais il est impossible de reprogrammer l'ASIC.

À droite du CPU se trouve le GPU. Ces puces ont été conçues à l’origine pour le traitement graphique, mais sont désormais également utilisées pour l’exploitation minière informatique à usage général. Ils sont constitués de milliers de petits cœurs de calcul et effectuent des opérations parallèles sur un ensemble de données.

Si l'algorithme peut être parallélisé, le GPU peut alors atteindre une accélération significative par rapport au CPU. D'un autre côté, les algorithmes séquentiels seront moins bien implémentés, de sorte que la plate-forme s'avère moins flexible que le CPU. De plus, pour développer pour GPU, vous devez avoir des compétences particulières, connaître OpenCL ou CUDA.

Enfin, les FPGA. Cette plateforme combine l'efficacité des ASIC avec la possibilité de changer de programme. Les FPGA ne sont pas universels, mais il existe une classe d'algorithmes et de tâches qui afficheront de meilleures performances sur eux que sur un CPU ou même un GPU. La complexité du développement des FPGA est plus élevée, mais de nouveaux outils de développement réduisent cet écart.

L'avantage décisif des FPGA est la capacité à traiter les données dès leur arrivée avec un délai de réponse minimal. A titre d'exemple, on peut imaginer un routeur réseau intelligent doté d'un grand nombre de ports : lorsqu'un paquet Ethernet arrive sur l'un de ses ports, de nombreuses règles doivent être vérifiées avant de choisir un port de sortie. Vous devrez peut-être modifier certains champs du package ou en ajouter de nouveaux.

L'utilisation d'un FPGA permet de résoudre ce problème instantanément : les octets du paquet viennent tout juste de commencer à arriver sur la puce depuis l'interface réseau, et son en-tête est déjà en cours d'analyse. L'utilisation de processeurs ici peut ralentir considérablement la vitesse de traitement du trafic réseau. Il est clair que les routeurs peuvent avoir un ASIC personnalisé qui fonctionne le plus efficacement, mais que se passe-t-il si les règles de traitement des paquets doivent changer ? Seuls les FPGA peuvent atteindre la flexibilité requise combinée à des performances élevées.

Ainsi, les FPGA sont utilisés là où des performances de traitement de données élevées, un temps de réponse le plus court et une faible consommation d'énergie sont nécessaires.

FPGA dans le cloud

Dans le cloud computing, les FPGA sont utilisés pour des calculs rapides, l'accélération du trafic réseau et l'accès aux tableaux de données. Cela inclut également l'utilisation de FPGA pour le trading haute fréquence sur les bourses. Des cartes FPGA avec PCI Express et interface réseau optique fabriquées par Intel (Altera) ou Xilinx sont insérées dans les serveurs.

Les FPGA sont parfaits pour les algorithmes cryptographiques, la comparaison de séquences d'ADN et les tâches scientifiques telles que la dynamique moléculaire. Microsoft utilise depuis longtemps les FPGA pour accélérer le service de recherche Bing, ainsi que pour organiser le Software Defined Networking au sein du cloud Azure.

Le boom du machine learning n’a pas non plus épargné les FPGA. Xilinx et Intel proposent des outils basés sur FPGA pour travailler avec des réseaux neuronaux profonds. Ils vous permettent d'obtenir un firmware FPGA qui implémente un réseau particulier directement à partir de frameworks comme Caffe et TensorFlow.

De plus, vous pouvez essayer tout cela sans quitter votre domicile et en utilisant les services cloud. Par exemple, chez Amazon, vous pouvez louer une machine virtuelle avec accès à une carte FPGA et à tous les outils de développement, y compris l'apprentissage automatique.

FPGA à la pointe

Quelles autres choses intéressantes les FPGA font-ils ? Pourquoi ne font-ils rien ! Robotique, voitures autonomes, drones, instruments scientifiques, équipements médicaux, appareils mobiles grand public, caméras de vidéosurveillance intelligentes, etc.

Traditionnellement, les FPGA étaient utilisés pour le traitement numérique de signaux unidimensionnels (et concurrençaient les processeurs DSP) dans les radars et les émetteurs-récepteurs radio. Avec l'intégration et les performances croissantes des puces, les plates-formes FPGA sont de plus en plus utilisées pour le calcul haute performance, comme le traitement du signal 2D à la périphérie du cloud.

Ce concept est plus facilement compris en utilisant comme exemple une caméra de circulation avec reconnaissance de plaque d'immatriculation. Vous pouvez prendre une caméra avec la possibilité de transmettre une vidéo sur Ethernet et de traiter le flux sur un serveur distant. À mesure que le nombre de caméras augmente, la charge sur le réseau augmentera également, ce qui peut entraîner des pannes du système.

Au lieu de cela, il est préférable de mettre en œuvre la reconnaissance des plaques d'immatriculation sur un ordinateur installé directement dans le boîtier de la caméra vidéo et de transmettre les numéros de plaque d'immatriculation au cloud au format texte. Pour ce faire, vous pouvez même utiliser des FPGA relativement bon marché et à faible consommation d'énergie pour vous contenter d'une batterie. Parallèlement, il reste possible de modifier la logique de fonctionnement du FPGA, par exemple lors du changement de norme de plaque d'immatriculation.

Quant à la robotique et aux drones, il est particulièrement important dans ce domaine de remplir deux conditions : des performances élevées et une faible consommation d'énergie. La plateforme FPGA est idéale et peut être utilisée notamment pour créer des contrôleurs de vol pour drones. Ils fabriquent déjà des drones capables de prendre des décisions à la volée.

Développement de projet sur FPGA

Il existe différents niveaux de conception : bas, bloc et haut. Le bas niveau implique l'utilisation de langages comme Verilog ou VHDL, dans lesquels vous contrôlez le développement au niveau du transfert de registre (RTL). Dans ce cas, vous formez des registres, comme dans un processeur, et définissez des fonctions logiques qui modifient les données entre eux.

Les circuits FPGA fonctionnent toujours à des vitesses d'horloge spécifiques (généralement 100-300 MHz) et au niveau RTL, vous définissez le comportement du circuit jusqu'à la fréquence d'horloge du système. Ce travail minutieux aboutit à des conceptions aussi efficaces que possible en termes de performances, de consommation de ressources des puces FPGA et de consommation d'énergie. Mais cela nécessite de sérieuses compétences en conception de circuits, et même avec elles, le processus est lent.

Au niveau des blocs, vous êtes principalement engagé dans la connexion de gros blocs prêts à l'emploi qui remplissent certaines fonctions pour obtenir la fonctionnalité de système sur puce dont vous avez besoin.

À un niveau de conception élevé, vous ne contrôlez plus les données à chaque cycle d'horloge, mais vous vous concentrez plutôt sur l'algorithme. Il existe des compilateurs ou traducteurs du C et du C++ vers le niveau RTL, par exemple Vivado HLS. Il est assez intelligent et vous permet de traduire une large classe d'algorithmes au niveau matériel.

Le principal avantage de cette approche par rapport aux langages RTL est l'accélération du développement et surtout des tests de l'algorithme : le code C++ peut être exécuté et vérifié sur un ordinateur, ce qui sera beaucoup plus rapide que de tester les changements d'algorithme au niveau RTL. Bien sûr, vous devez payer pour la commodité - le système n'est peut-être pas aussi rapide et nécessitera plus de ressources matérielles.

Nous sommes souvent prêts à payer ce prix : si nous utilisons correctement le traducteur, l'efficacité n'en souffrira pas beaucoup et les FPGA modernes disposent de suffisamment de ressources. Dans notre monde où l’indicateur time to market est critique, cela s’avère justifié.

Vous devez souvent combiner les trois styles de développement en une seule conception. Disons que nous devons créer un appareil que nous pourrions intégrer à un robot et lui donner la capacité de reconnaître des objets dans un flux vidéo - par exemple des panneaux de signalisation. Prenons une puce de capteur vidéo et connectons-la directement au FPGA. Pour le débogage, nous pouvons utiliser un moniteur HDMI, également connecté au FPGA.

Les images de la caméra seront transmises au FPGA via une interface clairement définie par le fabricant du capteur (l'USB ne fonctionne pas ici), traitées et affichées sur le moniteur. Pour traiter les images, vous aurez besoin d'un framebuffer, généralement situé dans la mémoire DDR externe installée sur une carte de circuit imprimé à côté de la puce FPGA.


Schéma fonctionnel typique d'une conception FPGA

Si le fabricant du capteur vidéo ne fournit pas d'interface IP pour notre puce FPGA, nous devrons alors l'écrire nous-mêmes en RTL, en comptant les cycles d'horloge, les bits et les octets conformément à la spécification du protocole de transfert de données. Nous prendrons très probablement les blocs prêts à l'emploi Preprocess, DDR Controller et HDMI IP et connecterons simplement leurs interfaces. Et nous pouvons écrire le bloc HLS, qui recherche et traite les données entrantes, en C++ et le diffuser à l'aide de Vivado HLS.

Très probablement, nous aurons toujours besoin d'une sorte de bibliothèque prête à l'emploi d'un détecteur et d'un classificateur de panneaux routiers, adaptée pour être utilisée dans un FPGA. Dans cet exemple, bien sûr, je présente un organigramme de conception très simplifié, mais il reflète correctement la logique de fonctionnement.

Examinons le chemin de conception depuis l'écriture du code RTL jusqu'à l'obtention d'un fichier de configuration à charger dans le FPGA.

Chemin de conception

Vous écrivez donc du code RTL qui implémente le circuit souhaité. Avant de le tester sur du matériel réel, vous devez vous assurer qu'il est correct et qu'il résout correctement le problème requis. Pour ce faire, la modélisation RTL est utilisée dans un simulateur sur ordinateur.

Vous prenez votre circuit, présenté uniquement en code RTL pour l'instant, et le placez sur un banc virtuel, où vous appliquez des séquences de signaux numériques aux entrées du circuit, enregistrez les diagrammes de sortie, les dépendances temporelles des signaux de sortie et comparez eux avec les résultats escomptés. Habituellement, vous trouvez des erreurs et revenez à l'écriture de RTL.

Ensuite, le code logiquement vérifié est transmis en entrée au programme du synthétiseur. Il convertit une description textuelle du circuit en une liste chaînée d'éléments numériques de la bibliothèque disponible pour une puce FPGA donnée. Cette liste affichera des éléments tels que les LUT, les déclencheurs et les connexions entre eux. A ce stade, les éléments ne sont pas encore liés à des ressources matérielles spécifiques. Pour ce faire, vous devez imposer des contraintes sur le circuit - en particulier, spécifier à quelles broches d'E/S physiques de la puce FPGA les entrées et sorties logiques de votre circuit sont connectées.

Ces contraintes nécessitent également que vous spécifiiez à quelles vitesses d'horloge le circuit doit fonctionner. La sortie du synthétiseur et le fichier de contraintes sont envoyés au processeur d'implémentation, qui gère, entre autres, Place et Route.

Le processus Place lie chaque élément encore anonyme de la netlist à un élément spécifique à l'intérieur de la puce FPGA. Ensuite, le processus Route commence son travail, qui tente de trouver la connexion optimale de ces éléments pour la configuration correspondante de la matrice de commutation FPGA.

Place et Route fonctionnent en fonction des contraintes que nous avons placées sur le circuit : broches d'E/S et vitesse d'horloge. La période d'horloge a une très forte influence sur la mise en œuvre : elle ne doit pas être inférieure au retard sur les portes logiques du circuit critique entre deux bascules successives.

Souvent, il n'est pas possible de satisfaire immédiatement à cette exigence, et il faut alors revenir à l'étape initiale et modifier le code RTL : par exemple, essayer de réduire la logique dans la chaîne critique. Une fois la mise en œuvre terminée avec succès, nous savons quels éléments vont où et comment ils sont connectés.

Ce n'est qu'après cela que le processus de création d'un fichier binaire du micrologiciel FPGA démarre. Il ne reste plus qu'à le charger sur du matériel réel et à vérifier s'il fonctionne comme prévu. Si des problèmes surviennent à ce stade, cela signifie que la modélisation était incomplète et que toutes les erreurs et lacunes n'ont pas été éliminées à ce stade.

Vous pouvez revenir à l'étape de simulation et simuler une situation d'urgence, et si cela ne fonctionne pas, en dernier recours, un mécanisme de débogage est fourni directement dans le matériel de travail. Vous pouvez spécifier les signaux que vous souhaitez suivre au fil du temps, et l'environnement de conception générera des circuits d'analyse logique supplémentaires qui se trouveront sur la puce à côté de votre conception, se connecteront aux signaux qui vous intéressent et stockeront leurs valeurs au fil du temps. . Les chronogrammes enregistrés des signaux souhaités peuvent être téléchargés sur un ordinateur et analysés.

L'article tente de déterminer la composition de la documentation d'accompagnement pour les modules numériques développés pour les circuits intégrés logiques programmables (FPGA). Les développeurs doivent fournir cette documentation d'accompagnement au consommateur/client pour une utilisation ultérieure réussie du module numérique développé dans leurs projets au stade de la conception des appareils numériques sur le FPGA.

Introduction

Alors, quel type de documentation de conception doit-on demander au développeur si l'entreprise cliente ou un autre développeur utilisera par la suite un appareil développé « étranger » dans ses projets ? Cet article peut servir de « aide-mémoire » afin d'émettre d'abord correctement les spécifications techniques pour le développement d'un appareil numérique pour FPGA, puis de demander au développeur une documentation de conception pour un appareil numérique déjà développé. Sur la base d'une expérience antérieure de travail avec la documentation de conception, une entreprise ou une société utilise généralement les normes et documents réglementaires suivants :

  • GOST 2.102-68 ESKD. Types et exhaustivité des documents de conception.
  • GOST 15.101-98. Système de développement et de lancement de produits en production. La procédure à suivre pour effectuer des travaux de recherche.
  • GOST R 15.201-20-00. Système de développement et de lancement de produits en production. Produits à usage industriel et technique. La procédure de développement et de mise en production des produits.

En règle générale, il s'agissait de fichiers de firmware et d'un programme (description d'un appareil numérique en VHDL/Verilog ou d'un ensemble de circuits numériques développés dans un éditeur de circuits utilisant des éléments de bibliothèque de logique numérique, tels que des bascules, des registres, des compteurs, des décodeurs). , etc.) sur CD ou DVD et instructions de programmation. C'est tout.

L’auteur, par exemple, a été confronté au problème suivant. L'un des employés a développé un dispositif numérique multimodule complexe. J'ai décrit tous les modules en VHDL, et regardé les cyclogrammes de fonctionnement de ces modules et de l'appareil numérique dans son ensemble sur un oscilloscope bon et coûteux. Il ne connaissait pas les fichiers Test Bench et la possibilité de réaliser des simulations ou ne savait pas comment les écrire ; d'ailleurs, il n'y avait pas non plus de commentaires sur le projet et sur les descriptions des modules. La situation peut être encore pire si les modules sont représentés par des circuits numériques conçus dans un éditeur de circuits à partir d'éléments de bibliothèque. C'est ici que réside l'un des principaux inconvénients : outre le développeur lui-même, il est peu probable que quelqu'un d'autre comprenne cet appareil numérique, surtout si le projet est multi-module et que la description de chaque module comporte plus de 100 lignes ou plus d'un moniteur. écran. Cela signifie que si un autre développeur souhaite introduire un tel dispositif numérique déjà développé pour FPGA dans un nouveau développement ou projet, il devra à nouveau consacrer du temps à développer ce dispositif numérique.

Historique du problème de conception des FPGA

Actuellement, le marché des FPGA est l'un des plus dynamiques. Les FPGA sont utilisés dans de nombreuses industries. À l'heure actuelle, il n'existe pas de méthodologie univoque qui satisfasse tous les développeurs de matériel pour obtenir la configuration FPGA basée sur le modèle fonctionnel de l'appareil au niveau du système. L'approche la plus populaire pour résoudre ce problème est l'utilisation de la technologie de base IP (Intellectual Property Cores). Les cœurs IP sont des composants prêts à l'emploi qui facilitent leur intégration dans votre propre projet pour créer un système plus complexe. Cette approche présente un inconvénient important : la fixation des noyaux IP à la base élémentaire. Chaque cœur IP est optimisé pour une série spécifique de puces d'un fabricant spécifique, ce qui altère considérablement la capacité de transférer des appareils déjà créés d'une base d'éléments à une autre. La nature fermée des architectures CAO commerciales rend impossible l'ajout de vos propres modèles d'appareils fonctionnels au niveau du système pour dériver des modèles d'appareils au niveau du transfert de registre (RTL) sur leur base. Le développement d’un module numérique est réalisé sous la forme d’un circuit numérique dessiné dans un éditeur de circuits utilisant la bibliothèque CAO intégrée au fabricant d’éléments de base du circuit, tels que des bascules, des décodeurs, des compteurs, des additionneurs, etc.

Une autre approche populaire qui permet la transition d'un modèle fonctionnel au niveau du système à un modèle de périphérique au niveau du transfert de registre est l'utilisation de langages de conception au niveau du système (SLDL). Ces langages incluent SystemC, Handel-C, VHDL, Verilog, System Verilog. Le principal avantage est l'indépendance par rapport à la base matérielle dans laquelle l'appareil sera implémenté.

Ainsi, d'une part, en utilisant la technologie de base IP, le développeur de matériel reçoit une solution de haute qualité, mais strictement liée à la base matérielle dans laquelle l'appareil est implémenté. D'un autre côté, lors de l'utilisation de langages de description de matériel au niveau du système, l'implémentation du périphérique est indépendante du matériel. De ce qui précède, il s'ensuit qu'il est actuellement important d'utiliser conjointement le langage de description du matériel et les cœurs IP du fabricant (Xilinx, Altera, Actel, etc.) et de sociétés de développement tierces pour accélérer le processus de conception des modules numériques. Lors de l'utilisation de modules numériques de fabricants tiers, il arrive parfois qu'il y ait un manque d'informations dans la documentation d'accompagnement.

Fournir des informations sur le module numérique développé pour FPGA

Selon la méthodologie d'obtention de la configuration FPGA basée sur le modèle fonctionnel de l'appareil au niveau système, le développeur peut distinguer les types de modules numériques suivants pour le FPGA :

  • Logiciel - un module numérique développé, transmis au consommateur sous forme de description dans le langage de description matérielle (VHDL, Verilog) et/ou développé dans l'éditeur schématique pour une utilisation ultérieure dans des programmes de synthèse automatisée de circuits logiques et optimisé pour les paramètres fonctionnels .
  • Micrologiciel - un module numérique développé par un développeur tiers, appelé noyau IP, transmis au consommateur sous la forme d'un circuit logique (netlist) basé sur la bibliothèque d'éléments logiques du fabricant de FPGA et optimisé pour les paramètres fonctionnels et électriques.

Au stade de l'élaboration de la documentation, sur la base de l'expérience personnelle, il est nécessaire d'établir, en plus de la documentation de conception et des spécifications habituelles réalisées conformément à GOST 15.101, GOST 15.201, GOST 2.102, GOST 2.114, une documentation pour tous les types de modèles (système, logique, ingénierie des circuits) créés aux étapes de conception d'appareils numériques sur FPGA.

En d'autres termes, l'ensemble de la documentation de conception d'un appareil numérique pour FPGA, en plus du fichier du firmware, des instructions de programmation et d'un projet enregistré sur CD/DVD, doit également inclure la documentation d'accompagnement.

Tableau. Liste des sections de la documentation d'accompagnement

Section titre Voir
Logiciel Micrologiciel
informations générales
Objectif et portée À PROPOS R.
Caractéristiques À PROPOS À PROPOS
Description des signaux de réinitialisation À PROPOS À PROPOS
Description des signaux de synchronisation À PROPOS À PROPOS
Description des interfaces À PROPOS R.
Chronogrammes R. À PROPOS
Description des registres de contrôle À PROPOS À PROPOS
Schéma structurel (fonctionnel) R. R.
Guide de programmation À PROPOS À PROPOS
Modèle ou famille FPGA,
fabricant de l'entreprise
R. À PROPOS
Présentation du module numérique
pour la conception logique sur FPGA
Modèle RTL À PROPOS Non
Modèle logique Non À PROPOS
Contraintes de conception À PROPOS À PROPOS

Voici une liste des sections (tableau) qui devraient être incluses dans la documentation d'accompagnement d'un projet de module numérique pour FPGA. Pour chaque section, des signes de la nécessité d'inclure la section dans l'ensemble des documents sont indiqués :

  • « O » est une section obligatoire ;
  • « P » est la section recommandée pour la livraison.

Les formats de fichiers recommandés pour soumettre les pièces justificatives sont MS Word, PDF (meilleur format) et HTML. Les fichiers de description en langage de description matériel (VHDL, Verilog) et/ou développés dans Schematic Editor sont fournis sous la forme requise par le logiciel de CAO pour le développement. Une exception peut être la mise à disposition supplémentaire au format graphique (JPEG, BMP) des fichiers de circuits numériques développés dans l'éditeur schématique.

informations générales

Cette section décrit les informations générales sur le module numérique développé sous forme de description :

  • diagramme fonctionnel et ses blocs/pièces constitutifs ;
  • signaux de réinitialisation, synchronisation ;
  • interfaces appliquées ;
  • registres de contrôle;
  • diagramme temporel;
  • la programmation.

Objectif et portée

L'objectif du module numérique et ses domaines d'application sont déterminés.

Caractéristiques

Une description de ses principales caractéristiques techniques est fournie, telles que les performances, la consommation électrique d'une puce FPGA spécifique, le nombre de portes occupées et le type de puce FPGA utilisée. De plus, le logiciel de CAO du fabricant du FPGA utilisé dans le développement du module numérique et le logiciel utilisé pour la modélisation et la vérification sont indiqués. Pour tous les programmes utilisés, la version et les mises à jour installées sont indiquées. Une représentation graphique du module numérique sous la forme d'une « boîte noire » est fournie avec la désignation des entrées/sorties externes et une brève description de leur fonction est donnée.

Description des signaux de réinitialisation

Les détails des signaux de réinitialisation sont donnés ci-dessous :

  • Liste des signaux de réinitialisation externes et internes.
  • Paramètres de synchronisation et chronogrammes des signaux de réinitialisation.
  • Les circuits permettant de générer des signaux de réinitialisation internes, le cas échéant, font partie du module numérique.
  • Relations avec d'autres signaux (notamment les signaux de synchronisation).

Description des signaux de synchronisation

Voici les détails sur les signaux de synchronisation :

  • description des signaux de synchronisation externes ;
  • paramètres de synchronisation des signaux de synchronisation ;
  • description des signaux de synchronisation internes et du schéma de leur génération ;
  • les relations temporelles entre les signaux de synchronisation provenant de différentes sources ;

Description des interfaces

Les caractéristiques d'utilisation de toutes les interfaces incluses dans le module numérique développé sont données, de préférence unifiées pour organiser l'interaction avec d'autres nœuds du système sur une puce. De plus, un lien Internet vers une description complète de l'interface standard est fourni, ou une description de l'interface elle-même est fournie. À l'heure actuelle, les interfaces de bus AMBA, PLB et Wishbone sont acceptées comme interfaces unifiées pour les modules numériques.

Chronogrammes

Les informations nécessaires sont fournies pour organiser l'échange de données via les interfaces et autres entrées/sorties du module numérique : représentation graphique des chronogrammes, description des protocoles de transfert de données, exigences en matière de signaux externes fournis au module numérique (durée, fréquence, etc.) , et d'autres informations.

Description des registres de contrôle

Une description de tous les registres de contrôle du module numérique est fournie. Une description typique du registre de contrôle contient le nom du registre, l'adresse du registre dans l'espace d'adressage interne, la valeur initiale après la suppression du signal de réinitialisation, le type d'accès (lecture/écriture) et une description des champs internes.

Schéma structurel (fonctionnel)

Une image de la structure interne des connexions des principaux nœuds/blocs internes du module numérique est fournie, ainsi que leur brève description textuelle. De plus, une description des principaux blocs internes du module numérique est donnée. Ce document a pour objectif de fournir au consommateur les informations nécessaires à la compréhension des principes de fonctionnement du module numérique.

Le nombre de blocs décrits et l'étendue de la description sont déterminés par le développeur du module numérique. Il est préférable que le nombre minimum de modules décrits corresponde au nombre d'éléments du schéma structurel (fonctionnel) du module numérique.

Une description typique de l’unité intérieure contient :

  • but du bloc ;
  • schéma structurel (fonctionnel) du bloc (si nécessaire);
  • modes de fonctionnement et algorithmes ;
  • diagrammes du temps de travail;
  • organisation de la gestion des blocs ;
  • organisation de la communication avec d'autres blocs ;
  • toute autre information.

Guide de programmation

Fournit toutes les informations nécessaires sur le processus de programmation à l'aide du logiciel de CAO du fabricant du module numérique dans le FPGA, les outils requis pour le développement et le débogage de logiciels, ainsi que les bibliothèques de logiciels.

Modèle ou famille de FPGA, fabricant

Pour le micrologiciel d'un module numérique, le fabricant du FPGA, le modèle ou la famille de FPGA et ses caractéristiques de vitesse sont indiqués. Pour le module numérique Logiciel, des informations sont fournies sur la quantité de ressources occupées et les exigences du FPGA utilisé.

Représentation d'un module numérique pour la conception logique

L'article discutait des difficultés liées à l'utilisation d'un projet « étranger » en VHDL - le manque de directives appropriées pour la dénomination et de règles pour l'écriture de programmes. Des directives générales sur les noms, les bonnes manières d'écrire des programmes et des directives de synthèse ont également été données. Ces questions doivent être discutées de manière aussi détaillée que possible avec le développeur si, à l'avenir, vous envisagez de poursuivre le développement ou la mise à niveau par vous-même, avant qu'il ne commence à développer le modèle RTL du module numérique sur le FPGA. Cela s'applique particulièrement au type de module numérique logiciel sur FPGA. Cette partie de l'article décrit les exigences générales pour l'ensemble du projet du module numérique développé sur FPGA. Voici les points auxquels vous devez prêter attention lors de l'élaboration des spécifications techniques pour le développement d'un module numérique sur un FPGA, et cela concerne notamment le transfert des résultats des travaux.

Modèle RTL

Un module numérique, décrit dans un sous-ensemble synthétisé du langage Verilog ou VHDL et/ou développé dans l'éditeur schématique, est destiné à être utilisé au stade de la synthèse logique FPGA. Livré au Logiciel sous la forme d'un projet de module numérique assemblé dans le logiciel de CAO du fabricant de FPGA. Pour le module de micrologiciel numérique, le modèle RTL est fourni dans le cadre d'un accord séparé.

En plus des fichiers de modèles RTL, sont transmis :

  • Instructions d'utilisation du modèle.
  • Description des blocs de mémoire inclus dans le modèle, y compris le type de mémoire, la taille, le nombre de blocs de mémoire, le nom hiérarchique du bloc de mémoire.
  • Description du processus de création de noyaux prêts à l'emploi à l'aide de programmes pour les créer (par exemple, CoreGenerator pour Xilinx ISE). En l’absence de descriptions, il peut y avoir des limites à la refonte et à l’application en raison de la dépendance technologique et du fabricant.
  • Dans le cas de l'utilisation d'un microprocesseur d'un fabricant (par exemple, d'Altera - processeur Nios ; de Xilinx - Microblaze, microprocesseurs PowerPC), une description du processus de configuration du cœur du processeur et de ses périphériques est requise.
  • Un ensemble de tests (fichiers Test Bench) de vérification et de simulation d'un module numérique, écrits en Verilog et/ou VHDL et/ou System Verilog.
  • Toute autre information complémentaire.

Modèle logique

Le modèle est une liste de circuits décrits à l'aide des langages Verilog ou VHDL sur la base de la bibliothèque du fabricant du FPGA, et est fourni pour le Firmware du module numérique.

Outre les fichiers du modèle logique, sont transmis :

  • Instructions pour l'utilisation de ce modèle.
  • Un ensemble de tests (fichiers Test Bench) de vérification et de simulation d'un module numérique, écrits en Verilog et/ou VHDL et/ou System Verilog.
  • Guide pour travailler avec un ensemble de tests pour la modélisation et la vérification d'un module numérique.
  • Toute autre information complémentaire.

Contraintes de conception

Les contraintes de conception sont fournies sous forme de fichier décrivant un ensemble de contraintes imposées au module numérique lorsqu'il est inclus dans le modèle logique du système sur puce. Cet ensemble comprend des contraintes d'horloge, des contraintes de synchronisation, des restrictions sur l'interaction du module numérique avec d'autres modules et des conditions de fonctionnement du module numérique. Le format Synopsis Design Constraints (SDC) ou le format CAO du fabricant du FPGA est préféré.

Un exemple de liste de restrictions pour les signaux de synchronisation :

  • diagramme temporel (forme d'onde d'horloge);
  • instabilité de la fréquence d'horloge (Jitter);
  • changer la phase de fréquence d'horloge ;
  • durée des temps de commutation (Temps de transition) ;
  • des chronogrammes de formes d'onde d'horloge dérivées ;
  • toute autre information complémentaire.

Un ensemble de restrictions pour les signaux de synchronisation est requis pour les modules numériques logiciels et micrologiciels.

Exemple de liste de restrictions horaires :

  • Heures d'arrivée aux entrées ;
  • heure d'apparition des signaux aux sorties (temps requis aux sorties) ;
  • Pistes multicyclables ;
  • de faux chemins ;
  • durée des temps de commutation des signaux de données (Temps de transition des signaux de données) ;
  • toute autre information complémentaire.

Conclusion

L'ensemble suivant de documentation d'accompagnement pour les modules numériques développés pour les FPGA est fourni par accord entre le consommateur et le développeur. Le plus souvent, le développeur fournit simplement un module numérique décrit en VHDL, Verilog, System Verilog et/ou développé dans un éditeur de circuits. Concernant la documentation complémentaire, la réponse du développeur est le plus souvent la suivante : « Le module numérique fonctionne, alors prenez-le et utilisez-le. Il n’y a rien de compliqué à décrire le circuit en langage matériel : vous pouvez le découvrir vous-même.

De l'avis de l'auteur, on peut tout comprendre, tout dépend de l'envie et du temps passé, et le temps passé à comprendre le projet de « quelqu'un d'autre » pour un module numérique déjà développé est directement proportionnel à l'expérience de description d'équipement en VHDL, Verilog et connaissances sur les circuits numériques et à microprocesseur. Cela peut être évité si vous êtes d'abord d'accord avec le développeur sur la composition de la documentation d'accompagnement, l'utilisation du module numérique dans votre projet deviendra alors plus facile et sa mise en œuvre se fera plus rapidement.

Pour résumer, l'auteur souhaite noter que lors de la formulation de la tâche de développement d'un appareil numérique sur un FPGA, il convient de respecter les recommandations données dans l'article, afin qu'aucun problème ne se pose lors de la réutilisation ou de la mise à niveau d'un appareil numérique précédemment développé.

Littérature

  1. Denisov A. Quelques conseils pour concevoir des appareils numériques sur VHDL pour FPGA // Composants et technologies. 2009. N° 12.
  2. GOST 2.102-68 ESKD. Types et exhaustivité des documents de conception.
  3. GOST 2.114-95 ESKD. Conditions techniques.
  4. GOST 15.101-98. Système de développement et de lancement de produits en production. La procédure à suivre pour effectuer des travaux de recherche scientifique.
  5. GOST R 15.201-20-00. Système de développement et de lancement de produits en production. Produits à usage industriel et technique. La procédure de développement et de mise en production des produits.

UTILISATION DES FPGA DANS LES APPAREILS MODERNES

Tupikov Pavel Andreïevitch

Étudiant de 5e année, Département d'ART, Université technique d'État d'Omsk, Fédération de Russie, Omsk

Aujourd'hui, les circuits intégrés logiques programmables (FPGA) sont de plus en plus utilisés dans divers appareils modernes, cela est dû au fait que les FPGA présentent des avantages significatifs par rapport aux puces numériques conventionnelles. Ces avantages comprennent :

· Les caractéristiques temporaires du produit sont améliorées.

· Le prix du produit diminue.

· Les dimensions du produit sont réduites.

· La fiabilité du produit augmente (le nombre de puces discrètes diminue)

Augmente la flexibilité du produit (les FPGA peuvent toujours être reprogrammés)

L'architecture FPGA a une structure complexe (Fig. 1)

Figure 1. Structure interne du FPGA

Comme le montre la figure 1, la partie principale du FPGA est constituée de blocs logiques programmables et de connexions internes programmables.

Le processus de programmation (firmware) du FPGA consiste à établir les connexions nécessaires entre les entrées et les sorties de l'appareil.

Il existe aujourd'hui deux leaders mondiaux dans la production de FPGA. Il s'agit des sociétés américaines Xilinx et Altera.

Chaque entreprise propose son propre logiciel de CAO pour travailler avec les FPGA. Xilinx propose le kit de développement logiciel (SDK) Xilinx. Altera propose Max+Plus II et Quartus II, ainsi que le système de modélisation ModelSim.

Pour créer des programmes de firmware, des langages décrivant le fonctionnement du matériel sont généralement utilisés ; les langages les plus courants aujourd'hui sont les suivants :

VerilogHDL.

Le langage VHDL est le plus difficile à apprendre, mais en même temps il possède les plus grandes capacités aux niveaux d'abstraction fonctionnel et comportemental, mais a moins de capacités au niveau structurel d'abstraction par rapport à Verilog HDL ; la bibliothèque VITAL a été développée pour étendre les capacités du langage VHDL (Fig. 2).


Figure 2. Niveaux d'abstraction Verilog Et VHDL

Un exemple du travail du langage Verilog HDL est un programme implémenté sur le FPGA CYCLONE III EP3C5E1444C8N du stand Mini-DiLab, dont une vue générale est présentée sur la Fig. 3.


Figure 3. Vue générale du tableau Mini - DiLab

Ce programme met en œuvre la commutation séquentielle des LED led0-led7, avec le choix d'augmenter le mouvement de la « lumière » à l'aide des boutons pba et pbb, ainsi que de contrôler la vitesse de commutation à l'aide des commutateurs sw0, sw1.

//Texte du programme

module projet( sortir dirigé, saisir clk_25mhz, saisir pba saisir pbb

saisir sw);

// Objectif des connexions internes au projet

fil s1 ;

fil s2 ;

fil s3 ;

// Appel d'autres fichiers (sous-programmes) connectés au projet

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Compteur counter_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.out(led), .in(s3));

module final// fin du programme

Sous-programme tr

module tr(sortie, ensemble, res); // Créer un programme

// Affectation des entrées/sorties

sortirreg dehors;

saisir ensemble;

saisir res;

// Initialisation

initial

commencer

Dehors<= 1"d0;

// Code du programme principal

toujours @(négation définir ou négation rés)

commencer

si(~(ensemble))

Dehors<= 1"d1;

autre

Dehors<= 1"d0;

module de fin // Fin du programme

Compteur de sous-programme

module compteur(con, q, clk,up); // Début du programme

sortirreg escroquer;

sortir q = inconvénient ;

saisir debout, clic ;

// Code du programme principal

toujours @(pose clic)

commencer

si(clic)

si(en haut)

Escroquer<= con - 1"d1;

autre

Escroquer<= con + 1"d1;

module final//Fin du programme

Sous-programme mx (multiplexeur)

module mx ( enregistrement de sortie un, saisir dans, saisir charger);

// Code du programme principal

toujours @*

commencer

cas(charger)

2"b00 : a = dans ;

2"b01 : a = dans ;

2"b10 : a = dans ;

2"b11 : a = dans ;

boîtier final

module final // Fin du programme

Sous-programme dc3_8 (multiplexeur)

module dc3_8(sortie, entrée); // Début du programme

// Affectation des entrées/sorties

enregistrement de sortie dehors;

fil d'entrée dans;

// Code du programme principal

toujours @*

commencer

cas(dans)

3"d0 : sortie = 8"b11111110 ;

3"d1 : sortie = 8"b11111101;

3"d2 : dehors = 8"b11111011;

3"d3 : dehors = 8"b11110111;

3"d4 : dehors = 8"b11101111;

3"d5 : dehors = 8"b11011111;

3"d6 : dehors = 8"b10111111;

3"d7 : dehors = 8"b01111111;

boîtier final

module final // Fin du programme

Le programme a été implémenté dans le logiciel de CAO Quartus II.

Après avoir compilé le programme, le compilateur n'a généré aucune erreur ni commentaire dans le programme lié à l'analyse et à la syntaxe du programme (Fig. 4).


Figure 4. Fenêtre de message du projet

Les commentaires du compilateur indiquent qu'il n'y a pas de licence pour Quartus II (la version gratuite du programme a été utilisée pour la formation) et l'absence de fichiers nécessaires à la modélisation du projet.

RTL La structure de ce projet est présentée dans la Fig. 5.


Figure 5. Mise en œuvre du projet ( RTL structure)

Comme le montre la fig. 6, seule une petite partie des capacités de ce FPGA est utilisée dans ce programme.

Figure 6. Partie du FPGA impliqué dans le projet

Conclusions : Les circuits intégrés logiques programmables peuvent être utilisés dans de nombreux appareils. Pour apprendre à travailler avec eux, la familiarité avec les langages de description du matériel (Verilog HDL et VHDL) doit être introduite dans le programme éducatif des spécialités liées à la conception et à la construction d'équipements électroniques.

Bibliographie:

1. Grushevitsky R.I. Conception de systèmes sur puces logiques de programme / R.I. Grushevitsky, A.X. Mursaev, E.P. Sombre. Saint-Pétersbourg : BHV Pétersbourg, 2002. - 608 p.

2. Kolomov D.A. Systèmes de conception assistée par ordinateur Altra MAX+plus II et Quartus II. Brève description et tutoriel / D.A. Kolomov, R.A. Myalk, A.A. Zobenko, A.S. Filippov. M. : IP RadioSoft, 2002. - 126 p.

3. Maxfield K. Conception sur FPGA. Cours pour un jeune combattant./ K. Maxfield. M. : Maison d'édition "Dodeka-XXI", 2007. - 408 p. (traduction de l'anglais).