Un bus informatique est un dispositif de transmission de données partagé entre plusieurs composants d'un système numérique. Le terme dérive du latin omnibus (à tous) ; c'est le sens, d'un usage plus ancien, du terme bus en électronique. Le bus informatique est la réunion des parties matérielles et immatérielles qui permet la transmission de données entre les composants participants.

On distingue généralement un bus d'une part d'une liaison point à point, qui ne concerne que deux composants qui en ont l'usage exclusif, et d'autre part, d'un réseau, qui implique des participants indépendants entre eux, c'est-à-dire pouvant fonctionner de manière autonome, et qui comprend plusieurs canaux permettant des communications simultanées.

Définition et mise en œuvre Définition fonctionnelle vignette|alt=Vue des trois sous-ensembles composant un bus : données, adresse et contrôle|Décomposition fonctionnelle d'un bus Un bus est un système de transfert de données entre plusieurs unités fonctionnelles de traitement de données par l'intermédiaire d'une voie de transmission commune, dans lequel les composants ne prennent aucune part à la transmission des données entre les autres participants.

Cette définition implique que les données doivent s'accompagner d'une identification du composant auquel elles sont destinées, qu'on appelle par métaphore l’adresse de destination, et d'une commande indiquant le type du transfert, notamment pour indiquer si ce composant doit recevoir les données ou les transmettre. On peut ainsi décomposer le bus en trois sous-ensembles logiques : les données, soit le message proprement dit ; les adresses, qui permettent d'identifier les composants qui partagent les données ; le contrôle, un ensemble de signaux identifiant le type d'action : lecture ou écriture, taille du message. Physiquement, ils peuvent être des bus au sens électronique du terme, c'est-à-dire être portés par des conducteurs indépendants, ou être réalisés d'une autre manière, par exemple par multiplexage temporel sur un seul conducteur ; un bus informatique les combine en un seul dispositif pour transférer des données entre plusieurs composants.

En plus de l'aspect physique permettant de faire transiter les informations, un bus informatique est constitué des circuits d'interface, et du protocole qui définit la manière dont les signaux doivent se comporter pour réaliser ce transfert. Les caractéristiques du matériel conditionnent en partie le type de communication et le protocole peut parfois imposer le type de matériel.

Le débit binaire maximal, exprimé en bits par seconde, décrit la capacité du bus informatique à transférer plus ou moins rapidement des informations.

Autres modes de communication

Lorsque deux composants seulement sont impliqués, le problème de l'adresse ne se pose pas. On parle plutôt de liaison point à point. Un système de transfert de donnée prévu pour plusieurs composants peut effectuer le transfert, mais le traitement inutile de l'information d'adresse pèse sur sa performance.

Lorsque le dispositif de communication comprend plus d'une voie de transmission, permettant plusieurs communications simultanées, la notion de réseau informatique est plus appropriée.

Les trois approches, liaison de point à point, bus informatique, réseau informatique, partagent la même fonction de communication, avec une complexité croissante. Elles correspondent à des optimisations particulières à chacun de leurs domaines.

Caractérisation

Les bus informatiques peuvent se construire avec plusieurs variantes. Capacité à contrôler le bus La désignation des composants concernés et du sens des transferts est souvent le privilège d'un des composants, que l'on désigne sous le nom de maître . Dans le cas où plusieurs composants peuvent contrôler le bus (bus multi-maîtres), celui-ci doit inclure un arbitrage entre les requêtes ; ; .. Un composant appelé « arbitre de bus » désigne alors quel autre composant est autorisé à en prendre le contrôle, au moyen de différents algorithmes : , dans lequel le choix du composant est périodique, ou encore en fonction d'une priorité définie par le composant effectuant la requête. Requêtes Le protocole le plus simple inclut uniquement les requêtes de lecture et d'écriture. Le composant qu'indique l'adresse doit soit copier les données que présente le bus, soit communiquer ses données. Certains bus incluent des fonctions de contrôle qui permettent des transferts plus rapides. L'instruction de transfert de bloc ou le permettent de demander une transmission non plus d'un seul mot de données, mais de plusieurs successivement de ou vers un bloc d'adresses consécutives, de façon à transférer des blocs de données avec une seule requête. Les signaux de contrôle définissent la taille du bloc. Le transfert de bloc peut doubler le débit numérique du bus.. La fonction permet d'accéder à une donnée, et de bloquer le bus le temps de venir la modifier. Cette fonction est particulièrement utile lors de l'utilisation de données partagées. Si plusieurs composants utilisent les données enregistrées dans les mêmes composants, des conflits d'usage des données peuvent survenir : le composant A lit la donnée à l'adresse a, et commence à effectuer des calculs avec la valeur trouvée. Pendant ce temps, le composant B fait de même. La composant A reprend le contrôle du bus pour venir modifier la donnée de l'adresse a, puis le composant B fait de même. La valeur de sortie du calcul de A est donc perdue. Bloquer le bus pendant le calcul permet de s'assurer que B ne viendra lire la donnée qu'une fois qu'elle a été mise à jour par A, et d'éviter la mise à jour perdue. Mode de transmission Un bus parallèle transmet simultanément chaque bit constituant le message sur un canal particulier, tandis qu'un bus série les transmet les uns après les autres sur le même canal. Synchronisation La transmission peut être synchrone, avec un signal d'horloge, ou asynchrone, quand chaque transmission comporte une information de synchronisation. Si la transmission est synchrone, il faut que les différences de temps de transmission dues à la distance entre composants ne dépassent pas la limite permise par le signal d'horloge. Topologie Dans une topologie linéaire, le bus ressemble à une ligne électrique où sont accrochées, de loin en loin, des lampes ; dans une configuration arborescente, d'un tronc commun sortent des branches et des rameaux en direction des composants. Dans une configuration en anneau deux voies existent d'un composant à un autre. Dans les réseaux complexes, structurés comme des réseaux de télécommunication, les circuits de gestion du bus déterminent le chemin de transmission adéquat, parmi un certain nombre de voies disponibles.

