La conception de systèmes FPGA à faible puissance est devenue une exigence non négociable dans la conception numérique moderne, en particulier pour les applications portables, alimentées par batterie et limitées thermiquement. Comme les réseaux de portes programmables sur le terrain (FPGA) sont de plus en plus déployés dans le calcul des bords, les dispositifs IoT et l'infrastructure sans fil, la capacité de réduire la consommation d'énergie sans sacrifier les performances donne un avantage concurrentiel décisif. VHDL (VHSIC Hardware Description Language) reste un langage fondamental pour le développement de FPGA. Cependant, de nombreux concepteurs se concentrent principalement sur la fonctionnalité et la fermeture de la synchronisation, sans tenir compte des économies d'énergie substantielles que les pratiques de codage VHDL disciplinées peuvent débloquer.

Principes fondamentaux de la consommation d'énergie dans les FPGA

Pour optimiser le code VHDL pour une faible puissance, un concepteur doit d'abord saisir les deux composants primaires de la consommation de puissance de FPGA : puissance dynamique et puissance statique. La puissance dynamique domine pendant le fonctionnement actif et est régie par l'équation bien connue \(P {dynamique} = \alpha \cdot C \cdot V^2 \cdot f\), où \(\alpha\) est le facteur d'activité de commutation (le nombre moyen de transitions de signal par cycle d'horloge), \(C\) est la charge capacitive en cours de charge/décharge, \(V\) est la tension d'alimentation, et \(f\) est la fréquence d'horloge. La puissance statique, également connue sous le nom de puissance de fuite, est la puissance consommée même lorsque la FPGA est au ralenti, résultant de fuites sous-seuils et de fuites de portails de transistors.

Les architectures FPGA apportent des sources de consommation supplémentaires distinctes des ASIC. L'interconnexion programmable est un grand consommateur de puissance en raison des longs itinéraires et de nombreux transistors de passe. La logique se bloque, qu'il s'agisse de LUT ou de ALM, dissipe également la puissance basée sur la fonction configurée. Les réseaux d'horlogerie, qui distribuent un signal à haute intensité sur toute la puce, peuvent consommer 20 à 30% de la puissance dynamique totale si elle n'est pas gérée avec soin.

Techniques de codage VHDL pour la réduction de puissance

1. Clock Gateting

En désactivant le signal de l'horloge aux modules inactifs, l'activité de commutation dans ces blocs tombe à zéro, éliminant la puissance gaspillée sur la charge inutile et le déchargement des éléments séquentiels. Dans VHDL, le gage de l'horloge peut être mis en œuvre en ANDant une horloge globale avec un signal activé, mais il faut faire preuve de prudence pour éviter les glissades. Une méthode plus sûre consiste à utiliser la broche d'horloge dédiée FPGA=s (généralement la broche CE) sur une broche à bascule (qui ne porte pas l'arbre d'horloge lui-même mais empêche la bascule de basculer quand il n'est pas nécessaire. Pour les blocs plus grands, une porte d'horloge enregistrée utilisant un élément dédié de bibliothèque est recommandée. L'extrait d'horloge VHDL suivant montre une horloge locale active :

Ce modèle utilise le natif de flip-flop, en préservant la distribution des arbres d'horloge et en évitant les risques liés aux aiguilles d'horloge. Pour les mouvements d'horloge à grain de course au niveau des blocs, inactivez la cellule de gingage d'horloge du vendeur (p. ex., BUFGCE sur les appareils Xilinx) pour désactiver les sections de l'arbre d'horloge pendant les périodes de repos.

2. Minimiser l'activité de commutation

L'activité de commutation (\(\alpha\)) multiplie directement la puissance dynamique. Le code VHDL peut introduire des toggles inutiles grâce à de mauvais protocoles de communication, des assignations de signaux redondantes ou un codage d'état inefficace.

  • Utilisez le codage gris pour les compteurs et les machines d'état qui ont rarement besoin de mettre à jour les bits de sortie. Le codage gris assure seulement un changement de bits par transition d'état, réduisant le nombre de toggles sur le bus de sortie. Par exemple, un compteur binaire bascule simultanément plusieurs bits, conduisant à un \(\alpha\) plus élevé sur les lignes de bus.
  • Gating de données: Désactiver ou maintenir les entrées de données stables lorsqu'un module n'est pas accessible. Si un chemin de données est inactif, régler les registres d'entrée à une constante connue (par exemple, tous les zéros) plutôt que de permettre des basculements aléatoires de la logique en amont.
  • Supprimer les assignations de signaux inutiles: Évitez d'attribuer des valeurs par défaut aux signaux qui ne sont utilisés que sous condition. Chaque assignation crée un risque de basculement si le signal est entraîné par plusieurs processus ou si les valeurs par défaut diffèrent de la valeur réelle.
  • Utiliser les sorties enregistrées avec activ : Au lieu d'utiliser des sorties purement combinées qui basculent avec chaque changement d'entrée, enregistrez les sorties et mettez-les à jour uniquement lorsque les données sont valides.

3. Encodage efficace de l'État pour les machines d'État Finite

Pour les modèles à faible puissance, l'encodage à une seule chaleur (chaque bit d'état correspond à un état) réduit le nombre de transitions entre les états actifs, car seulement deux bits basculent en passant de l'état A à B : le bit courant diminue et le bit suivant augmente. Cependant, l'encodage à une chaleur augmente le nombre de flip-flops utilisés, ce qui peut augmenter la puissance statique. Pour les machines d'état à plusieurs états (p. ex. 16 ou plus), l'encodage binaire peut en fait produire une puissance totale plus faible parce que moins de flip-flops sont actifs. La meilleure approche est de simuler les transitions d'état attendues et d'estimer l'activité de commutation efficace pour les deux systèmes d'encodage.

