Encodage de bus - Bus encoding

L'encodage de bus fait référence à la conversion / l'encodage d'une donnée sous une autre forme avant son lancement sur le bus . Alors que le codage de bus peut être utilisé pour servir à diverses fins telles que la réduction du nombre de broches, la compression des données à transmettre, la réduction de la diaphonie entre les lignes de bit, etc., c'est l'une des techniques populaires utilisées dans la conception de systèmes pour réduire la puissance dynamique. consommé par le bus système . Le codage du bus vise à réduire la distance de Hamming entre 2 valeurs consécutives sur le bus. Étant donné que l'activité est directement proportionnelle à la distance de Hamming , le codage du bus s'avère efficace pour réduire le facteur d'activité global, réduisant ainsi la consommation d'énergie dynamique dans le système.

Dans le contexte de cet article, un système peut faire référence à tout ce où des données sont transférées d'un élément à un autre via le bus (à savoir: System on a Chip (SoC), un système informatique, un système embarqué à bord, etc.).

Motivation

La consommation électrique des systèmes électroniques est aujourd'hui un sujet de préoccupation pour les raisons suivantes:

  1. Appareils fonctionnant sur batterie : En raison de l'omniprésence des appareils fonctionnant sur batterie et de la nécessité de maximiser la durée entre deux charges ultérieures de la batterie, il est nécessaire que le système consomme le moins d'énergie (et d'énergie) possible.
  2. Contraintes environnementales : Pour tenter de protéger l'environnement, nous devons conserver l'énergie utilisable. Étant donné que l'énergie consommée par les systèmes électroniques augmente considérablement, il est essentiel de minimiser la consommation d'énergie des systèmes électroniques pour préserver l'environnement.
  3. Dissipation de puissance : selon la loi de Moore , les dispositifs à semi-conducteurs ont de plus en plus de transistors dans une plus petite superficie. Cela conduit à une dissipation de puissance plus élevée par unité de surface et rend la conception de l'emballage et du système de refroidissement thermique complexe et coûteuse. Par conséquent, des systèmes électroniques de faible puissance sont nécessaires pour résoudre ce problème.

La puissance dynamique dissipée par un circuit électronique est directement proportionnelle au facteur d'activité et à la capacité de charge vue par la sortie de la porte logique. Dans le cas d'un bus, la capacité de charge est généralement élevée car le bus doit être connecté à plusieurs modules et acheminé plus longtemps et le facteur d'activité est également élevé. En raison de la valeur plus élevée de la capacité de charge et du facteur d'activité, dans un système typique, la consommation électrique du bus peut contribuer jusqu'à 50% de la consommation électrique totale. Le codage de bus vise à réduire cette puissance en réduisant la quantité d'activité (nombre de bascules) dans les lignes de bus. Bien que le type de codage de bus à utiliser pour un système particulier puisse être déterminé au mieux lorsque l'application cible et les contraintes environnementales concernant le système sont connues à priori, certaines techniques de codage de bus qui peuvent aider à réduire la puissance du bus pour la plupart des systèmes sont décrites ci-dessous.

Par conséquent, le codage de bus est important pour toute conception de système électronique.

Exemples de codage de bus pour obtenir une faible puissance

Voici quelques-unes des implémentations pour utiliser le codage de bus pour réduire la consommation d'énergie dynamique dans différents scénarios:

  1. Encodage gris : les lignes d'adresse d'un bus dans la plupart des systèmes informatiques augmentent en valeurs numériques consécutives en raison de la localité spatiale . Si nous utilisons un codage binaire régulier pour le bus, nous ne sommes pas assurés d'une distance de Hamming minimale entre 2 adresses consécutives. L'utilisation de codes Gray pour le codage des lignes d'adresse conduira à une distance de Hamming de 1 entre 2 valeurs de bus d'adresse consécutives (tant que la localité spatiale est valable). Il existe des variantes de ce schéma nommé encodage Shifted Gray pour réduire le temps système.
  2. Adressage séquentiel ou codes T0 : En cas de bus d'adresses, en raison de la localité spatiale qui existe dans les programmes, la plupart des transitions impliquent de changer l'adresse à la valeur consécutive suivante. Un schéma de codage possible consiste à utiliser une ligne supplémentaire, INC, dans le bus indiquant si la transition courante est la prochaine adresse d'incrémentation ou non. S'il ne s'agit pas d'une adresse consécutive, le récepteur peut utiliser la valeur sur le bus. Mais s'il s'agit d'une adresse consécutive, l'émetteur n'a pas besoin de changer la valeur dans le bus, mais d'affirmer simplement la ligne INC à 1. Dans ce cas, pour un schéma d'adressage continu, il n'y a pas du tout de transition sur le bus, conduisant à un facteur d'activité du bus de 0.
  3. Représentation numérique : Prenons l'exemple d'un système qui obtient l'une de ses données d'un capteur. La plupart du temps, le capteur peut mesurer du bruit et pour cet exemple, considérez que les valeurs mesurées sont (0) et (-1) alternativement. Pour un bus de données 32 bits, la valeur 0 se traduit par 0x00000000 (0000 0000 0000 0000 0000 0000 0000 0000 0000) tandis que (-1) se traduit par 0xFFFFFFFF (1111 1111 1111 1111 1111 1111 1111 1111) dans une représentation complémentaire à 2. Nous voyons que la distance de Hamming dans ce cas est de 32 (puisque tous les 32 bits changent d'état). Au lieu de cela, si nous encodons le bus pour utiliser une représentation entière signée (MSB est un bit de signe), nous pouvons représenter 0 comme 0x00000000 (0000 0000 0000 0000 0000 0000 0000 0000) et -1 comme 0x80000001 (1000 0000 0000 0000 0000 0000 0000 0001) . Dans ce cas, nous voyons que la distance de Hamming entre les nombres n'est que de 2. Par conséquent, en utilisant un complément à 2 au codage arithmétique signé, nous sommes en mesure de réduire l'activité d'un facteur de 32 à 2.
  4. Encodage d'inversion : il s'agit d'une autre implémentation du codage de bus où une ligne supplémentaire nommée INV est ajoutée aux lignes de bus. En fonction de la valeur de la ligne INV, les autres lignes seront utilisées avec ou sans inversion. par exemple si la ligne INV est à 0, les données sur le bus sont échantillonnées telles quelles mais si la ligne INV est à 1, les données sur le bus sont inversées avant tout traitement sur celui-ci. En se référant à l'exemple utilisé en 3, au lieu d'utiliser une représentation entière signée, nous pourrions continuer à utiliser le complément de 2 et obtenir la même réduction d'activité en utilisant le codage d'inversion. Ainsi, 0 sera représenté par 0x00000000 avec INV = 0 et -1 sera représenté par 0x00000000 avec INV = 1. Puisque INV = 1, le récepteur inversera les données avant de les consommer, les convertissant ainsi en 0xFFFFFFFF en interne. Dans ce cas, seul 1 bit (bit INV) est changé sur le bus conduisant à une activité de facteur 1. En général, dans le codage d'inversion, le codeur calcule la distance de Hamming entre la valeur actuelle et la valeur suivante et sur cette base, détermine si pour utiliser INV = 0 ou INV = 1.
  5. Encodage du cache de valeurs : il s'agit d'une autre forme d'encodage de bus, principalement utilisée pour les bus externes (hors puce). Un dictionnaire (cache de valeurs) est conservé à la fois du côté de l'expéditeur et du destinataire sur certains des modèles de données communément partagés. Au lieu de transmettre les modèles de données à chaque fois, l'expéditeur bascule simplement d'un bit indiquant quelle entrée du cache de valeurs doit être utilisée à l'extrémité du récepteur. Uniquement pour les valeurs qui ne sont pas présentes dans le cache de valeurs, les données complètes sont envoyées sur le bus. Il y a eu diverses implémentations modifiées de cette technique dans le but de maximiser les hits pour le cache de valeurs, mais l'idée sous-jacente est la même.
  6. D'autres techniques comme le codage par secteur, des variantes du codage par inversion, ont également été proposées. Il y a eu des travaux sur l'utilisation d'encodages de bus qui réduisent la consommation d'énergie de fuite ainsi que la réduction de la diaphonie avec un impact minimal sur les retards de chemin.

Autres exemples d'encodage de bus

De nombreux autres types d'encodage de bus ont été développés pour diverses raisons:

  • CEM améliorée: la signalisation différentielle utilisée dans de nombreux bus et le code à poids constant plus général utilisé dans l' interface série de la caméra MIPI C-PHY sont tous deux plus immunisés contre les interférences extérieures et émettent moins d'interférences avec les autres appareils.
  • multiplexage de bus: de nombreux microprocesseurs et de nombreuses premières puces DRAM ont réduit les coûts en utilisant le multiplexage de bus, plutôt que de dédier une broche à chaque bit d'adresse et bit de données du bus système . Une approche réutilise les broches du bus d'adresse à des moments différents pour les broches du bus de données, une approche utilisée par PCI conventionnel . Une autre approche réutilise les mêmes broches à des moments différents pour la moitié supérieure et pour la moitié inférieure du bus d'adresse, une approche utilisée par de nombreuses puces de mémoire dynamique à accès aléatoire , en ajoutant 2 broches au bus de contrôle - une adresse de ligne strobe ( RAS ) et le stroboscope d'adresse de colonne ( CAS ).

Méthode de mise en œuvre

Dans le cas des conceptions SoC, les schémas de codage de bus peuvent être mis en œuvre au mieux dans RTL en instanciant des encodeurs et des décodeurs dédiés sur le bus. Une autre façon de l'implémenter est de transmettre un indice à l'outil de synthèse soit sous forme de trace de la simulation, soit en utilisant le pragma de synthèse pour définir le type de codage nécessaire.

À bord, un petit circuit intégré de faible puissance peut être déployé entre les modules maître et esclave sur le bus pour implémenter les fonctions d'encodage et de décodage.

Propriétés de la fonction d'encodage

La fonction d'encodage / décodage du bus doit être une bijection . Cela nécessite essentiellement que la fonction de codage possède le comportement ci-dessous:

  1. Toutes les données à lancer sur le bus doivent avoir une valeur codée unique et chaque valeur codée doit être décodée de manière unique vers la même valeur d'origine.
  2. Il doit être possible d'encoder et de décoder toutes les valeurs qui peuvent être générées par la source.

Compromis / analyse

  • Alors que l'ajout d'un codage de bus réduit le facteur d'activité sur le bus et conduit à une réduction de la puissance dynamique, l'ajout d'encodeurs et de décodeurs autour du bus entraîne l'ajout de circuits supplémentaires à la conception, qui consomment également une certaine quantité d'énergie dynamique. Nous devons en tenir compte lors du calcul des économies d'énergie.
  • Les circuits supplémentaires augmenteront également la puissance de fuite de la conception / du circuit / du système / du SoC. Si le facteur d'activité de base du bus système n'est pas très élevé, le codage du bus peut ne pas être une option très viable car il dégradera la consommation d'énergie globale en raison d'une puissance de fuite plus élevée.
  • Si la synchronisation du bus se trouve dans le chemin de données critique, l'ajout de circuits supplémentaires dans le chemin dégradera le chemin de synchronisation et peut s'avérer préjudiciable. Cette analyse doit être effectuée avec soin pour déterminer le type de codage de bus à utiliser.

Voir également

Les références

Lectures complémentaires