Un bus logiciel est un logiciel d'interface qui permet à un poste d'accéder à des données d'autres composants aussi simplement que s'ils lui étaient reliés par un bus. Ce logiciel décharge les programmes de la sélection des voies et des protocoles de communication. Du point de vue du programme appelant, il n'y a qu'un bus. Du point de vue de l'analyse des systèmes, l'ensemble des voies de communication plus les bus logiciels qui assurent l'interface forme le bus informatique.

Topologies L'implémentation d'un bus peut suivre différentes topologies selon l'usage qui en est fait et la stratégie d'optimisation : performance, quantité de ressources utilisées, consommation La topologie influe sur ces facteurs sans affecter les composants connectés. Ceux-ci utilisent en général un protocole générique, et des adaptateurs entre le composant et les ressources de communication permettent la traduction des requêtes en transferts effectifs. Ainsi certaines définitions de bus, comme l'AXI, ne donnent aucune contrainte sur la topologie. Elles indiquent seulement le protocole que les composants doivent utiliser pour accéder au bus, laissant l'implémentation des lignes de communication à la discrétion de l'architecte. La topologie historique consiste en un médium de communication partagé par tous les composants. Une seule communication peut avoir lieu à la fois, deux si la lecture et l'écriture utilisent des canaux distincts. Dans le cas d'un bus multi-maître, l'arbitre du bus détermine qui est autorisé à utiliser le bus à chaque instant. Cette topologie présente l'avantage d'utiliser le minimum de ressources, mais peut devenir un goulot d'étranglement en cas de requêtes simultanées. La topologie par autocommutateurEn anglais , ., en grille de commutation matricielle, permet de mettre en œuvre autant de lignes de communications que nécessaire. Un commutateur établit la liaison entre un maître et un esclave, et ne permet la communication qu'entre ces deux composants. Le choix des lignes à établir est réalisé lors de la phase d'implémentation. Ainsi, si un bus est composé de deux maîtres et de plusieurs esclaves, il est possible que l'un des maîtres n'ait jamais à interagir avec certains esclaves. Dans ce cas, il sera inutile de déployer des ressources de communication entre le maître et les esclaves en question. Cette topologie a le grand avantage de permettre à différents maîtres de communiquer simultanément avec des esclaves différents, augmentant les performances. Elle utilise en revanche beaucoup plus de ressources qu'une topologie bus. Si cette topologie se résume, du point de vue implémentation, à un ensemble de lignes point à point, il s'agit néanmoins bien d'un bus car du point de vue des composants, les communications sont effectuées par adresse. La topologie Network on Chip s'inspire des réseaux en introduisant de multiples lignes de communication reliées entre elles par des routeurs. Le choix du chemin est réalisé dynamiquement en fonction de l'utilisation des lignes. Cette topologie est adaptée aux SoC comportant de nombreux composants, tels les many-cores (architectures multi-cœur dont le nombre de cœurs est très élevé), et permet plusieurs communications simultanées utilisant différentes liaisons.

Matériel

Dans l'architecture d'un système informatique, les bus transmettent les données entre composants. Les caractéristiques de ces composants déterminent celles du bus. Il est très différent de transmettre des bytes des millions de fois par seconde entre des millions ou milliards de composants très proches les uns des autres, comme c'est le cas entre le microprocesseur et la mémoire d'un ordinateur personnel, des paquets de milliers de bytes en quelques millièmes de seconde entre quelques dizaines de composants éloignés de quelques mètres, comme c'est le cas dans un bus USB, et des codes de quelques dizaines de bits quelques dizaines de fois par seconde, entre des composants dispersés sur un site industriel, comme dans un bus de terrain.

Un bus peut utiliser différents supports pour la communication : fils ou nappes pour relier des périphériques à la carte mère d'un ordinateur (par exemple les bus SCSI ou USB), circuits imprimés sur une même carte ou sur un fond de panier (par exemple dans le cas d'un bus PCI Express), routage logique dans un FPGA (par exemple un bus AXI), fibre optique

Les circuits d'interface, comprenant la conversion parallèle-série et vice-versa, la mémoire tampon et les gestionnaires de communication, ainsi que les répartiteurs et nœuds de communication comme les hubs USB font partie du bus informatique.

La construction matérielle du bus peut répercuter la représentation logique en trois sous-systèmes physiques, avec des faisceaux de conducteurs distincts pour transmettre les signaux d'adresse, de données et de contrôle, associés à un arbre d'horloge pour la synchronisation. Un bus peut aussi transmettre ces différents signaux l'un après l'autre à travers un seul canal d'une ou plusieurs paires de conducteurs comme c'est le cas de l'USB.