4. Pipeline et réticulation pour réduire la propagation des glissades

Les glitches sont des transitions de signaux brèves et non intentionnelles qui se propagent par la logique combinée, provoquant une dissipation de puissance supplémentaire dans les circuits en aval. Les chemins de combinaisons profondes sont particulièrement sujets aux glissades, car différents retards de signal d'entrée font que la logique produit temporairement une valeur incorrecte avant de s'installer. Les inserts de canalisations s'enregistrent dans ces longs chemins, les cassent en étapes plus courtes. Chaque étape a le temps de se poser avant le bord de l'horloge suivante, réduisant de façon spectaculaire la propagation des glissades. La valorisation, une technique de synthèse qui déplace automatiquement les registres au-delà des limites logiques pour équilibrer les retards, peut réduire encore davantage le glissage sans changer la la la latence générale.

5. Utilisation de l'horloge active et des modes de baisse de puissance

Les FPGA modernes prennent en charge plusieurs domaines horloge et des îles de puissance. VHDL ne peut pas directement contrôler l'alimentation, le code ne peut injecter ou activer des modules que lorsque cela est nécessaire. Par exemple, un récepteur sans fil peut avoir besoin de son bloc de traitement de bande de base seulement lorsqu'un paquet est reçu. En gérant l'activation horloge de ce bloc (en utilisant le flip-flops CE) ou en affirmant une remise à zéro qui désactive la logique, l'activité de commutation est réduite.

6. Partage des ressources pour réduire la zone et le changement

Lorsque plusieurs opérations similaires sont effectuées sur différentes données, le partage de ressources matérielles (p. ex. un multiplicateur ou une UTA utilisée de façon multiplexe dans le temps) réduit le nombre total de cellules logiques et de ressources de routage, réduisant ainsi la puissance dynamique et statique. Dans VHDL, cela est obtenu en inferrant des datapaths multiplexés. Par exemple, plutôt que d'injecter deux adders séparés pour deux ajouts qui ne se produisent jamais simultanément, utilisez un seul adder avec un multiplexeur sur ses entrées. Le multiplexeur lui-même ajoute un peu de commutation, mais la réduction globale de la surface et la capacité d'interconnexion génère généralement une économie nette de puissance.

Synthèse et techniques de mise en œuvre pour la faible puissance

Les fournisseurs modernes de FPGA offrent des options de synthèse qui ciblent une faible puissance. Par exemple, Xilinx Vivado inclut une stratégie de synthèse --Power Optimization--qui utilise l'insertion de la guillemet d'horloge, le retiming et l'optimisation basée sur LUT pour minimiser les commutations. Intel Quartus Prime offre des paramètres similaires dans la section Power Optimization. Les concepteurs devraient toujours activer ces options et vérifier qu'elles ne dégradent pas la fermeture du timing. De plus, les outils place-et-route peuvent être dirigés pour réduire la puissance dynamique en spécifiant les contraintes de placement qui raccourcissent les filets à haute activité--les fils à plus courte capacité.

L'estimation de la puissance est une partie critique du flux. Des outils tels que Xilinx Power Estimator (XPE) et Intel PowerPlay fournissent des estimations précoces basées sur les taux de basculement, les fréquences d'horloge et la sélection des appareils. Ces estimations deviennent plus précises après synthèse et implémentation lorsque des données réelles de basculement de vitesse de simulation (généralement en format VCD ou SAIF) peuvent être importées.

Ressources externes pour la lecture suivante :

Vérification et validation des conceptions de faible puissance

Simulez la conception avec des modèles d'entrée typiques et les pires cas lors de la collecte d'activité de commutation à l'aide d'un testbench VHDL. De nombreux outils de simulation peuvent générer un fichier de la pompe à variation de valeur (VCD); ce fichier peut être lu par des outils d'estimation de puissance pour calculer la puissance dynamique réelle. Pour la puissance statique, l'outil utilise des valeurs de fuite pour le périphérique cible. Les concepteurs doivent également vérifier que les signaux de gage d'horloge n'introduisent pas de violations de tenue ou de configuration, et que la logique d'activation ne crée pas de glissades qui se propagent aux registres.

Une autre pratique exemplaire consiste à diviser la conception en domaines de puissance dans la hiérarchie VHDL. En séparant clairement les modules pouvant fonctionner à différentes tensions ou fréquences, la conception devient plus facile à optimiser avec l'IP de gestion de puissance propre au fournisseur. Par exemple, un système peut avoir un domaine haute performance (p. ex. pour DSP) qui tourne à 200 MHz, et un domaine de contrôle qui tourne à 20 MHz. Dans VHDL, ces domaines doivent être inventoriés en entités distinctes avec leur propre entrée d'horloge et activer les signaux. L'outil de synthèse peut ensuite appliquer différentes stratégies d'optimisation par domaine.

Meilleures pratiques pour la conception de la VHDL de faible puissance – Un résumé

  • Conception avec des taux de bascule bas en tête. Considérez l'activité de chaque signal, en particulier les bus sortant vers les coussinets d'entrée/sortie FPGA, où les charges capacitives sont importantes.
  • Enregistrer les signaux critiques pour briser les chemins combinés et réduire la propagation des points de glissade.
  • Partitionnez votre conception[ dans des blocs indépendants à horloge. Assurez-vous que les blocs de ralenti sont maintenus à l'état de réinitialisation ou de constante.
  • Utilisez des outils de synthèse de la puissance et évaluez constamment les compromis entre la surface, la vitesse et la puissance.
  • Simuler et vérifier la consommation d'énergie[ au début du cycle de conception.
  • Considérer la famille cible de FPGA – les nouveaux appareils à basse tension (p. ex. 0,95 V vs 1,2 V) offrent des réductions de puissance statiques importantes. Le code VHDL devrait être écrit pour exploiter le fonctionnement à basse tension lorsque cela est possible (éviter les décalages de niveau qui gaspillent la puissance).
  • Éviter toute logique de test inutile qui reste active dans la production. Si des caractéristiques de débogage (p. ex., les carottes de chipscope) sont incluses, assurez-vous qu'elles sont désactivées ou équipées d'horloge dans la construction finale.
  • Utilisez des primitives de faible puissance spécifiques au fournisseur[ comme des portes d'horloge dédiées (BUFGCE), des blocs DSP qui peuvent être désactivés et bloquer la RAM en mode d'alimentation réduite lorsque vous n'y êtes pas accédé.

Conclusion

La réduction de la consommation d'énergie dans les conceptions FPGA commence dès le début : écrire un code VHDL efficace. En comprenant la physique sous-jacente, en appliquant des techniques de codage ciblées telles que le gingage d'horloge, la minimisation des activités de commutation et l'encodage d'état efficace, et en tirant parti des outils de synthèse et de mise en œuvre qui optimisent la puissance, les concepteurs peuvent réaliser des économies d'énergie impressionnantes sans compromettre la fonctionnalité ou les performances.