Wikilivres frwikibooks https://fr.wikibooks.org/wiki/Accueil MediaWiki 1.46.0-wmf.26 first-letter Média Spécial Discussion Utilisateur Discussion utilisateur Wikilivres Discussion Wikilivres Fichier Discussion fichier MediaWiki Discussion MediaWiki Modèle Discussion modèle Aide Discussion aide Catégorie Discussion catégorie Transwiki Discussion Transwiki Wikijunior Discussion Wikijunior TimedText TimedText talk Module Discussion module Event Event talk Programmation en Go/Installation 0 40348 765862 695054 2026-05-03T07:50:18Z Nimmzo 76083 /* lead section */ syntaxhighlight +line +highlight +start 765862 wikitext text/x-wiki {{NavTitre|book={{BASEPAGENAME}}|next=Premier|nextText=Premier programme}} == Linux == Pour les distributions dérivées de Debian, par exemple Ubuntu, vous pouvez utiliser le système de gestion des paquets avec la commande suivante : <syntaxhighlight lang=bash line highlight=1> sudo apt-get install golang </syntaxhighlight> Pour les distributions dérivées de RedHat, comme CentOS, vous pouvez également utiliser le système de paquets : <syntaxhighlight lang=bash line> sudo yum module -y install go-toolset </syntaxhighlight> Dans tous les autres cas, vous pouvez télécharger une version exécutable depuis le site officiel à l'adresse suivante : <nowiki>https://go.dev/doc/install</nowiki> Une fois le fichier enregistré sur votre ordinateur, vous pouvez appliquer les commandes suivantes dans un terminal. Ces commandes suppriment une éventuelle version déjà présente sur votre système à l'emplacement /usr/local/go, puis extraient les fichiers précédemment téléchargés, afin d'obtenir une installation à jour : <syntaxhighlight lang=bash line start=2> rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.3.linux-amd64.tar.gz </syntaxhighlight> Afin de rendre disponible toutes les commandes de Go dans votre système, vous pouvez ajouter le dossier spécial "go/bin" à votre variable d'environnement PATH. Ajouter la ligne suivante dans votre fichier de configuration, généralement $HOME/.profile : <syntaxhighlight lang=bash line start=3> export PATH=$PATH:/usr/local/go/bin </syntaxhighlight> Puis exécutez un `source $HOME/.profile` afin de prendre en compte cette modification. Vous devrez éventuellement vous déconnecter et reconnecter pour prendre en compte ces modifications au niveau global de votre système. Vérifiez que tout fonctionne correctement en exécutant la commande suivante dans votre terminal : <syntaxhighlight lang=bash line highlight=1 start=4> go version </syntaxhighlight> Vous devez obtenir en résultat de cette commande, la version actuellement installée de Go. == Mac / Windows == Vous pouvez télécharger une version exécutable depuis le site officiel à l'adresse suivante : <nowiki>https://go.dev/doc/install</nowiki>. Une fois le fichier téléchargé, ouvrez-le et suivez les instruction pour l'installation de Go. À présent, vous pouvez tester le compilateur en compilant votre premier programme, comme nous allons le voir au chapitre suivant. == Références == {{Références}} {{AutoCat}} 1ed53bx3ipn4tnokpkf4of72vox7v4l 765863 765862 2026-05-03T08:00:04Z Nimmzo 76083 /* lead section */ +<code></code> 765863 wikitext text/x-wiki {{NavTitre|book={{BASEPAGENAME}}|next=Premier|nextText=Premier programme}} == Linux == Pour les distributions dérivées de Debian, par exemple Ubuntu, vous pouvez utiliser le système de gestion des paquets avec la commande suivante : <syntaxhighlight lang=bash line highlight=1> sudo apt-get install golang </syntaxhighlight> Pour les distributions dérivées de RedHat, comme CentOS, vous pouvez également utiliser le système de paquets : <syntaxhighlight lang=bash line> sudo yum module -y install go-toolset </syntaxhighlight> Dans tous les autres cas, vous pouvez télécharger une version exécutable depuis le site officiel à l'adresse suivante : <nowiki>https://go.dev/doc/install</nowiki> Une fois le fichier enregistré sur votre ordinateur, vous pouvez appliquer les commandes suivantes dans un terminal. Ces commandes suppriment une éventuelle version déjà présente sur votre système à l'emplacement <code>/usr/local/go</code>, puis extraient les fichiers précédemment téléchargés, afin d'obtenir une installation à jour : <syntaxhighlight lang=bash line start=2> rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.3.linux-amd64.tar.gz </syntaxhighlight> Afin de rendre disponible toutes les commandes de Go dans votre système, vous pouvez ajouter le dossier spécial <code>go/bin</code> à votre variable d'environnement <code>PATH</code>. Ajouter la ligne suivante dans votre fichier de configuration, généralement <code>$HOME/.profile</code> : <syntaxhighlight lang=bash line start=3> export PATH=$PATH:/usr/local/go/bin </syntaxhighlight> Puis exécutez un <code>source $HOME/.profile</code> afin de prendre en compte cette modification. Vous devrez éventuellement vous déconnecter et reconnecter pour prendre en compte ces modifications au niveau global de votre système. Vérifiez que tout fonctionne correctement en exécutant la commande suivante dans votre terminal : <syntaxhighlight lang=bash line highlight=1 start=4> go version </syntaxhighlight> Vous devez obtenir en résultat de cette commande, la version actuellement installée de Go. == Mac / Windows == Vous pouvez télécharger une version exécutable depuis le site officiel à l'adresse suivante : <nowiki>https://go.dev/doc/install</nowiki>. Une fois le fichier téléchargé, ouvrez-le et suivez les instruction pour l'installation de Go. À présent, vous pouvez tester le compilateur en compilant votre premier programme, comme nous allons le voir au chapitre suivant. == Références == {{Références}} {{AutoCat}} bzdcsptmboqteubz00m0m353y7mtooj 765864 765863 2026-05-03T08:30:19Z Nimmzo 76083 /* lead section */ +shared ref 765864 wikitext text/x-wiki {{NavTitre|book={{BASEPAGENAME}}|next=Premier|nextText=Premier programme}} == Linux == Pour les distributions dérivées de Debian, par exemple Ubuntu, vous pouvez utiliser le système de gestion des paquets avec la commande suivante : <syntaxhighlight lang=bash line highlight=1> sudo apt-get install golang </syntaxhighlight> Pour les distributions dérivées de RedHat, comme CentOS, vous pouvez également utiliser le système de paquets : <syntaxhighlight lang=bash line> sudo yum module -y install go-toolset </syntaxhighlight> Dans tous les autres cas, vous pouvez télécharger une version exécutable depuis le site officiel<ref name="go.dev">{{cite web |title=Download and install |trans-title=Télécharger et installer |url=https://go.dev/doc/install |website=Google Go |language=en |date=2026 |access-date=2026-05-03}}</ref>. Une fois le fichier enregistré sur votre ordinateur, vous pouvez appliquer les commandes suivantes dans un terminal. Ces commandes suppriment une éventuelle version déjà présente sur votre système à l'emplacement <code>/usr/local/go</code>, puis extraient les fichiers précédemment téléchargés, afin d'obtenir une installation à jour : <syntaxhighlight lang=bash line start=2> rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.3.linux-amd64.tar.gz </syntaxhighlight> Afin de rendre disponible toutes les commandes de Go dans votre système, vous pouvez ajouter le dossier spécial <code>go/bin</code> à votre variable d'environnement <code>PATH</code>. Ajouter la ligne suivante dans votre fichier de configuration, généralement <code>$HOME/.profile</code> : <syntaxhighlight lang=bash line start=3> export PATH=$PATH:/usr/local/go/bin </syntaxhighlight> Puis exécutez un <code>source $HOME/.profile</code> afin de prendre en compte cette modification. Vous devrez éventuellement vous déconnecter et reconnecter pour prendre en compte ces modifications au niveau global de votre système. Vérifiez que tout fonctionne correctement en exécutant la commande suivante dans votre terminal : <syntaxhighlight lang=bash line highlight=1 start=4> go version </syntaxhighlight> Vous devez obtenir en résultat de cette commande, la version actuellement installée de Go. == Mac / Windows == Vous pouvez télécharger une version exécutable depuis le site officiel<ref name="go.dev"/>. Une fois le fichier téléchargé, ouvrez-le et suivez les instruction pour l'installation de Go. À présent, vous pouvez tester le compilateur en compilant votre premier programme, comme nous allons le voir au chapitre suivant. == Références == {{Références}} {{AutoCat}} jnvd4tpgybwsqysi1wae9wcs3mw29ll Fonctionnement d'un ordinateur/Les processeurs de traitement du signal 0 65767 765762 765621 2026-05-02T14:59:16Z Mewtow 31375 /* Contexte : le traitement temps réel d'un signal */ 765762 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs sont multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. Par exemple, certains permettent de charger tous leurs opérandes d'un calcul depuis la mémoire en même temps, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires, séparées des instructions arithmétiques et logiques, capable de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Notons qu'il faut que la mémoire soit multiport pour gérer plusieurs accès par cycle. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ==Le jeu d'instruction des DSPs== Maintenant que nous venons de voir l'architecture mémoire des DSPs, voyons leur jeu d'instruction. Nous avons déjà parlé des modes d'adressage, qui font partie du jeu d'instruction. Mais nous allons ici nous concentrer sur les instructions elles-mêmes. Les instructions d'un DSP sont optimisées pour les algorithmes de traitement de signal les plus courants. Ils ne vont pas au point d'implémenter des instructions aussi spécifiques que peut l'être l'adressage ''bit-reverse'', elles restent assez conventionnelles. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les instructions arithmétiques=== Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les algorithmes de traitement de signal utilisent beaucoup des suites de multiplications et d'additions, des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systèmatiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 8vlrhir3bzi0sa37hb73mv7crofh6rc 765763 765762 2026-05-02T15:08:56Z Mewtow 31375 /* Les DSPs sont multiports */ 765763 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ==Le jeu d'instruction des DSPs== Maintenant que nous venons de voir l'architecture mémoire des DSPs, voyons leur jeu d'instruction. Nous avons déjà parlé des modes d'adressage, qui font partie du jeu d'instruction. Mais nous allons ici nous concentrer sur les instructions elles-mêmes. Les instructions d'un DSP sont optimisées pour les algorithmes de traitement de signal les plus courants. Ils ne vont pas au point d'implémenter des instructions aussi spécifiques que peut l'être l'adressage ''bit-reverse'', elles restent assez conventionnelles. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les instructions arithmétiques=== Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les algorithmes de traitement de signal utilisent beaucoup des suites de multiplications et d'additions, des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systèmatiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> a871rn1yhv1ek8xxd878qpprewyv728 765764 765763 2026-05-02T15:19:02Z Mewtow 31375 765764 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les instructions arithmétiques=== Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les algorithmes de traitement de signal utilisent beaucoup des suites de multiplications et d'additions, des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systèmatiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 35ci2tibt6xey33q4u2cr5d40qdnamn 765765 765764 2026-05-02T15:28:07Z Mewtow 31375 /* Les DSPs utilisent des mémoires multibanques ou multiports */ 765765 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les instructions arithmétiques=== Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les algorithmes de traitement de signal utilisent beaucoup des suites de multiplications et d'additions, des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systèmatiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> a0cxr570tny8t6zas6su1akw30899ce 765766 765765 2026-05-02T15:34:03Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765766 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les instructions arithmétiques=== Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les algorithmes de traitement de signal utilisent beaucoup des suites de multiplications et d'additions, des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systèmatiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> kue9hlvmob8hqtu1hds553ih6iviy69 765767 765766 2026-05-02T15:36:20Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765767 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les instructions arithmétiques=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils utilisent beaucoup des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 8cg10rmprmvu90165hdjim8lcauncen 765768 765767 2026-05-02T15:36:49Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765768 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les instructions arithmétiques=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils utilisent beaucoup des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 0dyxwe28mtv7j0ykparrnm159eng92i 765769 765768 2026-05-02T15:39:29Z Mewtow 31375 /* Les instructions arithmétiques */ 765769 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les instructions arithmétiques=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils utilisent beaucoup des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> b5cqty5n90l148dhd8c09e3ui7wd3r6 765770 765769 2026-05-02T15:50:15Z Mewtow 31375 /* Les instructions arithmétiques */ 765770 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les instructions arithmétiques=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int result = 0 ; for (i=0 ; i < N ; ++i) { result += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils utilisent beaucoup des calculs du type a * b + c. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> lwm4lytpd9olw2iob9d911nreq4zih9 765771 765770 2026-05-02T15:58:02Z Mewtow 31375 /* Les instructions arithmétiques */ 765771 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int result = 0 ; for (i=0 ; i < N ; ++i) { result += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Optimiser de telles boucles demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, le processeur fait un calcul dit ''Multiply and Add'', à savoir une multiplication suivie d'une addition. Mieux que ca, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent donc des instructions MAD agissant sur un registre accumulateur. l'intérieur de la boucle fait deux accès mémoire pour les les opérandes. D'autres algorithmes enregistrent un résultat en mémoire. Avec un processeur et une mémoire classiques, le temps d'exécution serait dominé par les accès mémoire. Mais les DSPs ne peuvent pas se le permettre, ce qui fait qu'ils optimisent leurs accès mémoire à fond. Par exemple, ils peuvent lire les deux opérandes d'une multiplication en mémoire RAM, directement. Les instructions d'un DSP peuvent faire plusieurs accès mémoire par cycle d'horloge. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> m9iqzxtn4gx79cy1ytbyzuhzhadoxv0 765772 765771 2026-05-02T15:58:43Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765772 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int result = 0 ; for (i=0 ; i < N ; ++i) { result += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Optimiser de telles boucles demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, le processeur fait un calcul dit ''Multiply and Add'', à savoir une multiplication suivie d'une addition. Mieux que ca, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent donc des instructions MAD agissant sur un registre accumulateur. l'intérieur de la boucle fait deux accès mémoire pour les les opérandes. D'autres algorithmes enregistrent un résultat en mémoire. Avec un processeur et une mémoire classiques, le temps d'exécution serait dominé par les accès mémoire. Mais les DSPs ne peuvent pas se le permettre, ce qui fait qu'ils optimisent leurs accès mémoire à fond. Par exemple, ils peuvent lire les deux opérandes d'une multiplication en mémoire RAM, directement. Les instructions d'un DSP peuvent faire plusieurs accès mémoire par cycle d'horloge. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> stfn823wsjshtht4ymy1crsq3vx0kea 765773 765772 2026-05-02T16:03:21Z Mewtow 31375 /* Les algorithmes exécutés par un DSP */ 765773 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nou n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int result = 0 ; for (i=0 ; i < N ; ++i) { result += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Optimiser de telles boucles demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, le processeur fait un calcul dit ''Multiply and Add'', à savoir une multiplication suivie d'une addition. Mieux que ca, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent donc des instructions MAD agissant sur un registre accumulateur. Troisièmement, l'intérieur de la boucle fait deux accès mémoire pour lire les opérandes. D'autres algorithmes enregistrent un résultat en mémoire. Avec un processeur et une mémoire classiques, le temps d'exécution serait dominé par les accès mémoire. Mais les DSPs ne peuvent pas se le permettre, ce qui fait qu'ils optimisent leurs accès mémoire à fond. Par exemple, ils peuvent lire les deux opérandes d'une multiplication en mémoire RAM, directement. Les instructions d'un DSP peuvent faire plusieurs accès mémoire par cycle d'horloge. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 0fr3927v54b7p7wh4rgpj46yfoedrmz 765774 765773 2026-05-02T16:03:31Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765774 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int result = 0 ; for (i=0 ; i < N ; ++i) { result += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Optimiser de telles boucles demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, le processeur fait un calcul dit ''Multiply and Add'', à savoir une multiplication suivie d'une addition. Mieux que ca, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent donc des instructions MAD agissant sur un registre accumulateur. Troisièmement, l'intérieur de la boucle fait deux accès mémoire pour lire les opérandes. D'autres algorithmes enregistrent un résultat en mémoire. Avec un processeur et une mémoire classiques, le temps d'exécution serait dominé par les accès mémoire. Mais les DSPs ne peuvent pas se le permettre, ce qui fait qu'ils optimisent leurs accès mémoire à fond. Par exemple, ils peuvent lire les deux opérandes d'une multiplication en mémoire RAM, directement. Les instructions d'un DSP peuvent faire plusieurs accès mémoire par cycle d'horloge. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 8cveplkzfdj7zxjr36no647po148ngn 765775 765774 2026-05-02T16:13:21Z Mewtow 31375 /* Les algorithmes exécutés par un DSP */ 765775 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int result = 0 ; for (i=0 ; i < N ; ++i) { result += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Optimiser de telles boucles demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, le processeur fait un calcul dit ''Multiply and Add'', à savoir une multiplication suivie d'une addition. Mieux que ca, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent donc des instructions MAD agissant sur un registre accumulateur. Ce sont donc des architectures à accumulateur. Un point de blocage est que les instructions MAD sont des instructions triadiques, à savoir qu'elles ont trois opérandes. Et cela se marie assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont dyadiques. Elles peuvent alors facilement être de type ''load-op'', avec une opérande lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Mais avec des instructions à trois opérandes, deux opérandes doivent être lues depuis la mémoire RAM : les deux opérandes de la multiplications. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> ev00j2pd4xdo1g8nwrc6tegfhbvuj45 765776 765775 2026-05-02T16:55:59Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765776 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Et ceux-ci utilisent beaucoup d'additions et de multiplications. Prenons par exemple un filtre FIR, qui est un des plus utilisé et aussi un exemple très représentatif. Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> pnoseoqc6qosq38p1dxgo8ror2orp8y 765777 765776 2026-05-02T16:58:12Z Mewtow 31375 /* Les algorithmes exécutés par un DSP */ 765777 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> nwozq3kk0quvsty4ohimnypqcvommpr 765778 765777 2026-05-02T17:01:19Z Mewtow 31375 /* L'optimisation du filtre FIR */ 765778 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. Les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution est d'utiliser une mémoire soit multiports, pour gérer nativement plusieurs accès par cycle. Une solution alternative est d'utiliser une mémoire multi-banque rapide, ou plusieurs mémoires RAM séparées. Les DSPs tendent aussi à intégrer des ''local store'', en plus de la RAM principale. Et c'est ce ''local store'' qui est multiport, alors que la RAM principale ne l'est pas forcément. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 6ltu9gxmkvpntwxdcvlpz1sx90mo0yv 765779 765778 2026-05-02T17:06:08Z Mewtow 31375 /* Les DSPs utilisent des mémoires multibanques ou multiports */ 765779 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> e2c92hrg2xl1i8c61kgxduunap9iufn 765780 765779 2026-05-02T17:43:08Z Mewtow 31375 /* Les instructions arithmétiques */ 765780 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 6fb1j7h37gneqec1rg95e0ztb1c1qcp 765781 765780 2026-05-02T17:48:42Z Mewtow 31375 /* Les registres d'un DSP et leurs accumulateurs */ 765781 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et leurs instructions arithmétiques sont conçues pour ne pas arrondir quand il ne le faut pas. Pour cela, ils utilisent des registres accumulateurs de grande taille. En général, les résultats d'une multiplication sont mémorisés dans un accumulateur, qui fait facilement 56 bits ou plus. Ainsi, les résultats d'une multiplication ne sont pas arrondis ou tronqués, tous les bits du résultat sont mémorisés dans l'accumulateur. Pour les additions, les accumulateurs sont plus petits, mais contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le TMS32010 était un DSP de ce type. Il disposait d'un multiplieur et d'une unité de calcul, couplés à trois registres : un registre accumulateur, un registre T et un registre P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. L'ALU entière prenait un opérande dans l'accumulateur, et la seconde opérande dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> ojr9slpbijxc4iurnens78wobtp8ecl 765782 765781 2026-05-02T17:54:48Z Mewtow 31375 /* Les registres d'un DSP et leurs accumulateurs */ 765782 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont des besoins en termes de précision plus important que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 43k6fmpz7l1h6urw4buaf48q7iwbx8e 765783 765782 2026-05-02T17:55:13Z Mewtow 31375 /* Les registres d'un DSP et leurs accumulateurs */ 765783 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. ===Les registres d'un DSP et leurs accumulateurs=== Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> gxnsoiby2aegxbr4ojl7ypkrsuw1gdo 765784 765783 2026-05-02T17:55:41Z Mewtow 31375 /* Les registres d'un DSP et leurs accumulateurs */ 765784 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les premiers DSPs étaient des architectures à accumulateur, avec peu de registres autres. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 4rppqvn0fonb5gnyakcqual1q9umszf 765785 765784 2026-05-02T17:57:08Z Mewtow 31375 /* Les instructions arithmétiques */ 765785 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===L'optimisation du filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points. Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> pq4u49xsczrnq6fl5eejsw1v9r5n2pd 765786 765785 2026-05-02T17:59:19Z Mewtow 31375 /* L'optimisation du filtre FIR */ 765786 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation du filtre FIR=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les boucles sont optimisées sur les DSPs=== L'algorithme est répété à chaque arrivée d'échantillon, ce qui fait qu'il est exécuté en boucle. L'algorithme est souvent assez "simple", avec peu d'instructions. Mais celles-ci sont exécutées en boucle. Aussi, l'exécution des boucles est fortement optimisée sur les DSPs. L'exécution de fonctions/procédures est aussi souvent absente, car les algorithmes exécutés sont généralement assez courts. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 3rfpxswsm05sjqp7c3neoy3emts6ebu 765787 765786 2026-05-02T17:59:40Z Mewtow 31375 /* Les boucles sont optimisées sur les DSPs */ 765787 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation du filtre FIR=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> biwagen2ax1t4d2h9u65a9hxgcpwi5d 765788 765787 2026-05-02T18:00:18Z Mewtow 31375 /* L'optimisation du filtre FIR */ 765788 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 0ms6eof6ldd3tmryo5xeubu4675q934 765789 765788 2026-05-02T18:00:35Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765789 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. Optimiser une telle boucle demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Le jeu d'instruction des DSPs=== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> pcofujw0zxmmbkso3pkjd7akitzhit8 765790 765789 2026-05-02T18:01:29Z Mewtow 31375 /* Le code assembleur d'un filtre FIR */ 765790 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP est adapté aux algorithmes de traitement de signal== Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ===Les instructions arithmétiques=== Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Le jeu d'instruction des DSPs=== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> cy4h6ums0tv2j87jf8hfkyy5o3tvgne 765791 765790 2026-05-02T18:01:48Z Mewtow 31375 /* Les instructions arithmétiques */ 765791 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP est adapté aux algorithmes de traitement de signal== Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSPs incluent de nombreuses optimisations pour les boucles, afin de rendre leur exécution plus rapide. Pour accélérer les boucles for, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Le jeu d'instruction des DSPs=== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> iyzfbd43zg8sw5g8kblmfasbdzdi45i 765792 765791 2026-05-02T18:02:06Z Mewtow 31375 /* L'optimisation des boucles sur un DSP */ 765792 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP est adapté aux algorithmes de traitement de signal== Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Deuxièmement, l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul. Ce sont donc des architectures à accumulateur. Troisièmement, l'algorithme utilise une multiplication suivie d'une addition. Or, il existe une instruction dite MAD (''Multiply And Add''), qui fait les deux en une seule instruction. utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. Cependant, les instructions MAD sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Quatrièmement, les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Aussi, vous ne serez pas étonnés d'apprendre que les DSP fournissent systématiquement l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication et une addition en un seul cycle d'horloge. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Le jeu d'instruction des DSPs=== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> c3d9mqzjrlyzfs549ksolp74h46t2r8 765793 765792 2026-05-02T18:07:14Z Mewtow 31375 /* L'optimisation des opérations arithmétiques */ 765793 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP est adapté aux algorithmes de traitement de signal== Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse (pas détaillés ci-dessus), optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Nous allons détailler les optimisations possibles dans ce qui suit. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ===Le jeu d'instruction des DSPs=== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> qwig2r2d7he4oky3r3vw5bnilth5api 765794 765793 2026-05-02T18:09:07Z Mewtow 31375 /* Le jeu d'instruction d'un DSP est adapté aux algorithmes de traitement de signal */ 765794 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, les DSPs intègrent de quoi faire plusieurs accès mémoire en même temps, afin de lire les deux opérandes d'une multiplication en mémoire RAM, directement. Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Vous remarquerez que le code précédent n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. ===Le jeu d'instruction des DSPs=== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ==L'architecture mémoire des DSP== La présence de caches est une source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les DSPs utilisent des mémoires multibanques ou multiports=== Plus haut, en étudiant le filtre FIR, nous avons vu que les DSP gagnent à faire plusieurs accès mémoire par cycle, pour charger deux opérandes à la fois. Pour cela, les instructions des DSPs sont capables d'effectuer plusieurs accès mémoires simultanés par cycle, en parallèle. De nombreux DSPs permettent de lire en même temps tous les opérandes d'un calcul, et éventuellement d'écrire le résultat en mémoire lors du même cycle. Il existe aussi des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Pour gérer plusieurs accès mémoire par cycle, la mémoire RAM doit être adaptée. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Et cela permet aussi de se passer de registres, au-delà de l'accumulateur et d'un compteur de boucle. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> bq1f9d721mf0n06uh8jy5ipb3gzfdc4 765795 765794 2026-05-02T18:14:09Z Mewtow 31375 765795 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ===Le jeu d'instruction des DSPs=== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> qiffjas8bqfzauk01kxevchbyayty78 765796 765795 2026-05-02T18:14:22Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765796 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> b7lv41dhyzofj4tax5tbx28r0ax9jvu 765797 765796 2026-05-02T18:14:50Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765797 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=2|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> bkf43rakqogg04mvtuvk57klyrzhpx6 765798 765797 2026-05-02T18:19:06Z Mewtow 31375 /* Les optimisations des lectures/écritures */ 765798 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les modes d’adressage spécifiques aux DSPs=== Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> owgl3lj5xgtau1spcf43kxfz64902s7 765799 765798 2026-05-02T18:19:32Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765799 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. La différence fait que quelques calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour cela, les DSPs intègrent des modes d'adressage spécialisés, qui permettent de réduire les calculs d'adresse à peu de chagrin. Concrètement, ces modes d'adressage permettent d'utiliser les indices comme si la file était un tableau, à savoir que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs incorporent pas mal de modes d'adressages spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, ces files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Les DSPs implémentent l'adressage indirect à registre, avec post- ou préincrément/décrément, histoire de réduire le nombre d'instructions à exécuter. Mais il existe d'autres modes d'adressages spécifiquement conçus pour les files qu'on ne retrouve que sur les DSP et pas ailleurs. Il s'agit de l'adressage modulo et de l'adressage à bits inversés. Le '''mode d'adressage « modulo »''' est une variante de l'adressage indirect avec post- ou pré-incrément/décrément. Pour rappel, avec le mode d'adressage indicé avec post- ou pré-incrément/décrément, l'adresse est dans un registre qui est incrémenté/décrémentée à chaque accès mémoire. Le mode d'adressage modulo garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 8rj2ocq8vac7vusc0h969eljpa6zla2 765800 765799 2026-05-02T18:29:16Z Mewtow 31375 /* Les optimisations des calculs d'adresse */ 765800 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, dans lesquels la position des échantillons est décalée. Mais cette différence fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> ntwjenactv40i8jsat5ektzsnigwy09 765801 765800 2026-05-02T18:37:42Z Mewtow 31375 /* Les optimisations des calculs d'adresse */ 765801 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> j03hrhtx1rbuww8x93hpdda69ntzunm 765802 765801 2026-05-02T18:41:30Z Mewtow 31375 /* Les optimisations des calculs d'adresse */ 765802 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 60rwclnd0kbpxt2f6e0j2u5vw5d0j6q 765803 765802 2026-05-02T18:42:22Z Mewtow 31375 /* Les optimisations des calculs d'adresse */ 765803 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==Le jeu d'instruction des DSPs== Les DSPs ont beaucoup évolués dans le temps, mais quelques détails sont restés constants dans le temps. Les DSPs sont souvent classés en trois à cinq générations, mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD, ainsi que des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> tabbi98woqvvbw632d4qq9o0u51xxdy 765804 765803 2026-05-02T18:45:46Z Mewtow 31375 /* Le jeu d'instruction des DSPs */ 765804 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ==Les algorithmes exécutés par un DSP== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les suivrvoeler, sans expliquer pourquoi et comment ils marchent. ===L'exemple des filtres FIR=== L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. ===Le code assembleur d'un filtre FIR=== Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> cd5txeuu9eimtwsczz56tttlxs6ihaa 765805 765804 2026-05-02T18:46:21Z Mewtow 31375 /* Les algorithmes exécutés par un DSP */ 765805 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> btevrbkjuuwdlqo0m9libw4itu8s9go 765806 765805 2026-05-02T18:55:12Z Mewtow 31375 /* La microarchitecture des DSPs */ 765806 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 21s1u95vjer4b77ra7io8ctb7x04yld 765808 765806 2026-05-02T19:07:35Z Mewtow 31375 /* L'optimisation des boucles sur un DSP */ 765808 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquentes. Je rappelle que les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer sur la même taille que les opérandes. Mais sur les DSPs, ce n'est pas le cas. Pour éviter les arrondis mal venus, ils utilisent des registres de grande taille. Pour les multiplications, tous les bits du résultat sont mémorisés dans le registre pour le résultat de la multiplication. Pour les additions, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes, afin de ne pas déborder facilement. De tels bits supplémentaires sont appelés des '''''guard bits'''''. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> l16yc1xjeoh5gdesqlzar02wbb2zdjs 765809 765808 2026-05-02T19:23:55Z Mewtow 31375 /* L'optimisation des opérations arithmétiques */ 765809 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les processeurs RISC et CISC ne sont pas très adaptés pour ça, ils ont beaucoup trop de registres, qui seraient inutilisés pour des algorithmes de traitement de signal. Les DSPs, quant à eux, n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. Les DSPs ont progressivement évolués pour ajouter des registres spécialisés. Les DSPs modernes tendent à se passer d'accumulateurs, mais c'est loin d'être la règle. L'accumulateur est souvent complété par des registres pour les opérandes, des registres séparés pour les adresses, des registres d'indice, des registres pour les compteurs de boucles, et quelques autres. Tout cela pour dire que les DSPs ne sont pas des architectures à registres généraux classiques. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 4chl28wim5pjo2ph7fyp0ryblip4bf0 765810 765809 2026-05-02T19:29:02Z Mewtow 31375 /* L'optimisation des opérations arithmétiques */ 765810 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. ===L'optimisation des opérations arithmétiques=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. ===Les optimisations des lectures/écritures=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les optimisations des calculs d'adresse=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 532gs488iix33xxdu067jjuyh1jarbb 765811 765810 2026-05-02T19:30:29Z Mewtow 31375 /* Le jeu d'instruction d'un DSP */ 765811 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 385s6wxelrp5d0xlp0kfenodwp8pwr0 765812 765811 2026-05-02T19:31:32Z Mewtow 31375 /* L'optimisation des boucles sur un DSP */ 765812 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée. ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> f8hrcef5bebu7jlxzr00gzf2j6iq5zw 765813 765812 2026-05-02T19:32:53Z Mewtow 31375 /* Les opérations arithmétiques d'un DSP */ 765813 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 8ikyenj0j1bdl0yk4cocgy6vzq49ec1 765814 765813 2026-05-02T19:33:47Z Mewtow 31375 /* Les accès mémoire sur un DSP */ 765814 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande MAD (adresse opérande N) -> R0 ; (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> nubojse72qn1jgmd70ubmdghtvo6ghk 765815 765814 2026-05-02T19:35:23Z Mewtow 31375 /* Les modes d'adressage d'un DSP */ 765815 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande MAD (adresse opérande N) -> R0 ; (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 0cws92qpkgd9n3ijrfgub5wnmkrni2c 765816 765815 2026-05-02T19:35:52Z Mewtow 31375 /* Les accès mémoire sur un DSP */ 765816 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 6nrcvv0edbur58ke1pibgk76w9647uo 765817 765816 2026-05-02T19:36:11Z Mewtow 31375 /* Les accès mémoire sur un DSP */ 765817 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule : <syntaxhighlight lang="asm"> // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> gfy0vl1yxr60tsnqd01iduxdm50y2k5 765818 765817 2026-05-02T19:36:50Z Mewtow 31375 /* Les algorithmes exécutés par un DSP */ 765818 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 00shnvbpkpwmdr7sixs6ct7mq2g8bmh 765819 765818 2026-05-02T20:01:30Z Mewtow 31375 /* Les contraintes dites temps réel */ 765819 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> marfnect76u1ha7h9xadvqimhjh4u8l 765827 765819 2026-05-02T20:04:20Z Mewtow 31375 /* Les DSP intègrent souvent un contrôleur DMA */ 765827 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 8391zuzy75dzarrd6uwqpm7iuv8ieun 765835 765827 2026-05-02T20:08:57Z Mewtow 31375 /* Les contraintes dites temps réel */ 765835 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée par des instructions mémoire spécifiques et une architecture mémoire particulière, qu'on détaille dans ce qui suit. Pour compenser l'absence de cache, les DSP utilisent plusieurs optimisations. Une optimisation quasi-systématique est l'usage d'une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préférent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. De même, si la présence de caches est un problème, ce n'est pas le cas des ''local store''. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 0caz0bvc50maa6e4ylkl9f9pdal01yx 765836 765835 2026-05-02T20:10:21Z Mewtow 31375 /* Les contraintes dites temps réel */ 765836 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] l'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> g8bynh2xfpryouidpkzg6drueb9awmw 765837 765836 2026-05-02T20:11:07Z Mewtow 31375 /* Les opérations arithmétiques d'un DSP */ 765837 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Les DSP intègrent souvent un contrôleur DMA=== Un autre point important est que l'écriture des échantillons en mémoire RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 4pvyfwiryvp1budnanr6yo7zuh20cpj 765838 765837 2026-05-02T20:23:00Z Mewtow 31375 /* Les DSP intègrent souvent un contrôleur DMA */ 765838 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> ax3jiyq36c2leaexapq3go5mpk6cn5x 765839 765838 2026-05-02T20:23:20Z Mewtow 31375 /* Les accès mémoire sur un DSP */ 765839 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Le DSP est vraiment utilisé uniquement pour faire des calculs, pas pour gérer des entrées-sorties. Les échantillons sont écrits en mémoire en utilisant le ''Direct Memory Access''. La mémoire RAM est associée à un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> lqp5nca5xe4nrqckswbxhyibd246czl 765840 765839 2026-05-02T20:24:09Z Mewtow 31375 /* Les accès mémoire sur un DSP */ 765840 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Les échantillons sont écrits dans le ''local store'' ou la RAM en utilisant le ''Direct Memory Access''. Le DSP contient pour cela un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM et/ou le ''local store''. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 6txyr34k9tpjglpi7dxht8b1pfhi7kf 765841 765840 2026-05-02T20:24:27Z Mewtow 31375 /* Les accès mémoire sur un DSP */ 765841 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Les échantillons sont écrits dans le ''local store'' ou la RAM en utilisant le ''Direct Memory Access''. Le DSP contient pour cela un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM et/ou le ''local store''. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM ou au ''local store''. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. ==La microarchitecture des DSPs== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. ===Les registres d'adresse et d'indice=== Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 535v4beqxvq7h6tmw5yv6bgtopboihi 765842 765841 2026-05-02T20:25:08Z Mewtow 31375 /* La microarchitecture des DSPs */ 765842 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Les échantillons sont écrits dans le ''local store'' ou la RAM en utilisant le ''Direct Memory Access''. Le DSP contient pour cela un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM et/ou le ''local store''. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM ou au ''local store''. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Ils existent aussi bien sur les DSP qui utilisent des accumulateurs, que ceux qui n'en ont pas. Le premier cas est cependant plus fréquent, la présence de registres d'adresse va souvent de pair avec des accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Le jeu d'instruction d'un DSP : généralités=== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 61etjbbd7ol8788bh0pq31bqj8cdds2 765843 765842 2026-05-02T20:26:09Z Mewtow 31375 /* Les registres d'un DSP */ 765843 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registres. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grands que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normaux, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : une opérande est lue depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplications doivent être lues depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Les échantillons sont écrits dans le ''local store'' ou la RAM en utilisant le ''Direct Memory Access''. Le DSP contient pour cela un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM et/ou le ''local store''. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM ou au ''local store''. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être remplit à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutée dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. A la place, ils préfèrent utiliser des registres spécialisées, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lues depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Il faut dire que cela simplifie grandement l'usage de l'adressage indirect/indicé sur les DSPs qui sont avant tout des processeurs à accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Le jeu d'instruction d'un DSP : généralités=== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 1bea7r5yvqil92j4hd90f9vcnmtn1ge 765844 765843 2026-05-02T20:31:12Z Mewtow 31375 765844 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. Par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registre. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grand que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normal, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : un opérande est lu depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplication doivent être lus depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Les échantillons sont écrits dans le ''local store'' ou la RAM en utilisant le ''Direct Memory Access''. Le DSP contient pour cela un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM et/ou le ''local store''. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM ou au ''local store''. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être rempli à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutées dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. À la place, ils préfèrent utiliser des registres spécialisés, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lus depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Il faut dire que cela simplifie grandement l'usage de l'adressage indirect/indicé sur les DSPs qui sont avant tout des processeurs à accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Le jeu d'instruction d'un DSP : généralités=== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> 0if2d18gb13r4uqcn7cz7bb5wmlnk6j 765847 765844 2026-05-03T01:30:37Z Mewtow 31375 /* Les algorithmes exécutés par un DSP */ 765847 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. Par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. La '''transformée de Fourier rapide''' est un algorithme un peu plus complexe que le précédent, mais particulièrement utile en traitement de signal. Sans rentrer dans les détails d'implémentation, il fonctionne lui aussi avec des instructions de multiplication et d'addition, sauf qu'il utilise deux variables. Appelons-les A et B. A chaque itération de boucle, on effectue les deux calculs : : <math>A = A + B \times \text{coefficient A}</math> : <math>B = B + A \times \text{coefficient B}</math> ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registre. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grand que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normal, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : un opérande est lu depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplication doivent être lus depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Les échantillons sont écrits dans le ''local store'' ou la RAM en utilisant le ''Direct Memory Access''. Le DSP contient pour cela un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM et/ou le ''local store''. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM ou au ''local store''. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être rempli à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutées dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. À la place, ils préfèrent utiliser des registres spécialisés, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lus depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Il faut dire que cela simplifie grandement l'usage de l'adressage indirect/indicé sur les DSPs qui sont avant tout des processeurs à accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Le jeu d'instruction d'un DSP : généralités=== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> r8vvuvcpvno7d803vpg292jicso6q2p 765848 765847 2026-05-03T01:45:29Z Mewtow 31375 /* Les opérations arithmétiques d'un DSP */ 765848 wikitext text/x-wiki Les '''processeurs de traitement du signal''', sont des jeux d'instructions spécialement conçus pour travailler sur du son, de la vidéo, des images, ou toute autre forme de signal. Ils sont aussi appelés des DSP, abréviation de ''Digital Signal Processor''. Le jeu d'instruction d'un DSP est assez spécial, car il est conçu pour des applications très spécifiques. Et la conséquence est que leur jeu d'instruction est complétement à part du reste, au point où leur donner un chapitre à part est une nécessité. ==Contexte : le traitement temps réel d'un signal== Le traitement du signal regroupe tout ce qui traite de l'audio, de la vidéo, mais aussi d'autres formes de signaux plus difficiles à conceptualiser. Les cas d'utilisations les plus courant sont le traitement d'image (appareils photos), la compression et le filtrage vidéo, les cartes sons d'un ordinateur ou d'une console de jeu, les communications sans fil avec des périphériques, la téléphonie, et autres usages moins familiers (radars, imagerie médicale). Le traitement de signal était autrefois réalisé par des composants purement analogiques. Les circuits analogiques de ce type étaient utilisés dans les anciennes radios, les chaines HI-FI, les télévisions, les magnétoscopes, et bien d'autres composants électroniques moins familiers. De nos jours, le signal est traité par des processeurs numériques. Un système audio/vidéo/autres fonctionne cependant encore avec des signaux analogiques. Simplement, il y a une conversion analogique vers numérique, un traitement par un DSP, puis une conversion numérique vers analogique. [[File:DSP block diagram.svg|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP.]] [[File:Dsp bloc fr.png|centre|vignette|upright=2|Chaine de traitement de signal utilisant un DSP, en français.]] ===Un flux de données échantillonné=== Le signal sonore/vidéo/autre qui est capté est un signal analogique : il change en permanence, il n'a pas de fréquence définie. Mais ce signal est échantillonné, à savoir que l'on mesure sa valeur à une fréquence prédéterminée, appelée la '''fréquence d’échantillonnage'''. Par exemple, pour un signal sonore, la fréquence d’échantillonnage est de 44,1 kHz, 48 kHz, 96 kHz ou 192 kHz. Soit une mesure approximativement toutes les 22,6 µs, 20,83 µs, 10,4 µs, 5,2 µs. L'intensité sonore mesurée à un instant est appelée un échantillon sonore. Il existe un équivalent pour la vidéo : les échantillons sont les images à afficher à l'écran, il y en a une toutes les 1/24ème de secondes pour une vidéo à 24 FPS. [[File:Sampled.signal.svg|centre|vignette|upright=1.5|Signal échantillonné.]] Les échantillons sont généralement accumulés dans une structure de donnée en mémoire RAM, appelée une '''file'''. Il s'agit d'un paquet d'échantillon classés par ordre d'arrivée (une structure de donnée de type FIFO). Elle a une taille finie, ce qui fait que le nombre d'échantillons est prédéfini à l'avance. Quand un échantillon est ajouté dans une FIFO pleine, la donnée la plus ancienne est éliminée (elle a déjà été traitée de toute façon). Les FIFOs de ce type sont conçues à partir d'un tableau, auquel on a ajouté deux pointeurs : un pour la donnée la plus ancienne, un pour la plus récente. Pour le dire autrement, ces deux pointeurs correspondent au début de la file et à sa fin. Le début de la file correspond à l'endroit où l'on insère les nouvelles données. La fin de la file correspond à la donnée la plus ancienne en mémoire. À chaque ajout de donnée, on doit mettre à jour l'adresse de début de file. Lors d'une suppression, c'est l'adresse de fin de file qui doit être mise à jour. Ce tableau a une taille fixe. Si jamais celui-ci se remplit jusqu'à la dernière case, (ici la cinquième), il se peut malgré tout qu'il reste de la place au début du tableau : des retraits de données ont libéré de la place. L'insertion continue alors au tout début du tableau. Cela demande de vérifier si l'on a atteint la fin du tableau à chaque insertion. De plus, en cas de débordement, si l'on arrive à la fin du tableau, l'adresse de la donnée la plus récemment ajoutée doit être remise à la bonne valeur : celle pointant sur le début du tableau. Tout cela fait pas mal de travail. Les DSPs ont des modes d'adressages spécialisés pour accéder à des données dans de telles files, comme on le verra plus bas. ===Les contraintes dites ''temps réel''=== Un DSP exécute des algorithmes très précis : un algorithme de filtrage, un algorithme de transformée de Fourier rapide, un algorithme de ''Finite Impulse Response'', des algorithmes de convolution, ou tout autre algorithme de traitement de signal. L'algorithme de filtrage travaille sur un nombre fini d'échantillons, qui sont traités en même temps par l'algorithme, et sont lus depuis la file décrite plus haut. Le DSP doit exécuter un algorithme de traitement de signal entre deux arrivées d'échantillon. Il y a donc un délai temporel très strict à respecter : le traitement doit être fini avant l'arrivée du prochain échantillon. Cette contrainte dite ''temps réel'' font que l'on ne peut pas utiliser de mémoire virtuelle, d'interruptions, ou beaucoup d'autres fonctionnalités courantes sur les processeurs modernes. Par exemple, les branchements sont une source de problèmes pour le ''temps réel''. Le temps d'exécution du code change selon que le branchement est pris ou non, les deux codes exécutés suivant que la condition est valide ou non ne faisaient pas forcément le même temps. En conséquence, les DSP incorporent des instructions à prédicats pour remplacer les branchements hors-boucles. Évidemment, les techniques de prédiction de branchement, l'usage d'exécution dans le désordre, ou toute autre optimisation du genre n'est pas vraiment compatible avec le temps réel. Aussi, les DSPs se passent de ce genre d'optimisations. Par contre, l'usage d'un pipeline est parfaitement possible, il faut juste utiliser un pipeline à émission dans l'ordre. De même, l'usage de l'émission multiple est parfaitement possible, que ce soit en utilisant un DSP superscalaire, ou un DSP de type VLIW. La seconde solution est plus souvent utilisée, la compatibilité matérielle n'est pas importante sur les DSPs. Dans les faits, presque tous les DSP commercialisés après les années 90 utilisent un pipeline, les plus récents sont eux superscalaires ou VLIW. Ils incorporent aussi des instructions SIMD, afin de gagner en performance, sans que cela pose problème pour le temps réel. La présence de caches est une autre source de problèmes dans les systèmes ''temps réel'', car le temps d'exécution dépend de si les accès mémoire font des succès ou des défauts de cache. En conséquence, les premiers DSP commercialisés n'utilisaient pas de mémoire cache pour les données, et assez rarement pour les instructions. L'absence de cache était compensée l'usage de ''local store'', qui ne posent pas de problèmes pour le temps réel. Aussi, les DSPs intègrent souvent des mémoires SRAM qui font office de ''local store'', dans lesquels des échantillons sont accumulés. Les ''local store'' sont souvent alimentés par des transferts DMA, qui font des copies ''local store'' vers mémoire RAM ou inversement. L'absence de cache marche assez mal avec un pipeline, car celui-ci implique de lire une instruction et de faire un accès mémoire dans le même cycle d'horloge. Pour compenser, les DSPs utilisent une architecture Harvard, ce qui permet au processeur de charger une instruction en même temps que ses opérandes. Et ils préfèrent souvent utiliser une architecture Harvard modifiée, qui permet de lire des constantes depuis la mémoire ROM. En complément, si un DSP ne possède généralement pas de cache pour les données, il a parfois un cache d'instructions pour accélérer l'exécution des boucles. ===Les algorithmes exécutés par un DSP=== Le jeu d'instruction d'un DSP est optimisé pour les algorithmes de traitement de signal les plus courants. Aussi, pour comprendre le jeu d'instruction d'un DSP, nous n'avons pas le choix : il faut étudier quelques algorithmes de traitement de signal. Mais rassurez-vous, pas besoin d'aller dans le détail. Nous allons voir quelques algorithmes simples, et encore : nous allons les survoler, sans expliquer pourquoi et comment ils marchent. L'exemple le plus utile pour l'étude des DSP est celui du filtre FIR (''Finite Impulse Response''). Celui-ci est assez simple sur le principe : on prend les N échantillons les plus récents, on les multiplie chacun par un coefficient, et on additionne le tout. La formule exacte ressemble à ceci : : <math>y(t) = {\sum_{n=0}^{N-1}} b_n \cdot x[t - n]</math>, avec <math>b_n</math> le coefficient de l'échantillon à l'instant t-n. [[File:FIRdrekteForm.png|centre|vignette|upright=2|Représentation graphique d'un filtre FIR. Les échantillons à l'instant n sont notés u(n), T représente le délai entre deux échantillons.]] Vous remarquerez que cet algorithme s'implémente avec une boucle, chaque itération faisant une multiplication suivie d'une addition. Si on suppose que les N échantillons sont mémorisés dans un tableau, et que les N coefficients sont dans un second tableau, alors le code devrait être le suivant : <syntaxhighlight lang="c"> int resultat = 0 ; for (i=0 ; i < N ; ++i) { resultat += coefficient[i] * echantillons[i] ; } </syntaxhighlight> Et c'est une règle pour de nombreux algorithmes de traitement de signal : ils s'implémentent avec une boucle, qui parcourt un ou plusieurs tableaux/files, l'intérieur de la boucle faisant des calculs du type a * b + c. Il est intéressant de regarder ce que donne le codé précédent, une fois compilé sur une architecture RISC. Un point important est que ce code manipule quatre variables par itération de boucle : les deux opérandes de la multiplication, le résultat de la multiplication, et la variable d'accumulation resultat. On va placer les deux opérandes dans les registres R0 et R1, le résultat de la multiplication dans le registre R2, et la variable resultat dans le registre R3. Le compteur de la boucle est mémorisé dans le registre R7. Voici une sorte de pseudo-code ASM qui ressemble pas mal à ce que ponderait un compilateur, avec pas mal de simplifications de notations pour faire passer la pilule. Les commentaires indiquent qu'une étape de calcul d'adresse est réalisée, en utilisant plusieurs instructions. <syntaxhighlight lang="asm"> // Calcul adresse coefficient // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 INC R7 ; CMP R7 N ; BRANCH adresse de début de la boucle ; </syntaxhighlight> En clair, on charge les deux opérandes dans un registre, on multiplie, on additionne, puis on effectue de quoi gérer la boucle. La '''transformée de Fourier rapide''' est un algorithme un peu plus complexe que le précédent, mais particulièrement utile en traitement de signal. Sans rentrer dans les détails d'implémentation, il fonctionne lui aussi avec des instructions de multiplication et d'addition, sauf qu'il utilise deux variables. Appelons-les A et B. A chaque itération de boucle, on effectue les deux calculs : : <math>A = A + B \times \text{coefficient A}</math> : <math>B = B + A \times \text{coefficient B}</math> ==Le jeu d'instruction d'un DSP== Les DSPs incorporent de nombreuses optimisations spécifiques, pour optimiser les algorithmes de traitement de signal. Il est intéressant d'étudier comment la boucle précédente peut être optimisée, avec un jeu d'instruction adapté. Optimiser la boucle précédente demande d'optimiser plusieurs points : optimiser les calculs d'adresse, optimiser les lectures, optimiser les calculs arithmétiques, optimiser la boucle elle-même (les trois instructions de fin). Les DSPs incorporent des optimisations pour chaque point, voyons lesquelles. ===L'optimisation des boucles sur un DSP=== Premièrement, on doit réduire le temps passé dans les tests et branchements au minimum. Sans optimisations particulières, il faut incrémenter l'indice, faire la comparaison, et le branchement conditionnel. L'intérieur de la boucle consiste en deux lectures, une addition et une multiplication, soit quatre instructions. Si on fait les comptes, un peu moins de la moitié des instructions est passé à gérer la boucle FOR. Pour éviter cela, les DSP ont des instructions qui effectuent un test, un branchement et une mise à jour de l'indice en un cycle d'horloge. Le compteur de boucle, qui compte le nombre d'itérations restantes, est placé dans un registre dédié pour les compteurs de boucles. Autre fonctionnalité : les instructions autorépétées, des instructions qui se répètent automatiquement tant qu'une certaine condition n'est pas remplie. L'instruction effectue le test, le branchement, et l’exécution de l'instruction proprement dite en un cycle d'horloge. Cela permet de gérer des boucles dont le corps se limite à une seule instruction. Cette fonctionnalité a parfois été améliorée en permettant d'effectuer cette répétition sur des suites d'instructions. Les DSPs incorporent aussi des caches d'instructions, afin de gagner de précieux cycles d'horloge. En général, les caches d'instructions en question sont spécialisés dans l'exécution de petites boucles, qui tiennent entièrement dans le cache. Ils incorporent aussi des techniques de ''zero overhead looping'', qui permet d'exécuter des boucles sans avoir à utiliser de branchements, ou presque. Pour rappel, ces techniques délimitent les instructions dans le code avec une instruction REPEAT. Celle-ci précise que les N instructions suivantes doivent s'exécuter en boucle, N fois. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe, ou du moins stocké dans un registre. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. Avec ces techniques, le code ASM d'un filtre FIR devient ceci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MUL RO , R1 -> R2 ADD R2 , R3 -> R3 </syntaxhighlight> ===Les opérations arithmétiques d'un DSP=== Voyons maintenant quelles optimisations peuvent être réalisées pour les opérations arithmétiques. Le calcul à faire est en soi très simple : une multiplication suivie d'une addition. Aussi, vous ne serez pas étonnés d'apprendre que de nombreux DSP supportent l'instruction ''multiply and accumulate'' (MAC) ou ''fused multiply and accumulate'' (FMAC), qui effectuent une multiplication suivie d'une addition en une seule instruction. Pour rappel, la première travaille sur des opérandes entiers, la seconde des opérandes flottants. Utiliser une instruction MAD simplifie donc la boucle, sans compter que cela fait économiser un registre, vu qu'on n'a pas besoin de stocker le résultat de la multiplication. L'implémentation d'un circuit MAD est très simple, on peut fusionner l'additionneur et le multiplieur. Cependant, quelques DSPs préfèrent utiliser un multiplieur séparé de l'additionneur, avec un registre entre les deux, pour l'opération entière MAD. L'opération FMAC, quant à elle, impose d'utiliser un multiplieur flottant séparé de l'additionneur flottant. Il n'est pas rare que l'instruction MAC soit pipelinée, histoire de pouvoir faire plus d'opérations MAD/FMAC par cycle d'horloge. Un autre point important est que l'addition sert juste à ajouter le produit à une variable temporaire. A chaque itération de la boucle, la variable est incrémentée avec le produit a*b. Il s'agit d'un calcul d'accumulation, qui se marie très bien avec la présence d'un registre accumulateur. Les DSPs incorporent un registre accumulateur pour simplifier ce genre de calcul, ce qui en fait des architectures à accumulateur. Avec l'usage d'une instruction MAD couplée à un accumulateur, le code d'un filtre FIR devient celui-ci : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande LOAD (adresse opérande N) -> R0 ; // Calcul adresse coefficient LOAD (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Les premiers DSPs étaient des architectures à accumulateur, avec des registres pour les multiplications, mais sans aucun registre général. Par exemple, le DSP TMS32010 de marque Texas Instrument disposait d'un additionneur et d'un multiplieur, couplés à trois registres : un registre accumulateur, et deux registres T et P pour les multiplications. Le registre T mémorisait le premier opérande d'une multiplication, la seconde opérande était lue depuis la mémoire RAM, le résultat était mémorisé dans le registre P. Une telle organisation était conçue pour faire des opérations MAD. : Notez que l'usage d'un registre entre le multiplieur et l'additionneur permet de pipeliner l'unité de calcul MAD/FMAC. [[File:Chemin de données d'un DSP.png|centre|vignette|upright=2|Chemin de données d'un DSP]] L'usage d'accumulateurs, en lieu et place de registres généraux, peut sembler étrange. Mais en réalité, il se comprend bien quand on sait que les DSPs ont des besoins en termes de précision plus importants que sur un ordinateur classique. Il n'est pas acceptable de perdre en qualité d'image ou sonore, parce que le processeur a fait un arrondi un peu trop visible. Et ces arrondis ou troncatures sont très fréquents avec des registres généraux, alors qu'on peut les éviter avec des accumulateurs. Voyons comment. Pour rappel, les multiplications donnent un résultat deux fois plus grand que leurs opérandes. Multipliez deux opérandes de 16 bits, le résultat en fera 32. Sur un ordinateur normal, les résultats sont tronqués pour rentrer dans les registres généraux. Par exemple, sur un processeur 32 bits, le résultat d'une multiplication est tronqué, on ne garde que les 32 bits de poids faible, en espérant qu'aucun débordement n'aura lieu. A la rigueur, certains processeurs permettent d'utiliser deux registres de 32 bits : un pour les 32 bits de poids faible du résultat, un autre pour les 32 bits de poids fort. Mais c'est assez rare. Les DSPs utilisent à la place des accumulateurs de grande taille pour éviter les arrondis mal venus. Pour les multiplications, nous avons vu que le résultat est mémorisé dans un registre spécialisé, associé au multiplieur. Le truc est que le résultat de la multiplication n'est pas tronqué, car le registre est prévu pour. Il a une taille bien plus grande que les opérandes, deux fois plus. Par exemple, pour un DSP qui manipule des opérandes de 24 bits, le registre pour les multiplications fera 48 bits, soit le double. Il faut noter que le problème a aussi lieu pour l'addition, après la multiplication. Pour une addition, le résultat fera un bit de plus que les opérandes : additionnez deux opérandes de 32 bits, le résultat en fera 33. Vu que le DSP effectue une série d'additions consécutives, le résultat final aura facilement une dizaine de bits en plus, parfois plus, le nombre exact dépendant des opérandes et du nombre d'itérations de la boucle. Sur un CPU normal, ces bits en plus sont une source de débordements d'entiers, et sont généralement éliminés. Mais sur les DSPs, ils sont conservés. Pour éviter les débordements d'entiers, les accumulateurs contiennent souvent 4 à 8 bits de plus que les opérandes. Les bits supplémentaires sont appelés des '''''guard bits'''''. Pour donner un exemple, les DSP Blackfin+ géraient des opérandes de 32 bits, avaient un registre de 64 bits pour le résultat de la multiplication, mais utilisaient des accumulateurs de 72 bits. Pour donner un autre chiffre, les DSPs de 24 bits ont souvent des accmulateurs de 56 bits. [[File:Chemin de données d'un DSP, avec guard bits et produit long.png|centre|vignette|upright=2|Chemin de données d'un DSP, avec guard bits et produit long]] Pour accélérer les transformées de Fourier, il est possible d'utiliser deux accumulateurs. Pour donner un exemple, le Motorola DSP 5600x avait deux accumulateurs, ainsi que 4 registres pour les opérandes des opérations MAD. Les registres pour les opérandes faisaient 24 bits, les deux accumulateurs en faisaient 56. Les deux accumulateurs étaient reliés à des circuits décaleur. [[File:Unité de calcul du Motorola DSP 5600x.png|centre|vignette|upright=2|Unité de calcul du Motorola DSP 5600x]] Les DSP se classent en deux sous-types : ceux qui utilisent des nombres flottants et ceux qui utilisent des nombres à virgule fixe. Les premiers DSPs utilisaient la virgule fixe. Le cas classique était des DSP utilisant des opérandes de 24 bits : 16 pour la partie entière, 8 pour la partie fractionnaire. Notons que 24 bits était la norme pour encoder de l'audio sur des CD audio, ce qui fait que les DSPs de l'époque utilisaient cette précision. Par la suite, des DSP 16 et 32 bits sont apparus, puis des DSP flottants. Les DSP utilisent souvent l'arithmétique saturée, car c'est assez naturel quand on manipule un signal qui peut... saturer ! Quand un signal sonore sature, cela veut dire que l'intensité sonore dépasse le maximum représentable. En clair, l'intensité sonore dépasse le maximum encodable avec un entier/flottant, il y a un débordement entier/flottant. Si on traitait ce débordement en ne conservant que les bits de poids faible du résultat, un son qui sature donnerait un son très faible, ce qui n'est pas le comportement attendu. Il est plus naturel de mettre le son à la valeur maximale représentable. Les DSP les plus simples n'utilisent que l'arithmétique saturé, mais d'autres plus complexes permettent de configurer si on utilise l'arithmétique saturée ou non. Certains permettent d'activer et de désactiver l'arithmétique saturée, en modifiant un registre de configuration du processeur. D'autres fournissent chaque instruction de calcul en double : une en arithmétique modulaire, l'autre en arithmétique saturée ===Les accès mémoire sur un DSP=== Les instructions MAD/FMAC sont des instructions triadiques, qui se marient assez mal avec une architecture à accumulateur. En théorie, les instructions d'une machine à accumulateur sont de type ''load-op'' : un opérande est lu depuis l'accumulateur, l'autre depuis la mémoire RAM. Pour une instruction MAD, les deux opérandes de la multiplication doivent être lus depuis la mémoire RAM. Pour cela, il y a deux solutions. La première est que les instructions des DSPs peuvent faire plusieurs accès mémoire en même temps. Concrètement, l'idée est que la multiplication peut lire ses deux opérandes en mémoire RAM, sans avoir à passer par des registres. La multiplication, voire l'instruction MAD/FMAC, sont alors de pures instructions ''load-op'', mais adaptées à l'usage de trois opérandes : deux sont lus depuis la mémoire RAM, la troisième l'est depuis l'accumulateur. Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient MAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; </syntaxhighlight> Une autre solution lit les opérandes et les copies dans deux registres, qui sont utilisés par l'instruction MAD/FMAC/MUL. Pour cela, le DSP utiliser des instructions d'accès mémoires capables de faire plusieurs accès mémoire par cycles : ce sont des ''déplacements parallèles'' (''parallel moves''). Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> LOOP N fois, les X instructions suivantes // Calcul adresse opérande et coefficient LOAD (adresse opérande N) -> R0 , (adresse coefficient N) -> R1 ; MAD RO , R1 </syntaxhighlight> Dans les deux cas, la mémoire RAM doit être adaptée pour faire plusieurs accès mémoire par cycle. Une première solution, qui marche parfaitement pour les filtres FIR, est d'utiliser deux mémoires séparées : une qui contient les échantillons, une autre pour les coefficients. Les deux RAM peuvent être accédées en parallèle, ce qui permet de charger les deux opérandes d'une multiplication en même temps. Une solution plus générale est d'utiliser une mémoire multiport, pour gérer nativement plusieurs accès par cycle. Cette solution a l'avantage de fonctionner pour d'autres algorithmes que les filtres FIR, et est en quelque sorte plus générale. [[File:Architecture mémoire des DSP.png|centre|vignette|upright=3|Architecture mémoire des DSP.]] Un autre point important est que l'écriture des échantillons dans le ''local store'' ou la RAM ne passe pas par le DSP, histoire de lui économiser du travail. Les échantillons sont écrits dans le ''local store'' ou la RAM en utilisant le ''Direct Memory Access''. Le DSP contient pour cela un contrôleur DMA, qui transfère les échantillons nécessaires du convertisseur analogique-numérique, vers la mémoire RAM et/ou le ''local store''. Il faut absolument éviter que le DSP et le contrôleur DMA se marchent sur les pieds. Pas question qu'ils accèdent en même temps à la mémoire RAM ou au ''local store''. Et il faut éviter absolument que le contrôleur DMA monopolise la RAM et laisse le DSP patienter trop longtemps, idem pour le cas inverse. La majorité des DSPs intègre des techniques d'arbitrage du bus mémoire assez complexes. Une solution alternative, elle aussi très utilisée, dédie un port mémoire au contrôleur DMA. Le contrôleur DMA accède à la RAM via son propre port mémoire dédié, en même temps que le processeur, les deux peuvent faire un accès mémoire en même temps. Plus besoin d'arbitrer le bus mémoire. [[File:DSP avec controleur DMA.png|centre|vignette|upright=2.5|DSP avec contrôleur DMA.]] ===Les modes d'adressage d'un DSP=== Une autre source d'optimisation est liée aux calculs d'adresse. Les échantillons ne sont pas stockés dans un tableau, mais dans une file. La différence n'est pas énorme, car les files sont souvent implémentées par des tableaux, associés à deux pointeurs : un qui donne la position de la donnée la plus ancienne, un autre pour la donnée la plus récente. [[File:Fonctionnement d'une file - 1.png|centre|vignette|upright=2|Fonctionnement d'une file.]] Le tableau commence à être rempli à partir de sa première case, d'indice 0. Les données accumulées ensuite sont ajoutées dans la case d'indice 12, puis 2, puis 3, etc. Les données devenues inutiles sont retirées de la FIFO, ce qui laisse des vides, qui peuvent être réutilisées par la suite. Quand on arrive à la fin du tableau, le remplissage recommence à partir du début du tableau, si des espaces vides ont été libérés. Voici un exemple : {| |- |[[File:Circular buffer - XX123XX with pointers.svg|vignette|upright=1.5|Circular buffer - XX123XX with pointers]] |- |[[File:Circular buffer - XX1234X with pointers.svg|vignette|upright=1.5|Circular buffer - XX1234X with pointers]] |- |[[File:Circular buffer - XXX234X with pointers.svg|vignette|upright=1.5|Circular buffer - XXX234X with pointers]] |- |[[File:Circular buffer - XXX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - XXX2345 with pointers]] |- |[[File:Circular buffer - 6XX2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6XX2345 with pointers]] |- |[[File:Circular buffer - 67X2345 with pointers.svg|vignette|upright=1.5|Circular buffer - 67X2345 with pointers]] |- |[[File:Circular buffer - 6782345 with pointers.svg|vignette|upright=1.5|Circular buffer - 6782345 with pointers]] |} Les DSP tendent à utiliser des files de taille fixe, ce qui fait que le remplissage ne s'arrête pas quand la file est pleine. A la place, le nouvel échantillon remplace l'échantillon le plus ancien. Il n'y a donc pas vraiment besoin d'utiliser deux pointeurs, car on est certain que la file sera pleine en permanence et que ce remplacement se fera sans douleur. Une file sur un DSP s'implémente donc en utilisant trois pointeurs : un pour l'adresse de départ du tableau en mémoire, un autre pour l'adresse de fin du tableau, et un pointeur qui pointe vers la donnée la plus ancienne/récente. [[File:Circular buffer - 6789AB5 full.svg|centre|vignette|upright=2|File telle qu'utilisée sur un DSP.]] En clair, les files sont des tableaux dans lesquels la position des échantillons est décalée. La différence est mineure, mais elle fait que des calculs d'adresse sont requis pour déterminer à quel indice lire dans le tableau. Pour éviter cela, les DSPs intègrent des modes d'adressage spécialisés, conçus pour fonctionner au mieux avec les files mentionnées plus haut. Déjà, les files sont implémentées avec des tableaux, ce qui fait que les modes d'adressages indicés sont une nécessité absolue. Déjà, les DSP supportent l'adressage "Base + Indice", qui permet de grandement simplifier les calculs d'adresse pour une file. L'adresse de base utilisée n'est pas l'adresse de base du tableau, mais celle de la donnée la plus récente ou la plus ancienne. L'idée est que l'échantillon le plus récent est celui d'indice zéro, le précédent celui d'indice 1, celui encore précédent est d'indice 2, etc. Les DSPs anciens/basiques étant des architectures à accumulateur, ils incorporent pour cela des '''registres d'indice''', et éventuellement des '''registres d'adresse''' pour mémoriser l'adresse de base. Une autre optimisation est l'usage de modes d'adressage avec post- ou pré-incrément/décrément. L'idée est que la lecture met à jour automatiquement l'indice utilisé, afin d'économiser une instruction d'incrémentation ou une addition. La lecture qui lit un opérande en mémoire RAM incrémente alors automatiquement l'indice utilisé dans l'adressage "Base + Indice". Cependant, faire ainsi pose un petit problème : que faire quand on atteint la fin du tableau ? En théorie, on devrait reprendre au tout début du tableau. Mais l'adressage "Base + Indice" ne permet pas de faire cela automatiquement. Sans optimisations, on devrait faire un test et un branchement avant chaque lecture, pour gérer ce cas. Mais les DSPs incorporent un mode d'adressage spécialisé, qui permet de gérer automatiquement ce cas problématique, directement dans la lecture elle-même ! Il s'agit du '''mode d'adressage « modulo »'''. Il garantit de plus que l'adresse reste dans la file, à savoir dans l'intervalle [ adresse de début du tableau , adresse de fin du tableau ]. Si lors d'une incrémentation, on dépasse l'adresse de fin du tableau, l'adresse est réinitialisée pour pointer sur l'adresse de début du tableau. Avec ce mode d'adressage, le code d'un filtre FIR devient : Le code d'un filtre FIR devient alors : <syntaxhighlight lang="asm"> // Configuration des registres d'adresse LOOP N fois, l'instruction suivante MAD registre adresse N°1 -> R0 ; registre adresse N°2 -> R1 ; </syntaxhighlight> Le mode d'adressage modulo semble assez spécialisé, mais sachez que les DSPs supportent des modes d'adressages encore plus spécialisés, utilisables seulement par un ou deux algorithmes triés sur le volet ! L''''adressage à bits inversés''' (''bit-reverse'') a été inventé pour accélérer les algorithmes de calcul de transformée de Fourier rapide, un « calcul » très courant en traitement du signal. Cet algorithme lit des échantillons dans un tableau, et fournit des résultats dans un autre tableau. Seul problème, l'ordre des résultats dans le tableau d'arrivée est assez spécial. Par exemple, pour un tableau de 8 cases, les données arrivent dans cet ordre : 0, 4, 2, 6, 1, 5, 3, 7. L'ordre semble être totalement aléatoire. Mais il n'en est rien : regardons ces nombres une fois écrits en binaire, et comparons-les à l'ordre normal : 0, 1, 2, 3, 4, 5, 6, 7. {|class="wikitable" |- !Ordre normal!!Ordre Fourier |- ||000||000 |- ||001||100 |- ||010||010 |- ||011||110 |- ||100||001 |- ||101||101 |- ||110||011 |- ||111||111 |} Comme vous le voyez, les bits de l'adresse Fourier sont inversés comparés aux bits de l'adresse normale. Inverser les bits d'une adresse peut être fait avec des opérations bit à bit, des décalages et rotations, mais cela prendrait beaucoup d'instructions. Il est possible d'imaginer une instruction REVERSE qui inverse les bits d'une adresse. Ce serait là une solution fort intéressante, que certains DSPs doivent sans doute implémenter. Mais beaucoup de DSPs préfèrent utiliser un mode d’adressage qui inverse tout ou partie des bits d'une adresse mémoire : l'adressage ''bit-reverse'' mentionné plus haut. Une autre solution utilise un adressage indicé, mais qui calcule les adresses différemment. Il suffit, lorsqu'on ajoute un indice à l'adresse, de renverser la direction de propagation de la retenue lors de l'addition. Certains DSP disposent d'instructions pour faire ce genre de calculs. ===Les registres d'un DSP=== Vous remarquerez que le code d'un filtre FIR n'utilise pas beaucoup de registres. Et ce d'autant plus si on utilise des instructions MAD et un registre accumulateur. Et cela se généralise aux autres algorithmes de traitement de signal. Ils effectuent un traitement basique sur chaque échantillon, qui ne demande pas d'utiliser beaucoup de registres. Aussi, les DSPs n'utilisent pas de registres généraux. À la place, ils préfèrent utiliser des registres spécialisés, avec un compteur de boucle, des registres pour les calculs d'adresse, un accumulateur, et éventuellement un ou deux registres pour les opérandes lus depuis la mémoire. La plupart des instructions et modes d'adressage ne sont utilisables que sur certains types de registres. L'encodage des instructions est alors simplifié, mais cette spécialisation des registres pose de nombreux problèmes pour les compilateurs, qui peuvent donner lieu à une génération de code sous-optimale. Il n'est pas étonnant de constater que les DSP ont longtemps été programmés en assembleur, et il n'est pas rare qu'ils le soient toujours. Il est fréquent que les DSP aient des registres séparés pour les adresses, voire des registres d'indice. Il faut dire que cela simplifie grandement l'usage de l'adressage indirect/indicé sur les DSPs qui sont avant tout des processeurs à accumulateurs. De tels DSPs incorporent un banc de registre séparé pour les registres d'adresse, un autre pour les registres d'indice, ainsi qu'une unité de calcul d'adresse spécialisée. L'unité de calcul d'adresse implémente des modes d'adressages complexes, comme l'adressage modulo, l'adressage ''bit-reverse'', en plus des adressages indicés classiques. [[File:Unité d'accès mémoire avec registres d'adresse ou d'indice.png|centre|vignette|upright=2|Unité d'accès mémoire avec registres d'adresse ou d'indice]] Les registres d'adresse sont notamment très utiles pour implémenter l'adressage modulo et bit-''reverse'', idem pour les registres d'indice. Suivant les DSP, le mode d'adressage modulo est géré différemment. La méthode la plus évidente utilise deux registres : un pour stocker l'adresse de début du tableau et un autre pour l'adresse de fin. Une solution alternative n'utilise pas l'adresse de fin, mais la taille/longueur du tableau. Cette dernière se marie bien avec des registres d'indices : la longueur du tableau est comparée avec l'indice courant, pour vérifier si l'adresse dépasse la fin du tableau. Une seconde méthode utilise un registre « modulo », qui stocke la taille du tableau. Il est associé à un registre d'adresse pour l'adresse/indice de l’élément en cours. Vu que seule la taille du tableau est mémorisée, le processeur ne sait pas quelle est l'adresse de début du tableau, et doit donc ruser. La ruse ne fonctionne que pour des files/tableaux de petite taille. L'adresse est alors alignée sur un multiple de 64, 128, ou 256 octets. Cela permet ainsi de déduire l'adresse de début de la file : c'est le multiple de 64, 128, 256 strictement inférieur le plus proche de l'adresse manipulée. En théorie, il serait possible d'utiliser des registres généraux et de mettre les adresses/indices/limites dedans. Le problème est que l'encodage des instructions serait alors assez complexe. Il devrait encoder trois numéros de registres par instruction d'accès mémoire : un pour l'adresse de base, un pour l'indice, un pour la limite. Or, les DSPs préfèrent utiliser des instructions courtes, pour limiter la taille du port de la mémoire ROM. Les DSPs ayant beaucoup de ports/bus, mieux vaut utiliser des ports assez petits. En utilisant un registre spécialisé pour l'adresse de base, un autre pour l'indice et un dernier pour la limite, ceux-ci peuvent être adressés implicitement. Pas besoin de les encoder dans l'instruction. ===Le jeu d'instruction d'un DSP : généralités=== Il est intéressant de regarder comment la microarchitecture des DSPs a évoluée. Et c'est en lien avec l'évolution de leur jeu d'instruction. Les DSPs sont souvent classés en trois à cinq générations, qui se sont succédées dans le temps. Mais les frontières entre générations varient beaucoup d'un livre à l'autre, d'un auteur à l'autre. Je vais reprendre celle-ci, histoire de donner un apercu de l'évolution des DSPs : * Les DSPs de première génération étaient des architectures à accumulateur sous stéroïdes, avec de nombreux registres spécialisés. * La seconde génération a introduit des modes d'adressage spécialisés pour les files, ainsi que des optimisations pour les boucles. * Les nouvelles générations de DSP utilisent des jeux d'instruction dit VLIW ou SIMD. La première génération avait la même microarchitecture qu'une architecture à accumulateur, moyennant les ''guard bits'', l'usage de mémoires multiples ou multiports, et quelques détails du genre. La seconde génération a introduit des registres spécialisés dans les adresses et les indices, ainsi que la présence d'unités de calcul dédiées aux calculs d'adresse. Les nouvelles générations incorporent des optimisations microarchitecturales comme un pipeline, l'exécution superscalaire et quelques autres. Mais nous n'avons pas vu cela à ce stade du cours, aussi je passe ces nouvelles générations sous silence. Les anciens DSP avaient des caractéristiques peu communes sur les CPUs. Les instructions s'exécutaient toutes en un seul cycle d'horloge, mais elles tendaient à faire pas mal de traitements assez complexes. De nos jours, les DSPs tendent à utiliser des techniques de pipeline très avancées, que nous n'avons encore abordées dans ce cours. La conséquence est que la contrainte "1 cycle = une instruction" est battue en brèche. Les DSPs de seconde génération, ainsi que les modernes, incorporent plusieurs unités de calcul MAD/FMAC. De plus, celles-ci sont pipelinées pour augmenter le nombre d'opérations exécutées par cycle d'horloge. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les ISA optimisés pour la compilation/interprétation | prevText=Les ISA optimisés pour la compilation/interprétation | next=Les architectures actionnées par déplacement | nextText=Les architectures actionnées par déplacement }} </noinclude> swb8rk0chlsvp4521thxhmd6agkp30h Fonctionnement d'un ordinateur/Les architectures actionnées par déplacement 0 65768 765829 742841 2026-05-02T20:04:40Z Mewtow 31375 /* L'implémentation avec des registres */ 765829 wikitext text/x-wiki Sur les '''architectures actionnées par déplacement''' (''transport triggered architectures''), les instructions machines correspondent directement à des micro-opérations, elle encodent directement les signaux de commandes à destination du chemin de données. De tels processeurs n'ont pas besoin d'un décodeur d'instruction pour traduire les instructions machines en signaux de commandes, elles se contentent d'une unité de chargement, du chemin de données et des circuits pour gérer les branchements. [[File:Architecture déclenchée par déplacement (Transport Triggered Architecture).png|centre|vignette|upright=2.5|Architecture déclenchée par déplacement (''Transport Triggered Architecture'').]] ==Les avantages et désavantages d'un processeur actionné par déplacement== La raison d'exister de ces architectures est tout autant la simplicité du processeur que la performance. Et évidemment, comme vous commencez à vous y habituer, cela ne se fait pas sans contreparties. ===Les avantages : l'absence de décodeur d'instruction et des optimisations logicielles=== L'avantage le plus flagrant est l'absence de décodeur d'instruction et de microcode, qui rend de tels processeurs très simples à fabriquer. Cette simplicité fait que de tels processeurs utilisent peu de portes logiques, qui peuvent être utilisés pour ajouter plus de cache, de registres, d'unités de calcul, et autres. L'autre avantage est que le séquencement des micro-instructions n'est pas réalisé par le processeur, mais par le compilateur. Ce qui peut permettre des simplifications assez fines, qui ne seraient pas possibles avec des instructions machines normales. Par exemple, on peut envoyer le résultat fourni par une unité de calcul directement en entrée d'une autre, sans avoir à écrire ce résultat dans un registre intermédiaire du banc de registres. Cette optimisation est très utilisée sur ces architectures, au point que celles-ci adaptent leur bancs de registres en conséquence. Elles peuvent retirer quelques ports de lecture et écriture sans que cela impacte les performances. Du moins, tant que le compilateur arrive efficacement à transférer les données entre unités de calcul sans passer par le banc de registre. ===Les désavantages : une portabilité minable et une taille de code beaucoup plus élevée=== Le désavantage principal est que la portabilité des programmes compilés pour de telles architecture est faible. La raison principale est qu'il n'y a pas de séparation entre jeu d'instruction et microarchitecture. Si l'on change la microarchitecture du processeur, alors le jeu d’instruction change et la compatibilité part avec. Impossible de rajouter une unité de calcul, de changer les temps d’exécution des instructions ou quoique ce soit d'autre. Par exemple, les micro-instructions ont un temps de latence à prendre en compte. Si les temps de latence changent, les programmes écrits en tenant compte des anciens temps de latences peuvent se mettre à dysfonctionner. De fait, de telles architectures ne sont pas utilisables dans les PC grands public, mais elles peuvent être utilisées dans certains systèmes embarqués, dans des utilisations très spécifiques. Un second désavantage non-négligeable est que la densité de code est généralement mauvaise sur ces processeurs. Et cela pour deux raisons : les instructions sont plus longues et l'''instruction path length'' (le nombre d'instructions du programme) est aussi plus élevé. Premièrement, les instructions sont plus longues que pour les autres processeurs. Rien d'étonnant vu que les micro-instructions d'un processeur normal sont plus longues que les instructions machines. Deuxièmement, le nombre d'instructions par programme augmente lui aussi. N'oublions pas qu'une instruction machine correspond à une séquence de plusieurs micro-instructions. Le nombre d'instructions est donc multiplié en conséquence. Et les optimisations qui permettent d'économiser les micro-instructions n'y font pas grand chose. ==L'implémentation des processeurs actionnés par déplacement== Sur les processeurs actionnés par déplacement, on n’a besoin que d'une seule instruction MOV, qui copie une donnée d'un emplacement (registre ou adresse mémoire) à un autre. Pas d'instructions LOAD, STORE, ni même d'instructions arithmétiques : on fusionne tout en une seule instruction supportant un grand nombre de modes d'adressages. On peut implémenter ces architectures de deux manières : soit en nommant les ports des unités de calcul, soit en intercalant des registres en entrée et sortie des unités de calcul. ===L'implémentation avec des ports=== Dans le premier cas, l'instruction machine connecte directement l'ALU sur le bus interne. Mais avec cette organisation, les ports de l'ALU (les entrées et sorties de l'ALU) doivent être sélectionnables. On doit pouvoir dire au processeur que l'on veut connecter tel registre à tel port, tel autre registre à un tel autre port, etc. Pour ce faire, les ports sont identifiés par une suite de bits, de la même manière que les registres sont nommés avec un nom de registre : chaque port reçoit un numéro de port. Il existe un port qui permet de déclencher le calcul d'une opération. Quand on connecte celui-ci sur un des bus internes, l'opération démarre. Toute connexion des autre ports d'entrée ou de sortie de l'ALU sur le banc de registres ne déclenche pas l'opération : l'ALU se comporte comme si elle devait faire un NOP et n'en tient pas compte. [[File:Architecture déclenchée par déplacement - microarchitecture avec des ports.png|centre|vignette|upright=3.0|Architecture déclenchée par déplacement - micro-architecture avec des ports.]] ===L'implémentation avec des registres=== Dans le second cas, on intercale des registres intermédiaires spécialisés en entrée et sortie de l'ALU, pour stocker les opérandes et le résultat d'une instruction. L’exécution d'une opération par l'unité de calcul est déclenchée automatiquement par une écriture dans certains registres d'opérande. Les autres registres ne permettent pas de déclencher des opérations : on peut écrire dedans sans que l'ALU ne fasse rien. Par exemple, un processeur de ce type peut contenir trois registres « opérande.1 », « opérande.2/déclenchement » et « résultat ». Le premier registre stocke le premier opérande de l'addition, le second stocke le second opérande, le troisième stocke le résultat de l'opération. Pour déclencher une opération, il faut écrire le second opérande dans le registre « opérande.2/déclenchement ». Une fois l'instruction terminée, le résultat de l'addition sera disponible dans le registre « ajout.résultat ». [[File:Architecture déclenchée par déplacement - microarchitecture avec des registres pour l'ALU.png|centre|vignette|upright=3.0|Architecture déclenchée par déplacement - micro-architecture avec des registres pour l'ALU.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs de traitement du signal | prevText=Les processeurs de traitement du signal | next=Les architectures systoliques | nextText=Les architectures systoliques }} </noinclude> 0gbmsolg7mk9jxzyguo29fcuc5fwi15 Fonctionnement d'un ordinateur/Langage machine et assembleur 0 65776 765807 765324 2026-05-02T19:07:31Z Mewtow 31375 /* L’instruction REPEAT et le Zero-overhead looping */ 765807 wikitext text/x-wiki Ce chapitre va aborder le langage machine, à savoir un standard qui définit les instructions du processeur, le nombre de registres, etc. Dans ce chapitre, on considérera que le processeur est une boîte noire au fonctionnement interne inconnu. Nous verrons le fonctionnement interne d'un processeur dans quelques chapitres. Les concepts que nous allons aborder ne sont rien d'autre que les bases nécessaires pour apprendre l'assembleur. Nous allons surtout parler des instructions du processeur. Pour simplifier, on peut classer les instructions en quatre grands types : * les échanges de données entre mémoires ; * les calculs et autres opérations arithmétiques ; * les instructions de comparaison ; * les instructions de branchement. À côté de ceux-ci, on peut trouver d'autres types d'instructions plus exotiques, pour gérer du texte, pour modifier la consommation en électricité de l'ordinateur, pour chiffrer ou de déchiffrer des données de taille fixe, générer des nombres aléatoires, etc. Dans ce chapitre, nous allons voir un aperçu assez large des instructions qui existent. Nous n'allons pas nous limiter aux instructions les plus importantes, mais nous allons aussi parler d'instructions assez exotiques, soit présentes uniquement sur d'anciens ordinateurs, soit très rares, soit franchement tordues. Et certaines de ces instructions exotiques sont assez impressionnantes et risquent de vous surprendre ! ==Les instructions entières== Les '''instructions arithmétiques''' sont les plus courantes et comprennent au minimum l'addition, la soustraction, la multiplication, plus rarement la division. Précisons qu'une opération mathématique ne se fait pas de la même manière suivant la représentation utilisée pour coder ces nombres : on ne manipule pas de la même façon des nombres entiers binaires, des entiers codés en BCD et des nombres flottants. Aussi, dans ce qui va suivre, nous allons séparer les opérations entières, les opérations flottantes et les opérations en BCD. Les processeurs modernes utilisent des nombres encodés soit en binaire normal, soit en complément à deux. L'avantage est que les opérations arithmétiques se font de la même manière dans les deux encodages. Il y a quelques différences, mais elles sont suffisamment mineures, pas besoin d'avoir une instruction dédiée pour les nombres signés. Les anciens processeurs utilisaient eux des entiers signés en signe-magnitude ou en complément à 1, ou d'autres représentations. Et avec ces représentations, les calculs ne sont pas exactement les mêmes pour les nombres signés et non-signés. Ils avaient donc des instructions séparées pour l'addition signée et l'addition non-signée, idem pour la soustraction, la multiplication, etc. De nos jours, les ordinateurs utilisent des entiers de taille fixe, qui tiennent dans un registre. J'ai dit qui tiennent dans un registre, car la taille des données à manipuler peut dépendre de l'instruction. Ainsi, un processeur peut avoir des instructions pour traiter des nombres entiers de 8 bits, et d'autres instructions pour traiter des nombres entiers de 32 bits, par exemple. Mais la taille d'une opérande ne dépasse pas la taille d'un registre entier. ===La ou les instructions d'addition entière=== Un processeur implémente au minimum une opération d'addition, même s'il existe de rares exemples de processeurs qui s'en passent. Mieux : certains processeurs implémentent plusieurs instructions d'addition, qui se distinguent par de subtiles différences. La première différence est la gestion des débordements d'entier. Pour gérer les débordements d'entier, certains processeurs disposent d'un '''registre de débordement''', de 1 bit, qui indique si une instruction arithmétique a généré un débordement d'entier ou non. Il est mis à 1 en cas de débordement, mais reste à 0 sinon. Il est mis à jour à chaque addition/multiplication/soustraction. Pour rappel, les débordements d'entiers sont différents selon que l'addition est signée ou non, et il faut en tenir compte au niveau du jeu d'instruction. La solution la plus simple est l'existence de deux instructions dédiées : une pour les additions de nombres signés et une autre pour les nombres non-signés. Le circuit additionneur est le même pour ces deux instruction, mais le calcul du bit de débordement est différent. D'autres processeurs s'en sortent autrement, en ayant deux bits de débordement : un si le résultat est signé, l'autre pour les résultats non-signés. Mais nous reparlerons de cela plus tard. Une autre différence, présente sur les vieux processeurs, tient dans la gestion de la retenue. À l'époque, les processeurs ne pouvaient gérer que des nombres de 4 à 8 bits, guère plus. Pourtant, la plupart des applications logicielles demandait d'utiliser des entiers de 16 bits. Les opérations comme l'addition ou la soustraction étaient alors réalisées en plusieurs fois. Par exemple, on additionnait les 8 bits de poids faible, puis les 8 bits de poids fort. Dans un cas pareil, il fallait aussi gérer la retenue dans l'addition des 8 bits de poids fort. Pour cela, la retenue en question était mémorisée dans un registre de 1 bit dédié, semblable au registre de débordement, appelé le '''bit de retenue'''. De plus, les processeurs incorporaient une instruction d'addition qui additionnait les deux opérandes avec la retenue en question, instruction souvent appelée ADDC (''ADD with Carry''). Niveau circuits, cela ne changeait pas grand chose, tous les additionneurs ayant une entrée pour la retenue (qui est utilisée pour implémenter la soustraction, rappelez-vous). L'implémentation de l'instruction ADDC était très simple, n'utilisait presque pas de circuits, et rendait de fiers services aux programmeurs de l'époque. Nous parlons là des vieux processeurs 4 et 8, mais certains processeurs 16, 32, voire 64 bits, sont capables d'effectuer ce genre d'opération, même si ils sont rares. : Il existe parfois des instructions pour mettre le bit de retenue à 0 ou à 1. C'est le cas sur l'architecture x86. Mais son utilité est marginale, car toutes les instructions arithmétiques modifient le bit de retenue. La même chose a lieu pour la soustraction, qui demande qu'une "retenue" soit propagée d'une colonne à l'autre (bien que la "retenue" soit utilisée différemment : elle n'est pas additionnée, mais soustraite du résultat de la colonne). Pour cela, les processeurs implémentent l'opération SUBC (''Substract with Carry''). Et pour mettre en œuvre cette opération, ils ont deux options. La première est d'ajouter un bit pour la "retenue" de la soustraction. Pour une soustraction qui calcule a-b, elle vaut 0 si a>=b et 1 si a<b. Elle est utilisée telle qu'elle par le circuit qui effectue la soustraction, généralement un soustracteur. L'autre option est d'utiliser le but de retenue de l'addition, sans rien modifier. Pour comprendre pourquoi, rappelons que la soustraction est implémentée en complément à deux par le calcul suivant : : <math>a - b = a + \overline{b} + 1</math> Il s'agit d'une addition, qui a donc une retenue lors d'un débordement. On peut alors réutiliser le bit de retenue de l'addition pour la soustraction, en modifiant quelque peu la soustraction à effectuer. Pour comprendre comment faire la modification, précisons tout d'abord que les règles du complément à deux nous disent qu'on a un débordement quand a>=b. Passons maintenant à l'étude d'un exemple théorique : le cas où on veut soustraire deux nombres de 16 bits avec deux opérations SUBC qui travaillent sur 8 bits. Appelons les deux opérandes A et B, <math>a_h</math> et <math>b_h</math> les 8 bits de poids forts de ces opérandes, et <math>a_l</math> et <math>b_l</math> leurs 8 bits de poids faible. Voyons ce qui se passe suivant que la retenue soit de 0 ou 1. * Si la retenue de l'addition est de 1, on a <math>a_l \geq b_l</math>, ce qui veut dire que la seconde soustraction doit calculer <math>a_h + \overline{b_h} + 1</math>. * À l'inverse, si la retenue de l'addition est de 0, on a <math>a_l \leq b_l</math>. Cela veut dire que si on posait la soustraction, alors une retenue devrait être propagée à la colonne suivante, ce qui veut dire que la seconde soustraction doit calculer <math>a_h + \overline{b_h} + 1 - \text{retenue de 1}</math>. Récapitulons dans un tableau. {|class="wikitable" |- ! Retenue ! Opération à effectuer pour la seconde soustraction |- ! 0 | <math>a_h + \overline{b_h} + 0</math> |- ! 1 | <math>a_h + \overline{b_h} + 1</math> |} On voit que ce qu'il faut ajouter à <math>a_h + \overline{b_h}</math> est égal à la retenue. L'opération SUBC fait donc le calcul suivant : : <math>a - b = a + \overline{b} + \text{retenue}</math> La plupart des processeurs 8 et 16 bits avaient deux instructions de soustraction séparées : une sans gestion de la retenue, une avec. Mais certains processeurs comme le 6502 n'avaient qu'une seule instruction de soustraction : celle qui tient compte de la retenue ! Il n'y avait pas de soustraction normale. Pour éviter tout problème, les programmeurs devaient faire attention. Ils disposaient d'une instruction mettre à 0 ou à 1 le bit de retenue pour éviter tout problème, qu'ils utilisaient avant toute soustraction simple. ===Les instructions de division entière=== Il faut savoir que la division est une opération très lourde pour le processeur : une instruction de division dédiée met au mieux une dizaine de cycles d'horloge pour fournir un résultat, parfois plus de 50 à 70 cycles d’horloge. Et elle est facilement 10 à 50 fois plus lente qu'une opération de multiplication. De plus, son implémentation matérielle utilise beaucoup de portes logiques/transistors. Son cout globalement le même que pour un circuit multiplieur, parfois un peu plus. Mais on a de la chance : c'est aussi une opération assez rare, peu utilisée. De plus, les divisions les plus courantes sont des divisions par une constante : un programme devant manipuler des nombres décimaux aura tendance à effectuer des divisions par 10, un programme manipulant des durées pourra faire des divisions par 60 (gestion des minutes/secondes) ou 24 (gestion des heures). Or, diverses astuces permettent de les remplacer par des suites d'instructions plus simples, qui donnent le même résultat (l'usage de décalages, la multiplication par un entier réciproque, etc). Et la suite d'instruction équivalent est beaucoup plus rapide qu'une implémentation matérielle, car on profite qu'une opérande est constante. En-dehors de ce cas, l'usage des divisions est assez rare. Sachant cela, certains processeurs ne possèdent pas d'instruction de division, car les gains de performance seraient modérés et le coût en transistors élevé. Les divisions sont alors émulées en logiciel, par une suite de soustractions ou tout autre code équivalent. D'autres processeurs implémentent toutefois la division dans une instruction machine, avec un circuit dédié, mais c'est signe que le coût en transistors n'est pas un problème pour le concepteur de la puce. ===Les instructions de multiplication entière=== Contrairement à la division, l'opération de multiplication entière est très courante, presque tous les processeurs modernes en ont une. Les multiplications sont plus fréquentes dans le code des programmes, sans compter que c'est une opération pas trop lourde à implémenter en circuit. Il en existe parfois plusieurs versions sur un même processeur. Ces différentes versions servent à résoudre un problème quant à la taille du résultat d'une multiplication. En effet, la multiplication de deux opérandes de <math>n</math> bits donne un résultat de <math>n \times 2</math>, ce qui ne tient donc pas dans un registre. Pour résoudre ce problème, il existe plusieurs solutions. Dans sa version la plus simple, l'instruction de multiplication se contente de garder les <math>n</math> bits de poids faible, ce qui peut entraîner l'apparition de débordements d'entiers. Une autre solution est de calculer soit les bits de poids fort, soit les bits de poids faible, le choix étant laissé au programmeur. Des processeurs disposent de deux instructions de multiplication : une instruction pour calculer les bits de poids fort du résultat et une autre pour les bits de poids faible. Certains processeurs disposent d'une instruction de multiplication configurable, qui permet de choisir quels bits conserver : poids fort ou poids faible. Une autre version mémorise le résultat dans deux registres : un pour les bits de poids faible et un autre pour les bits de poids fort. Il faut noter que certains processeurs disposent de registres spécialisés pour cela. Par spécialisés, on veut dire qu'ils sont séparés des autres registres. Les autres registres, appelés les registres généraux, mémorisent n'importe quelle opérande entière et sont utilisables pour toutes les opérations. Mais la multiplication mémorise son résultat dans deux registres à part, qu'on nommera HO et LO. Seule l'instruction de multiplication peut écrire un résultat dans ces deux registres, avec HO pour les bits de poids fort, et LO pour les bits de poids faibles. Par contre, n'importe quelle instruction peut les lire, pour récupérer une opérande dans ces deux registres. ==Les instructions sur les entiers BCD== Parlons maintenant des '''instructions BCD''', qui agissent sur des opérandes codées en BCD. Devenues très rares avec la disparition du BCD dans l'informatique grand-public, elles étaient quasiment essentielles sur les tous premiers processeurs 8 bits. ===Les ordinateurs décimaux=== Au tout début de l'informatique, il a existé des processeurs qui travaillaient uniquement en BCD, appelés des '''processeurs décimaux'''. Ils avaient uniquement des instructions BCD, pas d'instruction sur des opérandes codées en binaire. Ils étaient assez courants entre les années 60 et 70, même s'ils ne représentent pas la majorité des architectures de l'époque. Il y avait une vraie séparation entre processeurs décimaux et processeurs binaires, sans intermédiaires notables. Les tous premiers ordinateurs décimaux pouvaient manipuler des entiers BCD de taille arbitraire. Ils stockaient leurs nombres dans des chaines de caractères ou des tableaux encodés en BCD. Le processeur faisait les calculs chiffre par chiffre, caractère BCD par caractère BCD. Les ordinateur décimaux qui ont abandonné ce fonctionnement. À la place, ils ont intégré des registres capables de mémoriser des entiers BCD de taille fixe. Le grand avantage des processeurs décimaux est leur très bonne performance dans les tâches de bureautique, de comptabilité, et autres. Les processeurs de l'époque recevaient des entiers codés en BCD de la part des entrées-sorties, et devaient les traiter. Les processeurs binaires devaient faire des conversion BCD-binaire pour communiquer avec les entrées-sorties, mais pas les processeurs décimaux. Le gain en performance pouvait être substantiel dans certaines applications. ===Les instructions BCD des processeurs binaires=== Par la suite, dans les années 80, l'augmentation des performances a favorisé les processeurs binaires. Faire des conversions binaires-BCD n'était plus un problème, les conversions étaient suffisamment rapides. Par contre, faire les calculs en BCD était plus lent que faire les calculs en binaire, ce qui fait que le compromis technologique de l'époque favorisaient le binaire. Mais pour obtenir le meilleur des deux mondes, les processeurs binaires ont ajouté un support du BCD. C'était l'époque des architectures 8 bits, puis 16 bits. Intuitivement, on se dit que, les processeurs de l'époque des 8 bits avaient leurs instructions de calcul en double : une instruction pour les calculs entier et une autre pour les calculs BCD. Mais d'autres processeurs faisaient autrement. À l'époque des processeurs 8-16 bits, certains processeurs ne géraient pas d'instructions BCD proprement dit, mais géraient quand même les calculs en BCD grâce à des instructions spéciales. Concrètement, les programmeurs utilisaient une instruction d'addition ou de soustraction binaire, mais il était possible de corriger ce résultat pour obtenir le bon résultat codé en BCD. Les processeurs de l'époque disposaient d'une instruction pour faire la correction, souvent appelée ''Decimal Adjust After Addition''. Avant d'aller plus loin, nous devons préciser que les processeurs 8 bits de l'époque pouvaient gérer deux formats de BCD. Le premier est le '''format ''Packed''''', où deux chiffres sont mémorisé dans un octet. Le premier nibble (4bits) mémorise un chiffre BCD, le second nibble mémorise le second. Il s'agit d'un format qui remplit au maximum les bits de l'octet avec des données utiles. L'autre format, appelé '''''Unpacked''''', ne mémorise qu'un seul chiffre BCD dans un octet. Le chiffre est quasi- tout le temps dans le nibble de poids faible. Il se trouve que la manière de corriger le résultat d'une opération n'est pas la même suivant que le nombre est codé en BCD ''packed'' et ''unpacked''. Pour commencer, étudions le cas des nombres BCD ''unpacked'', plus simples à comprendre. Lors d'une addition, il se peut que le résultat ne soit pas représentable en BCD ''unpacked''. Par exemple, si je fais le calcul 5 + 8, le résultat sera 13 : il tient dans un nibble en décimal, mais pas en BCD ! Cette situation survient quand le résultat d'une addition de deux entiers BCD ''unpacked'' dépasse 9, la limite de débordement en BCD ''unpacked''. Nous avons vu dans le chapitre sur les circuits d'addition que la correction est alors toute simple : si le résultat dépasse 9, on ajoute 6. De plus, on doit prévenir que le résultat a débordé et ne tient pas sur un nibble en BCD. Pour cela, on ajoute un bit spécialisé, appelé le '''''half carry flag''''', indicateur de demi-retenue en français, qui joue le même rôle que le bit de débordement, mais pour le BCD ''unpacked''. Sur les processeurs x86, tout cela est réalisé par une instruction appelée ''ASCII adjust after addition''. : Pour la soustraction, il faut faire la même chose, sauf qu'il faut soustraire 6, pas l'ajouter. Et il y a aussi une instruction pour cela : ''ASCII adjust after substraction''. Pour les nombres BCD ''packed'', la procédure est globalement la même, sauf qu'il faut traiter les deux ''nibbles'' : on ajoute 6 si le nibble de poids faible dépasse 9, puis on fait la même chose avec le ''nibble'' de poids fort. Le bit ''half carry flag'' n'est pas mis à jour et est tout simplement ignoré. Notons qu'on modifie d'abord le ''nibble'' de poids faible, avant de traiter celui de poids fort. En effet, si on corrige celui de poids faible, la retenue obtenue en ajoutant 6 se propage au nibble suivant, ce qui fait que ce dernier peut voir sa valeur augmenter. Une fois cela fait, le bit de retenue est mis à 1. La procédure est différente, vu qu'il faut traiter deux ''nibles'' au lieu d'un, et que le bit ''half-carry'' est ignoré au profit du bit de retenue normal. D'où l'existence d'une instruction séparée pour l'addition des nombres BCD ''packed'', appelée ''Décimal adjust after addition'' sur les processeurs x86. Les processeurs modernes ne supportent plus le BCD, car il est très peu utilisé. Les processeurs ARM et MIPS ont toujours fait sans instructions BCD. Les processeurs x86 des PC désactivent les instructions BCD en mode 64 bits, mais conservent des opérations BCD en mode 32 bits, pour des raisons de compatibilité. Le support du codage BCD est surtout quelque chose qu'on trouve sur les anciens processeurs. ==Les instructions flottantes== Passons maintenant au support des nombres flottants. Avant les années 60, les processeurs n'était pas encore capables de faire de calculs avec des nombres flottants. Les calculs flottants étaient émulés soit par une bibliothèque logicielle, soit par le système d'exploitation. Pour améliorer les performances, les concepteurs de processeurs ont conçus des '''coprocesseurs arithmétiques''', des processeurs secondaires spécialisés dans les calculs flottants, qui complémentaient le processeur principal, et avaient leur propre emplacement sur la carte mère. Par la suite, les concepteurs de processeurs ont incorporé des instructions de calculs sur des nombres flottants, rendant le coprocesseur inutile. Pour supporter les nombres flottants, il y a deux écoles. La première utilise des instructions flottantes séparées des instructions entières. La seconde utilise des instructions d'addition/soustraction/multiplication généralistes, capables de traiter indifféremment entiers et flottants, voire les encodages BCD. ===Les architectures taguées=== Le second cas correspond à certaines machines assez anciennes, datant des années 50 à 70. Ces processeurs n'avaient qu'une seule instruction d'addition, qui pouvait traiter indifféremment flottants, nombres entiers codés en BCD, en complément à deux, etc. Pour cela, les opérandes étaient associés à un type qui précisait s'il s'agissait d'un opérande flottant, entier, BCD, d'un pointeur, ou autre. Le traitement effectué par une instruction dépendait des ''tag'' associés aux opérandes. Par exemple, si les deux opérandes avaient un ''tag'' "entier", l'instruction faisait un calcul entier. Si les deux opérandes avaient un ''tag'' "flottant", l'instruction faisait un calcul flottant. Le type de l'opérande était encodé avec un ''tag'', une sorte de numéro codé en binaire. Le ''tag'' était stocké en mémoire à côté de l'opérande, un mot mémoire contenait la donnée et le ''tag'' concaténés l'un à la suite de l'autre. Le défaut est que la mémoire devait être conçue pour gérer le ''tag'', de même que le processeur. Des processeurs de ce type s'appellent des ''architectures à tags'', ou '''tagged architectures''', en référence au ''tag'' ajouté dans la mémoire. Mais les processeurs modernes n'utilisent pas cette technique, du fait de son cout en mémoire. À la place, le processeur dispose d'une instruction par type à manipuler : une instruction de multiplication pour les flottants, une autre pour les entiers codés en complément à deux, etc. ===Les processeurs avec des instructions flottantes dédiées=== Les processeurs modernes disposent d'instructions de calculs sur des nombres flottants, qui sont standardisées. Le standard IEEE 754 standardise aussi quelques instructions sur les flottants : les quatre opérations arithmétiques de base, les comparaisons et la racine carrée. Certains processeurs vont plus loin et implémentent aussi d'autres instructions sur les flottants qui ne sont pas supportées par la norme IEEE 754. Par exemple, certaines fonctions mathématiques telles que sinus, cosinus, tangente, arctangente et d'autres. Le seul problème, c'est que ces instructions peuvent mener à des erreurs de calcul incompatibles avec la norme IEEE 754. Heureusement, les compilateurs peuvent mitiger ces désagréments. Il faut néanmoins préciser que le support de la norme IEEE 754 n'est pas une obligation : certains processeurs ne la supportent que partiellement. Par exemple, certains processeurs ne supportent que les flottants simple précision, mais pas les double précision (ou inversement). Exemple : les premiers processeurs Intel ne géraient que les flottants double précision étendue. D'autres processeurs ne gèrent pas les underflow, overflow, les NaN, les infinis, ou même les flottants dénormaux. Précisons que même lorsque la gestion des dénormaux est implémentée en hardware (comme c'est le cas sur certains processeurs AMD), celle-ci reste malgré tout très lente. Si les exceptions ne sont pas supportées, le processeur peut être configuré de façon à soit ignorer les exceptions en fournissant un résultat, soit déclencher une exception matérielle (à ne pas confondre avec les exceptions de la norme). Le choix du mode d'arrondi ou la gestion des exceptions flottantes se fait en configurant un registre dédié, intégré dans le processeur. Plus rarement, il arrive que certains processeurs gèrent des formats de flottants spéciaux qui ne font pas partie de la norme IEEE 754. Par exemple, certains processeurs utilisent des formats de flottants différents de la norme IEEE 754, avec par exemple des flottants codés sur 8 ou 16 bits, qui sont très utiles pour les applications qui * se contentent très bien d'un résultat approché. ==Les instructions logiques== À côté des instructions de calcul, on trouve des '''instructions logiques''' qui travaillent sur des bits ou des groupes de bits. Les opérations bit à bit ont déjà été vues dans les premiers chapitres, ceux sur l'électronique. Pour rappel, les plus courantes sont : * La négation, ou encore le NON bit à bit, inverse tous les bits d'un nombre : les 1 deviennent des 0 et les 0 deviennent des 1. * Le ET bit à bit, qui agit sur deux nombres : il va prendre les bits qui sont à la même place et va effectuer un ET (l’opération effectuée par la porte logique ET). Exemple : 1100·1010=1000. * Les instructions similaires avec le OU ou le XOR. Mais d'autres instructions sont intéressantes à étudier. ===Les instructions de décalage et de rotation=== Les '''instructions de décalage''' décalent tous les bits d'un nombre vers la gauche ou la droite. Pour rappel, il existe plusieurs types de décalages : les rotations, les décalages logiques, et les décalages arithmétiques. Nous avions déjà vu ces trois opérations dans le chapitre sur les circuits de décalage et de rotation, ce qui fait que nous allons simplement faire un rappel dans le tableau suivant. Pour résumer, voici la différence entre les trois opérations : {|class="wikitable" |- ! ! Schéma ! Gestion des bits sortants ! Remplissage des vides laissés par le décalage |- ! Rotation |[[File:Rotation de bits.png|Rotations de bits.]] | Réinjectés dans les vides laissés par le décalage | Remplis par les bits sortants |- ! Décalage logique |[[File:Décalage logique.png|Décalage logique.]] | rowspan="2" | Les bits sortants sont oubliés | Remplis par des zéros |- |- ! Décalage arithmétique |[[File:Décalage arithmétique.png|Décalage arithmétique.]] | Remplis par : * le bit de signe pour les bits de poids fort ; * des zéros pour les bits de poids faible . |} Pour rappel, les décalages de n rangs sont équivalents à une multiplication/division par 2^n. Un décalage à gauche est une multiplication par 2^n, alors qu'un décalage à droite est une division par 2^n. Les décalages logiques effectuent la multiplication/division pour un nombre non-signé (positif), alors que les décalages arithmétiques sont utilisés pour les nombres signés. Précisons cependant que pour ce qui est des décalages à droite, les décalages logiques et arithmétiques n'arrondissent pas le résultat de la même manière. Les décalages logiques à droite arrondissent vers zéro, alors que les décalages arithmétiques arrondissent vers la valeur inférieure (vers moins l'infini). De plus, les décalages à gauche entraînent des débordements d'entiers qui ne se gèrent pas de la même manière entre décalage logique et décalage arithmétique. La plupart des processeurs stockent le bit sortant dans un registre, généralement le registre qui stocke le bit de retenue des additions qui est réutilisé pour cette optique. Ils possèdent aussi une variante des instructions de décalage où le bit de retenue est utilisé pour remplir le bit libéré au lieu de mettre un zéro. Cela permet d'enchaîner les décalages sur un nombre de bits plus grand que celui supporté par les instructions en procédant par morceaux. Par exemple, pour un processeur supportant les décalages sur 8 et 16 bits, il peut enchaîner deux décalages de 16 bits pour décaler un nombre de 32 bits ; ou bien un décalage de 8 bits et un autre de 16 bits pour décaler un nombre de 24 bits. [[File:Shift Arithmetic Right.svg|centre|vignette|Décalage arithmétique à droite, où le bit sortant est mémorisé dans le bit de retenue (CF pour ''Carry Flag'').]] Ils existe une variante des instructions de rotation où le bit de retenue est utilisé. Un bon exemple est celui des instructions LRCY (''Left Rotate Through Carry'') et RRCY (''Right Rotate Through Carry''). La première est un décalage/rotation à gauche, l'autre est un décalage/rotation à droite. Les deux décalent un registre de 16 bits, mais on pourrait imaginer la même chose avec des registres de taille différente. Lors du décalage, le bit sortant est mémorisé dans le registre de retenue, alors que le bit de retenue précédent est lui envoyé dans le vide laissé par le décalage. Tout se passe comme s'il s'agissait d'une rotation, sauf que le nombre décalé/rotaté est composé du registre concaténé au bit de retenue, le bit de retenue étant le bit de poids fort pour un décalage à gauche, de poids faible pour un décalage à droite. ====Le cas particuliers des processeurs ARM==== Sur les processeurs ARM, il n'y a pas d'instruction de décalage à proprement parler, ni de rotations. Par contre, les décalages sont fusionnés avec la plupart des opérations arithmétiques ! Toute opération arithmétique prend deux registres d'opérandes et un registre de destination, ainsi qu'un décalage facultatif. Le décalage est appliqué sur la seconde opérande automatiquement, sans avoir à faire une instruction séparée. À l'intérieur de l'instruction, deux bits précisent quel type de décalage effectuer (logique à droite, arithmétique à droite, à gauche, rotation à droite). Le nombre de rangs dont il faut décaler est soit encodé directement dans l'instruction sur 5-6 bits, soit précisé dans un registre. Toutes les instructions ne permettent pas de faire un décalage automatique. Seules les opérations simples peuvent le faire, à savoir les additions, soustractions, copies d'un registre à un autre, les opérations logiques, et quelques autres. Et cela se marie très bien avec le fait qu'on applique le décalage sur la seconde opérande fait qu'il se marie très bien avec les calculs d'adresse. En effet, quand un programmeur manipule une structure de données, notamment un tableau, il arrive souvent qu'il fasse des calculs d'adresse cachés. La majeure partie de ces calculs d'adresse sont de la forme : adresse de base + (indice * taille de la donnée). Vu que les données ont très souvent une taille qui est une puissance de deux, le second terme se calcule en décalant l'indice, le calcul total demande une simple addition avec une opérande décalée, ce qui prend une seule instruction sur les processeur ARM. ===Les instructions de manipulation de bits=== D'autres opérations effectuent des calculs non pas bit à bit (on traite en parallèle les bits sur la même colonne), mais qui manipulent les bits à l'intérieur d'un nombre. les plus simples d'entre elles comptent sur les bits. Une instruction très commune de ce type est l'instruction '''''population count''''', qui compte le nombre de bits d'un nombre qui sont à 1. Par exemple, pour le nombre 0100 1100 (sur 8 bits), la ''population count'' est de 3. Il s'agit d'une instruction utile dans les codes correcteurs d'erreur, très utilisés pour tout et n'importe quoi (trames réseau, sommes de contrôle des secteurs des disques dur, et bien d'autres). De plus, elle permet de calculer facilement le bit de parité d'un nombre, ce qui est utile pour les codes de détection d'erreur. En soi, l'instruction est facultative et l'implémenter est un choix qui n'est pas trivial. Mais cette instruction est très simple à implémenter en circuits, sans compter que son implémentation utilise assez peu de transistors. Le circuit de calcul est ridiculement simple, utilise peu de transistors. Les processeurs gèrent aussi assez souvent des instructions pour compter les zéros ou les uns après le bit de poids fort/faible. Pour rappel, voici les quatre possibilités : * '''''Count Trailing Zeros''''' donne le nombre de zéros situés à droite du 1 de poids faible. * '''''Count Leading Zeros''''' donne le nombre de zéros situés à gauche du 1 de poids fort. * '''''Count Trailing Ones''''' donnent le nombre de 1 situés à gauche du 0 de poids fort. * '''''Count Leading Ones''''' donne le nombre de 1 situés à droite du 0 de poids faible. [[File:Opérations Find First Set ; Find First Zero ; Find Highest Set (le logarithme binaire) ; Find Highest Zero ; Count Leading Zeros ; Count Trailing Zeros ; Count Leading Ones et Count Trailing Ones.png|centre|upright=2.0|vignette|Opérations Find First Set ; Find First Zero ; Find Highest Set (le logarithme binaire) ; Find Highest Zero ; Count Leading Zeros ; Count Trailing Zeros ; Count Leading Ones et Count Trailing Ones.]] Comme vous le voyez sur le schéma du dessus, ces quatre opérations de comptage sont liées à quatre autres opérations. Ces dernières donnent la position du 0 ou du 1 de poids faible/fort : * '''''Find First Set''''', donne la position du 1 de poids faible. * '''''Find highest set''''' donne la position du 1 de poids fort. * '''''Find First Zero''''' donne la position du 0 de poids faible. * '''''Find Highest Zero''''' donne la position du 0 de poids fort. Il est rare que des processeurs s’implémentent toutes ces opérations. En effet, le résultat de certaines opérations se calcule à partir des autres. Pour donner un exemple, les processeurs x86 modernes incorporent une extension, appelée '''''Bit manipulation instructions sets (BMI sets)''''', qui ajoute quelques instructions de ce type. Pour le moment, seules les instructions ''Count Trailing Zeros'' et ''Count Leading Zeros'' sont supportées. Et il existe bien d'autres instructions de ce type. On peut citer, par exemple, l'instruction BLSI, qui ne garde que le 1 de poids faible et met à zéro tous les autres bits. L'instruction BLSR quant à elle, met à 0 ce 1 de poids faible. Et il y en a bien d'autres, qui impliquent le 1 de poids fort, le 0 de poids faible, le 1 de poids faible, etc. ===Les instructions d'extension de registres=== Certains processeurs sont capables de gérer des données de taille diverses. Ils peuvent par exemple gérer des données codées sur 16 bits ou sur 32 bits comme c'est le cas sur certains processeurs anciens. Comme autre exemple, les processeurs x86 modernes peuvent gérer des données de 8, 16 et 32 bits. Pour cela, ils disposent généralement de registres de taille différentes, certains font 8 bits, d'autres 16, d'autres 32, etc. Dans ce cas, il est courant que l'on ait à faire des conversions vers un nombre de taille plus grande. Par exemple, convertir un nombre de 8 bits en un nombre de 16 bits, ou un nombre de 8 bits en 32 bits. Les processeurs de ce type incorporent des instructions pour ce faire, qui s'appellent les '''instructions d'extension de nombres'''. La seule difficulté de ces instructions tient à la manière dont on remplit les bits de poids forts. Par exemple, si l'on passe de 8 bits à 16 bits, les 8 bits de poids forts sont inconnus. Pareil si on passe de 16 bits à 32 bits : quelle doit être la valeur des 16 bits de poids fort ? Intuitivement, on se dit qu'il suffit de les remplir par des zéros. Faire ainsi marche très bien, mais à condition que le nombre soit un nombre positif ou nul. Mais dans le cas d'un nombre négatif, cela ne marche pas (le résultat n'est pas bon). Pour les nombres codés en complément à deux, il faut remplir les bits manquants par le bit de signe, le bit de poids fort. On a donc deux choix : soit on remplit les bits manquants par des 0, ou par le bit de poids fort. Globalement, les deux choix possibles correspondent à deux instructions : une pour les nombres non-signés et une autre pour les nombres codés en complément à deux. On parle respectivement d''''instruction de ''zero extension''''' et '''instruction d'extension de signe'''. Formellement, les instructions d'extension de nombre sont des copies entre registres : le contenu d'un registre est copié dans un autre plus grand. L'extension de signe est couplée avec cette copie, les deux étant effectués en une instruction. Du moins, c'est le cas sur la plupart des processeurs. On pourrait imaginer séparer les deux en deux instructions séparées, une instruction MOV (qui copie un registre dans un autre, comme on le verra plus bas) et une instruction d'extension de signe/zéro. Dans ce cas, l'instruction d'extension de signe/zéro prend un registre de grande taille et étend la donnée dans ce registre. Par exemple, pour une extension de signe de 16 à 32 bits, l'instruction prendrait un registre de 32 bits, ne considérerait que les 16 bits de poids faible et effectuerait l'extension de signe/zéro à partir de ces derniers. En soi, l'extension avec des zéros est un simple masque, réalisable avec des opérations bit à bit et cette instruction n'a pas besoin d'être implémentée. Par contre, les instructions d'extension de signe sont elles très utiles. De plus, une instruction d'extension de signe séparée a l'avantage d'être utilisable même sur des architecture avec des registres de taille identique. Mais quel intérêt, me direz-vous ? Il faut savoir que certaines langages de programmation permettent de travailler sur des entiers dont on peut préciser la taille. Un même programme peut ainsi manipuler des entiers de 16 bits et de 32 bits, ou des entiers de 8, d'autres de 16, d'autres de 32, et d'autres de 64. L'intérêt n'est as évident, mais un bon exemple est celui de la rétrocompatibilité entre programmes. Par exemple, un programme 64 bits qui utilise une librairie 32 bits, ou un programme codé en 64 bits qui émule une console 16 bits. Ou encore, la communication entre un programme codé en 16 bits avec un capteur qui mesure des données de 8 bits. Bref, les possibilités sont nombreuses. Imaginons que tout se passe dans des registres de 32 bits. Le processeur peut incorporer des instructions de calcul sur 16 bits, en plus des instructions 32 bits. Dans ce cas, l'extension de signe sert à faire des conversions entre entiers de taille différentes. ===Les instructions de permutation d'octets=== Les instructions de ''byte swap'', aussi appelée '''instructions de permutation d'octets''', échangent de place les octets d'un nombre. Leur implémentation varie grandement selon la taille des entiers. Le cas le plus simple est celui des instructions qui travaillent sur des entiers de 16 bits, soit deux octets. Il n'y a alors qu'une seule solution pour échanger les octets : l'octet de poids fort devient l'octet de poids faible et réciproquement. Les deux octets échangent leur place. Pour les nombres de 32 bits, soit 4 octets, il y a plusieurs possibilités. La première inverse l'ordre des octets dans le nombre : on échange l'octet de poids faible et de poids fort, mais on échange aussi les deux octets restant entre eux. Une autre solution découpe l'entier en deux morceaux de 16 bits : l'un avec les deux octets de poids fort, l'autre avec les deux octets de poids faible. Les octets sont inversés dans ces blocs de 16 bitzs, mais on n'effectue pas d'autres échanges. On peut aussi échanger les deux morceaux de 16 bits, mais sans changer l'ordre des octets dans les blocs. [[File:Instruction de permutation d'octets.png|centre|vignette|upright=2|Instruction de permutation d'octets]] L'utilité de ces instructions n'est pas évidente au premier abord, mais elle sert beaucoup dans les opérations de conversion de données. Tout cela devrait devenir plus clair dans le chapitre sur le boutisme. ==Les instructions d'accès mémoire== Les instructions d’accès mémoire permettent de copier ou d'échanger des données entre le processeur et la RAM. On peut ainsi copier le contenu d'un registre en mémoire, charger une donnée de la RAM dans un registre, initialiser un registre à une valeur bien précise, etc. Il en existe plusieurs, les plus connues étant les suivantes : LOAD, STORE et MOV. D'autres processeurs utilisent une instruction d'accès mémoire généraliste, plus complexe. ===Les instructions d'accès à la RAM : LOAD et STORE=== Les instructions LOAD et STORE sont deux instructions qui permettent d'échanger des données entre la mémoire RAM et les registres. Elles copient le contenu d'un registre dans la mémoire, ou au contraire une portion de mémoire RAM dans un registre. * L''''instruction LOAD''' est une instruction de lecture : elle copie le contenu d'un ou plusieurs mots mémoire consécutifs dans un registre. Le contenu du registre est remplacé par le contenu des mots mémoire de la mémoire RAM. * L''''instruction STORE''' fait l'inverse : elle copie le contenu d'un registre dans un ou plusieurs mots mémoire consécutifs en mémoire RAM. {|class="wikitable" |[[File:Instruction LOAD.png|300px|Instruction LOAD.]] |[[File:Instruction STORE.png|300px|Instruction STORE.]] |} En théorie, une variante de l'instruction STORE peut enregistrer une constante en mémoire RAM. Il est en théorie possible pour une instruction STORE modifiée de stocker la valeur 9 dans l'adresse X, par exemple. La constante est fournie par l'instruction, elle n'est pas stockée dans un registre, mais carrément intégrée à l'instruction. Cela sera plus clair quand nous verrons les modes d'adressage, notamment le mode d'adressage immédiat. Mais si c'est une possibilité théorique, aucun processeur connu n'a de telle instruction, qui serait peu utilisée. D'autres instructions d'accès mémoire plus complexes existent. Pour en donner un exemple, citons les instructions de transferts par bloc sur les premiers processeurs ARM. Ces instructions permettent de copier plusieurs registres en mémoire RAM, en une seule instruction. Sur l'ARM1, il y a 16 registres en tout. Les instructions de transfert de bloc peuvent sélectionner n'importe quel sous-ensemble de ces 16 registres, pour les copier en mémoire : on peut sélectionner tous les registres, une partie des registres (5 registres sur 16, ou 7, ou 8, ...), voire aucun registre. ===Les instructions de transfert entre registres : MOV et XCHG=== L''''instruction MOV''' copie le contenu d'un registre dans un autre sans passer par la mémoire. C'est donc un échange de données entre registres, qui n'implique en rien la mémoire RAM, mais MOV est quand même considérée comme une instruction d'accès mémoire. Les données sont copiées d'un registre source vers un registre de destination. Le contenu du registre source est conservé, alors que le contenu du registre de destination est écrasé (il est remplacé par la valeur copiée). Cette instruction est utile pour gérer les registres, notamment sur les architectures avec peu de registres et/ou sur les architectures avec des registres spécialisés. [[File:Instruction MOV.png|centre|300px|Instruction MOV.]] Mais quelques rares architectures ne disposent pas d'instruction MOV, qui n'est formellement pas nécessaire, même si bien utile. En effet, on peut émuler une instruction MOV avec des instructions logiques utilisées convenablement. L'idée est de faire une opération dont le résultat est l'opérande envoyée, et d'enregistrer le résultat dans le registre de destination. Par exemple, on peut faire un OU entre le registre opérande et 0 : le résultat sera l'opérande. Idem avec un ET et la valeur adéquate. Ou encore, on peut imaginer faire un ET/OU entre un registre et lui-même : le résultat est égal au contenu du registre opérande. Quelques processeurs assez rares ont des instructions pour échanger le contenu de deux registres. Par exemple, on peut citer l''''instruction XCHG''' sur les processeurs x86 des PC anciens et actuels. Elle permet d'échanger le contenu de deux registres, quel qu'ils soient, il n'y a pas de restrictions sur le registre source et sur le registre de destination. Mais d'autres processeurs ont des restrictions sur les registres source et destination. Par exemple, le processeur Z80 a des instructions d'échanges assez restrictives, comme on le verra dans quelques chapitres. Sur les processeurs ARM, l'instruction MOV fait partie des instructions qui permettent d'effectuer un décalage sur la seconde opérande. Il s'agit en réalité de décalages/rotations décalées, qui sont fusionnées avec une instruction MOV. L'instruction MOV des processeurs ARM fait soit un MOV normal, soit un décalage. ===Les instructions d'accès mémoire complexes=== Nous venons de voir les instructions LOAD, STORE et les transferts entre registres. Elles sont présentes sur tous les processeurs, modernes comme anciens. Mais quelques processeurs gèrent des instructions mémoire plus complexes. Elles ont tendance à effectuer plusieurs accès mémoire simultanés. Les '''instructions de copie mémoire''' copient une donnée d'une adresse vers une autre. Les copies en mémoire sont des opérations très fréquentes, il est très fréquent qu'un programme copie un bloc de mémoire dans un autre et beaucoup de programmeurs ont déjà été confronté à un tel cas. Aussi, les processeurs ajoutent des instructions multi-accès pour accélérer ces copies, ce qui fait un bon compromis entre performance et simplicité d'implémentation. Sur certains processeurs, il n'y a pas d'instruction LOAD ou STORE, ni même MOV . À la place, on trouve une '''instruction d'accès mémoire généraliste''', qui fusionne les trois. Elle est capable de faire une lecture, une écriture, ou une copie entre registres, et parfois une copie d'une adresse mémoire vers une autre. Les trois premières opérations sont presque toujours supportées, mais la copie d'une adresse mémoire vers une autre est beaucoup plus rare. Sur les processeurs x86, l'instruction généraliste s'appelle l'instruction MOV. Elle gère la lecture en RAM, l'écriture en RAM, la copie d'un registre vers un autre, l'écriture d'une constante dans un registre ou une adresse. Par contre, elle ne gère pas la copie d'une adresse mémoire vers une autre ; pour un transfert de mémoire à mémoire, il faut utiliser les instructions MOVS* ('''''Mov'''e '''S'''tring'' ; MOVSB : par octets, MOVSW : par mots de 16-bits, ...). D'autres instructions mémoires effectuent des opérations à l'utilité moins évidente. Sur certains processeurs, on trouve notamment des instructions pour vider la mémoire cache de son contenu, pour la réinitialiser. L'utilité ne vous est pas évidente, mais cela peut servir dans certains scénarios, notamment sur les architectures avec plusieurs processeurs pour synchroniser ces derniers. Cela sert aussi pour le système d'exploitation, qui doit remettre à zéro certains caches (comme la TLB qu'on verra dans le chapitre sur la mémoire virtuelle) quand on exécute plusieurs programmes en même temps. ==Les instructions de contrôle (branchements et tests)== Un processeur serait sacrément inflexible s'il ne faisait qu'exécuter des instructions dans l'ordre. Certains processeurs ne savent pas faire autre chose, comme le Harvard Mark I, et il est difficile, voire impossible, de coder certains programmes sur de tels ordinateurs. Mais rassurez-vous : il existe de quoi permettre au processeur de faire des choses plus évoluées. Pour rendre notre ordinateur "plus intelligent", on peut par exemple souhaiter que celui-ci n'exécute une suite d'instructions que si une certaine condition est remplie. Ou faire mieux : on peut demander à notre ordinateur de répéter une suite d'instructions tant qu'une condition bien définie est respectée. Diverses '''structures de contrôle''' de ce type ont donc étés inventées. Voici les plus utilisées et les plus courantes : ce sont celles qui reviennent de façon récurrente dans un grand nombre de langages de programmation actuels. Concevoir un programme (dans certains langages de programmation), c'est simplement créer une suite d'instructions, et utiliser ces fameuses structures de contrôle pour l'organiser. D'ailleurs, ceux qui savent déjà programmer auront reconnu ces fameuses structures de contrôle. On peut bien sur en inventer d’autres, en spécialisant certaines structures de contrôle à des cas un peu plus particuliers ou en combinant plusieurs de ces structures de contrôles de base, mais cela dépasse le cadre de ce cours : on ne va pas vous apprendre à programmer. {|class="wikitable" |- ! Nom de la structure de contrôle ! Description |- ! SI...ALORS | Exécute une suite d'instructions si une condition est respectée |- ! SI...ALORS...SINON | Exécute une suite d'instructions si une condition est respectée ou exécute une autre suite d'instructions si elle ne l'est pas. |- ! Boucle WHILE...DO | Répète une suite d'instructions tant qu'une condition est respectée. |- ! Boucle DO...WHILE aussi appelée REPEAT UNTIL | Répète une suite d'instructions tant qu'une condition est respectée. La différence, c'est que la boucle DO...WHILE exécute au moins une fois cette suite d'instructions. |- ! Boucle FOR | Répète un nombre fixé de fois une suite d'instructions. |} Les '''conditions''' à respecter pour qu'une structure de contrôle fasse son office sont généralement très simples. Elles se calculent le plus souvent en comparant deux opérandes (des adresses, ou des nombres entiers ou à virgule flottante). Elles correspondent le plus souvent aux comparaisons suivantes : * A == B (est-ce que A est égal à B ?) ; * A != B (est-ce que A est différent de B ?) ; * A > B (est-ce que A est supérieur à B ?) ; * A < B (est-ce que A est inférieur à B ?) ; * A >= B (est-ce que A est supérieur ou égal à B ?) ; * A <= B (est-ce que A est inférieur ou égal à B ?). Il est également possible de tester si le bit d'un registre ou octet mémoire est à 1 ou 0. Notamment le registre des indicateurs est testé après une instruction arithmétique (est-ce que le calcul a généré une retenue, ...). Pour implémenter ces structures de contrôle, on a besoin d'une instruction qui saute en avant ou en arrière dans le programme, suivant le résultat d'une condition. Par exemple, un SI...ALORS zappera une suite d'instruction si une condition n'est pas respectée, ce qui demande de sauter après cette suite d’instruction cas échéant. Répéter une suite d'instruction demande juste de revenir en arrière et de redémarrer l’exécution du programme au début de la suite d'instruction. Nous verrons comment sont implémentées les structures de contrôle plus bas, mais toujours est-il que cela implique de faire des sauts dans le programme. Faire un saut en avant ou en arrière dans le programme est assez simple : il suffit de modifier la valeur stockée dans le ''program counter'', ce qui permet de sauter directement à une instruction et de poursuivre l'exécution à partir de celle-ci. Et un tel saut est réalisé par des instructions spécialisées. Dans ce qui va suivre, nous allons appeler '''instructions de branchement''' les instructions qui sautent à un autre endroit du programme. Ce n'est pas la terminologie la plus adaptée, mais elle conviendra pour les explications. L'implémentation des structures de contrôle demande donc de calculer une condition, puis de faire un saut. Mais il faut savoir que l'implémentation demande parfois de faire un saut, sans avoir à tester de condition. Dans ce cas, l'instruction qui fait un saut sans faire de test de condition est elle aussi une instruction de branchement. Cela nous amène à faire la différence entre un branchement conditionnel et non-conditionnel. La différence entre les deux est simple. Une instruction de '''branchement conditionnel''' effectue deux opérations : un test qui vérifie si la condition adéquate est respectée, et un saut dans le programme aussi appelé branchement. Une instruction de '''branchement inconditionnelle''' ne teste pas de condition et ne fait qu'un saut dans le programme. ===Les structures de contrôle=== Le IF permet d’exécuter une suite d'instructions si et seulement si une certaine condition est remplie. [[File:Codage d'un if.. en assembleur.jpg|centre|vignette|upright=2|Codage d'un SI...ALORS en assembleur.]] Le IF...ELSE sert à effectuer une suite d'instructions différente selon que la condition est respectée ou non : c'est un SI…ALORS contenant un second cas. Une boucle consiste à répéter une suite d'instructions machine tant qu'une condition est valide (ou fausse). [[File:Codage d'un IF.ELSE en assembleur.png|centre|vignette|upright=2|Codage d'un SI...ALORS..SINON en assembleur.]] Les boucles sont une variante du IF dont le branchement renvoie le processeur sur une instruction précédente. Commençons par la boucle DO…WHILE : la suite d'instructions est exécutée au moins une fois, et est répétée tant qu'une certaine condition est vérifiée. Pour cela, la suite d'instructions à exécuter est placée avant les instructions de test et de branchement, le branchement permettant de répéter la suite d'instructions si la condition est remplie. Si jamais la condition testée est fausse, on passe tout simplement à la suite du programme. [[File:DO...WHILE.jpg|centre|vignette|upright=2|DO...WHILE.]] Une boucle WHILE…DO est identique à une boucle DO…WHILE à un détail près : la suite d'instructions de la boucle n'a pas forcément besoin d'être exécutée au moins une fois. On peut donc adapter une boucle DO…WHILE pour en faire une boucle WHILE…DO : il suffit de tester si la boucle doit être exécutée au moins une fois avec un IF, et exécuter une boucle DO…WHILE équivalente si c'est le cas. [[File:WHILE...DO.png|centre|vignette|upright=2|WHILE...DO.]] ===Les branchements conditionnels et leur implémentation === Il existe de nombreuses manières de mettre en œuvre les branchements conditionnels et tous les processeurs ne font pas de la même manière. Sur la plupart des processeurs, les branchements conditionnels sont séparés en deux instructions : une instruction de test qui vérifie si la condition voulue est respectée, et une instruction de saut conditionnelle. D'autres processeurs effectuent le test et le saut en une seule instruction machine. [[File:Implémentations possibles des branchements conditionnels.png|centre|vignette|upright=3|Implémentations possibles des branchements conditionnels]] : Plus surprenant, sur quelques rares processeurs, le ''program counter'' est un registre qui peut être modifié comme tous les autres. Cela permet de remplacer les branchements par une simple écriture dans le ''program counter'', avec une instruction MOV. Un bon exemple est le processeur ARM1, un des tout premiers processeur ARM. Cette dernière solution n'est presque jamais utilisée, mais elle reste surprenante ! Dans les faits, la solution la plus simple est clairement d'implémenter le tout avec une seule instruction. Mais beaucoup de processeurs anciens utilisent la première méthode, celle qui sépare le branchement conditionnel en deux instructions. Le branchement prend le résultat de l'instruction de test et décide s'il faut passer à l'instruction suivante ou sauter à une autre adresse. Il faut donc mémoriser le résultat de l'instruction de test dans un registre spécialisé, afin qu'il soit disponible pour l'instruction de branchement. L'usage d'un registre intermédiaire pour mémoriser le résultat de l'instruction de test demande d'ajouter un registre au processeur. De plus, le résultat de l'instruction de test varie grandement suivant le processeur, suivant la manière dont on répartit les responsabilités entre test et branchements. Il existe, dans les grandes lignes, deux techniques pour séparer test et branchement conditionnel. La première impose une séparation stricte entre calcul de la condition et saut : l'instruction de test calcule la condition, le branchement fait ou non le saut dans le programme suivant le résultat de la condition. On a alors une instruction de test proprement dit, qui vérifie si une condition est valide et fournit un résultat sur 1 bit. Nous appellerons ces dernières des comparaisons, car de telles instruction effectuent réellement une comparaison. La seconde méthode procède autrement, avec un calcul de la condition qui est réalisé en partie par l'instruction de test, en partie par le branchement. Cela peut paraitre surprenant, mais il y a de bonnes raisons à cette séparation peu intuitive. La raison est que l'instruction de test est une soustraction déguisée, qui fournit un résultat de plusieurs bits, qui est ensuite utilisé pour calculer la condition voulue par le branchement. l'instruction de test ne fait pas une comparaison proprement dit, mais leur résultat permet de déterminer le résultat d'une comparaison avec quelques manipulations simples. ====Les instructions de test proprement dit==== Les premières sont réellement des instructions de test, qui effectuent une comparaison et disent si deux nombres sont égaux, différents, lequel est supérieur, inférieur, etc. En clair, elles implémentent directement les comparaisons vues précédemment. Au total, on s'attend à ce que les 6 comparaisons précédentes soient implémentées avec 6 instructions de test différentes : une pour l'égalité, une pour la différence, une autre pour la supériorité stricte, etc. Mais certaines de ces comparaisons sont en deux versions : une qui compare des entiers non-signés, et une autre pour les entiers signés. La raison est que comparer deux nombres entiers ne se fait pas de la même manière selon que les opérandes soient signées ou non. Nous avions vu cela dans le chapitre sur les comparateurs, mais un petit rappel ne fait pas de mal. Pour comparer deux entiers signés, il faut tenir compte de leurs signes, et le circuit utilisé n'est pas le même. Cela a des conséquences au niveau des instructions du processeur, ce qui impose d'avoir des opérations séparées pour les entiers signés et non-signés. Dans les faits, les processeurs actuels utilisent le complément à deux pour les entiers signés, ce qui fait que les comparaisons d'égalité ou de différence A == B et A != B ne sont présentes qu'en un seul exemplaire. En complément à deux, l'égalité se détermine avec la même règle que pour les entiers non-signés : deux nombres sont égaux s'ils ont la même représentation binaire, ils sont différents sinon. Ce ne serait pas le cas avec les entiers en signe-magnitude ou en complément à un, du fait de la présence de deux zéros : un zéro positif et un zéro négatif. Les circuits de comparaison d'égalité et de différence seraient alors légèrement différents pour les entiers signés ou non. Au total, en complément à deux, on trouve donc 10 comparaisons usuelles, vu que les comparaisons de supériorité/infériorité sont en double. Le résultat d'une comparaison est un bit, qui dit si la condition testée est vraie ou fausse. Dans la majorité des cas, ce bit vaut 1 si la comparaison est vérifiée, et 0 sinon. Une fois que l'instruction a fait son travail, il reste à stocker son résultat quelque part. Pour cela, le processeur utilise un ou plusieurs '''registres à prédicats''', des registres de 1 bit qui peuvent stocker n'importe quel résultat de comparaison. Une comparaison peut enregistrer son résultat dans n'importe quel registre à prédicats : elle a juste à préciser lequel avec son nom de registre. Les registres à prédicats sont utiles pour accumuler les résultats de plusieurs comparaisons et les combiner par la suite. Par exemple, cela permet d'émuler une instruction qui teste si A >= B à partir de deux instructions qui calculent respectivement A > B et A == B. Pour cela, certains processeurs incorporent des instructions pour faire des opérations logiques sur les registres à prédicats. Ces opérations permettent de faire un ET, OU, XOR entre deux registres à prédicats et de stocker le résultat dans un registre à prédicat quelconque. D'autres instructions permettent de lire le résultat d'un registre à prédicat, de calculer une condition, de combiner son résultat avec la valeur lue et d'altérer le registre à prédicat sélectionné. Par exemple, sur l'architecture IA-64, il existe une instruction cmp.eq.or, qui calcule une condition, lit un registre à prédicat fait un OU logique entre le registre lu et le résultat de la condition, et enregistre le tout dans un autre registre à prédicat. De telles instructions facilitent grandement le codage de certaines fonctions, qui demandent que plusieurs conditions soient vérifiées pour exécuter un morceau de code. ====Les instructions de test qui sont des soustractions déguisées==== Le second type d'instruction de test ne calcule pas ces conditions directement, mais elle fournit un résultat de quelques bits qui permet de les calculer avec quelques manipulations simples. Sur ces processeurs, il n'y a qu'une seule instruction de comparaison, qui est une soustraction déguisée. Le résultat de la soustraction n'est pas sauvegardé dans un registre et est simplement perdu. C'est le cas sur certains processeurs ARM ou sur les processeurs x86. Par exemple, un processeur x86 possède une instruction CMP qui n'est qu'une soustraction déguisée dans un opcode différent. Le résultat de cette soustraction déguisée est un résultat portant sur 4 bits, qui donne des informations sur le résultat de la soustraction. Le premier bit, appelé bit ''null'', indique si le résultat est nul ou non. Le second bit indique le signe du résultat, s'il est positif ou négatif. Enfin, deux autres bits précisent si la soustraction a donné lieu à un débordement d'entier. Il y a deux bits, car on vérifie deux types de débordement : un débordement non-signé (une retenue sortante de l'additionneur), et le débordement signé (débordement en complément à deux). Pour mémoriser le résultat d'une soustraction déguisée, le processeur incorpore un '''registre d'état'''. Le registre d'état stocke des bits qui ont chacun une signification prédéterminée lors de la conception du processeur et il sert à beaucoup de choses. Dans le cas qui nous intéresse, le registre d'état mémorise les résultats de l'instruction de test : les deux bit de débordement, le bit qui précise que le résultat d'une instruction vaut zéro, le bit de retenue pour le bit de signe. La condition en elle-même est réalisée par le branchement. L'instruction de branchement fait donc deux choses : calculer la condition à partir du registre d'état, et effectuer le saut si la condition est valide. Le calcul des conditions se fait à partir des 4 bits de résultat. Le bit ''null'' permet de savoir si les deux opérandes sont égales ou non : si le résultat d'une soustraction est nul, cela implique que les deux opérandes sont égales. Le bit de signe permet de déterminer si le première opérande est supérieur ou inférieure à la seconde : le résultat de la soustraction est positif si A >= B, négatif sinon. Les bits de débordements permettent de faire la différence entre infériorité stricte ou non. Tout cela sera expliqué plus en détail dans le paragraphe suivant. [[File:Branchements et tests avec un registre d'état.png|centre|vignette|upright=1.5|Branchements et tests avec un registre d'état]] La conséquence est qu'il y a autant d'instructions de branchements que de conditions possibles. Aussi, on a une instruction de test, mais environ une dizaine d'instructions de branchements. C'est l'inverse de ce qu'on a avec des instructions de test proprement dites, où on a autant d'instructions de test que de conditions, mais un seul branchement. Un bon exemple est celui des processeurs x86. Le registre d'état des CPU x86 contient 5 bits appelés OF, SF, ZF, CF et PF : ZF indique que le résultat de la soustraction vaut 0, SF indique son signe, CF est le bit de retenue et de débordement non-signé, OF le bit de débordement signé, et PF le bit qui donne la parité du résultat. Il existe plusieurs branchements, certains testant un seul bit du registre d'état, et d'autres une combinaison de plusieurs bits. {|class="wikitable" |- ! Instruction de branchement ! Bit du registre d'état testé ! Condition testée si on compare deux nombres A et B avec une instruction de test |- ! JS (Jump if Sign) | SF = 1 | Le résultat est négatif |- ! JNS (Jump if not Sign) | SF = 0 | Le résultat est positif |- ! JO (Jump if Overflow) | OF = 1 | Le calcul arithmétique précédent a généré un débordement signé |- ! JNO (Jump if Not Overflow) | OF = 0 | Le calcul arithmétique précédent n'a pas généré de débordement signé |- ! JNE (Jump if Not equal) | ZF = 1 | Les deux nombres A et B sont égaux |- ! JE (Jump if Equal) | ZF = 0 | Les deux nombres A et B sont différents |- ! JB (Jump if below) | CF = 1 | A < B, avec A et B non-signés |- ! JAE (Jump if Above or Equal) | CF = 0 | A >= B, avec A et B non-signés |- ! (JBE) Jump if below or equal | CF OU ZF = 1 | A >= B si A et B sont non-signés |- ! JA (Jump if above) | CF ET ZF = 0 | A > B si A et B sont non-signés |- ! JL (Jump if less) | SF != OF | si A < B, si A et B sont signés |- ! JGE (Jump if Greater or Equal) | SF = OF | si A >= B, si A et B sont signés |- ! JLE (Jump if less or equal) | (SF != OF) OU ZF = 1 | si A <= B, si A et B sont signés |- ! JGE (Jump if Greater) | (SF = OF) ET (NOT ZF) = 1 | si A > B, si A et B sont signés |} ===Les instructions à prédicat=== Les '''instructions à prédicat''' sont des instructions qui ne font quelque chose que si une condition est respectée, et se comportent comme un NOP (une instruction qui ne fait rien) sinon. Elles lisent le résultat d'une comparaison, dans le registre d'état ou un registre à prédicat, et s’exécutent ou non suivant sa valeur. En général, les instructions à prédicats sont des instructions en plus des instructions normales, pas à prédicat. L'instruction à prédicat la plus représentative, présente sur de nombreux processeurs, est l'instruction CMOV, qui copie un registre dans un autre si une condition est remplie. Elle permet de faire certaines opérations assez simples, comme calculer la valeur absolue d'un nombre, le maximum de deux nombres, etc. Pour gérer les instructions à prédicat, les instructions de test s'adaptent sur plusieurs points. Le premier est que les instructions de test préfèrent utiliser des registres à prédicats, au lieu d'un registre d'état. Une des raisons à cela est la suivante : avec des registres à prédicats, on peut ajouter des instructions pour faire un ET/OU/XOR entre registres à prédicats, ce qui permet de tester des combinaisons de conditions sans faire appel au moindre branchement. Et ces conditions complexes ne sont pas rares, ce qui rend l'usage de registres à prédicats très utiles avec les instructions à prédicats. Une autre adaptation est que les instructions de test tendent à fournir deux résultats : le résultat de la condition, et le résultat de la condition inverse. Ils sont fournis dans deux registres à prédicats distincts. Faire ainsi facilite grandement l'implémentation des structures de contrôle SI...ALORS simples. Pour rappel, elles ont deux morceaux de code : un qui s’exécute si une condition est remplie, l'autre si la condition inverse est remplie. Avec ce système, les instructions du premier et du second morceau de code testerons deux bits distincts. L'usage d'instructions à prédicat séparées des autres instructions porte le nom de '''prédication partielle'''. C'est de loin l'implémentation la plus courante. Mais sur certains processeurs, assez rares, toutes les instructions sont des instructions à prédicat : on parle de '''prédication totale'''. Les anciens processeurs ARM 32 bits étaient dans ce cas, par exemple. Cela peut paraitre étrange, vu que certaines instructions ne sont pas dans une structure de contrôle et doivent toujours s’exécuter, peu importe les conditions testées avant. Mais rassurez-vous, sur les processeurs à prédication totale, il y a toujours un moyen pour spécifier que certaines instructions doivent toujours s’exécuter, de manière inconditionnelle. Par exemple, sur les processeurs d'architecture HP IA-64, un des registre à prédicat, le tout premier, contient la valeur 1 et ne peut pas être modifié. Si on veut une instruction inconditionnelle, il suffit qu'elle précise que le registre à prédicat à lire est ce registre. : Les processeurs avec un registre d'état n'ont généralement que de la prédication partielle, le plus souvent limitée à une seule instruction CMOV. Alors que qui dit prédication totale dit systématiquement registres à prédicats. Les processeurs ARM disposent d'une prédication totale, du moins pour le jeu d'instruction ARM 32 bits. Mais il supportent une second jeu d’instruction optionnel, le ''thumb'', qui est plus compact. Au lieu d'encoder ses instructions sur 32-64 bits, ses instructions font seulement 16 bits. Et pour compacter ce jeu d'instruction, la prédication totale a été supprimée. À la place, ''thumb'' incorpore une '''instruction IT''', qui active l’exécution conditionnelle des instructions suivantes. L'instruction teste une condition et calcule un prédicat, qui est ensuite utilisé pour décider de l'exécution des instructions suivantes. L'exécution conditionnelle marche jusqu'à 4 instructions consécutives. Le nombre exact est configurable et va de 1 à 4 instructions consécutives après l'instruction IT. La condition est configurable pour les 1 à 4 instructions : chaque instruction peut s'exécuter si la condition est vraie, ou au contraire fausse. Un masque de 4 bits décide de quelle condition utiliser pour chaque instruction. Il y a un bit par instruction, qui vaut 1 si la condition doit être vérifiée, 0 si on veut la condition inverse. ===L'instruction SKIP=== L''''instruction SKIP''' permet de zapper l'instruction suivante si une condition testée est fausse. Il en existe deux versions. La première est fusionnée avec l'instruction de test. La condition est calculée par l'instruction SKIP, qui décide s'il faut sauter l'instruction suivante. Dans un autre cas, l'instruction SKIP est précédée d'une instruction de test, récupère son résultat dans un registre de prédicat ou dans le registre d'état, et effectue le saut. On peut la voir comme une forme particulière de branchement conditionnel, qui brancherait deux instructions plus loin. Son utilité n'est pas évidente, mais on peut classer ses utilisations en trois catégories. La première permet d'émuler une instruction de branchement conditionnel en combinant une instruction SKIP avec un branchement inconditionnel. Le branchement inconditionnel est skippé si la condition est remplie/fausse, mais éxecuté dans le cas contraire : c'est le comportement d'un branchement conditionnel. Une autre utilisation permet d'émuler une instruction à prédicat en faisant précéder une instruction normale par une instruction SKIP. Enfin, elles servent à implémenter des structures de controle IF à condition que le code du IF se résume à une vulgaire instruction. C'est assez rare, mais certains calculs comme la valeur absolue ou le calcul du minimum peuvent se calculer ainsi. [[File:Skip instruction.png|centre|vignette|upright=3|Skip instruction]] Vous pourriez imaginer des versions améliorées de l'instruction, qui permettent de zapper plusieurs instructions, mais de telles instructions ne sont autres que des instructions de branchement conditionnelles spécifiques, comme nous le verrons dans le chapitre sur les modes d'adressage. ==Les méta-instructions REPEAT et EXECUTE== Enfin, il faut aussi citer les '''méta-instructions''', des instructions qui agissent sur l’exécution d'autres instructions. Il en existe deux : REPEAT et EXECUTE. Elles servent techniquement à manipuler le flot de contrôle d'un programme, et ont quelques ressemblances avec les branchements ou les boucles. Elles sont extrêmement rares et on ne les trouve que sur des anciens processeurs (généralement micro-codés), ou sur certaines processeurs spécialisés dans le traitement de signal appelés des DSP, qui feront l'objet d'un chapitre à eux seuls. ===L’instruction REPEAT et le ''Zero-overhead looping''=== La première est la '''méta-instruction REPEAT''', qui permet de simplifier l'implémentation des boucles. Dans sa version la plus simple, elle fait en sorte que l'instruction qui la suit soit répétée plusieurs fois. Le nombre de répétition est soit un nombre fixe, toujours le même, soit l'instruction se répète tant qu'une condition n'est pas remplie. Les deux situations ne se rencontrent pas sur les mêmes processeurs. Par exemple, l'UNIVAC 1103 possède une instruction REPEAT très simple, qui répète l'instruction cible un nombre fixe de fois, mais ne gère pas les conditions. Le GE-600/Honeywell 6000 series incorpore trois instructions REPEAT de ce type. La première répète l'instruction suivante soit un nombre fixe de fois, soit quand une condition est remplie. La seconde répète les deux instructions suivantes, l'une après l'autre. Enfin, la dernière répète l'instruction suivante jusqu'à : soit qu'une condition soit remplie, soit qu'une adresse bien précise soit atteinte. Elle servait sans doute à implémenter le parcours d'une liste chainée pour trouver un item bien précis. Une version améliorée de l'instruction REPEAT permet de répéter un bloc de plusieurs instructions, ce qui permet d'implémenter une boucle en une seule instruction. Elles sont fréquentes sur certains processeurs de traitement de signal, qui doivent exécuter en permanence de petites boucles. Typiquement, elles permettent d'implémenter des boucles FOR dont le nombre d’exécution est fixe. La répétition de la boucle est contrôlée par un registre de boucle, qui mémorise le nombre de répétitions, et qui est décrémenté à chaque itération, sans avoir à utiliser d'instruction d'incrémentation/décrémentation. Une variante précise deux adresses, qui délimitent les instructions de la boucle : une adresse pour le début de la boucle, une adresse pour la fin. L'implémentation hardware est alors assez simple : quand le ''program counter'' atteint l'adresse de fin, il est réinitialisé à l'adresse de début. La gestion du ''program counter'' se fait alors sans utiliser d'instructions de branchement. les deux registres sont initialisés avec une isntruction LOPP, spécialement dédiée pour cela. Les deux techniques précédentes permettent d'implémenter des boucles sans utiliser de branchements, ou presque. Elles rendent l'exécution des boucles tellement rapides qu'elles portent le nom de '''''Zero-overhead looping'''''. : Les instructions REP mentionnées plus haut, ne sont PAS des exemples d'instruction REPEAT. Le préfixe REP des processeurs x86 est une instruction qui se répète elle-même. Mais l'instruction REPEAT force la répétition de l'instruction suivante ! Elle agit sur une autre instruction, d'où son caractère de méta-instruction. ===L'instruction EXECUTE=== La '''méta-instruction EXECUTE''' fournit l'adresse d'une instruction cible, qui est exécutée en lieu et place de l'instruction EXECUTE. Quand le processeur exécute l'instruction EXECUTE, il prend l'adresse cible, charge l'instruction dans l'adresse cible, et l’exécute à la place de l'instruction EXECUTE. Il est possible de comprendre l'instruction EXECUTE comme un branchement spécial. Tout se passe comme si l'instruction EXECUTE effectuait un branchement vers l'instruction cible, mais que le processeur ne poursuivait pas l’exécution à la suite de l’instruction cible, et revenait à la suite de l'instruction cible. Il y a souvent des contraintes sur l'instruction cible, qui est pointée par l'adresse cible. Généralement, il n'est pas possible que l'instruction cible soit elle-même une autre instruction EXECUTE. De même, beaucoup de processeurs interdisent que l’instruction cible soit un branchement. Mais d'autres processeurs n'ont pas ces contraintes et autorisent à utiliser des branchements pour l'instruction cible. L'utilité d'une telle instruction est tout sauf évidente. Elle servait pourtant à beaucoup de choses sur les processeurs où elle était implémentée. Précisons qu'elle était surtout présente sur des vieux ordinateurs, dans les années 50-60, et quelques processeurs des années 70. Elle a disparu dès les années 80 et n'est présentée que par souci d'exhaustivité et intérêt historique pour les curieux. Cette précision permet de comprendre que cette instruction servait pour résoudre des problèmes qui sont actuellement résolus autrement. L'adresse cible peut être soit intégrée dans l'instruction, soit dans un registre. Dans le second cas, l'adresse peut être incrémentée ou modifiée afin que l'instruction EXECUTE change de cible à chaque exécution. Tout se passe comme si le registre contenant l'adresse cible servait à émuler un ''program counter''. En mettant une instruction EXECUTE dans une boucle et en complétant le tout avec du code annexe, on peut exécuter du code extérieur sans modifier le véritable ''program counter''. L'utilité est de faciliter l'implémentation des logiciels debuggers, des émulateurs, ou d'autres programmes dans le même genre. Les autres utilisations sont assez nombreuses, mais aussi difficiles à expliquer pour qui n'a pas de connaissances poussées en programmation. La première utilité est l'implémentation de certaines fonctionnalités des langages de programmation évolués, à savoir le ''late binding'', les fonctions virtuelles, et quelques autres. Elle facilite aussi l'implémentation des compilateurs à la volée, en permettant d’exécuter du code produit à volée sans faire tiquer les mécanismes de protection mémoire implémentés dans le processeur. Elle permet d'émuler du code automodifiant pour les logiciels qui gagnaient autrefois à l'utiliser. Et il y en a d'autres. ==Les instructions d'arrêt et de mise en veille== Les processeurs gèrent souvent des '''instructions de mise en veille''' le processeur. Une fois mis en veille, le processeur ne peut être réveillé que si un signal de sortie de veille survient. Les signaux de sortie de veille sont envoyés par les périphériques, les entrées-sorties, le ''chipset'' de la carte mère, etc. Ils sont rarement mis totalement en veille, ce qui leur permet de générer ce signal de sortie si nécessaire. Le processeur attend alors qu'un périphérique lui envoie un signal de sortie de veille, mais ne fait rien en attendant. De telles instructions ne sont exécutables qu'en mode noyau, par le système d'exploitation. : Le signal de sortie de veille est techniquement une interruption matérielle, comme on le verra plus tard. Il existe aussi des '''instructions d'arrêt''', qui éteignent le processeur complétement. Le processeur peut redémarrer, mais pas reprendre là où il en était. Pour redémarrer, il faut qu'il reçoive un signal RESET, envoyé sur une entrée du processeur. Lorsque l'entrée RESET du processeur est mise à 1, le processeur redémarre. Typiquement, l'alimentation du processeur est suspendue. ===Les exemples sur les processeurs les plus connus=== Sur les processeurs ARM, les instructions WFI et WFE sont utiles pour les systèmes embarqués, pour mettre le processeur en mode basse consommation. Lorsqu'une instruction de ce type est exécutée, le processeur continue d'être alimenté, mais il ne tient pas compte du signal d'horloge. Le signal d'horloge est clock gaté dès l'entrée dans le CPU. La différence entre les deux instructions est que WFI s'exécute inconditionnellement, alors que WFE ne s’exécute que un registre spécifique, le registre d'évènement, est à 0. Sur les processeurs Motorola 6502 et ses dérivés, l'instruction WAI est une instruction de mise en veille, alors que l'instruction STP éteint l'ordinateur. La différence est qu'avec l'instruction STP, le processeur ne réagit qu'au signal RESET, qui fait redémarrer le processeur, mais ne réagit pas aux signaux de sortie de veille. L'exécution du processeur ne reprend alors pas là où le processeur s'est arrêté, le ''program counter'' est réinitialisé. Sur les CPU x86 avant le 486, l'instruction HLT ne mettait pas le processeur en mode basse consommation. Aucune technique n'était prévue pour réduire la consommation du processeur pendant la veille. Le 8086 se contentait de se déconnecter du bus et n'incrémentait pas son ''program counter''. Au passage, l'implémentation exacte au niveau des circuits de l'instruction HLT sur le 8086 est détaillée dans cet article de blog : * [https://www.righto.com/2023/01/reverse-engineering-intel-8086.html Reverse-engineering the Intel 8086 processor's HALT circuits] C'est avec le 486 que la mise en veille s'est accompagnée d'une extinction partielle du processeur. Le processeur passait en mode basse consommation, ce qui permettait des économies d'énergie de 5 à 10%. Cependant, les premiers CPU sortis d'usine avaient un bug : le CPU stoppé via l'instruction HLT ne pouvait pas redémarrer de manière logicielle, il fallait lui envoyer le signal de RESET directement via le matériel. {|class="wikitable" |- ! x86 | HLT (HALT) |- ! ARM | * WFI (Wait For Interrupt) * WFE (Wait For Event). |- ! Motorola 6502 et plus | * WAI (WAit for Interrupt) * STP (SToP) |} ===Les instructions ''Halt And Catch Fire''=== Le bug n'est pas spécifique aux processeurs 486, de nombreux CPU ont des instructions non-documentées qui bloquent l'ordinateur, si exécutées. Le processeur ne peut alors pas sortir de la mise en veille et soit s'arrête, soit doit être RESET. Les instructions ne sont souvent pas voulues par les concepteurs et sont souvent des bugs. De telles instructions illégales devraient lever une exception matérielle "instruction non reconnue", mais ne le font pas en raison d'un bug quelconque. Elles sont appelées, non sans humour, des '''instructions ''Halt And Catch Fire''''' (stoppe et prend feu). Un exemple classique est celle du bug du Pentium F00F. Le responsable est une instruction non-documentée, encodée en binaire comme suit F0 0F C7 C8. Il s'agit d'une instruction dont l'encodage est invalide. Elle correspond à une instruction cmpxchg8b qui agit sur une valeur 64 bits obtenue en concaténant les deux registres (EAX et EDX). Elle compare cette valeur 64 bits avec une donnée en mémoire RAM. Mais avec l'encodage F0 0F C7 C8, l'adresse mémoire est remplacée par un nom de registre, du fait de l'encodage des modes d'adressage sur ce CPU. En théorie, le processeur devrait lever une exception matérielle ''opcode invalide''. Seulement, l'instruction est associée à un préfixe LOCK, qu'on ne détaillera pas ici, qui empêche la levée de l'exception. Elle agissait comme une instruction ''Halt And Catch Fire'' classique. Un problème est que cette instruction n'était pas une instruction en mode noyau, mais une instruction accessible en espace utilisateur. N'importe quel programme invalide, voire un programme malicieux, pouvait bloquer l'ordinateur. La situation a été prise an sérieux, les systèmes d'exploitation fournissant des mitigations logicielles. Intel corrigea le problème, dans une seconde fournée sortie d'usine, avec la version B2 du 486. ==Résumé== Pour résumer, les instructions les plus courantes sont les suivantes : {|class="wikitable" |- !Instruction !Utilité |- !Instructions arithmétiques |Elles font des calculs sur des nombres. Les plus communes sont l'addition, la soustraction, la multiplication, la division, le modulo. Pour les instructions flottantes, la racine carrée est souvent supportée, parfois avec les opérations trigonométriques, les logarithmes et l'exponentielle. |- !Instructions logiques |Elles travaillent sur des bits ou des groupes de bits. Les plus communes sont ; * Les opérations bit à bit, à savoir le ET logique, le OU logique, le OU exclusif (XOR) et le NON logique. * Les instructions de décalage à droite et à gauche, qui vont décaler tous les bits d'un nombre d'un cran vers la gauche ou la droite. Les bits qui sortent du nombre sont considérés comme perdus. * Les instructions de rotation, qui font la même chose que les instructions de décalage, à la différence près que les bits qui "sortent d'un côté du nombre" après le décalage rentrent de l'autre. |- !Instructions de test et de contrôle (branchements) |Elles permettent de contrôler la façon dont notre programme s’exécute sur notre ordinateur. Elles permettent notamment de choisir la prochaine instruction à exécuter, histoire de répéter des suites d'instructions, de ne pas exécuter des blocs d'instructions dans certains cas, et bien d'autres choses. |- !Instructions d’accès mémoire |Elles permettent d'échanger des données entre le processeur et la mémoire, ou encore permettent de gérer la mémoire et son adressage. Les deux les plus courantes sont les suivantes : * LOAD : charge une donnée dans un registre ; * STORE : copie le contenu d'un registre dans une adresse mémoire. |} En plus de ces instructions, beaucoup de processeurs ajoutent d'autres instructions. La plupart sont utilisées par le système d'exploitation pour configurer certaines fonctionnalités importante : la protection mémoire, la mémoire virtuelle, les modes de compatibilité du processeur, la gestion de l'alimentation, l'arrêt ou la mise en veille, etc. On peut aussi trouver des instructions spécialisées dans les calculs cryptographiques : certaines instructions permettent de chiffrer ou de déchiffrer des données de taille fixe. De même, certains processeurs ont une instruction permettant de générer des nombres aléatoires. Et on peut trouver bien d'autres exemples... Mais d'autres sont franchement exotiques. Par exemple, certains processeurs sont capables d'effectuer des instructions sur du texte directement. Pour stocker du texte, la technique la plus simple utilise une suite de lettres, stockées les unes à la suite des autres dans la mémoire, dans l'ordre dans lesquelles elles sont placées dans le texte. Quelques ordinateurs disposent d'instructions pour traiter ces suites de lettres. D'ailleurs, n'importe quel PC x86 actuel dispose de telles instructions, bien qu'elles ne soient pas utilisées car paradoxalement trop lente comparé aux solutions logicielles ! Cela peut paraître surprenant, mais il y a une explication assez simple qui sera compréhensible dans quelques chapitres (les instructions en question sont microcodées). <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les mémoires FIFO et LIFO | prevText=Les mémoires FIFO et LIFO | next=Les registres du processeur | nextText=Les registres du processeur }} </noinclude> sbiwwlczo5ra31lk1ie5fe02a21d9mx Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur 0 65780 765845 765749 2026-05-03T01:13:43Z Mewtow 31375 /* Lecture et écriture : mémoires ROM et RWM */ 765845 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique appelée la '''mémoire RAM'''. La mémoire RAM est utilisée pour stocker temporairement des données que le processeur doit manipuler. La mémoire RAM est donc une mémoire RWN qui a les caractéristiques suivantes : * La mémoire RAM est une mémoire électronique, fabriquée avec des semi-conducteurs. * La mémoire RAM s'efface complètement quand on coupe l'alimentation de l'ordinateur (on dit qu'elle est volatile). * La mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse). Et c'est des caractéristiques que d'autres mémoires RWM n'ont pas : * Une mémoire RWM peut être magnétique (mémoires à tore de ferrite), acoustique, basées sur des CRTs (tubes Wlliams). * Une mémoire RWM peut ne pas être volatile et donc conserver les données écrites. L'exemple type étant les mémoires à tore de ferrite. Mais il existe des prototypes de mémoires FERAM, MRAM et autres, qui seraient non-volatiles. * Une mémoire RWN n'a pas forcément un temps d'accès constant aux données, ce n'est pas garanti pour les mémoires RWM. Par exemple, les anciens tambours magnétiques des anciens ''mainframes'' étaient des mémoires RWM non-volatiles, utilisées comme stockage temporaire. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de l'architecture de quelques consoles de jeu== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs qui collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, des disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup d'entrées-sorties soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place une mémoire ROM, dans la cartouche de jeu, pour mémoriser le code du jeu. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Autre différence : les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des co-processeurs dédiés pour le son et les graphismes. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. La gestion de la cartouche de jeu est notamment un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> 15ek8pwce7h8znu8lcs8oebmiwjvali 765846 765845 2026-05-03T01:14:19Z Mewtow 31375 /* Lecture et écriture : mémoires ROM et RWM */ 765846 wikitext text/x-wiki Dans les chapitres précédents, nous avons vu comment représenter de l'information, la traiter et la mémoriser avec des circuits. Mais un ordinateur n'est pas qu'un amoncellement de circuits et est organisé d'une manière bien précise. Il est structuré autour de trois circuits principaux : * un '''processeur''', qui manipule l'information et donne un résultat ; * une '''mémoire''' qui mémorise les données à manipuler ; * les '''entrées/sorties''', qui permettent à l'ordinateur de communiquer avec l'extérieur. [[File:Architecture Von Neumann.png|centre|vignette|upright=2|Architecture d'un système à mémoire.]] Pour faire simple, le processeur est un circuit qui s'occupe de faire des calculs. Rien d'étonnant à cela. Je rappelle que tout est codé par des nombres dans un ordinateur, ce qui fait que manipuler des nombres revient simplement à faire des calculs. Un ordinateur n'est donc qu'une grosse calculatrice améliorée, et le processeur est le composant qui fait les calculs. La mémoire s'occupe purement de la mémorisation des données, des nombres sur lesquelles faire des calculs. Pour être plus précis, il y a deux mémoires : une pour les données proprement dites, une autre pour le programme à exécuter. La première est la '''mémoire RAM''', la seconde est la '''mémoire ROM'''. Nous détaillerons ce que sont ces deux mémoires dans la suite du chapitre, mais sachez que nous avions déjà rencontré ces deux types de mémoires dans les chapitres sur les registres et les mémoires adressables. Les entrées-sorties permettent au processeur et à la mémoire de communiquer avec l'extérieur et d'échanger des informations avec des périphériques. Les '''périphériques''' regroupent, pour rappel, tout ce est branché sur un ordinateur, mais n'est pas à l'intérieur de celui-ci. Le processeur, les mémoires et les entrées-sorties communiquent ensemble via un '''réseau d'interconnexions'''. Le terme est assez barbare, mais rien de compliqué sur le principe. C'est juste un ensemble de fils électriques qui relie les différents éléments d'un ordinateur. Les interconnexions sont souvent appelées le bus de communication, mais le terme est un abus de langage, comme on le verra plus bas. Afin de simplifier les explications, on va supposer que le réseau d'interconnexion est le suivant. Tout est connecté au processeur. Il y a des interconnexions entre le processeur et la mémoire RAM, d'autres interconnexions entre processeur et mémoire ROM, et d'autres entre le processeur et les entrées-sorties. Nous verrons que d'autres réseaux d'interconnexions fusionnent certaines interconnexions, pour les partager entre la ROM et la RAM, par exemple. Mais pour le moment, gardez le schéma ci-dessous en tête. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ==Les mémoires RAM et ROM== La mémoire est le composant qui mémorise des informations, des données. Dans la majorité des cas, la mémoire est composée de plusieurs '''cases mémoire''', chacune mémorisant plusieurs bits, le nombre de bits étant identique pour toutes les cases mémoire. Dans le cas le plus simple, une case mémoire mémorise un '''octet''', un groupe de 8 bits. Mais les mémoires modernes mémorisent plusieurs octets par case mémoire : elles ont des cases mémoires de 16, 32 ou 64 bits, soit respectivement 2/4/8 octets. De rares mémoires assez anciennes utilisaient des cases mémoires contenant 1, 2, 3, 4, 5, 6 7, 13, 17, 23, 36 ou 48 bits. Mais ce n'était pas des mémoires électroniques, aussi nous allons les passer sous silence. Tout ce qu'il faut savoir est que la quasi-totalité des mémoires électronique a un ou plusieurs octets par case mémoire. Pour simplifier, vous pouvez imaginer qu'une mémoire RAM est un regroupement de registre, chacun étant une case mémoire. C'est une description pas trop mauvaise pour décrire les mémoires RAM, qu'on abordera dans ce qui suit. {|class="wikitable" |+ Contenu d'une mémoire, case mémoire de 16 bits (deux octets) |- ! Case mémoire N°1 | 0001 0110 1111 1110 |- ! Case mémoire N°2 | 1111 1110 0110 1111 |- ! Case mémoire N°3 | 0001 0000 0110 0001 |- ! Case mémoire N°4 | 1000 0110 0001 0000 |- ! Case mémoire N°5 | 1100 1010 0110 0001 |- ! ... | ... |- ! Case mémoire N°1023 | 0001 0110 0001 0110 |- ! Case mémoire N°1024 | 0001 0110 0001 0110 |} Dans ce cours, il nous arrivera de partir du principe qu'il y a un octet par case mémoire, par souci de simplification. Mais ce ne sera pas systématique. De plus, il nous arrivera d'utiliser le terme adresse pour parler en réalité de la case mémoire associée, par métonymie. ===La capacité mémoire=== Bien évidemment, une mémoire ne peut stocker qu'une quantité finie de données. Et à ce petit jeu, certaines mémoires s'en sortent mieux que d'autres et peuvent stocker beaucoup plus de données que les autres. La '''capacité''' d'une mémoire correspond à la quantité d'informations que celle-ci peut mémoriser. Plus précisément, il s'agit du nombre maximal de bits qu'une mémoire peut contenir. Elle est le produit entre le nombre de cases mémoire, et la taille en bit d'une case mémoire. Toutes les mémoires actuelles utilisant des cases mémoire d'un ou plusieurs octets, ce qui nous arrange pour compter la capacité d'une mémoire. Au lieu de compter cette capacité en bits, on préfère mesurer la capacité d'une mémoire avec le nombre d'octets qu'elle contient. Mais les mémoires des PC font plusieurs millions ou milliards d'octets. Pour se faciliter la tâche, on utilise des préfixes pour désigner les différentes capacités mémoires. Vous connaissez sûrement ces préfixes : kibioctets, mébioctets et gibioctets, notés respectivement Kio, Mio et Gio. {|class="wikitable" |- !Préfixe!!Capacité mémoire en octets!!Puissance de deux |- ||Kio||1024||2<sup>10</sup> octets |- ||Mio||1 048 576||2<sup>20</sup> octets |- ||Gio||1 073 741 824||2<sup>30</sup> octets |} On peut se demander pourquoi utiliser des puissances de 1024, et ne pas utiliser des puissances un peu plus communes ? Dans la majorité des situations, les électroniciens préfèrent manipuler des puissances de deux pour se faciliter la vie. Par convention, on utilise souvent des puissances de 1024, qui est la puissance de deux la plus proche de 1000. Or, dans le langage courant, kilo, méga et giga sont des multiples de 1000. Quand vous vous pesez sur votre balance et que celle-ci vous indique 58 kilogrammes, cela veut dire que vous pesez 58 000 grammes. De même, un kilomètre est égal à 1000 mètres, et non 1024 mètres. Autrefois, on utilisait les termes kilo, méga et giga à la place de nos kibi, mebi et gibi, par abus de langage. Mais peu de personnes sont au courant de l'existence de ces nouvelles unités, et celles-ci sont rarement utilisées. Et cette confusion permet aux fabricants de disques durs de nous « arnaquer » : Ceux-ci donnent la capacité des disques durs qu'ils vendent en kilo, méga ou giga octets : l’acheteur croit implicitement avoir une capacité exprimée en kibi, mébi ou gibi octets, et se retrouve avec un disque dur qui contient moins de mémoire que prévu. ===Lecture et écriture : mémoires ROM et RWM=== Pour simplifier grandement, on peut grossièrement classer les mémoires en deux types : les ''Read Only Memory'' et les ''Read Write Memory'', aussi appelées mémoires ROM et mémoires RWM. Pour les '''mémoires ROM''', on ne peut pas modifier leur contenu. On peut y récupérer une donnée ou une instruction : on dit qu'on y accède en lecture. Mais on ne peut pas modifier les données qu'elles contiennent. Quant aux '''mémoires RWM''', on peut y accéder en lecture (récupérer une donnée stockée en mémoire), mais aussi en écriture : on peut stocker une donnée dans la mémoire, ou modifier une donnée existante. Tout ordinateur contient au minimum une ROM et une RWM (souvent une mémoire RAM), les deux n'ont pas exactement le même rôle. Pour simplifier, la mémoire ROM mémorise le programme à exécuter, la mémoire RWM stocke des données. Il a existé des ordinateurs où la mémoire RWM était une mémoire magnétique, voire acoustique, mais ce n'est plus le cas de nos jours. Pour les ordinateurs modernes, la mémoire RWM est une mémoire électronique appelée la '''mémoire RAM'''. La mémoire RAM est utilisée pour stocker temporairement des données que le processeur doit manipuler. La mémoire RAM est donc une mémoire RWN qui a les caractéristiques suivantes : * La mémoire RAM est une mémoire électronique, fabriquée avec des semi-conducteurs. * La mémoire RAM s'efface complètement quand on coupe l'alimentation de l'ordinateur (on dit qu'elle est volatile). * La mémoire RAM possède un temps d'accès constant aux données (quelle que soit l'adresse). Et c'est des caractéristiques que d'autres mémoires RWM n'ont pas : * Une mémoire RWM peut être magnétique (mémoires à tore de ferrite), acoustique, basées sur des CRTs (tubes Wlliams). * Une mémoire RWM peut ne pas être volatile et donc conserver les données écrites. L'exemple type étant les mémoires à tore de ferrite. Précisons cependant qu'il existe des prototypes de mémoires FERAM, MRAM et autres, qui sont des RAM non-volatiles. * Une mémoire RWN n'a pas forcément un temps d'accès constant aux données, ce n'est pas garanti pour les mémoires RWM. Par exemple, les anciens tambours magnétiques des anciens ''mainframes'' étaient des mémoires RWM non-volatiles, utilisées comme stockage temporaire. Outre le programme à exécuter, la mémoire ROM peut mémoriser des constantes, des données qui ne changent pas. Elles ne sont jamais modifiées et gardent la même valeur quoi qu'il se passe lors de l'exécution du programme. En conséquence, elles ne sont jamais accédées en écriture durant l'exécution du programme, ce qui fait que leur place est dans une mémoire ROM. La mémoire RWM est alors destinée aux données temporaires, qui changent ou sont modifiées lors de l'exécution du programme, et qui sont donc manipulées aussi bien en lecture et en écriture. La mémoire RWM mémorise alors les variables du programme à exécuter, qui sont des données que le programme va manipuler. Pour les systèmes les plus simples, la mémoire RWM ne sert à rien de plus. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Pour donner un exemple de données stockées en ROM, on peut prendre l'exemple des anciennes consoles de jeu 8 et 16 bits. Les jeux vidéos sur ces consoles étaient placés dans des cartouches de jeu, précisément dans une mémoire ROM à l'intérieur de la cartouche de jeu. La ROM mémorisait non seulement le code du jeu, le programme du jeu vidéo, mais aussi les niveaux et les ''sprites'' et autres données graphiques. Une conséquence est que les consoles 8/16 bits n'avaient pas besoin de beaucoup de RAM, comparé aux ordinateurs de l'époque, vu qu'une grande partie des données utiles étaient dans une ROM directement accessible par le processeur. À l'opposé, les micro-ordinateurs devaient copier les données d'un jeu depuis une disquette dans la mémoire RAM, ce qui demandait d'avoir plus de RAM. Le passage au support CD sur les consoles 32 bits a eu la même conséquence. Le processeur ne pouvant pas lire directement le CD à sa guise, il fallait copier les données du CD en RAM. D'où l'apparition de temps de chargement assez longs, inexistants sur support cartouche. ===L'adressage mémoire=== Sur une mémoire RAM ou ROM, on ne peut lire ou écrire qu'une case mémoire, qu'un registre à la fois : une lecture ou écriture ne peut lire ou modifier qu'une seule case mémoire. Techniquement, le processeur doit préciser à quel case mémoire il veut accéder à chaque lecture/écriture. Pour cela, chaque case mémoire se voit attribuer un nombre binaire unique, l''''adresse''', qui va permettre de le sélectionner et de l'identifier celle-ci parmi toutes les autres. En fait, on peut comparer une adresse à un numéro de téléphone (ou à une adresse d'appartement) : chacun de vos correspondants a un numéro de téléphone et vous savez que pour appeler telle personne, vous devez composer tel numéro. Les adresses mémoires en sont l'équivalent pour les cases mémoire. [[File:Adressage mémoire.png|centre|vignette|upright=2|Exemple : on demande à la mémoire de sélectionner la case mémoire d'adresse 1002 et on récupère son contenu (ici, 17).]] L'adresse mémoire est générée par le processeur. Le processeur peut parfaitement calculer des adresses, en extraire du programme qu'il exécute, et bien d'autres choses. Nous détaillerons d'ailleurs les mécanismes pour dans les chapitres portant sur les modes d'adressage du processeur. Mais pour le moment, nous avons juste besoin de savoir que c'est le processeur qui envoie des adresses aux mémoires RAM et ROM. Les adresses générées par le processeur sont alors envoyées à la RAM ou la ROM via une connexion dédiée, un ensemble de fils qui connecte le processeur à la mémoire : le '''bus d'adresse mémoire'''. L'adresse sélectionne une case mémoire, le processeur peut alors récupérer la donnée dedans pour une lecture, écrire une donnée pour l'écriture. Pour cela, un second ensemble de fil connecte le processeur à la RAM/ROM, mais cette fois-ci pour échanger des données. Il s'agit du '''bus de données mémoire'''. Les deux sont souvent regroupés sous le terme de '''bus mémoire'''. Un ordinateur contient toujours une RAM et une ROM, ce qui demande aux bus mémoire de s'adapter à la présence de deux mémoires. Il y a alors deux solutions, illustrées dans les deux schémas ci-dessous. Avec la première, il y a un seul bus mémoire partagé entre la RAM et la ROM, comme illustré ci-dessous. Une autre solution utilise deux bus séparés : un pour la RAM et un autre pour la ROM. Nous verrons les différences pratiques entre les deux à la fin du chapitre. Pour le moment, nous allons partir du principe qu'il y a un bus pour la mémoire ROM, et un autre bus pour la RAM. [[File:CPT-System-Architecture-gapfill1-ANS.svg|centre|vignette|upright=2|Architecture avec une ROM et une RAM.]] [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] ===L'alignement mémoire : introduction=== Plus haut, nous avions dit qu'il y a une adresse par case mémoire, chaque case mémoire contenant un ou plusieurs octets. Mais les processeurs modernes partent du principe que la mémoire a un octet par adresse, pas plus. Et ce même si la mémoire reliée au processeur utilise des cases mémoires de 2, 3, 4 octets ou plus. D'ailleurs, la majorité des mémoires RAM actuelle a des cases mémoires de 64 bits, soit 8 octets par case mémoire. Les raisons à cela sont multiple, mais nous les verrons en détail dans le chapitre sur l'alignement mémoire. Toujours est-il qu'il faut distinguer les '''adresses mémoire''' et les '''adresses d'octet''' gérées par le processeur. Le processeur génère des adresses d'octet, qui permettent de sélectionner un octet bien précis. L'adresse d'octet permet de sélectionner un octet parmi tous les autres. Mais la mémoire ne comprend pas directement cette adresse d'octet. Heureusement, l'octet en question est dans une case mémoire bien précise, qui a elle-même une adresse mémoire bien précise. L'adresse d'octet est alors convertie en une adresse mémoire, qui sélectionne la case mémoire adéquate, celle qui contient l'octet voulu. La case mémoire entière est lue, puis le processeur ne récupère que les données adéquates. Pour cela, des circuits d'alignement mémoire se chargent de faire la conversion entre adresses du processeur et adresse mémoire. Nous verrons cela dans le détail dans le chapitre sur l'alignement mémoire. Il existe des mémoires qui n'utilisent pas d'adresses mémoire, mais passons : ce sera pour la suite du cours. ==Le processeur== Dans les ordinateurs, l'unité de traitement porte le nom de '''processeur''', ou encore de '''''Central Processing Unit''''', abrévié en CPU. Le rôle principal du processeur est de faire des calculs. La plupart des processeurs actuels supportent au minimum l'addition, la soustraction et la multiplication. Quelques processeurs ne gèrent pas la division, qui est une opération très gourmande en circuit, peu utilisée, très lente. Il arrive que des processeurs très peu performants ne gèrent pas la multiplication, mais c'est assez rare. Un processeur ne fait pas que des calculs. Tout processeur est conçu pour effectuer un nombre limité d'opérations bien précises, comme des calculs, des échanges de données avec la mémoire, etc. Ces opérations sont appelées des '''instructions'''. Les plus intuitives sont les '''instructions arithmétiques''', qui font des calculs, comme l'addition, la soustraction, la multiplication, la division. Mais il y a aussi des '''instructions d'accès mémoire''', qui échangent des données entre la mémoire RAM et le processeur. Les autres instructions ne sont pas très intuitives, aussi passons-les sous silence pour le moment, tout deviendra plus clair dans les chapitres sur le processeur. ===Le processeur exécute un programme, une suite d'instructions=== Tout processeur est conçu pour exécuter une suite d'instructions dans l'ordre demandé, cette suite s'appelant un '''programme'''. Ce que fait le processeur est défini par la suite d'instructions qu'il exécute, par le programme qu'on lui demande de faire. Les instructions sont exécutées dans un ordre bien précis, les unes après les autres. L'ordre en question est décidé par le programmeur. La totalité des logiciels présents sur un ordinateur sont des programmes comme les autres. Le programme à exécuter est stockée dans la mémoire de l'ordinateur. C'est ainsi que l'ordinateur est rendu programmable : modifier le contenu de la mémoire permet de changer le programme exécuté. Mine de rien, cette idée de stocker le programme en mémoire est ce qui a fait que l’informatique est ce qu'elle est aujourd’hui. C'est la définition même d'ordinateur : appareil programmable qui stocke son programme dans une mémoire modifiable. Une instruction est codée comme les données : sous la forme de suites de bits. Telle suite de bit indique qu'il faut faire une addition, telle autre demande de faire une soustraction, etc. Pour simplifier, nous allons supposer qu'il y a une instruction par adresse mémoire. Sur la grosse majorité des ordinateurs, les instructions sont placées les unes à la suite des autres dans l'ordre où elles doivent être exécutées. Un programme informatique n'est donc qu'une vulgaire suite d'instructions stockée quelque part dans la mémoire de l'ordinateur. {|class="wikitable" |+ Exemple de programme informatique |- ! Adresse ! Instruction |- ! 0 | Copier le contenu de l'adresse 0F05 dans le registre numéro 5 |- ! 1 | Charger le contenu de l'adresse 0555 dans le registre numéro 4 |- ! 2 | Additionner ces deux nombres |- ! 3 | Charger le contenu de l'adresse 0555 |- ! 4 | Faire en XOR avec le résultat antérieur |- ! ... | ... |- ! 5464 | Instruction d'arrêt |} Pour exécuter une suite d'instructions dans le bon ordre, le processeur détermine à chaque cycle quelle est la prochaine instruction à exécuter. Pour cela, le processeur mémorise l'adresse de l'instruction en cours dans un registre : le '''Program Counter'''. Je rappelle que des instructions consécutives sont dans des adresses consécutives. Pour passer à la prochaine instruction, il suffit donc d'incrémenter le ''program counter''. : Si une instruction prend plusieurs octets, plusieurs adresses, il suffit de l'incrémenter du nombre d'octets/adresses. D'autres processeurs font autrement : chaque instruction précise l'adresse de la suivante, directement dans la suite de bit représentant l'instruction en mémoire. Ces processeurs n'ont pas besoin de calculer une adresse qui leur est fournie sur un plateau d'argent. Sur des processeurs aussi bizarres, pas besoin de stocker les instructions en mémoire dans l'ordre dans lesquelles elles sont censées être exécutées. Mais ces processeurs sont très très rares et peuvent être considérés comme des exceptions à la règle. Nous venons de voir qu'un processeur contient un registre appelé le ''program counter''. Mais il n'est pas le seul. Pour pouvoir fonctionner, tout processeur doit mémoriser un certain nombre d’informations nécessaires à son fonctionnement, qui sont mémorisées dans des '''registres de contrôle'''. La plupart ont des noms assez barbares (registre d'état, ''program counter'') et nous ne pouvons pas en parler à ce moment du cours. Nous les verrons en temps voulu, mais il est important de préciser qu'ils existent. ===L'intérieur d'un processeur=== Fort de ce que nous savons, nous pouvons expliquer ce qu'il y a à l'intérieur d'un processeur. Le premier point est qu'un processeur fait des calculs, ce qui implique qu'il contient des circuits de calcul. Ils sont regroupés dans une ou plusieurs '''unités de calcul'''. Nous avons déjà vu comment fabriquer une unité de calcul simple, dans un chapitre dédié, et c'est la même qui est présente dans un processeur. Du moins dans les grandes lignes, les circuits des processeurs modernes étant particulièrement optimisés. Il en est de même pour les autres circuits de calcul comme ceux pour les multiplications/division/autres. Si le processeur fait des calculs, qu'en est-il des opérandes ? Et où sont mémorisés les résultats des opérations ? Pour cela, le processeur incorpore des '''registres généraux'''. Les registres généraux servent à mémoriser les opérandes et résultats des instructions. Ils mémorisent des données, contrairement aux registres de contrôle mentionnés plus haut. Le nombre de registres généraux dépend grandement du processeur. Les tout premiers processeurs se débrouillaient avec un seul registre, mais les processeurs actuels utilisent plusieurs registres, pour mémoriser plusieurs opérandes/résultats. Mais la présence de registres est source de pas mal de petites complications. Par exemple, il faut échanger les données entre la RAM et les registres, il faut gérer l'adressage des registres, etc. Il s'agit là de détails que nous expliquerons dans les chapitres sur le processeur. Le processeur contient enfin un circuit pour interpréter les instructions, appelé l''''unité de contrôle'''. Elle lit les instructions depuis la mémoire, interprète la suite de bit associée, et commande le reste du processeur pour qu'il exécute l'instruction. Ses fonctions sont assez variées, mais nous allons simplifier en disant qu'elle configure l'unité de calcul et les registres pour faire le bon calcul. Son rôle est d'analyser la suite de bit qui constitue l'instruction, et d'en déduire quelle opération effectuer. Elle gère aussi l'accès à la mémoire RAM, et notamment ce qui est envoyé sur son bus d'adresse. : Dans ce qui suit, on suppose que le ''program counter'' fait partie de l'unité de contrôle. Pour résumer, un processeur contient une unité de calcul, des registres et une interface avec la mémoire RAM. Le tout est interconnecté, afin de pouvoir échanger des données. L’ensemble forme le '''chemin de données''', nom qui trahit le fait que c'est là que les données se déplacent et sont traitées. Il faut aussi ajouter l'unité de contrôle pour commander le tout. Elle lit les instructions en mémoire, puis commande le chemin de données pour que l'instruction soit exécutée correctement. [[File:Microarchitecture d'un processeur.png|centre|vignette|upright=2|Microarchitecture d'un processeur]] Un processeur parait donc assez simple expliqué comme ça, mais il y a de nombreuses subtilités. L'une d'entre elle est liée aux registres, et notamment à la manière dont on les utilise. Pour expliquer ces subtilités, nous allons voir comment les premiers processeurs fonctionnaient, avant de passer aux processeurs un peu plus modernes. Les tout premiers processeurs n'utilisaient qu'un seul registre, ce qui fait que l'utilisation des registres était très simple. Le passage à plusieurs registres a complexifié le tout. ===D'où viennent les adresses ?=== Il est maintenant temps de répondre à une question qui s'était posée dans la section sur l'adressage : d'où viennent les adresses envoyées à la mémoire ? Pour ce qui est des adresses des instructions, on connait déjà la réponse : c'est le ''program counter'' qui gère tout. Mais pour les données, il y a deux possibilités, qui correspondent à deux types de données : les données statiques et les données dynamiques. Les '''données statiques''' sont les plus simples : elles existent durant toute la durée de vie du programme. Tant que celui-ci s'exécute, il aura besoin de ces données. En conséquence, il leur réserve une place en mémoire, qui est toujours la même. La donnée se situe donc à une adresse bien précise, qui ne change jamais. Attention cependant : les données peuvent être modifiées, changer de valeur. Le programme écrit dans les donnée statiques, c'est même assez fréquent. Ce sont ne sont pas forcément des données constantes ! Pour les données statiques, elles sont toujours placées à la même adresse mémoire. Pour le dire autrement, l'adresse mémoire est une constante, qui ne change pas. L'adresse est connue avant d’exécuter le programme, le programme a été codé pour utiliser cette adresse pour telle donnée, on a réservé une adresse pour la donnée voulue. Et même si vous quittez le programme et vous le relancez plusieurs jours après, l'adresse mémoire sera la même avant et après. Et cela permet d'utiliser l''''adressage direct'''. L'idée est que les instructions précisent donc l'adresse à lire ou écrire. Pour cela, l'adresse est intégrée dans l’instruction elle-même. Pour rappel, l'instruction est codée par une suite de bit en mémoire RAM/ROM, dont certains précisent l'opération à faire, les autres servant à autre chose. L'idée est que certains bits précisent l'adresse mémoire de la donnée à lire. Les instructions sont donc du genre : * ''LOAD 56'' - lit l'adresse numéro 56 et copie son contenu dans un registre; * ''STORE R5 , adress 99'', copie le registre R5 dans l'adresse 99 ; * ''ADD R5 , adress 209'' : additionne le registre R5 avec le contenu de l'adresse 209. S'il existe des données statiques, c'est signe qu'il existe des '''données dynamiques'''. Ces dernières sont des données qui sont créées ou détruites selon les besoins. Pour comprendre d'où viennent ces données dynamiques, prenons le cas d'une personne qui écrit du texte sur un ordinateur. Le texte qu'il écrit est mémorisé dans la RAM de l’ordinateur, puis est sauvegardé sur le disque dur quand il sauvegarde son document. Au fur et à mesure qu'il écrit du texte, la RAM utilisée par ce texte augmente. Donc, ce texte est une donnée dynamique, dont la taille varie dans le temps. Pour gérer des données dynamiques, la plupart des systèmes d'exploitation incorporent des fonctionnalités d''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer les données qu'ils souhaitent. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec l'allocation mémoire, les données n'ont pas de place fixe en mémoire. Leur adresse mémoire peut varier d'une exécution du programme à l'autre. Pire que ça : les données peuvent être déplacées dans la mémoire RAM, si besoin. En clair : l'adresse est déterminée lors de l'exécution du programme. L'adresse est alors soit calculée, soit lue depuis la mémoire RAM, soit déterminée autrement. Toujours est-il qu'elle se retrouve dans un registre général. Pour gérer ces adresse variables, les processeurs utilisent l''''adressage indirect'''. L'adressage indirect permet d'utiliser une adresse qui est dans un registre de données. L'adresse en question peut être envoyée à la mémoire RAM sans problème, le processeur peut automatiquement connecter le registre adéquat sur le bus d'adresse. Au tout début de l'informatique, les processeurs ne supportaient que l'adressage direct, pas plus. L'adressage indirect n'était tout simplement pas possible. Avec l'adressage direct, l'adresse à lire est extraite directement des instructions, par l'unité de contrôle. Le bus d'adresse de la RAM est alors relié directement à l'unité de contrôle, le bus de données est relié aux registres. [[File:Architecture Harvard avec adressage direct uniquement.png|centre|vignette|upright=2|Architecture Harvard avec adressage direct uniquement]] Mais dès les années 70, l'adressage indirect est apparu, rendant la programmation bien plus simple. Mais cela a demandé quelques adaptation au niveau du processeur. Avec l'adressage indirect, le bus d'adresse est connecté aux registres. Il a donc fallu rajouter un multiplexeur pour que le processeur décide de relier le bus d'adresse soit aux registres, soit à l'unité de contrôle. ===Un ordinateur peut avoir plusieurs processeurs=== La plupart des ordinateurs n'ont qu'un seul processeur, ce qui fait qu'on désigne avec le terme d''''ordinateurs mono-processeur'''. Mais il a existé (et existe encore) des '''ordinateurs multi-processeurs''', avec plusieurs processeurs sur la même carte mère. L'idée était de gagner en performance : deux processeurs permettent de faire deux fois plus de calcul qu'un seul, quatre permettent d'en faire quatre fois plus, etc. C'est très courant sur les supercalculateurs, des ordinateurs très puissants conçus pour du calcul industriel ou scientifique, mais aussi sur les serveurs ! Dans le cas le plus courant, ils utilisent plusieurs processeurs identiques : on utilise deux processeurs Core i3 de même modèle, ou quatre Pentium 3, etc. Pour utiliser plusieurs processeurs, les programmes doivent être adaptés. Pour cela, il y a plusieurs possibilités : * Une première possibilité, assez intuitive, est d’exécuter des programmes différents sur des processeurs différents. Par exemple, on exécute le navigateur web sur un processeur, le lecteur vidéo sur un autre, etc. * La seconde option est de créer des programmes spéciaux, qui utilisent plusieurs processeurs. Ils répartissent les calculs à faire sur les différents processeurs. Un exemple est la lecture d'une vidéo sur le web : un processeur peut télécharger la vidéo pendant le visionnage et bufferiser celle-ci, un autre processeur peut décoder la vidéo, un autre décoder l'audio. De tels programmes restent des suites d'instructions, mais ils sont plus complexes que les programmes normaux, aussi nous les passons sous silence. * La troisième option est d’exécuter le même programme sur les différents processeurs, mais chaque processeur traite son propre ensemble de données. Par exemple, pour un programme de rendu 3D, quatre processeurs peuvent s'occuper chacun d'une portion de l'image. [[File:Architecture de Von Neumann Princeton multi processeurs.svg|centre|vignette|upright=2|Architecture de Von Neumann Princeton multi processeurs]] De nos jours, les ordinateurs grand public les plus utilisés sont dans un cas intermédiaire, ils ne sont ni mono-, ni multi-processeur. Ils n'ont qu'un seul processeur, dans le sens où si on ouvre l'ordinateur et qu'on regarde la carte mère, il n'y a qu'un seul processeur. Mais ce processeur est en réalité assez similaire à un regroupement de plusieurs processeurs dans le même boitier. Il s'agit de '''processeurs multicœurs''', qui contiennent plusieurs cœurs, chaque cœur pouvant exécuter un programme tout seul. La différence entre cœur et processeur est assez difficile à saisir, mais pour simplifier : un cœur est l'ensemble des circuits nécessaires pour exécuter un programme. Chaque cœur dispose de toute la machinerie électronique pour exécuter un programme, à savoir des circuits aux noms barbares comme : un séquenceur d'instruction, des registres, une unité de calcul. Par contre, certains circuits d'un processeur ne sont présents qu'en un seul exemplaire dans un processeur multicœur, comme les circuits de communication avec la mémoire ou les circuits d’interfaçage avec la carte mère. Suivant le nombre de cœurs présents dans notre processeur, celui-ci sera appelé un processeur double-cœur (deux cœurs), quadruple-cœur (4 cœurs), octuple-cœur (8 cœurs), etc. Un processeur double-cœur est équivalent à avoir deux processeurs dans l'ordinateur, un processeur quadruple-cœur est équivalent à avoir quatre processeurs dans l'ordinateur, etc. Ces processeurs sont devenus la norme dans les ordinateurs grand public et les logiciels et systèmes d'exploitation se sont adaptés. ===Les coprocesseurs=== Quelques ordinateurs assez anciens disposaient de '''coprocesseurs''', des processeurs qui complémentaient un processeur principal. Les ordinateurs de ce type avaient un processeur principal, le '''CPU''', qui était secondé par un ou plusieurs coprocesseurs. Sauf exception, le CPU et le coprocesseur exécutent des programmes différents, ils travaillent en parallèle. Les coprocesseurs les plus connus sont les '''coprocesseurs pour le rendu 2D/3D'''. Ils ont eu leur heure de gloire sur les anciennes consoles de jeux vidéo, comme Super Nintendo, la Playstation et autres consoles de cette génération ou antérieure. Ils s'occupaient respectivement de calculer les graphismes des jeux vidéos. De nos jours, ils ont été remplacés par des cartes graphiques, ou des ''Graphic Processing Units'', qui ne sont pas considérées comme des coprocesseurs. Les '''coprocesseurs sonores''' sont une sorte d'ancêtre des cartes son, utilisés sur les anciennes consoles de jeux vidéo, comme La Nintendo 64, la Playstation et autres consoles antérieures. Ils s'occupaient respectivement de calculer tout ce qui a trait au son. Pour donner un exemple, on peut citer la console Neo-géo, qui disposait de deux processeurs travaillant en parallèle : un processeur principal, et un coprocesseur sonore. Le processeur principal était un Motorola 68000, alors que le coprocesseur sonore était un processeur Z80. L'accès aux périphériques est quelque chose sur lequel nous passerons plusieurs chapitres dans ce cours. Mais sachez que l'accès aux périphériques peut demander pas mal de puissance de calculs. Le CPU principal peut faire ce genre de calculs par lui-même, mais il n'est pas rare qu'un '''coprocesseur d'IO''' soit dédié à l'accès aux périphériques. Un exemple assez récent est celui de la console de jeu Nintendo 3DS. Elle disposait d'un processeur principal de type ARM9, d'un coprocesseur pour les divisions qu'on abordera plus bas, et d'un second processeur ARM7. L'ARM 7 était utilisé comme coprocesseur d'I/O, ainsi que pour l'émulation de la console GBA. [[File:Asmp 2.gif|centre|vignette|upright=2|Co-processeur pour l'accès aux entrées-sorties.]] Les '''coprocesseurs arithmétiques''' sont un peu à part des autres. Ils sont spécialisés dans les calculs en virgule flottante. Ils étaient utilisés à une époque où les CPU ne géraient que des calculs entiers (en binaire ou en BCD). Un exemple est le coprocesseur flottant x87, complémentaire des premiers processeurs Intel x86. Il y a eu la même chose sur les processeurs Motorola 68000, avec deux coprocesseurs flottants appelés les Motorola 68881 et les Motorola 68882. Un exemple récent de coprocesseur est celui utilisé sur la console de jeu Nintendo DS. La console utilisait deux processeurs, un ARM9 et un ARM7, qui ne pouvaient pas faire de division entière. Il s'agit pourtant d'opérations importantes dans le cas du rendu 3D, ce qui fait que les concepteurs de la console ont rajouté un coprocesseur spécialisé dans les divisions entières et les racines carrées. Le coprocesseur était adressable directement par le processeur, comme peuvent l'être la RAM ou les périphériques. ==Les entrées-sorties== Tous les circuits vus précédemment traitent des données codées en binaire. Ceci dit, les données ne sortent pas de n'importe où : l'ordinateur contient des composants électroniques qui traduisent des informations venant de l’extérieur en nombres. Ces composants sont ce qu'on appelle des '''entrées'''. Par exemple, le clavier est une entrée : l'électronique du clavier attribue un nombre entier (''scancode'') à une touche, nombre qui sera communiqué à l’ordinateur lors de l'appui d'une touche. Pareil pour la souris : quand vous bougez la souris, celle-ci envoie des informations sur la position ou le mouvement du curseur, informations qui sont codées sous la forme de nombres. La carte son évoquée il y a quelques chapitres est bien sûr une entrée : elle est capable d'enregistrer un son, et de le restituer sous la forme de nombres. S’il y a des entrées, on trouve aussi des '''sorties''', des composants électroniques qui transforment des nombres présents dans l'ordinateur en quelque chose d'utile. Ces sorties effectuent la traduction inverse de celle faite par les entrées : si les entrées convertissent une information en nombre, les sorties font l'inverse : là où les entrées encodent, les sorties décodent. Par exemple, un écran LCD est un circuit de sortie : il reçoit des informations, et les transforme en image affichée à l'écran. Même chose pour une imprimante : elle reçoit des documents texte encodés sous forme de nombres, et permet de les imprimer sur du papier. Et la carte son est aussi une sortie, vu qu'elle transforme les sons d'un fichier audio en tensions destinées à un haut-parleur : c'est à la fois une entrée, et une sortie. Les '''entrées-sorties''' incluent toutes les entrées et sorties, et même certains composants qui sont les deux à la fois. Il s'agit d'un terme générique, qui regroupe des composants forts différents. Dans ce qui va suivre, nous allons parfois parler de périphériques au lieu d'entrées-sorties, mais les deux termes ne sont pas équivalents. Dans le détail, les entrées-sorties regroupent : * Les '''périphériques''' sont les composants connectés sur l'unité centrale. Exemple : les claviers, souris, webcam, imprimantes, écrans, clés USB, disques durs externes, la Box internet, etc. * Les '''cartes d'extension''', qui se connectent sur la carte mère via un connecteur, comme les cartes son ou les cartes graphiques. * D'autres composants sont soudés à la carte mère mais sont techniquement des entrées-sorties : les cartes sons soudées sur les cartes mères actuelles, par exemple. ===L'interface avec le reste de l'ordinateur=== Les entrées-sorties sont très diverses, fonctionnent très différemment les unes des autres. Mais du point de vue du reste de l'ordinateur, les choses sont relativement standardisées. Du point de vue du processeur, les entrées-sorties sont juste des paquets de registres ! Tous les périphériques, toutes les entrées-sorties contiennent des '''registres d’interfaçage''', qui permettent de faire l'intermédiaire entre l'entrée/sortie et le reste de l'ordinateur. L'entrée/sortie est conçu pour réagir automatiquement quand on écrit dans ces registres. [[File:Registres d'interfaçage.png|centre|vignette|upright=2|Registres d'interfaçage.]] Les registres d’interfaçage sont assez variés. Les plus évidents sont les '''registres de données''', qui permettent l'échange de données entre le processeur et les périphériques. Pour échanger des données avec l'entrée/sortie, le processeur a juste à lire ou écrire dans ces registres de données. On trouve généralement un registre de lecture et un registre d'écriture, mais il se peut que les deux soient fusionnés en un seul registre d’interfaçage de données. Si le processeur veut envoyer une donnée à une entrée/sortie, il a juste à écrire dans ces registres. Inversement, s'il veut lire une donnée, il a juste à lire le registre adéquat. Mais le processeur ne fait pas que transmettre des données à l'entrée/sortie. Le processeur lui envoie aussi des « commandes », des valeurs numériques auxquelles l'entrée/sortie répond en effectuant un ensemble d'actions préprogrammées. En clair, ce sont l'équivalent des instructions du processeur, mais pour l'entrée/sortie. Par exemple, les commandes envoyées à une carte graphique peuvent être : affiche l'image présente à cette adresse mémoire, calcule le rendu 3D à partir des données présentes dans ta mémoire, etc. Pour recevoir les commandes, l'entrée/sortie contient des ''registres de commande'' qui mémorisent les commandes envoyées par le processeur. Quand le processeur veut envoyer une commande à l'entrée/sortie, il écrit la commande en question dans ce ou ces registres. Enfin, beaucoup d'entrée/sortie ont un ''registre d'état'', lisible par le processeur, qui contient des informations sur l'état de l'entrée/sortie. Ils servent notamment à indiquer au processeur que l'entrée/sortie est disponible, qu'il est en train d’exécuter une commande, qu'il est occupé, qu'il y a un problème, qu'il y a une erreur de configuration, etc. ===Les adresses des registres d’interfaçage=== Les registres des périphériques sont identifiés par des adresses mémoires. Et les adresses sont conçues de façon à ce que les adresses des différentes entrées/sorties ne se marchent pas sur les pieds. Chaque entrée/sortie, chaque registre, chaque contrôleur a sa propre adresse. D'ordinaire, certains bits de l'adresse indiquent quel est le destinataire. Certains indiquent quel est l'entrée/sortie voulue, les restants indiquant le registre de destination. Il existe deux organisations possibles pour les adresses des registres d’interfaçages. La première possibilité est de séparer les adresses pour les registres d’interfaçage et les adresses pour la mémoire. Le processeur doit avoir des instructions séparées pour gérer les périphériques et adresser la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. [[File:Espaces d'adressages séparés entre mémoire et périphérique.png|centre|vignette|upright=2.5|Espaces d'adressages séparés entre mémoire et périphérique]] L'autre méthode mélange les adresses mémoire et des entrées-sorties. Si on prend par exemple un processeur de 16 bits, où les adresses font 16 bits, alors les 65536 adresses possibles seront découpées en deux portions : une partie ira adresser la RAM/ROM, l'autre les périphériques. On parle alors d''''entrées-sorties mappées en mémoire'''. L'avantage est que le processeur n'a pas besoin d'avoir des instructions séparées pour les deux. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] Pour résumer, communiquer avec une entrée/sortie est similaire à ce qu'on a avec les mémoires. Il suffit de lire ou écrire dans des registres d’interfaçage, qui ont chacun une adresse mémoire. Le problème est que le système d'exploitation ne connaît pas toujours le fonctionnement d'une entrée/sortie : il faut installer un programme qui va s'exécuter quand on souhaite communiquer avec l'entrée/sortie, et qui s'occupera de tout ce qui est nécessaire pour le transfert des données, l'adressage du périphérique, etc. Ce petit programme est appelé un driver ou '''pilote de périphérique'''. La « programmation » périphérique est très simple : il suffit de savoir quoi mettre dans les registres, et c'est le pilote qui s'en charge. ==Les architectures Harvard et Von Neumann== Après avoir vu le processeur, les mémoires et les entrées-sorties, voyons voir comment le tout est interconnecté. Tous les ordinateurs ne sont pas organisés de la même manière, pour ce qui est de leurs bus. Mais pour comprendre pourquoi, nous devons regarder qui communique avec qui, dans un ordinateur. Pour rappel, les données sont placées en mémoire RAM, alors que les instructions sont placées en mémoire ROM. Le processeur lit des instructions dans la mémoire ROM, il lit et écrit dans la mémoire RAM, et accède aux registres d’interfaçage des entrées-sorties. Il y a donc besoins de trois interconnexions : CPU-ROM, CPU-RAM et CPU-IO. [[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre]] Il parait intéressant d'utiliser trois interconnexions, au minimum CPU-ROM, CPU-RAM et CPU-IO. Néanmoins, faire ainsi a de nombreux désavantages. Déjà, il faut pouvoir brancher tout ça sur le processeur. Et celui-ci n'a pas forcément assez de broches pour. Aussi, il est parfois préférable de mutualiser des bus, à savoir de connecter plusieurs composants sur un même bus. Par exemple, on peut mutualiser le bus pour la mémoire RAM et pour la mémoire ROM. Il faut dire que les deux bus sont des bus mémoire, avec un bus d'adresse, un bus de données, et surtout : des bus de commande similaires. Les mutualiser est alors très simple, et permet d'économiser pas mal de broches. [[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre et une architecture Harvard]] Cette mutualisation nous amène naturellement à parler de la distinction entre les architectures Harvard d'un côté et les architectures Von Neumann de l'autre. Elle est très liée au fait d'utiliser soit un bus mémoire unique, soit des bus séparés pour la ROM et la RAM. Voyons cela en détail. ===Les architectures Harvard et Von Neumann : des bus séparés ou unifiés=== Avec l''''architecture Harvard''', la mémoire ROM et la mémoire RAM sont reliées au processeur par deux bus séparés. Il y a un bus RAM pour la mémoire RAM, un bus ROM pour la mémoire ROM. L'avantage de cette architecture est qu'elle permet de charger une instruction et une donnée simultanément : une instruction chargée sur le bus relié à la mémoire programme, et une donnée chargée sur le bus relié à la mémoire de données. Et cela simplifie fortement la conception du processeur. [[File:Harvard Architecture.png|centre|vignette|upright=2|Architecture Harvard, avec une ROM et une RAM séparées.]] Avec l''''architecture Von Neumann''', mémoire ROM et mémoire RAM sont reliées au processeur par un bus unique. Le bus unique qui relie processeur, RAM et ROM, s'appelle le '''bus mémoire'''. Un défaut de ces architecture est qu'elles ne peuvent pas charger une instruction et une donnée en même temps. Et cela pose quelques problèmes pour la conception du processeur. Par contre, nous verrons dans ce qui suit qu'utiliser un bus mémoire partagé est bien plus flexible et permet des choses que les architectures Harvard ne peuvent pas faire. [[File:Architecture Von Neumann, avec deux bus séparés.png|centre|vignette|upright=2|Architecture Von Neumann, avec deux bus séparés.]] ===Les architectures Harvard et Von Neumann : des espaces d'adressage séparés ou unifiés=== La distinction précédente se base sur les connexions entre RAM, ROM et processeur. Mais il existe une autre distinction, très liée, qui est souvent utilisée comme seconde définition des architectures Harvard/Von Neumann. Elle est liée aux adresses mémoire que le processeur peut gérer. Prenons un processeur 16 bits, par exemple, qui gère naturellement des adresses de 16 bits. Il peut gérer 2^16 adresses, soit 64 kibioctets de mémoire. L'ensemble de ces adresses est appelé un '''espace d'adressage'''. Mais comment cet espace d'adressage est utilisé pour adresser une RAM et une ROM ? Sur les architectures Harvard, le processeur voit deux mémoires séparées avec leur lot d'adresses distinctes. Une même adresse peut donc correspondre soit à la mémoire ROM, soit à la mémoire RAM, suivant le bus utilisé. L'espace d'adressage est donc doublé, dupliqué, avec un pour la ROM, un autre pour la RAM. Rien d'étonnant à cela : il y a deux bus d'adresses, chacun correspondant à un espace d'adressage. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Avec l'architecture Von Neumann, la RAM et la ROM doivent se partager les adresses mémoires disponibles. Il n'y a qu'un seul espace d'adressage qui est coupé en deux, avec une partie pour la ROM et une autre pour la RAM. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM occupe une partie des adresses, la mémoire RAM utilise le reste. La répartition des adresses est réalisée par les circuits de décodage d'adresse mentionnés plus haut. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] Les '''architectures Harvard modifiées''' sont des intermédiaires entre architectures Harvard et architectures Von Neumann, bien qu'elles penchent bien plus du côté des architectures Harvard. Précisons que la terminologie n'est pas claire, beaucoup d'auteurs mettent des définitions différentes derrière ces deux termes. Mais dans ce cours, nous utiliserons une définition très stricte de ce qu'est une architecture Harvard modifiée. Une architecture Harvard modifiée est une architecture Harvard, où le processeur peut lire des données constantes depuis la mémoire ROM. Nous avions vu plus haut que les mémoires ROM peuvent mémoriser, en plus d'un programme exécutable, des données constantes, qui ne varient pas. Les architectures Harvard pures ne permettent pas de lire des données de ce genre depuis la mémoire ROM, alors que les architectures Harvard modifiées le permettent. Une architecture Harvard modifiée dispose d'une instruction pour lire les données en mémoire RWM, et d'une instruction pour lire des données en mémoire ROM. Il y a donc deux versions de l'instruction LOAD, qui copient la donnée dans un registre général, mais dont la source de la donnée est différente. Une autre possibilité, plus rare, est que une instruction de copie, qui copie une constante depuis la mémoire ROM vers la mémoire RAM. Le cas le plus commun est l'utilisation de deux instructions LOAD séparées. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=2.5|Espaces d'adressage sur une archi harvard modifiée]] Ceci étant dit, revenons à la distinction entre architecture Harvard et Von Neumann. Il faut noter que la RAM et la ROM n'ont pas forcément la même taille. Et ce que ce soit sur une architecture Harvard que sur une architecture Von Neumann, mais c'est plus facile à expliquer sur une architecture Harvard. On peut par exemple imaginer une architecture Harvard qui utilise des adresses de 16 bits pour la ROM, et seulement 8 bits pour la RAM. Le résultat est qu'il peut adresser 64 kibioctets de ROM, mais seulement 256 octets de RAM. Les deux bus d'adresse sont alors de taille différente, l'un faisant 8 bits, l'autre 16. Quelques processeurs 8 bits étaient dans ce cas, comme on le verra dans le chapitre sur les CPU 8bits. Mais d'autres processeurs utilisent des valeurs différentes, avec par exemple des adresses de 16 bits pour la RAM, mais de 20 bits pour la ROM, ou inversement. Sur une architecture Von Neumann, tout dépend de comment les adresses sont réparties. La solution la plus simple découpe l'espace d'adressage en deux parties égales, avec la RAM qui est dans la moitié basse (qui part de l'adresse 0 jusqu'à l'adresse au milieu), alors que la ROM est dans la moitié haute (entre l'adresse du milieu et l'adresse maximale). Mais ce n'est pas la seule possibilité, la limite entre RAM et ROM peut être mise n'importe où. Prenons par exemple un processeur 32 bits, capable de gérer 4 milliards d'adresse. Il est parfaitement possible de réserver 128 mébioctets de poids fort à la mémoire ROM, et de laisser le reste à la mémoire RAM. ===Le décodage d'adresse sur les architectures Von Neumann=== Pour résumer, les architectures Harvard et Von Neumann se distinguent sur deux points : * L'accès à la RAM et à la ROM se font par des bus séparés sur l'architecture Harvard, sur le même bus avec l'architecture Von Neumann. * Les adresses pour la mémoire ROM et la mémoire RAM sont séparées sur les architectures Harvard, partagées sur l’architecture Von Neumann. Les architectures Von Neumann utilisent donc un seul bus pour connecter la RAM et la ROM au processeur. Mais cela ne parait pas intuitif : comment deux composants peuvent se connecter aux mêmes fils ? Parce que c'est ce qu'implique le fait de partager un bus. Si je prends une mémoire RAM et une mémoire ROM, toutes deux de 8 bits, elles seront connectées à un bus mémoire de 8 bits. Intuitivement, on se dit qu'il y aura des conflits, du genre : la RAM et la ROM vont accéder au bus en même temps, comment savoir si une adresse est destinée à la RAM ou la ROM, etc ? Tous ces problèmes sont résolus avec une solution très simple : à chaque instant, seule une mémoire est connectée au bus. L'idée est que les mémoires sont connectées ou déconnectées du bus selon les besoins. Si le processeur veut envoyer lire une donnée en mémoire RAM, il déconnecte la mémoire ROM du bus. Et inversement, s'il veut lire une instruction, il déconnecte la RAM et connecte la ROM. Pour cela, les mémoires RAM et ROM possèdent une entrée ''Chip Select'' ou ''Output Enable'', qui agit comme une sorte de bouton ON/OFF. Lorsqu'on met un 1 sur cette entrée, la mémoire se connectera au bus. Ses entrées et sorties fonctionneront normalement, elle pourra recevoir des adresses, envoyer ou recevoir des données, tout sera normal. Par contre, si on met un 0 sur cette entrée, la mémoire se "désactive", ses entrée-sorties ne répondent plus aux sollicitations extérieures. Pire que ça : elles sont électriquement déconnectées. Au total, tout cela demande de gérer deux bit ''Chip Select''/''Output Enable'' : un pour la RAM, un pour la ROM. Et ces deux bits sont configurés pour chaque accès mémoire, pour chaque lecture ou écriture. Pour cela, un circuit de '''décodage d'adresse''' prend en entrée l'adresse mémoire à lire/écrire, et active/désactive les mémoires RAM/ROM selon les besoins. Il prend l'adresse et configure les bits ''Chip Select''/''Output Enable''. [[File:Décodage d'adresse sur une architecture Von Neumann.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann.]] L'implémentation la plus simple réserve la moitié des adresses pour la RAM, l'autre moitié pour la ROM. Typiquement, la ROM prend la moitié basse, la RAM la moitié haute. Dans ce cas, activer/désactiver la RAM et la ROM se fait avec seulement le bit de poids fort de l'adresse. Si le bit de poids fort est à 1, alors on accède à la RAM et la ROM doit être désactivée. Mais si ce bit est à 0, alors on accède à la moitié basse et il faut désactiver la RAM. Une remarque intéressante : le fait de séparer la mémoire en deux parts égales permet de simuler une architecture Harvard à partir d'une architecture Von Neumann. Par exemple, le tout premier processeur d'Intel, le 4004, était l'un de ceux là. La RAM et la ROM sont reliés au même bus, et il y a donc un unique espace d'adressage, qui est séparé en deux parties égales. Le truc est que le processeur traite les deux parties égales comme deux espaces d'adressage séparés. Le processeur se débrouille pour cacher le fait qu'il y a un espace d'adressage unique coupé en deux, ce qui fait que les programmeurs voient bien deux espaces d'adressages distincts. [[File:Décodage d'adresse sur une architecture Von Neumann basique.png|centre|vignette|upright=2|Décodage d'adresse sur une architecture Von Neumann basique.]] Pour résumer, quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre et se connecter au bus. Le décodage d'adresse garantit que seule la mémoire adéquate réponde à un accès mémoire. Le décodage d'adresse est réalisé par la carte mère, par un composant dédié. Le mécanisme peut être utilisé pour combiner plusieurs RAM en une seule, idem avec les ROM. Pour comprendre l'idée, je vais prendre l'exemple de l'IBM PC, un des tout premier PC existant. Nous étudierons ce PC dans une section dédiée, à la fin du chapitre, aussi je vais passer rapidement dessus. Tout ce que je vais faire est vous présenter la carte mère du PC, et vous demander de faire est de compter les mémoires ROM et mémoires RAM sur la carte mère : [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] Si vous remarquerez qu'il y a 5 mémoires ROM et 8 à 32 mémoires RAM. Le fait est que le processeur voit les différentes mémoires ROM comme une seule mémoire ROM. Idem avec les mémoires RAM : elle font chacune 2 kibioctets, et l'ensemble est vu par le processeur comme une seule RAM de 16 à 64 kibioctets. Et cela grâce aux circuits de décodage d'adresse, qui sont situés en haut à droite de la carte mère. Pour comprendre l'idée, prenons l'exemple d'un processeur 16 bits, capable de gérer 64 kibioctets de mémoire. L'espace d'adressage est découpé en quatre portions, de 16 kibioctets chacune. Une portion est réservée à une ROM de 16 kibioctet, les autres sont chacune réservée à une RAM de 16 kibioctet. Le décodage d'adresse sélectionne alors la mémoire adéquate en utilisant les deux bits de poids fort de l'adresse. * S'ils valent 00, alors c'est la mémoire ROM qui est activée, connectée au bus. * S'ils valent 01, alors c'est la première mémoire RAM qui est connectée au bus. * S'ils valent 10, alors c'est la seconde mémoire RAM qui est connectée au bus. * S'ils valent 11, alors c'est la troisième mémoire RAM qui est connectée au bus. [[File:Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM.png|centre|vignette|upright=3|Décodage d'adresse sur une architecture Von Neumann, utilisant plusieurs RAM et une ROM]] ===L'impact sur la conception du processeur=== Plus haut, j'ai parlé d'un des avantages des architectures Harvard : elles peuvent lire une instruction en même temps qu'elles accèdent à une donnée. La donnée est lue/écrite en RAM, alors que l'instruction est lue en ROM. Et cela permet de simplifier l'intérieur du processeur. Pas de beaucoup, mais c'est déjà ça de pris. Voyons maintenant comment cela impacte l'intérieur du processeur. Tout ce dont vous avez à vous rappeler est la séparation entre chemin de données et unité de contrôle, et que les registres généraux sont dans le premier, le ''program counter'' dans la seconde. Avec une architecture Harvard, les instructions et les données passent par des bus différent : bus ROM pour les instructions, bus RAM pour les données. L'intuition nous dit que le bus pour la mémoire ROM est connecté à l'unité de contrôle, alors que le bus pour la RAM est connecté au chemin de données. Et dans les grandes lignes, c'est vrai. La logique est imparable pour ce qui est des bus de données. Mais il y a une petite subtilité pour les bus d'adresse. Pour comprendre comment le processeur exploite ces deux bus, voyons ce qui transite dessus. Pour la mémoire ROM, elle reçoit l'adresse de l'instruction à lire, elle renvoie l'instruction adéquate. Pour cela, le ''program counter'' est envoyé sur le bus d'adresse, l'instruction sur le bus de données. Pour la mémoire RAM, elle échange des données avec les registres généraux, les registres pour les données. Les adresses utilisées pour la RAM viennent elles soit du chemin de données, soit de l'unité de contrôle, tout dépend du mode d'adressage. Mais le ''program counter'' n'est pas impliqué. [[File:Architecture Harvard - échanges de données.png|centre|vignette|upright=2|Architecture Harvard - échanges de données]] Les architectures Harvard modifiées doivent cependant rajouter une connexion entre le bus ROM et les registres généraux. C'est nécessaire pour charger une donnée constante depuis la mémoire ROM. Rappelons que la donnée constante est copiée dans un registre général, donc dans le chemin de données. [[File:Architecture Harvard modifiée - implémentation du processeur.png|centre|vignette|upright=2|Architecture Harvard modifiée - implémentation du processeur]] Avec les architectures Von Neumann, il y a un seul bus qui est relié à la fois au chemin de données et à l'unité de contrôle. Si le processeur lit une instruction, le bus doit être relié à l'unité de contrôle. Par contre, s'il accède à une donnée, il doit être relié au chemin de données (le bus d'adresse peut éventuellement être connecté au séquenceur, si celui-ci fournit l'adresse à lire). Il faut donc utiliser un paquet de multiplexeurs et de démultiplexeurs pour faire la connexion au bon endroit. [[File:Architecture Von Neumann - implémentation du processeur.png|centre|vignette|upright=2|Architecture Von Neumann - implémentation du processeur]] Une instruction se fait en deux temps : on charge l'instruction depuis la mémoire ROM, puis on l'exécute. Avec une architecture Harvard, tout cela se fait en un seul cycle d'horloge, vu que charger la ROM et accéder aux données peut se faire en même temps. Pas avec les architectures Von Neumann, qui doivent libérer le bus mémoire après avoir chargé une instruction. Elles n'ont pas le choix : elles chargent l'instruction lors d'un premier cycle d'horloge, puis l'exécutent lors du second. Pour cela, ils incorporent un registre appelé le '''registre d'instruction''', qui mémorise l'instruction chargée. L'instruction est copiée dans ce registre lors du premier cycle, puis est utilisée lors du second cycle. Le registre permet de ne pas oublier l’instruction entre les deux cycles. Le registre d'instruction est obligatoire sur les architectures Von Neumann. En comparaison, il est facultatif sur les architectures Harvard. Elles peuvent en avoir un, pour des raisons techniques, mais ce n'est pas obligatoire. [[File:Registre d'instruction.png|centre|vignette|upright=2|Registre d'instruction.]] ===Les architectures Von Neumann sont plus flexibles=== Sur les architectures Harvard, le processeur sait faire la distinction entre programme et données. Les données sont stockées dans la mémoire RAM, le programme est stocké dans la mémoire ROM. Les deux sont séparés, accédés par le processeur sur des bus séparés, et c'est ce qui permet de faire la différence entre les deux. Il est impossible que le processeur exécute des données ou modifie le programme. Du moins, tant que la mémoire qui stocke le programme est bien une ROM. Par contre, sur les architectures Von Neumann, il est impossible de distinguer programme et données, sauf en ajoutant des techniques de protection mémoire avancées. La raison est qu'il est impossible de faire la différence entre donnée et instruction, vu que rien ne ressemble plus à une suite de bits qu'une autre suite de bits. Et c'est à l'origine d'un des avantages majeur de l'architecture Von Neumann : il est possible que des programmes soient copiés dans la mémoire RWM et exécutés dans celle-ci. Un cas d'utilisation familier est celui de votre ordinateur personnel. Le système d'exploitation et les autres logiciels sont copiés en mémoire RAM à chaque fois que vous les lancez. Mais cet exemple implique un disque dur, ce qui rend les choses plus compliquées que prévu. Un autre exemple serait la compilation de code à la volée, mais il ne sera pas très parlant. Un exemple plus adapté serait celui où la ROM mémorise un programme compressée dans la mémoire ROM, qui est décompressé pour être exécuté en mémoire RAM. Le programme de décompression est stocké en mémoire ROM et est exécuté au lancement de l’ordinateur. Cette méthode permet d'utiliser une mémoire ROM très petite et très lente, tout en ayant un programme rapide (si la mémoire RWM est rapide). Il est aussi possible de créer des programmes qui modifient leurs propres instructions : cela s'appelle du '''code auto-modifiant'''. Ce genre de choses servait autrefois sur des ordinateurs rudimentaires, au tout début de l'informatique. À l'époque, les adresses à lire/écrire devaient être écrites en dur dans le programme, dans les instructions exécutées. Pour gérer certaines fonctionnalités des langages de programmation qui ont besoin d'adresses modifiables, comme les tableaux, on devait corriger les adresses au besoin avec du code auto-modifiant. De nos jours, le code automodifiant est utilisée occasionnellement pour rendre un programme indétectable dans la mémoire (les virus informatiques utilisent beaucoup ce genre de procédés). L'impossibilité de séparer données et instructions est à l'origine de problèmes assez fâcheux. Il est parfaitement possible que le processeur charge et exécute des données, qu'il prend par erreur pour des instructions. C'est le cas quand des pirates informatiques arrivent à exploiter des bugs. Il arrive que des pirates informatiques vous fournissent des données corrompues, qui contiennent un virus ou un programme malveillant est caché dans les données. Les bugs en question permettent d'exécuter ces données, donc virus. Pour éviter cela, le système d'exploitation peut marquer certaines zones de la mémoire comme non-exécutable, c’est-à-dire que le système d'exploitation interdit d’exécution de quoi que ce soit qui est dans cette zone. Mais ce n'est pas parfait. Toujours est-il que tout cela est impossible sur les architectures Harvard. Et ce serait très limitant. Imaginez : pas possible de lancer un programme depuis le disque dur ou une clé USB, le programme doit impérativement être dans une mémoire ROM, pas de compilation à la volée, etc. Que des techniques très utilisées dans l'informatique moderne. Malgré ses défauts, les architectures Von Neumann ne sont pas les plus utilisées pour rien. Les architectures Harvard sont concrètement utilisées uniquement dans l'informatique embarquée, sur des microcontrôleurs très spécifiques. ==Le bus de communication avec les entrées-sorties== Le processeur, la mémoire et les entrées-sorties sont connectées par un ou plusieurs '''bus de communication'''. Ce bus n'est rien d'autre qu'un ensemble de fils électriques sur lesquels on envoie des zéros ou des uns. Pour communiquer avec la mémoire, il y a trois prérequis qu'un bus doit respecter : pouvoir sélectionner la case mémoire (ou l'entrée-sortie) dont on a besoin, préciser à la mémoire s'il s'agit d'une lecture ou d'une écriture, et enfin pouvoir transférer la donnée. Pour cela, on doit donc avoir trois bus spécialisés, bien distincts, qu'on nommera le bus de commande, le bus d'adresse, et le bus de donnée. * Le '''bus de données''', sur lequel s'échangent les données entre les composants. * Le '''bus de commande''' pour configurer la mémoire et les entrées-sorties. * Le '''bus d'adresse''', facultatif, permet de préciser quelle adresse mémoire il faut lire/écrire. Chaque composant possède des entrées séparées pour le bus d'adresse, le bus de commande et le bus de données. Par exemple, une mémoire RAM possédera des entrées sur lesquelles brancher le bus d'adresse, d'autres sur lesquelles brancher le bus de commande, et des broches d'entrée-sortie pour le bus de données. Précisons cependant que le bus de commande n'est pas exactement le même entre des mémoires RAM/ROM et des entrées-sorties. [[File:Bus general schematic.svg|centre|vignette|upright=2|Contenu d'un bus, généralités.]] ===Le réseau d'interconnexion : généralités=== Reprenons où nous nous étions arrêté. Avant de voir les architectures Harvard et Von Neumann, nous avions dit que le processeur, les mémoires et les entrées-sorties sont reliées entre eux par un réseau d'interconnexion. Nous venons de voir qu'il est possible de mutualiser certains bus, notamment celui de la mémoire RAM et celui de la mémoire ROM. Mais il est possible de faire la même chose pour les entrées-sorties. Là encore, il est possible de regrouper le bus mémoire avec les bus pour les entrées-sorties. Voyons ce que cela implique. {| |[[File:Réseau d'interconnexion avec un processeur au centre.png|centre|vignette|upright=2|Réseau d'interconnexion avec une architecture Harvard.]] |[[File:Réseau d'interconnexion avec un processeur au centre et une architecture Harvard.png|centre|vignette|upright=2|Interconnexions d'une architecture Von Neumann.]] |} Avant de poursuivre, nous devons préciser quelque chose d'important. Sur les ordinateurs modernes, les entrées-sorties peuvent accéder à la mémoire RAM. Les ordinateurs modernes intègrent des techniques de '''''Direct Memory Access''''' (DMA) qui permettent aux entrées-sorties de lire ou d'écrire en mémoire RAM. Les transferts DMA se font sans intervention du processeur. Ils permettent de copier un bloc de plusieurs octets, dans deux sens : de la mémoire RAM vers une entrée-sortie, ou inversement. Le DMA demande d'ajouter un circuit dédié sur la carte mère : le contrôleur DMA. Il effectue la copie d'un paquet d'octets de la RAM vers l'entrée-sortie ou dans l'autre sens. [[File:Réseau d'interconnexion avec un processeur au centre, et direct memory access.png|centre|vignette|upright=2|Réseau d'interconnexion avec un processeur au centre, et direct memory access]] ===Les bus systèmes=== La première solution utilise un bus unique, celui-ci est appelé le '''bus système''', aussi appelé ''backplane bus''. Le bus système est connecté à la mémoire RAM, la mémoire ROM, au processeur, et aux entrées-sorties. Tous les composants présents dans l'ordinateur sont connectés à ce bus, sans exception. De tels bus avaient pour avantage la simplicité. Le processeur n'est connecté qu'à un seul bus, ce qui utilise peu de broches et économise des fils. La mutualisation des bus est totale, le câblage est plus simple, la fabrication aussi. [[File:Architecture minimale d'un ordinateur.png|centre|vignette|upright=2|Architecture minimale d'un ordinateur.]] Un bus système contient un bus d'adresse, de données et de commande. Un bus système se marie bien avec des entrées-sorties mappées en mémoire. La conséquence est que le bus d'adresse ne sert pas que pour l'accès à la mémoire RAM/ROM, mais aussi pour l'accès aux entrées-sorties. Il y a moyen d'implémenter un système d'adresse séparés avec, mais c'est pas l'idéal. [[File:Architecture Von Neumann avec les bus.png|centre|vignette|upright=2|Architecture Von Neumann avec les bus.]] Un bus système n'a pas de limitations quant aux échanges de données. Le processeur peut communiquer directement avec les mémoires et les entrées-sorties, les entrées-sorties peuvent communiquer avec la mémoire RAM, etc. Notamment, un bus système peut implémenter le ''Direct Memory Access''. Il suffit juste de connecter un contrôleur DMA sur le bus système. Le contrôleur DMA est considéré comme une entrée-sortie, ses registres sont mappés en mémoire et sont donc accessibles directement par le processeur. [[File:Bus système avec controleur DMA.png|centre|vignette|upright=2|Bus système avec contrôleur DMA.]] Si on suit la définition à la lettre, un bus système est systématiquement une architecture Von Neumann, vu que la mémoire ROM et la mémoire RAM sont reliées sur le bus système. La conséquence est que les circuits de décodage d'adresse sont présents. Ils sont toujours sur la carte mère, et sont plus ou moins à côté du bus système. Cependant, le décodage d'adresse est parfois étendu pour tenir compte des entrées-sorties. Les entrées-sorties soudées sur la carte mère ont elles aussi des entrées ''Chip Select'' ou quelque chose de similaire. Le décodage d'adresse peut alors les activer ou les désactiver suivant l'adresse envoyée sur le bus d'adresse. C'est ce qui arrive quand le processeur écrit dans un registre d’interfaçage : il envoie l'adresse de ce registre sur le bus d'adresse, le circuit de décodage d'adresse active seulement l'entrée-sortie associée. Il faut noter que ce n'est pas systématique, il existe des techniques pour se passer de décodage d'adresse. Mais nous en reparlerons dans le chapitre sur les bus de communication. [[File:Chipselectfr.png|centre|vignette|upright=1.5|Exemple détaillé.]] Les bus systèmes sont certes très simples, mais ils ont aussi des désavantages. Par exemple, il faut éviter que le processeur et les entrées-sorties se marchent sur les pieds, ils ne peuvent pas utiliser le bus en même temps. De tels conflits d'accès au bus système sont fréquents et ils réduisent la performance, comme on le verra dans le chapitre sur les bus. De plus, un bus système a le fâcheux désavantage de relier des composants allant à des vitesses très différentes : il arrivait fréquemment qu'un composant rapide doive attendre qu'un composant lent libère le bus. Le processeur était le composant le plus touché par ces temps d'attente. Elle était utilisée sur les tout premiers ordinateurs, pour sa simplicité. Elle était parfaitement adaptée aux anciens composants, qui allaient tous à la même vitesse. De nos jours, les ordinateurs à haute performance ne l'utilisent plus trop, mais elle est encore utilisée sur certains systèmes embarqués, en informatique industrielle dans des systèmes très peu puissants. ===Les bus d'entrées-sorties=== Les bus systèmes ont de nombreux problèmes, ce qui fait que d'anciens ordinateurs faisaient autrement. À la place d'un bus système unique, ils utilisent un bus séparé pour les mémoires, et un autre séparé pour les entrées-sorties. Le bus spécialisé pour la mémoire est appelé le '''bus mémoire''', l'autre bus est appelé le '''bus d'entrées-sorties'''. Le bus mémoire est généralement relié à la fois à la mémoire RAM et à la mémoire ROM, les exceptions ne sont pas rares, cependant. [[File:Bus mémoire séparé du bus pour les IO.png|centre|vignette|upright=2|Bus mémoire séparé du bus pour les IO]] Les bus d'entrée-sorties peuvent être spécialisés et simplifiés. Par exemple, ils peuvent avoir un bus de commande différent de celui de la mémoire, qui utilise nettement moins de fils. Le bus d'adresse peut aussi être réduit, et utiliser des adresses plus courtes que celles du bus mémoire. Les bus de données peuvent aussi être de taille différentes. Il est ainsi possible d'avoir un bus mémoire capable de lire/écrire 64 bits à la fois, alors que la communication avec les entrées-sorties se fait octet par octet ! En général, les bus d'entrée-sortie sont assez petits, ils ont une taille de 8 ou 16 bits, même si le bus mémoire est plus grand. Cela permet de ne pas gaspiller trop de broches. Ajouter un bus d'entrée-sortie n'est donc pas très gourmand en broches et en fils. : Il est en théorie possible d'avoir une fréquence différente pour les deux bus, avec un bus mémoire ultra-rapide et un bus pour les entrées-sorties est un bus moins rapide. Mais il faut que le processeur soit prévu pour, et c'est très rare. Niveau performances, le processeur peut théoriquement accéder à la mémoire en attendant qu'une entrée/sortie réponde, mais il faut que le processeur soit prévu pour, et ce n'est pas de la tarte. Par contre, cela implique d'avoir des adresses séparées pour les registres d’interfaçage et la mémoire. En clair : pas d'entrée-sortie mappée en mémoire ! Un autre problème est que les entrées-sorties ne peuvent pas communiquer avec la mémoire directement, elles doivent passer par l'intermédiaire du processeur. En clair : pas de ''Direct Memory Access'' ! Les deux sont des défauts rédhibitoires pour les programmeurs système, notamment pour ceux qui codent les pilotes de périphériques. Pour résumer, les défauts sont assez problématiques : pas d'entrées-sorties mappées en mémoire, pas de ''Direct Memory Access'', économie de broches limitée. Les deux premiers sont des défauts majeurs, qui font que de tels bus ne sont pas utilisés dans les ordinateurs modernes. À la place, ils utilisent une troisième solution, distincte des bus systèmes et des bus d'entrée-sorties. ===Les bus avec répartiteur=== Il existe une méthode intermédiaire, qui garde deux bus séparés pour la mémoire et les entrées-sorties, mais élimine les problèmes de brochage sur le processeur. L'idée est d'intercaler, entre le processeur et les deux bus, un '''circuit répartiteur'''. Il récupère tous les accès et distribue ceux-ci soit sur le bus mémoire, soit sur le bus des périphériques. Le ou les répartiteurs s'appellent aussi le '''''chipset''''' de la carte mère. C'était ce qui était fait à l'époque des premiers Pentium. À l'époque, la puce de gestion du bus PCI faisait office de répartiteur. Elle mémorisait des plages mémoires entières, certaines étant attribuées à la RAM, les autres aux périphériques mappés en mémoire. Elles utilisaient ces plages pour faire la répartition. [[File:IO mappées en mémoire avec séparation des bus.png|centre|vignette|upright=2|IO mappées en mémoire avec séparation des bus]] Niveau adresses des registres d'interfacage, il est possible d'avoir soit des adresses unifiées avec les adresses mémoire, soit des adresses séparées. L'usage d'un répartiteur ne pose pas de problèmes particuliers pour implémenter le DMA. La seule contrainte est que le contrôleur DMA soit intégré dans le répartiteur. Les échanges entre IO et mémoire passent par le répartiteur, qui fait le pont entre bus mémoire et bus des IO. [[File:Implémentation du DMA avec un répartiteur.png|centre|vignette|upright=2|Implémentation du DMA avec un répartiteur]] ==Les microcontrôleurs et ''system on chip''== Parfois, on décide de regrouper la mémoire, les bus, le CPU et les ports d'entrée-sortie dans un seul circuit intégré, un seul boitier. L'ensemble forme alors ce qu'on appelle un '''''System on Chip''''' (système sur une puce), abrévié en SoC. Le nom est assez explicite : un SoC comprend un système informatique complet sur une seule puce de silicium, microprocesseurs, mémoires et périphériques inclus. Ils incorporent aussi des ''timers'', des compteurs, et autres circuits très utiles. [[File:ARMSoCBlockDiagram.svg|centre|vignette|upright=2|SoC basé sur un processeur ARM, avec des entrées-sorties typiques de celles d'un µ-contrôleur. Le support du bus CAN, d'Ethernet, du bus SPI, d'un circuit de PWM (génération de signaux spécifiques), de convertisseurs analogique-digital et inverse, sont typiques des µ-contrôleurs.]] Le terme SoC regroupe des circuits imprimés assez variés, aux usages foncièrement différents et à la conception distincte. Les plus simples d’entre eux sont des microcontrôleurs, qui sont utilisés pour des applications à base performance. Les plus complexes sont utilisés pour des applications qui demandent plus de puissance, nous les appellerons SoC haute performance. La relation entre SoC et microcontrôleurs est assez compliquée à expliquer, la terminologie n'est pas clairement établie. Il existe quelques cours/livres qui séparent les deux, d'autres qui pensent que les deux sont très liés. Dans ce cours, nous allons partir du principe que tous les systèmes qui regroupent processeur, mémoire et quelques périphériques/entrées-sorties sont des SoC. Les microcontrôleurs sont donc un cas particulier de SoC, en suivant cette définition. ===Les microcontrôleurs=== Les '''microcontrôleurs''' sont des composants utilisés dans l'embarqué ou d'informatique industrielle. Leur nom trahit leur rôle. Ils sont utilisés pour contrôler de l'électroménager, des chaines de fabrication dans une usine, des applications robotiques, les alarmes domestiques, les voitures. De manière générale, on les trouve dans tous les systèmes dits embarqués et/ou temps réel. Ils ont besoin de s'interconnecter à un grand nombre de composants et intègrent pour cela un grand nombre d'entrée-sorties. Les microcontrôleurs sont généralement peu puissants, et doivent consommer peu d'énergie/électricité. Fait amusant, on en trouve dans certains périphériques informatiques. Par exemple, les anciens disques durs intégraient un microcontrôleur qui contrôlait plusieurs moteurs/ Les moteurs pour faire tourner les plateaux magnétiques et les moteurs pour déplacer les têtes de lecture/écriture étaient commandés par ce microcontrôleur. Comme autre exemple, les claviers d'ordinateurs intègrent un microcontrôleur connecté aux touches, qui détecte quand les touches sont appuyées et qui communique avec l'ordinateur. Nous détaillerons ces deux exemples dans les chapitres dédiés aux périphériques et aux disques durs, tout deviendra plus clair à ce moment là. La majorité des périphériques ou des composants internes à un ordinateur contiennent des microcontrôleurs. Un microcontrôleur tend à intégrer des entrées-sorties assez spécifiques, qu'on ne retrouve pas dans les SoC destinés au grand public. Un microcontrôleur est typiquement relié à un paquet de senseurs et son rôle est de commander des moteurs ou d'autres composants. Et les entrées-sorties intégrées sont adaptées à cette tâche. Par exemple, ils tendent à intégrer de nombreux convertisseurs numériques-analogiques pour gérer des senseurs. Ils intègrent aussi des circuits de génération de signaux PWM spécialisés pour commander des moteurs, le processeur peut gérer des calculs trigonométriques (utiles pour commander la rotation d'un moteur), etc. [[File:C8051F340-9 A B C D.png|centre|vignette|upright=2|Exemple d'entrées-sorties intégrées à un microcontroleur.]] En plus des entrées-sorties intégrées, les microcontrôleurs ont souvent des '''ports d'entrées-sorties''' banalisés, à savoir qu'on peut brancher n'importe quoi dessus. Il était possible de brancher un capteur de température, un moteur à commander, un port série, un port parallèle, un écran, un clavier, une souris, peu importe. Les ports font souvent un octet et ils sont généralement reliées directement ou indirectement au processeur. Le logiciel qui s'exécute sur le processeur décide quoi envoyer sur des broches et comment interprète ce qui est reçu dessus. Les ports banalisés de ce type sont parfois appelés des '''GPIO''', abréviation de ''General Purpose Input/Output'', mais nous utiliserons le terme de ''port I/O''. Un port regroupe plusieurs broches qui peuvent être utilisés à volonté. C'est le logiciel qui s'exécute sur le processeur qui décide de la fonction de broches. Un port IO peut fonctionner soit en tant qu'entrée, soit en tant que sortie. Il est possible de changer de sens en cours de fonctionnement, pour passer d'une entrée à une sortie ou inversement. [[File:Afficheurs7seg.png|centre|vignette|upright=2|Exemple d'utilisation d'un port I/O. le port est connecté à un afficheur LCD dit 7-segments. Les 8 entrées de cet afficheur sont connectées à un port I/O d'un octet.]] ===Les SoC haute performance=== Les SoC les plus performants sont actuellement utilisés dans les téléphones mobiles, tablettes, ''Netbook'', ''smartphones'', ou tout appareil informatique grand public qui ne doit pas prendre beaucoup de place. La petite taille de ces appareils fait qu'ils gagnent à regrouper toute leur électronique dans un circuit imprimé unique. Mais les contraintes font qu'ils doivent être assez puissants. Ils incorporent des processeurs assez puissants, surtout ceux des ''smartphones''. C'est absolument nécessaire pour faire tourner le système d'exploitation du téléphone et les applications installées dessus. Niveau entrées-sorties, ils incorporent souvent des interfaces WIFI et cellulaires (4G/5G), des ports USB, des ports audio, et même des cartes graphiques pour les plus puissants d'entre eux. Les SoC incorporent des cartes graphiques pour gérer tout ce qui a trait à l'écran LCD/OLED, mais aussi pour gérer la caméra, voire le visionnage de vidéo (avec des décodeurs/encodeurs matériel). Par exemple, les SoC Tegra de NVIDIA incorporent une carte graphique, avec des interfaces HDMI et VGA, avec des décodeurs vidéo matériel H.264 & VC-1 gérant le 720p. Pour résumer, les périphériques sont adaptés à leur utilisation et sont donc foncièrement différents de ceux des microcontrôleurs. [[File:SOMblk.png|centre|vignette|upright=3|Exemple de SoC.]] Un point important est que les processeurs d'un SoC haute performance sont... performants. Ils sont le plus souvent des processeurs de marque ARM, qui sont différents de ceux utilisés dans les PC fixe/portables grand public qui sont eux de type x86. Nous verrons dans quelques chapitres en quoi consistent ces différences, quand nous parlerons des jeux d'instruction du processeur. Autrefois réservé au monde des PCs, les processeurs multicœurs deviennent de plus en plus fréquents pour les SoC de haute performance. Il n'est pas rare qu'un SoC incorpore plusieurs cœurs. Il arrive même qu'ils soient foncièrement différents, avec plusieurs cœurs d'architecture différente. La frontière entre SoC haute performance et microcontrôleur est de plus en plus floue. De nombreux appareils du quotidien intègrent des SoC haute performance, d'autres des microcontrôleurs. Par exemple, les lecteurs CD/DVD/BR et certains trackers GPS intègrent un SoC ou des processeurs dont la performance est assez pêchue. À l'opposé, les systèmes domotiques intègrent souvent des microcontrôleurs simples. Malgré tout, les deux cas d'utilisation font que le SoC/microcontrôleur est connecté à un grand nombre d'entrées-sorties très divers, comme des capteurs, des écrans, des LEDs, etc. [[File:GPS tracker Hardware Architecture.png|centre|vignette|upright=2|Hardware d'un tracker GPS.]] ==Étude de l'architecture de quelques consoles de jeu== Après avoir vu la théorie, nous allons voir des exemples réels d'ordinateurs. Dans ce qui suit, nous allons voir des ordinateurs qui collent assez bien à l''''architecture de base''' vue plus haut, avec un CPU, une RAM et une ROM, quelques entrées-sorties. Tous les ordinateurs modernes, mais aussi dans les smartphones, les consoles de jeu et autres, utilisent une architecture grandement modifiée et améliorée, avec un grand nombre de périphériques, des disques durs/SSD, un grand nombre de mémoires différentes, etc. Il pourrait sembler pertinent d’étudier des microcontrôleurs ou des ''System On Chip'', en premier lieu. Mais nous éviterons soigneusement de tels systèmes pour le moment. La raison est qu'ils ont un grand nombre d'entrées-sorties, qui sont peu familières. Attendez-vous à avoir près d'une vingtaine ou centaine d'entrée-sorties différentes pour de tels systèmes. Le tout est très complexe, bien trop pour un premier exemple. À la place, nous allons voir précisément des exemples plus simples : les premiers PC, et des consoles de jeu 8 et 16 bits. Bien que ce soit des systèmes très simples, ils sont cependant plus complexes que l'architecture de base. Et leur avantages/désavantages sont un peu inverse l'un de l'autre. Si on devait résumer les différences, on aurait ceci : * Les PC ont plus d'entrées-sorties que les consoles, bien que nettement moins que pour les microcontrôleurs/SoC. * Les PC utilisent des disques durs, les consoles font avec soit des cartouches de jeu, soit des CD/DVD. * Les PC utilisent des cartes électroniques séparées pour le son et l'écran, les consoles utilisent des circuits soudés sur la carte mère, qui sont souvent des co-processeurs. * Les PC ont une mémoire ROM soudées sur la carte mère, les consoles 8 bits font sans. Les PC et micro-ordinateurs ont plus d'entrées-sorties que les consoles. Même si on mets de côté les périphériques, ils ont aussi beaucoup d'entrées-sorties soudées sur la carte mère. En comparaison, les consoles de jeu 8/16 bits se débrouillent avec : une cartouche de jeu et une manette en entrée, une sortie vidéo et une sortie son. Un autre point important est l'absence de disque dur ou de lecteur CD. La présence d'un disque dur ou d'un lecteur CD/DVD complexifie tout de suite l'architecture des PC. Il faut leur réserver un bus dédié ou les connecter à un bus système, ajouter des circuits sur la carte mère, etc. Et surtout, il faut expliquer comment l'ordinateur exécute des programmes, ce qui demande de parler de l'interaction avec le disque dur et la ROM du BIOS. Rien de tout cela sur les consoles de jeu 8 et 16 bits. Elles utilisent à la place une mémoire ROM, dans la cartouche de jeu, pour mémoriser le code du jeu. Pas besoin de parler des mémoires de stockage, on est beaucoup plus proche de l'architecture de base avec une ROM unique. Autre différence : les PC utilisent des cartes électroniques à brancher sur la carte mère pour alimenter l'écran et les hauts-parleurs/casques, alors que les consoles de jeu utilisent des co-processeurs dédiés pour le son et les graphismes. Nous avons déjà expliqué ce que sont les co-processeurs plus haut, aussi les co-processeurs des consoles nous paraitrons familiers. On n'a pas à s’embêter à expliquer ce que sont les cartes d'extension, les bus associés et tout ce qui va avec, cela peut être retardé pour la section sur l'architecture des PC. Par contre, n'allez pas croire que tout est rose avec les consoles 8/16 bits. Il y a quelques différences qui font qu'elles sont plus complexes qu'un PC sur certains points. La gestion de la cartouche de jeu est notamment un peu subtile à comprendre, bien que ce soit bien plus simple à comprendre qu'un système avec un disque dur. Les cartouches de jeu intègrent une mémoire ROM, pour mémoriser les données du jeu, voire son code. Et le processeur doit exécuter le code depuis cette mémoire ROM. La conséquence est que les consoles 8/16 bits utilisent une architecture Harvard, avec un bus relié à la cartouche pour lire les instructions. Mais si ce n'était que ça... Les cartouches mémorisent aussi les données pour les graphismes, ce qui fait que le co-processeur vidéo doit lui aussi lire la cartouche pour récupérer ces données... ===L'architecture de la TurboGraphX-16=== La console PC Engine, aussi appelée TurboGraphX, est une ancienne console 8 bits. Elle contient un processeur 65C02, 8 kibioctets de RAM, un port manettes, une carte son et une carte vidéo. La '''carte son''' est le composant qui s'occupe de commander les haut-parleurs et de gérer tout ce qui a rapport au son. La '''carte graphique''' est le composant qui est en charge de calculer les graphismes, tout ce qui s'affiche à l'écran. Sur cette console, les cartes son et graphique ne sont PAS des co-processeurs, ce sont des circuits électroniques dits fixes. C'est totalement différent de ce qu'on a sur les consoles modernes, aussi le préciser est important. Bien que la carte graphique ne soit pas un processeur, elle a 64 kibioctets de RAM rien que pour elle. La RAM en question est séparée de la RAM normale, c'est un circuit intégré séparé. Et c'est un cas très fréquent, qui reviendra par la suite. La majeure partie des cartes graphiques dispose de leur propre '''mémoire vidéo''', totalement réservée à la carte graphique. La RAM vidéo est connectée à la carte graphique via un bus séparé. Le processeur est souvent connecté à ce bus, afin de pouvoir écrire des données dedans, mais ce n'est pas le cas ici. [[File:Architecture de la PC Engine, aussi appelée TurboGrafx-16.png|centre|vignette|upright=2.5|Architecture de la PC Engine, aussi appelée TurboGrafx-16]] L'architecture de la console était particulièrement simple. Le processeur était le centre de l'architecture, tout était connecté dessus. Il y a un bus pour la cartouche de jeu, un autre pour la RAM, un autre pour les manettes, un autre pour carte son, et un dernier pour la carte graphique. Le fait d'avoir un bus par composant est assez rare et ce n'est le cas ici que parce des conditions particulières sont remplies. Déjà, il y a peu d'entrée-sorties. Ensuite, les bus font tous 8 bits, vu que le processeur est un CPU 8 bits. Avec 5 connexions de 8 bits, le tout utilise 40 broches, ce qui est beaucoup, mais totalement gérable. Par contre, les choses changerons pour les autres consoles. Au final, l'organisation des bus peut s'expliquer avec ce qu'on a vu dans la section sur les bus de communication. La console utilise une architecture Harvard, car la ROM et la RAM utilisent des bus différents. De plus, il y a des bus dédiés aux entrées-sorties, séparés des bus mémoire. Enfin, la carte graphique a droit à ses propres bus pour lire dans la cartouche et dans sa RAM vidéo dédiée. ===L'architecture de la console de jeu NES=== Maintenant, nous allons voir la console de Jeu Famicom, aussi appelée la NES en occident. Elle a une architecture centrée sur un processeur Ricoh 2A03, similaire au processeur 6502, un ancien processeur autrefois très utilisé et très populaire. Le processeur est associé à 2 KB de mémoire RAM. Sur certaines cartouches, on trouve une RAM utilisée pour les sauvegardes, qui est adressée par le processeur directement. Première variation par rapport à l'architecture de la console précédente : l'ajout de la RAM pour les sauvegardes dans les cartouches. Niveau carte graphique, une différence importante est que la carte graphique est connectée à la cartouche de jeu via un autre bus, afin de pouvoir lire les sprites et textures du jeu dans la cartouche. [[File:Architecture de la NES.png|centre|vignette|upright=2.5|Architecture de la NES]] La différence avec l'architecture précédente est que des bus ont été fusionnés. Comme dit plus haut, le système utilise une architecture Harvard, vu que la ROM est dans la cartouche, alors que la RAM est soudée à la carte mère. Par contre, la Famicon utilise un bus dédié aux entrées-sorties. Il est utilisé pour la carte son et la carte graphique, seules les manettes sont sur un bus à part. Ce qui fait qu'on devrait plutôt parler de bus de sorties, mais passons... L'essentiel est qu'on n'est plus tout à fait dans le cas de la console précédente, avec un bus par composant. ===L'architecture de la SNES=== L'architecture de la SNES est illustrée ci-dessous. Les changements pour le processeur et la RAM sont mineurs.La RAM a augmenté en taille et passe à 128 KB. Pareil pour la RAM de la carte vidéo, qui passe à 64 KB. Par contre, on remarque un changement complet au niveau des bus, de la carte graphique et de la carte son. [[File:Architecture de la SNES.png|centre|vignette|upright=2|Architecture de la SNES]] La console utilise un '''bus système unique''', sur lequel tout est connecté : ROM, RAM, entrées-sorties, etc. La seule exception est pour les manettes, qui sont encore connectées directement sur le processeur, via un bus séparé. La transition vers un bus système s'explique par le fait que la console est maintenant de 16 bits, ce qui fait que les bus doivent être plus larges. Le processeur adresse des mémoires RAM et ROM plus grandes, ce qui double la taille de leurs bus. De plus, les entrées-sorties aussi ont besoin d'un bus plus large. Le processeur n'ayant pas un nombre illimité de broches, la seule solution est de fusionner les bus en un seul bus système. Un autre changement est que la carte graphique est maintenant composée de deux circuits séparés. Encore une fois, il ne s'agit pas de coprocesseurs, mais de circuits non-programmables. Par contre, la carte son est remplacée par deux coprocesseurs audio ! De plus, les deux processeurs sont connectés à une mémoire RAM dédiée de 64 KB, comme pour la carte graphique. L'un est un processeur 8 bits (le DSP), l'autre est un processeur 16 bits. Un point très intéressant : certains jeux intégraient des coprocesseurs dans leurs cartouches de jeu ! Par exemple, les cartouches de Starfox et de Super Mario 2 contenait un coprocesseur Super FX, qui gérait des calculs de rendu 2D/3D. Le Cx4 faisait plus ou moins la même chose, il était spécialisé dans les calculs trigonométriques, et diverses opérations de rendu 2D/3D. En tout, il y a environ 16 coprocesseurs d'utiliser et on en trouve facilement la liste sur le net. La console était conçue pour, des pins sur les ports cartouches étaient prévues pour des fonctionnalités de cartouche annexes, dont ces coprocesseurs. Ces pins connectaient le coprocesseur au bus des entrées-sorties. Les coprocesseurs des cartouches de NES avaient souvent de la mémoire rien que pour eux, qui était intégrée dans la cartouche. ===L'architecture de la Megadrive et de la néo-géo=== Passons maintenant à la console de jeu Megadrive, une console 16 bits. Elle a une architecture similaire à celle de la néo-géo, une autre console bien plus puissante, sorti à peu près en même temps. Elles intègrent deux processeurs : un Motorola 68000 qui sert de processeur principal, un Z80 qui sert de processeur dédié à l'audio. Le Z80 et le Motorola 68000 étaient deux processeurs très populaires à l'époque. Le Z80 est une sorte de version améliorée de l'Intel 8088 utilisé sur les anciens PC et de nombreuses consoles utilisaient des Z80 comme processeur principal. Il était familier pour les programmeurs de l'époque, pour son cout réduit, sa bonne disponibilité, et bien d'autres avantages liés à sa production de masse. Le Z80 est utilisé comme co-processeur audio. Il commande un synthétiseur sonore, et est relié à sa propre mémoire, distincte de la mémoire principale. Le MC68000 est le processeur principal et a une relation maitre-esclave avec le Z80 : le MC68000 envoie des commandes au Z80, mais la communication ne va pas dans l'autre sens. Le Motorola 68000 était un processeur 16 bits, alors que le Z80 est un processeur 8 bits. Et cette différence fait que l'on ne peut pas connecter directement les deux sur le même bus, ou du moins pas facilement. La solution retenue est d'utiliser deux bus séparés : un bus de 16 bits connecté au 68000, un bus de 8 bits connecté au Z80. Le premier bus est un bus système sur lequel est connecté le 68000, 64 kibioctets de RAM, la cartouche de jeu, et la carte graphique. Le second bus est un bus de 8 bits, plus court, relié au Z80, à un synthétiseur sonore, et 8 kibioctets de RAM Les deux bus sont connectés à un '''''chipset''''', un circuit répartiteur, qui fait le pont entre les deux bus. Les manettes sont connectées sur le ''chipset''. Il contient un registre de 8 bits, dans lequel le MC68000 peut écrire dedans à sa guise, le registre étant adressable par le processeur. Lorsque le MC68000 écrit une valeur dedans, cela déclenche l’exécution automatique d'un programme pré-déterminé sur le Z80. : Pour ceux qui savent ce qu'est une interruption, les valeurs écrites dans ce registre sont des numéros d'interruption, qui indiquent quelle routine d'interruption exécuter. [[File:Architecture de la Megadrive et de la Néogeo.png|centre|vignette|upright=2.5|Architecture de la Megadrive et de la Néogeo]] Cet exemple nous montre que les bus systèmes sont certes très simples, mais aussi inflexibles. Ils fonctionnent bien quand les composants branchés dessus sont tous des composants 8 bits, ou sont tous de 16 bits, ou tous 32 bits. Mais dès qu'on mélange composants 8, 16, 32 ou 64 bits, les choses deviennent plus compliquées. Il est alors préférable d'utiliser des bus séparés, avec des répartiteurs pour faire le pont entre les différents bus. Et nous verrons que le problème s'est posé lui aussi sur les PC. ===L'architecture des anciennes consoles Playstation : beaucoup de co-processeurs=== Les consoles que nous venons d'aborder étaient des consoles 8 ou 16 bits. A partir des consoles 32 bits, leur architecture s'est rapprochée de celle des PC, avec un usage plus complexes de répartiteurs. La XBOX était très semblable à un PC : le processeur était un Pentium 3 modifié, la carte graphique était une Geforce 3 modifiée, les 64 mébioctets de RAM était la même mémoire DDR que celle des PC, le répartiteur secondaire était un ''chipset'' nForce de NVIDIA, etc. Mais les Playstation 1, 2 et 3 se distinguent de leur contemporains. Elles disposent de très nombreux co-processeurs, qui sont en plus très variés. La Playstation 1 a été une des premières console à utiliser les CD-ROM comme support de stockage, en remplacement des cartouches. La conséquence est que la console contient une mémoire ROM, soudée à la carte mère, de 512 kibioctets. Elle contient aussi 2 mébioctets de RAM, une carte graphique avec 1 mébioctet de mémoire vidéo, un processeur, et de quoi gérer les périphériques. Il y a un co-processeur audio spécialisé, avec 512 kibioctets de RAM, ce qui nous est familier. Par contre, les autres co-processeurs ne le sont pas. Déjà, le lecteur de CD-ROM est associé à des circuits sur la carte mère, il y a tout un sous-système dédié au lecteur de CD. Il y a un contrôleur qui sert d'interface avec le lecteur proprement dit, mais aussi deux co-processeurs audio et 32 kibioctets de RAM. Les co-processeurs audio servent à lire des CD sans trop utiliser le second co-processeur audio, ils lui servent de complément. Ensuite, le processeur incorpore plusieurs cœurs, avec un cœur principal et plusieurs co-processeurs. Le premier est un co-processeur système, qui est utilisé pour gérer la mémoire cache intégrée au processeur, pour des fonctionnalités appelées interruptions et exceptions, ainsi que pour configurer le processeur. Le second est un co-processeur arithmétique spécialisé dans les calculs en virgule flottante, très importants pour le rendu 3D. Enfin, il y a un décodeur vidéo, qui n'est pas un co-processeur, mais un circuit non-programmable, spécialisé dans le décodage vidéo. De nos jours, ce circuit aurait été intégré dans la carte graphique, mais il était intégré dans le processeur sur la Playstation 2. Pour le reste, le processeur est la figure centrale de la console. Il est connecté à 4 bus : un pour la RAM, un pour la carte graphique, un pour les manettes, un autre pour le reste. Le dernier bus est connecté au système audio et au système pour le lecteur CD. Ce serait un bus d'entrée-sortie, s'il n'était pas connecté à la mémoire ROM. Vous avez bien lu : la mémoire ROM est reliée au bus d'entrée-sortie. [[File:Architecture de la Playstation.png|centre|vignette|upright=2.5|Architecture de la Playstation]] La Playstation 2 est composé d'un processeur, couplé à 32 Mébioctets de RAM, et d'un paquet de co-processeurs. Plus de co-processeurs que la PS1. Le processeur principal n'est pas la même que celui de la PS1, mais il a une architecture similaire. Il intègre un décodeur vidéo sur le même circuit intégré, ainsi que deux co-processeur. Les co-processeurs ne sont cependant pas les mêmes. Le co-processeur système disparait et est remplacé par un second co-processeur arithmétique. Les deux co-processeurs arithmétiques sont spécialisés dans les nombres flottants, avec quelques différences entre les deux. Par exemple, le second co-processeur gérait des calculs trigonométriques, des exponentielles, des logarithmes, et d'autres fonctions complexes du genre ; mais pas le premier co-processeur. Ils sont reliés à 4 kibioctets de RAM pour le premier, 16 kibioctets de RAM pour le second ; qui sont intégrées dans le processeur et non-représentés dans le diagramme ci-dessous. La PS2 intègre aussi un co-processeur d'entrées-sorties. Pour information, il s'agit du processeur principal de la Playstation 1, qui est ici utilisé différemment, suivant que l'on place un jeu PS1 ou PS1 dans la console. Si on met un jeu PS1, il est utilisé pour émuler la Playstation 1, afin de faire tourner le jeu PS1 sur la PS2. Si on met un jeu PS2, il est utilisé comme co-processeur d'entrée-sortie et fait l'interface entre CPU et entrées-sorties. Il est relié à 2 mébioctets de RAM, soit exactement la même quantité de mémoire que la Playstation 1. Tous les périphériques sont connectés au co-processeur d'entrées-sortie. Pour cela, le co-processeur d'entrées-sortie est relié à deux bus dédiés aux périphériques. Le premier bus est relié aux manettes, aux ports USB et aux ports pour cartes mémoires. Le second bus est relié à la carte son, la carte réseau, le lecteur DVD, et un port PCMIA. Notons que la carte son intègre un co-processeur audio, qui n'est pas représenté dans le diagramme ci-dessous. [[File:Playstation 2 architecture.png|centre|vignette|upright=2.5|Playstation 2 architecture]] ==L'architecture des PC et son évolution== Après avoir vu les consoles, nous allons maintenant voir les anciens PC, des années 80 ou 90. Le tout premier PC était techniquement l''''IBM PC'''. Par la suite, de nombreux ordinateurs ont tenté de reproduire l'IBM PC originel, avec parfois quelques modifications mineures. De tels ordinateurs ''IBM PC compatibles'', ont été très nombreux, pour des raisons diverses. Le fait d'utiliser des composants banalisés, facilement disponibles, ainsi qu'une bonne documentation de l'IBM PC originel, a grandement aidé. Les IBM PC compatibles ont progressivement évolué pour donner les PC actuels. L'IBM PC compatible a donné naissance à de nombreux standards divers. ===L'IBM PC originel et l'IBM PC XT=== [[File:IBM PC XT 02.jpg|vignette|IBM PC XT.]] Nous allons commencer par voir l'IBM PC originel, et son successeur : l'IBM Personal Computer XT. Nous les appelerons tous deux l'IBM PC. L'IBM PC utilisait un processeur Intel 8088, qui était un processeur 8 bits. Ils utilisaient un bus système unique, appelé le '''bus XT'''. Le bus système allait à 4.77 MHz, soit la même fréquence que le processeur. C'était un bus de 8 bits, ce qui collait parfaitement avec les processeurs 8 bits commercialisés par Intel à l'époque. L'IBM PC comprenait une mémoire ROM avec de quoi faire fonctionner le PC. La ROM en question contenait un programme minimal, appelé le '''BIOS''', sans lequel le PC ne fonctionnait pas du tout. Il servait de base pour le système d'exploitation et MS-DOS ne fonctionnait pas sans elle. De nos jours, son rôle est plus limité : sans elle, le PC ne démarre pas. Mais nous détaillerons cela dans le prochain chapitre. En plus de la ROM pour le BIOS, l'IBM PC avait quatre mémoires ROM dédiée au langage de programmation BASIC. Lorsque le PC démarrait, il ne bootait pas un système d'exploitation, mais lançait l'interpréteur pour le langage BASIC. De nos jours, ce serait l'équivalent d'un ordinateur qui boote directement sur du Python, à savoir la console Python que vous avez peut-être déjà utilisé si vous avez testé Python. Ceux qui ont déjà touché à un ordinateur de l'époque savent ce que ca veut dire, mais c'est malheureusement très difficile à expliquer sans ce genre d'expérience. Toujours est-il que c'était une sorte de norme à l'époque : les ordinateurs bootaient généralement sur un interpréteur BASIC. [[File:XT Bus pins.svg|vignette|Connecteur du bus XT.]] Les PC étaient conçus pour qu'on branche des '''cartes d'extension''', à savoir des cartes électroniques qu'on branchait sur la carte mère, à l'intérieur du PC. Les cartes d'extension de l'époque étaient surtout des cartes son ou des cartes graphiques, mais aussi des cartes pour brancher des péripéhriques. par exemple, on pouvait ajouter deux cartes graphiques dans l'IBM PC originel : l'''IBM Monochrome Display Adapter'' et/ou la ''IBM Color Graphics Adapter''. De nos jours, les cartes son sont intégrées à la carte mère, mais les cartes graphiques sont restées des cartes d'extension. Les cartes d'extension étaient branchées sur un '''connecteur XT''', qui était directement relié au bus XT. Le connecteur XT est illustré ci-contre, mais ne vous en souciez pas trop pour le moment. La carte mère de l'IBM PC avait 5 connecteurs de ce type, qu'on pouvait peupler avec autant de cartes d'extension. L'IBM Personal Computer XT est passé à 8 connecteurs XT, soit trois de plus. Pour ce qui est des périphériques, l'IBM PC avait plusieurs connecteurs : un port série, un port parallèle, un port pour le clavier, et un port pour un lecteur cassette. Le clavier et le lecteur cassette étaient connectés directement sur la carte mère, qui contenait quelques circuits pour gérer le clavier. Par contre, les deux premiers n'étaient pas connectés à la carte mère. Le port série était en réalité une carte d'extension, branchée sur un connecteur XT. Et il en est de même pour le port parallèle. Pour ce qui est des supports de stockage, l'IBM PC originel n'avait pas de disque dur et n'avait que des lecteurs de disquette. De plus, le lecteur de disquette n'était pas connecté directement sur la carte mère, mais était connecté à une carte d'extension, branchée sur un connecteur XT. La carte d'extension avait deux connecteurs, un par lecteur de disquette, ce qui fait que les deux lecteurs de disquettes pouvaient être branchés sur une seule carte d'extension. L'IBM Personal Computer XT a ajouté un disque dur, sauf sur quelques sous-modèles spécifiques. Le PC avait aussi un petit haut-parleur capable de faire des bips. Pour résumer, l'IBM PC originel se reposait beaucoup sur les cartes d'extension, sa carte mère contenait peu de choses. Enfin, peu de choses... Il y avait un processeur Intel 8088, éventuellement un coprocesseur flottant 8087, de la RAM, de la ROM, et des circuits intégrés assez divers. En voici la liste, certains vous seront familiers, d'autres vous seront inconnus à ce stade du cours : * les circuits de décodage d'adresse ; * un contrôleur DMA intel 8273 ; * un contrôleur d'interruption 8259 ; * un contrôleur de bus Intel 8288 pour gérer le bus XT ; * un générateur d'horloge Intel 8284 et un diviseur de fréquence ; * un ''timer'' Intel 8253, le même que celui étudié dans le chapitre sur les ''timers'' ; * un contrôleur parallèle 8255. Les multiplexeurs, registres et portes logiques, sont des circuits de décodage d'adresse, qui permettent de combiner plusieurs RAM en une seule, idem avec la mémoire ROM. Si vous verrez qu'il y a 5 mémoires ROM : une ROM pour le BIOS, et quatre autres ROM pour le BASIC. Les 4 ROM du BASIC sont combinées en une seule mémoire ROM. Pour les RAM, il y en a 8 à 32, qui sont combinées en une seule RAM de 16 à 64 kibioctets. [[File:IBM 5150 Motherboard.svg|centre|vignette|upright=3|Carte mère de l'IBM 5150, un modèle de l'IBM PC.]] ===L'architecture d'un IBM PC compatible 16 bits=== Les PC suivants sont passés à des processeurs 16 bits, mais c'était toujours des processeurs x86 d'Intel, à savoir des Intel 286 et 386. La RAM a grossi, quelques entrées-sorties ont été ajoutées, mais l'architecture globale est plus moins resté le même. C'est surtout au niveau du bus et des périphériques que les changements majeurs ont eu lieu. [[File:ISA Bus pins.svg|vignette|Connecteur ISA.]] Les PC 16 bits utilisaient un bus système unique, sur lequel tout était connecté : le processeur, la RAM, la ROM, les cartes d'extension et tout le reste. Le bus en question s'appelait le '''bus AT''', mais il a rapidement été renommé en '''bus ISA''' (''Industry Standard Architecture''). Le bus ISA était prévu pour avoir une compatibilité avec le bus 8 bits de l'IBM PC originel. D'ailleurs, cela se ressent jusque dans le connecteur utilisé : le connecteur ISA est un connecteur XT qu'on a fusionné avec un second connecteur pour l'étendre de 8 à 16 bits. Les PC 16 bits avaient toujours un port série, un port parallèle, un clavier, un lecteur de disquette et des cartes d'extension. Des disques durs pouvaient être ajoutés, aussi. Mais pour ces périphériques, un changement majeur a eu lieu comparé à l'IBM PC originel. L'IBM PC originel utilisait des cartes d'extension pour tout, sauf le clavier. Mais maintenant, les périphériques ne sont plus connectés à une carte d'extension. À la place, les circuits de la carte d'extension sont déplacés sur la carte mère. Mais n'allez pas croire qu'ils étaient connectés directement au bus ISA, il y avait des intermédiaires. Le clavier était relié à un '''contrôleur de clavier''', qui faisait l'interface entre le connecteur du clavier et le bus ISA. Le contrôleur de clavier était appelé le ''Keyboard Controler'', abrévié en KB. Il recevait ce qui est tapé au clavier et traduisait cela en quelque chose de compréhensible par l'ordinateur. Les autres périphériques étaient connectés à un circuit intégré dédié : l''''Intel 82091AA'''. Il était connecté au lecteur de disquette, au port série et au port parallèle. Il servait d'intermédiaire entre ces périphériques et le bus ISA. Vous pouvez le voir comme une sorte de répartiteur, mais qui ne serait pas connecté sur le processeur et la RAM Enfin, il ne faut pas oublier les autres composants présents sur l'IBM PC originel. Le BIOS est toujours là, de même que les ''timers'' Intel 8253 PIT, le contrôleur d'interruption Intel 8259 et le contrôleur DMA Intel 8237. Les PC 16 bits ont aussi intégré une ''Real Time Clock'' (RTC). Pour rappel, c'est un composant qui permet au PC de mémoriser la date et l'heure courante, à la seconde près. Le tout est résumé dans le schéma ci-dessous. [[File:Architecture de l'IBM PC compatible.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible]] Un point important est que le bus ISA allait à la même fréquence que le processeur, vu que c'était un bus système. Les processeurs de l'époque étaient des CPU 286 d'Intel, ou le 386 d'Intel. Les Intel 286 allaient de 4 MHz minimum, à 25 MHz maximum. Le 386, quant à lui, allait de 12 à 40 MHz. Le bus ISA devait aller à cette fréquence, il était synchrone avec le processeur. Par la suite, les processeurs ont gagné en performance, ce qui fait que le bus ISA est devenu trop lent pour le processeur. Une idée a alors été de conserver le bus ISA, pour des raisons de compatibilité, mais de le reléguer comme bus secondaire. L'ordinateur contient alors deux bus : un bus système, et un bus ISA secondaire. Le lien entre les deux est réalisé par un '''pont ISA''', ''ISA Bridge'' en anglais. Le bus ISA fonctionnait alors sa fréquence usuelle, alors que le bus système était beaucoup plus rapide. Le bus système fonctionnait à une fréquence bien plus élevée, ce qui fait que le processeur pouvait communiquer à pleine vitesse, notamment avec la RAM. Le processeur n'était alors plus forcé à aller à la même fréquence que le bus ISA [[File:Architecture de l'IBM PC compatible avec bridge ISA.png|centre|vignette|upright=2.5|Architecture de l'IBM PC compatible avec bridge ISA]] Les PC de l'époque intégraient donc plusieurs bus séparés. Vous avez bien lu : plusieurs bus ! Ici, il s'agit de ce que j'appelle des '''bus en cascade''', à savoir qu'un bus est connecté à un autre bus par un intermédiaire. Au passage, si j'aborde ces exemples, car c'est pareil sur les ordinateurs modernes. Le pont ISA a été remplacé par des circuits différents, mais qui ont un rôle assez similaire. Le ''chipset'' de votre carte mère n'est qu'un lointain descendant du pont ISA, qui s'interface avec des bus différents. ===L'arrivée des standards AT et IDE pour les disques durs=== Initialement, les disques durs étaient placés dans l'ordinateur et étaient connectés sur le bus ISA, via une carte d'extension ISA. En clair, il fallait connecter le disque dur sur une carte d'extension, et non sur la carte mère. Les cartes d'extension en question permettaient de connecter un ou plusieurs disques durs, parfois des lecteurs de disquette supplémentaires. Les cartes ISA de ce type faisaient juste l'interface entre le bus ISA et les disques durs, rien de plus. L'interface en question a été standardisée, ce qui a donné le standard ''AT Bus Attachment'', qui a été abrévié en ATA. Et ce n'était pas que pour les disques durs, de nombreux composants étaient dans ce cas. Une carte d'extension servait d'intermédiaire entre eux et la carte mère. Les cartes d'extension en question étaient appelées des ''Host bus adapter''. [[File:Acculogic sIDE-4 Controller ISA.jpg|centre|vignette|upright=2|Carte ISA d'interface disque dur, de marque Acculogic.]] Mais les choses ont rapidement évoluées, que ce soit du côté des cartes mères que du côté des disques durs. Le '''standard IDE''' a permis de brancher un disque dur directement sur la carte mère, sans passer par une carte d'interface ISA. Pour cela, la carte mère réservait un connecteur ISA pour le disque dur, renommé '''connecteur ATA'''. Pour que cela soit possible, il a fallu rajouter des circuits sur la carte mère. Tout ce qui était sur les cartes d'interface ISA s'est retrouvé sur la carte mère. [[File:Ajout des ports IDE sur la carte mère.png|centre|vignette|upright=2|Ajout des ports IDE sur la carte mère]] En réalité, les connecteurs ATA étaient des connecteurs ISA simplifiés. Un connecteur ISA avait en tout 98 broches, alors qu'un connecteur ATA n'en contient que 40. Les broches qui étaient inutiles pour les disques durs ont simplement été enlevées. Et qui dit connecteur spécialisé, dit câble spécialisé. Les disques durs étaient branchés sur le connecteur AT grâce à un câble ATA, sur lequel on pouvait connecter deux disques durs. [[File:ATA Plug.svg|centre|vignette|upright=2|Connecteur ATA.]] [[File:ATA cables.jpg|centre|vignette|upright=2|Cable ATA.]] Il était donc possible de connecter deux disques durs sur un seul connecteur ATA. Et cette possibilité est devenue d'autant plus utile par la suite. A partir de la version 2, ATA supportait aussi les lecteurs de disquettes, les lecteurs de CD/DVD, et bien d'autres supports de stockage. Il était alors possible de connecter un lecteur CD et un disque dur sur un seul connecteur. Les cartes mères avaient généralement deux connecteurs ATA, et n'avaient pas besoin de plus. C'était suffisant pour connecter un disque dur, un lecteur de disquette et un lecteur CD, configuration courante entre les années 90 et 2000. Un câble est donc connecté à deux supports de stockage. Pour distinguer les deux, le standard ATA ajoute une possibilité de configuration. Sur un câble, il doit y avoir un support de stockage "maitre" et un support "esclave". C'était la terminologie de l'époque, que je reproduis ici, même si elle est fortement trompeuse. N'allez pas croire que cela implique que l'un ait des avantages sur l'autre. Le support 'maitre" n'a pas droit à plus de bande passante, il n'a pas la priorité sur l'autre, rien du tout. Il s'agit juste d'un nombre qui permet de savoir avec qui le processeur communique, qui vaut 0 pour le premier support, 1 pour l'autre. Une sorte d'adresse de 1 bit, si l'on veut. [[File:ATA-Konfiguration02.png|centre|vignette|upright=2|Configuration ATA.]] Pour configurer un support de stockage en mode "maitre" ou "esclave", le support de stockage avait quelques pins dédiés. Il suffisait de placer un détrompeur en plastique sur les pins adéquats. Les pins se trouvaient à l'arrière du disque dur ou du lecteur de CD/DVD/Disquette/autre. [[File:HDD Master and Slave Description.jpg|centre|vignette|upright=2|Configuration ''Master/Slave''.]] ===L'architecture d'un PC avec un processeur Intel 486=== Maintenant, passons aux ordinateurs 32 bits, avec l'exemple d'un PC avec un processeur 486 d'Intel. A cette époque, le bus ISA était devenu trop limité et était en place d'être remplacé par le bus PCI, qui avait la même fonction. De nombreuses cartes d'extension utilisaient déjà ce standard et étaient branchées sur des connecteurs PCI dédiés, différents des connecteurs ISA. Intuitivement, on se dit que le bus PCI remplaçait le bus ISA, mais les choses étaient plus compliquées. Les disques durs gardaient leur connecteur ATA, et ne passaient pas par le bus PCI. Ils avaient un bus IDE séparé, qui était un bus ISA modifié. Là encore, les processeurs étaient devenus beaucoup plus rapides que le bus PCI. Les deux allaient à des fréquences assez différentes, ce qui fait que le bus PCI était séparé du bus système. Il y avait alors deux implémentations possibles. * La première utilise un répartiteur unique, relié au processeur, à la RAM, au bus PCI, et au bus IDE. * La seconde utilise un bus système séparé du bus PCI, avec un '''pont PCI''' pour faire l'interface entre les deux. Le '''''System Controler''''' était un circuit intégré, placé sur la carte mère, qui peut servir soit de pont PCI, soit de répartiteur. Le répartiteur PCI sert d'intermédiaire avec le bus PCI, mais aussi avec le bus IDE, utilisé pour les disques durs, aussi appelé le bus ''Parallel ATA''. Il peut aussi être connecté au processeur, à la mémoire RAM, ainsi qu'à la mémoire cache, mais cela ne sert que quand il est utilisé comme répartiteur. [[File:Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur.png|centre|vignette|upright=2|Architecture d'un PC utilisant un bus PCI, implémentation avec un répartiteur]] Pour des raisons de compatibilité, le bus ISA avait été conservé, aux côtés du bus PCI. Il y avait un pont ISA en plus du pont/répartiteur PCI. Une implémentation possible aurait été de connecter les deux ponts ISA et PCI à un bus système unique. Mais cette solution n'a pas été retenue. La raison est que le bus PCI et le bus ISA ont des performances très différentes. Le bus PCI est très rapide, le bus ISA beaucoup plus lent. La différence est d'un ordre de grandeur, environ. Dans ces conditions, il est possible de faire passer les communications ISA à travers le bus PCI. Pour cela, le pont ISA est directement connecté sur le pont PCI, comme illustré ci-dessous. Et il en est de même pour le bus dédié aux disques durs. En effet, les disques durs étaient autrefois reliés au bus ISA, mais cela a changé depuis. Ils disposent maintenant de leur propre bus dédié, le '''bus IDE''', qui est un bus ISA simplifié. Et ce bus ISA simplifié était connecté directement sur le pont PCI. [[File:Architecture de l'IBM PC compatible avec pont PCI.png|centre|vignette|upright=2|Architecture de l'IBM PC compatible avec pont PCI]] Dans ce qui va suivre, nous allons étudier un exemple qui utilise un bus système séparé, avec un pont PCI, sans répartiteur. Voilà pour les grandes lignes, mais le schéma ci-dessous montre que tout est plus complexe. Vous remarquerez des connexions optionnelles entre le pont PCI et la mémoire RAM et la mémoire cache. La raison est que le pont PCI peut aussi servir de répartiteur en remplacement du bus système. Concrètement, on peut alors retirer le bus système. La mémoire, le bus PCI, le bus ISA, le bus IDE, le processeur et la RAM sont alors connectés au répartiteur PCI, qui sert d'intermédiaire central entre tous ces composants. Mais ce n'est pas la solution qui a été retenue dans notre exemple. [[File:Intel486-Typ PCI System.png|centre|vignette|upright=2|PC IBM compatible avec un 486, un bus PCI et un bus ISA. Le ''host bus'' est le bus système.]] Le pont ISA sert ici d'intermédiaire entre le bus système et le bus ISA. De plus, il a été amélioré sur de nombreux points. Il inclut notamment des circuits qui étaient autrefois sur la carte mère, à savoir le contrôleur DMA 82C87 et le contrôleur d'interruption 82C59, ainsi que les ''timers'' Intel 82C54. Les composants restants sont eux reliés sur un quatrième bus : le bus X, l'ancêtre du bus ''Low Pin Count''. Le bus X était celui du BIOS, du contrôleur de clavier, de la ''Real Time Clock'', et du contrôleur de périphérique 82091AA d'Intel. [[File:ISA Bridge schematic.png|centre|vignette|upright=2|ISA Bridge.]] ===L'architecture des PC des années 90-2000=== Par la suite, les ponts PCI et ISA ont évolué avec l'évolution des bus de l'ordinateur. Le bus ISA a progressivement été remplacé par d'autres bus, comme le bus ''Low Pin Count'', le bus PCI a été remplacé par le PCI Express, d'autres bus ont été ajoutés, etc. Mais la séparation du ''chipset'' en deux a été conservée. [[File:Chipset schematic.svg|vignette|upright=1.0|Chipset séparé en northbridge et southbridge.]] Le pont PCI et le pont ISA ont été remplacés respectivement par le '''pont nord''' et le '''pont sud''', plus connus par leurs noms anglais de ''northbridge'' et de ''southbridge''. Le pont nord servait d'interface entre le processeur, la mémoire et la carte graphique et est connecté à chacun par un bus dédié. Il intégrait aussi le contrôleur mémoire. Le pont sud est le répartiteur pour les composants lents, à savoir l'USB, l'Ethernet, etc. Le bus qui relie le processeur au pont nord était appelé le '''''Front Side Bus''''', abrévié en FSB. [[File:IMac Chipset.png|centre|vignette|upright=2|Chipset séparé en northbridge et southbridge.]] Un point important est que le bus PCI est devenu un bus assez lent, ce qui fait qu'il a finit par être connecté au pont sud. Le pont PCI est donc devenu le pont sud, dans le courant des années 2000. Durant un moment, un équivalent du pont ISA a subsisté dans un circuit de '''''Super IO'''''. Concrètement, il s'occupait du lecteur de disquette, du port parallèle, du port série, et des ports PS/2 pour le clavier et la souris. Mais il ne gérait pas le bus ISA, mais son remplaçant, le bus ''Low Pin Count''. [[File:Motherboard diagram fr.svg|centre|vignette|upright=1.5|Carte mère avec circuit Super IO.]] ===L'architecture des PC depuis les années 2000=== Depuis la sortie du processeur AMD Athlon 64, le pont nord a été fusionné dans le processeur. La fusion ne s'est pas faite en une fois, des fonctionnalités ont progressivement été progressivement intégrées dans le processeur. Le pont sud est resté, mais il a alors été progressivement connecté directement au processeur. La raison derrière cette intégration est que les processeurs avaient de plus en plus de transistors à leur disposition. Ils en ont profité pour intégrer le pont nord. Et cela permettait de simplifier le câblage des cartes mères, sans pour autant rendre vraiment plus complexe la fabrication du processeur. Les industriels y trouvent leur compte. La première étape a été l'intégration du contrôleur mémoire a été intégré au processeur. Concrètement, le résultat était que la mémoire RAM n'était plus connectée au pont nord, mais était connectée directement au processeur ! Il y a donc eu un retour d'un bus mémoire, mais spécialisé pour la mémoire RAM. En théorie, une telle intégration permet diverses optimisations quant aux transferts avec la mémoire RAM. Les transferts ne passent pas par un répartiteur, ce qui réduit le temps d'accès à la mémoire RAM. Ajoutons de sombres histoires de prefetching, d'optimisation des commandes, et j'en passe. Toujours est-il que le pont nord ne servait alors d'intermédiaire que pour les ports PCI Express, et le pont sud. [[File:X58 Block Diagram.png|centre|vignette|upright=2|Chipset X58 d'Intel.]] Par la suite, la carte graphique fût aussi connectée directement sur le processeur. Le processeur incorpore pour cela des contrôleurs PCI-Express. Le pont nord a alors disparu complétement, son intégration dans le processeur était complète. Sur les cartes mères Intel récentes, le pont sdud subsiste, il est appelé le ''Platform Controler Hub'', ou PCH. L'organisation des bus sur la carte mère qui résulte de cette connexion du processeur à la carte graphique, est illustrée ci-dessous, avec l'exemple du PCH. [[File:Intel 5 Series architecture.png|centre|vignette|upright=2|Intel 5 Series architecture]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'interface électrique entre circuits intégrés et bus | prevText=L'interface électrique entre circuits intégrés et bus | next=La hiérarchie mémoire | nextText=La hiérarchie mémoire }} </noinclude> 7imtx85ct44y6tx4s11gtxm6iq0oidu Fonctionnement d'un ordinateur/Le matériel réseau 0 68864 765831 761125 2026-05-02T20:05:11Z Mewtow 31375 /* La carte réseau */ 765831 wikitext text/x-wiki [[File:Osa hub.svg|droite|Hub/switch/routeur.]] Dans ce chapitre, nous allons étudier plus en détail le matériel réseau, à savoir les ''hub'', les ''switch'', et les routeurs. Il existe de nombreux protocoles pour gérer la transmission sur un réseau, mais nous ne verrons que les protocoles Ethernet, MAC et IP, seuls pertinents pour ce chapitre. Les deux premiers, MAC et Ethernet, se chargent de la communication entre deux ordinateurs reliés par un câble réseau ou via un réseau local (à travers un concentrateur/commutateur, comme on le verra plus loin). Le protocole IP et ses associés gèrent les transferts sur des réseaux étendus internet, où tout transfert passe par un grand nombre d'intermédiaires. ==Les commutateurs== Rappelons que les données sont transmises sur un réseau local sous la forme de '''trames''', des blocs de données de taille fixe. Chaque trame contient à la fois des données utiles, mais aussi un en-tête qui contient toutes les informations nécessaires à la gestion de la trame. Notamment, chaque trame indique d'elle-même sa destination dans le réseau. L'ordinateur de destination est identifié par une '''adresse MAC''' de 6 octets (48 bits). [[File:Netzwerktopologie Stern.png|vignette|Réseau local en étoile.]] Il existe plusieurs types de réseaux locaux, mais ceux que nous allons étudier sont des réseaux en étoile, où tous les ordinateurs sont reliés à un équipement central. L'équipement central sert de relai : il reçoit des trames (des paquets de données utiles) et les envoie aux ordinateurs de destination. Suivant la manière dont fonctionne l'équipement central, on distingue le concentrateur du commutateur. Un '''concentrateur''' est l'équivalent réseau d'un bus. Il redistribue chaque trame sans se préoccuper de sa destination. Chaque trame est envoyée à tous les ordinateurs/équipements réseau auquel il est connecté, sauf l'émetteur. Les concentrateurs sont à contraster avec les '''commutateurs''', au fonctionnement similaire, mais qui n'envoient les trames qu'au composant de destination. [[File:HubSwitch.gif|centre|vignette|500px|Différence entre concentrateur (à gauche) et commutateur (à droite).]] Pas besoin de parler plus en détail du concentrateur : nous avons déjà parlé des bus dans un chapitre à part et le concentrateur en lui-même n'est rien d'autre qu'un bus ! Par contre, il est intéressant de parler du commutateur. Lorsqu'il reçoit une trame, le commutateur l'analyse, déduit quel est l'ordinateur de destination et renvoie la trame sur le port associé à l'ordinateur de destination. Pour faire son travail, le commutateur dispose de plusieurs sous-circuits : * Un circuit extrait l'adresse MAC de destination des trames reçues. * Un circuit qui décide, en fonction de l'adresse MAC de destination, sur quel port l'envoyer (le ''forwarding engine''). * Un circuit d'interconnexion qui relie chaque port à tous les autres. [[File:Micro-architecture d'un switch.png|centre|vignette|upright=2.0|Micro-architecture d'un switch]] ===L'encapsulation et la commutation=== Avant de nous intéresser au circuit d'interconnexion, nous allons étudier les deux autres circuits, à savoir : l''''interpréteur de paquets''', qui détecte ou analyse les trames/paquets, et le '''Forwarding Engine''', qui détermine le port de destination à partir de l'adresse MAC de destination. À l'intérieur du ''forwarding engine'', on trouve une table de correspondance qui associe chaque adresse MAC à un port : la '''table CAM''', aussi appelée ''CAM table'' en anglais. Elle peut être implémentée de plusieurs manières : avec une machine à états finis matérielle, avec une mémoire RAM ou avec une mémoire associative. La dernière solution est la plus utilisée, même si des solutions hybrides sont aussi relativement courantes. D'ailleurs, les mémoires associatives sont souvent appelées des mémoires CAM (''Content Adressable Memories''), ce qui a donné son nom à la table CAM. Il faut noter que le contenu de la table CAM a une durée de péremption, appelée le ''Time To Live'', qui vaut entre 0 et 255 secondes. Elle permet de mettre à jour un réseau local sans avoir à redémarrer le commutateur. Par exemple, on peut remplacer un ordinateur branché sur le commutateur, ce dernier ne restera pas bloqué sur l'ancien ordinateur et finira par repérer le nouveau quand la table CAM aura été purgée. Un commutateur doit découvrir par lui-même les adresses MAC des composants qu'on branche sur ses ports : il ne peut pas les connaitre à l'avance. Pour cela, le commutateur utilise une méthode assez simple. Au démarrage du commutateur, la table CAM est vide, le commutateur ne sait pas qui est qui sur ses ports. Quand il reçoit une trame, il met à jour la table CAM avec l'adresse MAC de l'émetteur de la trame : cela fait un port de connu. Une fois que tous les ordinateurs ont envoyé quelque chose sur le réseau, il connait tous les ports. Si aucun port n'est associé à une adresse de destination, le commutateur envoie le paquet à tous les ports. [[File:Switch pipeliné.png|centre|vignette|upright=2.0|Il faut noter que le switch peut être pipeliné, pour gagner en performance : il suffit d'insérer des mémoires tampons entre les différents circuits cités au-dessus.]] ===Le circuit d'interconnexion (''Switch Fabric'')=== Le circuit d'interconnexion, aussi appelée la '''''switch fabric''''', relie les ports entre eux et est équivalent à un ensemble de connexions point à point configurables. Il est totalement configurable : il suffit de lui envoyer le numéro du port d'entrée et du port de sortie et le circuit d'interconnexion connecte ces deux ports (les autres ports restent déconnectés, en principe et sauf optimisation). [[File:Turingswitch.png|centre|vignette|''Switch Fabric''.]] Les techniques de broadcast ou de multicast permettent d'envoyer une donnée présentée sur un port d'entrée sur plusieurs sorties. Cela permet d'envoyer un message identique à plusieurs ordinateurs en même temps, sans devoir envoyer plusieurs copies. Certains commutateurs permettent de gérer cela directement dans le matériel, soit en dupliquant les paquets, soit en connectant une entrée sur plusieurs sorties. Dans ce qui va suivre, nous allons classer les commutateurs en deux types : les '''commutateurs à partage de temps''' et les '''commutateurs à partage d'espace'''. ====Les commutateurs à partage d'espace==== Les commutateurs à partage d'espace sont de loin les plus simples à comprendre. Ils sont simplement composés d'un ensemble de liaisons point à point, qui relient chacune un port d'entrée à un port de sortie. Chaque port d'entrée est relié à chaque port de sortie, chaque liaison pouvant être activée ou désactivée selon les besoins. Il est possible de concevoir ce circuit avec des multiplexeurs. [[File:Switch concu avec des multiplexeurs.png|centre|vignette|upright=2|Switch conçu avec des multiplexeurs.]] Il est aussi possible d'utiliser un '''réseau crossbar'''. Ce dernier est composé de fils organisés en lignes et en colonnes. À l'intersection de chaque ligne et de colonne, on trouve un interrupteur qui relie la ligne et la colonne. [[File:Intercpunetcrossbar.png|centre|vignette|Réseau Crossbar.]] Il est aussi possible de fabriquer un commutateur en combinant plusieurs commutateurs plus petits, avec moins d'entrées. La méthode la plus simple pour cela utilise plusieurs commutateurs ''crossbar'' pour former un commutateur plus gros, les différentes manières donnant respectivement un '''réseau CLOS''', un '''réseau de Benes''', un '''réseau de banyan''', les '''Switch Sunshine''', et bien d'autres. Dans ce qui va suivre, nous allons nous intéresser aux '''commutateurs de Banyan''', conçus à partir de commutateurs à deux entrées et deux sorties. Les commutateurs simples sont empilés en plusieurs couches, chaque couche possédant autant de sorties et d'entrée qu'il y en a dans le commutateur de Banyan final : si un commutateur a 8 entrées et 8 sorties, alors chaque couche aura 8 sorties et 8 entrées. Le nombre de couches est égal au logarithme du nombre de ports d'entrée/sortie N, ce qui fait que le nombre de commutateurs de base utilisé est proportionnel à N × log (N) : on économise donc des portes logiques comparé à un crossbar. Le commutateur de Banyan le plus simple est composé de deux couches, et possède donc 4 entrées et 4 sorties. Il ressemble à ceci : [[File:Switch de Banyan à deux couches (4 entrées et 4 sorties).png|centre|vignette|upright=2|Switch de Banyan à deux couches (4 entrées et 4 sorties)]] Pour un commutateurs à 8 entrées et 8 sorties, voici ce que cela donne : [[File:Switch de Banyan à 3 couches (8 entrées et 8 sorties).png|centre|vignette|upright=2|Switch de Banyan à 3 couches (8 entrées et 8 sorties)]] En guise d'exercice, regardez bien les schémas, et essayez d'en déduire la logique de construction. Vous verrez, rien de bien sorcier. Il existe différents types de réseaux de Banyan, qui portent les doux noms d'Omega, d'Alpha, etc. Ces réseaux se construisent simplement : si on prend un commutateur à N entrées (et autant de sorties), alors chaque couche doit réaliser une permutation des entrées et sorties, permutation qui doit respecter certaines propriétés pour tenir compte du fait que les commutateurs de base ont deux entrées et deux sorties. Le principe de création dépend donc des permutations utilisées sur chaque couche. Mais ces commutateurs ne sont pas sans défauts. En effet, ces commutateurs sont dits bloquants : il se peut que deux paquets destinés à des ports de destination différents ne puissent pas voir leurs demandes assouvies simultanément. Cela arrive quand deux paquets veulent sortir sur le même port d'un des commutateurs 2 - 2, d'où conflit. Cependant, on peut éviter ces conflits internes en triant les paquets suivant leur port de destination avec un algorithme bien précis. En conséquence, certains commutateurs de Banyan sont précédés d'un circuit de tri conçu avec des commutateurs 2 - 2, empilés en couches, ainsi qu'avec de la logique de configuration composée de comparateurs : l'ensemble forme un switch Batcher-Banyan. Il est possible d'adapter le principe des commutateurs de Banyan pour qu'ils n'utilisent pas des switchs 2 - 2 (deux entrées et deux sorties), mais 3 - 3, ou 4 - 4, voire plus : on parle alors de commutateurs de Banyan augmentés. Qui plus est, les commutateurs simples peuvent contenir des FIFO et de la logique de traitement, comme pour les commutateurs Crossbar. ====Les commutateurs à partage de temps==== Les commutateurs à partage de temps n'utilisent pas de liaisons point à point, mais les émulent à partir d'un bus ou d'un réseau en anneaux. De ce fait, ils sont parfois appelés des '''commutateurs à média partagés'''. Avec eux, chaque entrée est traitée à tour de rôle, l'une après l'autre. [[File:Switch à partage de temps conçu avec des multiplexeurs.png|centre|vignette|upright=2|Switch à partage de temps conçu avec des multiplexeurs.]] Avec cette architecture, implémenter le ''multicast'' ou le ''broadcast'' est relativement complexe. Pour résoudre ce problème, il suffit de relier chaque port de sortie sur le bus interne directement, sans démultiplexeur. En faisant cela, chaque port de sortie doit filtrer les paquets qui ne lui sont pas destinés. Pour cela, on ajoute un filtre d'adresse pour comparer l'adresse MAC/IP associée au port (CAM table) et l'adresse MAC de destination : s'il y a égalité, alors on peut recopier la donnée sur le port de sortie. Ces commutateurs sont des commutateurs à partage de temps (sauf le tout premier). [[File:Switch à média partagé.png|centre|vignette|upright=2|Switch à média partagé.]] ===L'arbitrage des trames=== Le réseau d’interconnexion est relativement lent et il arrive que de nouvelles trames arrivent pendant qu'il est en train de transmettre un paquet. Dans ce cas, il est nécessaire de mettre les trames en attente tant que le paquet précédent n'est pas totalement traité. De même, il faut gérer le cas où plusieurs paquets veulent accéder au même port de sortie, ce qui impose d'envoyer les paquets les uns après les autres (il arrive cependant que certains paquets soient perdus). Dans tous les cas, qui dit mise en attente dit : utilisation de mémoires tampons de type FIFO. Un commutateur contient donc de nombreuses mémoires FIFO. Celles-ci sont d'autant plus grosses que son réseau d'interconnexion est lent et que les trames arrivent rapidement. Mettre les trames en attente dans des mémoires FIFO permet de gérer la plupart des situations. Mais il arrive que de nouvelles trames arrivent alors que les tampons sont déjà pleins. Dans ce cas, les paquets en trop sont perdus et n'arrivent pas à destination : on laisse la situation entre les « mains » du logiciel. ====L'arbitrage hors du réseau d'interconnexion==== Dans le cas le plus simple, les FIFO tampons sont placés en-dehors du réseau d'interconnexion. On peut les mettre avant le réseau d'interconnexion, ou après, ou les deux. S'ils sont placés entre le réseau d'interconnexion et l'interface réseau de sortie, on parle d''''output buffering'''. [[File:Output-buffering.png|centre|vignette|upright=1.5|''Output buffering'']] S'ils sont placés en entrée du réseau d'interconnexion, on parle d''''input buffering'''. [[File:Input-buffering.png|centre|vignette|upright=1.5|''Input buffering'']] Il est parfaitement possible d'utiliser les deux en même temps, ce qui porte le nom d''''input-output buffering'''. [[File:Input-output-buffering.png|centre|vignette|upright=1.5|''Input-Output buffering'']] Si une requête est en attente via ''input buffering'', elle va bloquer les requêtes suivantes sur le port d'entrée, même si celles-ci ont un port de sortie différent : on parle d''''''head of line blocking'''''. Pour l'éliminer, certains commutateurs utilisent le ''Virtual output queing''. Cela consiste à découper chaque FIFO en plusieurs FIFO, chacune prenant en charge les paquets destinés à un port de sortie précis. Avec cette technique, on peut traiter les requêtes dans le désordre, afin de profiter au maximum des ports libres. [[File:Head-line-blocking.jpg|centre|vignette|upright=2|Head-of-line blocking.]] ====L'arbitrage dans le réseau d'interconnexion==== Certains commutateurs intègrent les FIFOs directement dans le réseau d'interconnexion. Dans le cadre d'un réseau ''crossbar'', il suffit de remplacer les interrupteurs ligne/colonne par des FIFO. Mais pour les commutateurs qui ont un grand nombre de ports d'entrée et de sortie, cela devient rapidement impraticable. Pour éviter cela, les commutateurs à haute performance réduisent la taille des FIFO intégrées dans le crossbar, mais rajoutent de grosses FIFO sur les ports d'entrée (''input buffering''). Les simulations montrent que le rapport entre performance et nombre de portes logiques utilisées est meilleur avec cette technique. [[File:Switch Crossbar avec arbitrage intégré.png|centre|vignette|upright=2|Switch Crossbar avec arbitrage intégré.]] ====L'arbitrage sur les commutateurs à partage d'espace==== Pour les commutateurs à partage d'espace, les tampons FIFO sont incorporés directement entre le MUX pour les ports d'entrée, et le reste (filtreur d'adresse ou DEMUX). Les FIFOS en question sont généralement implémentées avec une mémoire qui stocke les données des tampons FIFO et leur ordre d'arrivée. Le commutateur présenté dans le schéma ci-dessous peut être transformé en commutateur sans partage de temps avec une mémoire multiport qui a autant de ports d'écriture que de ports d'entrée. Dans ce qui va suivre, mes schémas utiliseront un commutateur à partage de temps. [[File:Switch à mémoire partagée.png|centre|vignette|upright=2|Switch à mémoire partagée.]] Implémenter plusieurs FIFO avec une seule mémoire peut se faire de plusieurs manières différentes. La solution la plus simple consiste à utiliser un cache (une mémoire associative, plus précisément). Chaque byte de cette mémoire mémorise un paquet, son numéro de port de sortie et son ordre d'envoi (afin de simuler une FIFO). Pour mémoriser l'ordre d'envoi, le commutateur attribue un numéro de séquence à chaque paquet : plus ce numéro est grand, plus le paquet est ancien. Obtenir le prochain paquet à envoyer demande simplement d'envoyer le numéro du prochain paquet (déterminé par un compteur) et le numéro du port de sortie à la mémoire associative. Celle-ci renvoie alors le paquet à envoyer sur ce port de sortie. Une autre solution consiste à utiliser une mémoire RAM pour stocker les paquets dans des listes doublement chainées. Il y a une liste par port de sortie : tous les paquets destinés à un port de sortie sont ajoutés à la liste qui lui est associée. Les circuits qui gèrent la mémoire RAM doivent gérer eux-mêmes les listes chaînées, ce qui fait qu'ils contiennent deux registres par liste : un pour l'adresse en tête de liste et un pour le dernier élément. Il y a un circuit pour l'ajout et un autre pour le retrait des paquets. En plus de cela, les circuits de gestion de la mémoire doivent allouer dynamiquement les nœuds de la liste et libérer la mémoire. La mémoire utilise des Bytes démesurément grands, capables de mémoriser un paquet de plusieurs centaines de bits sans problèmes. Ainsi, le commutateur a juste besoin de mémoriser quels sont les Bytes libres et les Bytes occupés dans une mémoire annexe : la ''free list'', souvent implémentée avec une mémoire FIFO. * Une première méthode mémorise les données dans la RAM, ainsi que l'ordre de stockage des paquets. [[File:Linked-list switch.png|centre|vignette|upright=2|Linked-list switch]] * La deuxième méthode réserve la mémoire centrale pour le stockage des paquets et maintient l'ordre d'envoi des paquets dans des '''tampons FIFO''', qui mémorisent les adresses des paquets dans la mémoire centrale. La taille fixe des mémoires FIFO ne permet pas d'allouer toute la mémoire pour seulement quelques ports. Mais cette organisation permet de gérer facilement le multicast et le broadcast : on peut facilement ajouter un paquet dans toutes les mémoires FIFO, simultanément avec un circuit d'ajout conçu pour. [[File:FIFO switch.png|centre|vignette|upright=2|FIFO switch]] ==Les routeurs== [[File:Internet-transit.svg|vignette|Routage.]] Il est maintenant temps de laisser les réseaux locaux derrière nous, et de voir plus grand. Par plus grand, je veux dire que nous allons aborder le réseau Internet. Sur le réseau Internet, les données sont transmises en paquets de taille variable, qui sont appelés sobrement des '''paquets réseau''', ou encore des paquets. Chaque paquet se propage dans le réseau de proche en proche, passant par de nombreux intermédiaires avant d'arriver à destination. Ces intermédiaires sont appelés des '''routeurs'''. Les routeurs sont similaires aux commutateurs, si ce n'est qu'ils gèrent des adresses différentes des adresses MAC : les adresses IP. Ces dernières permettent d'identifier un ordinateur sur Internet, mais n'a pas de lien avec les adresses MAC (qui sont limitées aux réseaux locaux). Pour simplifier, les routeurs reçoivent des paquets sur un port d'entrée, qui sont destinés à une adresse IP de destination, qui doit être envoyé à l'ordinateur de destination. Son fonctionnement est similaire à celui d'un commutateur amélioré. La seule différence notable est que la table CAM est remplacée par une '''table de routage''', qui associe une adresse IP de destination au port de sortie qui correspond. ===Routeurs de première génération=== Les tout premiers routeurs, dits de première génération, relient leurs ports d'entrée et de sortie avec un bus. ils contiennent aussi un processeur tout ce qu'il y a de plus normal pour traiter les trames IP, ainsi qu'une mémoire RAM pour stocker les trames et la table de routage. Chaque port est relié à de circuits chargés de gérer le port. Ces circuits reçoivent des trames, les envoient et effectuent quelques traitements basiques. Ils gèrent notamment tout ce qui a trait aux adresses MAC. Une fois que ces circuits ont fait leur office, ils envoient la trame traitée sur le bus interne au routeur. La trame est alors réceptionnée par le processeur, éventuellement stockée en mémoire RAM. Celui-ci accède alors à la table de routage, pour identifier le port de sortie. Enfin, le processeur envoie la trame vers le port de sortie qu'il a déduit de ses traitements. La trame est alors envoyée sur le réseau. Le défaut principal de ce type de routeur est que les transferts en direction du processeur principal saturent le bus dans certaines situations critiques. [[File:1st-generation router architecture.svg|centre|vignette|1st-generation router architecture]] ===Routeurs de seconde génération=== Les routeurs de seconde génération sont plus complexes. Ceux-ci multiplient le processeur, la RAM et la table de routage en plusieurs exemplaires : un exemplaire par port. Ainsi, les trames reçues sur un port sont directement traités dans les circuits de gestion de ce port. Une fois traitée, elles sont envoyées directement sur le port de sortie, et envoyée immédiatement sur le réseau. Cependant, cela ne vaut que pour des trames simples. Les trames plus complexes doivent être traitées par un processeur plus complexe, non-attaché à un port. Ce processeur, le superviseur, est unique dans le routeur. [[File:2nd-generation router architecture.svg|centre|vignette|2nd-generation router architecture]] ===Routeurs de troisième génération=== Cependant, les deux types de routeurs précédents utilisent un bus pour afin de faire communiquer les différents composants. Or, il se peut que les conflits d'accès au bus minent les performances. Pour éviter cela, certains routeurs remplacent le bus par une switch fabric, pour gagner en performance. Ainsi, les transfert n'entrent pas en conflit pour l'accès à un unique bus, chaque transfert pouvant se faire en parallèle des autres. [[File:3rd-generation router architecture.svg|centre|vignette|3rd-generation router architecture]] ==La carte réseau== La '''carte réseau''' est le composant qui permet à notre ordinateur de communiquer sur un réseau (local ou internet). Elle permet d'envoyer ou de recevoir des informations sur un câble réseau ou une connexion WIFI. Pour mieux comprendre son fonctionnement et les rôles qu'elle doit jouer, je vous conseille la lecture de mon wikilivre sur les [[Les réseaux informatiques|réseaux informatiques]], et notamment la lecture du chapitre sur la [[Les réseaux informatiques/La couche liaison|couche liaison]]. La carte réseau communique avec le reste de l'ordinateur via le bus de la carte mère. Les données échangées sont mémorisées temporairement dans une mémoire tampon. Celle-ci permet de mettre en attente les données à envoyer tant que le réseau n'est pas disponible, ou d'accumuler les données reçues en attendant de les recevoir complètement. Ces données sont ensuite gérées par un circuit qui s'occupe de gérer les aspects réseau de la transmission : ajout/retrait des adresses MAC pour l'encapsulation, calcul de la somme de contrôle. Ce circuit est suivi d'une mémoire appelée la fenêtre glissante, qui contrôle l'ordre d'envoi des paquets. La carte réseau contient ensuite un circuit qui transforme les données à transmettre en ondes WIFI ou en signaux électriques (pour les câbles réseau). Dans tous les cas, les transferts d'informations se font en série (le câble est l'équivalent d'un bus série). L'interface de transfert contient donc deux registres à décalage : un pour faire la conversion parallèle -> série, et un autre pour la conversion série -> parallèle. En parallèle, on trouve un circuit qui détecte les conflits d'accès aux bus et qui les gère. [[File:Architecture matérielle d'une carte réseau.png|centre|vignette|upright=2|Architecture matérielle d'une carte réseau.|800px]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures neuromorphiques | next=La tolérance aux pannes }}{{AutoCat}} </noinclude> fzzq6jc5qbyj08tx9spwm2iw0hz1ivo Fonctionnement d'un ordinateur/Les architectures neuromorphiques 0 69056 765830 759031 2026-05-02T20:05:03Z Mewtow 31375 /* Simuler un neurone à partir de circuits analogiques usuels */ 765830 wikitext text/x-wiki La recherche n'hésite pas à s'inspirer de tout et n'importe quoi pour créer de nouvelles manières de faire des calculs. Par exemple, des systèmes de traitement de l’information s'inspirant de la biologie ont vu le jour. Il existe des calculateurs non-programmables à base d'ADN, spécialisés pour des problèmes bien précis. Et il y a aussi des ordinateurs plus ou moins inspirés du fonctionnement du cerveau humain. Dans ce chapitre, nous allons nous intéresser à deux choses : les '''réseaux de neurones matériels''' et les '''architectures neuromorphiques'''. Les deux s'inspirent fortement du cerveau humain et du système nerveux, surtout les architectures neuromorphiques. Les réseaux de neurones sont des systèmes capables d'apprendre presque seuls, à partir d'exemples. L'intelligence artificielle moderne utilise ces réseaux de neurones. Les réseaux de neurones peuvent se classer en deux types : ceux qui apprennent tout seuls sont appelés des ''réseaux de neurones non-supervisés'', alors que ceux qui ont besoin d'être aidés par un humain qui corrige leurs erreurs sont appelés des ''réseaux de neurones supervisés''. Pour les réseaux non-supervisés, le réseau de neurone peut apprendre tout seul à partir d'exemples et est capable de catégoriser de lui-même les entrées qu'on lui fournit. Ce genre d'apprentissage automatique (on dit aussi non-supervisé) est très efficace pour une grande classe d'applications : reconnaissance des visages, reconnaissance d'émotion, rétines artificielles, vidéo-surveillance intelligente, systèmes de contrôle de moteurs, etc. En temps normal, les réseaux de neurones sont mis en œuvre par un logiciel, qui simule le fonctionnement d'un réseau de neurones. Et il existe des accélérateurs d'IA capables d'accélérer les calculs des réseaux de neurones. De plus, dans ce chapitre, nous allons voir des exemples de réseaux de neurones implémentés en matériel. La différence entre accélérateurs d'IA et réseaux de neurones matérielles deviendra plus claire à la fin du chapitre. Mais pour le dire rapidement, l'IA a un but pratique où le résultat compte plus que le réalisme des réseaux de neurones implémentés. À l'opposé, les architectures neuromorphiques visent à se rapprocher du cerveau humain, elle vise à implémenter des réseaux de neurones proches des neurones réels, en espérant que cela permette d'obtenir de meilleurs résultats. La différence se manifeste en pratique sur les neurones utilisés. L'intelligence artificielle actuelle et passée utilise surtout des neurones très simples, qui n'ont pas grand chose à voir avec les neurones biologiques. Il ne s'agit pas de simulations de neurones biologiquement réalistes. Pour faire la différence, nous parlerons de neurones artificiels. Les circuits pour simuler un neurone artificiel se résument à des circuits additionneurs/multiplieurs. Par contre, les neurones plus réalistes demandent des circuits beaucoup plus complexes, qu sont presque toujours analogiques. Cette différence entre neurones très simples d'un côté et véritable simulation du tissu neuronal de l'autre, est une distinction qui va organiser ce chapitre. Nous allons d'abord voir des circuits basés sur des neurones simples, puis de véritables circuits neuromorphiques. Les deux seront séparés dans plusieurs sections différentes. Une première section va parler des anciens perceptrons matériels, suivi par une section sur les accélérateurs d'IA numériques, avant qu'une troisième section parle des véritables architectures neuromorphiques. En introduction de chaque section, on trouvera une introduction aux notions biologiques utiles. ==Les perceptrons et réseau de Hopfield : la théorie== Les premiers réseaux de neurone que nous allons aborder sont basés sur des neurones artificiels les plus simples qui puissent existe. Mais pour comprendre comment ils fonctionnent, il est intéressant de faire une analogie avec un vrai neurone. Même si les percetrons n'utilisent pas des neurones réalistes, ils s'inspirent de leur fonctionnement d'une manière superficielle. Et cette analogie se comprend bien à partir des vrais neurones. ===Rappels de base sur les neurones biologiques=== Les cellules du cerveau sont appelées des '''neurones'''. Il existe un grand nombre de neurones différents, qui se différencient par leur taille, leur forme, ou quelques autres paramètres. Mais tous ces neurones gardent malgré tout des points communs quant à leur forme. Si on omet certaines classes de neurones un peu particulière, un neurone a une forme canonique en 4 parties. Les neurones de ce type, dit multipolaires, sont composés : * d'une dendrite souvent en forme d'arbre, très touffue ; * d'un soma, un corps cellulaire avec le noyau au milieu ; * d'un axone avec un ensemble de boutons synaptiques à son extrémité. [[File:Neurone français schéma.svg|centre|vignette|upright=2|Neurone, français schéma]] Les neurones sont parcourus par des influx nerveux, des sortes de "courants électriques" qui passent de neurones en neurones et se propagent à travers tout le système nerveux. Le terme technique n'est pas '"influx nerveux", mais "potentiel d'action". Les potentiels d'action ne sont pas des courants électriques, comme on pourrait le croire. Ce sont des pics de tension qui parcourent le neurone sur ses dendrites, ou sur son axone. Lorsque le neurone ne fait rien, une tension d'environ – 70 millivolts est présente sur sa membrane. Lorsqu'un influx nerveux passe, cette tension augmente localement. La forme de ce pic de tension est illustrée ci-dessous. Il faut noter que les potentiels d'action sont tous les mêmes. L'amplitude de la tension est la même pour tous les potentiels d'action, elle ne varie pas, pas plus que la durée du potentiel d'action. On dit que ceux-ci sont en tout ou rien. [[File:Action potential (no labels).svg|centre|vignette|upright=2|Potentiel d'action.]] Un potentiel d'action se propage sur le neurone, que ce soit sur sa dendrite ou sur son axone, mais il peut aussi passer d'un neurone à l'autre. Pour cela, les neurones sont reliés entre eux par ce qu'on appelle des '''synapses'''. Une synapse connecte l'axone d'un neurone aux dendrites d'un autre. Le potentiel d'action est généré au milieu du neurone, dans la zone appelée le soma. Il se propage alors sur l'axone, qui sert en quelque sorte de câble de transmission du potentiel d'action. Là, l'axone entre dans la synapse et passer dans la dendrite d'un autre neurone. Il se propage alors sur la dendrite et arrive au soma. Au niveau du soma, il donne éventuellement naissance à un nouveau potentiel d'action sur l'axone. Pour simplifier drastiquement, le soma fait la somme de tous les potentiels d'action qui arrivent sur ses dendrites à un moment donné. Si cette somme dépasse un seuil fixé à l'avance, alors le neurone émet un potentiel d'action sur son axone. Dans le cas contraire, il n'émet rien. [[File:Description fonctionnelle du fonctionnement d'un neurone.png|centre|vignette|upright=2|Description fonctionnelle du fonctionnement d'un neurone]] Les synapses ne sont pas fixes et peuvent se reconfigurer : de nouvelles synapses peuvent se créer, d'autres mourir, etc. De plus, l'efficacité d'une synapse à transmettre les potentiels d'action varie dans le temps. L'ensemble de ces phénomènes s'appelle la '''plasticité synaptique'''. Ce serait le mécanisme qui nous permettrait d'apprendre. Autant dire que simuler la plasticité est primordial pour obtenir des circuits qui apprennent tous seuls. ===Les neurones artificiels d'un perceptron=== Un perceptron utilise des neurones simplifiés. Les neurones simplifiés sont appelés des '''neurones artificiels''', aussi appelés des ''perceptrons''. Leur fonctionnement copie le fonctionnement basique d'un neurone, mais appliqué au domaine numérique. Si les neurones sont fondamentalement analogiques, les neurones artificiels en sont une sorte d'équivalent numérique. Le potentiel d'action est un pic de tension foncièrement analogique dans les détails, mais qui a un comportement en tout ou rien. Pour rappel, tous les potentiels d'action sont identiques, leur durée et leur tension est tout le temps la même. Ce comportement en tout ou rien du potentiel d'action est simulé en codant un potentiel d'action par un bit : 0 en absence de potentiel d'action à un instant t, 1 en cas de survenue d'un potentiel d'action. Cela permet d'utiliser un encodage non seulement numérique, mais aussi binaire, ce qui nous arrange bien. Un neurone est donc simulé par un circuit qui prend en entrée un ou plusieurs bits, et fournit en sortie un ou plusieurs bits. Pour gérer son interface, les neurones artificiels s'inspirent de la forme d'un neurone avec des dendrites et un axone. Ils ont donc plusieurs entrées et une seule sortie : la sortie unique représente l'axone, il y a une entrée par dendrite. Pour simplifier, ils reçoivent des bits sur leur entrée et fournissent un bit en sortie. Les bits d'entrées représentent les potentiels d'action reçus par le neurone, le bit de sortie indique si le neurone a émis un nouveau potentiel d'action. [[File:Neuron3.png|centre|vignette|upright=2|Analogie entre un neurone réel et un circuit.]] Le fonctionnement d'un neurone simplifié vu précédemment est assez simple. Il fait la somme de tous les potentiels d'actions qui arrivent sur ses dendrites, et émet un potentiel d'action si la somme dépasse un certain seuil. Ce comportement est directement reproduit par un neurone artificiel : il fait la somme de ses entrées et compare la somme à un seuil. Le plus compliqué est de simuler la plasticité synaptique. Pour cela, on suppose que celle-ci vient d'une évolution de la sensibilité des synapses. Elles laissent plus ou moins bien passer les potentiels d'action. Pour simuler cela dans un neurone artificiel, les bits d'entrées sont multipliés par un coefficient multiplicateur, appelé le '''poids de la synapse''', qui représente la sensibilité d'une synapse. Il y a un poids différent par synapse, donc un coefficient différent par entrée. Pour résumer, les bits d'entrée sont multipliés par un coefficient multiplicateur, qui est un nombre à virgule flottante ou entière. Les résultats des multiplications sont additionnés entre eux, pour simuler l'action du soma du neurone, son corps cellulaire. Puis le résultat passe dans une fonction qui transforme la somme en un bit de sortie, qui représente le potentiel d'action produit par le neurone. La fonction est une simple comparaison entre la somme et un seuil configurable. [[File:ANN neuron.svg|centre|vignette|upright=2|Neurone artificiel comparé à un neurone réel.]] Pour résumer, un neurone artificiel effectue le calcul suivant : : <math>\text{Sortie} = f\left[ \sum^i (a_i \times w_i) \right]</math>, avec <math>w_i</math> les poids de chaque synapse et f une fonction qui calcule le bit de sortie. Une alternative ajoute un biais à la somme précédente : : <math>\text{Sortie} = f\left[ \sum^i (a_i \times w_i) + \text{biais} \right]</math>, le biais étant une sorte de seuil ajouté. Implémenter un neurone artificiel est assez simple : il suffit de circuits multiplieurs pour les poids, d'un additionneur pour le soma et d'un comparateur pour la sortie. Et les trois peuvent s'implémenter de manière soit purement numérique, soit analogique. Les implémentations numériques sont généralement des circuits de calcul flottants basiques. Les implémentations analogiques utilisent souvent des circuits basés sur des amplificateurs opérationnels, ou quelque chose d'approchant. [[File:ArtificialNeuronModel francais.png|centre|vignette|upright=2|Neurone artificiel.]] ===Les règles d'apprentissage : la Perceptron Learning Rule=== L'apprentissage se fait en faisant évoluer les poids dans le temps. Les poids évoluent quand l'utilisateur indique que le réseau fournit une mauvaise réponse. Pour cela, il existe plusieurs '''règles d'apprentissage''' qui décrivent comment les poids doivent évoluer. Mais elles dépendent beaucoup du perceptron utilisé. La règle d'apprentissage est intégrée dans le neurone. Généralement, les poids des synapses sont mémorisés quelque part, dans un circuit spécialisé. Un circuit spécialisé lit ces poids et les modifie, ce qui permet de modifier les poids. Le calcul réalisé par ce circuit varie grandement selon la règle d'apprentissage utilisée. Une règle d'apprentissage simple est la suivante, appelée la '''''Perceptron Learning Rule''''' (PLR). L'idée est que les poids sont adaptés en cas d'erreur, en fonction de l'entrée. En premier lieu, on compare la sortie attendue et celle fournie par le perceptron, on calcule la différence. La différence vaut 0, 1 ou -1. Elle vaut 0 si le perceptron a raison. Elle vaut 1 si le perceptron a sorti un 0 alors qu'on attendait un 1, elle vaut -1 dans le cas inverse. Cette différence dit s'il faut augmenter ou réduire les poids. Reste à savoir de quel montant. Une idée serait d'additionner ou soustraire une valeur fixe, mais ce ne serait pas une bonne idée. Une méthode plus efficace additionne ou soustrait une valeur qui est proportionnelle à l'entrée. Ainsi, les synapses avec un bit d'entrée à 1 sont modifiées, pas celles où le bit d'entrée est à 0. Pour cela, les poids sont rassemblés dans un vecteur, les bits de l'entrée sont rassemblés dans un autre vecteur. L'idée est de multiplier le vecteur d'entrée par un coefficient multiplicateur et de l'ajouter/soustraire au vecteur des poids. Le coefficient multiplicateur est choisit assez petit pour faire converger le réseau lentement, afin que les résultats finaux soient assez précis. Il y a trois cas, qui sont résumés dans les formules suivantes. On note <math>\eta</math> le coefficient, <math>x_i</math> le bit envoyé sur l'entrée i, <math>\Delta w_i</math> ce qu'on ajoute/soustrait au poids de la synapse. : <math>\Delta w_i = 0</math> : si le perceptron ne s'est pas trompé. : <math>\Delta w_i = \left( \eta \times x_i \right)</math> : si le perceptron sort un 1 au lieu d'un 0. : <math>\Delta w_i = - \left( \eta \times x_i \right)</math> : si le perceptron sort un 0 au lieu d'un 1. Le tout cela est résumé avec la formule suivante, en notant D la différence calculée : : <math>\Delta w_i = \left( \eta \times x_i \right) \times D</math> ===Les perceptrons et autres réseaux de neurones artificiels=== Maintenant que l'on a un neurone artificiel, il faut les interconnecter entre eux pour obtenir un réseau de neurones. Pour cela, il y a plusieurs méthodes. La plus simple d'entre elle place plusieurs neurones les uns à côté des autres, sans les relier. On dit alors qu'il y avait une seule couche de neurones. Quelques machines fonctionnaient sur ce principe, comme l'ADALINE, qu'on verra plus bas. [[File:Neural network example.svg|vignette|perceptron basique.]] Mais à part ces rares exceptions, les réseaux de neurones disposent de plusieurs couches de neurones, connectées entre elles. Les réseaux de neurones les plus simples sont ceux utilisées ci-contre. Un tel réseau est appelé un '''perceptron'''. Ils ont deux à trois couches, chaque couche est connectée uniquement à la suivante. Les perceptrons implémentent des classifieurs binaires, terme barbare pourtant simple à comprendre. Un classifieur binaire prend en entrée un exemple et dit si celui-ci appartient ou non à une catégorie précise. Par exemple, si on lui présente une photographie d'animal, le réseau sera entrainé pour dire si la photo est celle d'un chat ou non. Le résultat est toujours une réponse de type oui/non, d'où le terme binaire. Le résultat peut être représenté sous la forme d'un bit : 0 si la réponse est "faux", 1 pour un "vrai". Le réseau de neurone est entrainé en lui présentant des exemples divers, mais il n'apprend pas tout seul. Un utilisateur doit l'entrainer en précisant si ses réponses sont bonnes ou non. Le réseau fournit une réponse à chaque exemple, l'utilisateur lui dit si sa réponse est bonne ou non. En fonction de la réponse de l'utilisateur, le réseau de neurone s'adapte et se modifie, il apprend. [[File:Nonlinear separable.JPG|centre|vignette|Nonlinear separable]] [[File:Hopfield-net-vector.svg|vignette|Réseau de Hopfield.]] D'autres réseaux de neurones autorisent des boucles dans le réseau, à savoir que la sortie d'un neurone est bouclée sur l'entrée d'un neurone précédent, dans une couche précédente. Les plus simples sont les '''réseaux de Hopfield'''. Sans rentrer dans les détails mathématiques très complexes de ce genre de réseaux, ils sont composés d'une à deux couches, dont l'une est bouclée sur elle-même. Chaque neurone émet un axone en direction de tous les autres neurones de la même couche. ==Les implémentations matérielle de perceptrons== Maintenant que nous avons vu la théorie, nous allons voir comment de tels réseaux de neurones peuvent être implémentés physiquement, dans un ordinateur, avec des circuits matériels. Nous allons voir quelques exemples d'architectures ayant existé dans le passé, dont le but était de réellement implémenter des neurones en silicium. Nous laissons de côté les puces accélératrices d'IA récentes, car elles fonctionnent d'une manière totalement différente. ===L'ADALINE et le MADALINE=== Une implémentation d'un perceptron était l'ADALINE (''Adaptive Linear Neuron or later Adaptive Linear Element''). Elle était un bel exemple de circuit analogique. Si les entrées du circuit sont des bits, donc des données numériques, tout est converti à l’intérieur du neurone en tensions analogiques. D'ailleurs, la tension de sortie était analogique, avec une valeur allant de -1 à 1 volt. Et les bits d'entrées étaient codés avec une tension valant soit 1 volt, soit -1 Volt. Le réseau de neurone n'avait qu'une seule couche de neurones indépendants, comme illustré ci-dessous. [[File:Adaline.jpg|centre|vignette|upright=2|Architecture de l'ADALINE.]] Les multiplieurs pour les poids étaient initialement implémentés par de simples potentiomètres, réglés par l'utilisateur.. Vu que c'était des potentiomètres, on pouvait faire varier le poids en les tournant. Le perceptron n'avait donc pas de circuit d'entrainement proprement dit, on devait régler les potentiomètres à la main, la machine ne pouvait pas faire varier les poids d'elle-même. Un biais était ajouté via un potentiomètre séparé, relié à une de ces entrées (le a0 dans le schéma ci-dessous). [[File:Schematic of adaline.png|centre|vignette|upright=2|Un neurone de l'ADALINE.]] Sur la façade de la machine, on trouvait 16 interrupteurs qui servaient à configurer ce qu'on envoyait sur l'entrée du perceptron. On trouvait aussi 16 potentiomètres pour les poids, ainsi qu'un potentiomètre pour configurer le biais. Niveau sortie, il y avait un cadran de voltmètre qui permettait de mesurer la tension de sortie du circuit. Et n'oublions pas le bouton pour allumer la machine [[File:Knobby ADALINE.jpg|centre|vignette|upright=2|Interface de l'ADALINE.]] [[File:Adaline flow chart.gif|vignette|Adaline, implémentation simplifiée.]] La seconde version de l'ADALINE était appelé la MADALINE (''Memistor Adaptive Linear Neuron or later Adaptive Linear Element''). Elle utilisait quant à elle trois couches de neurones successives. La différence majeure avec l'ADALINE est que les potentiomètres des poids étaient remplacés par un composant appelé un memistor, capable d'une capacité de mémorisation. Memisoter qui ne doit pas être confondu avec le mem'''r'''istor, qui est un autre composant. L'avantage est que cela rendait la puce capable d'apprendre d'elle-même. Un algorithme d'apprentissage était intégré dans la machine, sans avoir besoin de régler les potentiomètres eux-mêmes. D'ailleurs, sur la facade de la machine, on trouvait 16 interrupteurs qui servaient à configurer les bits d'entrée du perceptron, mais les potentiomètres avaient disparus. Pour information, Bernard Widrow, un des concepteurs de l'ADALINE/MADALINE, a publié deux vidéos youtube pour présenter son travail. Dans la seconde vidéo, il présente l'ADALINE et la MADALINE, montre comment elles fonctionnent, les manipules, etc. La première vidéo explique l'algorithme d'apprentissage utilisé dans la MADALINE. Voici un lien vers ces deux vidéos : * [https://www.youtube.com/watch?v=skfNlwEbqck The LMS algorithm and ADALINE. Part II - ADALINE and memistor ADALINE] * [https://www.youtube.com/watch?v=hc2Zj55j1zU The LMS algorithm and ADALINE. Part I - The LMS algorithm] ===La Mark I Perceptron machine=== [[File:Mark I Perceptron, Figure 2 of operator's manual.png|vignette|upright=1|La ''Mark I Perceptron machine'', photographie.]] La première implémentation d'un perceptron était la '''Mark I Perceptron machine'''. Il s'agissait d'un projet de recherche datant de 1958, dirigé par Rosenblatt . Il s'agissait d'un réseau de neurones à trois couches, donc quelque chose de plus complexe que l'ADALINE. La première couche n'appartenait pas au réseau de neurones proprement dit, mais convertissait les tensions provenant de 400 photodétecteurs en bits d'entrée. Les photodétecteurs étaient organisés en un carré de 20 capteurs de côté. La seconde couche avait 512 neurones artificiels, la troisième avait seulement 8 neurones artificiels. Les deux couches de neurones étaient appelées la couche d'association et la couche de réponse, abréviées A et R. Elles sont interconnectées via des potentiomètres, qui permettaient de configurer le poids de chaque connexion, de chaque synapse. Rosenblatt, le directeur du projet, voulait simuler le cerveau humain. Dans ce perceptron, la rétine était l'équivalent de la couche de photorécepteur, les couches de neurone étaient l'équivalent du cortex visuel (la portion du cerveau qui s'occupe de la vision). Les deux couches étaient peu, comparé aux nombreuses couches du cortex visuel. Les connexions entre la couche de photorécepteurs et la suivante étaient aléatoires, car Rosenblatt était persuadé que la rétine était connectée aléatoirement au cortex visuel. [[File:Organization of a biological brain and a perceptron.png|centre|vignette|upright=2.5|Organization du Mark I Perceptron, comparé à un modèle très simplifié du cerveau humain.]] ===L'ETANN d'Intel=== L'ETANN (''Electronically Trainable Analog Neural Network'') était un des tout premiers processeurs neuronal, une des toutes première architecture neuromorphique à avoir existé. Elle a été annoncé en 1989 et a été commercialisée la même année. Elle gérait deux couches de 64 neurones chacune, interconnectés par 10240 synapses (80 synapses par neurone). Elle permettait 'implémenter un perceptron basique, avec cependant une option pour créer un réseau de Hopfield. La différence entre les deux étant que les sorties des neurones sont bouclées sur les entrées. Les neurones restent implémentés avec des circuits analogiques, à savoir des amplificateurs analogiques configurés en montage sommateur, couplés à un circuit multiplieur (la rumeur dit que c'était un multiplieur différentiel de Gilbert à 4 quadrant). Le tout était suivi par 64 circuits pour générer les potentiels d'action (une fonction sigmoïde matérielle). L'ETANN incorporait beaucoup de synapses, donc beaucoup de poids. Pour tous les gérer, Intel a du recourir à une solution assez élégante : mémoriser les poids dans une mémoire, séparée des autres circuits. Intuitivement, le choix aurait du porter sur une mémoire RAM, mais ils étaient en réalité mémorisés dans une mémoire EEPROM non-volatile. Les poids des synapses étaient des entiers en virgule fixe codés sur 8 bits, donc en binaire, pas en analogique. Avant d'être envoyés au neurone, les poids devaient être convertis en tensions analogiques, avec un convertisseur numérique-analogique dédié. [[File:Microarchitecture de l'ETANN.png|centre|vignette|upright=2.5|Microarchitecture de l'ETANN]] Le fait que les poids étaient mémorisés dans une EEPROM avait autant de défauts que de désavantages. Des avantages car il n'y avait pas besoin de circuits de rafraichissement, nécessaires pour les DRAM. Par contre, les changements de poids étaient lents, ce qui fait que la puce n'était pas très rapide. Et la quantité de reprogrammation était limitée à quelques dizaines ou centaines de millions de réécritures, au-delà lesquelles la EEPROM s'abimait. Mais une fois que le circuit avait été entrainé, il n'y avait plus besoin de changer les poids. L'architecture de l'ETANN a été décrite dans deux articles, qui ne sont malheureusement plus facilement accesibles librement sur le net. Voici les noms de ces deux articles : * "An electrically trainable artificial neural network (ETANN) with 10240 floating gate synapses." * "Implementation and performance of an analog nonvolatile neural network." ==Les accélérateurs d'applications d'intelligence artificielle== Les architectures précédentes utilisaient toutes des neurones analogiques, au moins partiellement. La raison est qu'un circuit binaire équivalent aurait utilisé beaucoup de portes logiques. Imaginez : une dizaine/centaine de circuits multiplieurs, suivis par un circuit additionneur multiopérande. L'implémentation binaire aurait été très gourmande en portes logiques. Et ce même en utilisant des poids entiers, alors que les poids flottants codés sur 16/32 bits donnent de meilleurs résultats. Cependant, ce n'est plus vraiment un problème de nos jours. La loi de Moore et la miniaturisation qui en découle ont changé la donne. Autant les ordinateurs des années 50-90 devaient faire avec un budget en transistor limité, autant les puces modernes peuvent parfaitement implémenter des neurones artificiels avec des circuits binaires. Et elles ne s'en privent pas, il existe de nombreuses puces dites '''accélératrices d'IA''' qui effectuent des calculs entiers/flottants pour émuler un neurone artificiel. Cependant, n'allez pas croire qu'elles implémentent des neurones directement en matériel, elles font autrement. ===La représentation matricielle d'un réseau de neurone=== Les perceptrons sont des réseaux très simples, surtout comparé aux réseaux de neurones modernes. Ces derniers sont beaucoup plus complexes, avec plusieurs centaines de couches et des interconnexions très complexes entre elles. La majorité des applications d'intelligence artificielle utilise des réseaux de neurones de ce genre. Pour de telles applications, le réseau de neurone est implémenté en logiciel, avec une implémentation particulière. Le réseau de neurone est représenté par une matrice. Les interconnexions entre neurones sont mémorisées dans des matrices, qui mémorisent le poids de chaque synapse. Les bits de sortie de chaque couche de neurone forment un vecteur, ce qui fait que les calculs se résument à multiplier des vecteurs d'entrée par une matrice de poids, pour obtenir le vecteur de sortie. Les accélérateurs d'IA sont conçus pour faire de tels calculs matriciels. [[File:Fully connected neural network and it's expression as a tensor product.jpg|centre|vignette|upright=2|Réseaux de neurone représenté par une matrice.]] : Une telle représentation est liée au fait qu'un graphe peut être encodé par une matrice. Ici, le graphe formé par les neurones et leurs interconnexions est représenté par une matrice de connectivité, améliorée pour tenir compte des poids des synapses. ===Les accélérateurs d'intelligence artificielle=== Des puces ont été inventées pour accélérer ces calculs matriciels, pour accélérer en priorité les logiciels d'intelligence artificielle. Aussi, elles sont appelées '''accélérateur d'IA'''. Elles sont fortement différentes des précédentes, dans le sens où elles n'implémentent pas des neurones en matériel, mais effectuent simplement des calculs matriciels. Là où les simulateurs de neurones implémentent des perceptrons, voire des équations différentielles, les accélérateurs d'IA font des calculs sur des matrices, qui contiennent des nombres flottants. Pour accélérer les calculs, elles utilisent souvent des flottants spécialisés, avec une faible précision, qui sont codés sur 16 bits, rarement 32. Les accélérateurs d'IA exécutent quasi-exclusivement des additions et des multiplications matricielles, qui s'implémentent avec des additions et multiplications arithmétiques usuelles. Les accélérateurs l'IA sont spécialisés pour réaliser en parallèle un très grand nombre d'opérations MAD (une multiplication suivie d'une addition). En soi, les circuits MAD ne sont pas compliqués, mais la difficulté tient à lire/écrire un grand nombre d'opérandes depuis la mémoire. La hiérarchie mémoire de ces accélérateurs est donc assez compliquée. Les accélérateurs l'IA sont spécialisés pour exécuter un très grand nombre d'opérations arithmétiques en parallèle. Les processeurs récents ne sont pas capables de faire autant que calculs en parallèle que nécessaire, mais les cartes graphiques récentes le peuvent. Ce qui explique que les cartes graphiques récentes incorporent des technologies pour accélérer les calculs d'IA. Par exemple, les cartes NVIDIA récentes incorporent des cœurs ''Tensor Core'' spécialisés dans les calculs matriciels, ces derniers étant fortement utilisés dans les réseaux de neurones logiciels. On peut classer les accélérateurs en deux types : les architectures temporelles et spatiales. Les '''architectures temporelles''' lisent toutes les opérandes depuis une mémoire globale, avec éventuellement des caches ou des ''local store'' pour limiter la casse. Elles sont composées d'un grand nombre d'unités de calcul, de circuits de contrôle et d'une mémoire RAM de grande capacité. Les '''architectures spatiales''' sont composées d'un grand nombre de cœurs, qui disposent chacun de sa propre mémoire associée. Les coeurs sont reliés entre eux par un réseau d'interconnexion complexe. [[File:Brainchip NPU Mesh.png|centre|vignette|upright=2|Architectures spatiale.]] : Une revue des architecture utilsiées sur les accélérateurs d'IA de Google, les fameux TPU, est disponible ici : [https://considerthebulldog.com/tte-tpu/ Touching the Elephant - TPUs, Understanding the Tensor Processing Unit] ==Les architectures neuromorphiques== Passons aux architectures neuromorphiques. Avant toute chose, précisons que nous allons faire une séparation totalement arbitraire entre perceptrons matériels et architectures neuromorphiques. La séparation est liée à l'implémentation du neurone. Les architectures précédentes se contentent de neurones simples, très simples, qu'on peut émuler avec des multiplieurs-additionneurs. Mais les architectures neuromorphiques utilisent des neurones plus réalistes, plus complexes. Elles cherchent à simuler le cerveau humain, à être réaliste au point de vue cellulaire. Les architectures neuromorphiques mélangent circuits numériques et circuits analogiques. Les poids des synapses sont mémorisés dans une mémoire RAM, alors que les neurones sont implémentés en analogique. Pour faire l'interface entre les deux, le circuit intègre des circuits de conversion analogique-numérique, ainsi que des circuits de conversion inverse, entre la mémoire et les neurones/synapses. Il n'y a pas le choix, les modèles réalistes des neurones se basent sur des équations différentielles dont l'implémentation est beaucoup plus simple en analogique. Surtout que l'on a pas besoin d'une précision importante et que l'imprécision des circuits analogiques n'est alors pas un problème. Les architectures neuromorphiques sont donc des '''circuits hybrides analogiques-numériques'''. Si vous voulez un aperçu de l'état de l'art sur le sujet, voici des liens qui devraient vous intéresser : * [https://www.frontiersin.org/journals/neuroscience/articles/10.3389/fnins.2011.00073/full Neuromorphic silicon neuron circuits] * [https://www.sciencedirect.com/science/article/pii/S2095809919306356 A Survey of Accelerator Architectures for Deep Neural Networks] ===Historique partiel des architectures neuromorphiques=== Mine de rien, la simulation logicielle d'un système nerveux, même simple, demande beaucoup de puissance de calcul. Par exemple, Markam, un des utilisateurs du supercalculateur Blue-gene a déclaré qu'il était capable de simuler seulement 50.000 neurones en temps réel biologique (à la même vitesse que ce qui se passe dans un vrai réseau de neurones). Pour simuler 1 millions de neurones, cela prendrait 8 à 10 fois plus de temps que le temps réel biologique et serait réellement impraticable. Mais avec les technologies VLSI récentes, on peut créer des circuits électroniques capables de simuler des réseaux de neurones matériels. On peut ainsi créer des circuits électroniques qui fonctionnent comme un neurone, dans le sens où la tension et le courant à leurs bornes suit les mêmes équations qu'un neurone. Ce n'est pas la première fois que des chips matériels sont créés pour accélérer des simulations très spécifiques. Il existe par exemple des systèmes matériels spécialement conçus pour les simulations physiques de champ électriques ou gravitationnels, comme le projet GRAPE. Quelques puces neuromorphiques ont vu le jour. Au niveau industriel, il y a quelques puces basées sur ce principe. * Une entreprise du nom de CogniMem a déjà commercialisé un accélérateur neuromorphique comprenant trois couches de respectivement 256, 1024, et 16392 neurones. L'ensemble fonctionne à la fréquence de 27 Mhz. * En 2014, IBM a sorti sa puce TrueNorth, utilisée dans le projet SyNAPSE du DARPA, ce dernier a permis de créer une carte accélératrice qui se connecte sur PC via un port US. La puce TrueNorth contient 4096 coeurs, chacun contient 256 neurones, reliés entre eux par 262144 (256*256) synapses. * En 2017, Intel a sorti sa puce Loihi. D'autres projets d'architectures neuromorphiques avaient pour but avoué de simuler un cerveau humain, ou du moins une portion de celui-ci, afin de faire avancer la biologie. Le projet BrainScaleS est à l'origine d'un circuit VLSI de 200000 neurones et 49 millions de synapses. Le projet Neurogrid du groupe de recherche "brain in silicon", de l'université de Stanford. Celui travaille sur la simulation du cortex, une région du cerveau qui contient des neurones spécialisés appelés neurones pyramidaux. Ce groupe de recherche a déjà créé une puce non-programmable : le câblage des synapses ne peut pas être modifié, mais les paramètres des synapses sont configurables. Enfin, certains chercheurs du MIT ont créé un simulateur matériel simulant quelques neurones, dans un but de recherche fondamentale sur le comportement des récepteurs endo-cannabinoide de la membrane des neurones. ===La modélisation théorique d'un neurone et d'une synapse=== Comme dit plus haut, les architectures neuromorphiques utilisent des neurones artificiels assez réalistes. Aussi, vous ne serez pas étonnés d'être obligés de voir ce qu'est un neurone et une synapse en détail avant de poursuivre. Préparez-vous : le cours de biologie arrive. Simuler le véritable comportement d'un neurone ou d'une synapse coûterait vraiment beaucoup de circuits. À la place, les concepteurs de simulateurs logiciels et matériels utilisent des neurones simplifiés, dont la relation entre tension et courant (influx nerveux) est décrite par une équation relativement simple, et surtout approximative. Le premier type de neurone se base sur un principe relativement simple : il modélise le principe qui est derrière la conduction de l'influx nerveux. Pour commencer, il faut savoir que l'influx nerveux n'est pas, comme on pourrait le croire, un courant électrique qui parcours l'axone et les dendrites. Les axones et les dendrites ne sont pas des câbles électriques. À la place, cet influx nerveux consiste en une onde de tension, qui se propage sur des segments d'axone, et éventuellement de dendrites (dans la suite, je ne parlerais que d'axone par simplicité). Mais d'où sort cette onde de tension ? Simple : le neurone est une cellule comme une autre, dans laquelle l'intérieur et l'extérieur sont séparés par une membrane : la membrane plasmique. Des deux côtés de cette membrane, on trouve respectivement le milieu intra-cellulaire (dans la cellule), et extra-cellulaire (en-dehors de la cellule). Ces deux milieux sont composés d'une solution qui mélange de l'eau, diverses molécules, et surtout : quelques ions, des atomes de charge non-neutre. En conséquence, chacun de ces milieux est relativement conducteur. L'ensemble forme donc un ensemble formé de deux milieux conducteurs, séparés par une membrane isolante. Deux morceaux de conducteur séparés par un isolant, cela ressemble fortement à un composant électronique que l'on nomme le condensateur. Conséquence : la membrane se comporte comme un condensateur. Des deux côtés de la membrane, les quantités d'ions ne sont pas les mêmes. Par exemple, les quantités de calcium, potassium, et sodium, changent suivant le côté de la membrane où l'on se place. Cela vient du fait que la membrane est percée par de nombreuses molécules qui servent de pompes. Ces pompes vont expulser les ions d'un côté de la membrane vers l'autre côté. Ces pompes vont fonctionner jusqu'à ce que la concentration en ions de l'autre côté de la membrane devienne trop forte. En conséquence, l'intérieur et l'extérieur sont chargés différemment, donnant naissance à une tension de repos, d'environ -70 millivolts. Ces pompes peuvent donc se modéliser comme une tension de repose fixe, de -70 millivolts à -30 millivolts (selon le neurone). Lors de l'émission d'un influx nerveux, de petites portes moléculaires vont s'ouvrir dans la membrane, et vont laisser passer sélectivement certains ions, et pas les autres. Ainsi, on va trouver des portes pour le potassium, d'autres pour le sodium, etc. Ces portes, des canaux ioniques, vont donc plus ou moins laisser passer un courant d'ions. Conséquence : ceux-ci sont modélisés par des résistances variables, qui laisseront plus ou moins bien passer le courant. En supposant que seul un seul type d'ion puisse passer la membrane, on trouve alors un condensateur, et une seule résistance. Si on suppose que plusieurs types d'ions peuvent passer la membrane, alors on trouve un modèle plus complexe, composé de plusieurs condensateurs et résistances en parallèle. Si les ions choisis sont le potassium, le sodium, et le calcium, les résistances et condensateurs auront des conductances et capacités d'une certaine valeur : on trouve un '''modèle de type Hodgkin-Huxley'''. [[File:MembraneCircuit.svg|centre|vignette|upright=2|Membrane Circuit]] Dans les deux cas, à partir de ces deux modèles de neurones, on peut obtenir une relation entre courant i et tension V qui a la forme d'une équation différentielle. ===Simuler un neurone à partir de circuits analogiques usuels=== [[File:Implémentation anlogique d'un neurone.jpg|vignette|Implémentation analogique d'un neurone.]] Les premières implémentations de neurones se basent sur des circuits analogiques. Cela vient du fait que dans les modèles de neurones, la tension évolue : * soit via une équation différentielle ; * soit, un potentiel d'action a lieu, faisant passer celle-ci à son maximum. Or, simuler convenablement en matériel l'équation différentielle ne peut se faire convenablement avec des circuits numériques. Quoique, certains ont déjà essayés, avec parfois de bons résultats. Mais il est communément admis que l'analogique est roi pour ce genre de situations. Quoiqu'il en soit, on trouve grosso-modo trois morceaux de circuit dans la majorité des implémentations matérielles de neurones : * un circuit qui simule "le poids de la synapse", sa sensibilité aux influx nerveux entrants ; * un circuit "mémoire", qui stocke l'état actuel de la tension, en faisant varier celle-ci par l'équation différentielle du modèle. * et un circuit qui détecte le dépassement du seuil, et émet un influx nerveux. Il y a aussi quelques subtilités, mais on va simplement parler de l'essentiel. Le circuit qui simule le poids de la synapse peut se résumer dans le cas le plus simple à un simple multiplieur analogique. Mais la majorité des design créent un générateur d'impulsions, des fronts de tension dont la durée dépend de la tension d'entrée (l'influx nerveux). Le circuit qui implémente l'équation différentielle de la membrane en dehors d'un potentiel d'action est conçu à base de résistances, de condensateurs, et éventuellement de bobines : n'importe quel électronicien vous dira que toute équation différentielle peut être modélisée par un circuit ne contenant que des sources de tension, des condensateurs, des bobines, et des résistances. Quant au circuit de détection du dépassement de seuil et de génération du nouvel influx nerveux, un simple amplificateur opérationnel correctement configuré peut suffire. Mais il faut signaler que chaque influx nerveux doit remettre la tension du neurone à la valeur de repos, ce qui demande quelques modifications sur le circuit de l'équation différentielle (un simple interrupteur bien placé peut suffire avec certains designs). Une solution plus silmple conceptuellement utilise des '''memristor''', un composant en cours de développement. Le memristor n'est pas un composant électronique bien précis, et divers modèles théoriques existent à ce jour, chacun d'entre eux ayant des comportements très différents. Ceux-ci peuvent être vus comme des résistances variables, avec quelques particularités. En conséquence, cette résistance a été renommée memristance, pour éviter les confusions. Si jamais du courant positif traverse un memristor, sa memristance augmente. Si le courant est négatif, elle diminue. En clair : ces composants ont une sorte de mémoire du courant qui les a traversés depuis leur initialisation. Pour rentrer dans les détails, la valeur de la memristance dépend de l'intégrale du courant qui est passé dans la memristance. Suivant les modèles de memristor, cette fonction varie énormément. Les memristors permettent de modéliser fidèlement une synapse : il suffit de faire en sorte que les courants qui simulent un influx nerveux soient relativement courts. Grosso-modo, la memristance correspond au poids de la synapse. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures systoliques | prevText=Les architectures systoliques | next=Le matériel réseau | nextText=Le matériel réseau }} </noinclude> o9r9wfexnou387yo3lmf9ph2m1vuoxa Fonctionnement d'un ordinateur/Les ordinateurs de première génération : tubes à vide et mémoires 0 69063 765833 765319 2026-05-02T20:05:44Z Mewtow 31375 /* L'introduction des tambours magnétiques */ 765833 wikitext text/x-wiki Dans les années 50-60, les transistors n'existaient pas. Mais cela n'a pas empêché l'informatique d'exister. À la place des transistors, les ordinateurs de l'époque utilisaient des technologies aujourd'hui abandonnées. Ce chapitre se propose de décrire les technologies de l'époque, à savoir les tubes à vide et les mémoires de l'époque. Ces technologies sont aujourd'hui obsolètes et la plupart ne sont même plus produites du tout. On peut encore en trouver dans des musées, mais leur utilisation réelle est réduite à peau de chagrin. Aussi, nous allons décrire les technologies de l'époque dans ce chapitre, séparé des autres. ==Les tubes à vide== Les processeurs utilisaient des tubes à vide, une sorte d'ancêtre des transistors. Ils fonctionnaient eux aussi comme des interrupteurs commandées par une tension, ou encore comme des amplificateurs rudimentaires. Mais les comparaisons s'arrêtent là. Les tubes à vides n'étaient pas conçu avec des semi-conducteurs, au contraire. [[File:Diode vacuum tube.svg|vignette|Diode avec un tube à vide.]] Les tubes à vide étaient en réalité des ampoules à filament améliorées. Pour rappel, les ampoules à filament étaient des ampoules en verre dans lesquelles on plaçait un filament métallique. Le filament chauffait quand on envoyait du courant dedans et émettait de la lumière. Dans les tubes à vides, le filament n'émet pas de lumière quand on le chauffe : il émet des électrons, de l'électricité. De plus, on ajoute une plaque métalliques appelée l'anode, qui capte des électrons émis par le filament. Le résultat est un circuit qui laisse passer le courant, mais seulement dans un sens : du filament vers l'anode, l'autre sens n'est pas possible vu que l'anode ne peut pas émettre d'électrons. Un tel circuit est appelé une '''diode'''. [[File:Triode vacuum tube FR.png|vignette|Triode.]] Les tubes à vide précédents peuvent être modifiés en ajoutant une grille métallique entre la cathode et l'anode. La grille est alimentée avec une tension électrique, ce qui la charge électriquement. Suivant sa charge, elle laisse plus ou moins passer les électrons de la cathode vers l'anode. Si elle n'est pas chargée, que la tension est de 0 volt, elle ne fera pas obstacle aux électrons et le tube à vide fonctionnera comme une diode basique. Mais si la grille est chargée avec une tension négative, sa charge électrique va repousser les électrons et les empêcher de passer de la cathode vers l'anode. Le tube à vide se comporte alors comme un interrupteur : fermé ou ouvert suivant ce qu'on met sur la grille. Un tel tube à vide est appelée une '''triode''', car c'est une diode à laquelle on a ajouté une entrée pour charger la grille. De tels interrupteurs commandables électriquement sont combinés pour fabriquer des circuits plus élaborés, comme les portes logiques qu'on verra d'ici quelques chapitres. Au vu de ce qu'on vient de dire, on peut facilement deviner que les tubes à vide avaient beaucoup de défauts. Ils étaient assez encombrants, dans le sens où une ampoule prend beaucoup de place. Et il est difficile de miniaturiser une ampoule, personne n'imagine une ampoule de quelques microns de côté, alors que les transistors actuels sont plus petits que ça. De plus, ils consommaient beaucoup de courant et chauffaient. Faire chauffer un filament demande un courant important et une bonne partie de ce courant part en chaleur. De plus, ils étaient assez peu fiables et tombaient en panne assez souvent. Et s'ils étaient assez simples à fabriquer, ils restaient malgré tout chers. Pas étonnant donc qu'ils ait laissé la place aux transistors à semi-conducteurs. [[File:Elektronenroehren-auswahl.jpg|centre|vignette|upright=2|Tubes à vides.]] ==Les mémoires de masse/secondaires== Les tubes à vides étaient surtout utilisés pour fabriquer des processeurs et d'autres circuits annexes, mais les mémoires avaient des technologies séparées du reste, encore plus qu'aujourd'hui. Il n'y avait pas de semi-conducteurs, ce qui fait que l'électronique était alors très différente. Il n'y avait pas de mémoire ROM, de mémoire RAM, ou quoique ce soit d'autres. À la place, les mémoires étaient fabriquées avec des dispositifs magnétiques, mécaniques, acoustiques, et plein d'autres. Il existait déjà des ancêtres des disques durs, à savoir des mémoires magnétiques appelées tambours magnétiques, bandes magnétiques, mémoires à tore de ferrite, etc. Les mémoires RAM, quant à elles, utilisaient des technologies totalement abandonnées : les mémoires à lignes de délai étaient des mémoires acoustiques, les tubes Williams étaient des écrans CRT modifiés, les mémoires à tore de ferrite étaient magnétiques, etc. Le reste du chapitre va développer les technologies mémoire de l’époque. Dans cette section, nous allons nous concentrer sur les mémoires de stockage, qui remplacent ROM et disques durs/SSD. Les mémoires vives, qui remplacent la RAM, aura chacune droit à leur propre section. Les mémoires de masse sont surtout des mémoires magnétiques, comme les tambours magnétiques ou les bandes magnétiques. La seule exception sera celle des cartes perforées. ===Les cartes et rubans perforés=== Les toutes premières mémoires informatiques étaient des mémoires mécaniques. Les mémoires mécaniques les plus connues étaient basées sur du papier : je veux parler des '''cartes et rubans perforés'''. Il s'agit de cartes ou de rubans de papier, parfois de carton ou de plastiques. Les données sont stockées sous la forme de trous dans le ruban ou la carte : un trou code un 1, tandis que l'absence d'un trou code un 0. [[File:2punchCards.jpg|centre|vignette|Carte perforée.]] Les cartes perforées pouvaient contenir assez peu de données, vu qu'il n'y a pas beaucoup de place sur une carte perforée. Elles étaient surtout utilisées pour stocker des programmes, comme le ferait une mémoire ROM de nos jours. De nombreux ordinateurs bootaient depuis une carte perforée, de la même manière que les ordinateurs bootent depuis le BIOS. Par exemple, l'IBM 1401 lisait les 80 premiers caractères d'une carte perforée et les copiait en mémoire, avant de démarrer le programme copié. Si un programme faisait plus de 80 caractères, les 80 premiers caractères contenaient un programme spécialisé, appelé le chargeur d’amorçage, qui s'occupait de charger le reste. [[File:Harvard Mark I program tape.agr.jpg|vignette|Harvard Mark I program tape.agr]] Il a aussi existé des '''rubans perforés''', qui étaient des rouleaux de "papier/carton", perforés de la même manière que les cartes perforées. Ils avaient une capacité mémoire bien plus importante et servaient de mémoire de stockage long-terme. Les rubans perforés et cartes perforées existaient avant l'invention de l'informatique, on en retrouve des utilisations dans les télégraphes, les Téléscripteur, les Fax et d'autres systèmes de communication antérieurs. Des systèmes industriels utilisaient aussi ces technologies. De tels systèmes avaient déjà un clavier, des cartes/rubans perforés et d'autres fonctionnalités qui ont été réutilisés au début de l'informatique. [[File:Papertape2.jpg|centre|vignette|Harvard Mark I program tape.agr]] ===Les tambours magnétiques=== [[File:ERA Magnetic Drum, US, c. 1951 - Computer History Museum - Mountain View, California.jpg|vignette|ERA Magnetic Drum, US, c. 1951 - Computer History Museum - Mountain View, California]] Les '''tambours magnétiques''' sont les ancêtres du disque durs, les deux ayant un fonctionnement assez similaire. La différence principale est que les plateaux sont remplacés par un tube cylindrique, dont la surface est couverte d'un matériau magnétique. L'organisation en pistes est toujours présente, chaque piste étant une ligne horizontale sur le tube central. Par contre, il n'y a pas de tête de lecture/écriture qui se déplace de piste en piste. Les têtes de lecture/écriture sont immobiles, mais il y en a une par piste pour compenser. Le temps de latence d'un tel disque dépend donc uniquement de la vitesse de rotation et de la densité surfacique. Les tambours magnétiques avaient une méthode d'adressage différente selon qu'ils étaient utilisées comme mémoire de masse ou primaire. Les tambours utilisées comme mémoire primaire avaient une adresse par mot mémoire, alors que celles utilisées comme mémoire de masse avaient une adresse par secteur ou par piste. La méthode d'adressage variait suivant le tambour. * Sur certains tambours, chaque piste avait sa propre adresse mémoire. Les pistes étaient de taille variable suivant la marque du tambour magnétique utilisé, mais chacune avait sa propre adresse. * Sur d'autres, chaque piste était découpée en secteurs de taille fixe, comme sur les disques durs, et chaque secteur était adressé en précisant le numéro de piste et un numéro de secteur (similaire à l'adressage CHS des disques durs, en enlevant les plateaux). * Sur d'autres, les secteurs avaient une taille variable, l'adressage se faisait en indiquant le numéro de la piste et la position du secteur dans la piste. * D'autres mémoires utilisaient des systèmes d'adressages différents. Fait surprenant, les tambours magnétiques étaient utilisés comme mémoire de masse, mais aussi comme mémoire primaire, c'est à dire qu'elles avaient la même fonction que la mémoire RAM des PC actuels, malgré leur caractère non-volatile ! Les deux utilisations étaient possibles, tout dépendait de l'ordinateur. ===Les bandes magnétiques=== [[File:Tape Cartridge Detail.jpg|vignette|Cassette audio, bande magnétique.]] Les personnes nées entre les années 80 et 2000 seront sans doute familières avec les cassettes audio, autrefois utilisées pour enregistrer de la musique avant l'apparition du CD. Et celles nées avant savent que ces cassettes audio étaient utilisée sur d'anciens micro-ordinateurs comme support de stockage. Par exemple, les micro-ordinateurs Commodore ou Amiga avaient pour certains un lecteur de cassette, qui permettait de lire des programmes enregistrés sur une "cassette audio". [[File:472 es.jpg|centre|vignette|upright=2|Micro-ordinateur Amstrad CPC 472.]] Les cassettes audio sont un exemple de '''mémoire à bandes magnétiques''', à savoir des mémoires de masse composées d'un long ruban magnétisable. Il en existe plusieurs types, allant des grosses bandes magnétiques utilisées sur les mainframes aux vielles cassettes audio. Elles se distinguent surtout par les dimensions du ruban magnétique, à savoir sa longueur et sa largeur. Les bandes magnétiques étaient utilisées comme mémoire de masse sur les anciens ''mainframes'' au tout début de l'informatique, avant que celle-ci ne devienne grand public. Les bandes étaient alors de grande taille, très large, mais aussi très longues. {| |[[File:Ruban magnétique grand format 331-6-005.jpg|vignette|Ruban magnétique grand format 331-6-005]] |[[File:AstrotypeTapes.jpg|vignette|Ruban magnétique petit format.]]]] |} [[File:PDP-8 Tape Drives (16324176653).jpg|vignette|upright=1|Bande magnétique d'un ordinateur Robotron PDP-8.]] Les bandes magnétiques sont lues/écrites comme le serait un parchemin, à savoir qu'elles sont déroulées à une extrémité et ré-enroulées sur l'autre. Le ruban magnétique est lu par un '''lecteur de bande magnétique''', aussi appelé le lecteur, qui est composé d'une tête de lecture et de bobines. Le ruban magnétique est déroulé/enroulé par un système contenant au moins deux bobines, entrainées par des moteurs, avec des systèmes pour étirer et stabiliser le ruban magnétique. Le ruban défile sous un système comprenant une ou plusieurs têtes de lecture, qui mesure le magnétisme de la bande qui défile et en déduit les données stockées dessus. Le ruban est lu du début vers la fin et on doit dérouler le ruban magnétique jusqu'à tomber sur la donnée voulue. La conséquence est que les bandes magnétiques sont des mémoires séquentielles. Le lecteur peut faire des retours arrière, en rembobinant le ruban magnétique, en le faisant tourner en sens inverse. L'avance rapide est aussi possible, elle demande juste de dérouler le ruban plus vite. [[File:Esquema de funcionamento de um cartucho de áudio.png|centre|vignette|upright=2|Lecteur de bande magnétique. 1, 5 et 6 sont les bobines d'entrainement, qui font défiler la bande magnétique. 3 est la tête de lecture, 2 et 4 aplatissent la bande magnétique lors de sa lecture.]] Pour comprendre comment sont stockées les données sur une bande magnétique, nous allons prendre l'exemple le plus simple, celui d'un ruban magnétique à 8 pistes. Comme pour un disque dur, un bit est codé en magnétisant une partie de la bande magnétique d'une certaine manière. Reste à voir comment sont répartis les bits sur la bande magnétique. Les bandes magnétiques sont organisées en blocs, comme toutes les mémoires de masse. Les blocs sont séparés par des ''inter-blocs'', les deux prenant une certaine longueur sur la bande. Les inter-blocs sont très courts, comparé aux blocs eux-mêmes. Le début de la bande et sa toute fin n'encodent aucune données. Sur les anciennes bandes magnétiques, la taille des inter-blocs était fixe, mais celle des blocs était décidée par le logiciel qui écrivait sur la bande. Par exemple, si le système d'exploitation utilisait des blocs de 4 kibioctets, la bande magnétique était découpée en blocs de 4 kibioctets séparés par des inter-blocs de taille fixe. De nos jours, la taille des blocs est décidée par la mémoire de masse et le système d'exploitation doit faire avec, comme c'est le cas pour toute les mémoires de masse modernes. [[File:Bandemaglogic.png|centre|vignette|upright=2|Données sur une bande magnétique.]] Reste à voir comment sont encodées les données dans un bloc. Et nous devons préciser que l'encodage utilisé dépend de si on encode de l'audio, de la vidéo, ou des données arbitraires. Les cassettes audio et vidéo utilisaient des encodages spécialisés, analogiques par nature, fort différents des encodages numériques utilisés pour des données arbitraires. Mais nous n'en parlerons pas ici. Pour les données numériques, la solution la plus simple code les octets sur la largeur de la bande. Si on suit la bande magnétique sur sa longueur, on passe d'un octet à l'autre, dans leur ordre de stockage. Un point important est qu'un bit correspond à une portion allongée de la bande magnétique, c'est un petit rectangle orienté sur la longueur. Cela facilite le travail de la tête de lecture, vu que la bande défile sous la tête de lecture. [[File:Esquema da leitura da fita magnética de um cartucho áudio.png|centre|vignette|upright=2|Octet encodé sur une bande magnétique à 8 pistes. L'octet est le rectangle/encadré, un bit est la portion de la piste en gras.]] Une solution alternative, la plus utilisée de nos jours, encode les octets non pas à la perpendiculaire, en largeur, mais en biais, en diagonale. C'est la solution dite de l''''enregistrement hélicoïdal''', où les octets sont placés comme illustré ci-dessous. : L'idée marche aussi en mettant plusieurs octets sur la largeur, ou même un nombre arbitraire de bits, tant que le nombre de tête de lecture est adapté en conséquence. [[File:Bandelinvshel.png|centre|vignette|upright=2|Comparaison entre enregistrement linéaire et hélicoïdal.]] ==Les mémoires à tore de ferrite== Les premières mémoires de masse magnétiques sont sans conteste les '''mémoires à tores de ferrites'''. Ce sont des mémoires magnétiques, un peu comme les disques durs, même si les différences sont nombreuses. Elles sont donc naturellement non-volatiles. Pourtant, elles étaient surtout utilisées comme mémoire principale, comme un équivalent de la RAM. Elles sont formées d'une matrice de tores fabriqués dans un matériau magnétique (ferromagnétique pour être précis), le plus souvent de la ferrite. Ces tores peuvent être magnétisés dans deux sens différents, ce qui leur permet de coder un bit. [[File:KL CoreMemory Macro.jpg|centre|vignette|Mémoire à tores de ferrite réelle (avec les fils).]] ===Le fonctionnement d'une mémoire à tore de ferrite=== L'ensemble formait une sorte de tableau où chaque tore a deux positions : une position X et une autre position Y. Deux fils servent pour l'adressage : le fil Y traverse tous les tores d'une ligne, alors que le fil X traverse tous les tores placés sur la même colonne. Quand une tension est envoyée sur un fil Y et un fil X, le tore à l'intersection des deux fils est activé : il peut alors être lu ou écrit. Plus précisément, chaque fil est parcouru par une tension légèrement supérieure à la moitié de la tension nécessaire pour aimanter le tore : ainsi, la somme des deux tensions est supérieure à la tension d'aimantation, mais seulement à l'intersection des deux fils, sur le tore à aimanter. Selon la tension envoyée (plus précisément, son signe), le tore sera mis à 0 ou à 1. [[File:Coincident-current magnetic core.svg|centre|vignette|Schéma de la matrice de tores (avec les fils).]] Pour lire ou écrire un bit dans un tore (en changer l'aimantation), il faut que celui-ci soit soumis à un champ magnétique supérieur à une valeur déterminée. pour cela, chaque tore est parcouru par quatre fils : le fil X et Y servent pour l'adressage, comme dit plus haut, un fil S (''Sense'') pour les lectures, et un fil Z pour les écritures. En faisant passer un courant ou une tension dans ces fils, un champ magnétique se forme autour d'eux, ce qui agit sur les tores de ferrites ce qui permet de les aimanter (écriture) ou de lire leur contenu. [[File:Single coincident-current magnetic core.svg|centre|vignette|Un tore de ferrite.]] La lecture s'effectue via le fil nommé ''Sense''. Toute lecture est destructrice : le bit stocké dans le tore est effacé après chaque lecture. En effet, chaque lecture commence par mettre à zéro le bit à lire. Cette mise à zéro va ou non, faire changer le champ magnétique dans le fil ''Sense'', entrainant l'apparition d'un courant et d'une tension. Suite à cette mise à zéro, la mémoire regarde ce qui se passe sur ce fil. Si le bit était déjà à zéro avant la lecture, aucun champ magnétique ne sera créé : il ne se passe rien sur le fil ''Sense''. Mais si ce bit était à 1, le tore va changer de polarité, entrainant l'apparition d'une tension sur ce fil, durant un temps très bref (le temps de changement de polarité du tore). La lecture s'effectue donc via le fil ''Sense'', suivant ce qui s'y passe lors d'une mise à zéro d'un bit. L'écriture s'effectue d'une manière différente, quoique similaire, en utilisant le fil ''Z''. Lors d'une écriture d'un tore, les fils X et Y qui correspondent sont alimentés en tension, de telle manière qu'un 1 soit écrit dans le tore. Pour écrire un 1, cela suffit largement. Mais pour écrire un zéro, il faut que quelque chose annule cette écriture, en compensant le champ magnétique créé par ces deux fils. Pour cela, on fait passer un courant dans le fil ''Inhibit'', afin de créer un champ magnétique contraire dans le tore. Cela annule l'écriture du 1 en inhibant le champ crée par les fils X et Y. La plupart des mémoires de ce type utilisaient deux fils ''Sense'' et ''Inhibit'' séparés. Mais vu que le fil ''Inhibit'' et ''Sense'' ne sont jamais utilisés en même temps, certaines mémoires à tore ont fusionné ces deux fils en un seul. ===Une mémoire très fiable=== Les mémoires à tore de ferrite sont des mémoires non-volatiles très fiables. Elles ne s'effacent pas dans le temps et peuvent supporter des conditions très dures sans perdre de données. Par exemple, elles peuvent résister à des radiations extrêmes , voire à une EMP, sans perdre de données. C'est pour cette raison qu'elles ont beaucoup été utilisées dans des applications aérospatiales, dans l'industrie, voire dans les applications militaires. Elles étaient encore utilisées dans ces applications bien après l'apparition des premières mémoires à semi-conducteurs. Par contre, ces mémoires étaient très sensibles à la température. Les tensions à envoyer aux tores devaient avoir une valeur bien précise, qui dépend énormément de la température ambiante. Sur les premières mémoires à tore de ferrite, les circuits de contrôle de la mémoire contenaient un senseur de température et ajustaient les tensions appliquées en fonction des mesures. Une autre solution consistait à placer la mémoire dans une petite boite dont la température était maintenue stable. Généralement, la boite était chauffée au-dessus de la température ambiante, car maintenir une température constante est facile quand celle-ci est plus élevée que la normale. Chauffer une petite chambre est plus simple que de la refroidir, surtout pour une petite boite. Autant une simple résistance permet de chauffer la boite, autant utiliser un réfrigérateur pour une mémoire de ce type était clairement une mauvaise solution. Le défaut principal de ces mémoires est que leur processus de fabrication est difficile à industrialiser. La fabrication de ces mémoires s'est surtout fait de main d'homme, sans machines ou du moins avec peu d'outils. Le fait que ces mémoires ne puisse pas facilement être fabriquées par des machines fait que ces mémoires sont difficiles à miniaturiser : la miniaturisation ne va pas aussi loin que pour les mémoires à semi-conducteurs et on peut tout au plus stocker quelques centaines de bits sur une puce, voire quelques milliers. La capacité de telles mémoire est généralement assez faible. Par contre, leurs performances étaient assez honorables. On estime que les premières mémoires de ce type avaient un temps d'accès mémoire d'environ 6 µs, ce qui fait une fréquence d'environ 166.7 kilohertz. Le temps d'accès est ensuite descendu à 0.6 µs durant les années 70, ce qui faisait une fréquence proche du mégahertz. [[File:Ferrite core memory.jpg|centre|vignette|upright=1.5|Mémoire à tore Ferrite miniaturisée. La puce fait 10 centimètres de coté et contient 64 mots de 64 bits, soit 4 kikioctets.]] ==Les mémoires à ligne de délai== Les '''mémoires à ligne de délai''' sont des mémoires volatiles mécaniques, séquentielles, qui ont une capacité extrêmement faible (quelques centaines de bits). Elles ont été inventées suite à des technologies liées aux radars, dans les laboratoires militaires. Elles sont basées sur un tube de matière, dans lequel se propage une onde sonore : celui-ci sert de support de mémorisation. Les premières mémoires de ce type utilisaient des tubes de mercure, d'où leur nom de '''lignes à délai de mercure'''. Mais les inconvénients du mercure (toxicité, notamment) ont mené au remplacement du mercure par des tubes de cuivre ou d'autre matériaux magnétiques : ce sont des '''lignes de délai à torsion de fil'''. {| |[[File:Mercury memory.jpg|vignette|SEAC Computer, avec une mémoire à ligne de Mercure.]] |[[File:Torsion wire delay line.jpg|vignette|Exemple de ligne de délai à torsion de fil.]] |} Un bit est codé par l'absence ou la présence d'une onde sonore dans le tube de matière. Au bout de ce tube, on trouve un microphone et un haut-parleur. Le haut-parleur génère une onde sonore d'un côté du tube, onde qui est reçue de l'autre côté du tube par le microphone. De plus, le haut-parleur et le microphone sont reliés entre eux : le signal capté sur le microphone est envoyé sur le haut-parleur d'entrée. Ce faisant, l'onde sonore circule en boucle dans le circuit : elle est rafraichie sans cesse, à chaque passage. [[File:Delay line memory fr.svg|centre|vignette|upright=2.0|Mémoire à ligne de délai.]] Divers circuits sont présents entre le microphone et le haut-parleur. On trouve notamment des amplificateurs, histoire que les ondes sonores captées ne s'amenuisent pas à force de reparcourir le tube. [[File:SEACComputer 010.jpg|centre|vignette|upright=2.0|Mémoire à tube de mercure.]] Il existe naturellement un petit délai de transmission entre le microphone et le haut-parleur, ainsi qu'un autre délai de propagation dans le tube. Ces délais limitent la capacité de la mémoire, qui dépend du nombre d'ondes sonores qui peuvent parcourir le tube. Chaque bit est codée exactement par une impulsion sonore, qui a une forme et une durée très précise, qui dépend de la qualité du circuit (microphone, haut-parleur, et autres) : notons ce temps <math>\Tau</math>. La capacité totale est, par définition, égale au nombre d'impulsions qui se trouvent en même temps dans le tube de matière (les unes à la suite des autres). Pour la calculer, on peut diviser le temps que met une impulsion à se propager dans le tube, par la durée d'une impulsion. ==Les tubes Williams et Selectron== Les '''tubes ''Williams''''' et '''Selectron''' sont basés sur un écran CRT modifié. Il s'agissait de mémoires de type mémoires vives volatiles qui devaient être rafraichies régulièrement. En clair, ce sont l'ancêtre des mémoires DRAM ! Les ''tubes Williams'' étaient utilisés sur les tout premiers ordinateurs, au tout début de l'histoire de l'informatique, dans les années 50, à une époque où les ordinateurs étaient des monstres qui occupaient une pièce entière et étaient plus proches de petites usines à calcul qu'autre chose. Une technologie alternative basée sur un principe simialire est le ''Tube Selectron''. D'une capacité de 256 bits, il n'a été utilisé que sur un seul ordinateur : le JOHNNIAC de la RAND Corporation. Ils ont tous deux était rapidement remplacé par les mémoires à ligne de délai, plus simples et moins chères. [[File:Williams-tube.jpg|centre|vignette|upright=2|Williams-tube]] ===Les écrans CRT (''Cathode Ray Tube'')=== Tubes Williams et Selectron se basent sur la même technologie : celle des écrans CRT. Un écran CRT est composé de plusieurs composants, qui marchent de concert : un canon à électron, des bobines de contrôle et la surface de l'écran proprement dite. Le canon à électron émet un faisceau d'électron concentré, qui touche la surface de l'écran. Cette dernière, du moins derrière la vitre transparente, est d'une composition chimique particulière et est notamment riche en phosphore. Elle est souvent appelée ''surface phosphorescente''. Quand elle est touchée par le faisceau d’électron, le phosphore s'illumine pendant quelques millisecondes. Les bobines visent à détourner le faisceau d'électron de manière à ce qu'il balaye tout l'écran de gauche à droite et de haut en bas. [[File:Cathode ray tube fr.svg|centre|vignette|upright=2|Cathode ray tube.]] La surface de l'écran est découpée en pixels, et l'intensité du canon varie pour chaque pixel lorsque le faisceau passe sur ce pixelde l'écran. En commandant l'intensité du canon d'électron, on arrive à afficher des images en noir et blanc ainsi. Un canon intense pendant x millisecondes donnera un point blanc sur l'écran, là où tombe de faisceau. un canon éteint donnera un point noir à l'écran. Il est possible de gérer la couleurs avec des écrans CRT plus complexes, mais ce n'est pas le sujet et nous n'en avons pas besoin pour les explications qui vont suivre. ====La physique de la surface phosphorescente : émission secondaire et puits de potentiels==== Un point important est que la physique de la surface phosphorescente n'est pas intuitive et peu donner lieu à des phénomènes assez importants pour ce qui va suivre. Deux d'entre eu vont nous intéresser. Le premier est que les électrons émis par le canaux à électrons frappent la surface phosphorescente, l'illuminent, mais qu'il arrive que des électrons soient piégés dans la surface, à l'endroit de l'impact. En conséquence, une petite charge électrique s'accumule progressivement à chaque passage du faisceau, dans chaque pixel. Les électrons ne restent pas en place de manière permanente, ils finissent par s'échapper après un certain temps, ce qui fait que la charge finit par s'atténuer, mais elle peut durer quelques secondes sur les CRT conçus pour exploiter cet effet au mieux. Le second phénomène est l''''émission secondaire'''. Quand l'énergie du faisceau à électron est trop forte, les électrons naturellement présents dans les atomes du matériau phosphorescent sont dégagés. Les électrons éjectés deviennent alors des électrons libres qui vont allumer les zones alentours, ce qui perturbe l'affichage. Et cela arrive lors que la zone frappée par le faisceau a perdu des électrons et ne s'allume plus. Le résultat est que si une image était affichée sur l'écran auparavant, utiliser un faisceau trop fort l'efface totalement via émission secondaire. Il s'agit là d'un défaut à éviter sur les écrans d'affichage, mais c'est ce phénomène qui est utilisé sur les mémoires à tubes de stockage. ====Les CRT rémanents==== Il existe des écrans CRT conçus pour afficher des images sur une longue durée de temps, et pas seulement pour un 50ème ou 60ème de seconde. Ils sont appelés des '''écrans rémanents''' ou encore '''''storage tubes''''', ou tubes de stockage. Avec eux, l'image affichée s'efface progressivement et lentement, mais reste visible durant quelques secondes. Pour cela, les écran de stockage sont fabriqués en utilisant un matériau phosphorescent spécial, différent de celui des autres CRT, mais le reste du CRT fonctionne de la même manière. La rémanence est liée au premier phénomène mentionné plus haut, à savoir la capture d'électrons par la surface, mais ce phénoméne est maximisé par l'usage du matériau adéquat. Cette rémanence de quelques secondes fait que l'image a besoin d'être rafraichie moins souvent, comparée à un écran CRT normal. Et les mémoires Selectron et de Williams sont basées sur de tels tubes de stockage. La rémanence de l'image a de nombreuses applications et est utile quand on n'a pas besoin d'une réactivité importante. Elle était utile dans les radars, dans certains oscilloscopes qui demandent de capturer des évènements très brefs, etc. Quelques écrans d'ordinateur ont tenté d'utiliser ce système, notamment les écrans de la marque Textronix. Ils portent le nom de '''''Direct-view bistable storage tube'''''. L'idée est d'utiliser un écran CRT rémanent pour afficher une image pour éviter de rafraichir l'écran souvent. Mais pour quel l'écran soit réactif et éviter des artefacts graphiques liés à la rémanence, on est obligé d'effacer l'écran avant d'afficher une nouvelle image. Et l'effacement se fait grâce à l'émission secondaire. Pour cela, de tels écrans contenaient deu faisceaux : un faisceau normal pour afficher une image, un autre faisceau très puissant qui déclenche une émission secondaire pour effacer l'écran. ===Les tubes Williams=== [[File:SWAC 003.jpg|vignette|Image affichée par un tube Williams en fonctionnement, sur l'ordinateur SWAC.]] L'idée derrière les tubes tubes Williams et Selectron est de mémoriser les données sous la forme d'images à l'écran. Un bit à 1 correspond à un pixel allumé/lumineux, un bit à 0 à un pixel éteint/noir. Les écrans de l'époque ne géraient pas la couleur, aussi seul le noir et blanc était disponible (avec les niveaux de gris), ce qui est parfait pour un stockage en binaire. L'image affichée par un écran CRT est affichée ligne par ligne, avec un petit temps de pause entre l'affichage de deux lignes pour repositionner le canon à électron sur le début de la ligne suivante. Par simplicité, sur les tubes Williams, chaque ligne correspond à un mot mémoire, une case mémoire. La taille d'un mot mémoire et le nombre d'adresse dépend donc de la résolution utilisée. Un tube Williams est composé d'un tube CRT rémanent et d'une plaque de métal placée devant l'écran, et de circuits électroniques annexes. La plaque de métal est collée à l'écran, ce qui fait qu'on ne peut pas voir l'écran proprement dit. Elle sert uniquement lors des lectures et pas pour les écritures. Lors d'une lecture, on mesure la tension sur la plaque, qui dépendra du bit stocké au moment de la lecture. La lecture se fait bit par bit, un par un. Elle est reliée à un circuit amplificateur de tension, qui amplifie la tension mesurée par la plaque. On trouve aussi des circuits pour le contrôle de l'écran CRT, à savoir des registres X et Y pour commander les bobines de défléction, de quoi générer un signal d'horloge, et des circuits électroniques pour gérer les lectures/écritures. [[File:WilliamsTubeFigure1.tiff|centre|vignette|upright=2|WilliamsTubeFigure1]] L'écriture et l’effacement de l'image est ce qu'il y a de plus facile : écrire une image utilise un faisceau d’électrons normal qu'on allume ou éteint convenablement lors du balayage de l'écran, l'effacer demande de faire la même chose en utilisant un faisceau très puissant. Un faisceau normal allume le phosphore et le charge pendant un certain temps, alors que l'émission secondaire efface ce qui a été enregistré sur le phosphore. Pour lire un bit, on envoie un faisceau d'électron sur sa position sur l'écran, dont l'intensité est situé juste en-dessous du seuil pour l'émission secondaire. Si le bit stocké est à 0, l'intensité ne sera pas suffisante pour générer une émission secondaire. Mais si cil stocke un 1, la charge électrique stockée sur la surface phosphorescente va s'additionner à l’intensité du faisceau et déclencher une émission secondaire. L’émission secondaire a déclencher une augmentation local de la tension électrique, que la plaque de métal va capter. Un amplifieur amplifie la tension mesurée sur la plaque, pour en faire une tension capable de coder un 0 ou un 1. Vous remarquerez que la lecture est destructrice, ce qui fait que toute lecture de l'écran est suivie par une écriture pour compenser, comme sur les DRAM. [[File:Williams tube timing.jpg|centre|vignette|upright=2|Williams tube timing]] Passons maintenant au rafraichissement mémoire. Il faut rafraichir l'écran pour une raison simple : l'image affichée par l'écran s'efface au bout de quelques millisecondes, quelques secondes, tout dépend du type d'écran utilisé. Le rafraichissement se fait en effectuant une lecture suivie d'une écriture : on récupère le contenu de la mémoire/tube, avant de le réécrire. Autour de la plaque de métal et du tube CRT, on trouve divers circuits qui gèrent les lectures et écritures. Les lectures et écritures se font bit par bit, on peut masquer certains bits lors des écritures, autoriser ou interdire les lectures/écritures durant un temps, etc. [[File:SEACComputer 004.jpg|centre|vignette|upright=2|Fonctionnement d'un tube Williams, avec les circuits associés]] ==Les ordinateurs de première génération : exemples notables== Les ordinateurs de première génération étaient assez rudimentaires, la technologie ne permettait pas de faire des miracles. Ils avaient un processeur contenait quelques milliers de tubes à vide. Le processeur était presque systématiquement une architecture à accumulateur. Ils géraient des opérations simples : addition, soustraction, mais la multiplication et la division sont arrivées assez tard. Ils avaient un jeu d'instruction très limité, atteignant rarement la centaine d'instructions. La mémoire RAM était souvent limitée, de faible capacité. ===L'apparition des programmes stockés en mémoire : le Manchester Baby=== [[File:BabyArchitecture.png|vignette|Architecture de la Manchester Baby.]] Le tout premier ordinateur à programme enregistré en mémoire, le ''Manchester Baby'', était une architecture à accumulateur. Niveau interface, l'ordinateur avait une console avec 32 boutons, des interrupteurs et un écran de sortie sur lequel afficher les résultats. À l'intérieur, il y avait un processeur et une RAM de 32 adresses, fabriquée avec des tubes Williams (abordés dans une annexe à la fin du cours). Chaque adresse mémorisait 32 bits, qui pouvaient encoder soit un nombre, soit une instruction. Le programme devait tenir dans la RAM, avec une instruction par adresse maximum, ce qui limitait les programmes à 32 instructions maximum. Une instruction prenait donc 32 bits, 3 indiquaient quelle opération utiliser, 12 bits d'adresse servait à indiquer où se trouvent la seconde opérande en RAM, les 16 restants sont inutilisés. En théorie, les 12 bits d'adresse permettaient d'adresser 4096 adresses, mais seules 32 étaient réellement présentes. Le processeur avait un registre accumulateur de 32 bits, un ''program counter'' et un registre d'instruction. Il intégrait un additionneur dédié au ''program counter'', mais l'ALU n'avait pas d'additionneur. En conséquence, il ne gérait pas l'addition. À la place, il gérait la soustraction. Il pouvait cependant émuler l'addition à partir d'une soustraction. La soustraction était utilisée pour calculer le complément d'une opérande, et soustraire le complément revient à additionner. L'ALU était une ALU sérielle, à savoir qu'elle faisait les soustractions bit par bit. Le processeur supportait 7 instructions au total : la soustraction, des instructions de branchement et d'accès mémoire, rien d'autre. Les instructions de branchement utilisaient des modes d'adressage très particuliers, qu'on ne retrouve pas sur les ordinateurs modernes. Les branchements inconditionnels utilisaient une forme d'adressage mémoire indirect, pas les adressages usuels pour les branchements. Il n'y avait pas de branchements conditionnels, mais une ''SKIP instruction''. {|class="wikitable" |- ! SUB | Soustrait l'opérande mémoire de l'accumulateur. |- ! CMP | Skippe l'instruction suivante si l'accumulateur a une valeur négative. |- ! JMP | Branchement indirect mémoire. : * L'adresse de destination est lue depuis la mémoire. * L'adresse lue est intégrée dans l'instruction via adressage absolu. |- ! JRP | Branchement relatif indirect. * Lit une opérande depuis la mémoire, l'adresse est intégrée dans l'instruction via adressage absolu. * Additionne l'opérande lue au ''program counter''. |- ! LDN | Instruction LOAD. La donnée lue est inversée lors de la lecture, l'accumulateur contient le complément à deux de la donnée lue après la lecture. |- ! STO | Instruction STORE |- ! STOP | Éteint l'ordinateur. |} ===L'apparition des registres d'indice : le Manchester Mark 1=== Le Manchester Mark 1 était une amélioration du Manchester Baby. Il utilisait 4500 tubes à vide. Le Manchester Baby était un prototype, mais il avait été pensé pour être étendu, notamment afin d'avoir plus de mémoire. C'est pour cela que ses adresses étaient codées sur 12 bits, malgré sa mémoire de seulement 32 mots. Le plan initial, à savoir utiliser une RAM de 4096 mots, a cependant été abandonné pour la Manchester Mark 1. À la place, la RAM a gardé la même taille, à savoir 32 nombres, mais a été complémentée par l’ancêtre du disque dur magnétique, à savoir un tambour magnétique. Le tambour magnétique contenait 40 pages, chacune ayant la même taille que la RAM. L'ordinateur gérait des nombres de 40 bits, mais les instructions étaient codées sur 20 bits. Le processeur gérait maintenant l'addition et quelques opérations logiques (ET et OU), en plus de la soustraction et de la comparaison. De plus, il intégrait deux registres dédiés aux multiplications : un pour le multiplicande, un autre pour le multiplieur. Ils étaient nommés D et R et étaient regroupés dans un seul tube Williams noté M. Cependant, les multiplications étaient réalisées en enchainant une série d'additions, dans l'additionneur-soustracteur. C'était là encore une architecture à accumulateur, sauf qu'elle intégrait aussi des registres d'indice. Les registres d'indices étaient au nom de deux et étaient notés B0 et B1. Lors du chargement d'une instruction, un registre d'indice était sélectionné grâce à un bit de l'instruction. Le contenu de ce registre d'indice était additionné à l'instruction , l'adresse encodée dedans pour être précis, et le résultat était envoyé sur le bus mémoire. La microarchitecture de la machine est illustrée ci-dessous. Elle a une ALU unique capable de faire plusieurs opérations, qui sont représentées dans des rectangles séparés. Les cercles dans le schéma suivant sont des tubes Williams, des écrans CRT modifiés de manière à servir de mémoire DRAM, dont le fonctionnement est détaillée dans le chapitre sur les mémoires historiques. Un tube Williams implémente un banc de registre complet, c'est à dire un groupe de 2 à 10, registres. L'accumulateur est noté A, les deux registres de multiplication sont regroupés dans le tube Williams M, les registres d'indice sont dans le tube noté B. Le tube Williams C regroupe le ''program counter'' et le registre d'instruction. L'additionneur sert à incrémenter le ''program counter'', mais aussi pour les branchements relatifs. La statistation est le nom donné au séquenceur, à l'unité de contrôle, décodeur d'instruction inclus. [[File:MM1Schematic French.svg|centre|vignette|upright=2.5|Architecture de la Manchester Mark 1.]] ===L'introduction des tambours magnétiques=== Le Manchester Mark 1 a introduit l'usage des tambours magnétiques dans un ordinateur, et cet usage a perduré par la suite. Fait surprenant, les tambours magnétiques n'étaient pas utilisés comme mémoire de masse, mais servaient de mémoire primaire, c'est à dire qu'elles avaient la même fonction que la mémoire RAM des PC actuels. Et ce alors que c'était des mémoires magnétiques et avec un caractère non-volatile ! De nombreux ordinateurs de l'époque exécutaient des programmes directement depuis le tambour magnétique. Les instructions étaient mémorisées sur le tambour magnétique, étaient copiées dans un registre d'instruction, puis exécutées. Pour garder des performances correctes, la répartition des instructions dans les secteurs devait être optimisée. Les programmeurs ayant travaillé, par exemple sur l'IBM 650, devaient prendre en compte la manière dont les instructions étaient placées dans et entre les secteurs pour éviter des pertes de performance. L'ordinateur Bull Gamma 3 intégrait une sorte de cache d'instruction pour accélérer l'exécution des programmes depuis le tambour magnétique. Pour l'expliquer avec des termes modernes, le processeur intégrait un ''local store'' dédié aux instructions. Les instructions étaient exécutées depuis ce ''local store'', pas depuis le tambour magnétique. Les échanges entre le ''local store'' et le tambour magnétique se faisaient par groupes de 48 instructions. Le ''local store'' était composé de 8 banques, chacune contenant un groupe de 48 instructions complet. Dans le détail, le Bull Gamma 3 intégrait en réalité 8 ''local store'', appelés des ''Circulating Memories'', chacun pouvant mémoriser un groupe de 48 instructions. Pour exécuter une instruction, le groupe de 48 instructions complet était copié dans une ''Circulating Memory'', puis l'instruction voulue était copiée dans le registre d'instruction. Les ''Circulating Memories'' étaient implémentées avec des mémoires magnéto-résistives à ligne de mercure, qu'on détaillera dans la suite de ce chapitre. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=La tolérance aux pannes | prevText=La tolérance aux pannes | next=Les ordinateurs à encodages non-binaires | nextText=Les ordinateurs à encodages non-binaires }} </noinclude> eqwxxkdfpzwvvevhsd74k6hw64gzlwz Fonctionnement d'un ordinateur/La tolérance aux pannes 0 69231 765832 739328 2026-05-02T20:05:23Z Mewtow 31375 /* La redondance temporelle sur les processeurs multithréadés */ 765832 wikitext text/x-wiki Dans les chapitres précédents, nous avons supposé que les circuits font leur travail et ne commettent pas d'erreurs. Dans les faits, c'est une bonne approximation : il est rare qu'un circuit électronique dysfonctionne soudainement, sauf s'il est assez âgé et qu'il a commencé à se détériorer. Et même quand il y a une erreur, elle passe généralement inaperçue et l'ordinateur continue de fonctionner normalement. Cependant, cela ne signifie pas que les erreurs n'existent pas, et elles sont nombreuses. Les erreurs en question se traduisent le plus souvent par l'inversion d'un bit : un bit censé être à 0 passe à 1, ou inversement. Pour donner un exemple, on peut citer l'incident du 18 mai 2003 dans la petite ville belge de Schaerbeek. Lors d'une élection, la machine à voter électronique enregistra un écart de 4096 voix entre le dépouillement traditionnel et le dépouillement électronique. La faute à un rayon cosmique, qui avait modifié l'état d'un bit de la mémoire de la machine à voter. Mais qu'on se rassure : il existe des techniques pour détecter et corriger ces erreurs. Elles nécessitent toutes l'ajout de matériel, et ce sont ces circuits que nous allons voir ici. Elles sont peu utilisées dans les ordinateurs grand public, mais elles sont très importantes dans les domaines demandant des ordinateurs fiables, comme dans l'automobile, l'aviation, le spatial, l'industrie, etc. Et ce chapitre va expliquer ce qu'elles sont, et aussi comment les circuits élaborés permettent de s'en protéger. ==La cause des erreurs et défauts d'un circuit électronique== Les erreurs peuvent provenir d'un défaut électrique, d'un fil coupé, d'un transistor défaillant, ou tout autre raison qui cause une erreur permanente. Généralement, elles proviennent de l'usure d'un circuit électronique, de son vieillissement. Mais d'autres erreurs sont des erreurs temporaires provenant de phénomènes physiques externes au circuit. Il faut donc distinguer les erreurs permanentes des erreurs transitoires. Les premières perdurent après qu'elles apparaissent, ce sont des défauts permanents, qu'on ne peut pas corriger. Les secondes surviennent brutalement et cessent peu après leur apparition. ===Le vieillissement des circuits électroniques=== [[File:Leiterbahn ausfallort elektromigration.jpg|vignette|upright=1|Interconnexion métallique attaquée par éléctro-migration]] Les circuits électroniques vieillissent. Les transistors vieillissent généralement assez bien, ce sont surtout les interconnexions métalliques entre transistors qui s'usent. La raison est que les interconnexions sont parcourues par des courants électriques assez forts, qui attaquent le métal. Quand un métal est parcourt par du courant, les électrons s'entrechoquent avec les atomes du métal, et ces derniers se déplacent progressivement : c'est le phénomène d''''électro-migration'''. Des défauts apparaissent dans le métal : un atome manquant par-ci par-là, puis des défauts plan, des trous dans le métal, etc. Après un certain temps, ces défauts s'accumulent, au point que les interconnexions peuvent se couper en deux : le fil métallique est cassé. L'électro-migration est d'autant plus forte que le courant est élevé, cela n'a rien d'étonnant. Mais le processus dépend aussi fortement de la température. En première approximation, la durée de vue d'un circuit électronique se calcule approximativement avec cette équation, appelée l'équation de Black : : <math>\text{durée de vie d'un circuit} \propto \frac{1}{I^n} \times \exp{\left( \frac{A}{k_B T} \right)}</math> En clair, elle est d'autant plus faible que le courant est élevé, et que la température l'est aussi. La dépendance au courant est une loi de puissance, elle est donc plus faible que celle avec la température qui est exponentielle. Réduire la température de fonctionnement d'un ordinateur augmente donc drastiquement sa durée de vie. Et vu que plus un ordinateur est utilisé, plus il chauffe, cela explique pourquoi les ordinateurs beaucoup utilisés pour jouer à des jeux vidéos ne durent pas autant que ceux utilisés seulement pour de la bureautique. Un autre facteur est la taille des interconnexions métalliques, en largeur. Plus un fil est épais, large, plus il sera difficile à couper à grand coup d'électro-migration. Et plus les processeurs se miniaturisent plus ces interconnexions sont petites, fines, faciles à casser. Autant cela ne posait pas de problème quand les interconnexions faisaient quelques centaines de micro-mètres, autant les interconnexions modernes de quelques microns se cassent rapidement. ===Les erreurs temporaires=== D'autres erreurs sont cependant temporaires et ont des origines totalement différentes. La plupart proviennent de rayons cosmiques, de perturbations électromagnétiques, de radiations proches, peu importe. Les causes les plus communes sont les rayons cosmiques, des particules à haute énergie produites dans la haute atmosphère et qui traversent celle-ci à haute vitesse. Il arrive qu'elles soient interceptées par le semi-conducteur d'un transistor, ce qui le fait dysfonctionner temporairement. La seconde raison est celle des rayons alpha, provenant de la radioactivité naturelle qu'on trouve un peu partout. Et, ironie du sort, ces rayons alpha proviennent souvent du métal présent dans la puce elle-même ! La cause la plus commune est cependant la température. Plus un processeur ou une mémoire chauffe, moins ses transistors sont fiables. Les erreurs sont d'autant plus communes que la température est élevée. Et une autre raison est que la résistance des fils métalliques augmente avec la température : si un processeur chauffe trop, certains fils deviennent tellement résistifs qu'ils ne font plus passer le courant, ce qui fait que tout se passe comme si le fil était coupé ! C'est pour cela que les ordinateurs tendent à planter quand le processeur ou la mémoire chauffent trop, et vous en avez certainement déjà fait l'expérience. Les erreurs en question peuvent survenir à trois endroits différents : dans les circuits combinatoires, dans les mémoires et registres, lors de la transmission des données dans les interconnexions. ==Les circuits tolérants aux erreurs== Les erreurs peuvent survenir à des endroits très différents dans un ordinateur : dans le processeur, sa mémoire, dans un périphérique, dans le BIOS, etc. Dans ce qui va suivre, nous allons distinguer trois localisations : dans les circuits combinatoires, dans les mémoires et registres, dans les interconnexions entre circuits. Nous allons d'abord voir les techniques utilisées sur les circuits combinatoires, et nous prendrons l'exemple d'une unité de calcul pour simplifier les explications. Puis, nous allons voir ce qu'il en est pour les mémoires, registres, et bus de transmission. La raison est que les techniques utilisées pour les ALU et les mémoires/bus sont différentes en pratique, pour des raisons que nous expliquerons. Pour les circuits combinatoires, les solutions sont diverses, mais on peut les classer en deux types : la redondance temporelle, et la redondance physique. La '''redondance temporelle''' consiste à exécuter un calcul plusieurs fois, pour vérifier si le résultat est le même à chaque exécution. Typiquement, on exécute la même opération deux fois dans l'ALU, et on ne fait rien si les deux résultats sont identiques. Mais si les deux résultats sont différents, alors une erreur a eu lieu. Pour corriger l'erreur, l'idée est d'exécuter le calcul une troisième fois, voire plus, et de garder le résultat majoritaire. La '''redondance physique''', beaucoup plus simple, duplique le circuit et fait fonctionner les circuits dupliqués en parallèle, en leur envoyant les mêmes données au même moment. Les deux circuits sont censés fournir le même résultat si tout va bien. Mais en cas d'erreur de fonctionnement, les deux circuits fourniront un résultat différent, d'au moins un bit. Par exemple, on peut imaginer ce que cela donnerait avec des unités de calcul redondantes : toutes les unités de calcul recevraient les opérandes en même temps, feraient leurs calculs indépendamment les unes des autres, et fourniraient leur résultat à un système qui corrigerait d'éventuelles erreurs de calcul ou pannes. Les deux solutions correspondent à des compromis différents. La redondance temporelle double ou triple les temps de calcul, mais ne duplique pas les circuits. À l'inverse, la redondance physique ne change pas beaucoup les temps de calcul, mais duplique les circuits et augmente le nombre de portes logiques/transistors utilisées. La redondance physique est plus utilisée que la redondance temporelle pour une raison simple : elle capture plus d'erreurs. Une erreur permanente, comme un circuit défectueux, est détectée par la redondance physique, mais pas par la redondance temporelle. La redondance temporelle ne détecte que les erreurs transitoires, celles liées à la température et/ou à des radiations. ===La détection d'erreur par comparaison de deux résultats=== La méthode de détection d'erreur la plus simple consiste à effectuer un calcul deux fois, et à vérifier que les deux opérations donnent le même résultat. Si les deux exécutions du calcul donnent le même résultat, alors on considère qu'il n'y a pas eu d'erreurs. Par contre, si les deux résultats sont différents, alors on sait qu'une erreur a eu lieu. Par contre, une fois l'erreur détectée, on ne peut pas la corriger. Pour connaitre le bon résultat, on est obligé de refaire les calculs, ou d'utiliser d'autres méthodes pour corriger l'erreur. Pour faire les deux calculs, on peut utiliser la redondance temporelle ou la redondance physique. La méthode la plus simple est la redondance physique, qui se contente de dupliquer le circuit, et d'ajouter un comparateur qui vérifie si les deux circuits donnent le même résultat. Le premier processeur à utiliser cette méthode était l'EDVAC, dans les années 1950. Il comprenait deux unités de calcul, et continuait d’exécuter son programme tant que les deux unités de calcul donnaient des résultats identiques. En cas de non-agrément entre les deux unités de calcul, le processeur ré-exécutait l'instruction fautive. Il faut noter que les deux unités de calcul ne sont pas forcément identiques. Un cas classique est celui des circuits multiplieurs : le multiplieur redondant ne fournit par le résultat complet, mais un résultat partiel. Prenons la multiplication A * B = C, la même multiplication mais modulo N fonctionnera aussi : (A mod N) * (B mod N) = (C mod N). L'idée est donc que le second multiplieur fait le calcul modulo N, N choisit de manière à réduire fortement le cout en circuits. Évidemment, cette solution n'est pas aussi puissante que simplement dupliquer le multiplieur : un calcul erroné peut coller parfaitement au résultat mod N adéquat du second multiplieur. Plus N est petit, plus la chance que cela arrive est forte. [[File:Duplication avec comparaison.png|centre|vignette|upright=2|Duplication avec comparaison]] Une autre solution utilise la redondance temporelle. Le calcul est fait deux fois de suite par la même ALU, on met en attente les deux résultats dans deux registres, et on les compare. Là encore, il y a un coût en circuits : il faut ajouter un comparateur et des registres. Elle n'est pas très utilisée, car son compromis en circuits et en performance ne vaut pas le coup. On double le temps de calcul, mais le coût en circuits n'est pas négligeable. On ajoute une seconde ALU d'un côté, deux registres de l'autre, le cout en circuits est significatif dans les deux solutions. Une version améliorée de la redondance temporelle permet de détecter une erreur permanente. L'idée est que l'on exécute le calcul avec les opérandes normaux, puis le même calcul avec les mêmes opérandes décalées de quelques rangs. Le résultat des deux opérations devrait être identique, si ce n'est que le second est décalé de quelques rangs. Dans ce cas, il est possible que les deux résultats ne concordent pas, ce qui permet de détecter une erreur. Cela fonctionne car une erreur permanente fausse un bit précis du résultat, un bit d'un poids bien précis. En décalant les opérandes, on peut capter l'erreur, car elle n'est pas au même endroit entre les deux calculs. ===La correction d'erreur avec redondance physique=== Après avoir vu comment détecter es erreurs, passons maintenant à la correction des erreurs. Pour corriger une erreur, il faut cependant aller plus loin que simplement doubler les circuits ou exécuter un calcul deux fois. Il faut le faire trois fois ! En clair, avoir trois copies d'un même circuit, ou exécuter un calcul trois fois. L'idée est que l'on dispose de trois résultats. S'ils sont identiques, on considère qu'il n'y a pas eu d'erreurs, le cas où les trois résultats sont erronés sont très rares. Mais si ce n'est pas le cas, alors une erreur a survenu, peut-être deux. Dans ce cas, on suppose que sur les trois résultats, l'erreur est le résultat qui diffère des deux autres. L'idée est que si une erreur a lieu, elle ne touche généralement qu'un seul circuit, le cas où deux circuits sont touchés par une erreur simultanée étant assez rare. La méthode se généralise à plus de trois composants, il faut juste que le nombre soit impair. Par exemple, prenons le cas avec 5 circuits. Si un circuit tombe en panne, les quatre autres donneront un résultat correct. Avec 4 sorties contre une, c'est le résultat correct qui l'emportera. Tant que plus de la moitié des composants n'a pas de panne, le vote à majorité donne systématiquement le bon résultat. Par exemple, utiliser 5 composants permet de résister à une panne de 2 composants, en utiliser 7 permet de résister à 3 composants en panne, etc. [[File:Vote à majorité simple.png|centre|vignette|upright=2|Vote à majorité simple]] En clair, on choisit le résultat majoritaire. D'où le fait que la méthode s'appelle le '''vote à majorité'''. Reste à voir comment l'implémenter avec un circuit électronique. L'idée est simplement que les circuits dupliqués sont suivis par un circuit de correction d'erreur, qui choisit le résultat majoritaire. On peut aussi avoir d'autres circuits, mais ce n'est pas systématique. [[File:Tolérance aux pannes matérielle passive.png|centre|vignette|upright=2|Tolérance aux pannes matérielle passive]] La solution la plus simple ne choisit pas la valeur majoritaire, mais applique le vote à majorité au niveau des bits. Pour le dire autrement, le vote à majorité s’effectue alors sur des bits de même poids, de la même colonne, comme illustré ci-dessous. Par exemple, si deux bits sont à 1 et le dernier à 0, alors le bit majoritaire est à 1. [[File:Vote à majorité bit à bit.png|centre|vignette|upright=2|Vote à majorité bit à bit]] En clair, pour chaque colonne, on regarde les bits de même poids, et on détermine quel est le bit majoritaire. Il existe des portes logiques spécifiquement conçues pour faire ce calcul, les ''portes à majorité''. Nous avions vu de telles portes il y a quelques chapitres, nous ne reviendrons pas dessus. Nous allons juste montrer le circuit équivalent à une telle porte, pour 3 entrées : [[File:Majority Logic.png|centre|vignette|upright=1.5|Porte à majorité à trois bits d'entrée.]] On voit que le circuit de vote à majorité est donc très simple ! Il suffit de rajouter deux couches de portes logiques en sortie des circuits dupliqués. Le cout en circuit et en performance est donc très bas ! Pas inexistant, d'où son absence dans les processeurs grand public, mais très faible. C'est pour cela que cette méthode est presque toujours utilisée au lieu de l'usage d'un multiplexeur. Un autre avantage est qu'il n'y a pas besoin de circuit pour détecter l'erreur : elle est corrigée automatiquement par le circuit de vote à majorité, sans vraiment qu'il y ait détection de l'erreur en tant que telle. ==Les architectures parallèles tolérantes aux pannes== Les '''architectures tolérantes aux pannes''' sont des ordinateurs dont le but est la fiabilité, la résistance aux pannes, la tolérance aux erreurs. Elles peuvent continuer de fonctionner même avec un ou plusieurs composants en panne. Elles sont surtout utilisées dans des milieux comme l'aéronautique, les satellites, ou dans tout système dit critique, où des vies peuvent être en jeu. Elles utilisent des circuits tolérants aux erreurs, mais aussi d'autres techniques purement architecturales. [[File:Distribfaultredudance.PNG|vignette|Illustration de la redondance matérielle. On voit sur ce schéma que le processeur, la mémoire et les contrôleurs d’entrée-sortie sont dupliqués.]] La tolérance aux pannes nécessite d'implémenter plusieurs techniques. La principale est l'usage de code correcteurs d'erreur, qui sont notamment utilisés au niveau de la mémoire et des dispositifs de stockage. Pour simplifier, les architectures tolérantes aux pannes utilisent généralement des mémoires RAM de type ECC, éventuellement des technologies RAID pour le disque dur et les SSDs. Les architectures les plus simples se contentent de cela, car la majorité des erreurs proviennent de la mémoire, pas du processeur. Un technique complémentaire revient à dupliquer du matériel en plusieurs exemplaires. Ainsi, si un exemplaire tombe en panne, les autres pourront prendre la relève. Le cout en circuit peut être acceptable pour des applications importantes, comme dans le spatial, l'aviation, l'automobile, etc. Un exemple de redondance souvent utilisé dans les serveurs est la technologie RAID utilisée sur les disques durs, qui consiste à dupliquer les disques durs, à placer les mêmes données sur différents disques durs au cas où l'un d'entre eux tombe en panne. Notons que la technologie RAID combine codes ECC et duplication de disques durs. ===Les architectures parallèles tolérantes aux pannes=== Vous l'avez vu venir, mais certaines architectures tolérantes aux pannes dupliquent le processeur et exécutent le même programme dessus. Si les deux programmes fournissent le même résultat, tout va bien. Mais quand les deux fournissent des résultats différents, on doit alors utiliser un mécanisme de correction, par exemple utiliser un vote à majorité. La technique s'adapte aussi très bien sur les architectures multicœurs. Par exemple, les processeurs multicœurs actuels disposent de plusieurs cœurs, qui sont physiquement identiques, sauf dans quelques cas spécifiques. Aussi, il est possible d’exécuter un même programme en plusieurs exemplaires, plusieurs instances : un par cœur. Généralement, les processeurs/cœurs exécutent tous le même programme en même temps, en parallèle les uns des autres. Ils effectuent la même opération en même temps, aux mêmes cycles d'horloge, ils sont parfaitement synchronisés. Ainsi, si un processeur tombe en panne, les autres peuvent continuer le travail immédiatement. Un tel système est appelé un '''système ''lockstep'''''. De tels systèmes permettent de détecter les erreurs de fonctionnement et éventuellement de les corriger. Une autre possibilité est que les différents processeurs exécutent le même programme, avec les mêmes données, mais sans garanties de synchronisation fixe. Ainsi, quand un processeur plante ou a une erreur, les autres peuvent reprendre la suite, avec cependant un léger décalage. Il arrive aussi que ce ne soit pas le cas, et qu'un seul processeur fonctionne, pendant que les autres servent de réserve activable en cas de panne, ce qui fait qu'il ne s'agit pas vraiment d'une architecture parallèle. Ils sont parfois couplés avec des systèmes comme une sauvegarde périodique du programme en cours d’exécution. Mais concentrons-nous sur le cas où les processeurs fonctionnent en parallèle. La mémoire peut être dupliquée ou non. Il est en théorie possible d'utiliser plusieurs processeurs combinés avec une mémoire unique, qui est alors une mémoire ECC. On se retrouve alors avec un système à mémoire partagée, de type MISD. À l'opposé, il est possible d'avoir autant de processeurs que de mémoires, ce qui correspond à une architecture distribuée où tous les processeurs exécutent le même programme. Ces deux choix sont des cas extrêmes et il est possible d'imaginer des cas où le nombre de processeur et de mémoire est différent, avec un système d'interconnexion complexe entre processeur et mémoire. ===Les systèmes ''lockstep'' : ''double'' et ''triple modular redundancy''=== Dans ce qui suit, nous allons étudier les systèmes ''lockstep'', conceptuellement plus simples que les autres. Nous allons étudier comment on détecte et corrige les erreurs sur un tel système. Ici, nous allons supposer que l'on a 2, 3, 4 processeurs, auxquels nous allons ajouter un circuit qui se charge de détecter si un processeur a fait une erreur, et de la corriger si besoin. Appelons-le le '''circuit d'interface ECC'''. Pour illustrer le tout, imaginons que les processeurs soient connectés à une mémoire ECC unique. Le circuit d'interface ECC est alors situé entre la mémoire et le processeur, éventuellement entre le CPU et les entrées-sorties. Les lectures et écritures de chaque processeur sont simultanées, car on suppose les CPU identiques et qu'ils exécutent le même programme. Dans ce cas, le circuit d'interface ECC reçoit les données et adresses de tous les processeurs, et ils vérifient si tous les résultats sont identiques. Si ce n'est pas le cas, il y a une erreur et il faut la corriger, ou du moins faire quelque chose. ====La ''double modular redundancy''==== Les systèmes ''lockstep'' les plus simples n'utilisent que deux processeurs. On peut détecter une erreur en comparant la sortie des deux processeurs : si elle est différente, on est certain qu'il y a eu une erreur (on suppose qu'il n'y en a pas eu en cas d'accord entre les deux processeurs). Une fois l'erreur détectée, on ne peut cependant pas la corriger. [[File:Duplication avec comparaison.png|centre|vignette|upright=2|Duplication avec comparaison]] Il est cependant possible de corriger des erreurs en ajoutant encore de la redondance. Le système précédent, à deux processeurs, est dupliqué en deux exemplaires minimum, parfois plus. Chaque exemplaire est appelé une unité dans ce qui suit. L'idée est que si on détecte une erreur dans une unité, on n'utilise pas le résultat invalide qu'elle fournit. À la place, on prend le résultat fournit par une autre unité dont le résultat est valide. Pour faire ce choix, on utilise un simple multiplexeur ou un switch. La configuration du multiplexeur se fait en utilisant les bits de sortie des comparateurs, qui sont combinés à travers un encodeur. [[File:Pair And Spare.png|centre|vignette|upright=2|Pair And Spare]] Un exemple typique est l'architecture Stratus (aussi connue IBM/System 88). Celui-ci contient quatre processeurs logiques qui font leurs calculs en parallèle : le résultat est choisi parmi les processeurs sans pannes. Une panne ou erreur est détectée avec duplication par comparaison : chaque processeur logique est dupliqué et une panne est détectée si les deux processeurs sont en désaccord sur le résultat. L'ensemble contient donc huit processeurs. ====La ''triple modular redundancy'' et le vote à majorité==== Le ''double modular redundancy'' ne permet que de détecter les erreurs dans le cas le plus simple, et a un cout en circuits très important dans les versions améliorées où des unités sont dupliquées. Mais il existe une méthode beaucoup plus simple qui d'avoir une capacité de correction d'erreur importante, tout en ayant un cout en circuit assez faible. Il s'agit de la ''triple modular redundancy'' et de ses améliorations. La méthode la plus simple utilise trois processeurs. L'idée est de prendre le résultat majoritaire parmi les trois résultats fournit. Si les trois résultats sont identiques, on considère qu'il n'y a pas d'erreur vu que la possibilité d'une triple erreur est très rare. Mais si les résultats sont différents, on suppose que le résultat invalide est celui qui diffère des deux autres, car la probabilité d'une double erreur est plus rare que celle d'une erreur unique. Pour cela, on ajoute un circuit de vote à majorité en sortie des trois processeurs. Le circuit en question a été vu il y a quelques chapitres, dans le chapitre sur les circuits correcteurs d'erreur, c'est un circuit bit à bit, qui agit sur des bits individuels. : La méthode du vote à majorité peut s'adapter à plus de 3 processeurs. Par exemple, si on a 7 processeurs, et que 5 d'entre eux fournissent le même résultat, alors ce résultat est valide et c'est les deux autres qui ont de bonnes chances d'être faux. [[File:Tolérance aux pannes matérielle passive.png|centre|vignette|upright=2|Tolérance aux pannes matérielle passive]] Le vote à majorité peut s'utiliser pour les communications avec la mémoire : le circuit reçoit les adresses et données de chaque processeur, fait un vote à majorité, et envoie le résultat à la RAM. Le vote à majorité a été utilisé sur pas mal de mainframes anciens, où les processeurs étaient dupliqués et les entrées-sorties des processeurs étaient combinés par un vote à majorité. Le circuit de vote à majorité est un point faillible du système : s'il tombe en panne, tout le système tombe en panne. Pour éviter cela, il est là possible de dupliquer le système de vote à majorité. Mais cela n'a d'utilité que dans des cas précis. Par exemple, c'est très utile si la mémoire est dupliquée, si le système contient plusieurs mémoires. Dans ce cas, chaque mémoire est associée à un circuit de vote à majorité qui lui est propre. [[File:Vote à majorité sur les lectures et écritures - optimisé.png|centre|vignette|upright=2|Vote à majorité sur les lectures et écritures - optimisé]] Il faut noter que les processeurs utilisés pour le vote à majorité ne sont pas forcément identiques ! Bien sûr, tout est plus simple s'ils sont identiques et qu'ils exécutent exactement le même programme, le même code binaire. Mais il est possible d'utiliser des processeurs différents. Par exemple, le Boeing 777 disposait, dans ses circuits de contrôle, d'un système de ce genre. Il contenait trois unités, chaque unité contenant trois processeurs : un Intel 80486, Un Motorola 68040 et un AMD 29050. Les résultats calculés par les trois processeurs étaient envoyés à un système de vote à majorité qui vérifiait que les trois processeurs fournissaient le même résultat. Faire ainsi permet de se protéger des erreurs de conception du processeur. En effet, tous les processeurs commerciaux possèdent des bugs, des défauts de conception, qui se manifestent souvent dans des conditions très précises et qui sont souvent sans conséquences. Mais dans des domaines où des vies sont en jeu, on ne peut pas faire comme si ces bugs n'existaient pas et on doit trouver un moyen de s'en protéger au mieux. D'où le fait d'utiliser des processeurs différents, dont les bugs seront différents. Si un calcul est erroné à cause d'un bug, cela ne touchera qu'un processeur sur les trois, pas les autres, vu qu'ils n'auront pas exactement le même bug. ==La redondance temporelle sur les processeurs multithréadés== Il est aussi possible d'utiliser de la redondance sur des architectures multihtreadées, sauf que cette fois-ci, le programme originel et sa copie redondante s’exécutent sur le même cœur, simplement pas exactement en même temps. Techniquement, elles s’exécutent plus ou moins simultanément vu de l’extérieur, mais pas si on regarde au niveau des cycles d'horloge. Tel cycle sera attribué à un programme, le cycle suivant à sa copie, etc. Il s'agit d'un type de redondance appelée la '''redondance temporelle''', où les calculs/instructions sont effectués plusieurs fois par le même circuit. Elle permet de détecter les erreurs temporaires qui surviennent une fois, donc impactent une exécution du calcul, mais pas les suivantes ou précédentes. Précisons que le programme originel a la priorité sur le programme redondant. Il prend donc de l'avance et termine ses instructions avant sa copie redondante. Les mécanismes pour comparer les programme original et redondant sont donc plus compliqués que prévu. Il faut mettre en attente les résultats du programme originel, généralement en conservant une copie du banc de registres quelque part, et la comparer avec l'état équivalent calculé par le programme redondant. Rien que déterminer l'état redondant est assez complexe, et demande de gérer l'historique d’exécution des deux programmes. Un autre défaut est que l'interaction avec la mémoire complique l'implémentation. Un point important est que les deux programmes, l'original et le redondant, doivent avoir le même espace d'adressage. Ou du moins, leur mémoire virtuelle et table des pages doit être configurée de manière à ce que les deux programmes lisent et écrivent au même endroit pour une même instruction. Le protocole de cohérence des caches doit tenir compte de la présence d'un programme redondant pour éviter de nombreuses invalidations de cache, et son adaptation n'est pas triviale. Une autre solution est d'utiliser deux mémoires séparées, mais elle n'est pas triviale, surtout que dans ce cas, autant utiliser plusieurs processeurs séparés. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Le matériel réseau | prevText=Le matériel réseau | next=Les ordinateurs de première génération : tubes à vide et mémoires | nextText=Les ordinateurs de première génération : tubes à vide et mémoires }} </noinclude> 9oaic94q177tmtviuj2v34hb3hrpfe0 Fonctionnement d'un ordinateur/Sommaire 0 69596 765820 765584 2026-05-02T20:01:54Z Mewtow 31375 /* Les jeux d'instruction spécialisés ou exotiques */ 765820 wikitext text/x-wiki __NOTOC__ * [[Fonctionnement d'un ordinateur/Introduction|Introduction]] ==Le codage des informations== * [[Fonctionnement d'un ordinateur/L'encodage des données|L'encodage des données]] * [[Fonctionnement d'un ordinateur/Le codage des nombres|Le codage des nombres]] * [[Fonctionnement d'un ordinateur/Les codes de détection/correction d'erreur|Les codes de détection/correction d'erreur]] ==Les circuits électroniques== * [[Fonctionnement d'un ordinateur/Les portes logiques|Les portes logiques]] ===Les circuits combinatoires=== * [[Fonctionnement d'un ordinateur/Les circuits combinatoires|Les circuits combinatoires]] * [[Fonctionnement d'un ordinateur/Les circuits de masquage|Les circuits de masquage]] * [[Fonctionnement d'un ordinateur/Les circuits de sélection|Les circuits de sélection]] ===Les circuits séquentiels=== * [[Fonctionnement d'un ordinateur/Les bascules : des mémoires de 1 bit|Les bascules : des mémoires de 1 bit]] * [[Fonctionnement d'un ordinateur/Les circuits synchrones et asynchrones|Les circuits synchrones et asynchrones]] * [[Fonctionnement d'un ordinateur/Les registres et mémoires adressables|Les registres et mémoires adressables]] * [[Fonctionnement d'un ordinateur/Les circuits compteurs et décompteurs|Les circuits compteurs et décompteurs]] * [[Fonctionnement d'un ordinateur/Les timers et diviseurs de fréquence|Les timers et diviseurs de fréquence]] ===Les circuits de calcul et de comparaison=== * [[Fonctionnement d'un ordinateur/Les circuits de décalage et de rotation|Les circuits de décalage et de rotation]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition et la soustraction|Les circuits pour l'addition et la soustraction]] * [[Fonctionnement d'un ordinateur/Les circuits de comparaison|Les circuits de comparaison]] * [[Fonctionnement d'un ordinateur/Les unités arithmétiques et logiques entières (simples)|Les unités arithmétiques et logiques entières (simples)]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition multiopérande|Les circuits pour l'addition multiopérande]] * [[Fonctionnement d'un ordinateur/Les circuits pour la multiplication et la division|Les circuits pour la multiplication et la division]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul logique et bit à bit|Les circuits de calcul logique et bit à bit]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul flottant|Les circuits de calcul flottant]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul trigonométriques|Les circuits de calcul trigonométriques]] ===Les circuits intégrés à semi-conducteurs=== * [[Fonctionnement d'un ordinateur/Les transistors et portes logiques|Les transistors et portes logiques]] * [[Fonctionnement d'un ordinateur/Les circuits intégrés|Les circuits intégrés]] * [[Fonctionnement d'un ordinateur/L'interface électrique entre circuits intégrés et bus|L'interface électrique entre circuits intégrés et bus]] ==L'architecture d'un ordinateur== * [[Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur|L'architecture de base d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La hiérarchie mémoire|La hiérarchie mémoire]] * [[Fonctionnement d'un ordinateur/La performance d'un ordinateur|La performance d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La loi de Moore et les tendances technologiques|La loi de Moore et les tendances technologiques]] * [[Fonctionnement d'un ordinateur/Les techniques de réduction de la consommation électrique d'un processeur|Les techniques de réduction de la consommation électrique d'un processeur]] ==Les bus électroniques et la carte mère== * [[Fonctionnement d'un ordinateur/La carte mère, chipset et BIOS|La carte mère, chipset et BIOS]] * [[Fonctionnement d'un ordinateur/Les bus et liaisons point à point (généralités)|Les bus et liaisons point à point (généralités)]] * [[Fonctionnement d'un ordinateur/Les encodages spécifiques aux bus|Les encodages spécifiques aux bus]] * [[Fonctionnement d'un ordinateur/Les liaisons point à point|Les liaisons point à point]] * [[Fonctionnement d'un ordinateur/Les bus électroniques|Les bus électroniques]] * [[Fonctionnement d'un ordinateur/Quelques exemples de bus et de liaisons point à point|Quelques exemples de bus et de liaisons point à point]] ==Les mémoires RAM/ROM== * [[Fonctionnement d'un ordinateur/Les différents types de mémoires|Les différents types de mémoires]] * [[Fonctionnement d'un ordinateur/L'interface d'une mémoire électronique|L'interface d'une mémoire électronique]] * [[Fonctionnement d'un ordinateur/Le bus mémoire|Le bus mémoire]] ===La micro-architecture d'une mémoire adressable=== * [[Fonctionnement d'un ordinateur/Les cellules mémoires|Les cellules mémoires]] * [[Fonctionnement d'un ordinateur/Le plan mémoire|Le plan mémoire]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire interne|Le contrôleur mémoire interne]] * [[Fonctionnement d'un ordinateur/Mémoires évoluées|Les mémoires évoluées]] ===Les mémoires primaires=== * [[Fonctionnement d'un ordinateur/Les mémoires ROM|Les mémoires ROM : Mask ROM, PROM, EPROM, EEPROM, Flash]] * [[Fonctionnement d'un ordinateur/Les mémoires SRAM synchrones|Les mémoires SRAM synchrones]] * [[Fonctionnement d'un ordinateur/Les mémoires RAM dynamiques (DRAM)|Les mémoires RAM dynamiques (DRAM)]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire externe|Le contrôleur mémoire externe]] ===Les mémoires exotiques=== * [[Fonctionnement d'un ordinateur/Les mémoires associatives|Les mémoires associatives]] * [[Fonctionnement d'un ordinateur/Les mémoires FIFO et LIFO|Les mémoires FIFO et LIFO]] ==Le processeur== ===L'architecture externe=== * [[Fonctionnement d'un ordinateur/Langage machine et assembleur|Langage machine et assembleur]] * [[Fonctionnement d'un ordinateur/Les registres du processeur|Les registres du processeur]] * [[Fonctionnement d'un ordinateur/Le modèle mémoire : alignement et boutisme|Le modèle mémoire : alignement et boutisme]] * [[Fonctionnement d'un ordinateur/Les modes d'adressage|Les modes d'adressage]] * [[Fonctionnement d'un ordinateur/L'encodage des instructions|L'encodage des instructions]] * [[Fonctionnement d'un ordinateur/Les jeux d'instructions|Les jeux d'instructions]] * [[Fonctionnement d'un ordinateur/La pile d'appel et les fonctions|La pile d'appel et les fonctions]] * [[Fonctionnement d'un ordinateur/Les interruptions et exceptions|Les interruptions et exceptions]] ===La micro-architecture=== * [[Fonctionnement d'un ordinateur/Les composants d'un processeur|Les composants d'un processeur]] * [[Fonctionnement d'un ordinateur/Le chemin de données|Le chemin de données]] * [[Fonctionnement d'un ordinateur/L'unité de chargement et le program counter|L'unité de chargement et le program counter]] * [[Fonctionnement d'un ordinateur/L'unité de contrôle|L'unité de contrôle]] * [[Fonctionnement d'un ordinateur/L'implémentation matérielle des branchements|L'implémentation matérielle des branchements]] ===Les jeux d'instruction anciens, avant les registres généraux ou exotiques=== * [[Fonctionnement d'un ordinateur/Les architectures à accumulateur|Les architectures à accumulateur]] * [[Fonctionnement d'un ordinateur/Les architectures à pile et mémoire-mémoire|Les architectures à pile et mémoire-mémoire]] * [[Fonctionnement d'un ordinateur/Les processeurs 8 bits et moins|Les processeurs 8 bits et moins]] ===L'espace d'adressage du processeur et la multiprogrammation=== * [[Fonctionnement d'un ordinateur/L'espace d'adressage du processeur|L'espace d'adressage du processeur]] * [[Fonctionnement d'un ordinateur/L'abstraction mémoire et la mémoire virtuelle|L'abstraction mémoire et la mémoire virtuelle]] ==Les entrées-sorties et périphériques== * [[Fonctionnement d'un ordinateur/Les méthodes de synchronisation entre processeur et périphériques|Les méthodes de synchronisation entre processeur et périphériques]] * [[Fonctionnement d'un ordinateur/L'adressage des périphériques|L'adressage des périphériques]] * [[Fonctionnement d'un ordinateur/Les périphériques et les cartes d'extension|Les périphériques et les cartes d'extension]] ==Les mémoires de stockage== * [[Fonctionnement d'un ordinateur/Les mémoires de masse : généralités|Les mémoires de masse : généralités]] * [[Fonctionnement d'un ordinateur/Les disques durs|Les disques durs]] * [[Fonctionnement d'un ordinateur/Les solid-state drives|Les solid-state drives]] * [[Fonctionnement d'un ordinateur/Les disques optiques|Les disques optiques]] * [[Fonctionnement d'un ordinateur/Compléments sur les mémoires de masse|Compléments sur les mémoires de masse]] ==La ou les mémoires caches== * [[Fonctionnement d'un ordinateur/Les mémoires cache|Les mémoires cache]] * [[Fonctionnement d'un ordinateur/Le préchargement|Le préchargement]] * [[Fonctionnement d'un ordinateur/Le Translation Lookaside Buffer|Le ''Translation Lookaside Buffer'']] ==Le parallélisme d’instructions== * [[Fonctionnement d'un ordinateur/Le pipeline|Le pipeline]] ===Les branchements et le ''front-end''=== * [[Fonctionnement d'un ordinateur/La prédiction de branchement|La prédiction de branchement]] * [[Fonctionnement d'un ordinateur/Les optimisations du chargement des instructions|Les optimisations du chargement des instructions]] ===Les pipelines multicycles simples=== * [[Fonctionnement d'un ordinateur/Les pipelines multicycles|Les pipelines multicycles]] * [[Fonctionnement d'un ordinateur/L'émission dans l'ordre des instructions|L'émission dans l'ordre des instructions]] * [[Fonctionnement d'un ordinateur/Le contournement (data forwarding)|Le contournement (data forwarding)]] * [[Fonctionnement d'un ordinateur/Les premiers processeurs Intel|Les premiers processeurs Intel]] ===L’exécution dans le désordre=== * [[Fonctionnement d'un ordinateur/L'exécution dans le désordre|L'exécution dans le désordre]] * [[Fonctionnement d'un ordinateur/Le renommage de registres|Le renommage de registres]] * [[Fonctionnement d'un ordinateur/Le scoreboarding et l'algorithme de Tomasulo|Annexe : Le scoreboarding et l'algorithme de Tomasulo]] ===Les optimisations des accès mémoire=== * [[Fonctionnement d'un ordinateur/La désambiguïsation mémoire|La désambiguïsation mémoire]] * [[Fonctionnement d'un ordinateur/Le parallélisme mémoire|Le parallélisme mémoire]] ===L'émission multiple=== * [[Fonctionnement d'un ordinateur/Les processeurs superscalaires|Les processeurs superscalaires]] * [[Fonctionnement d'un ordinateur/Exemples de microarchitectures CPU : le cas du x86|Exemples de CPU superscalaires: le cas du x86]] * [[Fonctionnement d'un ordinateur/Les processeurs VLIW et EPIC|Les processeurs VLIW et EPIC]] * [[Fonctionnement d'un ordinateur/Les architectures dataflow|Les architectures dataflow]] ==Les architectures parallèles== * [[Fonctionnement d'un ordinateur/Les architectures parallèles|Les architectures parallèles]] * [[Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs|Les architectures multiprocesseurs et multicœurs]] * [[Fonctionnement d'un ordinateur/Architectures multithreadées et Hyperthreading|Les architectures multithreadées et Hyperthreading]] * [[Fonctionnement d'un ordinateur/Les architectures à parallélisme de données|Les architectures à parallélisme de données]] * [[Fonctionnement d'un ordinateur/La cohérence des caches|La cohérence des caches]] * [[Fonctionnement d'un ordinateur/Les sections critiques et le modèle mémoire|Les sections critiques et le modèle mémoire]] ==Annexes== ===Annexes sur les nombres flottants et les FPUs=== * [[Fonctionnement d'un ordinateur/Un exemple de jeu d'instruction : l'extension x87|Un exemple de jeu d'instruction : l'extension x87]] * [[Fonctionnement d'un ordinateur/Les coprocesseurs : FPU et IO|Les coprocesseurs : FPU et IO]] ===Autres annexes=== * [[Fonctionnement d'un ordinateur/L'accélération matérielle de la virtualisation|L'accélération matérielle de la virtualisation]] * [[Fonctionnement d'un ordinateur/Les ISA optimisés pour la compilation/interprétation|Les ISA optimisés pour la compilation/interprétation]] * [[Fonctionnement d'un ordinateur/Le matériel réseau|Le matériel réseau]] * [[Fonctionnement d'un ordinateur/La tolérance aux pannes|La tolérance aux pannes]] * [[Fonctionnement d'un ordinateur/Les architectures systoliques|Les architectures systoliques]] * [[Fonctionnement d'un ordinateur/Les architectures neuromorphiques|Les réseaux de neurones matériels]] * [[Fonctionnement d'un ordinateur/Les ordinateurs de première génération : tubes à vide et mémoires|Les ordinateurs de première génération : tubes à vide et mémoires]] * [[Fonctionnement d'un ordinateur/Les ordinateurs à encodages non-binaires|Les ordinateurs à encodages non-binaires]] * [[Fonctionnement d'un ordinateur/Les circuits réversibles|Les circuits réversibles]] * [[Fonctionnement d'un ordinateur/Les circuits de conversion analogique-numérique|Les circuits de conversion analogique-numérique]] {{autocat}} kgrksqvvtfnryfgobnpd99adnxh4c2t 765821 765820 2026-05-02T20:02:30Z Mewtow 31375 /* Annexes */ 765821 wikitext text/x-wiki __NOTOC__ * [[Fonctionnement d'un ordinateur/Introduction|Introduction]] ==Le codage des informations== * [[Fonctionnement d'un ordinateur/L'encodage des données|L'encodage des données]] * [[Fonctionnement d'un ordinateur/Le codage des nombres|Le codage des nombres]] * [[Fonctionnement d'un ordinateur/Les codes de détection/correction d'erreur|Les codes de détection/correction d'erreur]] ==Les circuits électroniques== * [[Fonctionnement d'un ordinateur/Les portes logiques|Les portes logiques]] ===Les circuits combinatoires=== * [[Fonctionnement d'un ordinateur/Les circuits combinatoires|Les circuits combinatoires]] * [[Fonctionnement d'un ordinateur/Les circuits de masquage|Les circuits de masquage]] * [[Fonctionnement d'un ordinateur/Les circuits de sélection|Les circuits de sélection]] ===Les circuits séquentiels=== * [[Fonctionnement d'un ordinateur/Les bascules : des mémoires de 1 bit|Les bascules : des mémoires de 1 bit]] * [[Fonctionnement d'un ordinateur/Les circuits synchrones et asynchrones|Les circuits synchrones et asynchrones]] * [[Fonctionnement d'un ordinateur/Les registres et mémoires adressables|Les registres et mémoires adressables]] * [[Fonctionnement d'un ordinateur/Les circuits compteurs et décompteurs|Les circuits compteurs et décompteurs]] * [[Fonctionnement d'un ordinateur/Les timers et diviseurs de fréquence|Les timers et diviseurs de fréquence]] ===Les circuits de calcul et de comparaison=== * [[Fonctionnement d'un ordinateur/Les circuits de décalage et de rotation|Les circuits de décalage et de rotation]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition et la soustraction|Les circuits pour l'addition et la soustraction]] * [[Fonctionnement d'un ordinateur/Les circuits de comparaison|Les circuits de comparaison]] * [[Fonctionnement d'un ordinateur/Les unités arithmétiques et logiques entières (simples)|Les unités arithmétiques et logiques entières (simples)]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition multiopérande|Les circuits pour l'addition multiopérande]] * [[Fonctionnement d'un ordinateur/Les circuits pour la multiplication et la division|Les circuits pour la multiplication et la division]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul logique et bit à bit|Les circuits de calcul logique et bit à bit]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul flottant|Les circuits de calcul flottant]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul trigonométriques|Les circuits de calcul trigonométriques]] ===Les circuits intégrés à semi-conducteurs=== * [[Fonctionnement d'un ordinateur/Les transistors et portes logiques|Les transistors et portes logiques]] * [[Fonctionnement d'un ordinateur/Les circuits intégrés|Les circuits intégrés]] * [[Fonctionnement d'un ordinateur/L'interface électrique entre circuits intégrés et bus|L'interface électrique entre circuits intégrés et bus]] ==L'architecture d'un ordinateur== * [[Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur|L'architecture de base d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La hiérarchie mémoire|La hiérarchie mémoire]] * [[Fonctionnement d'un ordinateur/La performance d'un ordinateur|La performance d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La loi de Moore et les tendances technologiques|La loi de Moore et les tendances technologiques]] * [[Fonctionnement d'un ordinateur/Les techniques de réduction de la consommation électrique d'un processeur|Les techniques de réduction de la consommation électrique d'un processeur]] ==Les bus électroniques et la carte mère== * [[Fonctionnement d'un ordinateur/La carte mère, chipset et BIOS|La carte mère, chipset et BIOS]] * [[Fonctionnement d'un ordinateur/Les bus et liaisons point à point (généralités)|Les bus et liaisons point à point (généralités)]] * [[Fonctionnement d'un ordinateur/Les encodages spécifiques aux bus|Les encodages spécifiques aux bus]] * [[Fonctionnement d'un ordinateur/Les liaisons point à point|Les liaisons point à point]] * [[Fonctionnement d'un ordinateur/Les bus électroniques|Les bus électroniques]] * [[Fonctionnement d'un ordinateur/Quelques exemples de bus et de liaisons point à point|Quelques exemples de bus et de liaisons point à point]] ==Les mémoires RAM/ROM== * [[Fonctionnement d'un ordinateur/Les différents types de mémoires|Les différents types de mémoires]] * [[Fonctionnement d'un ordinateur/L'interface d'une mémoire électronique|L'interface d'une mémoire électronique]] * [[Fonctionnement d'un ordinateur/Le bus mémoire|Le bus mémoire]] ===La micro-architecture d'une mémoire adressable=== * [[Fonctionnement d'un ordinateur/Les cellules mémoires|Les cellules mémoires]] * [[Fonctionnement d'un ordinateur/Le plan mémoire|Le plan mémoire]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire interne|Le contrôleur mémoire interne]] * [[Fonctionnement d'un ordinateur/Mémoires évoluées|Les mémoires évoluées]] ===Les mémoires primaires=== * [[Fonctionnement d'un ordinateur/Les mémoires ROM|Les mémoires ROM : Mask ROM, PROM, EPROM, EEPROM, Flash]] * [[Fonctionnement d'un ordinateur/Les mémoires SRAM synchrones|Les mémoires SRAM synchrones]] * [[Fonctionnement d'un ordinateur/Les mémoires RAM dynamiques (DRAM)|Les mémoires RAM dynamiques (DRAM)]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire externe|Le contrôleur mémoire externe]] ===Les mémoires exotiques=== * [[Fonctionnement d'un ordinateur/Les mémoires associatives|Les mémoires associatives]] * [[Fonctionnement d'un ordinateur/Les mémoires FIFO et LIFO|Les mémoires FIFO et LIFO]] ==Le processeur== ===L'architecture externe=== * [[Fonctionnement d'un ordinateur/Langage machine et assembleur|Langage machine et assembleur]] * [[Fonctionnement d'un ordinateur/Les registres du processeur|Les registres du processeur]] * [[Fonctionnement d'un ordinateur/Le modèle mémoire : alignement et boutisme|Le modèle mémoire : alignement et boutisme]] * [[Fonctionnement d'un ordinateur/Les modes d'adressage|Les modes d'adressage]] * [[Fonctionnement d'un ordinateur/L'encodage des instructions|L'encodage des instructions]] * [[Fonctionnement d'un ordinateur/Les jeux d'instructions|Les jeux d'instructions]] * [[Fonctionnement d'un ordinateur/La pile d'appel et les fonctions|La pile d'appel et les fonctions]] * [[Fonctionnement d'un ordinateur/Les interruptions et exceptions|Les interruptions et exceptions]] ===La micro-architecture=== * [[Fonctionnement d'un ordinateur/Les composants d'un processeur|Les composants d'un processeur]] * [[Fonctionnement d'un ordinateur/Le chemin de données|Le chemin de données]] * [[Fonctionnement d'un ordinateur/L'unité de chargement et le program counter|L'unité de chargement et le program counter]] * [[Fonctionnement d'un ordinateur/L'unité de contrôle|L'unité de contrôle]] * [[Fonctionnement d'un ordinateur/L'implémentation matérielle des branchements|L'implémentation matérielle des branchements]] ===Les jeux d'instruction anciens, avant les registres généraux ou exotiques=== * [[Fonctionnement d'un ordinateur/Les architectures à accumulateur|Les architectures à accumulateur]] * [[Fonctionnement d'un ordinateur/Les architectures à pile et mémoire-mémoire|Les architectures à pile et mémoire-mémoire]] * [[Fonctionnement d'un ordinateur/Les processeurs 8 bits et moins|Les processeurs 8 bits et moins]] ===L'espace d'adressage du processeur et la multiprogrammation=== * [[Fonctionnement d'un ordinateur/L'espace d'adressage du processeur|L'espace d'adressage du processeur]] * [[Fonctionnement d'un ordinateur/L'abstraction mémoire et la mémoire virtuelle|L'abstraction mémoire et la mémoire virtuelle]] ==Les entrées-sorties et périphériques== * [[Fonctionnement d'un ordinateur/Les méthodes de synchronisation entre processeur et périphériques|Les méthodes de synchronisation entre processeur et périphériques]] * [[Fonctionnement d'un ordinateur/L'adressage des périphériques|L'adressage des périphériques]] * [[Fonctionnement d'un ordinateur/Les périphériques et les cartes d'extension|Les périphériques et les cartes d'extension]] ==Les mémoires de stockage== * [[Fonctionnement d'un ordinateur/Les mémoires de masse : généralités|Les mémoires de masse : généralités]] * [[Fonctionnement d'un ordinateur/Les disques durs|Les disques durs]] * [[Fonctionnement d'un ordinateur/Les solid-state drives|Les solid-state drives]] * [[Fonctionnement d'un ordinateur/Les disques optiques|Les disques optiques]] * [[Fonctionnement d'un ordinateur/Compléments sur les mémoires de masse|Compléments sur les mémoires de masse]] ==La ou les mémoires caches== * [[Fonctionnement d'un ordinateur/Les mémoires cache|Les mémoires cache]] * [[Fonctionnement d'un ordinateur/Le préchargement|Le préchargement]] * [[Fonctionnement d'un ordinateur/Le Translation Lookaside Buffer|Le ''Translation Lookaside Buffer'']] ==Le parallélisme d’instructions== * [[Fonctionnement d'un ordinateur/Le pipeline|Le pipeline]] ===Les branchements et le ''front-end''=== * [[Fonctionnement d'un ordinateur/La prédiction de branchement|La prédiction de branchement]] * [[Fonctionnement d'un ordinateur/Les optimisations du chargement des instructions|Les optimisations du chargement des instructions]] ===Les pipelines multicycles simples=== * [[Fonctionnement d'un ordinateur/Les pipelines multicycles|Les pipelines multicycles]] * [[Fonctionnement d'un ordinateur/L'émission dans l'ordre des instructions|L'émission dans l'ordre des instructions]] * [[Fonctionnement d'un ordinateur/Le contournement (data forwarding)|Le contournement (data forwarding)]] * [[Fonctionnement d'un ordinateur/Les premiers processeurs Intel|Les premiers processeurs Intel]] ===L’exécution dans le désordre=== * [[Fonctionnement d'un ordinateur/L'exécution dans le désordre|L'exécution dans le désordre]] * [[Fonctionnement d'un ordinateur/Le renommage de registres|Le renommage de registres]] * [[Fonctionnement d'un ordinateur/Le scoreboarding et l'algorithme de Tomasulo|Annexe : Le scoreboarding et l'algorithme de Tomasulo]] ===Les optimisations des accès mémoire=== * [[Fonctionnement d'un ordinateur/La désambiguïsation mémoire|La désambiguïsation mémoire]] * [[Fonctionnement d'un ordinateur/Le parallélisme mémoire|Le parallélisme mémoire]] ===L'émission multiple=== * [[Fonctionnement d'un ordinateur/Les processeurs superscalaires|Les processeurs superscalaires]] * [[Fonctionnement d'un ordinateur/Exemples de microarchitectures CPU : le cas du x86|Exemples de CPU superscalaires: le cas du x86]] * [[Fonctionnement d'un ordinateur/Les processeurs VLIW et EPIC|Les processeurs VLIW et EPIC]] * [[Fonctionnement d'un ordinateur/Les architectures dataflow|Les architectures dataflow]] ==Les architectures parallèles== * [[Fonctionnement d'un ordinateur/Les architectures parallèles|Les architectures parallèles]] * [[Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs|Les architectures multiprocesseurs et multicœurs]] * [[Fonctionnement d'un ordinateur/Architectures multithreadées et Hyperthreading|Les architectures multithreadées et Hyperthreading]] * [[Fonctionnement d'un ordinateur/Les architectures à parallélisme de données|Les architectures à parallélisme de données]] * [[Fonctionnement d'un ordinateur/La cohérence des caches|La cohérence des caches]] * [[Fonctionnement d'un ordinateur/Les sections critiques et le modèle mémoire|Les sections critiques et le modèle mémoire]] ==Annexes== ===Annexes sur les nombres flottants et les FPUs=== * [[Fonctionnement d'un ordinateur/Un exemple de jeu d'instruction : l'extension x87|Un exemple de jeu d'instruction : l'extension x87]] * [[Fonctionnement d'un ordinateur/Les coprocesseurs : FPU et IO|Les coprocesseurs : FPU et IO]] ===Les jeux d’instruction spécialisés====== * [[Fonctionnement d'un ordinateur/L'accélération matérielle de la virtualisation|L'accélération matérielle de la virtualisation]] * [[Fonctionnement d'un ordinateur/Les ISA optimisés pour la compilation/interprétation|Les ISA optimisés pour la compilation/interprétation]] * [[Fonctionnement d'un ordinateur/Les processeurs de traitement du signal|Les processeurs de traitement du signal]] * [[Fonctionnement d'un ordinateur/Les architectures actionnées par déplacement|Les architectures actionnées par déplacement]] ===Les autres annexes=== * [[Fonctionnement d'un ordinateur/Le matériel réseau|Le matériel réseau]] * [[Fonctionnement d'un ordinateur/La tolérance aux pannes|La tolérance aux pannes]] * [[Fonctionnement d'un ordinateur/Les architectures systoliques|Les architectures systoliques]] * [[Fonctionnement d'un ordinateur/Les architectures neuromorphiques|Les réseaux de neurones matériels]] * [[Fonctionnement d'un ordinateur/Les ordinateurs de première génération : tubes à vide et mémoires|Les ordinateurs de première génération : tubes à vide et mémoires]] * [[Fonctionnement d'un ordinateur/Les ordinateurs à encodages non-binaires|Les ordinateurs à encodages non-binaires]] * [[Fonctionnement d'un ordinateur/Les circuits réversibles|Les circuits réversibles]] * [[Fonctionnement d'un ordinateur/Les circuits de conversion analogique-numérique|Les circuits de conversion analogique-numérique]] {{autocat}} j9uudw2d0oafoj649uenizcdr86vson 765822 765821 2026-05-02T20:02:35Z Mewtow 31375 /* Les jeux d’instruction spécialisés=== */ 765822 wikitext text/x-wiki __NOTOC__ * [[Fonctionnement d'un ordinateur/Introduction|Introduction]] ==Le codage des informations== * [[Fonctionnement d'un ordinateur/L'encodage des données|L'encodage des données]] * [[Fonctionnement d'un ordinateur/Le codage des nombres|Le codage des nombres]] * [[Fonctionnement d'un ordinateur/Les codes de détection/correction d'erreur|Les codes de détection/correction d'erreur]] ==Les circuits électroniques== * [[Fonctionnement d'un ordinateur/Les portes logiques|Les portes logiques]] ===Les circuits combinatoires=== * [[Fonctionnement d'un ordinateur/Les circuits combinatoires|Les circuits combinatoires]] * [[Fonctionnement d'un ordinateur/Les circuits de masquage|Les circuits de masquage]] * [[Fonctionnement d'un ordinateur/Les circuits de sélection|Les circuits de sélection]] ===Les circuits séquentiels=== * [[Fonctionnement d'un ordinateur/Les bascules : des mémoires de 1 bit|Les bascules : des mémoires de 1 bit]] * [[Fonctionnement d'un ordinateur/Les circuits synchrones et asynchrones|Les circuits synchrones et asynchrones]] * [[Fonctionnement d'un ordinateur/Les registres et mémoires adressables|Les registres et mémoires adressables]] * [[Fonctionnement d'un ordinateur/Les circuits compteurs et décompteurs|Les circuits compteurs et décompteurs]] * [[Fonctionnement d'un ordinateur/Les timers et diviseurs de fréquence|Les timers et diviseurs de fréquence]] ===Les circuits de calcul et de comparaison=== * [[Fonctionnement d'un ordinateur/Les circuits de décalage et de rotation|Les circuits de décalage et de rotation]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition et la soustraction|Les circuits pour l'addition et la soustraction]] * [[Fonctionnement d'un ordinateur/Les circuits de comparaison|Les circuits de comparaison]] * [[Fonctionnement d'un ordinateur/Les unités arithmétiques et logiques entières (simples)|Les unités arithmétiques et logiques entières (simples)]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition multiopérande|Les circuits pour l'addition multiopérande]] * [[Fonctionnement d'un ordinateur/Les circuits pour la multiplication et la division|Les circuits pour la multiplication et la division]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul logique et bit à bit|Les circuits de calcul logique et bit à bit]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul flottant|Les circuits de calcul flottant]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul trigonométriques|Les circuits de calcul trigonométriques]] ===Les circuits intégrés à semi-conducteurs=== * [[Fonctionnement d'un ordinateur/Les transistors et portes logiques|Les transistors et portes logiques]] * [[Fonctionnement d'un ordinateur/Les circuits intégrés|Les circuits intégrés]] * [[Fonctionnement d'un ordinateur/L'interface électrique entre circuits intégrés et bus|L'interface électrique entre circuits intégrés et bus]] ==L'architecture d'un ordinateur== * [[Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur|L'architecture de base d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La hiérarchie mémoire|La hiérarchie mémoire]] * [[Fonctionnement d'un ordinateur/La performance d'un ordinateur|La performance d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La loi de Moore et les tendances technologiques|La loi de Moore et les tendances technologiques]] * [[Fonctionnement d'un ordinateur/Les techniques de réduction de la consommation électrique d'un processeur|Les techniques de réduction de la consommation électrique d'un processeur]] ==Les bus électroniques et la carte mère== * [[Fonctionnement d'un ordinateur/La carte mère, chipset et BIOS|La carte mère, chipset et BIOS]] * [[Fonctionnement d'un ordinateur/Les bus et liaisons point à point (généralités)|Les bus et liaisons point à point (généralités)]] * [[Fonctionnement d'un ordinateur/Les encodages spécifiques aux bus|Les encodages spécifiques aux bus]] * [[Fonctionnement d'un ordinateur/Les liaisons point à point|Les liaisons point à point]] * [[Fonctionnement d'un ordinateur/Les bus électroniques|Les bus électroniques]] * [[Fonctionnement d'un ordinateur/Quelques exemples de bus et de liaisons point à point|Quelques exemples de bus et de liaisons point à point]] ==Les mémoires RAM/ROM== * [[Fonctionnement d'un ordinateur/Les différents types de mémoires|Les différents types de mémoires]] * [[Fonctionnement d'un ordinateur/L'interface d'une mémoire électronique|L'interface d'une mémoire électronique]] * [[Fonctionnement d'un ordinateur/Le bus mémoire|Le bus mémoire]] ===La micro-architecture d'une mémoire adressable=== * [[Fonctionnement d'un ordinateur/Les cellules mémoires|Les cellules mémoires]] * [[Fonctionnement d'un ordinateur/Le plan mémoire|Le plan mémoire]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire interne|Le contrôleur mémoire interne]] * [[Fonctionnement d'un ordinateur/Mémoires évoluées|Les mémoires évoluées]] ===Les mémoires primaires=== * [[Fonctionnement d'un ordinateur/Les mémoires ROM|Les mémoires ROM : Mask ROM, PROM, EPROM, EEPROM, Flash]] * [[Fonctionnement d'un ordinateur/Les mémoires SRAM synchrones|Les mémoires SRAM synchrones]] * [[Fonctionnement d'un ordinateur/Les mémoires RAM dynamiques (DRAM)|Les mémoires RAM dynamiques (DRAM)]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire externe|Le contrôleur mémoire externe]] ===Les mémoires exotiques=== * [[Fonctionnement d'un ordinateur/Les mémoires associatives|Les mémoires associatives]] * [[Fonctionnement d'un ordinateur/Les mémoires FIFO et LIFO|Les mémoires FIFO et LIFO]] ==Le processeur== ===L'architecture externe=== * [[Fonctionnement d'un ordinateur/Langage machine et assembleur|Langage machine et assembleur]] * [[Fonctionnement d'un ordinateur/Les registres du processeur|Les registres du processeur]] * [[Fonctionnement d'un ordinateur/Le modèle mémoire : alignement et boutisme|Le modèle mémoire : alignement et boutisme]] * [[Fonctionnement d'un ordinateur/Les modes d'adressage|Les modes d'adressage]] * [[Fonctionnement d'un ordinateur/L'encodage des instructions|L'encodage des instructions]] * [[Fonctionnement d'un ordinateur/Les jeux d'instructions|Les jeux d'instructions]] * [[Fonctionnement d'un ordinateur/La pile d'appel et les fonctions|La pile d'appel et les fonctions]] * [[Fonctionnement d'un ordinateur/Les interruptions et exceptions|Les interruptions et exceptions]] ===La micro-architecture=== * [[Fonctionnement d'un ordinateur/Les composants d'un processeur|Les composants d'un processeur]] * [[Fonctionnement d'un ordinateur/Le chemin de données|Le chemin de données]] * [[Fonctionnement d'un ordinateur/L'unité de chargement et le program counter|L'unité de chargement et le program counter]] * [[Fonctionnement d'un ordinateur/L'unité de contrôle|L'unité de contrôle]] * [[Fonctionnement d'un ordinateur/L'implémentation matérielle des branchements|L'implémentation matérielle des branchements]] ===Les jeux d'instruction anciens, avant les registres généraux ou exotiques=== * [[Fonctionnement d'un ordinateur/Les architectures à accumulateur|Les architectures à accumulateur]] * [[Fonctionnement d'un ordinateur/Les architectures à pile et mémoire-mémoire|Les architectures à pile et mémoire-mémoire]] * [[Fonctionnement d'un ordinateur/Les processeurs 8 bits et moins|Les processeurs 8 bits et moins]] ===L'espace d'adressage du processeur et la multiprogrammation=== * [[Fonctionnement d'un ordinateur/L'espace d'adressage du processeur|L'espace d'adressage du processeur]] * [[Fonctionnement d'un ordinateur/L'abstraction mémoire et la mémoire virtuelle|L'abstraction mémoire et la mémoire virtuelle]] ==Les entrées-sorties et périphériques== * [[Fonctionnement d'un ordinateur/Les méthodes de synchronisation entre processeur et périphériques|Les méthodes de synchronisation entre processeur et périphériques]] * [[Fonctionnement d'un ordinateur/L'adressage des périphériques|L'adressage des périphériques]] * [[Fonctionnement d'un ordinateur/Les périphériques et les cartes d'extension|Les périphériques et les cartes d'extension]] ==Les mémoires de stockage== * [[Fonctionnement d'un ordinateur/Les mémoires de masse : généralités|Les mémoires de masse : généralités]] * [[Fonctionnement d'un ordinateur/Les disques durs|Les disques durs]] * [[Fonctionnement d'un ordinateur/Les solid-state drives|Les solid-state drives]] * [[Fonctionnement d'un ordinateur/Les disques optiques|Les disques optiques]] * [[Fonctionnement d'un ordinateur/Compléments sur les mémoires de masse|Compléments sur les mémoires de masse]] ==La ou les mémoires caches== * [[Fonctionnement d'un ordinateur/Les mémoires cache|Les mémoires cache]] * [[Fonctionnement d'un ordinateur/Le préchargement|Le préchargement]] * [[Fonctionnement d'un ordinateur/Le Translation Lookaside Buffer|Le ''Translation Lookaside Buffer'']] ==Le parallélisme d’instructions== * [[Fonctionnement d'un ordinateur/Le pipeline|Le pipeline]] ===Les branchements et le ''front-end''=== * [[Fonctionnement d'un ordinateur/La prédiction de branchement|La prédiction de branchement]] * [[Fonctionnement d'un ordinateur/Les optimisations du chargement des instructions|Les optimisations du chargement des instructions]] ===Les pipelines multicycles simples=== * [[Fonctionnement d'un ordinateur/Les pipelines multicycles|Les pipelines multicycles]] * [[Fonctionnement d'un ordinateur/L'émission dans l'ordre des instructions|L'émission dans l'ordre des instructions]] * [[Fonctionnement d'un ordinateur/Le contournement (data forwarding)|Le contournement (data forwarding)]] * [[Fonctionnement d'un ordinateur/Les premiers processeurs Intel|Les premiers processeurs Intel]] ===L’exécution dans le désordre=== * [[Fonctionnement d'un ordinateur/L'exécution dans le désordre|L'exécution dans le désordre]] * [[Fonctionnement d'un ordinateur/Le renommage de registres|Le renommage de registres]] * [[Fonctionnement d'un ordinateur/Le scoreboarding et l'algorithme de Tomasulo|Annexe : Le scoreboarding et l'algorithme de Tomasulo]] ===Les optimisations des accès mémoire=== * [[Fonctionnement d'un ordinateur/La désambiguïsation mémoire|La désambiguïsation mémoire]] * [[Fonctionnement d'un ordinateur/Le parallélisme mémoire|Le parallélisme mémoire]] ===L'émission multiple=== * [[Fonctionnement d'un ordinateur/Les processeurs superscalaires|Les processeurs superscalaires]] * [[Fonctionnement d'un ordinateur/Exemples de microarchitectures CPU : le cas du x86|Exemples de CPU superscalaires: le cas du x86]] * [[Fonctionnement d'un ordinateur/Les processeurs VLIW et EPIC|Les processeurs VLIW et EPIC]] * [[Fonctionnement d'un ordinateur/Les architectures dataflow|Les architectures dataflow]] ==Les architectures parallèles== * [[Fonctionnement d'un ordinateur/Les architectures parallèles|Les architectures parallèles]] * [[Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs|Les architectures multiprocesseurs et multicœurs]] * [[Fonctionnement d'un ordinateur/Architectures multithreadées et Hyperthreading|Les architectures multithreadées et Hyperthreading]] * [[Fonctionnement d'un ordinateur/Les architectures à parallélisme de données|Les architectures à parallélisme de données]] * [[Fonctionnement d'un ordinateur/La cohérence des caches|La cohérence des caches]] * [[Fonctionnement d'un ordinateur/Les sections critiques et le modèle mémoire|Les sections critiques et le modèle mémoire]] ==Annexes== ===Annexes sur les nombres flottants et les FPUs=== * [[Fonctionnement d'un ordinateur/Un exemple de jeu d'instruction : l'extension x87|Un exemple de jeu d'instruction : l'extension x87]] * [[Fonctionnement d'un ordinateur/Les coprocesseurs : FPU et IO|Les coprocesseurs : FPU et IO]] ===Les jeux d’instruction spécialisés=== * [[Fonctionnement d'un ordinateur/L'accélération matérielle de la virtualisation|L'accélération matérielle de la virtualisation]] * [[Fonctionnement d'un ordinateur/Les ISA optimisés pour la compilation/interprétation|Les ISA optimisés pour la compilation/interprétation]] * [[Fonctionnement d'un ordinateur/Les processeurs de traitement du signal|Les processeurs de traitement du signal]] * [[Fonctionnement d'un ordinateur/Les architectures actionnées par déplacement|Les architectures actionnées par déplacement]] ===Les autres annexes=== * [[Fonctionnement d'un ordinateur/Le matériel réseau|Le matériel réseau]] * [[Fonctionnement d'un ordinateur/La tolérance aux pannes|La tolérance aux pannes]] * [[Fonctionnement d'un ordinateur/Les architectures systoliques|Les architectures systoliques]] * [[Fonctionnement d'un ordinateur/Les architectures neuromorphiques|Les réseaux de neurones matériels]] * [[Fonctionnement d'un ordinateur/Les ordinateurs de première génération : tubes à vide et mémoires|Les ordinateurs de première génération : tubes à vide et mémoires]] * [[Fonctionnement d'un ordinateur/Les ordinateurs à encodages non-binaires|Les ordinateurs à encodages non-binaires]] * [[Fonctionnement d'un ordinateur/Les circuits réversibles|Les circuits réversibles]] * [[Fonctionnement d'un ordinateur/Les circuits de conversion analogique-numérique|Les circuits de conversion analogique-numérique]] {{autocat}} 5bwdhb99rb8ehjdepn0nrmqajc1sxxs 765825 765822 2026-05-02T20:03:27Z Mewtow 31375 /* Annexes */ 765825 wikitext text/x-wiki __NOTOC__ * [[Fonctionnement d'un ordinateur/Introduction|Introduction]] ==Le codage des informations== * [[Fonctionnement d'un ordinateur/L'encodage des données|L'encodage des données]] * [[Fonctionnement d'un ordinateur/Le codage des nombres|Le codage des nombres]] * [[Fonctionnement d'un ordinateur/Les codes de détection/correction d'erreur|Les codes de détection/correction d'erreur]] ==Les circuits électroniques== * [[Fonctionnement d'un ordinateur/Les portes logiques|Les portes logiques]] ===Les circuits combinatoires=== * [[Fonctionnement d'un ordinateur/Les circuits combinatoires|Les circuits combinatoires]] * [[Fonctionnement d'un ordinateur/Les circuits de masquage|Les circuits de masquage]] * [[Fonctionnement d'un ordinateur/Les circuits de sélection|Les circuits de sélection]] ===Les circuits séquentiels=== * [[Fonctionnement d'un ordinateur/Les bascules : des mémoires de 1 bit|Les bascules : des mémoires de 1 bit]] * [[Fonctionnement d'un ordinateur/Les circuits synchrones et asynchrones|Les circuits synchrones et asynchrones]] * [[Fonctionnement d'un ordinateur/Les registres et mémoires adressables|Les registres et mémoires adressables]] * [[Fonctionnement d'un ordinateur/Les circuits compteurs et décompteurs|Les circuits compteurs et décompteurs]] * [[Fonctionnement d'un ordinateur/Les timers et diviseurs de fréquence|Les timers et diviseurs de fréquence]] ===Les circuits de calcul et de comparaison=== * [[Fonctionnement d'un ordinateur/Les circuits de décalage et de rotation|Les circuits de décalage et de rotation]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition et la soustraction|Les circuits pour l'addition et la soustraction]] * [[Fonctionnement d'un ordinateur/Les circuits de comparaison|Les circuits de comparaison]] * [[Fonctionnement d'un ordinateur/Les unités arithmétiques et logiques entières (simples)|Les unités arithmétiques et logiques entières (simples)]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition multiopérande|Les circuits pour l'addition multiopérande]] * [[Fonctionnement d'un ordinateur/Les circuits pour la multiplication et la division|Les circuits pour la multiplication et la division]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul logique et bit à bit|Les circuits de calcul logique et bit à bit]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul flottant|Les circuits de calcul flottant]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul trigonométriques|Les circuits de calcul trigonométriques]] ===Les circuits intégrés à semi-conducteurs=== * [[Fonctionnement d'un ordinateur/Les transistors et portes logiques|Les transistors et portes logiques]] * [[Fonctionnement d'un ordinateur/Les circuits intégrés|Les circuits intégrés]] * [[Fonctionnement d'un ordinateur/L'interface électrique entre circuits intégrés et bus|L'interface électrique entre circuits intégrés et bus]] ==L'architecture d'un ordinateur== * [[Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur|L'architecture de base d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La hiérarchie mémoire|La hiérarchie mémoire]] * [[Fonctionnement d'un ordinateur/La performance d'un ordinateur|La performance d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La loi de Moore et les tendances technologiques|La loi de Moore et les tendances technologiques]] * [[Fonctionnement d'un ordinateur/Les techniques de réduction de la consommation électrique d'un processeur|Les techniques de réduction de la consommation électrique d'un processeur]] ==Les bus électroniques et la carte mère== * [[Fonctionnement d'un ordinateur/La carte mère, chipset et BIOS|La carte mère, chipset et BIOS]] * [[Fonctionnement d'un ordinateur/Les bus et liaisons point à point (généralités)|Les bus et liaisons point à point (généralités)]] * [[Fonctionnement d'un ordinateur/Les encodages spécifiques aux bus|Les encodages spécifiques aux bus]] * [[Fonctionnement d'un ordinateur/Les liaisons point à point|Les liaisons point à point]] * [[Fonctionnement d'un ordinateur/Les bus électroniques|Les bus électroniques]] * [[Fonctionnement d'un ordinateur/Quelques exemples de bus et de liaisons point à point|Quelques exemples de bus et de liaisons point à point]] ==Les mémoires RAM/ROM== * [[Fonctionnement d'un ordinateur/Les différents types de mémoires|Les différents types de mémoires]] * [[Fonctionnement d'un ordinateur/L'interface d'une mémoire électronique|L'interface d'une mémoire électronique]] * [[Fonctionnement d'un ordinateur/Le bus mémoire|Le bus mémoire]] ===La micro-architecture d'une mémoire adressable=== * [[Fonctionnement d'un ordinateur/Les cellules mémoires|Les cellules mémoires]] * [[Fonctionnement d'un ordinateur/Le plan mémoire|Le plan mémoire]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire interne|Le contrôleur mémoire interne]] * [[Fonctionnement d'un ordinateur/Mémoires évoluées|Les mémoires évoluées]] ===Les mémoires primaires=== * [[Fonctionnement d'un ordinateur/Les mémoires ROM|Les mémoires ROM : Mask ROM, PROM, EPROM, EEPROM, Flash]] * [[Fonctionnement d'un ordinateur/Les mémoires SRAM synchrones|Les mémoires SRAM synchrones]] * [[Fonctionnement d'un ordinateur/Les mémoires RAM dynamiques (DRAM)|Les mémoires RAM dynamiques (DRAM)]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire externe|Le contrôleur mémoire externe]] ===Les mémoires exotiques=== * [[Fonctionnement d'un ordinateur/Les mémoires associatives|Les mémoires associatives]] * [[Fonctionnement d'un ordinateur/Les mémoires FIFO et LIFO|Les mémoires FIFO et LIFO]] ==Le processeur== ===L'architecture externe=== * [[Fonctionnement d'un ordinateur/Langage machine et assembleur|Langage machine et assembleur]] * [[Fonctionnement d'un ordinateur/Les registres du processeur|Les registres du processeur]] * [[Fonctionnement d'un ordinateur/Le modèle mémoire : alignement et boutisme|Le modèle mémoire : alignement et boutisme]] * [[Fonctionnement d'un ordinateur/Les modes d'adressage|Les modes d'adressage]] * [[Fonctionnement d'un ordinateur/L'encodage des instructions|L'encodage des instructions]] * [[Fonctionnement d'un ordinateur/Les jeux d'instructions|Les jeux d'instructions]] * [[Fonctionnement d'un ordinateur/La pile d'appel et les fonctions|La pile d'appel et les fonctions]] * [[Fonctionnement d'un ordinateur/Les interruptions et exceptions|Les interruptions et exceptions]] ===La micro-architecture=== * [[Fonctionnement d'un ordinateur/Les composants d'un processeur|Les composants d'un processeur]] * [[Fonctionnement d'un ordinateur/Le chemin de données|Le chemin de données]] * [[Fonctionnement d'un ordinateur/L'unité de chargement et le program counter|L'unité de chargement et le program counter]] * [[Fonctionnement d'un ordinateur/L'unité de contrôle|L'unité de contrôle]] * [[Fonctionnement d'un ordinateur/L'implémentation matérielle des branchements|L'implémentation matérielle des branchements]] ===Les jeux d'instruction anciens, avant les registres généraux ou exotiques=== * [[Fonctionnement d'un ordinateur/Les architectures à accumulateur|Les architectures à accumulateur]] * [[Fonctionnement d'un ordinateur/Les architectures à pile et mémoire-mémoire|Les architectures à pile et mémoire-mémoire]] * [[Fonctionnement d'un ordinateur/Les processeurs 8 bits et moins|Les processeurs 8 bits et moins]] ===L'espace d'adressage du processeur et la multiprogrammation=== * [[Fonctionnement d'un ordinateur/L'espace d'adressage du processeur|L'espace d'adressage du processeur]] * [[Fonctionnement d'un ordinateur/L'abstraction mémoire et la mémoire virtuelle|L'abstraction mémoire et la mémoire virtuelle]] ==Les entrées-sorties et périphériques== * [[Fonctionnement d'un ordinateur/Les méthodes de synchronisation entre processeur et périphériques|Les méthodes de synchronisation entre processeur et périphériques]] * [[Fonctionnement d'un ordinateur/L'adressage des périphériques|L'adressage des périphériques]] * [[Fonctionnement d'un ordinateur/Les périphériques et les cartes d'extension|Les périphériques et les cartes d'extension]] ==Les mémoires de stockage== * [[Fonctionnement d'un ordinateur/Les mémoires de masse : généralités|Les mémoires de masse : généralités]] * [[Fonctionnement d'un ordinateur/Les disques durs|Les disques durs]] * [[Fonctionnement d'un ordinateur/Les solid-state drives|Les solid-state drives]] * [[Fonctionnement d'un ordinateur/Les disques optiques|Les disques optiques]] * [[Fonctionnement d'un ordinateur/Compléments sur les mémoires de masse|Compléments sur les mémoires de masse]] ==La ou les mémoires caches== * [[Fonctionnement d'un ordinateur/Les mémoires cache|Les mémoires cache]] * [[Fonctionnement d'un ordinateur/Le préchargement|Le préchargement]] * [[Fonctionnement d'un ordinateur/Le Translation Lookaside Buffer|Le ''Translation Lookaside Buffer'']] ==Le parallélisme d’instructions== * [[Fonctionnement d'un ordinateur/Le pipeline|Le pipeline]] ===Les branchements et le ''front-end''=== * [[Fonctionnement d'un ordinateur/La prédiction de branchement|La prédiction de branchement]] * [[Fonctionnement d'un ordinateur/Les optimisations du chargement des instructions|Les optimisations du chargement des instructions]] ===Les pipelines multicycles simples=== * [[Fonctionnement d'un ordinateur/Les pipelines multicycles|Les pipelines multicycles]] * [[Fonctionnement d'un ordinateur/L'émission dans l'ordre des instructions|L'émission dans l'ordre des instructions]] * [[Fonctionnement d'un ordinateur/Le contournement (data forwarding)|Le contournement (data forwarding)]] * [[Fonctionnement d'un ordinateur/Les premiers processeurs Intel|Les premiers processeurs Intel]] ===L’exécution dans le désordre=== * [[Fonctionnement d'un ordinateur/L'exécution dans le désordre|L'exécution dans le désordre]] * [[Fonctionnement d'un ordinateur/Le renommage de registres|Le renommage de registres]] * [[Fonctionnement d'un ordinateur/Le scoreboarding et l'algorithme de Tomasulo|Annexe : Le scoreboarding et l'algorithme de Tomasulo]] ===Les optimisations des accès mémoire=== * [[Fonctionnement d'un ordinateur/La désambiguïsation mémoire|La désambiguïsation mémoire]] * [[Fonctionnement d'un ordinateur/Le parallélisme mémoire|Le parallélisme mémoire]] ===L'émission multiple=== * [[Fonctionnement d'un ordinateur/Les processeurs superscalaires|Les processeurs superscalaires]] * [[Fonctionnement d'un ordinateur/Exemples de microarchitectures CPU : le cas du x86|Exemples de CPU superscalaires: le cas du x86]] * [[Fonctionnement d'un ordinateur/Les processeurs VLIW et EPIC|Les processeurs VLIW et EPIC]] * [[Fonctionnement d'un ordinateur/Les architectures dataflow|Les architectures dataflow]] ==Les architectures parallèles== * [[Fonctionnement d'un ordinateur/Les architectures parallèles|Les architectures parallèles]] * [[Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs|Les architectures multiprocesseurs et multicœurs]] * [[Fonctionnement d'un ordinateur/Architectures multithreadées et Hyperthreading|Les architectures multithreadées et Hyperthreading]] * [[Fonctionnement d'un ordinateur/Les architectures à parallélisme de données|Les architectures à parallélisme de données]] * [[Fonctionnement d'un ordinateur/La cohérence des caches|La cohérence des caches]] * [[Fonctionnement d'un ordinateur/Les sections critiques et le modèle mémoire|Les sections critiques et le modèle mémoire]] ==Annexes== ===Annexes sur les nombres flottants et les FPUs=== * [[Fonctionnement d'un ordinateur/Un exemple de jeu d'instruction : l'extension x87|Un exemple de jeu d'instruction : l'extension x87]] * [[Fonctionnement d'un ordinateur/Les coprocesseurs : FPU et IO|Les coprocesseurs : FPU et IO]] ===Les jeux d’instruction spécialisés=== * [[Fonctionnement d'un ordinateur/L'accélération matérielle de la virtualisation|L'accélération matérielle de la virtualisation]] * [[Fonctionnement d'un ordinateur/Les ISA optimisés pour la compilation/interprétation|Les ISA optimisés pour la compilation/interprétation]] * [[Fonctionnement d'un ordinateur/Les processeurs de traitement du signal|Les processeurs de traitement du signal]] * [[Fonctionnement d'un ordinateur/Les architectures actionnées par déplacement|Les architectures actionnées par déplacement]] * [[Fonctionnement d'un ordinateur/Les architectures systoliques|Les architectures systoliques]] * [[Fonctionnement d'un ordinateur/Les architectures neuromorphiques|Les réseaux de neurones matériels]] ===Les autres annexes=== * [[Fonctionnement d'un ordinateur/Le matériel réseau|Le matériel réseau]] * [[Fonctionnement d'un ordinateur/La tolérance aux pannes|La tolérance aux pannes]] * [[Fonctionnement d'un ordinateur/Les ordinateurs de première génération : tubes à vide et mémoires|Les ordinateurs de première génération : tubes à vide et mémoires]] * [[Fonctionnement d'un ordinateur/Les ordinateurs à encodages non-binaires|Les ordinateurs à encodages non-binaires]] * [[Fonctionnement d'un ordinateur/Les circuits réversibles|Les circuits réversibles]] * [[Fonctionnement d'un ordinateur/Les circuits de conversion analogique-numérique|Les circuits de conversion analogique-numérique]] {{autocat}} bk2892r6h6eky2l2tmgy928b1l3nxex 765834 765825 2026-05-02T20:06:36Z Mewtow 31375 /* Annexes sur les nombres flottants et les FPUs */ 765834 wikitext text/x-wiki __NOTOC__ * [[Fonctionnement d'un ordinateur/Introduction|Introduction]] ==Le codage des informations== * [[Fonctionnement d'un ordinateur/L'encodage des données|L'encodage des données]] * [[Fonctionnement d'un ordinateur/Le codage des nombres|Le codage des nombres]] * [[Fonctionnement d'un ordinateur/Les codes de détection/correction d'erreur|Les codes de détection/correction d'erreur]] ==Les circuits électroniques== * [[Fonctionnement d'un ordinateur/Les portes logiques|Les portes logiques]] ===Les circuits combinatoires=== * [[Fonctionnement d'un ordinateur/Les circuits combinatoires|Les circuits combinatoires]] * [[Fonctionnement d'un ordinateur/Les circuits de masquage|Les circuits de masquage]] * [[Fonctionnement d'un ordinateur/Les circuits de sélection|Les circuits de sélection]] ===Les circuits séquentiels=== * [[Fonctionnement d'un ordinateur/Les bascules : des mémoires de 1 bit|Les bascules : des mémoires de 1 bit]] * [[Fonctionnement d'un ordinateur/Les circuits synchrones et asynchrones|Les circuits synchrones et asynchrones]] * [[Fonctionnement d'un ordinateur/Les registres et mémoires adressables|Les registres et mémoires adressables]] * [[Fonctionnement d'un ordinateur/Les circuits compteurs et décompteurs|Les circuits compteurs et décompteurs]] * [[Fonctionnement d'un ordinateur/Les timers et diviseurs de fréquence|Les timers et diviseurs de fréquence]] ===Les circuits de calcul et de comparaison=== * [[Fonctionnement d'un ordinateur/Les circuits de décalage et de rotation|Les circuits de décalage et de rotation]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition et la soustraction|Les circuits pour l'addition et la soustraction]] * [[Fonctionnement d'un ordinateur/Les circuits de comparaison|Les circuits de comparaison]] * [[Fonctionnement d'un ordinateur/Les unités arithmétiques et logiques entières (simples)|Les unités arithmétiques et logiques entières (simples)]] * [[Fonctionnement d'un ordinateur/Les circuits pour l'addition multiopérande|Les circuits pour l'addition multiopérande]] * [[Fonctionnement d'un ordinateur/Les circuits pour la multiplication et la division|Les circuits pour la multiplication et la division]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul logique et bit à bit|Les circuits de calcul logique et bit à bit]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul flottant|Les circuits de calcul flottant]] * [[Fonctionnement d'un ordinateur/Les circuits de calcul trigonométriques|Les circuits de calcul trigonométriques]] ===Les circuits intégrés à semi-conducteurs=== * [[Fonctionnement d'un ordinateur/Les transistors et portes logiques|Les transistors et portes logiques]] * [[Fonctionnement d'un ordinateur/Les circuits intégrés|Les circuits intégrés]] * [[Fonctionnement d'un ordinateur/L'interface électrique entre circuits intégrés et bus|L'interface électrique entre circuits intégrés et bus]] ==L'architecture d'un ordinateur== * [[Fonctionnement d'un ordinateur/L'architecture de base d'un ordinateur|L'architecture de base d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La hiérarchie mémoire|La hiérarchie mémoire]] * [[Fonctionnement d'un ordinateur/La performance d'un ordinateur|La performance d'un ordinateur]] * [[Fonctionnement d'un ordinateur/La loi de Moore et les tendances technologiques|La loi de Moore et les tendances technologiques]] * [[Fonctionnement d'un ordinateur/Les techniques de réduction de la consommation électrique d'un processeur|Les techniques de réduction de la consommation électrique d'un processeur]] ==Les bus électroniques et la carte mère== * [[Fonctionnement d'un ordinateur/La carte mère, chipset et BIOS|La carte mère, chipset et BIOS]] * [[Fonctionnement d'un ordinateur/Les bus et liaisons point à point (généralités)|Les bus et liaisons point à point (généralités)]] * [[Fonctionnement d'un ordinateur/Les encodages spécifiques aux bus|Les encodages spécifiques aux bus]] * [[Fonctionnement d'un ordinateur/Les liaisons point à point|Les liaisons point à point]] * [[Fonctionnement d'un ordinateur/Les bus électroniques|Les bus électroniques]] * [[Fonctionnement d'un ordinateur/Quelques exemples de bus et de liaisons point à point|Quelques exemples de bus et de liaisons point à point]] ==Les mémoires RAM/ROM== * [[Fonctionnement d'un ordinateur/Les différents types de mémoires|Les différents types de mémoires]] * [[Fonctionnement d'un ordinateur/L'interface d'une mémoire électronique|L'interface d'une mémoire électronique]] * [[Fonctionnement d'un ordinateur/Le bus mémoire|Le bus mémoire]] ===La micro-architecture d'une mémoire adressable=== * [[Fonctionnement d'un ordinateur/Les cellules mémoires|Les cellules mémoires]] * [[Fonctionnement d'un ordinateur/Le plan mémoire|Le plan mémoire]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire interne|Le contrôleur mémoire interne]] * [[Fonctionnement d'un ordinateur/Mémoires évoluées|Les mémoires évoluées]] ===Les mémoires primaires=== * [[Fonctionnement d'un ordinateur/Les mémoires ROM|Les mémoires ROM : Mask ROM, PROM, EPROM, EEPROM, Flash]] * [[Fonctionnement d'un ordinateur/Les mémoires SRAM synchrones|Les mémoires SRAM synchrones]] * [[Fonctionnement d'un ordinateur/Les mémoires RAM dynamiques (DRAM)|Les mémoires RAM dynamiques (DRAM)]] * [[Fonctionnement d'un ordinateur/Contrôleur mémoire externe|Le contrôleur mémoire externe]] ===Les mémoires exotiques=== * [[Fonctionnement d'un ordinateur/Les mémoires associatives|Les mémoires associatives]] * [[Fonctionnement d'un ordinateur/Les mémoires FIFO et LIFO|Les mémoires FIFO et LIFO]] ==Le processeur== ===L'architecture externe=== * [[Fonctionnement d'un ordinateur/Langage machine et assembleur|Langage machine et assembleur]] * [[Fonctionnement d'un ordinateur/Les registres du processeur|Les registres du processeur]] * [[Fonctionnement d'un ordinateur/Le modèle mémoire : alignement et boutisme|Le modèle mémoire : alignement et boutisme]] * [[Fonctionnement d'un ordinateur/Les modes d'adressage|Les modes d'adressage]] * [[Fonctionnement d'un ordinateur/L'encodage des instructions|L'encodage des instructions]] * [[Fonctionnement d'un ordinateur/Les jeux d'instructions|Les jeux d'instructions]] * [[Fonctionnement d'un ordinateur/La pile d'appel et les fonctions|La pile d'appel et les fonctions]] * [[Fonctionnement d'un ordinateur/Les interruptions et exceptions|Les interruptions et exceptions]] ===La micro-architecture=== * [[Fonctionnement d'un ordinateur/Les composants d'un processeur|Les composants d'un processeur]] * [[Fonctionnement d'un ordinateur/Le chemin de données|Le chemin de données]] * [[Fonctionnement d'un ordinateur/L'unité de chargement et le program counter|L'unité de chargement et le program counter]] * [[Fonctionnement d'un ordinateur/L'unité de contrôle|L'unité de contrôle]] * [[Fonctionnement d'un ordinateur/L'implémentation matérielle des branchements|L'implémentation matérielle des branchements]] ===Les jeux d'instruction anciens, avant les registres généraux ou exotiques=== * [[Fonctionnement d'un ordinateur/Les architectures à accumulateur|Les architectures à accumulateur]] * [[Fonctionnement d'un ordinateur/Les architectures à pile et mémoire-mémoire|Les architectures à pile et mémoire-mémoire]] * [[Fonctionnement d'un ordinateur/Les processeurs 8 bits et moins|Les processeurs 8 bits et moins]] ===L'espace d'adressage du processeur et la multiprogrammation=== * [[Fonctionnement d'un ordinateur/L'espace d'adressage du processeur|L'espace d'adressage du processeur]] * [[Fonctionnement d'un ordinateur/L'abstraction mémoire et la mémoire virtuelle|L'abstraction mémoire et la mémoire virtuelle]] ==Les entrées-sorties et périphériques== * [[Fonctionnement d'un ordinateur/Les méthodes de synchronisation entre processeur et périphériques|Les méthodes de synchronisation entre processeur et périphériques]] * [[Fonctionnement d'un ordinateur/L'adressage des périphériques|L'adressage des périphériques]] * [[Fonctionnement d'un ordinateur/Les périphériques et les cartes d'extension|Les périphériques et les cartes d'extension]] ==Les mémoires de stockage== * [[Fonctionnement d'un ordinateur/Les mémoires de masse : généralités|Les mémoires de masse : généralités]] * [[Fonctionnement d'un ordinateur/Les disques durs|Les disques durs]] * [[Fonctionnement d'un ordinateur/Les solid-state drives|Les solid-state drives]] * [[Fonctionnement d'un ordinateur/Les disques optiques|Les disques optiques]] * [[Fonctionnement d'un ordinateur/Compléments sur les mémoires de masse|Compléments sur les mémoires de masse]] ==La ou les mémoires caches== * [[Fonctionnement d'un ordinateur/Les mémoires cache|Les mémoires cache]] * [[Fonctionnement d'un ordinateur/Le préchargement|Le préchargement]] * [[Fonctionnement d'un ordinateur/Le Translation Lookaside Buffer|Le ''Translation Lookaside Buffer'']] ==Le parallélisme d’instructions== * [[Fonctionnement d'un ordinateur/Le pipeline|Le pipeline]] ===Les branchements et le ''front-end''=== * [[Fonctionnement d'un ordinateur/La prédiction de branchement|La prédiction de branchement]] * [[Fonctionnement d'un ordinateur/Les optimisations du chargement des instructions|Les optimisations du chargement des instructions]] ===Les pipelines multicycles simples=== * [[Fonctionnement d'un ordinateur/Les pipelines multicycles|Les pipelines multicycles]] * [[Fonctionnement d'un ordinateur/L'émission dans l'ordre des instructions|L'émission dans l'ordre des instructions]] * [[Fonctionnement d'un ordinateur/Le contournement (data forwarding)|Le contournement (data forwarding)]] * [[Fonctionnement d'un ordinateur/Les premiers processeurs Intel|Les premiers processeurs Intel]] ===L’exécution dans le désordre=== * [[Fonctionnement d'un ordinateur/L'exécution dans le désordre|L'exécution dans le désordre]] * [[Fonctionnement d'un ordinateur/Le renommage de registres|Le renommage de registres]] * [[Fonctionnement d'un ordinateur/Le scoreboarding et l'algorithme de Tomasulo|Annexe : Le scoreboarding et l'algorithme de Tomasulo]] ===Les optimisations des accès mémoire=== * [[Fonctionnement d'un ordinateur/La désambiguïsation mémoire|La désambiguïsation mémoire]] * [[Fonctionnement d'un ordinateur/Le parallélisme mémoire|Le parallélisme mémoire]] ===L'émission multiple=== * [[Fonctionnement d'un ordinateur/Les processeurs superscalaires|Les processeurs superscalaires]] * [[Fonctionnement d'un ordinateur/Exemples de microarchitectures CPU : le cas du x86|Exemples de CPU superscalaires: le cas du x86]] * [[Fonctionnement d'un ordinateur/Les processeurs VLIW et EPIC|Les processeurs VLIW et EPIC]] * [[Fonctionnement d'un ordinateur/Les architectures dataflow|Les architectures dataflow]] ==Les architectures parallèles== * [[Fonctionnement d'un ordinateur/Les architectures parallèles|Les architectures parallèles]] * [[Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs|Les architectures multiprocesseurs et multicœurs]] * [[Fonctionnement d'un ordinateur/Architectures multithreadées et Hyperthreading|Les architectures multithreadées et Hyperthreading]] * [[Fonctionnement d'un ordinateur/Les architectures à parallélisme de données|Les architectures à parallélisme de données]] * [[Fonctionnement d'un ordinateur/La cohérence des caches|La cohérence des caches]] * [[Fonctionnement d'un ordinateur/Les sections critiques et le modèle mémoire|Les sections critiques et le modèle mémoire]] ==Annexes== ===Les nombres flottants : FPUs et coprocesseurs=== * [[Fonctionnement d'un ordinateur/Un exemple de jeu d'instruction : l'extension x87|Un exemple de jeu d'instruction : l'extension x87]] * [[Fonctionnement d'un ordinateur/Les coprocesseurs : FPU et IO|Les coprocesseurs : FPU et IO]] ===Les jeux d’instruction spécialisés=== * [[Fonctionnement d'un ordinateur/L'accélération matérielle de la virtualisation|L'accélération matérielle de la virtualisation]] * [[Fonctionnement d'un ordinateur/Les ISA optimisés pour la compilation/interprétation|Les ISA optimisés pour la compilation/interprétation]] * [[Fonctionnement d'un ordinateur/Les processeurs de traitement du signal|Les processeurs de traitement du signal]] * [[Fonctionnement d'un ordinateur/Les architectures actionnées par déplacement|Les architectures actionnées par déplacement]] * [[Fonctionnement d'un ordinateur/Les architectures systoliques|Les architectures systoliques]] * [[Fonctionnement d'un ordinateur/Les architectures neuromorphiques|Les réseaux de neurones matériels]] ===Les autres annexes=== * [[Fonctionnement d'un ordinateur/Le matériel réseau|Le matériel réseau]] * [[Fonctionnement d'un ordinateur/La tolérance aux pannes|La tolérance aux pannes]] * [[Fonctionnement d'un ordinateur/Les ordinateurs de première génération : tubes à vide et mémoires|Les ordinateurs de première génération : tubes à vide et mémoires]] * [[Fonctionnement d'un ordinateur/Les ordinateurs à encodages non-binaires|Les ordinateurs à encodages non-binaires]] * [[Fonctionnement d'un ordinateur/Les circuits réversibles|Les circuits réversibles]] * [[Fonctionnement d'un ordinateur/Les circuits de conversion analogique-numérique|Les circuits de conversion analogique-numérique]] {{autocat}} j4e6t397m7p7wpg59b8kcae6ulrwaqf Fonctionnement d'un ordinateur/Les bus électroniques 0 72818 765760 755764 2026-05-02T14:52:27Z Mewtow 31375 /* L'arbitrage du bus */ 765760 wikitext text/x-wiki Il y a quelques chapitres, nous avons vu la différence entre bus et liaison point à point : là où ces dernières ne connectent que deux composants, les bus de communication en connectent bien plus. Ce faisant, les bus de communication font face à de nouveaux problèmes, inconnus des liaisons point à point. Et ce sont ces problèmes qui font l'objet de ce chapitre. Autant le chapitre précédent valait à la fois pour les liaisons point à point et les bus, autant ce n'est pas le cas de celui-ci. Ce chapitre va parler de ce qui n'est valable que pour les bus de communication, comme leur arbitrage, la détection des collisions, etc. Tous ces problèmes ne peuvent pas survenir, par définition, sur les liaisons point à point. ==L'adressage du récepteur== [[File:Bus general schematic.svg|vignette|Schéma d'un bus.]] La trame doit naturellement être envoyée à un récepteur, seul destinataire de la trame. Sur les liaisons point à point, il n'y a pas besoin de préciser quel est le récepteur. Mais sur les bus, c'est une toute autre histoire. Tous les composants reliés aux bus sont de potentiels récepteurs et l'émetteur doit préciser à qui la trame est destinée. Pour résoudre ce problème, chaque composant se voit attribuer une '''adresse''', il est « numéroté ». Cela fonctionne aussi pour les composants qui sont des périphériques. ===L'adressage sur les bus parallèles et série=== Sur les bus parallèles, l'adresse est généralement transmise sur des fils à part, sur un sous-bus dédié appelé le bus d'adresse. En général, les adresses sur les bus pour périphériques sont assez petites, de quelques bits dans le cas le plus fréquent, quelques octets tout au plus. Il n'y a pas besoin de plus pour adresser une centaine de composants ou plus. Les seuls bus à avoir des adresses de plusieurs octets sont les bus liés aux mémoires, ou ceux qui ont un rapport avec les réseaux informatiques. Les '''bus multiplexés''' utilisent une astuce pour économiser des fils et des broches. Un bus multiplexé sert alternativement de bus de donnée ou d'adresse, suivant la valeur d'un bit du bus de commande. Ce dernier, le bit ''Adress Line Enable'' (ALE), précise si le contenu du bus est une adresse ou une donnée : il vaut 1 quand une adresse transite sur le bus, et 0 si le bus contient une donnée. Un défaut de ces bus est que les transferts sont plus lents, car l'adresse et la donnée ne sont pas envoyées en même temps lors d'une écriture. Un autre problème des bus multiplexé est qu'ils ont a peu près autant de bits pour coder l'adresse que pour transporter les données. Par exemple, un bus multiplexé de 8 bits transmettra des adresses de 16 bits, mais aussi des données de 16 bits. Ils sont donc moins versatiles, mais cela pose problème sur les bus où l'on peut connecter peu de périphériques. Dans ce cas, les adresses sont très petites et l'économie de fils est donc beaucoup plus faible. Passons maintenant aux '''bus série''' (ou certains bus parallèles particuliers). Pour arriver à destination, la trame doit indiquer l'adresse du composant de destination. Les récepteurs espionnent le bus en permanence pour détecter les trames qui leur sont destinées. Ils lisent toutes les trames envoyées sur le bus et en extraient l'adresse de destination : si celle-ci leur correspond, ils lisent le reste de la trame, ils ne la prennent pas en compte sinon. L'adresse en question est intégrée à la trame et est placée à un endroit précis, toujours le même, pour que le récepteur puisse l'extraire. Le plus souvent, l'adresse de destination est placée au début de la trame, afin qu'elle soit envoyée au plus vite. Ainsi, les périphériques savent plus rapidement si la trame leur est destinée ou non, l'adresse étant connue le plus tôt possible. ===Le décodage d'adresse=== Le fait d'attribuer une adresse à chaque composant est une idée simple, mais efficace. Encore faut-il la mettre en œuvre et il existe plusieurs possibilités pour cela. Implémenter l'adressage sur un bus demande à ce que chaque composant sache d'une manière ou d'une autre que c'est à lui que l'on veut parler et pas à un autre. Lorsqu'une adresse est envoyée sur le bus, seul l'émetteur et le récepteur se connectent au bus, les autres composants ne sont pas censés réagir. Et pour cela, il existe deux possibilités : soit on délègue l'adressage au composant, soit on ajoute un circuit qui active le composant adressé et désactive les autres. Avec la première méthode, les composants branchés sur le bus monitorent en permanence ce qui est transféré sur le bus. Quand un envoi de commande a lieu, chaque composant extrait l'adresse transmise sur le bus et vérifie si c'est bien la sienne. Si c'est le cas, le composant se connecte sur le bus et les autres composants se déconnectent. En conséquence, chaque composant contient un comparateur pour cette vérification d'adresse, dont la sortie commande les circuits trois états qui relient le contrôleur au bus. Cette méthode est particulièrement pratique sur les bus où le bus d'adresse est séparé du bus de données. Si ce n'est pas le cas, le composant doit mémoriser l'adresse transmise sur le bus dans un registre, avant de faire la comparaison? Même chose sur les bus série. La seconde solution est celle du '''décodage d'adresse'''. Elle utilise un circuit qui détermine, à partir de l'adresse, quel est le composant adressé. Seul ce composant sera activé/connecté au bus, tandis que les autres seront désactivés/déconnectés du bus. Pour implémenter la dernière solution, chaque périphérique possède une entrée CS, qui active ou désactive le composant suivant sa valeur. Le composant se déconnecte du bus si ce bit est à 0 et est connecté s'il est à 1. Pour éviter les conflits, un seul composant doit avoir son bit CS à 1. Pour cela, il faut ajouter un circuit qui prend en entrée l'adresse et qui commande les bits CS : ce circuit est un circuit de décodage partiel d'adresse. [[File:Décodage d'adresse sur un bus.png|centre|vignette|upright=2|Décodage d'adresse sur un bus]] ==L'interfaçage avec le bus== Une fois que l'on sait quel composant a accès au bus à un instant donné, il faut trouver un moyen pour que les composants non sélectionnés par l'arbitrage ne puissent pas écrire sur le bus. Une première solution consiste à relier les entrées/sorties des composants au bus via un multiplexeur/démultiplexeur : on est alors certain que seul un composant pourra émettre sur le bus à un moment donné. L'arbitrage du bus choisit quel composant peut émettre, et configure l'entrée de commande du multiplexeur en fonction. Les multiplexeurs et démultiplexeurs sont configurés en utilisant l'adresse du composant émetteur/récepteur. Une autre solution consiste à connecter et déconnecter les circuits du bus selon les besoins. À un instant t, seul l'émetteur et le récepteur sont connectés au bus. Mais cela demande pouvoir déconnecter du bus les entrées/sorties qui n'envoient pas de données. Plus précisément, leurs sorties peuvent être mises dans un état de haute impédance, qui n'est ni un 0 ni un 1. Quand une sortie est en haute impédance, elle n'a pas la moindre influence sur le bus et ne peut donc pas y écrire. Tout se passe comme si elle était déconnectée du bus, et dans les faits, elle l'est souvent. Dans le chapitre sur les circuits intégrés, nous avons vu qu'il existait trois types de sorties : les sorties totem-pole, à drain/collecteur ouvert, et trois-état. Les sorties totem-pole fournissent soit un 1, soit un zéro, et ne peuvent pas être déconnectées proprement dit. Les deux autres types de sorties en sont capables. Et nous allons les voir dans ce qui suit. ===L'interfaçage avec le bus avec des circuits trois-états=== Le cas le plus simple est celui des sorties trois-état, qui peuvent soit fournir un 1, soit fournir un 0, soit être déconnectées. Malheureusement, les circuits intégrés normaux n'ont pas naturellement des entrées-sorties trois-état. Les portes logiques fournissent soit un 0, soit un 1, pas d'état déconnecté. [[File:Tampons3E.png|vignette|Tampons 3 états.]] La solution retenue sur presque tous les circuits actuels est d'utiliser des '''tampons trois états'''. Pour rappel, nous avions vu ce circuit dans le chapitre sur les circuits intégrés, mais un rappel ne fera clairement pas de mal. Un tampon trois-états peut être vu comme une porte OUI modifiée, qui peut déconnecter sa sortie de son entrée. Un tampon trois-état possède une entrée de donnée, une entrée de commande, et une sortie : suivant ce qui est mis sur l'entrée de commande, la sortie est soit en état de haute impédance (déconnectée du bus), soit égale à l'entrée. {|class="wikitable" |- !Commande!!Entrée!!Sortie |- ||0||0||Haute impédance/Déconnexion |- ||0||1||Haute impédance/Déconnexion |- ||1||0||0 |- ||1||1||1 |} [[File:Tristate buffer.svg|centre|vignette|upright=1.5|Tampon trois-états.]] On peut utiliser ces tampons trois états pour permettre à un composant d'émettre ou de recevoir des données sur un bus. Par exemple, on peut utiliser ces tampons pour autoriser les émissions sur le bus, le composant étant déconnecté (haute impédance) s'il n'a rien à émettre. Le composant a accès au bus en écriture seule. L'exemple typique est celui d'une mémoire ROM reliée à un bus de données. [[File:Bus en écriture seule.png|centre|vignette|upright=1.5|Bus en écriture seule.]] Une autre possibilité est de permettre à un composant de recevoir des données sur le bus. Le composant peut alors surveiller le bus et regarder si des données lui sont transmises, ou se déconnecter du bus. Le composant a alors accès au bus en lecture seule. [[File:Bus en lecture seule.png|centre|vignette|upright=1.5|Bus en lecture seule.]] Évidemment, on peut autoriser lectures et écritures : le composant peut alors aussi bien émettre que recevoir des données sur le bus quand il s'y connecte. On doit alors utiliser deux circuits trois états, un pour l'émission/écriture et un autre pour la réception/lecture. Comme exemple, on pourrait citer les mémoires RAM, qui sont reliées au bus mémoire par des circuits de ce genre. Dans ce cas, les circuits trois états doivent être commandés par le bit CS (''Chip Select'') qui connecte ou déconnecte la mémoire du bus, mais aussi par le bit R/W (''Read/Write'') qui décide du sens de transfert. Pour faire la traduction entre ces deux bits et les bits à placer sur l'entrée de commande des circuits trois états, on utilise un petit circuit combinatoire assez simple. [[File:Bus en lecture et écriture.png|centre|vignette|upright=2|Bus en lecture et écriture.]] ===L'interfaçage avec le bus avec des circuits à drain/collecteur ouvert=== Les sorties à drain/collecteur ouvert sont plus limitées et ne peuvent prendre que deux états. Dans le cas le plus fréquent, la sortie est soit déconnectée, soit mise à 0 par le circuit intégré, mais elle ne peut pas être mise à 1 sans intervention extérieure. Pour compenser cela, le bus est relié à la tension d'alimentation à travers une résistance, appelée résistance de rappel. Cela garantit que le bus est naturellement à l'état 1, du moins tant que les sorties des composants sont déconnectées. Au repos, quand les composants n’envoient rien sur le bus, les sorties des composants sont déconnectées et les résistances de rappel mettent le bus à 1. Mais quand un seul composant met sa sortie à 0, cela force le bus à passer à 0. [[File:Open-Collector-Prinzip.JPG|centre|vignette|upright=2|Exemple de bus n'utilisant que des composants à sortie en collecteur ouvert.]] Pour le dire autrement, on peut voir le contenu du bus comme un ET des bits envoyés sur les sorties des composants connectés au bus. Ce détail aura son importance par la suite. Le contenu du fil peut être lu sans altérer l'état électrique du bus/fil. Avec cette méthode, le nombre de composants que l'on peut placer sur le bus est surtout limité par les spécifications électriques du bus, notamment sa capacité. Mais cela a l'avantage que le bus est compatible avec des technologies de fabrication totalement différentes, qu'il s'agisse de composants TTL, CMOS ou autres. En effet, la tension d'alimentation des composants TTL n'est pas la même que celle des composants CMOS. Utiliser des entrées-sorties à drain ouvert fait que l'on peut choisir la tension d'alimentation que l'on veut, et donc que l'on peut choisir entre TTL et CMOS. Par contre, on ne peut pas connecter composants TTL et CMOS avec des tensions d'alimentation différentes sur un même bus. Il est possible de mélanger sorties à drain/collecteur ouvert, avec des entrées "trois-états" (des entrées qui peuvent soit permettre une lecture du bus, soit être déconnectées). C'est par exemple le cas sur les microprocesseurs 8051. [[File:Port8051.png|centre|vignette|upright=2|Port d'un 8051]] ==L'arbitrage du bus== Sur certains bus, il arrive que plusieurs composants tentent d'envoyer une donnée sur le bus en même temps : c'est un '''conflit d'accès au bus'''. Cette situation arrive sur de nombreux types de bus, qu'ils soient multiplexés ou non. Sur les bus multiplexés, qui relient plus de deux composants, cette situation est fréquente du fait du nombre de récepteurs/émetteurs potentiels. Mais cela peut aussi arriver sur certains bus dédiés, les bus ''half-duplex'' étant des exemples particuliers : il se peut que les deux composants veuillent être émetteurs en même temps, ou récepteurs. Quoi qu’il en soit, ces conflits d'accès posent problème si un composant cherche à envoyer un 1 et l'autre un 0 : tout ce que l’on reçoit à l'autre bout du fil est une espèce de mélange incohérent des deux. Pour résoudre ce problème, il faut répartir l'accès au bus pour n'avoir qu'un émetteur à la fois. On doit choisir un émetteur parmi les candidats. Ce choix sera effectué différemment suivant le protocole du bus et son organisation, mais ce choix n’est pas gratuit. Certains composants devront attendre leur tour pour avoir accès au bus. Les concepteurs de bus ont inventé des méthodes pour gérer ces conflits d’accès, et choisir le plus efficacement possible l’émetteur : on parle d''''arbitrage du bus'''. [[File:CSMA-CD Verfahren.svg|centre|vignette|upright=1.5|Collisions lors de l'accès à un bus.]] ===Les méthodes d'arbitrage (algorithmes)=== Il existe plusieurs méthodes d'arbitrages, qui peuvent se classer en différents types, selon leur fonctionnement. Pour donner un exemple d'algorithme d'arbitrage, parlons de l''''arbitrage par multiplexage temporel'''. Celui-ci peut se résumer en une phrase : chacun son tour ! Chaque composant a accès au bus à tour de rôle, durant un temps fixe. Cette méthode fort simple convient si les différents composants ont des besoins approximativement équilibrés. Mais elle n'est pas adaptée quand certains composants effectuent beaucoup de transactions que les autres. Les composants gourmands manqueront de débit, alors que les autres monopoliseront le bus pour ne presque rien en faire. Une solution est d'autoriser à un composant de libérer le bus prématurément, s'il n'en a pas besoin. Ce faisant, les composants qui n'utilisent pas beaucoup le bus laisseront la place aux composants plus gourmands. Une autre méthode est celle de l''''arbitrage par requête''', qui se résume à un simple « premier arrivé, premier servi » ! L'idée est que tout composant peut réserver le bus si celui-ci est libre, mais doit attendre si le bus est déjà réservé. Pour savoir si le bus est réservé, il existe deux méthodes : * soit chaque composant peut vérifier à tout moment si le bus est libre ou non (aucun composant n'écrit dessus) ; * soit on rajoute un bit qui indique si le bus est libre ou occupé : le bit busy. Certains protocoles permettent de libérer le bus de force pour laisser la place à un autre composant : on parle alors de '''''bus mastering'''''. Sur certains bus, certains composants sont prioritaires, et les circuits chargés de l'arbitrage libèrent le bus de force si un composant plus prioritaire veut utiliser le bus. Bref, les méthodes d'arbitrage sont nombreuses. ===Arbitrage centralisé ou décentralisé=== Une autre classification nous dit si un composant gère le bus, ou si cet arbitrage est délégué aux composants qui accèdent au bus. * Dans l''''arbitrage centralisé''', un circuit spécialisé s'occupe de l'arbitrage du bus. * Dans l''''arbitrage distribué''', chaque composant se débrouille de concert avec tous les autres pour éviter les conflits d’accès au bus : chaque composant décide seul d'émettre ou pas, suivant l'état du bus. : ''Notons qu'un même algorithme peut être implémenté soit de manière centralisée, soit de manière décentralisée.'' Pour donner un exemple d'arbitrage centralisé, nous allons aborder l''''arbitrage par daisy chain'''. Il s'agit d'un algorithme centralisé, dans lequel tout composant a une priorité fixe. Dans celui-ci, tous les composants sont reliés à un arbitre, qui dit si l'accès au bus est autorisé. Les composants sont reliés à l'arbitre via deux fils : un fil nommé ''Request'' qui part des composants et arrive dans l'arbitre, et un fil ''Grant'' qui part de l'arbitre et parcours les composants un par un. Le fil ''Request'' transmet à l'arbitre une demande d'accès au bus. Le composant qui veut accéder au bus va placer un sur ce fil 1 quand il veut accéder au bus. Le fil ''Grant'' permet à l'arbitre de signaler qu'un des composants pourra avoir accès au bus. Le fil est unique ''Request'' est partagé entre tous les composants (cela remplace l'utilisation d'une porte OU). Par contre, le fil ''Grant'' relie l'arbitre au premier composant, puis le premier composant au second, le second au troisième, etc. Tous les composants sont reliés en guirlande par ce fil Grant. Par défaut, l'arbitre envoie un 1 quand il accepte un nouvel accès au bus (et un 0 quand il veut bloquer tout nouvel accès). Quand un composant ne veut pas accéder au bus, il transmet le bit reçu sur ce fil tel quel, sans le modifier. Mais s'il veut accéder au bus, il mettra un zéro sur ce fil : les composants précédents verront ainsi un 1 sur le fil, mais les suivants verront un zéro (interdiction d'accès). Ainsi, les composants les plus près du bus, dans l'ordre de la guirlande, seront prioritaires sur les autres. [[File:Decentralizz.jpg|centre|vignette|upright=2|Daisy Chain.]] ===L'arbitrage sur les bus à collecteur ouvert=== Les bus à collecteur ouvert ont un avantage pour ce qui est de l'arbitrage : ils permettent de détecter les collisions assez simplement. En effet, le contenu du bus est égal à un ET entre toutes les sorties reliées au bus. Si tous les composants veulent laisser le bus à 1 à un instant t, le bus sera à 1 : s'il y a collision, elle n'est pas grave car tous les composants envoient la même chose. Pareil s'ils veulent tous mettre le bus à 0 : le bus sera à 0 et la collision n'aura aucun impact. Par contre, si une sortie veut mettre le bus à 0 et un autre veut le laisser à 1, alors le bus sera mis à 0. La détection des collisions est alors évidente. Les composants qui émettent quelque chose sur le bus vérifient si le bus a bien la valeur qu'ils envoient dessus. Si les deux concordent, on ne sait pas il y a collision et il y a de bonnes chances que ce ne soit pas le cas, alors on continue la transmission. Mais si un composant envoie un 1 et que le bus est à 0, cela signifie qu'un autre composant a mis le bus à 0 et qu'il y a une collision. Le composant qui a détecté la collision cesse immédiatement la transmission et laisse la place au composant qui a mis le bus à 0, il le laisse finir la transmission entamée. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les liaisons point à point | prevText=Les liaisons point à point | next=Quelques exemples de bus et de liaisons point à point | nextText=Quelques exemples de bus et de liaisons point à point }}{{autocat}} </noinclude> pu5s4pzhdz62x4970oyi73p5hv8e60i 765761 765760 2026-05-02T14:52:35Z Mewtow 31375 /* L'arbitrage du bus */ 765761 wikitext text/x-wiki Il y a quelques chapitres, nous avons vu la différence entre bus et liaison point à point : là où ces dernières ne connectent que deux composants, les bus de communication en connectent bien plus. Ce faisant, les bus de communication font face à de nouveaux problèmes, inconnus des liaisons point à point. Et ce sont ces problèmes qui font l'objet de ce chapitre. Autant le chapitre précédent valait à la fois pour les liaisons point à point et les bus, autant ce n'est pas le cas de celui-ci. Ce chapitre va parler de ce qui n'est valable que pour les bus de communication, comme leur arbitrage, la détection des collisions, etc. Tous ces problèmes ne peuvent pas survenir, par définition, sur les liaisons point à point. ==L'adressage du récepteur== [[File:Bus general schematic.svg|vignette|Schéma d'un bus.]] La trame doit naturellement être envoyée à un récepteur, seul destinataire de la trame. Sur les liaisons point à point, il n'y a pas besoin de préciser quel est le récepteur. Mais sur les bus, c'est une toute autre histoire. Tous les composants reliés aux bus sont de potentiels récepteurs et l'émetteur doit préciser à qui la trame est destinée. Pour résoudre ce problème, chaque composant se voit attribuer une '''adresse''', il est « numéroté ». Cela fonctionne aussi pour les composants qui sont des périphériques. ===L'adressage sur les bus parallèles et série=== Sur les bus parallèles, l'adresse est généralement transmise sur des fils à part, sur un sous-bus dédié appelé le bus d'adresse. En général, les adresses sur les bus pour périphériques sont assez petites, de quelques bits dans le cas le plus fréquent, quelques octets tout au plus. Il n'y a pas besoin de plus pour adresser une centaine de composants ou plus. Les seuls bus à avoir des adresses de plusieurs octets sont les bus liés aux mémoires, ou ceux qui ont un rapport avec les réseaux informatiques. Les '''bus multiplexés''' utilisent une astuce pour économiser des fils et des broches. Un bus multiplexé sert alternativement de bus de donnée ou d'adresse, suivant la valeur d'un bit du bus de commande. Ce dernier, le bit ''Adress Line Enable'' (ALE), précise si le contenu du bus est une adresse ou une donnée : il vaut 1 quand une adresse transite sur le bus, et 0 si le bus contient une donnée. Un défaut de ces bus est que les transferts sont plus lents, car l'adresse et la donnée ne sont pas envoyées en même temps lors d'une écriture. Un autre problème des bus multiplexé est qu'ils ont a peu près autant de bits pour coder l'adresse que pour transporter les données. Par exemple, un bus multiplexé de 8 bits transmettra des adresses de 16 bits, mais aussi des données de 16 bits. Ils sont donc moins versatiles, mais cela pose problème sur les bus où l'on peut connecter peu de périphériques. Dans ce cas, les adresses sont très petites et l'économie de fils est donc beaucoup plus faible. Passons maintenant aux '''bus série''' (ou certains bus parallèles particuliers). Pour arriver à destination, la trame doit indiquer l'adresse du composant de destination. Les récepteurs espionnent le bus en permanence pour détecter les trames qui leur sont destinées. Ils lisent toutes les trames envoyées sur le bus et en extraient l'adresse de destination : si celle-ci leur correspond, ils lisent le reste de la trame, ils ne la prennent pas en compte sinon. L'adresse en question est intégrée à la trame et est placée à un endroit précis, toujours le même, pour que le récepteur puisse l'extraire. Le plus souvent, l'adresse de destination est placée au début de la trame, afin qu'elle soit envoyée au plus vite. Ainsi, les périphériques savent plus rapidement si la trame leur est destinée ou non, l'adresse étant connue le plus tôt possible. ===Le décodage d'adresse=== Le fait d'attribuer une adresse à chaque composant est une idée simple, mais efficace. Encore faut-il la mettre en œuvre et il existe plusieurs possibilités pour cela. Implémenter l'adressage sur un bus demande à ce que chaque composant sache d'une manière ou d'une autre que c'est à lui que l'on veut parler et pas à un autre. Lorsqu'une adresse est envoyée sur le bus, seul l'émetteur et le récepteur se connectent au bus, les autres composants ne sont pas censés réagir. Et pour cela, il existe deux possibilités : soit on délègue l'adressage au composant, soit on ajoute un circuit qui active le composant adressé et désactive les autres. Avec la première méthode, les composants branchés sur le bus monitorent en permanence ce qui est transféré sur le bus. Quand un envoi de commande a lieu, chaque composant extrait l'adresse transmise sur le bus et vérifie si c'est bien la sienne. Si c'est le cas, le composant se connecte sur le bus et les autres composants se déconnectent. En conséquence, chaque composant contient un comparateur pour cette vérification d'adresse, dont la sortie commande les circuits trois états qui relient le contrôleur au bus. Cette méthode est particulièrement pratique sur les bus où le bus d'adresse est séparé du bus de données. Si ce n'est pas le cas, le composant doit mémoriser l'adresse transmise sur le bus dans un registre, avant de faire la comparaison? Même chose sur les bus série. La seconde solution est celle du '''décodage d'adresse'''. Elle utilise un circuit qui détermine, à partir de l'adresse, quel est le composant adressé. Seul ce composant sera activé/connecté au bus, tandis que les autres seront désactivés/déconnectés du bus. Pour implémenter la dernière solution, chaque périphérique possède une entrée CS, qui active ou désactive le composant suivant sa valeur. Le composant se déconnecte du bus si ce bit est à 0 et est connecté s'il est à 1. Pour éviter les conflits, un seul composant doit avoir son bit CS à 1. Pour cela, il faut ajouter un circuit qui prend en entrée l'adresse et qui commande les bits CS : ce circuit est un circuit de décodage partiel d'adresse. [[File:Décodage d'adresse sur un bus.png|centre|vignette|upright=2|Décodage d'adresse sur un bus]] ==L'interfaçage avec le bus== Une fois que l'on sait quel composant a accès au bus à un instant donné, il faut trouver un moyen pour que les composants non sélectionnés par l'arbitrage ne puissent pas écrire sur le bus. Une première solution consiste à relier les entrées/sorties des composants au bus via un multiplexeur/démultiplexeur : on est alors certain que seul un composant pourra émettre sur le bus à un moment donné. L'arbitrage du bus choisit quel composant peut émettre, et configure l'entrée de commande du multiplexeur en fonction. Les multiplexeurs et démultiplexeurs sont configurés en utilisant l'adresse du composant émetteur/récepteur. Une autre solution consiste à connecter et déconnecter les circuits du bus selon les besoins. À un instant t, seul l'émetteur et le récepteur sont connectés au bus. Mais cela demande pouvoir déconnecter du bus les entrées/sorties qui n'envoient pas de données. Plus précisément, leurs sorties peuvent être mises dans un état de haute impédance, qui n'est ni un 0 ni un 1. Quand une sortie est en haute impédance, elle n'a pas la moindre influence sur le bus et ne peut donc pas y écrire. Tout se passe comme si elle était déconnectée du bus, et dans les faits, elle l'est souvent. Dans le chapitre sur les circuits intégrés, nous avons vu qu'il existait trois types de sorties : les sorties totem-pole, à drain/collecteur ouvert, et trois-état. Les sorties totem-pole fournissent soit un 1, soit un zéro, et ne peuvent pas être déconnectées proprement dit. Les deux autres types de sorties en sont capables. Et nous allons les voir dans ce qui suit. ===L'interfaçage avec le bus avec des circuits trois-états=== Le cas le plus simple est celui des sorties trois-état, qui peuvent soit fournir un 1, soit fournir un 0, soit être déconnectées. Malheureusement, les circuits intégrés normaux n'ont pas naturellement des entrées-sorties trois-état. Les portes logiques fournissent soit un 0, soit un 1, pas d'état déconnecté. [[File:Tampons3E.png|vignette|Tampons 3 états.]] La solution retenue sur presque tous les circuits actuels est d'utiliser des '''tampons trois états'''. Pour rappel, nous avions vu ce circuit dans le chapitre sur les circuits intégrés, mais un rappel ne fera clairement pas de mal. Un tampon trois-états peut être vu comme une porte OUI modifiée, qui peut déconnecter sa sortie de son entrée. Un tampon trois-état possède une entrée de donnée, une entrée de commande, et une sortie : suivant ce qui est mis sur l'entrée de commande, la sortie est soit en état de haute impédance (déconnectée du bus), soit égale à l'entrée. {|class="wikitable" |- !Commande!!Entrée!!Sortie |- ||0||0||Haute impédance/Déconnexion |- ||0||1||Haute impédance/Déconnexion |- ||1||0||0 |- ||1||1||1 |} [[File:Tristate buffer.svg|centre|vignette|upright=1.5|Tampon trois-états.]] On peut utiliser ces tampons trois états pour permettre à un composant d'émettre ou de recevoir des données sur un bus. Par exemple, on peut utiliser ces tampons pour autoriser les émissions sur le bus, le composant étant déconnecté (haute impédance) s'il n'a rien à émettre. Le composant a accès au bus en écriture seule. L'exemple typique est celui d'une mémoire ROM reliée à un bus de données. [[File:Bus en écriture seule.png|centre|vignette|upright=1.5|Bus en écriture seule.]] Une autre possibilité est de permettre à un composant de recevoir des données sur le bus. Le composant peut alors surveiller le bus et regarder si des données lui sont transmises, ou se déconnecter du bus. Le composant a alors accès au bus en lecture seule. [[File:Bus en lecture seule.png|centre|vignette|upright=1.5|Bus en lecture seule.]] Évidemment, on peut autoriser lectures et écritures : le composant peut alors aussi bien émettre que recevoir des données sur le bus quand il s'y connecte. On doit alors utiliser deux circuits trois états, un pour l'émission/écriture et un autre pour la réception/lecture. Comme exemple, on pourrait citer les mémoires RAM, qui sont reliées au bus mémoire par des circuits de ce genre. Dans ce cas, les circuits trois états doivent être commandés par le bit CS (''Chip Select'') qui connecte ou déconnecte la mémoire du bus, mais aussi par le bit R/W (''Read/Write'') qui décide du sens de transfert. Pour faire la traduction entre ces deux bits et les bits à placer sur l'entrée de commande des circuits trois états, on utilise un petit circuit combinatoire assez simple. [[File:Bus en lecture et écriture.png|centre|vignette|upright=2|Bus en lecture et écriture.]] ===L'interfaçage avec le bus avec des circuits à drain/collecteur ouvert=== Les sorties à drain/collecteur ouvert sont plus limitées et ne peuvent prendre que deux états. Dans le cas le plus fréquent, la sortie est soit déconnectée, soit mise à 0 par le circuit intégré, mais elle ne peut pas être mise à 1 sans intervention extérieure. Pour compenser cela, le bus est relié à la tension d'alimentation à travers une résistance, appelée résistance de rappel. Cela garantit que le bus est naturellement à l'état 1, du moins tant que les sorties des composants sont déconnectées. Au repos, quand les composants n’envoient rien sur le bus, les sorties des composants sont déconnectées et les résistances de rappel mettent le bus à 1. Mais quand un seul composant met sa sortie à 0, cela force le bus à passer à 0. [[File:Open-Collector-Prinzip.JPG|centre|vignette|upright=2|Exemple de bus n'utilisant que des composants à sortie en collecteur ouvert.]] Pour le dire autrement, on peut voir le contenu du bus comme un ET des bits envoyés sur les sorties des composants connectés au bus. Ce détail aura son importance par la suite. Le contenu du fil peut être lu sans altérer l'état électrique du bus/fil. Avec cette méthode, le nombre de composants que l'on peut placer sur le bus est surtout limité par les spécifications électriques du bus, notamment sa capacité. Mais cela a l'avantage que le bus est compatible avec des technologies de fabrication totalement différentes, qu'il s'agisse de composants TTL, CMOS ou autres. En effet, la tension d'alimentation des composants TTL n'est pas la même que celle des composants CMOS. Utiliser des entrées-sorties à drain ouvert fait que l'on peut choisir la tension d'alimentation que l'on veut, et donc que l'on peut choisir entre TTL et CMOS. Par contre, on ne peut pas connecter composants TTL et CMOS avec des tensions d'alimentation différentes sur un même bus. Il est possible de mélanger sorties à drain/collecteur ouvert, avec des entrées "trois-états" (des entrées qui peuvent soit permettre une lecture du bus, soit être déconnectées). C'est par exemple le cas sur les microprocesseurs 8051. [[File:Port8051.png|centre|vignette|upright=2|Port d'un 8051]] ==L'arbitrage du bus== Sur certains bus, il arrive que plusieurs composants tentent d'envoyer une donnée sur le bus en même temps : c'est un '''conflit d'accès au bus'''. Cette situation arrive sur de nombreux types de bus, qu'ils soient multiplexés ou non. Sur les bus multiplexés, qui relient plus de deux composants, cette situation est fréquente du fait du nombre de récepteurs/émetteurs potentiels. Mais cela peut aussi arriver sur certains bus dédiés, les bus ''half-duplex'' étant des exemples particuliers : il se peut que les deux composants veuillent être émetteurs en même temps, ou récepteurs. Quoi qu’il en soit, ces conflits d'accès posent problème si un composant cherche à envoyer un 1 et l'autre un 0 : tout ce que l’on reçoit à l'autre bout du fil est une espèce de mélange incohérent des deux. Pour résoudre ce problème, il faut répartir l'accès au bus pour n'avoir qu'un émetteur à la fois. On doit choisir un émetteur parmi les candidats. Ce choix sera effectué différemment suivant le protocole du bus et son organisation, mais ce choix n’est pas gratuit. Certains composants devront attendre leur tour pour avoir accès au bus. Les concepteurs de bus ont inventé des méthodes pour gérer ces conflits d’accès, et choisir le plus efficacement possible l’émetteur : on parle d''''arbitrage du bus'''. [[File:CSMA-CD Verfahren.svg|centre|vignette|upright=2|Collisions lors de l'accès à un bus.]] ===Les méthodes d'arbitrage (algorithmes)=== Il existe plusieurs méthodes d'arbitrages, qui peuvent se classer en différents types, selon leur fonctionnement. Pour donner un exemple d'algorithme d'arbitrage, parlons de l''''arbitrage par multiplexage temporel'''. Celui-ci peut se résumer en une phrase : chacun son tour ! Chaque composant a accès au bus à tour de rôle, durant un temps fixe. Cette méthode fort simple convient si les différents composants ont des besoins approximativement équilibrés. Mais elle n'est pas adaptée quand certains composants effectuent beaucoup de transactions que les autres. Les composants gourmands manqueront de débit, alors que les autres monopoliseront le bus pour ne presque rien en faire. Une solution est d'autoriser à un composant de libérer le bus prématurément, s'il n'en a pas besoin. Ce faisant, les composants qui n'utilisent pas beaucoup le bus laisseront la place aux composants plus gourmands. Une autre méthode est celle de l''''arbitrage par requête''', qui se résume à un simple « premier arrivé, premier servi » ! L'idée est que tout composant peut réserver le bus si celui-ci est libre, mais doit attendre si le bus est déjà réservé. Pour savoir si le bus est réservé, il existe deux méthodes : * soit chaque composant peut vérifier à tout moment si le bus est libre ou non (aucun composant n'écrit dessus) ; * soit on rajoute un bit qui indique si le bus est libre ou occupé : le bit busy. Certains protocoles permettent de libérer le bus de force pour laisser la place à un autre composant : on parle alors de '''''bus mastering'''''. Sur certains bus, certains composants sont prioritaires, et les circuits chargés de l'arbitrage libèrent le bus de force si un composant plus prioritaire veut utiliser le bus. Bref, les méthodes d'arbitrage sont nombreuses. ===Arbitrage centralisé ou décentralisé=== Une autre classification nous dit si un composant gère le bus, ou si cet arbitrage est délégué aux composants qui accèdent au bus. * Dans l''''arbitrage centralisé''', un circuit spécialisé s'occupe de l'arbitrage du bus. * Dans l''''arbitrage distribué''', chaque composant se débrouille de concert avec tous les autres pour éviter les conflits d’accès au bus : chaque composant décide seul d'émettre ou pas, suivant l'état du bus. : ''Notons qu'un même algorithme peut être implémenté soit de manière centralisée, soit de manière décentralisée.'' Pour donner un exemple d'arbitrage centralisé, nous allons aborder l''''arbitrage par daisy chain'''. Il s'agit d'un algorithme centralisé, dans lequel tout composant a une priorité fixe. Dans celui-ci, tous les composants sont reliés à un arbitre, qui dit si l'accès au bus est autorisé. Les composants sont reliés à l'arbitre via deux fils : un fil nommé ''Request'' qui part des composants et arrive dans l'arbitre, et un fil ''Grant'' qui part de l'arbitre et parcours les composants un par un. Le fil ''Request'' transmet à l'arbitre une demande d'accès au bus. Le composant qui veut accéder au bus va placer un sur ce fil 1 quand il veut accéder au bus. Le fil ''Grant'' permet à l'arbitre de signaler qu'un des composants pourra avoir accès au bus. Le fil est unique ''Request'' est partagé entre tous les composants (cela remplace l'utilisation d'une porte OU). Par contre, le fil ''Grant'' relie l'arbitre au premier composant, puis le premier composant au second, le second au troisième, etc. Tous les composants sont reliés en guirlande par ce fil Grant. Par défaut, l'arbitre envoie un 1 quand il accepte un nouvel accès au bus (et un 0 quand il veut bloquer tout nouvel accès). Quand un composant ne veut pas accéder au bus, il transmet le bit reçu sur ce fil tel quel, sans le modifier. Mais s'il veut accéder au bus, il mettra un zéro sur ce fil : les composants précédents verront ainsi un 1 sur le fil, mais les suivants verront un zéro (interdiction d'accès). Ainsi, les composants les plus près du bus, dans l'ordre de la guirlande, seront prioritaires sur les autres. [[File:Decentralizz.jpg|centre|vignette|upright=2|Daisy Chain.]] ===L'arbitrage sur les bus à collecteur ouvert=== Les bus à collecteur ouvert ont un avantage pour ce qui est de l'arbitrage : ils permettent de détecter les collisions assez simplement. En effet, le contenu du bus est égal à un ET entre toutes les sorties reliées au bus. Si tous les composants veulent laisser le bus à 1 à un instant t, le bus sera à 1 : s'il y a collision, elle n'est pas grave car tous les composants envoient la même chose. Pareil s'ils veulent tous mettre le bus à 0 : le bus sera à 0 et la collision n'aura aucun impact. Par contre, si une sortie veut mettre le bus à 0 et un autre veut le laisser à 1, alors le bus sera mis à 0. La détection des collisions est alors évidente. Les composants qui émettent quelque chose sur le bus vérifient si le bus a bien la valeur qu'ils envoient dessus. Si les deux concordent, on ne sait pas il y a collision et il y a de bonnes chances que ce ne soit pas le cas, alors on continue la transmission. Mais si un composant envoie un 1 et que le bus est à 0, cela signifie qu'un autre composant a mis le bus à 0 et qu'il y a une collision. Le composant qui a détecté la collision cesse immédiatement la transmission et laisse la place au composant qui a mis le bus à 0, il le laisse finir la transmission entamée. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les liaisons point à point | prevText=Les liaisons point à point | next=Quelques exemples de bus et de liaisons point à point | nextText=Quelques exemples de bus et de liaisons point à point }}{{autocat}} </noinclude> 2zvtkrcyy1ief043ho5prfiw25u23ju Fonctionnement d'un ordinateur/Les architectures systoliques 0 78311 765828 759468 2026-05-02T20:04:35Z Mewtow 31375 /* Leur utilisation dans les accélérateurs d'intelligence artificielle */ 765828 wikitext text/x-wiki Les '''architectures systoliques''' ont un chemin de données très particulier, qui est composé d'un grand nombre d’unité de calcul identiques, interconnectées via un réseau en deux dimensions non-configurable. Un exemple classique de réseau systolique est illustré ci-dessous. Dans cet exemple, l'architecture systolique est organisée en un tableau à deux dimensions d'unités de calcul. D'autres organisations sont possibles, mais c'est l'organisation la plus conventionnelle. C'est pour cela que l'on parle aussi de tableaux systoliques, qui est synonyme d'architecture systolique. [[File:Systolic array.jpg|centre|vignette|upright=1.5|Tableau systolique. Le signal d’horloge n'est pas représenté, pas plus que les registres.]] ==Le flot des données dans une architecture systolique== Les carrés sont notés DPU pour ''Data Processing Unit''. Dans le premier schéma, les flèches entre DPU donnent le sens de déplacement des opérandes et non des résultats des unités de calcul ! Les résultats des calculs ne sortent pas de l'unité de calcul. Le transfert des opérandes sur les interconnexions (les flèches) se fait de manière synchrone, c’est-à-dire cadencé par un signal d'horloge, qui commande la mise à jour des registres. Les unités de calcul sont donc associées à deux registres d'entrée : un par opérande entrant. Les DPU (''Data Processing Unit'') ne sont rien de plus que des unités de calcul couplées à un registre accumulateur. À chaque cycle, elles effectuent une opération sur les deux opérandes entrants et additionnent le tout au contenu du registre accumulateur. Les éléments de calcul reçoivent des données en entrée, effectuent un calcul dessus, et mémorisent le résultat dans un registre accumulateur. À la fin du calcul, le résultat final est disponible dans les différents accumulateurs. [[File:DPU d'une architecture systolique.png|centre|vignette|upright=1.5|DPU d'une architecture systolique]] De nouveaux opérandes sont insérées sur les bords gauche et haut du tableau à chaque cycle d'horloge. Les données insérées ainsi parcourent le tableau d'un rang à chaque cycle. Les opérandes insérés à gauche parcourent le tableau de gauche à droite, en restant sur la même ligne. Celles insérées en haut le parcourent de haut en bas, en restant sur la même colonne. Le flot des données a été comparé au flot du sang dans le corps, avec la propulsion par les battements du cœur. D'ailleurs, le terme "systolique" est l'adjectif associé au nom "systole" qui désigne les battements du cœur. Plus précisément, il désigne une partie du battement du cœur, où le cœur se contracte pour pousser le sang dans les artères. Pour exploiter le tableau systolique, il faut insérer les opérandes dedans au rythme d'un opérande par cycle pour chaque ligne/colonne. Pour cela, chaque ligne et colonne est reliée à une mémoire FIFO qui contient les opérandes à insérer, dans leur ordre d'insertion. À chaque cycle, un opérande est retiré de la FIFO et insérée dans le tableau systolique. [[File:Architecture systolique avec des FIFO.png|centre|vignette|upright=1.5|Architecture systolique avec des FIFO]] Le tableau systolique est secondé avec des circuits de contrôle qui insèrent les opérandes dans le tableau à chaque cycle. Sur beaucoup d'architectures systoliques, le tableau est en réalité l'équivalent d'une unité de calcul sur un processeur normal, le reste de l'architecture étant composé d'un séquenceur adapté aux besoins du tableau systolique. La comparaison avec les processeurs vectoriels n'en est que plus pertinente. ==Les opérations adaptées aux architectures systoliques : la multiplication de matrices== Beaucoup de calculs ne sont pas implémentables sur les architectures systoliques, en raison de la non-programmabilité des éléments de calcul. Dans les faits, l'opération qui brille le plus par son adaptation aux architectures systoliques est la multiplication de matrices. Pour rappel, une '''matrice''' est un tableau rectangulaire de nombres, organisé en lignes et colonnes. Les nombres sont appelés des éléments. Ils sont doublement numérotés, dans le sens où on leur attribue un numéro de ligne et un numéro de colonne, qui sont notés i et j respectivement. Par exemple, l’élément noté A42 appartient à la matrice A, est dans la 4ème ligne et sur la 2nd colonne. [[File:Matrice.svg|centre|vignette|upright=1.5|Matrice]] Il est possible de multiplier des matrices. La multiplication de deux matrices prend deux matrices, qu'on notera A et B, pour fournir une matrice C. Pour simplifier les explications nous partons du principe que les matrices sont des matrices avec autant de lignes que de colonnes, appelées ''matrices carrées'''. Avec des matrices carrées, le produit de deux matrices carrées de même dimension est une troisième matrice carrée, aux dimensions identiques aux deux matrices de base. La multiplication d'une matrice n'a rien de complexe, mais les formules deviennent rapidement compliquées, aussi nous allons expliquer le tout autrement. [[File:Matrix multiplication diagram 2.svg|vignette|upright=1.5|Multiplication de deux matrices.]] Pour simplifier, le produit de deux matrices se calcule élément par élément du résultat. Pour obtenir le résultat dans une case du tableau, on regarde sa position dans le tableau : sa ligne et sa colonne. On prend alors la même ligne de la première matrice opérande et la même colonne dans la seconde matrice opérande. Et on multiplie les deux. Pour multiplier une ligne et une colonne, on procède comme suit : on prend le premier élément de la ligne et de la colonne, et on les multiplie. On fait pareil avec les seconds éléments, les troisièmes, etc. Et on additionne tous les produits calculés. Le produit de deux matrices demande de faire beaucoup d'additions et de multiplications en parallèle. Prenons une matrice carrée de n lignes/colonnes. Calculer une case de la matrice finale demande de multiplier une ligne par une colonne et additionner le tout. Donc, calculer une case du résultat demande de faire <math>n^2</math> produits et presque autant d'additions. A multiplier par le nombre de cases, ce qui donne <math>n^4</math> multiplications et autant d'additions. Et les produits sont tous différents niveau opérandes, ce qui réduit fortement les optimisations possibles. ===L'usage des tableaux systoliques pour multiplier des matrices=== Multiplier deux matrices demande de faire beaucoup d'opérations. N'espérez pas implémenter le tout avec <math>n^4</math> multiplieurs et autant d'additionneurs. Il faut trouver une autre solution, qui réduit le nombre de multiplieurs/additionneurs utilisés, tout en gardant un temps de calcul acceptable. Pour cela, les tableaux systoliques sont tout indiqués. Les architectures systoliques incorporent pour cela des DPU capables de faire une opération MAD (''multiply and accumulate''), rien de plus. En tout, elles intègrent <math>n^2</math> multiplieurs et autant d'additionneurs, mais le temps de calcul est proportionnel à n. Et le mouvement des opérandes dans une architecture systolique colle parfaitement avec la multiplication de matrice. Pour rappel, une opérande traverse une ligne ou une colonne. Or, dans une multiplication de matrice, chaque opérande est utilisée dans tous les produits d'une ligne, ou dans tous les produits d'une colonne. L'idée est donc d'insérer une ligne/colonne case par case dans le tableau systolique. Voici ce que cela donne pour une matrice 4 par 4 : [[File:Output Stationary Systolic Array Example.png|centre|vignette|upright=3|Tableau systolique, fonctionnement.]] Voici une vidéo qui montre comment se déroule la multiplication de deux matrices avec un tableau systolique : : [https://www.youtube.com/watch?v=cmy7LBaWuZ8 Systolic array, how matrices are multiplied?] Il faut noter qu'un tableau systolique a une taille fixe. par exemple, un tableau systolique 64 par 64 contient 4096 DPU, ce qui permet de multiplier des matrices carrées de 64 par 64. Mais il ne peut pas multiplier des matrices plus grandes. Cependant, il faut savoir que ce n'est pas un problème si on utilise des algorithmes de multiplication de matrices adaptés. De tels algorithmes subdivisent une matrice en plusieurs sous-matrices plus petites. Ils multiplient les sous-matrices entre elles et combinent les résultats pour obtenir la matrice finale. La subdivision est même récursive, à savoir que les sous-matrices sont elles-mêmes subdivisées, et ainsi de suite, jusqu'à obtenir des matrices très petites, que le hardware peut gérer. De tels algorithmes sont dit de type ''divide and conquer''. ==Leur utilisation dans les accélérateurs d'intelligence artificielle== L'usage d'architectures systoliques pour multiplier des matrices est ancien. Les premières architectures de ce type datant des années 70, mais elles n'ont pas eu beaucoup de succès. Mais elles sont revenues en force avec les progrès en intelligence artificielle des années 2010-2020. La démocratisation du ''machine learning'' a amené sur le marché de nombreux accélérateurs matériels spécialement dédiés à l'accélération des calculs basés sur des réseaux de neurones logiciels. Sans rentrer dans le détail (nous verrons cela en détail dans le chapitre sur les architectures neuromorphiques), nous pouvons cependant dire que les algorithmes de ''machine learning'' font énormément de calculs matriciels, dont des multiplications de matrices. Les architectures systoliques sont alors revenues en force dans ce cadre Les '''''Tensor Processing Units''''' (TPU) de Google sont des accélérateurs matériels dédiés aux calculs de ''machine learning'', basés sur une architecture systolique. La première version des TPU se basait sur un tableau systolique de 256 lignes et 256 colonnes, dont les éléments de calculs pouvaient multiplier deux entiers de 8 bits. L'ensemble a une fréquence de 700 MHz et possède 28 mébioctets de mémoire intégré, avec 4 mébioctets de registres accumulateurs utilisés pour stocker les résultats fournis par le tableau systolique (256 × 256 = 4 mégas). Les versions suivantes ont augmenté le débit de la mémoire, ajouté le support des nombres flottants et augmenté les performances de manière générale, en augmentant le nombre de circuits de calcul. Et c'est sans compter sur des technologies équivalentes développées par Qualcomm, Amazon, Apple, Facebook, AMD, Samsung et d'autres entreprises. [[File:Systollic array.svg|centre|vignette|upright=1.5|Tableau systolique conçu pour les produits de convolution.]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures actionnées par déplacement | prevText=Les architectures actionnées par déplacement | next=Les architectures neuromorphiques | nextText=Les architectures neuromorphiques }} </noinclude> dekpogl9znqwa56wd1q53w3abpl8sn5 Le mouvement Wikimédia/La constellation des projets en ligne 0 79286 765861 707383 2026-05-03T07:49:06Z Lionel Scheepmans 20012 765861 wikitext text/x-wiki <noinclude>{{Le mouvement Wikimédia}}</noinclude> Comme dit précédemment, l’espace numérique Wikimédia le plus connu du grand public est Wikipédia. Avec à la mi-mars 2023<ref>{{Lien web|langue=|titre=List of Wikipedias/Table|url=https://web.archive.org/web/20230315014612/https://meta.wikimedia.org/wiki/List_of_Wikipedias/Table|site=|date=|consulté le=|auteur=Méta-Wiki}}.</ref>, 60 millions d’articles en provenance de 331 versions linguistiques, ce projet arrive en tête du classement des projets pédagogiques, avant les 187 versions du Wiktionnaire, 121 de Wikibooks, 95 de Wikiquote, 74 de Wikisource, 34 de Wikinews, 25 de Wikivoyage et 17 de Wikiversity, pour un total de 884 projets pédagogiques<ref>{{Lien web|langue=|auteur=Méta-Wiki|titre=Complete list of Wikimedia projects|url=https://web.archive.org/web/20230314212404/https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Matrice_des_sites|site=|date=|consulté le=}}.</ref>. Ce à quoi il faut encore ajouter les projets multilingues ou techniques ainsi que tous les autres sites web hébergés par la Fondation, pour arriver, si l’on s’en réfère à ce qui est indiqué sur le site Wikiscan accessible grâce au code QR repris ci-contre, à un total de 954 sites web et 507 millions de pages<ref>{{Lien web|langue=|auteur=Wikiscan|titre=Statistics|url=https://web.archive.org/web/20230315104748/http://wikiscan.org/|site=|date=|consulté le=}}.</ref>. [[Fichier:|65x65px|droite|sans_cadre]] Même s’ils sont développés au sein d’un même mouvement et avec le même logiciel informatique, tous ces sites ne se ressemblent pas pour autant. En date du deux juin 2023 et si l’on se fie cette fois à la page WikiStats accessible par ce nouveau code QR repris ci-contre, on découvre en effet, que le nombre de personnes ayant réalisé au moins une modification, peut varier de 221 pour le projet Wikiquote en [[w:Bicolano_central|Bicolano central]], à 45 640 421 pour le projet [[w:Wikipédia en anglais|Wikipédia en anglais]]<ref name="Wikistat1">{{Lien web|langue=|auteur=WikiStats|titre=All Wikimedia Projects by Size|url=https://web.archive.org/web/20230602122812/https://wikistats.wmcloud.org/wikimedias_html.php?s=users_desc&th=0&lines=944|consulté le=}}.</ref>. Cela sans oublier que chacun de ces sites fonctionne sur un [[w:système de gestion de contenu|système de gestion de contenu]] configuré différemment<ref>{{Lien web|auteur=Github|titre=wikimedia / operations-mediawiki-config|url=https://web.archive.org/web/20210216065944/https://github.com/wikimedia/operations-mediawiki-config/blob/master/wmf-config/InitialiseSettings.php#L18792-L18797|consulté le=}}.</ref> et que les règles en application dans les projets varient d’une version linguistique à l’autre, puisqu’elles sont créées par des communautés de contributrices et contributeurs différentes. Le projet [[w:Wikipédia en allemand|Wikipédia germanophone]] par exemple, possède des règles différentes du projet francophone. Le ''[[w:fair use|fair use]]'' n’y est pas d’application, les articles à l’état d’ébauche ne sont pas conservés et le bannissement d’un utilisateur ou d’une utilisatrice nécessite un vote favorable atteignant la majorité des deux tiers<ref>{{Lien web|langue=|titre=Wikipédia en allemand|url=https://web.archive.org/web/20201117104946/https://fr.wikipedia.org/wiki/Wikip%C3%A9dia_en_allemand#Caract%25C3%25A9ristiques|site=|date=|consulté le=|auteur=Wikipédia}}.</ref>. Cela alors qu’en octobre 2020 et uniquement dans le projet en portugais, il fut décidé que la modification de l’espace principal de l’encyclopédie serait dorénavant réservée aux personnes bénéficiant d’un compte utilisateur. Quant au contenu des différentes versions linguistiques de l’encyclopédie libre, une étude de 2010, qui comparait 74 d’entre elles, a mis en évidence que 74 % des articles encyclopédiques n’existaient que dans une seule version linguistique<ref>{{Article|langue=|auteur=|nom1=Hecht B|nom2=Gergle D|prénom3=CHI 2010|nom3=28th Annual CHI Conference on Human Factors in Computing Systems|titre=The tower of Babel meets web 2.0:User-generated content and its applications in a multilingual context|périodique=Conf Hum Fact Comput Syst Proc Conference on Human Factors in Computing Systems – Proceedings|volume=1|date=2010|issn=|pages=291–300}}.</ref>. Ce qui prouve donc que chaque version linguistique possède bien son propre contenu, alors que celui-ci est développé par des éditrices et éditeurs qui communiquent dans une langue commune, mais sans pour autant partager la même culture ou la même nationalité. De plus, les projets pédagogiques ont chacun leur propre finalité. L’objectif d’une encyclopédie, étant effectivement différent de celui d’un dictionnaire, d’un guide de voyage, d’un répertoire du vivant, d’un recueil de citations, d’une plateforme de création de cours et travaux de recherches, d’une bibliothèque de livres repris dans le domaine public ou publiés sous licence libre, d’un site journalistique, d’une banque de données sémantiques, d’une autre de fonctions informatiques ou de fichiers médiatiques, etc. Ensuite, qui dit finalités différentes, dit aussi règles éditoriales différentes. Il est effectivement interdit de produire du nouveau savoir, ou d’abuser de sources primaires sur Wikipédia, alors que parallèlement, tout cela est le bienvenu sur l’ensemble des autres projets, à l’image du Wiktionnaire<ref>{{Lien web|auteur1=Noé Gasparini|titre=Nature des sources et neutralité - Wiktionnaire|url=https://upload.wikimedia.org/wikipedia/commons/9/9d/Nature_des_sources_et_neutralit%C3%A9_dans_le_Wiktionnaire.pdf?uselang=fr|site=Wikimedia Commons|date=20 octobre 2017|page=34}}.</ref>. Wikisource faisant toutefois exception à cette dernière règle, puisque le projet consiste à collecter et à numériser des ouvrages répertoriés dans le domaine public ou déjà publiés sous licence libre. Enfin, il faut se souvenir que le droit d’auteur peut aussi varier d’un projet à l’autre. Vu que les données reprises sur Wikidata par exemple, ainsi que les descriptions de fichiers reprises sur Wikimedia Commons, sont soumises à la licence CC0, contrairement au contenu des autres projets qui est sous licence CC.BY-SA. Un dernier argument qui justifie donc la nécessité d’effectuer un classement des projets et autres espaces d’activités numériques par fonctions<ref>{{Lien web|langue=|titre=Wikimedia projects/fr|url=https://web.archive.org/web/20201010052610/https://meta.wikimedia.org/w/index.php?title=Wikimedia_projects/fr&uselang=fr|site=|date=|consulté le=|auteur=Méta-Wiki}}.</ref>, de sorte à rendre plus compréhensible leur vue d’ensemble. {| class="wikitable"style="margin: auto;" "text-align:center;" |+ ![[Fichier:QR_code_Wikiscan.png|sans_cadre|100x100px|centré|lien=https://wikiscan.org]] ![[Fichier:QR code Wikistats.png|sans_cadre|100x100px|centré|lien=https://stats.wikimedia.org/#/all-projects]] |- |QR 13. Wikiscan |QR 14. Wikistat |} {{AutoCat}} 36hyu37farxn8lpy4eh3ccyv7f74gqw 765865 765861 2026-05-03T08:34:26Z Lionel Scheepmans 20012 765865 wikitext text/x-wiki <noinclude>{{Le mouvement Wikimédia}}</noinclude> Comme dit précédemment, l’espace numérique Wikimédia le plus connu du grand public est Wikipédia, avec en mai 2026, 67 millions d’articles en provenance de 245 versions linguistiques actives<ref>{{Lien web|langue=|titre=List of Wikipedias/fr|url=https://web.archive.org/web/20260503080719/https://meta.wikimedia.org/w/index.php?uselang=fr&title=List_of_Wikipedias%2Ffr|site=|date=|consulté le=|auteur=Méta-Wiki}}.</ref>. L'encyclopédie arrive ainsi en tête du classement des projets pédagogiques, avant les 198 versions du Wiktionnaire, 122 de Wikibooks, 99 de Wikiquote, 84 de Wikisource, 36 de Wikinews (lecture seulement), 27 de Wikivoyage et 17 de Wikiversity, pour un total de 884 projets pédagogiques<ref>{{Lien web|langue=|auteur=Wikipédia|titre=Liste des Wikis de Wikimedia|url=https://web.archive.org/web/20260410065811/https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Matrice_des_sites|site=|date=|consulté le=}}.</ref>. A cela s'ajoute encore le projet multilingue Wikispecies, niveau pédagogique, et bien d'autres au niveau technique, administratif, etc. Au total et si l’on s’en réfère à ce que nous indique sur le site Wikiscan le premier février 2026, la Fondation Wikimédia héberge ainsi un total de 1009 sites web et 602 millions de pages<ref>{{Lien web|langue=|auteur=Wikiscan|titre=Statistics|url=https://web.archive.org/web/20250813173246/https://wikiscan.org/|site=|date=|consulté le=}}.</ref>. Même s’ils sont développés au sein d’un même mouvement et avec le même logiciel informatique, tous ces sites ne se ressemblent pas pour autant. En date du deux juin 2023 et si l’on se fie cette fois à la page WikiStats accessible par ce nouveau code QR repris ci-contre, on découvre en effet, que le nombre de personnes ayant réalisé au moins une modification, peut varier de 221 pour le projet Wikiquote en [[w:Bicolano_central|Bicolano central]], à 45 640 421 pour le projet [[w:Wikipédia en anglais|Wikipédia en anglais]]<ref name="Wikistat1">{{Lien web|langue=|auteur=WikiStats|titre=All Wikimedia Projects by Size|url=https://web.archive.org/web/20230602122812/https://wikistats.wmcloud.org/wikimedias_html.php?s=users_desc&th=0&lines=944|consulté le=}}.</ref>. Cela sans oublier que chacun de ces sites fonctionne sur un [[w:système de gestion de contenu|système de gestion de contenu]] configuré différemment<ref>{{Lien web|auteur=Github|titre=wikimedia / operations-mediawiki-config|url=https://web.archive.org/web/20210216065944/https://github.com/wikimedia/operations-mediawiki-config/blob/master/wmf-config/InitialiseSettings.php#L18792-L18797|consulté le=}}.</ref> et que les règles en application dans les projets varient d’une version linguistique à l’autre, puisqu’elles sont créées par des communautés de contributrices et contributeurs différentes. Le projet [[w:Wikipédia en allemand|Wikipédia germanophone]] par exemple, possède des règles différentes du projet francophone. Le ''[[w:fair use|fair use]]'' n’y est pas d’application, les articles à l’état d’ébauche ne sont pas conservés et le bannissement d’un utilisateur ou d’une utilisatrice nécessite un vote favorable atteignant la majorité des deux tiers<ref>{{Lien web|langue=|titre=Wikipédia en allemand|url=https://web.archive.org/web/20201117104946/https://fr.wikipedia.org/wiki/Wikip%C3%A9dia_en_allemand#Caract%25C3%25A9ristiques|site=|date=|consulté le=|auteur=Wikipédia}}.</ref>. Cela alors qu’en octobre 2020 et uniquement dans le projet en portugais, il fut décidé que la modification de l’espace principal de l’encyclopédie serait dorénavant réservée aux personnes bénéficiant d’un compte utilisateur. Quant au contenu des différentes versions linguistiques de l’encyclopédie libre, une étude de 2010, qui comparait 74 d’entre elles, a mis en évidence que 74 % des articles encyclopédiques n’existaient que dans une seule version linguistique<ref>{{Article|langue=|auteur=|nom1=Hecht B|nom2=Gergle D|prénom3=CHI 2010|nom3=28th Annual CHI Conference on Human Factors in Computing Systems|titre=The tower of Babel meets web 2.0:User-generated content and its applications in a multilingual context|périodique=Conf Hum Fact Comput Syst Proc Conference on Human Factors in Computing Systems – Proceedings|volume=1|date=2010|issn=|pages=291–300}}.</ref>. Ce qui prouve donc que chaque version linguistique possède bien son propre contenu, alors que celui-ci est développé par des éditrices et éditeurs qui communiquent dans une langue commune, mais sans pour autant partager la même culture ou la même nationalité. De plus, les projets pédagogiques ont chacun leur propre finalité. L’objectif d’une encyclopédie, étant effectivement différent de celui d’un dictionnaire, d’un guide de voyage, d’un répertoire du vivant, d’un recueil de citations, d’une plateforme de création de cours et travaux de recherches, d’une bibliothèque de livres repris dans le domaine public ou publiés sous licence libre, d’un site journalistique, d’une banque de données sémantiques, d’une autre de fonctions informatiques ou de fichiers médiatiques, etc. Ensuite, qui dit finalités différentes, dit aussi règles éditoriales différentes. Il est effectivement interdit de produire du nouveau savoir, ou d’abuser de sources primaires sur Wikipédia, alors que parallèlement, tout cela est le bienvenu sur l’ensemble des autres projets, à l’image du Wiktionnaire<ref>{{Lien web|auteur1=Noé Gasparini|titre=Nature des sources et neutralité - Wiktionnaire|url=https://upload.wikimedia.org/wikipedia/commons/9/9d/Nature_des_sources_et_neutralit%C3%A9_dans_le_Wiktionnaire.pdf?uselang=fr|site=Wikimedia Commons|date=20 octobre 2017|page=34}}.</ref>. Wikisource faisant toutefois exception à cette dernière règle, puisque le projet consiste à collecter et à numériser des ouvrages répertoriés dans le domaine public ou déjà publiés sous licence libre. Enfin, il faut se souvenir que le droit d’auteur peut aussi varier d’un projet à l’autre. Vu que les données reprises sur Wikidata par exemple, ainsi que les descriptions de fichiers reprises sur Wikimedia Commons, sont soumises à la licence CC0, contrairement au contenu des autres projets qui est sous licence CC.BY-SA. Un dernier argument qui justifie donc la nécessité d’effectuer un classement des projets et autres espaces d’activités numériques par fonctions<ref>{{Lien web|langue=|titre=Wikimedia projects/fr|url=https://web.archive.org/web/20201010052610/https://meta.wikimedia.org/w/index.php?title=Wikimedia_projects/fr&uselang=fr|site=|date=|consulté le=|auteur=Méta-Wiki}}.</ref>, de sorte à rendre plus compréhensible leur vue d’ensemble. {| class="wikitable"style="margin: auto;" "text-align:center;" |+ ![[Fichier:QR_code_Wikiscan.png|sans_cadre|100x100px|centré|lien=https://wikiscan.org]] ![[Fichier:QR code Wikistats.png|sans_cadre|100x100px|centré|lien=https://stats.wikimedia.org/#/all-projects]] |- |QR 13. Wikiscan |QR 14. Wikistat |} {{AutoCat}} l28q5x4ol3f1edi0q1hr51gm1400vsy Fonctionnement d'un ordinateur/L'espace d'adressage du processeur 0 79337 765824 765391 2026-05-02T20:03:04Z Mewtow 31375 /* Le mode long : l'adressage 64 bits */ 765824 wikitext text/x-wiki L''''espace d'adressage''' du processeur est l'ensemble des adresses utilisables par le processeur. Par exemple, un processeur 16 bits peut adresser 2^16 = 65536 adresses, l'ensemble de ces adresses forme son espace d'adressage. L'espace d'adressage n'est pas toujours égal à la mémoire réellement installée. S'il n'y a pas assez de RAM installée, des adresses seront inoccupées. De plus, une partie de l'espace d'adressage peut être détourné pour communiquer avec les périphériques, comme nous le verrons plus bas. Nous verrons aussi qu'un processeur peut avoir plusieurs espaces d'adressages séparés. ==L'adressage de la RAM et de la ROM== Avoir plusieurs espaces d'adressage spécialisés est quelque chose que nous avons déjà rencontré dans les chapitres précédents, mais sans le dire ouvertement. Aussi, nous allons faire quelques rappels sur les cas déjà rencontrés. En premier lieu, nous allons rappeler la différence entre architectures Von Neumann et Hardvard. La différence entre les deux tient dans l'adressage des mémoires RAM et ROM : est-ce qu'elles sont dans un seul espace d'adressage, ou dans des espaces d'adressage séparés. L''''architecture Von Neumann''' a un seul espace d'adressage, découpé entre la mémoire RAM d'un côté et la mémoire ROM de l'autre. Une adresse correspond soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux. Typiquement, la mémoire ROM est placée dans les adresses hautes, les plus élevées, alors que la RAM est placée dans les adresses basses en commençant par l'adresse 0. C'est une convention qui n'est pas toujours respectée, aussi mieux vaut éviter de la tenir pour acquise. [[File:Vision de la mémoire par un processeur sur une architecture Von Neumann.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Von Neumann.]] L''''architecture Harvard''' utilise des espaces d'adressage séparés pour la RAM et la ROM. Une même adresse peut correspondre soit à la ROM, soit à la RAM. Le processeur voit bien deux mémoires séparées, chacune dans son propre espace d'adressage. Les deux espaces d'adressage n'ont pas forcément la même taille. Il est possible d'avoir un plus gros espace d'adressage pour la RAM que pour la ROM. Cela implique que les adresses des instructions et des données soient de taille différentes. C'est peu pratique et c'est rarement implémenté, ce qui fait que le cas le plus courant est celui où les deux espaces d'adressages ont la même taille. [[File:Vision de la mémoire par un processeur sur une architecture Harvard.png|centre|vignette|upright=2|Vision de la mémoire par un processeur sur une architecture Harvard.]] Sur une '''architecture Harvard modifiée''', le programme est placé dans un espace d'adressage à part du reste. Le problème, c'est que cet espace d'adressage ne contient pas que le code machine à exécuter. Il contient aussi des constantes, à savoir des données qui gardent la même valeur lors de l'exécution du programme. Elles peuvent être lues, mais pas modifiées durant l'exécution du programme. L'accès à ces constantes demande d'aller lire celles-ci dans l'autre espace d'adressage, pour les copier dans les registres généraux. Le processeur doit pour cela avoir des instructions de lecture dédiées. En clair, il y a une instruction LOAD pour lire dans la mémoire ROM, une autre pour lire dans la RAM. [[File:Espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=3|Espaces d'adressage sur une archi harvard modifiée]] Une autre solution utilise des instructions de copie, qui copient les constantes en mémoire RAM, donc d'un espace d'adressage à l'autre. [[File:Organisation des espaces d'adressage sur une archi harvard modifiée.png|centre|vignette|upright=3|Organisation des espaces d'adressage sur une archi harvard modifiée]] ==L'adressage des périphériques== Passons maintenant à l'adressage des périphériques. La communication avec les périphériques se fait par l'intermédiaire de registres d’interfaçage. Et ces registres peuvent soit avoir un espace d'adressage séparé, soit être inclus dans l'espace d'adressage des mémoires. Dans ce qui suit, nous allons supposer que l'architecture des de type Von Neumann pour simplifier les explications. ===Les entrées-sorties mappées en mémoire=== Une partie de l'espace d'adressage peut être détourné pour communiquer avec les périphériques. Le périphérique se retrouve inclus dans l'ensemble des adresses utilisées pour manipuler la mémoire : on dit qu'il est mappé en mémoire. Les adresses mémoires associées à un périphérique sont redirigées automatiquement vers les registres du périphérique en question, voire vers sa mémoire intégrée. On parle alors d''''entrées-sorties mappées en mémoire'''. [[File:IO mappées en mémoire.png|centre|vignette|upright=2.0|IO mappées en mémoire]] On remarque un défaut inhérent à cette technique : les adresses utilisées pour les périphériques ne sont plus disponibles pour la RAM. On ne peut plus adresser autant de RAM qu'avant. La perte dépend des périphériques installés et de leur gourmandise en adresses mémoires. C'est ce qui causait un problème assez connu sur les ordinateurs 32 bits, capables d'adresser 4 gibioctets de mémoire. Certaines personnes installaient 4 gigaoctets de mémoire sur leur ordinateur 32 bits et se retrouvaient avec « seulement » 3,5 à 3,8 gigaoctets de mémoire, les périphériques prenant le reste. Il est possible que la RAM d'un périphérique soit mappée en RAM. Un exemple classique est celui des cartes graphiques qui incorporent une mémoire RAM appelée la mémoire vidéo. La mémoire vidéo est mappée en mémoire, ce qui permet au processeur d'écrire directement dedans. Toute lecture ou écriture dans les adresses associées est redirigée vers le bus PCI/AGP/PCI-Express. Nous verrons plus bas des exemples d'ordinateurs où la mémoire vidéo est mappée en mémoire, que ce soit totalement ou partiellement. Si je dis totalement ou partiellement, c'est parce que les cartes graphiques modernes disposent de tellement de mémoire qu'on ne peut pas la mapper totalement dans l'espace d'adressage. Sur les systèmes d'avant 2008, seuls 256 mégaoctets de mémoire vidéo sont mappés en mémoire RAM. Le reste de la mémoire vidéo est invisible du point de vue du processeur, mais manipulable par le GPU à sa guise. Après 2008, la spécification du PCI-Express ajouta un support de la technologie ''Resizable Bar'', qui permet au processeur d’accéder directement à plus de 256 mégaoctets de mémoire vidéo, voire à la totalité de la mémoire vidéo. ===L'espace d'adressage séparé pour les entrées-sorties=== Les entrées-sorties et périphériques peuvent avoir leur propre espace d'adressage dédié, séparé de celui utilisé pour les mémoires RAM et ROM. [[File:Espaces_d'adressages_séparés_entre_mémoire_et_périphérique.png|centre|vignette|upright=3|Bit IO.]] Une même adresse peut donc adresser soit une entrée-sortie, soit une case mémoire. Et pour faire la différence, le processeur doit avoir des instructions séparées pour adresser les périphériques et la mémoire. Il a des instructions de lecture/écriture pour lire/écrire en mémoire, et d'autres pour lire/écrire les registres d’interfaçage. Sans cela, le processeur ne saurait pas si une adresse est destinée à un périphérique ou à la mémoire. Cela élimine aussi les problèmes avec les caches : les accès à l'espace d'adressage de la RAM passent par l'intermédiaire de la mémoire cache, alors les accès dans l'espace d'adressage des périphériques le contournent totalement. Là encore, les deux espaces d'adressage n'ont pas forcément la même taille. Il arrive que les deux espaces d'adressage aient la même taille, le plus souvent sur des ordinateurs complexes avec beaucoup de périphériques. Mais les systèmes embarqués ont souvent des espaces d'adressage plus petits pour les périphériques que pour la ou les mémoires. L'implémentation varie grandement suivant le cas, la première méthode imposant d'avoir deux bus séparés pour les mémoires et les périphériques, l'autre permettant un certain partage du bus d'adresse. Nous reviendrons dessus plus en détail dans le chapitre sur l'adressage des périphériques. ==La ''memory map'' d'un ordinateur== Les deux sections précédentes nous ont appris que l'on peut utiliser un espace d'adressage séparé pour la ROM et un autre pour les périphériques. En tout, cela donne quatre possibilités distinctes. {|class="wikitable" |- ! ! IO mappées en mémoire ! IO séparées |- ! ROM mappée en mémoire (architecture Von Neumann) | Un seul espace d'adressage | Deux espaces d'adressage : * un pour les mémoires RAM/ROM ; * un pour les IO. |- ! ROM séparée (architecture Harvard) | Deux espaces d'adressage : * un pour la RAM et les IO ; * un pour la ROM. | Trois espaces d'adressages : * un pour la RAM ; * un pour la ROM ; * un pour les IO. |} Les quatre solutions ont des avantages et inconvénients divers, mais il est intéressant de contraster un espace d'adressage unique avec plusieurs espaces d'adressages. ===L'espace d'adressage unique=== Avec un espace d'adressage unique, la ROM est au sommet de l'espace d'adressage, les périphériques sont juste en-dessous, la RAM commence à l'adresse 0 et prend les adresses basses. Faire simplifie grandement l'implémentation matérielle de l'adressage. Notons que d'autres composants que les périphériques ou les mémoires peuvent se trouver dans l'espace d'adressage. On peut y trouver les horloges temps réels, des timers, des senseurs de température, ou d'autres composants placés sur la carte mère. Un exemple un peu original est le suivant : la console de jeu Nintendo DS incorporait une unité de calcul spécialisée dans les divisions et racines carrées, séparée du processeur, qui était justement mappée en mémoire ! [[File:Espace d'adressage classique avec entrées-sorties mappées en mémoire.png|centre|vignette|upright=2|Espace d'adressage classique avec entrées-sorties mappées en mémoire]] L'espace d'adressage unique est plus simple pour les programmeurs, malgré un désavantage dont il faut parler. Le problème est que des adresses censées être disponibles pour la RAM sont détournées vers la ROM ou les périphériques, ce qui limite la quantité de RAM qui peut être réellement adressée en pratique. C'est un défaut qui se manifeste seulement pour les petits espaces d'adressages, de 8 à 16 bits, qui ne permettent pas d'adresser beaucoup de RAM. Avec des adresses codées sur 16 bits, un espace d'adressage de 64 kibioctets de RAM est grignoté par des entrées-sorties assez rapidement. Par contre, pour des adresses de 32 à 64 bits, une bonne partie de l'espace d'adressage est inutilisé, car il n'y a pas assez de RAM. L'espace d'adressage unique n'a donc pas de désavantages. Les vielles consoles de jeux et certains vieux ordinateurs (Commodores et Amiga), utilisaient un espace d'adressage unique. Elles n'avaient pas une variété de cartes graphiques ou de cartes sons différentes, comme sur les PCs modernes. Au contraire, elles avaient la même configuration matérielle, le matériel ne pouvait pas être changé ni upgradé. Le système d'exploitation était rudimentaire et ne contrôlait pas vraiment l'accès au matériel. Les programmeurs avaient donc totalement accès au matériel et mapper les entrées/sorties en mémoire rendait la programmation des périphériques très simple. <gallery widths=200px heights=500px> N5200mk2 memory map.svg|Adressage mémoire (carte mémoire) du N5200mk2. PC-9801VM memory map.svg|Adressage mémoire (carte mémoire) du PC-9801VM. </gallery> ===La commutation de banques (''bank switching'')=== Le '''''bank switching''''', aussi appelé '''commutation de banque''', permet d'utiliser plusieurs espaces d'adressage sur un même processeur, sans attribuer chaque espace d'adressage pour une raison précise. L'espace d'adressage est présent en plusieurs exemplaires appelés des '''banques'''. Les banques sont numérotées, chaque numéro de banque permettant de l'identifier et de le sélectionner. Le but de cette technique est d'augmenter la mémoire disponible pour l'ordinateur. Par exemple, supposons que j'ai besoin d'adresser une mémoire ROM de 4 kibioctets, une RAM de 8 kibioctets, et divers périphériques. Le processeur a un bus d'adresse de 12 bits, ce qui limite l'espace d'adressage à 4 kibioctets. Dans ce cas, je peux réserver 4 banques : une pour la ROM, une pour les périphériques, et deux banques qui contiennent chacune la moitié de la RAM. La simplicité et l'efficacité de cette technique font qu'elle est beaucoup utilisée dans l'informatique embarquée. [[File:PC-8801MemoryMap.gif|centre|vignette|upright=2|exemple de Bank switching.]] Cette technique demande d'utiliser un bus d'adresse plus grand que les adresses du processeur. L'adresse réelle se calcule en concaténant le numéro de banque avec l'adresse accédée. Le numéro de la banque actuellement en cours d'utilisation est mémorisé dans un registre appelé le '''registre de banque'''. On peut changer de banque en changeant le contenu de ce registre. Le processeur dispose souvent d'instructions spécialisées qui en sont capables. {| class="wikitable flexible" |[[File:Banque mémoire.png|Banque mémoire.]] |[[File:Registre de banque.png|Registre de banque.]] |} ==Le placement des programmes dans l'espace d'adressage== Les ordinateurs modernes sont des architectures Von Neumann, avec un seul espace d'adressage, qui est partagé suivant les besoins. Et un point important est que le système d'exploitation et les programmes sont copiés en mémoire RAM avant d'être exécutés. Ils ne sont pas exécutés depuis une mémoire ROM, cela est réservé aux systèmes embarqués simples. Et cela a une influence sur l'espace d'adressage. Les programmes et le système d'exploitation doivent se partager l'espace d'adressage. Voyons voir comment ce partage se fait. Dans ce chapitre, nous allons volontairement mettre de côté les ordinateurs qui supportent la mémoire virtuelle. Nous en parlerons dans le prochain chapitre. Le principe est de voir comment un processeur avec un seul espace d'adressage gèrent la présence d'un ou de plusieurs programmes. ===Un seul espace d'adressage, non-partagé=== Le cas le plus simple est celui où il n'y a pas de système d'exploitation et où un seul programme s'exécute sur l'ordinateur. Le programme a alors accès à tout l'espace d'adressage, sauf pour ce qui est réservé aux périphériques et à la mémoire ROM. Le programme organise la mémoire en plusieurs sections, dans lesquelles le programme range des données différentes. Typiquement, on trouve quatre blocs de mémoire, appelés des segments, chacun étant spécialisé pour les données, le code, la pile, etc. Voici ces trois sections : * Le segment '''''text''''' contient le code machine du programme, de taille fixe. * Le segment '''''data''''' contient des données de taille fixe qui occupent de la mémoire de façon permanente. * Le segment pour la '''pile''', de taille variable. * le reste est appelé le '''tas''', de taille variable. [[File:Organisation d'un espace d'adressage unique utilisé par un programme unique.png|centre|vignette|upright=2|Organisation d'un espace d'adressage unique utilisé par un programme unique]] [[File:Typical computer data memory arrangement.png|vignette|upright=0.5|Typical computer data memory arrangement]] La pile et le tas sont de taille variable, ce qui veut dire qu'ils peuvent grandir ou diminuer à volonté, contrairement au reste. Entre le tas et la pile, on trouve un espace de mémoire inutilisée, qui peut être réquisitionné selon les besoins. La pile commence généralement à l'adresse la plus haute et grandit en descendant, alors que le tas grandit en remontant vers les adresses hautes. Il s'agit là d'une convention, rien de plus. Il est possible d'inverser la pile et le tas sans problème, c'est juste que cette organisation est rentrée dans les usages. Avant de poursuivre, précisons qu'il est possible de regrouper plusieurs programmes distincts dans un seul, afin qu'ils partagent le même morceau de mémoire. Les programmes portent alors le nom de '''threads'''. Les ''threads'' d'un même processus partagent le même espace d'adressage. Ils partagent généralement certains segments : ils se partagent le code, le tas et les données statiques. Par contre, chaque thread dispose de sa propre pile d'appel. [[File:Single vs multithreaded processes.jpg|centre|vignette|upright=2.0|Distinction entre processus mono et multi-thread.]] Il va de soi que cette vision de l'espace d'adressage ne tient pas compte des périphériques. C'est-à-dire que les schémas précédents partent du principe qu'on a un espace d'adressage séparé pour les périphériques. Dans le cas où les entrées-sorties sont mappées en mémoire, l'organisation est plus compliquée. Généralement, les adresses associées aux périphériques sont placées juste au-dessus de la pile, dans les adresses hautes. ===Un seul espace d'adressage, partagé avec le système d'exploitation=== [[File:Gestion de la mémoire sur les OS monoprogrammés.png|vignette|upright=1.0|Gestion de la mémoire sur les OS monoprogrammés.]] Maintenant, étudions le cas où le programme partage la mémoire avec le système d'exploitation. Sur les systèmes d'exploitation les plus simples, on ne peut lancer qu'un seul programme à la fois. Le système d'exploitation réserve une portion de taille fixe réservée au système d'exploitation, alors que le reste de la mémoire est utilisé pour le programme à exécuter. Le programme est placé à un endroit en RAM qui est toujours le même. Le système d'exploitation peut être soit placé dans une ROM, soit copié en mémoire RAM depuis une mémoire de masse, comme le programme à lancer. Si le système d'exploitation est copié en mémoire RAM, il est généralement placé dans les premières adresses, les adresses basses. A l'inverse, un OS en mémoire ROM est généralement placé à la fin de la mémoire, dans les adresses hautes. Mais tout cela n'est qu'une convention, et les exceptions sont monnaie courante. [[File:Méthodes d'allocation de la mémoire avec un espace d'adressage unique.png|centre|vignette|upright=2.0|Méthodes d'allocation de la mémoire avec un espace d'adressage unique]] Sur de tels systèmes, il faut protéger l'OS contre une erreur ou malveillance d'un programme utilisateur. Notons qu'il s'agit d'une protection en écriture, pas en lecture. Le programme peut parfaitement lire les données de l'OS sans problèmes, au moins en partie. Dans ce qui suit, on part du principe que l'OS est dans les adresses basses. La solution la plus courante interdit au programme d'écrire au-delà d'une limite au-delà de laquelle se trouve le système d’exploitation. Pour cela, le processeur incorpore un '''registre limite''', qui contient l'adresse limite au-delà de laquelle un programme peut pas écrire. Pour toute écriture en espace utilisateur, l'adresse écrite est comparée au registre limite. Si l'adresse est inférieure au registre limite, le programme cherche écrire dans la mémoire réservée à l'OS. L’accès mémoire est interdit, une exception matérielle est levée et l'OS affiche un message d'erreur. [[File:Circuit total.png|centre|vignette|upright=2.0|Protection mémoire avec un registre limite.]] ===Un seul espace d'adressage, partagé entre plusieurs programmes=== Les systèmes d’exploitation modernes implémentent la '''multiprogrammation''', le fait de pouvoir lancer plusieurs logiciels en même temps. Et ce même si un seul processeur est présent dans l'ordinateur : les logiciels sont alors exécutés à tour de rôle. Et il faut alors résoudre un problème : le partage de la RAM entre les différents programmes. Les différents programmes et leurs données sont placés en mémoire RAM, et il faut trouver un moyen pour répartir les différents programmes en RAM. [[File:Partitions mémoire.png|vignette|upright=1|Partitions mémoire]] Il y a plusieurs solutions pour cela, mais l'une d'entre elle est l'usage de segments mémoire. Avec elle, chaque programme se voit attribuer un ou plusieurs blocs de mémoire. Ils sont appelés des '''partitions mémoire''', ou encore des '''segments'''. Dans ce qui va suivre, nous partons du principe qu'un programme est égal à un segment, pour simplifier les explications. Mais sachez qu'un programme peut être éclaté en plusieurs segments dispersés dans la mémoire, et même être conçu pour ! Nous en reparlerons dans le chapitre sur le mémoire virtuelle. Le système d'exploitation mémorise une liste des segments importants en mémoire RAM, appelée la ''table des segments''. Il s'agit d'un tableau dont chaque entrée mémorise les informations pour un segment. Une entrée de ce tableau est appelée un '''descripteur de segment''' et contient son adresse de base, sa taille, et des autorisations liées à la protection mémoire. Précisément, l'entrée numéro N mémorise les informations du segment numéro N. A partir de l'adresse de base de la table des segments et du numéro de segment, on peut lire ou écrire un descripteur de segment. [[File:Global Descriptor table.png|centre|vignette|upright=2|Global Descriptor table]] Toutefois, l'usage de segments amène un paquet de problèmes qu'il faut résoudre au mieux. Le premier problème est tout simplement de placer les segments dans l'espace d'adressage, mais c'est quelque chose qui est du ressort du système d'exploitation. Par contre, cela implique qu'un segment peut être placé n'importe où en RAM et sa position en RAM change à chaque exécution. En conséquence, les adresses des branchements et des données ne sont jamais les mêmes d'une exécution à l'autre. Pour résoudre ce problème, le compilateur considère que le segment commence à l'adresse zéro, puis les adresses sont corrigées avant ou pendant l'exécution du programme. Cette correction est en général réalisée par l'OS lors de la copie du programme en mémoire, mais il existe aussi des techniques matérielles, que nous verrons dans le chapitre suivant. Il faut aussi prendre en compte le phénomène de l''''allocation mémoire'''. Derrière ce nom barbare, se cache quelque chose de simple : les programmes peuvent réclamer de la mémoire au système d'exploitation, pour y placer des données. Les langages de programmation bas niveau supportent des fonctions comme malloc(), qui permettent de demander un bloc de mémoire de N octets à l'OS, qui doit alors accommoder la demande. S'il n'y a pas assez de mémoire, l'appel échoue et le programme doit gérer la situation. De même, un programme peut libérer de la mémoire qu'il n'utilise plus avec des fonctions comme free(). Avec des segments, cela revient à changer la taille d'un segment, plus précisément à la fin du segment. Et tout cela est géré par le système d'exploitation, aussi on laisse cela pour le prochain chapitre. Enfin, sans protection particulière, les programmes peuvent techniquement lire ou écrire les données des autres. Pour éviter cela, il suffit de vérifier qu'un programme accède bien à son segment et pas ailleurs. Il suffit de vérifier si l'adresse lue/écrite est dans le bon intervalle. Il suffit alors d'utiliser deux registres limites, rien de plus. Mais au-delà de cette simple vérification, si un programme pouvait modifier les données d'un autre programme, on se retrouverait rapidement avec une situation non prévue par le programmeur, avec des conséquences qui vont d'un joli plantage à des failles de sécurité dangereuses. Il faut donc introduire des mécanismes de protection mémoire, pour isoler les programmes les uns des autres, et éviter toute modification problématique. La protection mémoire regroupe plusieurs techniques assez variées, qui ont des objectifs différents. Elles ont pour point commun de faire intervenir à des niveaux divers le système d'exploitation et le processeur. ==La ''memory map'' des PC IBM x86== Dans ce qui suit, nous allons étudier l'espace d'adressage des processeurs x86. L'organisation de leur espace d'adressage a évolué dans le temps et l'espace d'adressage s'est adapté. Mais il s'est adapté sans modifier l'existant, pour des raisons de compatibilité. Aussi, les processeurs x86 modernes peuvent fonctionner dans plusieurs modes, appelés mode réel, protégé, virtuel 8086, long, ''system management mode'', et compatibilité 32 bits. [[File:AMD64StateDiagram.svg|centre|vignette|upright=2|AMD64StateDiagram]] Le ''system management mode'' a déjà été abordé dans le chapitre sur les interruptions. Pour simplifier, il ne s'agit pas d'un véritable mode au sens "adressage". Dans ce mode, le système d'exploitation est mis en pause et le BIOS ou un autre firmware s'exécute sans restriction. On y rentre grâce à une interruption dédiée, lancée par le noyau de l'OS. Le système d'exploitation exécute cette interruption afin de laisser la main au BIOS, pour lui déléguer certaines tâches. Par contre, les autres modes sont bien plus intéressant, car ils ont chacun un espace d'adressage différent. Voyons-les dans le détail. ===Le mode réel : l'adressage sur 20 bits=== Le tout premier mode était le '''mode réel''', qui utilisait des adresses de 20 bits, ce qui fait 1 mébioctet de mémoire adressable. Il était utilisé sur des processeurs 16 bits, qui géraient donc des adresses de 16 bits capables d'adresser 64 kibioctets de mémoire. Pour contourner cette limitation, le processeur utilisait la segmentation, que nous verrons dans le prochain chapitre. Pour le moment, nous allons dire que la mémoire en mode réel était composée de 16 blocs de 64 kibioctets. C'est une simplification qui ne fera pas de mal. Le processeur démarre systématiquement en mode réel, y compris sur les ordinateurs modernes. Le BIOS s'exécute dans ce mode, avant de passer en mode protégé et de laisser la main à l'UEFI et au système d'exploitation. Autrefois, le système d'exploitation s'exécutait aussi en mode réel, c'est le cas du DOS. En mode réel, l'espace d'adressage est peuplé par de la RAM, la ROM du BIOS et des périphériques. La RAM prenait les adresses basses, la ROM était au sommet de l'espace d'adressage, et les périphériques entre les deux. Les premiers 640 kibioctets sont réservés à la RAM et sont appelés la '''mémoire conventionnelle'''. Les octets restants forment la '''mémoire haute''', réservée aux ROM et aux périphériques. Les deux premiers kibioctets de la mémoire conventionnelle sont initialisés au démarrage de l'ordinateur. Ils sont utilisés pour stocker le vecteur d'interruption (on expliquera cela dans quelques chapitres) et servent aussi au BIOS. La portion réservée au BIOS, la ''BIOS Data Area'', mémorise des informations en RAM. Elle commence à l'adresse 0040:0000h, a une taille de 255 octets, et est initialisée lors du démarrage de l'ordinateur. Le reste de la mémoire conventionnelle est réservée au le système d'exploitation (MS-DOS, avant sa version 5.0) et au programme en cours d’exécution. La mémoire haute est sectionnée en deux portions. Le sommet de la mémoire haute est réservé au BIOS, alors que le bas de la mémoire haute est réservé aux périphériques. Dans cette dernière, on trouve les BIOS des périphériques (dont celui de la carte vidéo, s'il existe), qui sont nécessaires pour les initialiser et pour communiquer avec eux. De plus, on y trouve la mémoire de la carte vidéo et éventuellement la mémoire d'autres périphériques comme la carte son. {| class="wikitable" style="text-align:center;" |+ Espace d'adressage en mode réel |- ! Numéro du bloc !! Contenu du bloc |- | 1024 - 960 Kio || class="f_jaune" | BIOS principal (ROM) |- | 960 Kio - 640 Kio | class="f_vert" | ROM d'extension des périphériques (XT, EGA, 3270 PC) </br> Mémoire vidéo des cartes EGA, MDA ou CGA |- | 640 Kio - 0 || class="f_rouge" | Mémoire RAM, mémoire conventionnelle |} Pour détailler un peu plus, il faut tenir compte du découpage de l'espace d'adressage en blocs de 64 kibioctets. Le découpage en blocs de 64 kibioctets est particulièrement important pour la mémoire haute. Des blocs sont attribués à un périphérique spécifique. Par exemple, le 16ème bloc est réservé au BIOS, le 12ème aux ROM des périphériques, le 10ème et le 11ème à la mémoire vidéo, etc. {| class="wikitable" style="text-align:center;" |+ Espace d'adressage en mode réel |- ! Numéro du bloc !! Contenu du bloc |- | 0 || rowspan="10" class="f_rouge" | Mémoire RAM, mémoire conventionnelle |- | 1 |- | 2 |- | 3 |- | 4 |- | 5 |- | 6 |- | 7 |- | 8 |- | 9 |- | 10 || class="f_vert" | Mémoire vidéo des cartes EGA |- | 11 || class="f_vert" | Mémoire vidéo des cartes MDA ou CGA |- | 12 || class="f_vert" | ROM d'extension des périphériques (XT, EGA, 3270 PC) |- | 13 || class="f_gris" | Autre, non-réservé |- | 14 || class="f_gris" | Autre, non-réservé |- | 15 || class="f_jaune" | ROM du BIOS |} Vous remarquerez que les blocs 13 et 14 sont non-réservés. Ils peuvent être utilisés pour mapper des périphériques en mémoire. Mais si aucun périphérique n'est mappé dedans, les blocs sont laissés libres. Les OS n'hésitaient pas à les utiliser pour adresser de la RAM. Par exemple, si l'ordinateur n'a pas de carte vidéo EGA, le bloc qui leur était réservé était réutilisé comme mémoire RAM. La mémoire conventionnelle passait alors de 640 à 704 kibioctets de RAM disponibles. L'espace d'adressage correspond à la ROM du BIOS. Mais avec le temps, la ROM est devenue plus lente au point qu'exécuter du code directement depuis la ROM du BIOS était un problème niveau performance. Je rappelle que le BIOS contient de nombreuses routines d'interruptions qui étaient appelées par les systèmes d'exploitation de l'époque, notamment le DOS. Heureusement, diverses optimisations permettaient de copier le BIOS dans la mémoire RAM, plus rapide que la ROM du BIOS. Il s'agit des techniques de '''''BIOS Shadowing'''''. Elles s'appliquaient au BIOS proprement dit, mais le BIOS vidéo pouvait aussi être optimisé ainsi, mais les ROM d'extension ne le sont généralement pas. Le ''BIOS Shadowing'' peut s'implémenter de plusieurs manières, mais la plus courante mappait temporairement de la RAM dans le même espace d'adressage que la ROM du BIOS. Le code du BIOS copiait le BIOS avec une boucle, dont chaque itération lisait une adresse du BIOS et écrivait dans cette même adresse. Juste avant la boucle, le ''chipset'' était configuré par le BIOS pour que les lectures atterrissent dans la ROM du BIOS, mais que les écritures tombaient dans une mémoire RAM mappée. Une fois la copie/boucle terminée, l'adressage tombait dans la RAM aussi bien pour les lectures et écritures. Elle demandait un support du ''chipset'' et du logiciel, pour détourner les adresses temporairement. ===Interlude : les technologies d'expanded memory=== Déjà à l'époque, 1 mébioctet était une limite assez faible, même si cela n'a pas empêché à un grand dirigeant de l'industrie informatique de dire que "640K ought to be enough for anybody". Aussi, diverses solutions matérielles ont vu le jour. Elles étaient peu utilisées et ont concrètement servi à des applications spécifiques. La principale est l''''''expanded memory''''' (EMS), une solution utilisant une carte d'extension avec plusieurs modules de RAM installés dessus. Les modules étaient accédés via la technique de la commutation de banque. [[File:Expanded memory.svg|centre|vignette|upright=2|L'espace d'adressage avec ''Expanded memory''. La carte d'extension et le matériel requis ne sont pas représentés.]] Le terme ''expanded memory'' regroupe plusieurs technologies propriétaires semblables sur le principe mais différentes dans l'exécution. Les premières utilisaient des banques de 64 kibioctets, qui étaient mappées dans un bloc de 64 kibioctets libre en mémoire haute. L'usage de banques de 64 kibioctets collait bien avec l'adressage particulier du mode réel, où la mémoire était gérée par blocs de 64 kibioctets. Les technologies ultérieures utilisaient 2 à 4 pages de 16 kibioctets, qui pouvaient être placée n'importe où en mémoire conventionnelle. [[File:EmulexPersyst 4M ISA.jpeg|centre|vignette|upright=2|Carte d'extension ''Expanded memory'' de marque Emulex Persyst, de 4 mébioctets.]] L'''expanded memory'' demandait que les programmes soient codés pour utiliser cette fonctionnalité. Pour cela, ils devaient utiliser une technique de programmation nommée ''Overlay programming''. L'idée est de découper le programme en plusieurs blocs séparés, appelés des '''''overlays'''''. Certains blocs sont en permanence en RAM, mais d'autres sont soit chargés en RAM, soit stockés ailleurs. Le ailleurs est souvent le disque dur, ou dans la RAM ''expanded memory'' si elle est disponible. Le va-et-vient des ''overlays'' entre RAM et disque dur était réalisé en logiciel, par le programme lui-même. [[File:Overlay Programming.svg|centre|vignette|upright=1.5|''Overlay Programming''.]] L'utilisation de l'''expanded memory'' utilisait l'interruption logicielle 67h, une interruption peu utilisée à l'époque, qui était libre. La carte d'extension était utilisée à travers un pilote de périphérique dédié, qui était appelé via l'interruption 67h. ===Le mode protégé : l'adressage sur 24 et 32 bits=== Par la suite, le mode réel a été remplacé par le '''mode protégé'''. Il utilise la mémoire virtuelle, ce qui fait qu'on devrait le détailler dans le chapitre suivant. Il permettait aussi de dépasser la limite du mébioctet de mémoire. L'espace d'adressage en mode protégé est passé de 24 bits sur le CPU 286, à 32 bits sur le 386 et les CPU suivants. Les programmes conçus pour le mode réel ne pouvaient pas s'exécuter en mode protégé. Pour corriger cela, le 286 a introduit le '''mode virtuel 8086''', aussi appelé mode V86. Il s'agit d'une technique de virtualisation, ce qui fait qu'on en parlera en détail dans le chapitre sur la virtualisation assistée en matériel. Tout ce que l'on peut dire ici est que le mode V86 a été détourné pour que les applications DOS utilisent la mémoire au-delà du mébioctet, appelée la '''mémoire étendue'''. Les logiciels DOS accédaient à la mémoire étendue à travers un driver DOS dédié (HIMEM.SYS). Les logiciels DOS déplaçaient des données dans la mémoire étendue, puis les rapatriaient en mémoire conventionnelle quand ils en avaient besoin. Il ne faut pas confondre mémoire étendue et ''expanded memory''. La technique de ''expanded memory'' repose sur de la commutation de banque, demande une carte d'extension dédiée, fonctionne sans mode V86. A l'inverse, la mémoire étendue ne gère pas de commutation de banque, ne demande pas de carte d'extension, mais utilise le mode V86. Par contre, il est possible d'émuler l'''expanded memory'' sans carte d'extension, avec la mémoire étendue. Quelques cartes mères intégraient des techniques pour, mais une émulation logicielle était aussi possible en réécrivant l'interruption 67h. ===Le mode long : l'adressage 64 bits=== Par la suite, les processeurs ont introduit le '''mode long''', dans lequel les adresses font 64 bits. Le CPU en mode long a aussi un jeu d'instruction totalement différent, des registres en plus et d'autres fonctionnalités actives uniquement dans ce mode. Les programmes compilés pour le 64 bits s'exécutent nativement dans ce mode, alors que les programmes 32 et 16 bits s'exécutent dans un mode de compatibilité dédié. Sur les systèmes 64 bits, le bus d'adresse fait seulement 48 bits afin d'économiser des interconnexions. Avec 48 bits, il manque 64 - 48 = 16 bits d'adresses, qui ne peuvent pas être utilisés pour adresser quoi que ce soit. La règle est que ces 16 bits doivent être tous égaux : soit ils valent tous 0, soient ils sont tous à 1. Les adresses qui respectent cette contrainte sont appelées des '''adresses canoniques'''. Le résultat est que l'espace d'adressage est coupé en trois sections, comme illustré ci-dessous. * Les '''adresses canoniques basses''' ont leurs 16 bits de poids fort à 0 et sont situées en bas de l'espace d'adressage, dans les premières adresses. * Les '''adresses canoniques hautes''' ont leurs 16 bits de poids fort à 1 et sont situées au sommet de l'espace d'adressage, dans les dernières adresses. * Entre les deux, se trouvent des '''adresses non-canoniques''', qui ne sont pas accessibles. Y accéder déclenche la levée d'une exception matérielle. {| |[[File:AMD64-canonical--48-bit.png|vignette|Espace d'adressage x86-64 bits, avec des adresses physiques de 48 bits.]] |[[File:AMD64-canonical--56-bit.png|vignette|Espace d'adressage x86-64 bits, avec des adresses physiques de 57 bits.]] |} : Les futurs systèmes x86 devraient passer à des adresses de 57 bits, les trois sections auront donc des frontières différentes. Les adresses non-canoniques sont censées être inutilisables. Mais les programmeurs aimeraient bien pouvoir les utiliser pour des ''pointeurs tagués'', à savoir des pointeurs/adresses associées à des informations. L'idée serait d'utiliser les 16 bits de poids fort pour stocker des informations liées au pointeur, seuls les 48 bits restant codant l'adresse. Les 16 bits peuvent être utilisés de manières très diverses. Un exemple est la technique du '''''memory tagging''''', qui crée une somme de contrôle au pointeur. La somme de contrôle est générée par un algorithme cryptographique, à partir de l'adresse du pointeur. Elle est vérifiée à chaque utilisation du pointeur. Si la somme de contrôle ne correspond pas au pointeur, une erreur est levée. Si jamais un virus ou un code malveillant modifie un pointeur, il ne saura pas comment calculer la somme de contrôle, la somme de contrôle a énormément de chances d'être incorrecte. Quelques fonctionnalités des processeurs visent à autoriser l'utilisation des adresses non-canoniques. L'idée est que les 16 bits de poids fort sont ignorées lors des accès mémoire, ce qui permet d'utiliser les 16 bits de poids fort à volonté. Il s'agit des techniques ''Top Byte Ignore'' d'ARM, ''Upper Address Ignore'' d'AMD, et ''Linear Address Masking'' d'Intel. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les processeurs 8 bits et moins | prevText=Les processeurs 8 bits et moins | next=L'abstraction mémoire et la mémoire virtuelle | nextText=L'abstraction mémoire et la mémoire virtuelle }} </noinclude> e2nrjby6odx1gttgoafa59z1vttrp6i Mathc initiation/a512 0 80964 765866 765572 2026-05-03T08:41:05Z Xhungab 23827 765866 wikitext text/x-wiki __NOTOC__ [[Catégorie:Mathc initiation (livre)]] : : [[Mathc initiation/Fichiers h : c44a4| Sommaire]] : . : '''L'étude de ce chapitre peut ce faire à l'aide de cette [[https://youtube.com/playlist?list=PLi6peGpf8EPP8YlloOLhIv5WflA0cpr5n&si=n_rhSX0G-o18nxFY Playlist]].''' : . : * La transformée de Laplace va transformer les fonctions trigonométriques, exponentielles, ... en fonctions algébriques (+,-,*). * La transformée de Laplace ne fonctionne que sur les '''fonctions causales'''. [https://commons.wikimedia.org/wiki/File:Causal_function_with_gnuplot_and_C_language.png Une '''fonction causale'''] est une fonction qui ne prend sa valeur que quand t est supérieur à zéro. La fonction est nulle entre moins l'infini et zéro. Ceci se matérialise sur l'intégrale dont les bornes sont entre zéro et l'infini positif. L'intégrale de la transformée de Laplace de F(t) : / +oo | L{F(t)} = | exp(-s t) F(t) dt = f(s) | / 0 * Si G(t) est une fonction (sin, cos, exp, t^n, ...) alors : F(t) = G(t) * U(t) est une fonction causale, ou '''U(t)''' est la fonction [[Mathc initiation/a579| '''Heaviside''']]. U(t) = 0 si t < 0 U(t) = 1 si t >= 0 Pour simplifier la lecture de ce texte j'ai remplacé systématiquement '''G(t) * U(t)''' par '''F(t)'''. * La transformée de Laplace est un '''opérateur linéaire''' : L{a F(t) + b G(t)} = a L{F(t)} + b L{G(t)} * La transformée inverse de Laplace est un '''opérateur linéaire''' : L<sup>-1</sup>{a f(s) + b g(s)} = a L<sup>-1</sup>{f(s)} + b L<sup>-1</sup>{g(s)} : . : '''Se familiariser avec la transformée de Laplace : ''' {{Partie{{{type|}}}|[[Mathc initiation/a513|* la Transformée de Laplace : Première approche]]}} {{Partie{{{type|}}}|[[Mathc initiation/a520|* la Transformée de Laplace : Deuxième approche]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a524|* La transformée de Laplace d'une intégrale]]}} {{Partie{{{type|}}}|[[Mathc initiation/a528|* La transformée de Laplace de la dérivée]]}} {{Partie{{{type|}}}|[[Mathc initiation/a532|* La transformée de Laplace de la dérivée seconde]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a559|* La transformée de Laplace : Multiplication par t^n]]}} {{Partie{{{type|}}}|[[Mathc_initiation/a563|* La transformée de Laplace : Division par t]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a536|* la Transformée de Laplace : Changement d'échelle]]}} {{Partie{{{type|}}}|[[Mathc initiation/a540|* la Transformée de Laplace : Translation de la variable s]]}} {{Partie{{{type|}}}|[[Mathc initiation/a551|* la Transformée de Laplace : Translation de la variable t]]}} : . : '''Se familiariser avec la transformée Inverse de Laplace : ''' {{Partie{{{type|}}}|[[Mathc initiation/a541|* la Transformée '''Inverse''' de Laplace : Première approche]]}} {{Partie{{{type|}}}|[[Mathc initiation/a542|* la Transformée '''Inverse''' de Laplace : Deuxième approche]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a545|* La transformée '''Inverse''' de Laplace de : (1/s)f(s)]]}} {{Partie{{{type|}}}|[[Mathc initiation/a546|* La transformée '''Inverse''' de Laplace de : (s)f(s)]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a554|* La transformée '''Inverse''' de Laplace de la dérivée de f(s)]]}} {{Partie{{{type|}}}|[[Mathc initiation/a555|* La transformée '''Inverse''' de Laplace de l'intégrale de f(s)]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a543|* la Transformée '''Inverse''' de Laplace : Changement d'échelle]]}} {{Partie{{{type|}}}|[[Mathc initiation/a544|* la Transformée '''Inverse''' de Laplace : Translation de la variable s]]}} {{Partie{{{type|}}}|[[Mathc initiation/a552|* la Transformée '''Inverse''' de Laplace : Translation de la variable t]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a570|* la Transformée '''Inverse''' de Laplace : La Méthode d'Expansion d'Heaviside]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a574|* la Transformée Inverse de Laplace : Le Théorème De Convolution]]}} : . : '''Quelques applications : ''' {{Partie{{{type|}}}|[[Mathc initiation/a547|* Résoudre l'équation : Y'+Y=1 avec Y(0) = 0]]}} {{Partie{{{type|}}}|[[Mathc initiation/a608|* Résoudre l'équation : Y ' ' - 9 Y = 0 avec Y(0) = 1 Y'(0) = 3]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a613|* Résoudre un sytème d'équations différentielles]]}} : . : {{Partie{{{type|}}}|[[Mathc initiation/a580|* Évaluer l'intégrale impropre en posant s tend vers 0]]}} {{Partie{{{type|}}}|[[Mathc initiation/a564|* Évaluer l'intégrale impropre avec la propriété de la multiplication par t^n avec n = 1]]}} {{Partie{{{type|}}}|[[Mathc initiation/a565|* Évaluer l'intégrale impropre avec la propriété de la division par t]]}} : . : '''Quelques rappels mathématiques : ''' {{Partie{{{type|}}}|[[Mathc initiation/a566|* Trigonométriques. Trigonométriques hyperboliques]]}} {{Partie{{{type|}}}|[[Mathc initiation/a569|* Fractions partielles]]}} : . : {{AutoCat}} e2igoptgjtei13d5ds33yt1b8zeneh0 Les débats de Gérard de Suresnes/Puissance et gloire 0 82212 765849 765757 2026-05-03T03:05:00Z Texou 99491 /* Le débat sur les routiers */ 765849 wikitext text/x-wiki == Le débat sur l'affaire Bill Clinton == === Contexte === On parlait de séisme radiophonique fin avril 1998 ? Voici sa réplique, le 28 septembre 1998. Après un dérapage de Mickael à l'antenne, le voici débarqué. Les matinales ne trouvant pas leur rythme de croisière et Max ayant le crédit que l'on sait depuis la rentrée 1998, l'improbable arrive : il reprend la nuit. Tranche qu'il ne lâchera plus jusqu'en janvier 2006. Ce retour, il se fait dans la même configuration que l'essai de fin août 1998, avec Reego qui a désormais un contrat et un rôle assigné. Mais il y a plus fort : parmi la fine équipe, un nouvel assistant d'antenne vient de débarquer. Cet assistant, intérimaire et donc payé à ce titre, n'est autre que gérard Cousin, alias gérard de Suresnes. Fidèle au surréalisme de cette histoire, l'animateur décalé a fini par triompher, bien sûr grâce au soutien constant de Max, et le voilà salarié de la station Fun radio pour toute la saison 1998-1999. Je laisse Thibault Raisse décrire les détails de ce contrat et l'impact social qu'il a sur la vie de ce jeune homme, absolument majeur. On notera juste ici, pour comprendre de futures allusions, que le mariage envisagé avant l'été n'a pas eu lieu. Sandy évoquera plus tard des questions d'argent, ce qui est probable, mais il existe sans doute d'autres raisons moins connues, Sandy ayant une famille probablement réservée sur la rapidité des événements. Si Gérard est assistant, c'est qu'il va intervenir très régulièrement aux côtés de Max : pour les conseils bien sûr, avec Sandy, pour des libres antennes, parfois le dimanche, et une foultitude de fois dans la semaine pour jouer des sketchs divers. Il est donc beaucoup mobilisé et son salaire se justifie, clairement. D'ailleurs, en inauguration, il sera présent dès le 28 septembre 1998. Au cœur du projet, figurent évidemment les débats. Le premier, qui s'inspirera largement de l'essai estival, se tient le 1er octobre. Max est là, pour soutenir son ami, assurer la propulsion du programme. D'autant que d'emblée, le ton change : beaucoup moins consensuel que les matinales, Gérard aborde des sujets d'actualité, donc potentiellement risqués, d'autant qu'il n'est jamais à l'abri d'un dérapage. Le sujet du soir, c'est l'affaire Bill Clinton. Terrible affaire qui secoue toute la presse internationale depuis quelques mois. Le président américain, démocrate, se voit accusé par une ancienne stagiaire de la Maison Blanche, Monica Lewinski, de harcèlement sexuel. L'affaire fait grand bruit et désordre. Le président passera à quelques voies de la destitution par le Congrès américain. En octobre, l'affaire touche à sa fin, mais gérard va donc s'emparer du sujet. C'est dire comment Max reste près de lui pour éviter un débordement qui serait dramatique. Le sujet, maîtrisé comme Gérard en était capable, devient un prétexte à une conversation digne du café du commerce, mêlée de surréalisme assumé et de comique de situations. Nous ne redévelopperons pas ici l'affaire, mais il faut se rappeler qu'elle a marqué toute la presse internationale de cette année-là et bien avant les grands scandales sur les rapports entre les célébrités et les femmes qui ont explosé dans la décennie 2020. Elle constitue en tout cas un précédent, qu'on retrouvera dans une autre forme à peine différente en 2011 et impliquant l'ancien patron du Fond monétaire international, Dominique Strauss Kahn, ce qui lui coûtera d'ailleurs la candidature à l'élection présidentielle en France. Les fondamentaux routiniers qui se sont installés au premier trimestre 1998 puis dans l'essai de fin août reviennent : un avant-débat houleux avec le courrier, ,a présence de Sandy, les sketchs de Gérard, puis deux débats où domine le surréalisme, l'humour et la comédie. Auditeurs et équipe, désormais installés et régulièrement renforcés par des personnalités célèbres ou membres de la radio, conduisent les choses avec brillo dans des mécaniques qu'on a déjà évoquées et qu'on présentera pour celles qui ne font que commencer. Cet avant-débat pourtant, il est particulièrement interrogeant sur Gérard et son état. Max se plaint déjà de son arrivée en retard, en taxi, avec ses menaces d'annulation. Mais surtout, ce soir-là, il démarre très énervé, rendant Sandy elle-même, à ses côtés, et Max perplexes. Il s'en prend toujours à son équipe, mais sous l'angle de la jalousie de sa relation amoureuse. C'est l'occasion pour Max de rappeler le cadre applicable, et notamment qu'il est désormais amené à avoir une attitude professionnelle. Parmi les composantes de cette attitude, on apprend que Sandy n'est plus admise dans le studio pour ne plus le distraire. Elle participera bien entendu à de nombreuses émissions, mais par téléphone, même si c'est dans un bureau non loin de là. Au final, c'est du grand spectacle, avec toutefois racadrage vigoureux de Max, entre humour et réalité. Dans ce sketch, Gérard s'avère quelque peu déstructuré, voire inctonrôlable. Max lui-même est en difficulté parfois pour refroidir le bouillant personnage. === Les personnages === * Franck Bargine : Max * Gérard Cousin : Gérard de Suresnes * Phildar et Manu * Igor : Reego * Olivier Bouchet : Olivier de la pro * Mégane : Crevette * Carambar : Cuvette * Sandy Threadkell : Point d'interrogation * Goldo : Tétard * Mladen Derek : Coussin d'air === Transcription === '''Gérard''' : Bonsoir, donc bonsoir à Reego sur Internet, bonsoir aux deux caves au standard. '''Reego''' : Bonsoir Gérard. '''Gérard''' : Donc bonsoir Olivier de la Pro. Donc on va accueillir Crevette, 21 ans... '''Cuvette''' : Non, Cuvette, Cuvette, Cuvette. '''Gérard''' : Non, Crevette ! '''Cuvette''' :On m'a dit Cuvette, moi. '''Gérard''', ''[furieux]'' : Oh c'est... ça commence comment là ? '''Phildar''' : Non parce qu'il y a un Crevette et un Cuvette. '''Gérard''' : Non mais faut pas qu'on confonde tentacule et encule ta sœur, ok ? On commence pas comme ça, ok ? '''Crevette''' : Bonsoir Gérard, je suis là, c'est Crevette. '''Gérard''' : Alors Crevette, 21 ans de Rouen, on peut écouter Fun Radio sur 90.5. C'est bizarre parce que à Rouen, on m'a dit qu'il y avait pas de fréquence. '''Crevette''' : Eh ben c'est tout nouveau. '''Max''' : C'est revenu, ça va revenir, ouais, c'est-à-dire qu'il y a une fréquence pirate. '''Gérard''' : Ok. Grosse caisse, 22 ans de Nantes, 90.5. '''Grosse caisse''' : Ouais, salut. Ça va ? '''Gérard''' : Qu'est-ce que ça peut te foutre ? '''Grosse caisse''' : Bon, c'est parce que je t'aime bien, c'est tout. '''Max''' : Ah, pour une fois qu'il est sympa, t'es vraiment dégueulasse avec les gens, Gérard. Tu perds de la popularité au niveau... '''Gérard''' : Donc, point d'interrogation, je pense qu'on va l'avoir dans peu de temps. Donc, apparemment non, elle veut pas répondre. Donc, Tétard. La Bourboule sur 104 ? '''Tétard''' : Et demi. '''Gérard''' : Non, sur 104. '''Tétard''' : Ah bon, excuse-moi, je suis un peu en avance. '''Gérard''' : Ouais, t'es... d'accord. Je pense qu'à mon avis, on va s'amuser là, ce soir. Ouais, on va s'amuser, hein, Phildar et Manu au standard. '''Manu''' : Bah ouais, on se marre déjà bien, nous. '''Gérard''' : Ouais, ouais. On va s'amuser avec les anciens qu'on a eus, Tony et Arnett. Et toute la bande. Si, si, si. Non, non, mais... '''Max''' : Moi, je pense que je vais pas pouvoir rester dans le studio, malheureusement. '''Gérard''' : Petit Slip, 18 ans, 101.9. '''Petit slip''' : Salut, GG, bon retour. '''Gérard''' : Ouais, voilà. Comme d'hab. Ça m'aurait étonné. '''Max''', ''[hilare]'' : C'est pas les mêmes, Gérard. C'est toi qui es une mauvaise langue. '''Phildar''' : C'est la liste qu'on t'a montrée tout à l'heure. Ça, c'est des noms. Ça, c'est des noms, tu vois. Merguez, petit slip, voilà. '''Max''' : Je t'ai demandé de te mettre là. ''[les personnes changent de place, Gérard prenant une place plus près de Reego et sur une chaise permettant à Gérard de parler devant son micro sans effort, le sujet étant récurrent chez Max]''. '''Cuvette''' : Bonsoir, Gérard. '''Manu''' : Il t'écoute pas, hein. Il est en train de se préparer, il faut du temps. '''Gérard''' : Et Cuvette, on peut écouter... Sur Limoul. '''Cuvette''' : Non, Lyon. '''Gérard''' : Bon, alors... Hop ! ''[il froisse le papier et la lance vers le standard, hilare]''. Vous me refaites la fiche. Ça commence ! Non, mais c'est bien, tu vois ? '''Max''' : Mais t'es super énervé. '''Gérard''' : Non, non, non, non, non. '''Max''' : Mais tu te rends pas compte le nombre d'erreurs qu'ils font chaque soir, c'est pas pour ça que je... '''Gérard''' : Ouais, mais attends. Faut peut-être quand même... ''[il reprend une nouvelle feuille tendue par Phildar]''. Ouais, sur Lyon, sur 87.5. Alors, c'est 98.9. '''Max''' : Ah, oui, ça, c'est vrai. ''[applaudissements]''. Je te signale, Phildar, au passage, que t'es en train, depuis tout à l'heure, de lui balancer les fréquences de Skyrock et de NRJ. '''Manu''' : Je crois qu'il y en a une d'Europe 2 aussi. '''Gérard''' : Bon, enfin, bref, c'est pas... '''Max''', ''[sarcastique]'' : C'est pas grave de donner des fréquences des autres radios. Non, c'est pas grave pour Gérard, comme d'habitude. '''Gérard''' : Non, mais, de toute manière... On verra bien. On verra bien comment que ça se passe, de toute manière... '''Max''' : Mais calme, ce soir, avec le sourire. Tu vas me faire le maestro, tu vas me... L'animateur radio. '''Gérard''' : Le mastro, c'est toi qui fais la prog. Je veux pas, ni d'Olivier, ni de... '''Max''' : Ah, si. Ah, non, mais je fais pas les deux. Je fais pas les deux. '''Gérard''' : Tu fais les deux. '''Max''' : Non, faut que j'écoute. '''Gérard''' : Si tu fais les deux... Non, mais tu permets ? Pour l'instant, je parle à mon chef. '''Max''' : Si je fais les deux, quoi ? Qu'est-ce qu'il se passe ? '''Gérard''' : Tu fais les deux. Tu me fais les deux prog. Je veux pas de ces trois caves. '''Max''' : Non, parce que si je suis là, tu vas profiter pour gueuler plus et me regarder, tu vas me demander de faire ton boulot. Moi, je n'interviens pas. '''Gérard''' : Non, mais si tu vois que ça se passe mal, t'interviens quand même. '''Max''' : T'es animateur radio, t'es payé pour ça. '''Gérard''' : Bon, alors donc, tu restes pour les deux. C'est tout. '''Cuvette''' : Gérard ? Oui, je voulais te dire que je suis vraiment ravi de te connaître parce que j'ai jamais eu l'occasion de discuter avec toi. C'est Cuvette, à l'appareil. '''Gérard''' : On commence ? Donc, le premier débat, c'est sur l'affaire Bill Kinton. Vous avez tous entendu parler. '''Térard''' : Tu pourrais rappeler les faits, Gérard ? '''Gérard''' : Bon, tu permets, toi ? Tu vas pas commencer ! Alors, que pensez-vous de l'affaire Bill Kinton et l'affaire Morica Levins ? '''Cuvette''' : J'ai aimé les hommes d'influence qu'il y avait derrière tout ça. '''Tétard''' : C'est pas une bonne actrice, Morica. '''Cuvette''' : Mais Levinson est meilleur. '''Gérard''' : Bon, s'il vous plaît, vous répondez. Que pensez-vous de l'affaire Bill Kinton et Morica Levins ? Alors, Crevette ! '''Crevette''' : Alors, je trouve que Bill Clinton, il a pas trop assuré à ce niveau-là. Que la Monica Levins, elle aurait mieux fait de s'abstenir. Et puis, tout serait rentré dans l'ordre. '''Gérard''' : Dans quel sens ? '''Crevette''' : Tu veux que je te fasse des dessins en plus ? Ben, ça me paraît évident. '''Gérard''' : Ouais, mais attends, mais attends. Ça te paraît évident, mais comment ? Mais attends, mais attends. Tu suis les informations ou pas ? '''Crevette''' : Évidemment, mais tu les suis aussi. Donc, tu dois savoir que ça paraît évident que c'est pas cool, quoi. '''Gérard''' : Ouais, mais dans ce cas-là, que pensez-vous de l'affaire ? Que pensez-vous de cette histoire ? '''Tétard''' : Ouais, ben déjà, moi, je pense que Morishka Lewins, là, déjà, c'est un boudin. '''Gérard''' : Monika ! '''Tétard''' : Pardon, pardon, Monika, Lewins, déjà, c'est un boudin. '''Gérard''' : Ben, comment que tu peux le savoir ? '''Tétatd''' : Parce que je l'ai vue à la télé, tiens. Franchement, elle est pas belle. Enfin, ça dépend des références que t'as, mais elle est pas très belle. ''Gérard ''' : Ben, attends, qu'est-ce que tu veux réagir par les références que j'ai ? Attends, tu veux réagir par rapport avec Sandy, c'est ça ? '''Tétard''', ''[caricaturalement outré]'' : Pas du tout. '''Petit slip''' : Elle est très belle, Sandy, Gérard. Alors, moi, je pense que si Morishka et Eltsine boivent trop de vodka, c'est son problème. '''Gérard''' : Bon, alors, toi, je pense que tu vas pas continuer longtemps. '''Petit slip''' : Ouais, pourquoi ? '''Gérard''' : Parce que, apparemment, t'as pas compris la question. '''Petit slip''' : Tu peux la répéter, s'il te plaît ? '''Gérard''' : Non, là, je répète pas les questions. Alors, déjà, tu me l'attrapes lui... '''Phildar''' : Non, mais attends, parce que je crois qu'il a confondu... '''Gérard''' : Non, non, non, non, non, non, non, non. On va pas commencer la première. On va pas commencer comme ça. Ils vont pas me prendre la tête à me dire... Tu peux me répéter la question sans arrêt. Alors, ça, il est hors de question. ''[applaudissements de Phildar]''. '''Cuvette''' : Moi, je suis genre... Ben, je vote plus pour Clinton, depuis, moi. '''Gérard''' : Ouais, ben, on s'en fout de voter pour qui tu veux. Je te demande... '''Max''' : T'as pas à voter pour Bill Kinton alors qu'il est Français, commeent il peut voter pour Bill Kinton ? Qu'est-ce que tu penses de l'enfer... Euh... Qu'est-ce que tu penses de cette histoire ? '''Cuvette''' : Ben, je te dis, moi, depuis, je vote plus. '''Gérard''' : Ouais, mais attends, t'as été à New York ? '''Cuvette''' : Ben, je... Ben, non, mais... '''Gérard''' : Non, ben, alors, si t'as pas été à New York, je vois pas comment tu peux voter pour lui. '''Crevette''' : Pourquoi t'as été à New York, toi ? '''Gérard''' : Oui, moi, j'ai été à New York, j'ai été voir... J'ai été voir Godzilla. '''Crevette''' : Alors, tu peux voter pour Bill Clinton ? T'as le droit de voter ? '''Gérard''' : Non, mais moi, je vote pour personne. De toute manière, j'en ai rien à foutre. De toute manière, tu votes et que ça soit n'importe quoi, de toute manière, on en chie. '''Tétard''' : T'as été à New York avec Godzilla ? '''Gérard''' : Bon, toi, tu vas commencer à te calmer. C'est un conseil que je te donne. Bon, le point d'interrogation, s'il vous plaît, il peut aller dans le bureau ? '''Max''' : Allez, on peut avancer dans le débat, là, que de... À chaque fois que vous ouvrez... Même les auditeurs, vous ouvrez plein de petites parenthèses à droite à gauche, mais essayez de revenir dans le débat pour que ça soit intéressant. '''Gérard''' : Bon, par contre, s'il y a des réactions, là, sur la première question, sur le Minitel, je voudrais bien... '''Max''' : Pour l'instant, il y a trois connectés. C'est tellement intéressant, ce que tu racontes, puisque ça n'avance pas dans le débat. Tu changes de sujet... Si vous, les auditeurs, pouvez, par contre, essayer de revenir à chaque fois, aidez-nous à rester dans le débat, plutôt que de vous en écarter toutes les deux secondes, ça nous arrangerait. '''Petit slip''' : Moi, je vais bien donner mon avis. C'est petit slip. Donc, je pense que si Bill Clinton se fait sucer par Monica Lewinsky, c'est son droit, quoi. C'est sa vie privée. '''Gérard''' : Ben voilà. Pourquoi tu ne m'as pas répondu quand je te l'ai posée, la question ? '''Petit slip''' : Oh, ben, je ne sais pas. Je devais être ailleurs. '''Gérard''' : Oh, mais attends. Si tu es ailleurs, mon pote, autant que tu restes chez toi à écouter... '''Crevette''' : Deuxième question. '''Gérard''' : Non, mais attends. Attends. Attends, petit slip. Si vous commencez à me prendre la tête, on n'a pas fini la première question. Tout le monde n'a pas fait le premier tour. Si, si, Crevette, tu commences à me prendre la tête, à dire, ouais, deuxième question, toi, tu vas retourner chez toi, tu vas aller dormir. Ça va aller vite. Non, non, mais moi, je vais vous dire une chose, que maintenant, ça va aller vite. Si vous ne voulez pas répondre aux premières questions, moi, ça va aller vite. Vous allez retourner chez vous. '''Tétard''' : C'est bon, on a répondu. '''Gérard''' : Ouais, mais pas tous... L'interrogation ? '''Point d'interrogation''' : Allô ? Oui, donc c'est point d'interrogation. '''Gérard''' : Bon, alors, que pensez-vous... Je répète la question, mais c'est la dernière fois, parce que je ne vais pas faire ça constamment. '''Phildar''' : Excuse-moi, Gérard, elle appelle d'où ? '''Manu''' : Et c'est quoi sa fréquence ? '''Phildar''' : Parce qu'on n'a pas, sur la note, on n'a pas fiché. '''Piont d'interrogation ''' : J'appelle de nulle part. '''Manu''' : Et c'est quoi la fréquence de nulle part ? '''Gérard''' : La fréquence de nulle part, c'est 0, 0, 1, c'est ça ? Ouais, c'est ça, oui. Ouais, trou du cul, tu vas voir taleur le trou du cul, ce qu'il va te faire, toi. '''Manu''' : Il n'a pas dit trou du cul, il a dit comme ton QI. '''Gérard''' : Bon, alors, que pensez-vous de l'affaire Bill Kinton et Monica Libiski ? Attends, c'est la dernière fois que je pose la question, parce qu'après, on enchaîne. '''Point''' : Oui, donc, je vais te répondre. Donc, l'affaire Bill Clinton, je pense que c'est n'importe quoi, parce qu'ils font des cassettes vidéo, ils font des tas de trucs sur Bill Clinton, et ils ont même fait des poupées, Bill Clinton. Donc, je trouve que c'est vraiment n'importe quoi. Donc, voilà. '''Gérard''' : Ok. Donc, je pense qu'il y a Reego qui me met l'IRC, c'est-à-dire ? '''Reego''' : Oui, parce qu'il y a des réactions sur l'IRC. Alors, tout à l'heure, on me disait que Bill Clinton fait ce qu'il veut. S'il veut baiser un boudin, ça le regarde, n'est-ce pas, GG, on me dit. Et on me dit aussi que... c'est Ramsteff, il préfère l'Ara à la vodka que Monica le whisky. '''Gérard''' : Oui, il fait ce qu'il veut. Ce n'est pas mon problème, merci Reego. Donc, on passe à la deuxième question... Tu m'as oublié Gérard. Grosse Caisse. '''Gérard''' : Non, mais attends, Grosse Caisse, on t'a posé... De toute manière, je voudrais bien avoir les fréquences réelles, parce que ça m'étonnerait que Nantes, on écoute Fun Radio sur 90.5. '''Manu''' : Si, c'est ça, mais enchaîne, Gérard. '''Phildar''' : On va chercher, vas-y. Déjà, tu demandes à Grosse Caisse, et après, toi, tu réponds. '''Grosse Caisse''' : Oui, je pense que ce n'est pas de la faute de Bill Clinton, il est tombé dans un piège. C'est Monica qui l'a dragué, et là, il a le droit de la niquer, ça lui fait plaisir. '''Gérard''' : Non, mais attends... Tu crois qu'à ton avis, c'est lui qui aurait fait ça ? '''Grosse caisse''' : Bah oui, c'est lui. '''Gérard''' : Tu ne penses pas que ce serait elle qui serait venue vers lui ? '''Grosse''' : Bah si, de toute façon, il y avait l'attrait du fric, c'est une salope, c'est tout. '''Gérard''' : Bah oui, mais attends, parce que là, on ne va pas... On va pas rentrer là-dedans, parce que... '''Tétard''' : Et on va rentrer en plein dedans. '''Gérard''' : Non, non, mais parce que... Là, je pense qu'à mon avis, c'est... C'est de sa faute à elle. Non, mais ce n'est pas de sa faute à lui, c'est de sa faute à elle. '''Crevette''' : Et l'amour dans tout ça ? '''Grosse caisse''' : Il n'y a pas d'amour, il y a du cul là-dedans. '''Gérard''' : Non, mais attendez, on va continuer. Donc, que pensez-vous... Pensez-vous que ce soit utile de vendre des cassettes vidéo ? Donc, si vous avez suivi les infos quand ça s'est passé, ils ont passé des cassettes vidéo justement à ce propos-là. Alors moi, je vous demande... Qu'en pensez-vous ? Alors on va y aller gentiment. On va demander à Crevette. '''Crevette''' : C'est quoi sur les cassettes, c'est quand on le voit baiser avec Monica, c'est ça ? '''Gérard''' : Mais non mais attends Crevette, l'histoire de la cassette vidéo. Mais sur la cassetter... t'avais qu'à suivre les informations ! Si tu suis pas les informations, tu peux pas... dans ces cas-là, je ne vois pas pourquoi tu as appelé pour réagir. ''[elle tente de reprendre la parole, ce qui agace Gérard, pris dans sa tirade]''. Mais attends, Crevette, s'il te plaît ! Je peux te répondre ? Si tu ne comprends pas le thème du débat, on parle de l'affaire Bill Kinton. Pensez-vous que c'est utile de vendre des cassettes vidéo ? Si tu n'as pas suivi le thème du débat, si tu n'as pas suivi les informations, pourquoi tu veux réagir là-dessus ? Arrêtez de renifler comme des boucs ! Parce que ça commence à m'énerver ! '''Phildar''' : Je crois que c'est point d'interrogation, je suis désolé. '''Point''' : Non, non, non, c'est pas moi. '''Cuvette''' : Non, c'était Cuvette, mais il ne s'occupe pas de moi, Gérard. '''Point''' : T'es sûr que ce n'est pas toi, Gérard ? '''gérard''' : Oh, je voudrais Crevette. Alors, tu réponds à la question. '''Crevette''' : Ben, c'est pas bien, voilà. '''Gérard''' : Ah ouais, mais alors... Attends, attends, tu me dis que ce n'est pas bien. Tout à l'heure, tu me dis, ouais, mais... '''Crevette''' : Gérard, tu veux absolument une réponse. Quand je t'en donne une, tu ne l'acceptes pas, alors je t'en donne une autre, c'est tout. C'est pas bien. '''Phildar''' : Je voulais te demander une question, Gérard. C'était sur quelle chaîne, quand tu as vu avec les vidéos, là ? '''Gérard''' : Alors là, sur la chaîne, je ne donne pas des... '''Phildar''' : C'était la une ? Parce qu'en fait, je crois que Crevette, elle n'a que la deux, donc si ça se trouve, c'était sur la une. '''Crevette''' : Moi, j'ai que la deux, alors... '''Gérard''' : De toute manière, tout ça, c'est passé sur toutes les chaînes. '''Crevette''' : Ah non, pas sur la deux. '''Gérard''' : Menteuse. T'es une menteuse, c'est passé sur toutes les chaînes. Ouais, vous n'avez qu'à suivre le journal de 13h et de 20h. Grosse caisse, on ne va pas s'éterniser sur une chaîne. '''Grosse''' : Ben, ça dépend des vidéos. Si c'est une vidéo de cul, ça peut être intéressant, voir que la teb qu'a notre ami Bill, mais si c'est des histoires de conneries d'interview, ce n'est pas intéressant. '''Gérard''' : Ben, justement, c'est là qu'est le problème. Donc, je suis d'accord avec toi. À mon avis, je pense que ça doit être une histoire d'interview qu'on était sortis sur cassette vidéo. '''Grosse caisse''' : Ouais, mais à ce niveau-là, l'ami Bill, il peut dire n'importe quoi dans les interviews. Vu que c'est un politicien, c'est un menteur, donc on s'en fout. C'est pas intéressant. '''Point''' : Ben, écoute, je pense que c'est n'importe quoi, parce que faire des cassettes vidéo sur des gens politiques, ça ne regarde personne. En fin de compte, c'est la vie privée des gens et puis s'ils font des cassettes sur ça, ils risquent de faire des cassettes sur leur famille et tout, c'est pas... Je trouve que c'est vraiment dégueulasse de faire ça. Ils devraient faire un procès contre eux. '''Tétard''' : Ouais, ben, je suis d'accord avec l'invitée mystère, et je voulais savoir, quand t'étais à New York, t'en as pas vues, toi, des cassettes de Bill Clinton ? '''Gérard''' : Bon, alors, Tétard, bonne nuit pour toi. '''Manu et Phildar''' : Mais c'est une question, Gérard. '''Gérard''' : Non, mais attends, on ne l'a pas vue ! Non, les cassettes vidéo sont sorties il y a... après. '''Tétard''' : Et on peut en avoir où, alors ? Parce que moi, je l'ai raté à la télé. '''Gérard''' : Tu l'as raté dans ces cas-là... Tu vas dans tous les magasins qui vendent des cassettes vidéo, tu la trouveras. '''Tétard''' : À la FNAC, ils le vendent, à la FNAC, tu crois ? Dans les FNCA et Fuck, ils le vendent ? '''Gérard''' : J'en sais rien. Petit slip. '''Petit slip''' : Alors, moi, je pense que c'est malsain. Ben, parce que Bill Clinton, il va se servirer, mais néanmoins, il peut commencer une carrière dans le X. Ça peut être intéressant. '''Reego''' : Dans quel sens ? '''Petit slip''' : Dans le sens positif. '''Gérard''' : Ouais, alors moi, tu penses qu'avec sa femme et ses deux filles... '''Crevette''' : Non, il n'en a qu'une. '''Gérard''' : Non, il en a deux. '''Grosse caisse''' Deux femmes ? '''Phildar''' : Non, deux filles. '''Grosse caisse''' : Non, maintenant, deux femmes. '''Gérard''' : Bon. Bon, c'est bon. Euh, cuvette. '''Cuvette''' : Ouais, moi, je voudrais savoir déjà s'il a des... Qu'est-ce que propage la cassette ? Elle défend Bill Clinton ou... elle l'affiche ? Et puis qui en retire profit ? '''Gérard''' : Non, elle... Elle lui dit comme ça, d'après... Moi, j'ai vu vaguement un reportage. Non, mais il y a un reportage... Il y a un reportage, ça s'est passé dans... Ça s'est passé au tribunal, comme quoi qu'elle... Elle a insisté, comme quoi qu'il lui avait fait des propositions. Max ? Max, s'il te plaît. Tu peux essayer de me couper, là, parce que là... '''Phildar''' : C'est l'invitée mystère qui frotte avec son téléphone. '''Gérard''' : Taleur je vais te frotter quelque chose, toi. Bon, donc... Donc, maintenant, tout le monde a répondu. Moi, je peux vous dire une chose. Maintenant, je vais vous répondre personnellement. Oh, s'il vous plaît ! Oh Manu, Tu me gères tout le monde là, le premier portable... '''Manu''' : Il n'y a pas de portable, c'est le point d'interrogation qui... Bah oui, je suis désolé. '''Point''' : Non, non, c'est pas moi, hein. '''Manu''' : Bah si, je le vois. Je le vois, sur le standard, la petite lumière verte. '''Gérard''' : Tu le vois, bien sûr, et là, moi, j'ai un son vachement grave dans les oreilles, c'est pas possible. Ah non, mets ton caxe, Max, tu vas voir que là... Là, je vais te dire une chose, c'est impossible. '''Max''' : Attends, silence. '''Gérard''' : Ah là, maintenant, non, c'est pareil. Non, mais attends... Bon, donc, moi, je peux répondre à... '''Max''' : Ah oui, ça tord un peu, effectivement, il faut... Hein ? Non, mais c'est un peu criard, effectivement, les voix, là. C'est un peu... Alors, attends, je vais te mettre là-dessus, là, comme ça, c'est mieux, là, ou pas ? C'est un peu plus faible, mais c'est plus calme, écoute. '''Gérard''' : Ouais, mais je sais pas si les... Non, bah là, tu me coupes... Tu me coupes, là, personne m'entend. Vous m'entendez ? '''Les auditeurs''' : Oui, on entend, on entend. '''Gérard''' : Pas moi. '''Max''' : Bah si, parle. '''Gérard''' : Bah non, bah allume. '''Max''' : Bah écoute, c'est parce que je t'ai mis le son province. Vas-y, parle-leur. '''Gérard''' : Mais ils m'entendent pas. '''Max''' : Mais ils t'entendent, on t'entend. '''Les auditeurs''' : On t'entend, Gérard. '''Gérard''' : Attends, moi, j'ai plus rien, là. '''Max''' : Bah, parce que j'ai baissé... Parce que j'ai mis le son différent. Mais si tu veux, je peux remettre... Alors, je te remets celui-là. Bon, bah d'accord, ok. Bah, à ce moment-là, tu baisses dans le casque, alors. '''Gérard''' : Ok. Donc, moi, je peux vous dire que ces histoires de cassettes vidéo et tout ça, pour moi, c'est de la merde. Ça sert à rien de s'en prendre sur une personne pour vendre des trucs de cul. Parce que la personne fait ce qu'il veut. Bon, en fin de compte... Mais attendez, attendez, laissez-moi répondre. Moi, je vais vous donner la réponse. C'est que là, c'est une histoire, on sait pas comment ça va se terminer. C'est une histoire sans queue, sans tête. Ni queue, ni tête, en fin de compte. C'est une histoire ni queue, ni tête. On sait pas s'il va rester. S'il va partir ou autre. Donc là, on va en revenir. On va continuer le thème du débat. Donc, moi, je vous demande la question. Et j'espère... Oui ? '''Phildar''' : Excuse-moi, Gérard. Donc, Cuvette est parti parce qu'en fait, il avait un téléphone pourri. Donc, on l'a dégagé. On a dit que c'était mieux pour le débat. Et on a Coussin d'air à la place, qui a 27 ans et qui appelle de Guadeloupe. '''Gérard''' : Ouais, non, mais attends. Attends, Phildar. Une chose. Une chose que je vais vous demander. N'essayez pas de changer les noms. '''Phildar''' : Non, non, non, c'est pas le même. '''Gérard''' : ...et qu'ils reprennent sous un autre nom. Parce que là, vous avez 24 lignes qui sonnent. Ça sonne. Donc, prenez-moi des gens sur les 24 lignes. '''Phildar''' : Coussin d'air, tu marques à la place de Cuvette. Donc, Coussin d'air. ''[en mode dictée, tandis que Gérard écrit]'' C-O-U-S-I-N. A-I-N. '''Gérard''' : A-I-R ! Merci. Conssin d'AIR ! '''Manu''' : Oui, mais... Coussin d'air. A-I-N. '''Gérard''' : Ouais, merci. Coussin d'air, c'est C-O-U-S-I-N. Merci. Merci, Phildar, pour ton orthographe. Donc, je vous pose la... '''Phildar''' : Tu peux lui dire bonjour. '''Gérard''' : Bonjour à toi, Coussin d'air. '''Coussin''', ''[après 3 secondes, voix saturant comme sur un téléphone mobile]'' : Bonsoir. '''Gérard''' : Tu te réveilles ? '''Grosse caisse''' : Il aurait dû s'appeler Airbag. '''Phildar''' : Non, mais il a un décalage, Gérard. Il est en Guadeloupe. '''Tétard''' : Attends, on va te dire un truc. Tu vas le recevoir dans deux secondes. Bouge pas. '''Coussin''' : Allô ? '''Gérard''' : Oh ! Bon, allez, hop. '''Manu''' : Parle-lui, Gérard. '''Gérard''' : Ouais, non, mais attends. Ça veut dire quoi, là ? Oh ! Phildar ! Non, mais attends. Coussin d'air, t'es là ? Non. '''Coussin''', ''[après 1 seconds]'' : Ah oui, je suis là. '''Gérard''' : Non, il n'est pas là. Bonne nuit, bonne nuit. Allez ! Bonne nuit ! Allez ! Oh mais merde ! ''[Manuparodie une note de méditation zen, Max tente de reprendre la parole]''. '''Max''' : Gérard, Gérard, Gérard. Gérard. Gérard. Il appelle de Guadeloupe. Donc, il y a un décalage d'une seconde. C'est normal, il reçoit après. Ça ne t'est jamais arrivé d'appeler, toi, à l'étranger, d'avoir une demi-seconde de décalage ? Bon, ben, tu m'entends, Coussin d'air ? '''Coussin''', ''[1 seconde après]'' : Oui. Oui, je t'entends. '''Max''' : Voilà. Il y a une demi-seconde de décalage, c'est tout. Lui, avec le décalage qu'il y a... Écoute-moi, Gérard. Gérard. Gérard. Avec le décalage qu'il a, ce monsieur du Guadeloupe, Coussin d'air, si je ne me trompe pas, toi, pour toi, on fait encore l'émission du matin. Le problème, c'est qu'il ne sait pas quand il va passer le soir. Il croit qu'on fait encore l'émission du matin, parce qui est un décalage tellement long en Guadeloupe que pour lui, il y a une semaine de retard, les émissions. '''Coussin''' : Oui, c'est ça, absolument. Une semaine de retard, oui. '''Gérard''' : D'accord, une semaine de retard. OK, merci. '''Coussin''' : Je t'en prie. '''Gérard''' : À quoi servira cet argent vendu par ces cassettes ? Alors, on va demander à Crevette. '''Crevette''' : Ça va servir à payer ses frais d'avocat. '''Gérard''' : D'accord. T'es à côté de la plaque. '''Crevette''' : Ah ben, excuse-moi. C'est ce que j'avais entendu. '''Gérard''' : Eh, au sondage, vous vous la fermez... '''Manu''', ''[indigné, puis ferme]'' : On n'a rien dit. Reprends ton débat, Gérard, On n'a rien dit, alors vas-y. '''Gérard''' : Donc, Crevette ? '''Crevette''' : Oui, moi, j'ai entendu dire, en fait, il y a des acteurs qui ont filé de la thune à Bill Clinton pour qu'il paye son procès, ses frais de procès. Et l'argent des cassettes irait aussi pour payer les frais de procès. Ainsi que tous les gadgets vendus en sex-shop. '''Gérard''' : Ah non, mais on parle de la cassette. La cassette vidéo, on ne parle pas des... Non, mais on ne parle pas des histoires de gadgets ou autres. Moi, je te parle de la cassette vidéo. Ok. Grosse caisse ? '''Grosse caisse''' : Ben, ça fera de l'argent à Bill Clitoris. Comme ça, il pourra s'acheter de nouveaux trucs, des godes et tout ça pour sa femme. Ça pourrait être vachement sympa. Puis, peut-être une nouvelle paire de chaussettes pour l'hiver. Tu sais jamais. '''Gérard''' : Ouais, d'accord. Point d'interrogation ? '''Point''', ''[entrecoupée par les rires et les gens qui pouffent bruyamment]'' : Alors, je pense que... Cet argent, j'espère que lui, il va en faire bon usage pour les associations humanitaires ou quand même autre chose. '''Tétard''' : Mon cul, ouais. '''Gérard''', ''[rageux]'' : Attendez, attendez. Qui c'est qui vient de dire mon cul et qui rigole comme un con ? Alors, maintenant, Grosse caisse, Tétard et Petit slip, maintenant, c'est à vous trois que je m'en prends. '''Grosse caisse''' : On n'a pas dit un mot. '''Gérard''', ''[menaçant]'' : Alors, lequel qui rigole derrière ? Lequel ? '''Max''' : Et comment tu veux qu'ils te répondent ? Parce qu'ils savent très bien que s'ils disent qui l'a fait, il va se faire virer. Donc, le mec, il répond pas. '''Petit slip''' : Ouais, c'est Polo, c'est Polo. Si, si, c'est moi, c'est Polo. '''Max''' : Bon, ben voilà, c'est bien qu'il l'ait dit, c'est bien. '''Gérard''', ''[frustré]'' : Non, mais attends, ça commence à... Là, on va pas commencer comme ça, Phildar. Parce que tout à l'heure, moi, je vais prendre sur les 24 lignes. '''Max''' : Mais arrête de faire allusion aux 24 lignes. Reviens dans ton débat, c'est bien depuis tout à l'heure. '''Gérard''' : Donc, grosse caisse. Donc, toi, tu la fermes, toi. Toi, t'as répondu, point d'interrogation. '''Point''' : Oui, donc, je t'ai répondu. J'espère que cet argent, il va en faire bon usage pour les aides humanitaires. '''Tétard''' : Ouais, ben, je pense qu'avec la thune qu'il a faite, il va pouvoir se payer d'autres prostituées pour se faire éponger, quoi. '''Gérard''' : Alors, Tétard, je vais te dire une chose. Pour l'instant, ça fait deux fois. '''Tétard''' : Ben, attends, il l'a payée... '''Gérard''' : Ça fait deux fois ! Il a rien payé. '''Max''' : Il a pas le droit de répondre ça, maintenant ? Il faut donner des bonnes réponses ? Il fait ce qu'il veut, il répond ce qu'il veut. C'est un jeu ou quoi, ton truc ? '''Gérard''' : Non, mais attends, je vais voir. Parce qu'il y en a certains qui répondent à côté de la plaque. '''Max''' : Non, ils répondent ce qu'ils ont envie de parler, ce qu'ils pensent. '''Gérard''' : Ben, alors, Tétard, pour toi... '''Tétard''' : Ben, il l'a payée, Monica Lewinsky, pour se faire éponger. Il l'a payée. '''Gérard''' : Ok, ok, ok, c'est bon, c'est bon. '''Max''' : Tu lui enlèves la croix. '''Petit slip''' : Alors, moi, je pense que, à ce que j'ai entendu dire, que ça irait directement au don du Front de Libération des Nains de Jardin. '''Grosse caisse''' : Ouais, c'est vrai. '''Crevette''' : Ouais, enfin, ça, c'est une rumeur. '''Gérard''' : Quoi, quoi, quoi, quoi, quoi, quoi ? Attendez, attendez, qui c'est qui réagit derrière Petit Slip ? Ouais, Crevette ? '''Crevette''' : Oui, je te dis, c'est une rumeur, les Nains de jardin. Mais bon... '''Grosse caisse''' : Moi, j'ai entendu dire ça, moi. C'est une rumeur qui court. c'est la vérité. '''Coussin''' : Oui, Gérard. Moi, je crois qu'avec l'argent, il va réparer sa voiture et s'acheter des lacets. '''Gérard''' : Bon, alors, moi, je peux vous dire une chose, que... Non, mais attends, Coussin d'Air, je pense que t'as vachement de... T'es vachement pas au courant de l'histoire. '''Max''' : Il est en Guadeloupe, c'est pas encore arrivé, l'histoire. '''Gérard''' : Donc, moi, je peux vous dire une chose, qu'à mon avis, je pense que... '''Max''' : C'est Georges qui va l'amener, le scoop, là-bas. Georges. Ben, le tourbillon, là. Georges Bush. '''Gérard''' : Ouais, ben, ça, cette histoire-là, je veux pas en entendre parler, parce que j'ai eu des... '''Max''' : D'accord. Revenons, revenons au débat. '''Gérard''' : Donc, je pense que, à mon avis, là, je pense que... Je suis d'accord avec le point d'interrogation, donc je pense qu'il devrait faire moins... L'argent qu'il va recevoir, on sait pas combien, mais je pense qu'il ferait mieux de s'occuper des associations humanitaires, c'est-à-dire moins... que les mômes, ils n'ayent pas de flingues, et tout ça, et qu'ils s'amusent pas à fumer, et autres. Donc, à mon avis... ''[applaudissements du studio]'' À mon avis, là-dessus, je pense qu'on sait pas encore. On sait pas, parce que, là, pour l'instant, ils en reparlent pas trop à la télé. '''Max''' : Ben, là, il est une heure et une, peut-être. '''Gérard''' : Mais on pense que... Je pense que cette histoire est loin d'être terminée, donc on verra bien par la suite. Donc, je vous pose d'autres questions, vous allez réfléchir. Donc, la quatrième question. « Croyez-vous que les journalistes s'occupent trop de la vie privée des stars ? » On va demander à Crevette... Non, on va pas demander à Crevette, on va demander à Coussin d'air, tiens. '''Coussin''' : Moi, je crois que, en ce qui concerne les journalistes, ils font... Effectivement, ils s'occupent trop de la vie des autres journalistes qui sont stars. '''Gérard''' : Ouais, mais... Dans ce cas-là, moi, je vais te poser... Mais attends, attends, Coussin d'air. Coussin d'air, je vais te demander... Coussin d'air, je vais te poser une question : est-ce que tu crois que, là-bas, vers chez toi, est-ce que t'as des journalistes qui s'occupent... qui s'occupent des personnes ? '''Coussin''' : Alors, écoute, oui, il y a effectivement des journalistes. Moi, je vois, il y a eu le cas du chanteur Francky Vincent... '''Gérard''' : Non, non, mais attends, Francky Vincent, c'est pas pareil. Parce que, vas-y, Francky... C'est bon, c'est bon. Ouais, vas-y, Francky, c'est bon, c'est bon. Non, mais attends, Coussin d'air, moi, je te demande, là-bas, en Guadeloupe, est-ce que vous avez des journalistes qui s'occupent des stars ? '''Coussin''' : Alors, c'était ma réponse, justement. J'étais en train de t'expliquer qu'il y a chez nous des journalistes qui, effectivement, se sont occupés de très, très près de Francky Vincent... '''Gérard''' : Non, mais pourquoi tu parles de... Francky Vincent... '''Crevette''' : c'est une star en Guadeloupe. '''Gérard''' : Non, mais attends, rCevette. Mais attendez, attendez, pourquoi vous... Vous voulez parler de, tout de suite, Francky Vincent ? Vous avez... Mais vous avez d'autres chanteurs guadeloupéens, comme la compagnie Créole, tout ça ? '''Manu''' : Il y a Demis Roussos, aussi. '''Tétard''' : Adamo, Adamo... '''Gérard''', ''[irrité par cette moquerie, soulignée par un élcat de rire de Reego]'' : Non, Demis Roussos... attends. Occupe toi du standard, toi. '''Reego''' : Adamo, Adamo. '''Coussin''' : Gérard, il faut que tu saches qu'ici, en Guadeloupe, de Pointe-à-Pitre à le Gosier, c'est Francky Vincent... Francky Vincent, la star. '''Gérard''' : Attends, jusqu'où, tu m'as dit ? Je connais pas. '''Manu''' : C'est juste en dessous de la langue. '''Coussin''' : Et donc, voilà. Du fait que Francky Vincent soit une star, alors forcément, tous les journalistes s'en occupent, ils lui offrent des cadeaux... '''Gérard''' : Ouais, non, mais attends, Coussin d'air, Coussin d'air, Coussin d'air, je vais pas... On va pas trop s'appuyer sur tout ça. Bon, moi, si je te dis, la compagnie Créole, qu'est-ce que ça donne, là-bas, en Guadeloupe ? '''Max''' : Ce qui est bien, c'est que ça a super à voir avec le débat de... '''Gérard''' : Non, non, non, non, parce qu'il veut parler de Francky Vincent, on va vite abréger. '''Coussin''' : C'est-à-dire que la compagnie Créole, il n'y a plus que les vieux qui écoutent ça. Si tu veux, c'est assez ringard, maintenant, chez nous. Et celui qui cartonne vraiment, c'est Francky Vincent. Celui qui chante, tu sais, « Vas-y, Francky, c'est bon. Vas-y, Francky, c'est bon, bon, bon. » '''Gérard''' : OK, OK, OK, Coussin d'air. Donc... ''[la musique de Haut-les-mains de la compagnie Créole, dans le refrain, apparaît. Coussin d'air reprend l'air et quand la musique est baissée puis interrompue, il continue, sans s'arrêter, reprenant en boucle trois fois le refrain, en solo, avec des paroles approximatives. Gérard, frustré mais patient, cherche à l'arrêter en citant son nom]''. '''Max ''' : On peut reprendre le débat là, parce que les auditeurs vots zapper là... Zappez parce que là c'est pas possible. '''Gérard''' : Petit slip, donc pour toi, croyez-vous que les journalistes s'occupent trop de la vie privée des stars, donc on va pas essayer de reprendre sur les stars de chansons, on reprend sur l'affaire Bill Kinton. ''[silence]'' Bon, petit slip une fois, petit slip deux fois, petit slip trois fois, au revoir ! '''Manu''' : C'était moi, c'est moi, désolé. Non, pas taper, c'était moi, je m'excuse. On reprend. '''Gérard''' : Alors tu me mets tout le monde... '''Manu''' : Ça y est, ça y est. '''Gérard''' : Voilà, alors petit slip pour toi. '''Max''' : On va les foutre en quarantaine. '''Petit slip''' : Alors donc, moi je pense que les journalistes vont trop loin, puisqu'ils interviewent encore Elvis Presley, Bob Marley, Jimi Hendrix, quoi. Les salauds. '''Gérard''' : Non mais attends, je te parle de l'affaire Bill Kinton, je te parle pas des chanteurs. Bon alors petit slip, c'est bon, je vois qu'apparemment tu t'endors. '''Petit slip''' : Oh non, non, je suis réveillé. ''[blanc]'' '''Grosse caisse''' : Allez Gérard, on se réveille. '''Gérard''' :Non mais c'est vous qui allez vous réveiller, parce que là pour l'instant... On parle pas des chanteurs, on parle de l'affaire Bill Kinton, ok ? '''Petit slip''' : Ben toi Gérard, en tant que chancelier de l'Allemagne<ref name="explic1"></ref>, qu'est-ce que t'en penses de tout ça ? '''Gérard''' : Non mais alors pour l'instant, Tétard. Bon alors Tétard, qu'est-ce que t'en penses toi ? '''Tétard''' : Moi je pense qu'effectivement les journalistes, ils s'occupent beaucoup trop de la vie privée des stars, je pense que tu fais référence aux paparazite. '''Gérard''' : Non, non, non, non, non, attends. '''Tétard''' : Si, si, forcément. Je voudrais que tu nous racontes ton expérience personnelle, et il faut lutter contre l'illettrisme en France, oui. '''Gérard''' : Non, alors là je te répondrai pas là-dessus. Non, non, je te répondrai pas. Grosse caisse. Point d'interrogation ? '''Point''' : Oui, je pense que là ils s'occupent un peu trop de la vie privée des gens, parce que... Parce que quand tu vois ce qui s'est passé avec Michael Jackson ou même Madonna je crois que... '''Gérard''' : Non mais attends, toi t'es à côté de la plaque aussi, toi. Non mais t'as fumé la moquette durant l'Allemagne ? '''Point''' : Non, non, ça m'arrive de fumer la moquette, mais pas... '''Gérard''' : Ouais, je serais que toi je fumerais le cigare à moustache. Ouais, je crois que t'as fumé le cigare à moustache, hein. '''Point''' : Donc pour te répondre, je pense que les journalistes ils s'occupent un peu trop des gens et ce qu'ils font c'est pas... C'est que ça regarde personne, quoi. En fin de compte, ils sont toujours là, dès qu'il y a une star qui arrive, ils sont toujours ici. '''Gérard''' : Mais attends, point d'interrogation. Je crois que t'as pas... Non mais t'as pas compris. Hé, celui qui parle derrière, tu te la permets, parce que tout à l'heure tu vas retourner au standard, ça va aller vite. Bon, moi je te parle... Croyez-vous que les journalistes s'occupent trop de l'affaire des stars ? '''Point''' : Justement, les journalistes, ils s'occupent un peu trop de la vie privée des gens. '''Gérard''' : Dans quel sens ? '''Point''' : Dans le sens qu'ils sont toujours là, dès qu'il y a une voiture qui passe, qu'ils sont dedans, ça y est, ils sont là, avec les photographes et tout, hein. '''Petit slip''' : Il y a une Mercedes, là, qui a eu un accident, là... '''Gérard''' : Bon, toi tu la perds ! Tu la fermes ! Toi, avec ta Mercedes, tout à l'heure, tu as dégagé, ça va aller vite, mais... Tu vas pas durer longtemps ! Bon, je sens qu'on va virer... Grosse caisse. Alors, grosse caisse, tu réponds ? Bon, hé ! On y va, on y va, hein ! Hé, on accouche ! '''Manu''' : Gérard, Gérard, Gérard, j'ai un petit truc pour revenir dans le débat, si tu veux. Donc, on a posé la question aux Français, que pensez-vous de l'affaire... Levinsky... ''[Gérard cherche à l'interrompre avec du non]'' s'il te plaît... Mais, laisse-moi lire mon sondage ! '''Max''', ''[agacé]'' : Mais attends, mais c'est une vraid question, rholàlà ! Tu veux faire avancer ton débat, ou c'est comme avant, c'est... '''Gérard''' : Non, mais attends, parce qu'à mon avis, c'est eux qui ont fait ça. '''Max''' : Attends, on va écouter, on va voir, on va juger. '''Manu''' : À la question, que pensez-vous de l'affaire, Vivisky ? Donc, les Français ont répondu... '''Gérard''' : Levinsky ! '''Manu''' : Levinsky ! Ok, excusez-moi, prononciation. '''Max''' : Si tu ne sais pas le dire, demande-lui, ouais. '''Manu''' : Donc, ils ont répondu non à 50%, mais pourquoi à 49% et 1% a dit : « Moi je pense que vu la circonstancialité du monde à notre époque, pourquoi ne pas envisager de répondre par la négation ? ». Et j'aimerais savoir ce que t'en penses. '''Gérard''' : Bon, ça, j'en ai rien à foutre. Tte manière, à mon avis, c'est toi qui a... Bon, allez. On va demander à Grosse Caisse, parce que... '''Max''' : On a fait ça sur les trottoirs du bois de Boulogne, hier, dans la nuit. '''Petit slip''' : C'est quoi, Gérard, que tu vaux au bois de Boulogne ? '''Gérard''' : Ouais, c'est toi qui viens de le marquer, connard ! Hé, tu me prends pour un con, là ? '''Phildar''' : Non, je t'y laisse. '''Gérard''' : Non, tu m'y laisses ? Bah, tu ferais mieux d'aller voir où c'est ta 205, abrouti. Occupe-toi de ton cul. ''[Applaudissements)''. Grosse Caisse, allez, on active, là, sur la question, là, parce que je pense que personne ne veut réagir. Bon, allez, Grosse Caisse ! '''Grosse caisse''' : Ouais, ouais, je suis là, je te parle. Bah, il y a un problème, c'est qu'aux Etats-Unis, c'est vachement trop libéral, comme pays, alors ce qui fait que les médias, ils font n'importe quoi, ils font chier n'importe qui, n'importe comment. '''Crevette''' : Moi, je pense que c'est normal que les stars on connaisse leur vie privée, parce que c'est des personnages publics, et elles doivent être exemplaires, et donner l'exemple aux gens, donc c'est tout à fait normal de savoir si Bill Clinton se fait sucer la bite ou si Elton John est pédé. '''Gérard''' : Bon, alors, je vais te dire une chose, Crevette, tu vois, là, moi, je te réponds tout de suite, et là, je vais te dire que là, t'as tout faux. Oh, s'il vous plaît, derrière, on se la ferme. '''Max''', ''[hilare]'' : Gérard sait très bien si Elton John se fait sucer la bite. '''Gérard''' : Là, ça, c'est une histoire. Non, mais c'est vrai. Attends, celle qui rigole comme... celle qui rigole ou autre... '''Tétard''' : Non, mais Gérard, il a raison, on ne veut pas savoir que Mick Jagger, il encule David Bowie. '''Max''' : Bon, allez... '''Petit slip''' : Il encule Gérard. '''Max''' : Ah, non, bon, alors là. '''Gérard''' : Allez, hop. Dehors, dehors pour lui. Allez, hop. Cherche pas, tu me sors... '''Manu''' : T'as compris, tu sors de chez toi, dehors. '''Gérard''', ''[rageur]'' : Non, non, vous faites le boulot correctement, sinon, c'est moi qui le fais. '''Max''', ''[retenant son rire]'' : Tu peux pas faire ton débat et ton ton standard d'émission. '''Phildar''' : Donne un chiffre entre 1 et 6. '''Gérard''' : Non, non, je veux pas le savoir. Tu me prends... '''Tétard''' : C'était Pépito. '''Manu''' : Dehors, Pépito. '''Phildar''' : Bonne nuit, Pépito. '''Max''' : T'as qu'à prendre Granola à la place. '''Gérard''' : Voilà. Donc, moi, je peux vous dire une chose, parce que les journalistes s'occupent trop des affaires des personnes haut placées. Et ça... Non, mais ça, c'est un truc qui me dégoûte, parce que j'ai encore regardé un reportage ce soir, ça me prend la tête. '''Manu''' : C'était X-file, non ? '''Gérard''' : Non, non, X-file... Merci, t'éteins ton micro. '''Manu''' : Je te demande, c'est tout. '''Gérard''' : T'éteins ton micro, parce que X-file, je l'ai pas regardé. Donc, moi, je peux vous dire une chose, que là, là-dessus, ça... Ça me prend la tête. Ah ouais, que pensez-vous des Français... Alors, t'en as qui disent à 100%. Ah ben ouais, les Français, ils se débrouillent bien. De l'autre côté, t'en as 50% qui disent « Oh ben non, maintenant, on s'en fout, on regarde pas la télé, ceci, cela. » Donc, bref, passons. ''[fou rire du studio, applaudissements]''. '''Max''' : Mais c'est extraordinaire ! '''Gérard''' : Non, mais moi, j'en ai rien à foutre, moi, de toute manière... De toute manière, on a voté, on en chie, on en chiera toujours. Et que ça soit dans n'importe quel pays, de toute manière, on va en chier partout. '''Max''' : De toute façon, et je me demande même, je m'aventure un peu, je me demande si Chichi se fait pas des fois un petit peu..il a pas des gâteries dans le bureau ovale. On revient dans le débat. '''Gérard''' : Non, mais ça, moi, je vais te répondre tout de suite à ta question. S'il vous plaît, merci ! '''Tétard''' : La pipe au sac à main. '''Gérard''' : Tout à l'heure, y'en a un qui va dire la pipe au sac à main au standar, il va être clair et net. Donc moi, je peux répondre à ta question, de toute manière, on l'a voulu, on l'a. Maintenant on en chie. Et on va en chier pendant cinq ans. '''Max''' : Eh, moi, je propose, la semaine prochaine, on fait un débat sur les pattes d'ef et sur la politique. Bon, alors, question suivante, on revient dans le débat. '''Gérard''' : Mais c'est pas pour ça qu'on va avoir des augmentations ou autres et que tout va baisser. Au contraire.. Donc, pensez-vous que le président des USA sera démis de ses fonctions ? Donc, on va demander à Crevette. '''Crevette''' : Ouais, je sais pas, Gérard, je suis pas voyante, je sais pas. '''Gérard''' : Non, non, mais on s'en fout d'être voyante ou pas voyante, on en a rien à cirer. '''Crevette''' :''' ''' : Je ne sais pas, Gérard, je ne sais pas s'il va être démis. Je fais pas partie du Congrès, je prends pas de décision aux Etats-Unis, je suis même pas américaine, donc je ne sais pas. '''Gérard''' : Non, mais de toute manière, t'as pas besoin d'être américaine ou autre, tu peux très bien réagir vis-à-vis des informations que t'écoutes. '''Crevette''' : Oui, mais bon, je ne sais pas, c'est pas moi qui prends la décision. '''Gérard''' : D'accord. Grosse caisse ? '''Grosse caisse''' : Ouais, bah, en fin de compte, je sais, j'ai une exclu, en fin de compte, je sais que Clinton, c'est pas lui qui va se faire virer, il va se désister, il va tourner dans une nouvelle série, au lieu de s'appeler X-Files, ça s'appellera X-Clinton, ça sera du cul, 100%. '''Gérard''' : Alors, Grosse caisse, tu sais ce que tu me fais ? '''Grosse caisse''' : Bah, j'ai pas une grosse caisse. '''Gérard''' : Non, mais tu vas aller faire un gros dodo, tu vas retourner voir Phildar ou Manu qui t'ont... '''Grosse caisse''' : Non, mais tu voulais des réponses, t'en as une ! C'est de la censure, t'es pire que le CSA, toi ! '''Gérard''' : Bon, alors tu dégages. '''Phildar''' : C'est ça, pas de marque ! Pas de pub, pas de pub ! '''Gérard''' : Terminé, terminé, terminé pour lui. Terminé, tu le vires, tu me reprends quelqu'un d'autre. Terminé... '''Phildar''' : Qu'est-ce que j'en fais ? Il a pas de contrat à Fun, je peux pas le vorer. '''Gérard''' : TERMINÉ ! Eh ! Tu fais gaffe, sinon je vous vire tous les deux. Tu fais gaffe, sinon je vous vire tous les deux du standard. Alors, tu le vires. Point d'interrogation. Attendez, attendez, attendez, avant de répondre, peut-être une question IRC, non, Reego ? '''Reego ''' : Oui, il y a des gens qui me demandent : si un jour tu deviens président, est-ce que tu te laisseras aller, toi aussi ? Est-ce que tu tromperais Sandy ? '''Gérard''' : Ça, c'est un truc... C'est un truc personnel, donc je peux pas te répondre tout de suite. '''Reego''' : On me dit aussi, vu que Sandy est déjà un bout... Enfin, non... '''Gérard''' : Non, non, non ! Vu que Sandy est déjà un boudin, alors c'est qui qui a... Attends, attends, attends, s'il vous plaît, merci au standard. C'est qui qui a sorti ça au standard ? '''Reego''' : C'est un mec qui s'appelle Reego, je sais pas qui c'est. '''Gérard''' : Ah, Reego, c'est pas toi ? '''Reego''' : Non, il y en a plusieurs, il y en a plusieurs. '''Gérard''' : Donc, on revient sur le débat, donc point d'interrogation. '''Point''' : Oui, bah... Attends, j'ai pas compris la question, déjà. '''Tétard''' : C'est bête. '''Gérard''' : Bon, attends, je te préviens, Grosse caisse, je le veux plus. Tu me reprends quelqu'un d'autre, hein ? Pas sous un autre nom. Alors, pensez-vous que... Que le président des USA sera démis de ses fonctions ? '''Point''' : Oui, je pense qu'il sera sûrement... Soit c'est lui qui partira, ou s'il y a eu un jugement, je pense qu'il va sans doute en avoir un autre, je pense que c'est les juges qui vont juger, d'essayer de savoir s'il est coupable ou pas. '''Gérard''' : D'accord. 5 minutes, oui ? '''Manu''' : Oui, 5 minutes, donc on accueille Gicleur à la place de Grosse Caisse. '''Gérard''' : Bon, de quelle ville ? '''Gicleur''' : De quelle ville ? Grenoble. '''Gérard''' : La fréquence ? '''Gicleur''' : 98.8. C'est tout ? Tu veux savoir si je suis marié, non ? '''Gérard''' : Bon, Gicleur, tu vas commencer à te la fermer, parce que je vais contrôler la fréquence tout à l'heure. '''Gicleur''', ''[couvert par Gérard qui veut enchaîner]'' : Attends, qu'est-ce que tu vas me contrôler ? oh tu vas pas en plus me traiter de menteur, déjà que tu m'appelles à cette heure-ci... alors c'est gentil, quoi. '''Gérard''' : Oh, si t'es pas content, tu retournes au standard, d'accord ? '''Max''' : Il vient d'arriver, attends, ça fait 3 secondes qu'il est là. Parce que maintenant, t'as même plus confiance aux auditeurs qui te donnent les fréquences, tu veux vérifier, toi ? '''Gérard''' : Ouais, mais attends, parce qu'avec eux... Je suis con ? Avec un con comme moi, on s'amuse, avec un con comme toi, on se fait chier. Et con, ça veut dire champion olympique de natation. '''Max''' : Non, mais maintenant, c'est bon, Grenoblois, maintenant, on va rentrer dans le thème du débat, si c'est pour foutre le bordel, il va redégager pour de bon... '''Gérard''' : Allez, vas-y, tu réponds à la question ? '''Gicleur''' : Ouais, ben, tu peux répéter la question, c'est Manu qui m'a appelé, j'ai pas pu entendre. '''Gérard''' : Non, ben, je répète pas la question. Hop, basta. Ah non, mais attends, Manu, les mecs, s'ils écoutent la radio, ils... '''Manu''' : Oui, mais je l'ai rappelé juste au moment où tu posais la question. '''Gérard''' : Ouais, mais attends, eh, moi, il me reste plus que 6 minutes à... '''Manu''' : Et ben, répète ta question, et puis on envoie le son, on y va. '''Max''' : Quand je te dis que le débat finit à 1h30, tu peux aller jusqu'à 32. '''Gérard''' : Pensez-vous que le président des USA sera démis de ses fonctions ? '''Max''' : Encore, t'en es que là ? '''Gérard''' : Ben oui, mais attends, mais... '''Crevette''' : Mais il avance pas. '''Gicleur''' : Bah, écoute, moi, je pense qu'il va rester, parce qu'apparemment, les Américains veulent le garder. Et que c'est pas parce qu'il a fait une petite pipe qu'il est pas capable de gouverner son pays. Enfin, je pense. '''Tétard''' : Ouais, ben, moi, je pense que le président des United States, là, machin, je sais pas quoi, là, il va être remis de ses onctions, ouais. Et il l'aura bien mérité, d'ailleurs, n'est-ce pas ? '''Gérard''' : Oh, putain, hé, oh ! Hé, tu peux me la moquer, toi ? '''Tétard''' : Ben quoi ? Tu me demandes s'il va être remis de ses jonctions, je te dis que oui. '''Gérard''' : De ses fonctions ! '''Tétard''' : De ses fonctions, c'est pareil, c'est pareil, ouais, ouais, pas du tout, ouais. '''Gérard''' : Bon, d'accord, apparemment, je crois que t'es... Euh, petit slip ? '''Petit slip''' : Ben, moi, je pense qu'il est déjà démis de ses fonctions, puisqu'il est mort, John Kenedy. '''Gérard''' : D'accord, alors, toi, tu peux dégager. Toi, c'est... Ça y est, c'est bonne nuit pour toi. '''Petit slip''' : Bonne nuit, bonne nuit, bonne nuit. '''Gérard''' : Bonne nuit, au revoir. Tu dégages. Euh, coussin d'air ? '''Coussin d'air''' : Eh bien, moi, je crois que ce serait dommage qu'il soit démis de ses fonctions, parce que, maintenant, tout le monde est au courant aux États-Unis et dans le monde, alors, tu imagines pas le président aller à l'ANPE <ref name="hist1"></ref> et dire bonjour, etc., et les filles auront peur, il pourra même plus aller voir les prostituées, parce qu'il aura cette affaire de pipe, et forcément, les pipes, bon, ça engage à rien, ça entretient l'amitié, c'est pas méchant, et forcément, moi, je crois qu'il... Il devrait rester au pouvoir, hein. '''Gérard''' : Ouais, mais cinq minutes, s'il vous plaît, merci. Bon, euh, je vais vous répondre après, mais, pour l'instant, moi, je peux vous dire qu'à mon avis, il sera des... Il restera, mais il faut attendre l'histoire, parce que c'est un peu trop long. '''Gicleur''' : Mais toi, tu continues toujours à faire de la radio, pourtant. '''Gérard''' : Ouais, mais ça, c'est mon problème, c'est pas le vôtre. Donc, il faut pas confondre la radio et... '''Coussin''' : C'est parce que tu suces, c'est pour ça. '''Gérard''' : Non, non, mais attends. Non, il y a tu suces et tu suces pas. '''Manu''' : Bon, Gérard, à la place de Petit Slip que t'as dégagé, on accueille donc Serpillière. '''Gérard''' : Ouais, bah d'accord. Alors, Manu... Non, non, mais Manu... Non, non, Manu, moi, je vais te dire une chose. Tu vois ? Là, ce que t'es en train de me faire, tu changes les noms. '''Manu''' : Non, j'ai rappelé quelqu'un d'autre. '''Gérard''' : Non, non, non, non, non, non, non, non, tu l'as repris, tu lui as dit. Au lieu de t'appeler Petit Slip, tu vas s'appeler Serpillière. '''Max''' : Ceci dit, un slip, un slip, c'est un peu une Serpillière, quelque part. '''Manu''' : Surtout ceux de Gérard. '''Gérard''' : Moi, je vais sélectionner pour le deuxième débat. '''Max''' : Parce que Gérard, il sait très bien, il met des Serpillières à la place de Petit Slip, il peut dire que... '''Gérard''' : Donc, on va prendre Serpillière. '''Manu''' : Voilà, et tu verras que c'est pas le même. '''Gérard''' : Ouais, bah, on verra. '''Max''' : On se dépêche, on se dépêche, Gérard. La dernière question, vite. '''Gérard''', ''[écrit, lentement]'' : Serpillière. Alors, la dernière question. Les journalistes de la télé en font-ils pas un grand plat de cette histoire ? Je répète. Je récapitule depuis le début. '''Max''' : Ça fait pas trop le con avec la politique, on va avoir des problèmes. '''Gérard''' : Donc, les journalistes de la télé en font-ils pas... Pas un grand plat de cette affaire ? Donc, on va demander à Crevette. '''Crevette''' : J'ai pas compris la question. '''Gérard''' : Bon, alors, Crevette, c'est terminé pour toi. Tu comprendras mieux dans ton lit. Tétard ? '''Tétard''' : Bah, moi, je pense qu'effectivement, il faut mettre les petits plats dans les grands et pas mettre les deux pieds dans le plat, ni tous ses œufs dans le même panier, c'est clair. '''Gérard''' : Ouais, de toute manière, il y a un proverbe qui dit, il faut pas mettre les deux pieds dans le même sabot. '''Tétard''', ''[sous les applaudissements du studio]'' : Tout à fait, surtout quand t'as des sabots. '''Serpillère''' : Bah, moi, je pense qu'ils font vraiment un grand plat de choucroute, quoi. '''Gérard''' : Non, mais attends, je vois pas le rapport avec l'affaire Bill Quinton, là. '''Tétard''' : Bah, c'est mieux qu'un bon coup de pompe dans le cul, hein. '''Gérard''' : Bon, d'accord, t'as pas compris la question. Non, mais je serais que toi, je prendrais mon balai brosse et je passerais la Serpillière dans tout l'appartement, OK ? Coussin d'air ! ''[applaudissements presque généraux]'' '''Gérard''' : L'autre abrutit, là, il applaudit pas parce que c'est lui qui l'a sélectionné. Donc, c'est bien... Donc, Coussin d'air. Euh, quoi, accouche ? Taleur, je vais t'accoucher, toi. '''Finger''' : C'est Finger. '''Gérard''' : Ouais, Finger, tu vas voir, taleur, Finger, je vais te manger par les deux bouts. '''Gicleur''' : Bah, c'est Finger, il t'a mis un gros doigt. '''Max''' : Faut qu'on fasse une réunion, c'est pas possible, le deuxième débat, on peut pas... '''Gérard''' : Non, non, le deuxième débat, je le fais pas comme ça. Coussin d'air. '''Coussin''' : Oui, alors, je disais que, moi, je trouve pas, au contraire, que les journalistes aient fait beaucoup, beaucoup de choses sur cette affaire-là, parce que je regardais pas plus tard que tout à l'heure, retransmis en Guadeloupe, le tiercet, et le journaliste a pas parlé une fois de l'affaire Bill Clinton. '''Gérard''' : Non, mais attends, Coussin d'air, Coussin d'air ! Hé, Coussin d'air ! Et celui qui se marre comme un bourrin, là, il la ferme. '''Max''' : Ouais, mais enfin, ça sert à rien, arrête de dire « la ferme » toutes les deux secondes. Toi aussi, tu la fermes quand tu parles. '''Gérard''' : Euh, Coussin d'air. Non, mais je vois pas le rapport avec l'affaire Bill Kinton et puis, euh, les chevaux. Non, attends, Coussin d'air, je te répète la question. Les journalistes de la télé en font-ils pas trop... En font-ils pas un grand plat de cette histoire ? C'est-à-dire, on parle de l'histoire de Bill Clinton, on parle pas des chevaux. '''Coussin''' : Oui, et c'est pour ça que je te réponds, lors de la retransmission du tiercet, le journaliste qui commentait, il a parlé une seule fois... Une seule fois de l'affaire Bill Clinton, et c'est pour ça que je te dis que, non, je trouve pas les journalistes, ils en font trop. '''Gérard''' : Non, mais je vois pas le rapport avec l'affaire Bill Clinton et... '''Max''' : Repose-lui la question, repose-lui la question. '''tétard''' : C'est parce que Monica Lewinsky, c'est une belle jument. '''Gérard''' : Bon, d'accord, ouais, enfin, bref. Euh, point d'interrogation pour finir. '''Point''' : Si, je pense qu'ils en font un peu trop, parce que quand tu vois un peu qu'ils en parlent tout le temps à la radio, même à la télé, tu allumes ton poste, t'entends que ça, je pense qu'ils en font quand même un peu trop. '''Gicleur''' : Parce qu'en fait, ils sont jaloux, Gérard, c'est pour ça. Tu m'as pas posé la question. Donc, je vais quand même te répondre. Moi, je pense que les journalistes sont jaloux, tu vois, parce qu'en fait, ils pensaient que le président des Etats-Unis, c'était un métier qui était dur, tu vois, qui était sérieux. En fait, ils voient que le président se fait sucer par une petite jeune alors tu penses, ils sont jaloux, quoi. Ils ont pas voulu aller à l'école pour faire président. '''Gérard''' : Donc, moi, je peux vous répondre là-dessus. Je pense que les journalistes en font un petit peu de trop. Parce qu'on parle trop de cette histoire-là, comme l'affaire... '''Phildar''' : Titanic ? '''Gérard''' : Non, non, non, pas l'affaire du Titanic, l'affaire de l'histoire, là, avec la nana de... '''Phildar''' : Le paquebot qui a coulé ? '''Gérard''', ''[détournant le regard et la bouche du micro, fusillant Phildar du regard et surtout, éteignant son micro]'' : Non, mais attends, toi, tu ferais mieux de la fermer pour dire tes conneries. Non, c'est pas la peine de le rallumer. '''Max''' : Ah, pour la Formule 1, là, non ? Schumacher, qui change d'écurie, non ? '''Gérard''', ''[à Phildar)'' : Je t'ai dit d'éteindre ton micro, d'accord ? '''Reego''' : Ton débat, Gérard. '''Max''' : Non, mais c'est bon. C'est bon, ils peuvent l'allumer. Tu parlais de quoi, là ? Tu parlais du tiercé, là ? '''Gérard''' : Non, non, de la nana... de l'histoire des policiers, là, puis du chauffeur de taxi, là, je pense... Ah, du taxi, Valais-Saint-Paradis ? '''Max''' : Ah, Joe le taxi ? Vanessa Paradis ? Bon, alors, enfin, bref, Gérard, qu'est-ce que tu penses de cette histoire ? '''Gérard''' : Non, moi, je pense que cette histoire, pour moi, c'est de... C'est des conneries, et ils feraient mieux de laisser ça. Chacun fait ce qu'il veut de son cul. C'est leur propre histoire. Bon, maintenant, il n'y a qu'une chose que je peux dire, c'est que... '''Phildar''' : C'est clair, c'est pas des conneries, le Titanic a bien coulé. '''Manu''' : Bien sûr, il y a des preuves. '''Gérard''' : Et ta 205, elle a bien coulé, et toi, t'as... Et toi, t'as... Ton espèce de nana, elle n'a pas coulé, encore ? '''Phildar''' : Pardon ? '''Gérard''' : Ouais, deux, à trois, on saute, à quatre, on recommence. '''Max''', ''[admiratif, applaudissant]'' : Oh là là ! '''Gérard''' : Donc, moi, pour moi, personnellement, c'est une histoire que je suivrai pas parce que ça me prend la tête, et j'en ai ras-le-bol d'en entendre parler, tous les... '''Gicleur''' : C'est toi qui en parles, là. Pourquoi tu fais un débat dessus ? Pourquoi tu lances un débat, alors ? '''Gérard''' : Parce que je fais un débat, c'est le premier des débats de la saison, donc je fais un débat là-dessus. '''Max''' : C'est la conjoncture des débats qui vaut ça. '''Gérard''' : Terminé, point final, à la ligne. Donc, voilà. Conclusion ! '''Max''' : Ouais, conclusion, alors, très rapide. '''Gérard''' : Vite fait, Crevette. '''Crevette''' : Ouais, conclusion, bah, écoute, j'en ai appris beaucoup. Et puis... '''Max''' : C'est vrai qu'on prend prend une bonne claque avec Gérard. '''Crevette''' : Et puis, bah, j'espère que tu vas continuer à nous informer, quand même, sur l'affaire même si ça t'intéresse pas. '''Max''' : Bah, y'a France Info, puis y'a Gérard le jeudi. '''Gérard''' : Non, mais vous avez d'autres chaînes de télé pour vous informer que moi. '''Max''' : Surtout que c'est de la radio donc... '''Gicleur''' : Ouais, bah, écoute, moi, je pense, là, qu'en une soirée, j'ai plus appris qu'en trois mois. Et la conclusion, bah, c'est que, finalement, c'est bien de se faire sucer et que Clinton, bah, il a bien raison. '''Gérard''' : D'accord, bah, toi, tu préfères aller te faire sucer ? '''Gicleur''' : Ouais, c'est une proposition, mais non, laisse tomber non. '''Max''' : Voilà, c'était la conclusion, en fait, réponds pas à la... '''Point''' : Alors, ma conclusion, c'est qu'ils arrêtent un peu d'harceler les stars, comme ça, parce que c'est vraiment chiant. Dès que tu vois... Tu peux même pas aller quelque part, t'as les journalistes qui sont autour de toi, c'est un peu embêtant, quand même. '''Max''' : Ça peut te servir de pare-à-vent, quand il pleut, hein. '''Gérard''' : Point d'interrogation, t'es encore là ? Non, mais on vient de te poser une question. '''Max''' : C'est pas grave, c'était juste un commentaire que je faisais, c'est pas une question. Faut pas confondre les questions, les réponses et les affirmations. '''Tétard''' : Ouais, bah, moi, en conclusion, ce que j'aurais voulu savoir, c'est déjà si elle s'était lavé les dents, là, Levinsky, là, et je voudrais que tu nous racontes vite fait l'histoire entre Gérard Kilton et Christine. Lewhisky.. '''Gérard''' : Comment, comment ? '''Tétard''' : Je voudrais que tu nous racontes la jolie histoire de Gérard Kilton et Christine Lewhisky. '''Gérard''' : Bon, alors, Tétard ? Tu te mets un gros doigt... Et tu te mets un gros doigt, quelque part, et... '''Max''' : Tiens, dans le cul, par exemple, par hasard. '''Serpillère''' : Bah, moi, je pense que Monika Lewhisky, elle a même sucé Richard Dixon. '''Gérard''' : D'accord, alors, toi, t'as rien compris. Coussin d'air, pour finir ? '''Coussin d'air''' : Ah bah, écoute, moi, j'ai trouvé le débat vraiment très intéressant, sauf que je regrette vraiment qu'on ait pas parlé plus longtemps de Francky Vincent et du tiercet. '''Max''' : Je veux juste te dire, petit point, petite parenthèse, par contre, là, Coussin d'air qui est en Guadeloupe, toi, en ce moment, t'es là, avec nous ? Donc, toi, en ce moment, toi, tu es en direct en France, on rappelle que, toi, ce que t'es en train de faire, en ce moment, avec Gérard, c'est donc diffusé dans 15 jours, c'est ça ? '''Coussin d'air''' : Oui, absolument, c'est ça. '''Max''' : C'est avec le décalage horaire, justement, et ça nous amène, justement, au prochain débat, Gérard, décalage horaire. '''Gérard''' : Voilà. Donc, moi, je réponds quand même... '''Max''' : Oui, la conclusion de Gérard, bien sûr, sur son débat. '''Gérard''' : Donc, sur cette conclusion-là, c'est dommage qu'on n'aille pas pu aller plus loin, parce qu'il y avait d'autres questions qui étaient intéressantes. Bon, c'est sûr qu'il y a les histoires de cassettes vidéo, je pense que, j'espère qu'ils vont en faire bon usage pour les aides humanitaires. '''Max''' : J'espère qu'ils vont les mettre en location. Ah, pardon. '''Gérard''' : Non, non, pour les aides humanitaires, c'est-à-dire, surtout à New York, parce que même là où c'est vendu, donc, j'espère qu'ils vont en faire bonne conclusion sur cette vente. '''Max''' : On rappelle que tu as été à New York, quand même. Tu sais de quoi tu parles.<ref name="explic2"></ref> '''Gérard''' : Voilà. Parce que là-bas, il faut dire que c'est un pays très, très chaud. CMaxest quand même une ville qui n'a plus aucun secret pour toi, vu que tu y es passé quand même près de 48 heures. '''Gérard''' : Non, 72. '''Max''' : Donc, tu maîtrises bien le sujet de New York. '''Phildar''' : Il a fait deux fois le tour. '''Max''' : Est-ce que tu trouves que ce genre de problème, comme ça, ce problème, est-ce que tu crois que ça mérite un débat ? '''Gérard''' : Ben, disons, j'ai voulu réagir là-dessus, parce qu'on en parle tellement. C'est que j'aurais préféré éviter d'en parler. Bon, t'as voulu qu'on en parle. Bon, ben, j'en ai parlé. Mais malheureusement, on n'a pas pu aller jusqu'au bout. Donc, si vous voulez réagir sur le deuxième débat. '''Max''' : Débat sur le décalage horaire. '''Gérard''' : Sur le décalage horaire. Donc, je pense que c'est moi qui va... '''Max''' : On va voir ça hors antenne. Ça, c'est un truc, comme d'habitude, je Gérard n'a pas compris. Tu vas me laisser parler un petit peu. Je vais faire moi-même. Donc, si vous voulez participer au débat de Gérard, le deuxième de cette soirée pour le grand retour de GG dans les débats. Débat sur le décalage horaire. Vous appelez dès maintenant le standard de Fun Radio 0800 70 5000. Pour les Belges, 0033 800 70 5000. IRC, toujours, c'est-à-dire le site Internet où vous pouvez dialoguer en direct entre vous ou bien directement avec Reego, qui est dans le studio en ce moment. '''Reego''' : Et avec Rousseau aussi. '''Max''' : Et avec Rousseau également, qui est dans le coin. C'est irc.funradio.fr. Gérard est toujours là. Phildar Manu également aux manettes. On se retrouve dans tout juste 8 minutes. Le temps de faire le point avec un morceau de Astral Projection. Ah non, pardon, c'est pas ça. Non, ça a changé. C'est quoi ? '''Gérard''' : Non, c'est, à mon avis, si on ne s'est pas trompé, c'est tiens, tiens bientôt, j'ai un gros caca avec des riettes. Voilà. Et on se retrouve tout à l'heure d'ici 5-10 minutes. == Le débat sur les décalages horaires == === Contexte === Le premier débat a clairement montré le nouvel environnement dans lequel s'inscrit l'émission, désormais mettant en scène une équipe rigolarde et un animateur payé, loufoque, surréaliste. Pourtant, on voit aussi d'emblée l'équilibre difficile auquel Max s'attaque : tenter de rassurer sa direction dans un style moins chaotique qu'en début d'année, tout en préservant le style inimitable de l'émission. Le second débat tente de confirmer cette tendance, avec un interventionnisme moindre de Max. C'est la première semaine du retour de Max, qui le met sous pression. D'abord car il a tout de même laissé une trace par son coup de poker d'août, ensuite car il vient de retrouver son créneau préféré après ce qui fut un vrai échec professionnel, enfin parce que la direction, de toute manière, transforme la station en profondeur. Les émissions emblématiques comme Lovin Fun, ainsi que leurs animateurs phares (Difool, le Doc) sont désormais partis, Max reste le seul emblême de l'époque de Fun radio de la première moitié des années 90, et la pression est donc grande. La station veut en effet cibler d'autres auditeurs, pour d'autres revenus, et Ma restera un épiphénomène fidélisant le passé mais presque gênant pour la direction. Dans ce second débat, Max teste toutefois la formule où Phildar est à la manœuvre. Lui aussi, depuis la fin de Fun TV, a besoin de trouver sa place dans le métier. Mais un peu contre toute attente, l'autorité naturelle qui se dégage pour Gérard, c'est Reego. Il est épargné de ses foudres, il a sa confiance, quoiqu'il fasse, et très vite, il s'avère que c'est lui qui sera le bon régulateur de l'émission, par-delà tous les autres. Sur le fond, il faut simplement se souvenir qu'à cette époque, le week-end précis où l'heure passait en hiver ou été n'était pas totalement figée. Celala ensuite changé lorsqu'elle s'est harmonisée au plan européen, mais tel n'était pas encore le cas. Cette mesure, étant d'abord destinée à s'adapter à la longueur des journées pour réguler la consommation d'une énergie coûtant cher, s'adaptait aussi à la température et à d'autres critères. Si bien que le décalage pouvait intervenir pendant n'importe quel week-end du mois d'octobre, voire en septembre, plus rarement. === Les personnages === * Gérard Cousin : Gérard * Phildar, Manu * Franck Bargine : Max * Igor : Reego * Mégane : Moustique * Tony Morestin : Boudin noir * Goldo : Boudin noir * Cocker, Loudné (comprendre, Loup-de-nez) * Sandy Threadkell : Point d'interrogation * Nicolas : Merguez (il avait participé à un débat estival en 1997), Petit sucre * Luigi : Couscous (retour d'une figure des dénats en 1997) === Transcription === '''Gérard''' : Et voilà, 1h45, donc je fais rectification, c'est Tiens bientôt, je vais faire un gros caca avec Derriette et on va demander à Reego, il avait un petit message sur l'IRC, sur les questions qu'on a posées au départ. '''Reego''' : Voilà, non c'était juste pour saluer les gens présents sur l'IRC, alors je salue Wynne, Clifford, Yankee, Fedji, TSM, Jock, Scoyote, Bip, VLR et les autres et l'IRC dans le studio a planté mais on va le relancer tout de suite, à tout à l'heure. '''Gérard''' : Ok, à tout à l'heure, Reego, je te remercie. '''Reego''' : De rien ma poule ! '''Gérard''' : Là, Manu, je te signale qu'il y en a un des deux qui va planter. '''Manu''' : Ah bon, pourquoi ? '''Gérard''' : Là, je pense que tu m'as fait une connerie. '''Manu''' : Ah bon ? Si tu m'avais pas pris le standard pour rien foutre pendant le disque, j'aurais pu sélectionner des gens. '''Phildar''' : C'est pas grave, on va voir, vas-y Gérard. '''Gérard''' : Je vais voir, donc on accueille Moustique, merci pour les fréquences. '''Manu''' : Je n'ai pas eu le temps, Gérard. '''Moustique''' : Bonsoir Gérard. '''Gérard''' : T'appelles d'où ? '''Moustique''' : T'appelles de Poitiers. '''Gérard''' : Poitiers, ta fréquence ? '''Moustique''' : 89.6 '''Gérard''' : 89.6, ok. Boudin Noir. '''Boudin noir''' : Bonsoir Gérard, bonsoir tout le monde. '''Gérard''' : Bonsoir Tony. Merci Tony. '''Boudin noir''' : J'ai changé. '''Gérard''' : Ouais, ouais, ta fréquence ? '''Boudin noir''' : Moi, ma fréquence, moi j'écoute pas sur la radio, j'écoute sur la CB et je t'emmerde. '''Gérard''' : Alors, tu m'emmerdes, ok. Alors, dégage Boudin Blanc. Allez hop, voilà. '''Phildar''' : Ça commence bien, Manu, tu pourras gérer un peu mieux. '''Gérard''' : Alors, Max, Max, s'il te plaît. '''Phildar''' : Non, on va gérer, on va gérer Manu tout seul, Gérard, t'inquiète. Manu, tu fais gaffe. '''Gérard''' : Hop, Boudin Blanc, terminé. Hop, tu le vires. Bon, ça commence ! Déjà, il commence. Alors, si Boudin Noir c'est le même nom... '''Max''' : Non, mais peut-être que Tony, il a changé, il est peut-être venu... '''Gérard''' : Non, non, non, il m'a dit, je t'emmerde sur la CB. '''Max''', ''[hilare]'' : Ah, j'ai pas entendu. Non, mais c'est pas grave, mais si Tony veut bien venir, mais il se calme. Ça peut être sympa. On pourrait très bien se faire un feu de cheminée avec des merguez, on pourrait lier amitié. '''Gérard''' : Non, non, c'est pour Boudin Blanc, terminé. '''Manu''' : Moi, j'écoute le chef, il a dit, ça peut être sympa, je le laisse. '''Gérard''' : Non, je dis, moi ! C'est pas lui qui... '''Manu''' : Ah si, c'est Max qui commande. '''Boudin noir''' : Je m'excuse, je m'excuse. '''Gérard''' : Non, non, non, Tony, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé, terminé. '''Phildar''' : Hé, ce qu'on fait... Attends, Gérard. S'il vous plaît, disez-vous, s'il vous plaît, Tony. Ce qu'on fait, Gérard, on lui laisse une chance. '''Gérard''' : Non, non, non, non, non, non, non, non, il n'y a pas de chance avec moi. Non ! Non, non, mais moi, je ne pardonne pas, c'est tout. Terminé, point final, à la ligne. Gamel ? Salut, t'appelles d'où ? '''Gamel''' : De Verdun. '''Gérard''' : Ta fréquence ? '''Gamel''' : C'est 110.5. '''Gérard''' : Boudin Noir. '''Boudin noir''' : Ouais, salut, Gégé, j'appelle de Toulouse et la fréquence, c'est 117.3. '''Gérard''' : 117.3, OK. Point d'interrogation ? T'appelles d'où ? '''Point''' : J'appelle de nulle part, toujours. '''Phildar''' : Bah oui, c'est la même. '''Gérard''' : Donc, 101.9. OK, je te remercie. Donc, première question, c'est sur le décalage horaire. On est bien d'accord ? Alors, que pensez-vous du décalage horaire ? On va demander à Boudin Noir. '''Boudin noir''' : Le décalage horaire, en fait, Gégé, on n'y peut pas. C'est des lois immuables de la nécessité naturelle et on ne peut pas faire grand-chose. '''Gérard''' : Mais tu penses que ça, à ton avis... '''Boudin noir''' : Non, mais c'est plutôt une bonne chose, quand même, dans l'absolu. '''Gérard''' : Ouais, mais à ton avis, tu crois que ça va durer encore longtemps, cette histoire ? '''Boudin noir''' : À mon avis, je ne pense pas... il y a peu de chances que ça change, parce que vu comment sont les gens, je ne vois pas pourquoi le décalage horaire, il changerait comme ça. Tu sais, c'est dans les mentalités, tout ça. '''Gamel''' : Bah, décalage horaire, c'est décalage de toutes les heures, c'est ça ? '''Phildar''' : Attends, Gérard, est-ce que tu peux expliquer ce que c'est, le décalage horaire, déjà ? '''Gérard''' : Le décalage horaire, déjà, pour commencer, bon, ça, j'aurais pu attendre que tout le monde réponde. '''Phildar''' : Mais non, mais s'ils ne comprennent pas déjà ce que ça veut dire... '''Gérard''' : Non, non, mais attends, Phildar, s'il te plaît. J'aurais pu attendre que tout le monde réponde, et j'aurais pu dire ce que c'était. Non, mais... '''Phildar''' : Non, mais tu comprends ce que je veux dire. Si toi, on te pose une question et que tu ne sais pas ce dont on parle, tu ne peux pas répondre. Donc, il faut que tu expliques avant. Vas-y, explique. '''Gérard''' : Donc, décalage horaire, c'est-à-dire vous avancez ou vous reculez votre monde d'une heure. D'accord ? On est bien d'accord, Gamel et Boudin Noir, si je t'ai mal expliqué ? Je pense que Boudin Noir, tu as bien compris la question, toi ? '''Boudin noir''' : Oui, oui, tout à fait. En avant, en arrière, sur la droite et sur la gauche aussi. '''Gérard''' : Non, mais d'accord. Toi, sur la droite et sur la gauche, toi, tu prends les clignotants ? '''Boudin noir''' : Voilà, par exemple. '''Gérard''' : Non, mais ça n'a rien à voir. Non, mais OK. Gamel ? '''Gamel''' : Moi, je comprends pas, parce que j'ai une montre à quartz, et puis les aiguilles, elles n'avancent pas ou elles ne reculent pas. '''Gérard''' : Non, mais attends. Moi aussi, j'ai une montre à quartz, là sur ma montre, il est 1h51. Si tu veux, à l'heure actuelle, si on change d'heure, ça fera 0h51. Parce qu'on recule. On recule nos montres d'une heure. '''Boudin noir''' : Comme en Allemagne, par exemple. '''Gérard''' : Non, non, attends 5 minutes, s'il te plaît, merci. '''Manu''' : Oui, donc, comme tu ne voulais pas de Tony, on accueille Bonne Nuit à la place. Salut, Bonne Nuit. '''Bonne nuit''' : Allô, salut, G, tu vas bien ? Moi, j'appelle de Mont-Luçon, fréquence 112.18. '''Phildar''' : Ah, c'est une nouvelle fréquence, ça. '''Manu''' : Elle vient de s'installer, d'ailleurs. Tu peux saluer tous les auditeurs qui te rejoignent sur cette fréquence. '''Gérard''' : Non, non, 112.18, ça existe pas, chez moi, à Montluçon. Montluçon, tout le monde descend, terminé. Hop, point final à la ligne. Alors, pour l'instant, Manu, t'es en train de me dire des... '''Phildar''' : Bon, la suite, Gérard. '''Gamel''' : Ça y est, j'ai reculé ma montre jusqu'à la cuisine, j'ai fait un calage horaire, là. '''Gérard''' : Non, je ne vois pas le rapport. Je ne vois pas le rapport avec le décalage horaire. Point d'interrogation ? '''Point''' : Effectivement, ça peut perturber un peu la vie quotidienne. Déjà, quand tu pars au travail le matin, tu peux être perturbé... '''Gérard''', ''[par-dessus des bruits bruyants de pet]'' : Non, mais attends, point d'interrogation, pour l'instant, on... Celui qui s'amuse à péter derrière, arrête ! '''Reego''' : Excusez-moi, excusez-moi. '''Phildar''' : Ça pue en plus. '''Reego''' : Désolé, désolé, pardon. '''Point''' : C'est vrai que tu peux être perturbé en prenant ta voiture, tu peux arriver en retard à ton travail. '''Gérard''' : Bon, OK, c'est bon. Moustique ? '''Boudin noir''', ''[pendant que Manu, micro éteint, fait le bruit du moustique]'' : Gérard, j'aimerais bien te ''[bruit d'une touche de téléphone numérique]'' Sous la table. '''Gérard''', ''[crescendo]'' : Non, non, non, mais là, ça commence à bien faire ! ''[o Phildar]'' : Eh, toi, tu vas la prendre, toi ! Eh, tu dégages ! Tu dégages, je te veux plus ! Allez, hop ! '''Manu''' : Bon, bah, viens au standard ! '''Gérard''' : Tu dégages ! Au standard ! Au standard ! Au standard ! '''Max''' : C'est bon ! '''Gérard''' : Non, non, il commence pas ! Non, mais il commence pas ! D'accord ! Non, non, Manu, non plus ! '''Manu''' : Ben, j'ai rien fait ! '''Gérard''' : Non, non, Max ! '''Max''' : Je suis en train de brancher les filles là, je peux pas... '''Gérard''' : Non, non, mais attends, parce que là, ils vont pas... Ça va pas commencer comme ça, hein ! '''Max''' : Ben, quand ça va pas, tu fais tourner, regarde ! Là, t'as fait tourner l'équipe, regarde ! '''Gérard''' : Ouais, mais après, Reego, t'y vas ! Je pense qu'avec toi, ça va mieux aller ! '''Phildar et Manu''' : Mais il sait pas, Reego ! Il sait pas le faire ! '''Reego''' : Non, moi, je sais pas, j'ai pas le droit ! '''Gérard''' : Bon, Moustique ! '''Gamel''' : Gérard, tu fermes ta gueule, c'est moi qui commande, ici ! Tu fermes ta gueule, OK ? '''Gérard''' : Bon, alors, hop ! Hop ! Euh, je te préviens ! Max ! '''Phildar''' : Non, mais je l'ai viré, maintenant, tu peux y aller ! '''Gérard''' : Non, non, non, non, non ! Non, non, Max ! ''[Max revient, agacé, criant Merde en entrant dans le studio]''. Max, Max, Max ! Non, non, y'a pas de merde ! Tu viens ! Tu me les chopes au standard ! Tu les prends ! Le premier qui me dit merde, ou ta gueule, il dégage ! ''[par-dessus, quelqu'un demande à gérard de se faire par Sandy et de pas casser les pieds]'' : Alors, celui-là ! Celui-là qui vient dire Sandy, il dégage ! Hop ! Terminé pour lui ! '''Max''' : Non, qu'est-ce que t'es en train de me dire ? T'es en train de me dire que quand on dit merde ou enculé, faut zapper, donc quand on dit Sandy, c'est un... Donc, ça veut dire que Sandy, c'est un gros mot ? '''Gérard''' : Pourquoi tu dis que je vais me faire enculer par Sandy ? '''Phildar''' : Il a pas dit ça, hein ! '''Gérard''' : Non, à peine ! À peine ! À peine, tu l'as pas entendu, toi ! '''Max''' : Bon c'est bon ! Alors, maintenant, on reprend le débat normalement, s'il vous plaît, comme le premier, c'était très bien ! Manu va gérer tout ça ! '''Manu''' : Je gère ! T'inquiète pas, Gérard ! '''Gérard''' : Eh, je te préviens ! Première fausse note, tu dégages, je mets quelqu'un d'autre ! '''Manu''' : Y'aura pas de fausse note ! '''Gérard''' : Donc, alors, Moustique, pour la première question ! '''Moustique''' : Oui ? Euh... Bah, je sais plus, là ! C'était le décalage horaire, ce qu'on en pense ? Bah, c'est chiant, quoi ! Quand tu vas aux Etats-Unis, t'as 6 heures, donc, il faut... Tu recules de 6 heures, en fait, donc, faut tout réorganiser ta vie, parce que c'est carrément une demi-journée, quoi ! C'est un peu, en fait, astreignant, comme chose ! '''Gérard''' : Ouais, non, mais je pense que le décalage horaire... Je pense que le décalage horaire, c'est que... À chaque fois, tous les... 5 mois, je pense, à mon avis... '''Moustique''' : Le visa, il dure 6 mois, donc... '''Gérard''' : Non, mais faut qu'on change au mois de... Au mois de mars ! Et après, faut rechanger au mois d'octobre ! '''Moustique''' : Ouais, mais ça dépend quand il est tamponné, donc... '''Gérard''' : Ouais, mais parce que là, je peux te dire que le décalage horaire, normalement, on aurait dû le faire cette semaine, là... Ce week-end... '''Moustique''' : Ah bon, c'était là ? '''Gérard''' : Bah, pour l'instant, personne n'en a parlé, donc... J'en parle maintenant, et normalement, on aurait dû le faire maintenant... '''Manu''' : C'est le week-end prochain ? '''Gérard''' : Bah, on sait pas, parce que... D'après ce que j'ai vu, moi... Sur des programmes,<ref name="hist2"></ref> ils en parlent pas, donc... Je sais pas si, cette année, on va faire le changement d'horaire... '''Manu''' : Je crois que c'est le week-end prochain, mais je suis pas sûr... '''Boudin noir ''' : Ya une grève, ya une grève. '''Gérard''' : Non, non, mais attendez, attendez, attendez... Tu me dis ? '''Manu''' : Je crois que c'est le week-end prochain qu'on change d'heure, mais je suis pas sûr... '''Gérard''' : Non, moi, j'ai reçu le... Je te confirme, pour l'instant, on en... On n'a pas confirmation du décalage... '''Manu''' : Ok, autant pour moi... '''Phildar''' : Mais avant, il paraît que c'était le premier jour de l'automne qu'on changeait, c'est vrai ou pas ? '''Gérard''' : Oui, mais là, normalement, on aurait dû changer... Non, mais attends, toi, avec ta grève, tu m'énerves ! '''Boudin noir''' : Il y a une grève du décalage d'horaire, tu devrais te tenir informé ! '''Gérard''' : Mais attends, toi, avec ta grève, ta grève, si tu fais partie de la RATP, tu dégages... '''Boudin noir''' : Mais non, c'est la SNCF, c'est différent ! '''Gérard''' : Ouais, ben, dans ce cas-là, tu te tais, c'est tout, je réponds à la question... Voilà, merci ! '''Phildar''' : Gérard, donc, justement, à la place de Bonne-Nuit, on accueille Puceau... '''Gérard''' : Puceau, bonne nuit ! Non, bonsoir, pardon... '''Puceau''' : Bonsoir, qui ? '''Gérard''' : Puceau ! '''Puceau''' : Puceau toi-même, ouais ! '''Gérard''' : Attends, tu restes poli, s'il te plaît ! '''Gamel''' : Moi, Gérard, je pense que le décalage d'horaire, c'est de la faute à Jospin, de toute façon. '''Gérard''' : D'accord, alors là, je vois pas le décalage horaire, qu'est-ce qu'il a à faire dans la politique. Non, mais moi, je réponds à la question à Phildar, parce que tu m'avais dit... '''Phildar''' : Généralement, c'est le premier jour de l'été. '''Manu''' : Non, de l'automne. '''Gérard''' : Donc, normalement, si t'es d'accord avec Manu, normalement, on aurait dû changer d'heure ce week-end. '''Phildar''' : Le 20 septembre. '''Gérard''' : Donc, c'est-à-dire, le week-end dernier. Donc, pour l'instant, on sait pas. Je réponds à la question à Manu. Donc, pour le week-end prochain, pour l'instant, pour ce week-end, j'en ai pas entendu parler. '''Moustique''' : Et pourquoi, Gérard, on n'a pas changé ? '''Gérard''' : Pourquoi ? Parce que, pour l'instant, personne n'en parle. Et donc, on sait pas. '''Manu''' : Excuse-moi, je crois que c'est à cause de l'Europe. Pour se mettre à la même heure avec tout le monde. '''Gérard''' : Non, mais apparemment, tout le monde a dit qu'on fait des décalages horaire tout le temps. '''Phildar''' : Non, parce qu'en fait, ce qui va se passer, je crois qu'on aura des montres en euros. Il y aura plus d'heures. '''Gérard''' : Non, mais ça, l'euro, là-dedans, je vois pas ce que... Non, non, mais je m'en fous. Deuxième question. Donc, alors, deuxième question. Qui est le plus atteint par le décalage horaire ? '''Moustique''' :C'est les bovins. C'est les bovins, c'est les vaches. Elles arrivent pas à faire leur lait normalement quand l'heure, elle change. C'est prouvé scientifiquement, hein. '''Gérard''' : Ouais, mais d'accord, Moustique. Mais je te demande qui est le plus atteint, parce qu'il n'y a pas que les bovins qui sont... '''Moustique''' : Ah, mais les plus atteints, c'est les bovins. Après, c'est les vieux, quoi. '''Gérard''' : Ah ouais, mais ça, on va... Je pense que... Non, mais je pense qu'on va en revenir sur les questions, parce que, de toute manière, de toute manière, si tu parles des bovins, dans ces cas-là, tu penses que les bêtes souffrent ? '''Moustique''' : Non, non, je dis pas ça. Mais les vaches, elles arrivent pas à faire leur lait correctement parce qu'elles ont carrément changé d'heure, quoi. '''Gérard''' : Oui, mais dans ces cas-là, Moustique, si je te dis, les bêtes souffrent-elles du décalage d'heure ? '''Moustique''' : Bah moi, je te réponds non. '''Gérard''' : Bah pourquoi ? '''Moustique''' : Parce que, je te dis que ça se passe dans leur tête, elles sont complètement déréglées, mais elles n'en souffrent pas. '''Gérard''' : Bah oui, mais dans ces cas-là, on revient à... Qui est le plus atteint par le décalage horaire, tu me dis les... '''Moustique''' : Les bovins. Après, les vieux. '''Gérard''' : Bah oui, mais dans ce cas-là, les bêtes souffrent. '''Moustique''' : Bon, Gérard, on va pas faire une heure, je te dis, non, elles souffrent pas. '''Gérard''' : Bah si, si, moi, je te dis que si. '''Moustique''' : Bon, bah alors, si tu dis que si, d'accord, elles souffrent. Mais moi, je te dis que non. '''Point''' : Oui, je pense que tout le monde peut en souffrir, surtout les bébés, ils peuvent pas avoir leur biberon en temps et en heure. Je pense que même, c'est pareil pour les personnes âgées, ou même pour les personnes qui doivent... '''Gérard''' : Non, mais attends, eh oh point d'interrogation ? Eh, tu me... Tu réponds pas aux questions avant moi, parce que sinon, toi, je vais t'éclater ta tête. '''Moustique''' : Bon, on a le droit de parler ? '''Point''' : Ah non, faut pas m'éclater la tête, hein. '''Gérard''' : Non, bah non, parce que là, t'es en train de me prendre... '''Gamel''' : Non, Gérard, éclate-lui la chatte, plutôt. '''Gérard''' : Non, toi, toi, tu la fermes. Ça vaudra mieux pour ton matricule. '''Point''' : Non, mais comme je t'ai dit, je pense que tout le monde peut en souffrir, de ça. '''Gamel''' : Bah moi, à mon avis, le plus atteint qui sera par le décollage horaire, c'est quand même Bill Clinton, parce qu'avec tous les problèmes qu'il a eus. '''Gérard''' : Bon, allez, Boudin noir... '''Phildar''' : Non, mais c'est Gamel, Gamel. Non, mais si ça se trouve, il y a un rapport. '''Gérard''', ''[avec écho de Manu]'' : Mais non, ça n'a rien à voir ! Manu, s'il te plaît. '''Manu''' : J'ai rien fait, Gérard. '''Phildar''' : Bon... Il n'y a pas de rapport ? Mais pourquoi ? '''Gérard''' : Non non mais... hop, Gamel, tu me l'envoies... Bonne nuit. Boudin noir, pourquoi ? '''Boudin noir''' : Déjà, pour le problème des vaches, moi, je sais qu'il y a des paysans du Luberon qui ont fait une expérience. Il suffit juste de mettre une horloge dans l'étable. '''Moustique''' : Ah bon, ça marche ? '''Boudin noir''' : Ça suffit, ouais. Et en ce qui concerne les vieux, vous parliez des vieux, effectivement, les vieux, c'est pareil. Le matin, ils ont l'habitude de pisser à heure fixe. Et avec le décalage horaire, en fait, quand dans les maisons de retraite, les infirmières viennent, ils se sont tous chiés dessus parce qu'on ne les fait pas dégorger à temps, quoi. '''Gérard''' : Donc, Pussot, t'es encore là ? '''Puceau''' : Oui, moi, je voulais dire que les plus atteints, c'est les filles, quoi, parce qu'il y a des filles qui n'ont pas les règles en même temps. '''Gérard''' : Non, mais attends. Hé, Pussot ! Pussot ! Pussot ! Je ne vois pas le rapport avec le décalage horaire et les ragnanias des nanas. '''Puceau''' : Les ragnanias, c'est normal, Gérard. Les ragnanias, elles ne les ont pas en même temps, donc il y a un décalage horaire. '''Gérard''' : Mais attends, mais de toute manière, si elles ont leur ragnania, par exemple, aujourd'hui, d'ici un mois, si le décalage... Euh... D'ici une semaine, si le décalage change, elles les auront toujours en même temps. '''Puceau''' : Ouais, mais si elles partent, il y a un décalage horaire, donc elles n'auront pas le même jour. '''Gérard''' : Et alors, tu feras toujours des spaghettis avec ? '''Puceau''' : Ben écoute, moi, je dis une chose, les spaghettis, c'est bien, mais les ragnanias, c'est mieux. '''Gérard''' : Ouais, mais il faut mieux avoir des spaghettis aux ragnanias avec de l'ail. '''Manu''', ''[écœuré]'' : Oh, Gérard, t'es poétique, vraiment, c'est super. '''Phildar''' : Justement. On accueille deux nouveaux, on accueille Coquer, qui appelle de Niort. Et Merguez, de Toulouse. '''Gérard''' : Euh, donnez-moi les fréquences, là. '''Merguez''' : Moi, c'est Toulouse, c'est 105.9. '''Boudin noir''' : Non, non, 117.5. '''Gérard''' : Et Coquer, de Niort ? '''Coquer''' : 93.4. '''Gérard''' : Eh, Pussot, t'es d'où, toi ? '''Puceau''' : Oui, je suis de Paris. '''Boudin noir''' : Non, il est d'Italie, lui. '''Gérard''' : Donc, troisième question. Depuis qu'il y a Manu et Phildar, c'est le vrai bordel. '''Manu''' : Ben non, non, je sais pas qu'est-ce qu'il se passe, pourquoi ? '''Gérard''' : Non, non, parce que là, ça devient le vrai bordel. On a des bruits et... ''[depuis quelques minutes, reego tape violemment sur les touches de son clavier, micro ouvert, Manu ronfle bruyamment, etc]'' Voilà, il y en a un qui ronfle. '''Phildar''' : Il y a peut-être un qui s'endort, donc il faudrait peut-être que t'accouches. '''Gérard''' : Non, je pense que ça va pas aller longtemps, vous deux. '''Phildar''' : Allez, Gérard, la question, vite. '''Gérard''' : Quoi, vite ? Si je veux ! '''Phildar''' : Bon, ben, prends ton temps. '''Gérard''' : Les fermiers supportent-ils ce changement d'heure ? On va demander à Moustique. '''Moustique''' : Ben, mieux que les vaches, en tout cas. '''Gérard''' : Ben, donc, tu vois que je reviens à la première question. Bon, vous vous la fermez derrière quand je parle. Merci. Donc, tu vois, Moustique, je reviens avec la question numéro 2. Merci pour... '''Manu''' : Pourquoi ? '''Reego''', ''[alors que quelqu'un imite le moustique, micro éteint]'' : Il y a un moustique, là. '''Boudin noir''' : Plutôt une mouche, ouais. '''Gérard''' : Non, non, mais... Non, non, c'est pas toi. Non, non, mais je sens que tout à l'heure, ça va mal se terminer. Vous allez voir que... Je pense qu'on va pas faire les 10 questions, hein. '''Boudin noir''' : C'est l'odeur. '''Gérard''' : L'odeur, elle t'emmerde, toi, d'accord ? Donc, tu vas pas commencer tes conneries, ok ? En de bon entendeur, salut. Ok. Donc, Moustique. Donc, on revient à la question numéro 2. Donc, qui est le plus... Qui est le plus atteint par le décalage horaire ? Et les fermiers supportent-ils ce décalage horaire ? Donc, apparemment, tu reviens sur la même question. '''Moustique''' : Non, moi, je te dis que c'est les vaches. Mais les fermiers supportent beaucoup mieux que les vaches. '''Gérard''' : Non, non, non, mais attends. Parce que, eux, pour eux... Eux, si tu veux, les fermiers, eux, ils se lèvent un peu plus tard. Disons, avec le décalage horaire, ça va les changer. Parce que si, par exemple, ils font une traite à 6 heures, pour eux, ça fera 5 heures, si tu veux. '''Moustique''' : Oui, mais les vaches... Et les vaches, elles ne le savent pas que l'horaire change. '''Gérard''' : Eh oui, mais d'accord, mais attendez, s'il vous plaît, derrière. '''Moustique''' : Ça les perturbe parce que le fermier, il vient leur titiller les pis, et elles n'ont pas de lait, donc ça les perturbe. Voilà. '''Boudin noir''' : Mais non, parce qu'il y a le coq, vous oubliez le coq. '''Gérard''' : Attends, toi, qui c'est qui parle du coq ? Ouais, mais Boudin Noir, tu vas aller bouffer ton coq au standard. '''Boudin noir''' : Le coq, il chante toujours à la même heure. Donc le fermier, il se lève quand le coq, il chante, il est pénard. '''Phildar''' : Ben voilà. ''[Reego continue à taper sur le clavier de l'ordianteur de bureau exagérément bruyamment dans le micro]''. Qu'est-ce que tu voulais dire, Gérard ? '''Gérard''' : Non, mais là, ça commence à bien faire. Taleur, au premier débat, ça s'est bien passé. Maintenant, le deuxième, vous n'allez pas me le casser. Vous n'allez pas le casser, pour l'instant, vous êtes en train de le casser. '''PHildar''' : Le coq, il n'a pas de montre. Donc, lui, il ne sait pas qu'il y a un décalage horaire. Donc, il chante tout le temps. Il chante à la même heure à chaque fois. T'es d'accord ? T'es d'accord, Gérard ? '''Gérard''', ''[tournant le regard de partout et atterrissant sur Reego]'' : Merci, Reego. '''Reego''' : Qu'est-ce qu'il y a ? '''Gérard''' : Ah ouais, mais t'avais laissé ton micro allumé. '''Manu''' : On entend tout, quand tu pianotes sur l'IRC. '''Reego''' : Ah ouais ? Ah ouais, excusez-moi. '''Gérard''' : Ouais. Je me disais aussi, il y avait un problème. Donc, point d'interrogation. '''Phildar''' : Bon, t'as compris ou pas ce que je t'ai dit ? Gérard ? '''Manu''' : Pour le coq. '''Gérard''' : Ouais, mais je m'en fous, on continue le débat. Point d'interrogation. '''Point''' : Oui, les fermiers peuvent en avoir des conséquences. '''Phildar''', ''[après un bruit de pet avec la bouche]'' : Elle est indisposée, point d'interrogation. '''Boudin noir''' : Point d'interrogation, pour une bohémienne, elle a une voix de bouveuse, hein. '''Gérard''' : Bon. T'envoies un disque. '''Merguez''' : Point d'interrogation, on lui parle de vaches et ça l'excite. '''Gérard''' : Allez, hop. '''Manu''' : Non, non, pas de disque, c'est pas possible. '''Gérard''' : Non, non, Max ! Max ! Max ! '''Phildar''' : Non, il n'est pas là ! Il faut que tu continues. '''Gérard''' : Non, non, moi je vous balance un disque. Troisième [question], vous allez réfléchir, moi je fais une pause. '''Coquer''' : J'ai pas répondu, moi. '''Gérard''' : Non non, Cocker, t’attends ! '''Phildar''' : Cocker il voulait répondre. '''Gérard''' : C'est pas toi qui commandes, c'est moi. '''Phildar et Manu''' : On n’a pas de disque, on n’a rien, donc pose ta question. '''Gérard''' : Tu te démerdes. '''Manu''' : Non, bah non... Bah chante alors ! '''Gérard''' : Non, non, tu te démerdes, moi je continue pas avec vous deux. Allez, hop, c’est basta ! '''Phildar''' : Bon, on va chercher Olivier de la prod. ''[il ouvre la porte et appelle Olivier, en criant]''. '''Manu''' : Allez, allez ! Gérard, pour les auditeurs... Vous êtes là ? Ça vous plaisait le débat ? Tout va bien ? '''Gérard''' : Non, non, vous êtes en train de faire les cons tous les deux... '''Manu''' : Mais non, c’est toi qui veux pas continuer, Gérard ! '''Reego''' : Continue le débat, Gérard, il y a des gens qui s’intéressent au moins. '''Gérard''' : Donc, Point d'intrrogation ? '''Point''' : Oui, donc je te dis : les fermiers pourraient en avoir des conséquences. Et comme disait... les animaux, c’est vrai qu’ils peuvent avoir aussi des conséquences, telles des séquelles, tu vois, des choses comme ça. '''Moustique''' : Dans quel sens ? '''Gérard''' : Euh dans quel sens, Moustique, tu arrêtes s’il te plaît ! '''Moustique''' : Mais non, mais j’ai pas compris là ! '''Gérard''' : Non, mais tu arrêtes de dire "dans quel sens", parce qu’avec Phildar et Manu, c’est toujours "et pourquoi ?" et "dans quel sens ?". OK, d’accord. Bon, Puceau ? '''Puceau''' : Allô ? Oui, moi je trouve que tu as raison là-dessus et je te donne carte blanche, je suis à 100 %. '''Gérard''' : Tu n’as même pas compris la question ! '''Puceau''' : Bah si ! Si le coq avait un décalage horaire par rapport à la poule... Là, je suis d’accord avec toi. '''Gérard''' : OK. Cocker ? '''Cocker''' : Moi je pense que ce n’est pas les fermiers, mais plutôt les animaux qui subissent des conséquences, parce que le coq ne chante plus à l’heure. Donc il a des troubles psychologiques. '''Merguez''' : Ouais, bah moi je pense pareil, quoi. Je pense plutôt que c’est les animaux qu’ont plus de conséquences parce qu’e bon on se comprend, eux, ils ont pas de montre, alors un coup il se lèvent trop tôt, un coup c’est trop tard, et c’est compliqué, quoi. Il n’y a que le fermier qui sait. '''Puceau''' : Oui, mais moi je dis pas... alors comment ils font ? Après c’est Puceau... Moi je veux dire, Gérard, t'as raison, c'est les animaux parce que moi j’en connais un, quand il prend son joker, il est un peu dépoussolé, quoi. '''Gérard''' : Ouais... Alors Puceau, tu sais ce que tu vas faire ? Tu vas te faire dépuceler au standard. Pour Puceau, terminé pour lui ! Allez, on continue. Donc, je réponds quand même à la question si ça dérange personne, et on va envoyer un disque. '''Manu''' : Ah bah non, pas tout de suite ! Encore une question et après on l’envoie. '''Gérard''' : Ouais, moi je peux vous dire une chose : quand je dis "les fermiers", oui, ils supportent... ils ont du mal à supporter le décalage d’heure parce que pour la récolte de tout ce qu’ils ont à faire, ils n’y arriveront pas. Ça... '''Manu''' : Mais vas-y ! Mais vas-y, je coupe les auditeurs pour que tu puisses parler. '''Gérard''' : Donc, moi je peux vous dire une chose que là, je me suis aperçu hier en allant se balader : c’est que dans certains coins, le maïs, pour l’instant, ils n’arrivent pas à le récolter '''Phildar''' : Pourquoi ? '''Boudin noir''' : Parce qu’ils se lèvent plus tôt le matin avec le décalage horaire, le maïs, il comprend plus rien. '''Gérard''' : Non, non, non, non, parce qu’avec le temps qu’ils ont, ils peuvent pas le récupérer. '''Phildar''' : Est-ce qu’on change d’heure quand on va en Allemagne ? Puisque tu es allé en Allemagne hier, Gérard, est-ce que tu as dû changer d’heure ou pas ? '''Gérard''' : Non, c’est toujours la même heure, l’heure française pour l’instant. '''Phildar''' : Parce que ce que je comprends pas, c’est pourquoi on change d’heure en Italie et on change pas d’heure en Allemagne. '''Gérard''' : Parce que le décalage d’heure... le décalage horaire en Italie, je sais pas s'il y a un décalage horaire. '''Phildar''' : Il y a une heure en moins. '''Gérard''' : Non, je pense pas. '''Phildar''' : Si, si, si, je suis allé en Italie, je te jure, il y a une heure en moins ! ''Manu ''' : Je croyais que ça venait des fuseaux horaires parce qu’en Italie ils en ont, et en fait en Allemagne ils portent des pattes d'eph, donc... '''Gérard''' : Ouais, c’est ça... Faites votre popote hors antenne tous les deux ! Troisième question... et après on s’envoie... quatrième, pardon : Croyez-vous qu’on dépense moins de courant ? On va demander à Moustique. '''Moustique''' : Ouais, alors ça c’est une légende urbaine. En fait c’est complètement faux, parce que tout le courant que tu économises le soir, tu le brûles le matin. Donc ça sert à rien du tout. '''Gérard''' : De toute manière que tu le dépenses le matin ou le soir, c’est pareil. '''Moustique''' : Voilà, donc le problème est le même. '''Gérard''' : Donc en fin de compte, si tu veux, le décalage horaire ça sert à rien, parce que par exemple là tu allumes ta lumière, il est 2h10. Demain matin, tu vas rallumer ta lumière, il va être... ça dépend à quelle heure tu te lèves et ça dépend ce que tu fais comme boulot. Bon attends, derrière, toi tu la fermes ! D’accord ? Pour l’instant je réponds à Moustique. OK ? Alors toi, tu la fermes, OK ! Donc selon ce qu'on fait comme boulot, c’est pareil le matin, tu allumes ta lumière pour te préparer... Donc en fin de compte, tu n’économises pas du tout, tu n’économises pas de courant et tu en dépenses autant. Donc en fin de compte, ça sert à rien. '''Reego''' : Gérard ? Oui, Gégé, sur IRC il y a Coyote Bip qui me demande ce que tu penses du décalage horaire de l’espace. '''Gérard''' : Justement, c’est une question qu’on allait faire à la fin. '''Merguez''' : Ouais, parce que si des ovnis viennent chez nous, comment on fait pour être à la même horaire ? Parce que imagine... imagine qu'ils n’ont pas l'heure que nous, ils viennent la nuit, qui sera là pour les accueillir ? '''Moustique''' : Et ils ont quelle heure ? '''Merguez''' : Bah oui mais on sait pas, parce qu’on n’arrête pas de décaler... alors c’est le bordel, quoi. Faudrait qu'on se mette tous d'accord. '''Gérard''' : Point d’interrogation... '''Point''' : Tu sais, tu es obligé d’allumer la lumière, même les personnes qui veulent faire des mots croisés ou quoi que ce soit, ils sont obligés d’allumer la lumière en même temps. Même les gens qui sont aveugles, ils sont obligés d'allumer la lumière. '''Merguez''' : Parce que tu vas nous faire croire que tu fais des mots croisés peut-être ? '''Gérard''' : Allez, hop ! tu me vires ! Tu me vires ! tu me changes parce que là... depuis que Max est parti, là vous me faites que déconner. '''Manu''' : Tu veux qu'on te change, Gérard, t'as fait pipi ? Autant pour moi. '''Boudin noir''' : Moi déjà, je vais te dire : je suis un homme des bois. Donc déjà j’habite dans les bois, comme tu as compris, et je me chauffe à la bûche et je m’éclaire à la chandelle. Donc à la limite, tes histoires de courant, je n’en ai rien à carrer. Je crois que toi aussi, t'es un peu un homme des bois quand même. '''Gérard''' : Ben ferme-là, ça vaudra mieux. Faudra-t-il se coucher plus tôt qu’en été ? Et on s’écoute... '''Phildar''' : Donc ça c’est la question à laquelle ils doivent réfléchir. D’accord ? Tu relances les numéros, tout ça... '''Gérard''' : 0800 70 5000 et toujours le 36 15 code Fun Radio, rubrique direct. Et on a... on a qui sur le Minitel ? Quentin : « À vous deux, Max et Gérard, me devez 60 000 balles. » Je sais pas ce qu'il voudra dire... Ben tant pis pour toi ! Donc sur l'IRC, qui c’est qu'on doit saluer ? '''Reego''' : On salue tout le monde : on salue Clifford, Nico-2, Serval, Trois Solos, Lenni, TSM, etc. '''Gérard''' : Et le numéro IRC parce que je ne le connais pas de tête ? '''Reego''' : : irc.funradio.fr. Voilà ! '''Gérard''' : Vous pouvez toujours continuer à nous appeler, donc on est toujours là pour la suite des débats à 2h13. Et on va s’écouter "Le Décalage Pubère, sans nous... avec eux... '''Phildar''' : C’est super, on comprend tout ce que tu dis. ""{Musique]''. '''Gérard''' : Voilà, c'était Décalage Pubère sont nus avec du pinard et donc vous pouvez toujours nous appeler au 0800 70 5000, toujours 36 15 code Fun Radio et sur IRC, Reego ? '''Manu et Reego''' : irc.funradio.fr. Allez, allez, on y va, on est là ! '''Gérard''' : Donc on récupère Moustique. 99.6. Couscous. '''Couscous ''' : Asalam Alaykoum Gérard. J'appelle de Verdun, 93.9. '''Gérard''' : Point d'interrogation sur 101.9. '''Point''' : Salut, mon amour. '''Merguez''' : C'est à moi que tu parles ? '''Boudin noir''' : Salut cochonne. '''Gérard''' :Attends, toi ! Qui c’est qui vient de dire "cochonne" ? '''Phildar''' : Je crois que c’est Petit Slip. Je vais le virer. '''Max''' : Personne aurait cinq francs ? '''Phildar''' : Non, désolé. '''Gérard''' : Cinq francs ? ''[il fouille dans ses poches et sort une pièce de monnaie]''. '''Manu''' : Gérard a cinq francs... Oh là là ! Mais qu’est-ce qui se passe ? On aura tout vu. '''Gérard''' : C’est bizarre la fréquence là, Boudin Noir ! T’es de quel coin ? '''Boudin noir''' : Toulouse Nord. Il y a deux fréquences à Toulouse, il y a Toulouse Nord et Sud, c'est pour ça. '''Gérard''' : Ouais, c’est ça. Bon, Cocker, au 93.9... '''Cocker''' : Bonsoir ma caille. '''Gérard''' : Je suis pas ta caille, et tu commences à te calmer, sinon tu vas dégager. '''Boudin noir''' : OK chéri. '''Phildar''' : Je le calme. '''Gérar''' : S’il te plaît tout de suite. Et tu éteins ton micro quand... après. '''Coker''' : Quand tu parles... '''Gérard''' : Petit Sucre ? '''Petit Sucre''' : D'Amiens. '''Boudin''' : Ça va ma poule ? '''Gérard''' : Toi, ça va être pareil, tu vas aller voir au standard ce qui se passe, hein ! '''Petit Sucre''' : OK, d’accord, j’arrête alors. '''Gérard''' : Donc la question c’est : "Faudra-t-il se coucher plus tôt qu’en été ?" Donc on va demander à... tiens, Petit Sucre. '''Petit Sucre''' : Ouais, ouais... Bah non, pourquoi se coucher plus tôt ? C’est en hiver qu'on se couche plus tôt, parce que l’été tu as une heure de plus, donc le soleil dure plus longtemps. bah ouais, tu comprends ? '''Gérard''' : Non, maintenant... Tu t’écrases quand je parle s’il te plaît ! '''Boudin''' : Alors ta gueule ! '''Gérard''' : Ta gueule, il t’emmerde ! Alors tu dégages ! '''Phildar''', ''[sévère]'' : Il parlait à Petit Sucre... arrête un peu, Gérard, tu suis un peu le débat un peu ? '''Gérard''', ''[crescendo vers le hurlement]'' : Attends, tu permets ? Il y en a un qui me dit... oh oh oh... Tu vas t’occuper de ton standard toi ! '''Manu''' : Gérard ! C’est Manu. Écoute-moi, on va reprendre le débat et c’est pas à toi qu’il disait ça. '''Gérard''' : Cocker ? Non, attends, Petit Sucre n’a peut-être pas fini. '''Petit Sucre''' : Ouais, bah oui, je te disais que donc... l’été on se couche une heure plus tard parce qu’on a du soleil une heure plus tard parce qu’on a une heure en moins, donc le soleil se couche plus tard. C'est l'’hiver, où on se couche plus tôt, il faut se coucher plus tôt. ''[sur la dernière phrase, dans un combiné, on entend un bruit d'eau qui coule d'un robinet dans un lavabo]''. '''Gérard''' : Tu sais pas d’où ça vient ça, toi ? '''Phildar''' : Attends, je vais essayer... Ah oui, ça venait de chez Couscous. '''Petit ucre''' : Ça t’intéresses pas ce que je dis ? Tu me posais une question, je te réponds tranquillement... '''Gérard''' : Si, mais je répondrai... Tu permets ? TU PERMETS ?! OK, merci. Reego ? '''Reego''' : Oui, sur IRC il y a Serval qui demande : "Alors, est-ce que c’est à cause du décalage horaire que les chauffeurs de Mercedes s’endorment au volant ?" '''Gérard''' : Alors là, j’y réponds pas. Là, tu peux y mettre... Non. '''Reego''' : Mais il t’entend. Tu peux lui dire... Il s'appelle Serval. Tu lui dis : « Serval, non... ». '''Gérard''' : Serval, je peux te dire ta question, de toute manière je te répondrai pas dessus, parce que je sais à quoi tu veux en venir. Alors Cocker ? '''Cocker''' : Je vais en discothèque. '''Gérard''' : Cocker ? '''Cocker''' : Oui ? Ah bah non, c’est le décalage horaire, je me suis trompé de débat. '''Gérard''' : Bon bah OK ! Alors si tu t’es trompé de débat... Cocker ? Tu vas répondre ou pas à la question ? '''Cocker''' : Bah non... La différence d'âge... '''Gérard''' : Bonne nuit Cocker ! Terminé pour toi ! Boudin Noir ? '''Boudin Noir''' : Ouais, moi je pense tu vois que... ça, ça dépend sous quelle latitude tu te trouves. '''Gérard''' : Non, mais faudra-t-il se coucher plus tôt qu'en été ? '''Boudin noir''' : Ça dépend, parce que, regarde, je vais te citer un exemple. Je regardais Star Trek, il y avait le Capitaine Kirk, il y avait Spock. Il y avait une téléportation, il y avait un décalage horaire. '''Gérard''' : Non, mais attends, je ne vois pas du tout le rapport. '''Boudin noir''' : Mais si, réfléchis un petit peu, c'est de la philosophie, c'est une énigme. C'est comme le père Fouras. '''Gérard''' : Non, non, attends, boudin noir. Boudin noir, on fait un débat, on ne s'amuse pas... '''Boudin''' : Mais ça dépend de la latitude. '''Gérard''' : Moi, quand je fais un débat, je n'aime pas que vous vous amusez à dire « ouais » dans les... '''Boudin noir''' : C'était une métaphore. '''Gérard''' : Ok, d'accord. Je pense que tu es loin de comprendre le deuxième degré. '''Boudin noir''' : J'ai du mal, le vocabulaire, j'ai du mal. '''Gérard''' : Je pense que tu as du mal. Point d'interrogation. '''Point''' : Oui, je pense qu'on sera obligé de se coucher un peu plus tôt que d'habitude. '''Gérard''' : Dans quel sens ? '''Point d'interrogation''' : Dans quel sens ? Si tu travailles ou si tu vas à l'école, tu es obligé de te coucher plus tôt. '''Merguez''' : Alors va te coucher, c'est l'heure. '''Gérard''' : Qui c'est qui vient de dire ça ? Alors, entre petit sucre et boudin noir, vous allez vous calmer, s'il vous plaît. Non, non, mais vous allez vous calmer, parce que je sens que c'est moi qui vais vous calmer tout à l'heure. ''Point ''' : Tout dépend si tu as envie de dormir ou pas. '''Gérard''' : Non, mais attends. PHildar, tu vas commencer par me les calmer, parce que sinon... t'arrêtes pas ? pas, mais je crois que tu ne vas pas arrêter de les calmer, parce que sinon, il reste quatre questions à faire. Il est quelle heure ? Il est 2h23. Dans moins de 22 minutes, j'arrête tout. '''Phildar''' : Ah non mais on change d'heure aujourd'hui. Il te reste 1h23 à faire. '''Gérard''' : Oui, oui. Oui, Reego ? '''Reego''' : Sur IRC, il y a Galéon qui demande : est-ce que l'hiver décale l'horaire de l'été ? '''Gérard''' : Ben oui. En hiver, tu recules d'une heure ta montre. Donc là, si tu veux, les 2h24, ça fera 1h24. '''Boudin''' : ON avance, on avance. '''Gérard''' : Non, tu recules. Tu recules. En hiver, tu recules ta montre d'une heure. En été, tu l'avances d'une heure. '''Boudin''' : Quand je recule, comment veux-tu ? '''Gérard''' : Que je t'encule, d'accord ? Merci pour la blague, je la connais par cœur. '''Manu''' : Et Gérard, il paraît qu'avec le décalage horaire à New York, quand il est midi, il y a beaucoup de gens qui sont en train de bouffer. C'est vrai ou pas ? '''Gérard''' : Attends, là, il est 2h25, on dort, nous. '''Manu''' : Non, mais je te parle à New York. Est-ce que tu penses que les gens sont en train de manger ? '''Gérard''' : Non, mais attends. Quand il est midi à New York, vous, vous êtes en train de faire de la radio. Donc là, à l'heure actuelle, si tu veux, il est 2h24, donc nous, pour l'instant, on est en train de dormir. '''Manu''' : Quel rapport avec les gens qui mangent à New York ? '''Boudin''' : Pour eux, il est 15h du matin. '''Merguez''' : Mais Gérard, quand les gens t'écoutent à New York, il est quelle heure, là-bas ? '''Petit sucre''' : Est-ce qu'ils peuvent t'écouter, au moins ? '''Gérard''' : De tte manière, tu regardes, tu fais un décalage, il est 2h25, tu fais moins 6h. Ça fait 12h25. '''Couscous''' : Attends, mais Gérard, mais tu fais un balayage arrière ou avant ? '''Gérard''' : Attends, c'est qui, lui ? '''Phildar''' : C'est Couscous. ''[rot dans un combiné]''. '''Gérard''' : Bon, attendez, attendez. Oh là. Alors, déjà, Phildar. Tu me calmes Boudin noir et sucre. Tu vas me les calmer tous les deux ! Parce que le premier qui rote, Je l'éclate. ''[le bruit reprend, Phildar ne bouge pas, Gérard tape sur la table]''. C'est toi que je vais t'éclater. '''Phildar''' : Comment veux-tu que je rote avec le micro fermé ? '''Merguez''' : Gérard, comment ça se fait qu'il y a pratiquement pas de femmes dans ton débat, ce oir ? '''Gérard''' : Si, il y a moustique et point d'interrogation. '''Couscous''' : C'est pas une femme, point d'interrogation. C'est une boule d'éléphant. '''Gérard''' : Alors, Couscous. COUSCOUS ! '''Couscous''' : Mon cousin Gérard, tu vas bien ? '''Gérard''' : Bon, tu réponds à la question, s'il te plaît. '''Couscous''' : Ok, alors moi, écoute. Je suis comme toi, je vais au resto du cœur et je crois qu'en hiver, on mange plus tôt à 3h de l'après-midi. Donc, on peut se coucher plus tôt, tu as raison. '''Moustique''' : Ben moi, je me couche plus tard en été, ouais. Parce qu'il fait beau et puis que je suis en vacances, donc je me couche plus tard. '''Gérard''' : Ben voilà. Ouais, pourquoi ? Parce qu'en fin de compte... ''[Ouais est dit de manière légère, comme en espagnol. Phildar réagit directement en se moquant : Ouepa et Manu enchaîne sur Un, dos tres de Ricky Martins. Gérard se tourne vers Phildar et veut le frapper, mais reego le retient.]''. '''Reego et Manu''' : Arrête, Gérard ! '''Gérard''' : Toi, tu te calmes là-bas, ok ? Parce que sinon, je t'éclate. '''Manu''' : Oula. Ça va être chaud pour ton matricule, Phil. '''Gérard''' : Toi, tu ne vas pas continué comme ça. Donc, je réponds à... Qui c'est qui m'a posé la question ? Non, c'est Moustique. Donc, moi, je vais dire une chose, que le mieux, c'est... ''[un rot]''. Manu, fais gaffe. '''PHildar''' : Je t'éclate. '''Gérard''', ''[le sourire gêné]'' : Hien Reego ? '''Reego''' : Non c'est juste pour rire, j'ai... '''Gérard''' : Non, non, mais... Arrêtez quand je réponds aux questions, parce que sinon, moi, je ne réponds pas. Je fais le débat sans répondre à aucune question. '''Manu''' : Vas-y, réponds, réponds, réponds. '''Gérard''' : Donc, je réponds à Moustique. Donc, c'est vrai que tu peux te coucher plus tard l'été, parce que le soleil, de toute manière, la nuit vient plus tard. Tu es d'accord avec moi ? '''Moustique''' : Oui. '''Max''' : Par exemple, excuse-moi, je pensais à un truc, parce que je me dis, par exemple, quand on dit le soleil vient de se lever, c'est encore une belle journée. On va bientôt s'amuser, l'ami Ricoré. C'est considéré comme du décalage horaire ou pas, ça ? '''Gérard''' : Ça, je ne peux pas. Je ne peux pas te répondre là-dessus. '''Boudin''' : Ah ouais, d'ailleurs, attends, Gérard, l'ami Ricoré, il vient toujours à la même heure ou pas ? C'est une question intéressante. '''Merguez''' : Ah ouais, en fait, comment il fait, lui, pour le décalage horaire ? '''Boudin''' : L'ami Ricoré, il a une heure, pendant une heure, il se fait chier, en fait, en hiver. '''Gérard''' : Bon, il se fait chier. Si tu as envie de chier, tu vas à la deuxième porte à droite. Bon, pour l'instant, je réponds à la question à Moustique, s'il vous plaît. Merci. '''Couscous''' : Gérard, tu as raison, parce que la deuxième porte à droite, c'est les chiottes de la Loco. '''Gérard''', ''[sourire gêné, tentant maladroitement l'accent arabe sur le prénom]'' : Couscous tu vas te calmer. Tu te calmes, parce que cette histoire de chiottes de la Loco, je ne veux pas en entendre parler cette année. '''Moustique''' : Gérard, tu sais, dans la chanson, il est 5h, Paris s'éveille. En hiver, c'est les 6h. '''Gérard''' : Ouais, si tu veux. Bon, je réponds à ta question, quand même, parce que je ne voudrais pas qu'on s'éternise trop sur la même question. Alors, donc, moi, je peux te dire que c'est vrai qu'en été, tu peux te coucher vachement plus tard, parce que, bon, déjà, à 10h, il fait encore jour. Ouais, mais même, tu n'as pas besoin de faire la fête, tu peux te balader dans... '''Boudin noir''' : Ouais, non, tu vas en soirée techno, tu vas à Cannes et tout, c'est bon. '''Gérard''' : Non, mais ça y est, je réponds, s'il vous plaît, merci. Vous arrêtez de me couper sans arrêt. Donc, je réponds à Moustique. Donc, c'est vrai que tu peux te coucher plus tard la nuit, en été. Parce qu'à 10h, il fait quand même encore jour. Par rapport à maintenant, c'est qu'à partir de 8h, la nuit est carrément tombée. Là, tu ne peux plus rien faire. '''Manu''' : Ouais, mais si chez toi, tu fermes les volets en été, il fait quand même... '''Gérard''' : Bah non, mais même, de toute manière, en été... Non, mais que ce soit été comme hiver, de toute manière, tu as toujours du jour. Tu n'as pas besoin d'allumer ta lumière, même en ayant fermé les volets. '''Manu''' : Même pour dormir, en fait. '''Gérard''' : Moi, je ferme les volets de la chambre, c'est tout. Dans la salle, c'est allumé. Dans la cuisine, c'est allumé. Mais tu peux demander à point d'interrogation. '''Phildar''' : Excuse-moi, Gérard, deux secondes avant de continuer. On accueille Loudné à la place de Coquer. '''Gérard''' : Non, mais... Je te préviens. Ne me fais pas changer les noms. Non, Loudné, il est d'où ? '''Phildar''' : Loudné, t'es d'où ? '''Loudné''' : De Marseille. ''[Manu renifle, le nez encombré]'' '''Gérard''' : Fréquence ? '''Phildar''' : 103.1. '''Gérard''' : Celui qui ronfle, merci. Donc, les enfants souffrent-ils de ce... '''Point''' : Je n'ai pas répondu. Point d'interrogation. '''Merguez''' : Oui, mais ce n'est pas grave, tu comprends... '''Gérard''' : Oh ! Vous fermez vos... Vous vous la fermez, s'il vous plaît, derrière. Merci. '''Point''' : Tu peux me répéter juste la question. '''Gérard''' : Alors, faudra-t-il se coucher plus tôt qu'en été ? '''Point''' : Oui, je pense qu'il faudra se coucher quand même plus tôt qu'en été. '''Gérard''' : Et pourquoi ? '''Point''' : Parce qu'en été, tu vois, tu n'es pas obligé d'allumer la lumière, déjà, en été, qu'en hiver... Et je pense que tu peux te coucher plus tôt. '''Gérard''' : Oui, mais... Non, mais comme Max, il posait la question, ou même Manu ou Phildar, je ne sais plus qui c'est, ou Reego, qui a posé la question. Si, par exemple, tu fermes les volets de la salle à manger ? '''Point''' : Ben oui, là, t'es obligé d'allumer. '''Gérard''' : Ah bon ? Tu penses qu'il faut allumer la... '''Boudin noir''' : Non, non, quand on voit ta gueule, il vaut mieux éteindre. '''Point''' : Ben, si tu n'es pas content, tu ne me parles pas. '''Gérard''' : Non, non, non, attends, attends, attends, point d'interrogation. Maintenant, je veux savoir qui c'est qui a dit, quand tu vois ta gueule, machin chouette. '''Manu''' : Dénoncez-vous, les mecs. '''Boudin noir''', ''[voix efféminée]'' : C'est Richard. '''Manu''' : Allez, Richard, dehors. '''Point''' : Regarde déjà la tienne, ce sera déjà pas mal, hein. '''Boudin''' : Oh, je viens d'arriver, je viens d'arriver, arrêtez. '''Phildar''' : Non, Richard, tu vires, c'est tout. '''Boudin''' : Ah, je me suis laissé aller, excusez-moi. Excusez-moi, je ne le ferai plus, allez, j'arrête. '''Merguez''' : Ben, c'est vrai que c'est tentant. '''Manu''' : Allez, Gérard, on y va. '''Gérard''' : Donc, moi, je pense que tu as répondu quand même aux questions qu'on avait dites ? Attends, il y a... point d'interrogation... il y a une question IRC. '''Reego''' : Oui, ça la concerne, en plus, c'est TSM qui me demande, enfin, qui te demande s'il y a un décalage horaire entre la fesse gauche et la fesse droite du point d'interrogation. '''Phildar''' : Non, il y a un trou. '''Reego''' : Pour ne pas la citer, hein, c'est Sandy. '''Boudin''' : À peu près 70cm. '''Reego''', ''[regard désespéré de Gérard]'' : C'est pas Snady, le point d'interrogation ? '''Manu''' : Mais non ! '''Reego''' : Ah pardon, excusez-moi. '''Phildar''' : T'es vraiment une cave, Reego. '''Gérard''' : Alors, les enfants souffrent-ils de ce changement d'heure ? '''Boudin noir''' : C'est dégueulasse, il ne faut pas laisser les enfants souffrir, c'est boudin, là. '''Gérard''' : Oh, vous donnez vos noms, s'il vous plaît. '''Boudin''' : Ouais, je dis, il ne faut pas laisser les enfants souffrir. C'est dégueulasse ce que fait le gouvernement avec le décalage. Les enfants, ils souffrent, ce n'est pas bien. '''Gérard''' : Non, mais attends, ce n'est pas le gouvernement qui a décidé de changer d'heure. '''Boudin''' : C'est qui, le décalage horaire, alors, d'après toi. '''Couscous''' : Bon, ben, c'est Couscous. Moi, je crois aussi que les enfants, ils souffrent trop. Et moi, je suis d'accord avec toi, Gérard, que tu as beaucoup souffert lorsqu'on t'a mis dans la machine à laver. Ils t'ont mis en essorage, toi. '''Gérard''' : Couscous ? Ça se voit qu'il y a longtemps qu'on ne t'a pas eu, parce que pour l'instant, tu es en train de déconner. Ouais, mais heureusement que tu es là pour mettre un peu du piment, mais... '''Couscous''' : C'est pas du piment, c'est de la harissa. '''Gérard''' : Ouais, mais Couscous ? '''Couscous''' : Oui, mon cousin Gérard. '''Gérard''' : Eh, calme-toi, on reprend là gentiment, mais déconne pas trop. On va demander à... Donc, pour toi, Couscous, les enfants, ils souffrent ou pas, toi ? '''Couscous''' : Couscous, ils souffrent un maximum. Ouais, c'est comme si tu mangeais de la harissa. '''Moustique''' : Ouais, bah je sais pas, moi je me souviens pas quand j'étais enfant, si je souffrais, donc... Les autres, je sais pas, ça c'est leur problème. Moi, je me souviens pas. Parce que quand j'étais petite, on changeait déjà d'horaire, et je me souviens pas si je souffrais. '''Gérard''' : Non, mais attends. T'habites où, toi ? '''Moustique''' : Euh, j'habite Poitiers. '''Gérard''' : T'habites Poitiers ? T'as quel âge, sans indiscrétion ? '''Moustique''' : 21. '''Gérard''' : Euh, 21, et... Euh, t'as jamais souffert du décalage d'horaire depuis le temps qu'on en parle ? '''Moustique''' : Bah, je m'en souviens pas, hein, quand j'étais petite, quand j'étais bébé, je sais pas si j'en souffrais, hein. '''Manu''' : De toute façon, c'est tous les 22 ans, donc elle peut pas s'en souffrir. '''Gérard''' : Non, c'est pas tous les 22 ans, c'est tous les ans qu'on change d'heure, hein. '''Manu''' : Ah bon ? Ouais, mais avec le décalage, ça revient à 22 ans pour la Grèce. '''Gérard''' : Non, non, attends, elle habite pas en Grèce, alors arrête tes conneries, toi. Bon, Boudin Noir ? '''Boudin''' : T'as déjà répondu tout à l'heure, faut pas laisser les enfants souffrir, c'est pas bien. Tu veux traumatiser les futures générations ? '''Petit sucre''' : Ouais, bah moi, je dis, je comprends pas du tout pourquoi on parle des enfants, euh... Je vois pas trop ce que ça a à faire là-dedans, hein. Faut les laisser tranquilles, les enfants. Faut vraiment que tu parles des enfants, quoi, parce que pour eux, c'est très dur de supporter ça. Et voilà, quoi, tu vois, en ce moment, là, s'il y en a qui nous écoutent, et bah, on est en train de leur rappeler des mauvais souvenirs. '''Boudin''' : Voilà, on est avec vous, les enfants, on est avec vous. '''Petit sucre''' : On n'est pas mercredi, c'est pas le jour des enfants, alors... '''Boudin''' : Je veux dire, comme disait la Bardot, il faut sauver les bébés-enfants, hein. '''Petit sucre''' : Ah, non, mais tu vois, je trouve vraiment que c'est trop facile, quoi, de parler des enfants comme ça, à la radio, hein. '''Gérard''' : Alors, moi, je vais te répondre, petit sucre. C'est pas parce qu'on parle des enfants, c'est qu'il y a des nouveaux-nés, ils souffrent, quand même, pour prendre leur biberon. Parce qu'avec le décalage horaire, on ne sait plus à quelle heure leur donner. On est bien d'accord ? ''[applaudissements et ovation par Manu et Phildar]''. Donc, on parle pas d'autres enfants, on parle de ceux qui viennent de naître pour leur donner leur biberon. '''Petit sucre''' : Ouais, bah, tu sais, ceux qui viennent de naître, c'est dur, la vie avec eux, tout ce qu'ils voyaient à la télé, tout, l'affaire Clinton, le décalage horaire... '''Gérard''' : Non, mais attends, attends, attends, je vois pas le rapport là-dessus, d'accord ? '''Petit sucre''' : Bah, eux, ils voient ça dès qu'ils sont tout petits. Non, non, mais attends, ils comprennent rien, quand ils sont... '''Gérard''' : Tiens, tiens, tiens, tu les prends pour des cons. '''Petit sucre''' : Ils sont pas cons, ils comprennent. '''Gérard''' : Non, mais ils sont moins cons que toi. D'accord ? Loundé ? '''Loudné''' : Bah, moi, je pense que, oui, les jeunes enfants souffrent, parce que, mettons, un enfant qui, mettons, va faire sa crotte à 6h, lorsqu'il change d'heure, il la fait dans son lit. '''Gérard''' : D'accord, je vois pas le rapport. Reego, t'avais une question IRC ? '''Reego''' : Oui, c'est Coyote Bip qui te demande si c'est pas trop dur à gérer le décalage horaire quand on sait pas compter. '''Gérard''' : Mais ça, je vois pas le rapport. Y'a pas besoin de savoir compter pour le décalage horaire. Donc, euh... Ouais, bah, il nous reste encore 10 minutes, donc, euh... '''Petit sucre''' : Et moi, j'ai une question, Gérard. Toi, t'as pas peur d'arriver une heure plus tôt à la Loco avec le décalage horaire ? '''Gérard''' : Alors, moi, je vais te dire une chose, que à la Loco, j'y vais plus. D'accord ? '''Max''' : Quand est-ce que tu reviens, d'ailleurs ? '''Gérard''' : Non, non, non, non ! Non, non, non, mais attends ! Moi, je vais répondre... Attendez, s'il vous plaît ! Parce que vos histoires de conneries, les chiottes de la loco et tout ça, maintenant, vous allez arrêter de me casser les couilles avec ça ! Parce que je commence à en avoir ras-le-bol ! Et celui qui s'amuse à envoyer des conneries chez moi, t'arrêtes encore ! Et maintenant, je vais demander à Phildar et à Manu, qui c'est qui a donné le numéro de portable ? '''Manu''' : Mais c'est pas nous, Gérard ! On va pas revenir là-dessus, on va reprendre le débat, c'est pas nous, quoi ! '''Gérard''' : Non, non, non, mais moi, je vais régler mon histoire, maintenant ! Non, non, mais juste avant la huitième, maintenant, je veux savoir qui c'est qui a été balancer... Qui c'est qui nous a mis un papier dans la boîte aux lettres en nous donnant un numéro ? '''Manu''' : Bah, j'en sais rien, moi ! '''Reego''' : C'est pas le thème du débat ! '''Gérard''' : Non, non, mais je préfère en parler quand même entre deux ! '''Point''' : Non, non, mais t'en parleras après, c'est pas grave ! Moi, j'ai pas répondu à la question, hein ! Donc, les bébés, oui, ils en souffrent, hein, parce que dès que tu leur donnes le biberon, déjà, qu'ils veulent pas le prendre, déjà, ils ont pas envie de le prendre, ils le prennent quand ils veulent, mais je pense qu'ils en souffrent beaucoup, hein, du décalage horaire, quand même, hein ! '''Gérard''', ''[tourné vers Reego, déconcentré]'' : Ouais, d'accord ! C'est bien ! Ouais, non, mais... Non, parce qu'il y a Reego qui voulait me dire quelque chose, euh... Donc, la huitième, le soleil est-il responsable du décalage horaire ? Moustique ? '''Moustique''' : Bah, bonne question, là, tu vois, j'ai réfléchi, euh... Je pense que ça vient plutôt de la Lune et avec les marées. '''Couscous''' : Moi, je suis d'accord avec toi, Gérard, parce que lorsque tu es resté trop longtemps au soleil, je crois que ton cerveau a fondu, et puis il y a eu un décalage horaire... '''Gérard''' : Non, mais il n'y a pas que le savon qui fond, il y a pas mal de trucs, hein ! '''Couscous''' : Mais toi, en tant qu'ex-enfant, tu as souffert ? '''Gérard''' : Euh, oui ! '''Couscous''' : Tu as beaucoup souffert, je crois, hein ! '''Gérard''' : Ouais ! '''Couscous''' : Tu peux nous en parler un petit peu ? '''Gérard''' : Non, non, mais ça, ça, c'est un truc que j'ai souffert, que je dirais pas sur l'antenne, parce que ça regarde personne ! '''Phildar''' : T'as souffert du décalage horaire, Gérard ? '''Gérard''' : Non, mais attends ! Parce que si tu veux, si tu veux, si tu veux, on arrête là, sur la huitième... '''Phildar''' : Non, mais je te pose la question ! '''Gérard''' : Non, mais attends ! Non, mais attends ! Attends, attends, attends ! Attends, Phildar ! Phildar, moi, si tu veux, on arrête à la huitième, moi, je vais parler de toute ma vie ! '''Phildar''' : Ah non, bah non ! '''Boudin''' : Non, non, franchement, on s'en fout ! '''Gérard''' : Parce que sinon, moi, le prochain débat, on fait pourquoi l'enfance abandonnée.<ref name="explic3"></ref> Ça, si tu veux, là... '''Phildar''' : On parlait du décalage horaire sur les enfants, c'est pour ça ! '''Gérard''' : Non, non, mais attends ! Mais dans ces cas-là, moi, je veux bien ! Mais moi, la semaine prochaine, on fait un débat sur l'enfance abandonnée et là, tu vas voir qu'on va avoir personne au standard ! Parce que ça, c'est un truc que je ne ferais pas ! '''Phildar''' : Ah oui, bah oui ! Non, mais t'as raison ! ''[bruit de rires d'enfants]''. '''Gérard''' : Parce que... Attends, qui c'est qui se marre comme un perdu, là ? Ouais, bah, moi, je vais vous dire une chose ! Alors, avant de dire des conneries, de se marrer, essayez de comprendre dans votre tête ! Non, non, mais essayez de comprendre ! '''Max''' : Mais toi, t'as envie de nous casser le moral, là ? Non, mais c'est toi qui a inventé, reviens sur le débat ! '''Gérard''' : Alors Phildar, tu te calmes, ok ? Maintenant, t'éteins ton micro, je veux plus t'entendre ! '''Petit sucre''' : Ouais, t'es pas sur Europe 1 là, c'est bon, quoi !<ref name="hist3"></ref> '''Boudin''' : Ouais, Gégé ! Gégé, c'est Boudin Noir ! Ouais, moi, je voulais dire, je comprends tout à fait, je sais que t'as été décalé, et je sais, en fait, que t'es retardé, quoi, c'est ça ? '''Gérard''' : Non, attends, je vois pas du tout ce que tu... '''Boudin''' : Attends, toi, t'es en avance, toi, c'est clair, t'es pas en avance, c'est clair ! Donc, bah, si t'es pas en avance, t'es retardé, quoi, je vois que ça ! Gérard''' ''' : Ouais, bah, attends, Boudin Noir ! Pour l'instant, je crois que t'es à côté de la plaque ! '''Boudin''' : Ah, bah, non, je suis en plein dedans, là ! '''Gérard''' : Ouais, bah, je pense que tu ferais mieux d'écouter ce qu'on dit ! '''Couscous''' : Et pourquoi on n'appelle pas Point d'interrogation Boudin ? '''Gérard''' : Euh, non, parce que le point d'interrogation, c'est son nom ! Euh, Petit Sucre ! Donc, pour toi ? '''Petit sucre''' : Ouais, ouais, ouais, bah, pour moi, non, je pense pas que c'est la faute du soleil, en fait, ça, c'est l'embrouille, quoi, ça, en fait, on nous ment. Pour moi, c'est... Parce que regarde, avant, ça existait pas, quoi, avant, Gérard, le décalage horaire, il y a, par exemple, 500 ans de ça. On parlait pas de ça ! L'horaire qu'il y avait aux Etats-Unis, tout le monde avait le même horaire ! Et tout ça, en fait, on parle des horaires pour pas parler d'autre chose, tu comprends ? Tu vois ce que je veux dire, tu comprends, toi ? '''Gérard''' : Ouais, mais attends, c'est pas nous qui avons décidé du décalage horaire ! '''Petit sucre''' : Bien sûr que si, parce qu'avant, il y en avait pas, avant, on en parlait même pas ! '''Gérard''' : Non, Petit Sucre, moi je vais te dire une chose, c'est pas nous qui avons, c'est pas nous, des gens comme tout le monde, c'est pas nous qui avons décidé ça, de changer les horaires. C'est le gouvernement ! Le gouvernement a décidé que maintenant, on changerait d'heure tous les ans, donc normalement, on devrait finir, ça devrait être la dernière année, et apparemment, on est toujours sur le même point. Tout le temps, on nous dit, oui, c'est la dernière année, c'est la dernière année, et en fin de compte, on s'aperçoit qu'on recommence, et ça va repartir l'année prochaine, au mois de mars, on va revenir en heure d'été, donc au lieu d'avancer nos montres, au lieu de les reculer, on va les avancer, au mois d'octobre ou au mois de septembre, septembre-octobre, on va encore reculer nos montres, on va plus savoir... '''Manu''' : Et comment ça se fait, Gérard, justement, qu'ils ont décidé que c'est la dernière année, pourquoi ? '''Gérard''' : De toute manière, c'est vis-à-vis du gouvernement, avec toutes les villes européennes, la Belgique a décidé qu'on arrêtait, l'Allemagne a dit on continue, donc ça a été voté à l'unanimité, donc pour qu'on continue. Mais moi, je trouve que pour moi, c'est de la merde de changer sans arrêt, parce qu'en fin de compte, qui c'est qui est perturbé ? C'est les petits bébés, c'est tout le monde, parce que les biberons sont décalés et tout ça, et eux, dans leur tête, ils ne peuvent pas le voir. '''Manu''' : Et donc, en fait, l'année prochaine, il sera la même heure à New York qu'en France ? '''Gérard''' : Mais non, je ne vois pas... '''Manu''' : S'il n'y a plus de décalage horaire, il sera la même heure partout ? '''Gérard''' : Mais si, mais non, mais de toute manière, le décalage horaire, on l'aura tout le temps. On l'aura tout le temps. '''Couscous''' : Non, mais Gérard, écoute, c'est Couscous. Moi, je te dis la chose suivante. La semaine dernière, je t'entends parler à la radio le matin, et maintenant, je t'entends parler le soir. '''Petit sucre''' : Et on a changé d'heure. Même à Fun. '''Gérard''' : Là, moi, je vais vous répondre. De toute manière, ce n'est même pas à moi de vous répondre. Non, non, ce n'est pas un décalage horaire. C'est pas un décalage horaire, Couscous. Non, mais le matin, c'est pas moi qui avais décidé, c'est mon chef. Maintenant, si le chef, il a décidé de reprendre la nuit, c'est lui qui décide. C'est personne d'autre. '''Phildar''' : Non, mais là, c'est-à-dire qu'on est en heure d'hiver, c'est tout. '''Gérard''' : Non, mais attends, mais dans ce cas-là, je ne vois pas ce que tu vas dire, toi, parce que tout à l'heure, je vais t'en coller une, tu vas comprendre le décalage. '''Manu''' : Oh, il n'a rien dit, il n'a rien dit, Gérard. '''Phildar''' : Bon, on bosse en heure d'hiver. Allez, Gérard. '''Reego''' : Bon, pour revenir au débat sur IRC, Gérard, on me demande si le décalage horaire est un pur tube. '''Manu''' : Non, non, à mon avis, c'est juste un tube. '''Petit sucre''' : Hé, Gérard, Gérard, j'ai une question, là, c'est petit sucre. Bon, ben, laisse-moi parler, je voulais savoir, avec l'Europe, tout ça, est-ce qu'on va avoir tous les mêmes horaires, les pays, d'après toi ? '''Gérard''' : Ben non, de toute manière, tout le monde... '''Petit sucre''' : Eh ben si, il n'y a plus de décalage, on a tous les mêmes horaires. Quand c'est midi à Paris, c'est midi à Londres, c'est... '''Gérard''' : Mais non, mais non, mais non, mais non. T'as qu'à trouver un bloc avec des décalages horaires, et tu verras que ce ne sera pas du tout la même heure. Non, non, essayez, essayez, stop, stop, stop, petit sucre. '''Point''' : Je peux te poser une question ? Donc, moi, je voulais te poser une question : est-ce que tu crois qu'à l'époque de Jésus-Christ, le décalage horaire existait ? '''Gérard''' : Bouarf là, tu me poses une colle, j'en sais rien, donc je te dis M-E-R-D-E. '''Manu''' : Oh, carrément ? '''Point''' : Oh, ben, merci, merci. '''Gérard''' : Voilà. Donc, ben, je pense qu'on va faire un... '''Reego''' : On va faire un tarot ? '''Max''' : Non, mais il faut arrêter vers moins 5, donc on a encore 10 minutes, donc tu n'as plus de questions, là ? '''Gérard''' : Ben, si, mais moi, je voulais faire un petit break, là. '''Max''' : Une petite dernière question ? Ben, non, c'est fini, on va faire une question, puis après, on va arrêter, à la rigueur. '''Gérard''' : Ben, voilà, comme je ne sais plus qui c'est qui avait posé de planète, on va y aller. Sur notre planète, existe-t-il un décalage horaire ? Donc, on va demander à Moustique. '''Moustique''' : Ouais, alors, il paraît que sur Uranus, ce n'est pas 24 heures, c'est 75, donc c'est tout le bordel, parce que c'est 74 l'hiver, enfin, bon, ils n'arrivent pas à s'en sortir, les pauvres. Et puis, sur Mars, c'est à peu près comme sur Terre, parce que c'est la même grosseur. En fait, ça dépend de la grosseur de la planète. Ça dépend si elle tourne plus ou moins vite, et puis, ben, combien il y a de fuseaux sur la planète. '''Couscous''' : Moi, j'ai entendu dire que les gens qui ont qu'une couille, ils ont souffert d'un décalage horaire. C'est vrai que toi, tu n'as qu'une couille, je crois, non ? Et l'autre, siliconée ? '''Gérard''' : Non, mais je suis en train de chercher qui s'amuse à faire des conneries. '''Point''' : J'ai pas compris la question. '''Gérard''' : Sur une autre planète, existe-t-il un décalage horaire ? '''Petit sucre''' : Elle va rien comprendre, déjà qu'elle capte rien sur notre planète, alors ailleurs... Ouais, ben, moi, je vais te dire, comme je disais tout à l'heure, euh, c'est sûr, euh... De toute façon, il faudrait se mettre d'accord avec les décalages horaires. Parce que si c'est un jour, c'est un jour, il y a des extraterrestres qui arrivent, que eux, ont un horaire qui n'est pas par rapport à nous, qui viennent en Europe... En Europe, que nous, on est tous d'accord, et que finalement, après, ils aillent aux Etats-Unis, c'est encore décalé, et finalement, après, ils atterrissent en Russie, euh, on va se planter, on sera... on pourra jamais tous se voir en même temps, tu comprends ce que je veux dire ? Donc, il faut trouver un système pour que ce soit un jour de partout pareil. Tu vois ? '''Boudin noir''' : Ouais, tout à l'heure, il y avait, je crois que c'était Moustique qui parlait des planètes et de Uranus, ben, moi, je pense que dans l'espace, si on tombe sur le trou noir de ton anus, et ben, c'est clair, il y a un décalage. '''Gérard''' : Et sur ta connerie ? Eh je pense que ta connerie, tu ferais mieux d'aller voir une nana, euh... une bonne pipeuse, et ça... '''Petit sucre''' : Vas voir le point d'interrogation, elle est pas trop loin. '''Gérard''' : Ouais, attends, euh, tu... Boudin noir, tu restes calme avec le point d'interrogation, d'accord ? '''Boudin noir''' : Oui, ok, excuse-moi, le facocher. '''Gérard''' : Alors, Boudin noir, tu dégages pour tout le temps. Hop, Boudin noir, tout le temps. '''Petit sucre''' : Va te faire sucer par le point d'interrogation, allez, hop. '''Gérard''' : Va le faire sauter, toi, abruti. Aller hop, terminé pour lui. Lui, c'est même pas la peine que je lui demande de... '''Max''' : C'est mignon, facocher, hein ? '''Reego''' : C'est... C'est beau, en plus, un facocher. '''Loudné''' : Bah, moi, personnellement, j'arrive pas à y aller sur les autres planètes, donc je sais pas comment ça se passe. '''Point ''' : J'ai pas répondu, hein. '''Loudné''' : Toi, le travelo, ferme ta gueule. '''Point''' : Non, mais je suis pas un travelo, hein. '''Gérard''' : Alors, toi, petit sucre... '''Phildar''' : Non, c'est pas un petit sucre. '''Gérard''' : C'est qui ? '''Phildar''' : Je sais pas, j'ai pas le droit de parler. '''Gérard''' : Ouais, alors, tu me dégages. Loup de nez. '''Manu''', ''[soufflant par le nez comme pour se moucher]'' : Attends, attends, je l'enlève. Vas-y, c'est bon. '''Gérard''' : Non, non, tu me les dégages, ces deux-là. Vite fait. Parce que... la fin, c'est moi qui vais la faire. Donc, vas-y, point d'interrogation. '''Point''' : Bah, je pense que, déjà, sur les autres planètes, je pense qu'il y peut y avoir un décalage horaire mais... '''Petit sucre''' : Mais tu penses pas toi, tu parles, c'est tout ce que tu fais. '''Gérard''', ''[hurle]'' : Ah, tu la fermes, ta gueule, toi ! '''Point''' : Mais pour ça, faudrait y aller, dans les autres planètes, pour savoir comment ça se passe. '''Petit sucre''' : Ouais, t'as raison, tu devrais y aller. Putain ! '''Point''' : Bah, t'as qu'à y aller, toi, si t'es pas content. '''Petit sucre''' : Et reviens pas, surtout, hein. '''Point''' : Oh, bah, toi non plus, tu reviens pas. '''Gérard''' : Hé, connard ! Hé, le connard ! Attends, tu me retires moustique. Tu me mets moustique en R. Tu me mets Couscous en R. Tu me mets point d'interrogation en R. Et tu me laisses, euh... Petit sucre et loup de nez. Et boudin. Hé, boudin noir ! Hé, connard ! Alors, connard, ça t'amuse, d'insulter point d'interrogation ? '''Boudin noir''' : Mais c'est pas moi ! '''Gérard''' : Non, c'est pas toi, connard ! Non ! Non, c'est pas toi. Tu te foudras pas de ma gueule ? ''[Manu fait le moustique avec sa voix]''. '''Boudin''' : Ah, y a une mouche. '''Gérard''' : Ouais, y a une mouche, c'est ta connerie. '''Boudin''' : Bah, le boudin noir, ça attire les mouches. '''Gérard''' : Ouais, bah, le boudin noir, c'est de la merde. Bon, allez, va te coucher, ça vaudra mieux. Donc, bah, on va faire la conclusion du débat. Alors, celui qui s'amuse à rôter... AHein Max ! ''[rire]'' Oh, attends, devant mes yeux ! Grillé ! Devant mes yeux ! '''Max''' : Regarde, regarde, écoute, regarde ! ''[bruit de rôt dans un micro, mais ne venant pas de Max]''. '''Max''' : Oh, c'était Manu ! '''Gérard''' : Attends, c'est l'autre abruti, là-bas, en face. '''Manu''' : Merde, ça part tout seul, des fois. '''Gérard''' : Bon, allez, conclusion du débat. Moustique. '''Moustique''' : Ouais. ''[bruit de moustique par une voix, Manu dément, mais imite le pet avec sa bouche]''. '''Gérard''' : Bon, allez ! Non, allez, on y va. Conclusion, conclusion. '''Max''' : C'était bien comme débat, donc ça serait dommage que ça soit gâché. '''Moustique''' : Voilà, c'était bien comme débat, et puis ce serait dommage que ça soit gâché par une mauvaise conclusion que j'aimerais te donner, mais que je ne te donnerais pas. '''Max''' : Et Moustique, quand tu veux, tu nous envoies une photo de toi. '''Moustique''' : Pas de problème, Max. '''Couscous''' : Alors, moi, je pense que le débat, on devrait faire ça. ''[il tire la chasse d'eau]''. '''Gérard''' : Ouais, ben, non, mais couscous, ta conclusion sur le débat. '''Couscous''' : Bah, écoute, moi, je trouve que le... Je trouve que le débat a été super chiant, comme d'habitude, hein. Ouais, c'est tout, quoi. Et Gérard, n'oublie pas que t'es mon cousin, hein. Salut, mon cousin Gérard. '''Gérard''' : Ok, je te remercie. Point d'interrogation ? '''Point''' : Ben, réglez vos montres à l'heure, c'est tout. '''Boudin''' : Ouais, ben, écoute, je suis toujours là. Je suis désolé que tu sois énervé sur moi. Sandy, je l'aime bien, en fait. '''Gérard''' : Non, mais moi, je te demande la conclusion du débat.  ?'''Boudin''' : Ben, ma conclusion, c'est Sandy, est-ce que tu veux m'épouser. '''Point''' : Pas du tout, non. '''Petit sucre''' : Ouais, ouais, ben, écoute, moi, je te souhaite bonne chance avec le décalage horaire, que tu restes pas à la porte de la Loco tous les vendredis. Et voilà, quoi. Puis, j'étais très content de t'avoir écouté, ça faisait un petit moment. Et débat, c'est bien sympa, quoi, t'es pas trop énervé. Pour une première salle, t'as bien géré tout ça. '''Max''' : Ben, heureusement qu'il est pas trop énervé, si c'est que ça, qu'est-ce que ça va être en 15 jours. '''Petit ucre''' : Et, euh, donc, ça va, puis je te souhaite de bien t'amuser avec mon interrogation. '''Gérard''' : Ben, point d'interrogation, pour l'instant, on s'entend super bien, donc, y'a pas de problème là-dessus. '''Petit sucre''' : Ben, surtout, tu la gardes, tu la refiles pas. ''' ''' : Ben, non, mais je vais pas te la refiler. '''Manu''' : C'est comme une maladie, personne n'en veut, hein. '''Gérard''' : Ben, t'inquiète pas, à la Loco, je suis pas prêt d'y retourner pour l'instant. '''Max''' : Oh, tu viendras quand même, là, non ? '''Gérard''' : Non, non, parce que, vu ce que j'ai reçu encore... '''Max''' : Ouais, mais pour moi, t'es dégueulasse. Pour mon anniversaire, au moins. '''Gérard''' : Non, non, mais attends, on va demander à Loudné sa conclusion. '''Loudné''' : Ben, moi, je dis que, par rapport à ce qui se passe en Amérique avec Bill Kinton, euh, moi, je pense que il faudrait faire gaffe dans les locaux de la radio, parce que, point d'interrogation pourra peut-être sucer le chef. '''Gérard''' : Non, mais attends, hé ! Hé, Loudné, je te demande le thème du débat. Je te demande la conclusion sur le décalage horaire. '''Max''' : C'était la clnclusion, il l'a faite. Oui, trop tard pour lui, allez, hop, suivant. '''Gérard''' : Donc, ben, il n'y a plus que moi à faire la conclusion, donc, moi, je vais te répondre avant à ta question, pourquoi on ne revient pas à la... '''Max''' : Ah non, je m'en fous de ça, je voulais savoir si tu voulais venir, je m'en fous, c'est pas intéressant, c'est le courrier, on verra ça, on s'en fout. Ta conclusion ? '''Gérard''' : Ma conclusion, c'est que, c'est sûr que, pour l'instant, on a fait le décalage horaire, mais je l'ai fait un peu tôt, parce que, normalement... '''Max''' : Non, ta conclusion sur le décalage horaire, t'en penses quoi ? '''Gérard''' : Moi, personnellement, je trouve que c'est de la... Merde. Parce que... Que tu changes, que tu recules d'une heure, ou que t'avances d'une heure, de toute manière, tu boufferas autant de courant. Là, je vois, on est parti... On est parti mardi, avec Titi, en Allemagne. '''Max''' : Titi, c'est un camionneur qui l'a pris hier et qui l'a emmené en Allemagne, Gérard et Sandy, et donc ? '''Gérard''' : Donc, on s'est pris de la... On pensait avoir du soleil, et en fin de compte, on s'est pris de la flotte. On est revenu... '''Max''' : Je ne sais pas si on va arriver au rapport avec le décalage horaire, si ? '''Gérard''' : Non, mais... De toute manière, à la base, c'est que ça n'a pas été évident. '''Max''' : D'accord. Rien à voir avec le décalage horaire, ce qui n'est pas bien. '''Gérard''' : Non, mais le décalage horaire, pour moi, je trouve que... '''Max''' : D'accord. Les débats de la semaine prochaine ? '''Gérard''' : Les débats de la semaine prochaine... La pollution et cinéma. ''[ohlàlo de désespoir dans le studio]''. Non, mais attends, c'est pas toi qui commandes, d'accord ? '''Reego''' : Sur IRC, on me dit que c'est naze, le cinéma. '''Manu''' : Tu vois, tout le monde le dit. '''Gérard''' : C'est moi qui commande et c'est tout. '''Max''' : Voilà, exactement. Donc, ça sera un débat sur le cinéma et un débat sur la pollution. '''Gérard''' : Et pour les conseils, point d'interrogation, t'es toujours là ? '''Max''' : Non, non, c'est bon. C'est mardi, voilà. '''Gérard''' : Ah oui, mais on peut donner quand même... '''Max''' : On en parlera lundi, on en parlera demain ou lundi. '''Gérard''' : Ah non, on va en parler maintenant. '''Max''' : Non, mais les conseils, c'est pas toi, c'est les gens. C'est en fonction de leur demande à eux. On verra ce qu'ils voudront avoir comme conseils. Tu choisiras. On verra ça. '''Gérard''' : Vu si ça fait comme mardi dernier... '''Max''' : Ok, d'accord, ok, on en discute. Puisque tu parlais de la Loco, je vous rappelle que demain soir, à la Loco, il y aura Funky Data pour ceux qui aiment la house. C'est un live, c'est-à-dire qu'ils sont sur scène avec le matériel. C'est des grenoblois. Et qu'il y aura Jean-Marie K, DJ Sonic, qu'on va retrouver d'ailleurs Sonic dans un instant pour la conclusion de cette émission de ce soir. Et sinon, demain soir, il y a également le Marina, le club discothèque du côté de Port-Barcares. Alors, si vous voulez venir au Port-Barcares, au Marina, vous appelez maintenant le standard de Fun Radio, 0800 70 5000. Vous pouvez venir à la Loco également gratuitement vendredi soir, pareil, 0800 70 5000. Et si vous voulez empocher pour les 10 plus rapides des albums de Funky Data, pareil, 0800 70 5000. On vous retrouve tout à l'heure à partir de 22h. == Le débat sur la pollution == === Contexte === La saison est lancée, mais l'émission n'en finit pas de se chercher. En ce début de saison, l'équipe tente de faire parler Gérard sur des sujets sérieux, bien que détournés souvent vu sa difficulté à les comprendre, sans accrocs. Ces tentatives s'épuiseront rapidement dans l'ennui, ramenant l'équipe à se montrer plus proactive dans la mise en scène du débat et de son animateur. Pourtant, on est au cœur du surréalisme, où tout s'adjoint sans lien ni sens, reposant sur l'incompréension générale des sujets, d'une conversation, et la manipulation adroite du second degré par tout le monde. Sur la durée, tout le monde a conscience qu'il faudra alterner les provocations et les séquences purement surréalistes, mais on commence à voir la ligne que suivra ette émission. Elle vivra aussi un moment marquant. Au fil des appels téléphoniques, Manu a fini par tomber amoureux d'une personne prénommée Laura. Elle deviendra sa femme, on le verra plus tard. Pour partager la passion de la radio avec son nouveau copain, elle participera à cette émission et ce soir est sa première. Première d'une longue série, car elle animera toute l'année 1998-1999 au moins. Ce thème, lui, est d'actualité. La conscience écologique est naissante mais pas encore prégnante. Le passage sur le tabac en est une bonne démonstration. Il faut y noter que rien n'y est exagéré ni particulièrement surréaliste : ce qui est dit correspond à l'état d'esprit et aux débats des gens de l'époque sur la cigarette dans les lieux publics. Son interdiction en milieu fermé n'était pas vraiment appliquée et les débats allaient bon train entre les fumeurs et les autres. === Les personnages === * Gérard Cousin : Gérard * Phildar, Manu * Sandy Threadkell : Sandy * Igor : Reego * Franck Bargine : Max * Laura : Cactus * Mégane : Braguette * Arnet : Briquet, Greenpeace * Christian : Bounty * Coquelicot, Sucre d'orge (deux filles) * Moustache * Kelnumero : déjà passé lors du débat sur auto-moto, entre autres === Transcription === '''Gérard''' : Bonsoir à tous, 1h23... 0h23 pardon, on attaque avec 7 minutes d'avance, donc bonsoir Reego, donc Reego si t'as des réponses sur le thème du débat de ce soir, tu fais comme la semaine dernière, t'hésites pas. '''Reego''' : ok pas de problème. '''Gérard''' : Phildar... '''Phildar''' : salut Gérard ça va ? '''Gérard''' : Toi, pas comme la semaine dernière, ok ? Au débat Manu, au standard, donc pareil, s'il y a un problème, je te signale... '''Manu''' : Tu dis le nom de l'auditeur et je le dégage aussi sec. '''Gérard''' : Dt donc Olivier de la prod, qui est un peu plus loin derrière, qui viendra nous rejoindre tout à l'heure... qui viendra nous rejoindre pour le deuxième débat pour faire la réa, donc on va attaquer tout de suite avec Sucre d'orge... '''Phildar''' : J'ai déjà Bernard sur le Minitel du 75 qui dit qu'il t'aime : « Gérard je t'aime. ». J'aime tes débats, il veut dire. '''Gérard''' : non mais pour l'instant, on commence pas comme ça, on va déjà accueillir les gens, donc Sucre d'orge, bonsoir, 20 ans de Paris. Donc on peut écouter Fun Radio sur 101.9. Braguette, 22 ans de Clermont-Ferrand, on écoute Fun Radio sur 96.6. Coquelicot, 19 ans de Troyes, donc, on peut écouter Fun Radio sur 102.2 FM. '''Phildar''' : Ouais, c'est chez moi ! '''Gérard''' : Ça c'est du côté de chez Phildar. Christian de la Celle-Saint-Cloud, 56 ans. Pourquoi Bounty ? '''Phildar''' : Parce qu'il a voulu s'appeler Bounty, c'est drôle. '''Gérard''' : Non mais on aurait pu laisser Christian, c'est pas grave. donc 101.9. Moustache, 21 ans de Toulon, on peut écouter Fun Radio sur 93.1. Et briquet. '''Briquet''' : Bonsoir, j'allume le feu ce soir. '''Gérard''' : Alors, Tony et Arnette, vous allez commencer à vous calmer tous les deux. '''Phildar et Manu''' : non mais il n'y a pas de Tony et Arnette ce soir. '''Gérard''' : non mais non, ils ne vont pas commencer à me dire, on va vous mettre le feu, ok ? Beson. donc on peut... 95, donc on peut écouter Fun Radio sur 101.9. Non, 104.8, n'est-ce pas Manu ? ok ? alors, première question, donc, je pense que vous l'avez écoutée, on en a discuté juste avant la pause,. Donc, pensez-vous que la Seine est trop polluée ? '''Sucre d'orge''' : bah oui, elle brille. Il y a plein d'huile, toutes les couleurs, la Seine est de toutes les couleurs parce qu'elle est vraiment trop polluée, ça brille. '''Braguette''' : oui, mais dans un autre sens, c'est joli. '''Sucre d'orge''' : C'est joli, mais... '''Gérard''' : non, non, non, non, non, attendez, attendez, attendez, stop, stop, stop... Pensez-vous que la Seine est trop polluée, moi, je peux... Allez-y, répondez tous, donc, sucre d'orge ? '''SUcre''' : Moi, je dis que oui, bien sûr, elle est trop polluée, on peut pas se baigner. '''Gérard''' : Oh, bah, tu crois que tu vas te baigner dans la Seine toi ?, '''Sucre''' : Non, je te dis, elle est dégueulasse, elle est dégueulasse l'eau. '''Coquelicot''' : Extrêmement polluée. '''Braguette''' : Ouais, je trouve qu'elle est polluée, mais en même temps, c'est sympa, quoi, t'as des rats, t'as plein d'animaux, t'as des jolies couleurs, c'est vachement animé comme région. '''Moustache''' : Ouais, bah, moi, je dis, ouais, elle est polluée, la Seine, voilà. '''Briquet''' : Ouais, la Seine, c'est dégueulasse, il y a des gens qui balancent plein de trucs, alors qu'il y a à peu près, je sais pas. Il y a 80 ans, on pouvait se baigner dedans, quand même. Il y avait des gens qui allaient se baigner dans la Seine parce que c'était propre avant. '''Gérard''' : Alors, moi, je vais te dire une chose. Tu pourrais me dire en quelle année que la Seine a été trop polluée et qu'on pouvait se baigner dedans ? '''Briquet''' : Je crois que c'était en 1910, un truc comme ça. '''Gérard''' : Ouais, bah, je pense qu'à mon avis, je crois que tu te trompes vachement, parce que la Seine, elle est polluée, et de toute manière, tu ne peux pas te baigner dedans. Pourquoi ? Parce que moi, je vais te dire pourquoi. Je pense que tout le monde va être d'accord avec moi, j'espère. C'est que toutes les personnes qui viennent avec leurs péniches ont l'habitude de balancer des saloperies, des ordures et tout. Et moi, je peux te dire une chose, que là... j'ai des écluses où que j'habite, et faites-moi confiance que là, à chaque fois qu'ils ouvrent les écluses pour laisser passer les péniches, eh ben, faites-moi confiance que ça reste bloqué. Il n'y a aucun truc qui s'en va. '''Moustache''', ''[pendant que Manu applaudit]'' : Bien dit. '''Briquet''' : mais il y a une centaine d'années, les gens faisaient pas ça. '''Phildar''' : Ouais, mais il y a cent ans, ça n'existait pas, les péniches, Gérard. '''Gérard''' : Non, mais attends, de toute manière, les péniches, je ne sais pas. '''Manu''' : Il y a cent ans, je ne sais même pas si la Seine, elle existait. '''Gérard''' : Non, non, mais moi, je peux vous dire une chose, qu'à l'heure actuelle, de toute manière, on ne peut pas se baigner. Moi, j'ai vu une fois une personne, je ne sais pas comment elle a fait son compte, elle est tombée. Je ne sais pas si c'est le mec qui a dérivé ou autre, mais le mec, il s'est gouré, et tout le monde est tombé, il y en a une qui est tombée dans la Seine, et justement, l'écluse s'eest ouvrée. '''Max''' : Oui, mais c'est normal, c'est le mec, si c'était une ordure. '''Gérard''' : Non, mais c'était une nana. '''Max''' : C'était peut-être une ordure. '''Gérard''' : Non, non, mais on ne sait jamais. '''Manu''' : Donc, excuse-moi, moi, par contre, j'ai vu un mec tomber dans la Seine, eh ben, il est mort noyé, quoi. '''Gérard''' : Non, mais attends, toi... Toi avec tes conneries... '''Manu''' : Mais non, ce n'est pas une connerie, il est mort noyé. Est-ce que ça vient de la pollution ou pas ? '''Gérard''' : Non, mais ça, c'est... '''Briquet''' : Ça n'a pas de rapport avec le débat, de toute façon. '''Gérard''' : De toute manière, ce n'est même pas une des questions. '''Phildar''' : J'ai un petit message militel de Orem, qui a 23 ans, qui est dans le département 77, qui dit « La Seine, c'est dégueulasse, les poissons baissent dedans. » '''Gérard''' : Non, non, non, non, mais ça, je vais te dire une chose, les gens qui s'amusent à pêcher dans la Seine... les poissons, ils peuvent les... Ils peuvent les laver au vinaigre. ''[rires et applaudissements de Manu]'' Ah, mais si ! Je peux te dire que les poissons sont... La personne qui va... qui pêche dans la Seine peut laver ses poissons avec le vinaigre parce que... Non, mais même ! Le poisson, il sera immangeable et tout. '''Coquelicot''' : Parce qu'elle pue, la Seine ! '''Gérard''' : Ouais, mais elle pue, c'est de notre faute à nous ? '''Moustache''' : Il y a les égoûs de Paris en même temps. '''Gérard''' : Ouais, non, mais il faut dire une chose, c'est qu'il faut voir que dans la Seine, que dans la Seine, à l'heure actuelle, les gens balancent n'importe quoi. Même ceux qui sont en péniche, je pense qu'on doit en avoir qui nous écoutent des... '''Phildar''' : Des pénichiers, ouais. '''Gérard''' : Des bâteliers. On appelle ça des bâteliers. Donc, je pense qu'ils doivent nous écouter. S'ils nous écoutent, arrêtez de balancer n'importe quoi. Quand on voit des bouteilles de flotte, des bouteilles de coca, tout ça... ''[les auditeurs confirment par des cris « c'est horrible », « c'est dégueulasse »]''. Mais attendez, moi je... Reego, une question internet ? '''Reego''' : Sur l'IRC, il y a Shun qui me disait... Qu'est-ce que tu penses du fait que Jacques Chirac avait dit qu'il se baignerait dans la Seine ? Donc, moi, je peux vous dire une chose, c'est que... Là, c'est que ça va trop loin. Moi, je peux vous dire une chose, qu'il y a même les gens, ils s'amusent à nous balancer n'importe quoi, et après, ça reste coincé. Dès qu'ils ouvrent les écluses, ça reste coincé. Et je vois, c'est en 95 ou 96, la fois où on a eu une chaleur à crever, c'est que les points... les poissons, ils étaient morts, ils remontaient. Et là, ils ont fait appel donc aux... Non, non, aux responsables... '''Phildar''' : de la DDE ? des travaux ? '''Gérard''' : de la Seine pour nettoyer tout ça, parce que c'était impossibe. C'était impossibe de pouvoir continuer comme ça. Donc, deuxième question, faut-il... fumer, est-il un moyen de pollution ? Donc, on va demander à Briquet. '''Briquet''' : Ouais, alors, moi, je m'allume des cigarettes. Et non. En fait, non, ça ne pollue pas. C'est bon pour la santé, c'est ce que m'a dit mon médecin. '''Gérard''' : Ton médecin, tu me donneras son adresse, j'irai le voir. Moustache ? '''Moustache''' : Moi, je vais te dire que ça pollue, parce que t'as vu le nombre de gens qui fument. Moi, je dis que ça fait beaucoup de fumée, tout ça. '''Gérard''' : Non, mais attends, moustache. Moi, je vais te dire, fumer est-il un moyen de pollution ? '''Moustache''' : Ouais, bah ouais, ça pollue non seulement le corps, mais en plus, ça pollue les gratte-ciel. '''Gérard''' : Non, mais, de toute manière... Attendez, s'il vous plaît, derrière, là... Donc, moi, je vais répondre à moustache. Donc, pour toi, quand tu fumes, pour toi, ça... Tu veux dire que tu pollues tout le monde ? Moi, je vais te dire une chose. Moi, qui ai l'habitude de fumer, moi, je peux te dire une chose que... Bon, d'accord, Sandy, elle aime pas quand je fume, parce que si j'ouvre pas la fenêtre, elle peut pas supporter l'odeur de la cigarette. '''Moustache''' : Normal, bah ouais, si elle aime pas, c'est logique. '''Gérard''' : Bah oui, mais dans ces cas-là, quand elle est dans une voiture, admettons que tu conduises, que le chauffeur qui est à côté de toi, par exemple, le passager, ne fume pas, est-ce que tu vas continuer à fumer pour l'empester ? '''Moustache''' : Bah non, carrément pas, quoi. '''Gérard''' : Alors, attends, attends, moustache. Qui c'est qui dit oui ? '''Braguette''' : C'est Braguette. S'il est pas content, il prend sa voiture. Moi, je fume dans ma voiture. '''Gérard''' : Ouais, mais attends, Braguette, si, par exemple, le passager ne fume pas, qu'est-ce que tu fais ? '''Braguette''' : Je fume, moi, je suis dans ma voiture. '''Bounty''' : On va dans un autre endroit. '''Gérard''' : Donc, toi, tu l'as dans un autre endroit ou dans une autre salle. '''Gérard''' : Ouais, mais, par exemple, mais admettons, admettons, Bounty, Christian. Admettons que t'as pas d'endroit pour non-fumeurs. Tu vas où ? '''Bounty''' : Dans les WC. '''Gérard''' : Ouais, mais si... admettons, dans les WC, c'est interdit. '''Moustache''' : Bah, tu vas dehors. '''Gérard''' : Ah, ouais, mais dans ces cas-là, dehors, ok. Mais est-ce que tu pourras re-rentrer dans là où t'étais ? '''Phildar, Bounty et Braguette''' : Non, c'est interdit. '''Phildar''' : Non, parce que, regarde, si tu fumes, tu vois, parce que t'es dans un lieu interdit, donc tu vas fumer dehors, mais le problème, c'est qu'après, tu sens la fumée et que t'as encore de la fumée, donc si tu rentres... '''Gérard''' : Non, non, mais attends, pour l'instant, Phildar, c'est pas toi que je m'intéressais, c'était Christian. ''[il éteint le micro de Phildar]''. '''PHildar''' : Ah, pardon. '''Gérard''' : Donc, Christian, admettons que tu sortes pour fumer une cigarette, est-ce que tu pourras re-rentrer dans la boîte ? '''Braguette''' : Mais on était dans la voiture, là et tu nous parles de boîte. '''Gérard''' : Bah, oui, mais dans les boîtes de nuit, de toute manière, souvent... '''Braguette''' : Moi, j'y vais pas. '''Gérard''' : Toi, tu fumes pas ? '''Braguette''' : Bah, si, moi, je fume. '''Gérard''' : Bon, bah, donc, dans les boîtes de nuit, de toute manière, on a le droit de fumer. On est bien d'accord ? Donc, par contre, si t'as une personne qui est à côté de toi, qui supporte pas la cigarette et qui te dit, « est-ce que vous pouvez arrêter de fumer », qu'est-ce que vous faites ? '''Braguette''' : Bah, il sort. '''Gérard''' : Ah, ouais, mais si elle est dans une boîte de nuit, tu vas lui demander de sortir ? '''Braguette''' : Ah, bah, il fait ce qu'il veut. S'il supporte pas, il va plus loin. '''Gérard''' : Bah, il change de coin. '''Braguette''' : Exactement. '''Gérard''' : Ah, voilà, c'est ce que je voulais entendre dire. '''Moustache''' : Gégé, Gégé. Moustache. Moi, je dis, quand même, c'est celui qui fume qui doit se barrer, non pas celui qui fume pas et qui est dérangé. '''Braguette''' : Ah, non, non. '''Gérard''' : Ouais, non, mais attends, moustache, tu vas pas demander, par exemple, si toi, t'as pas envie de fumer, tu vas pas dire à la personne, si tu fumes pas, tu dégages. '''Moustache''' : Mais non, justement, c'est le contraire. La personne qui fume pas, normalement, elle doit rester à sa place. '''Gérard''' : Ouais, mais c'est la plus gênée qui s'en va, alors. Ouais, mais dans une boîte de nuit, tu vas pas dire, bon, bah, tu fumes pas, tu dégages. Moi, je fume et c'est tout, point final à la ligne. Mais moi, je vois pas le rapport. Je vois pas le rapport sur la question. Parce que, d'accord, je sais... '''Phildar''' : J'ai peut-être une solution, c'est qu'en fait, les personnes qui fument pas et donc qui sont avec des gens qui fument, en fait, ils sont privés parce qu'après, ils puent la fumée. '''Gérard''' : Ouais, mais ça, ça s'imprime sur les vêtements, ça, je suis d'accord avec... Qui c'est qui vient de... '''Phildar''' : Phildar, de Paris. '''Gérard''' : Non, mais attends. Attends, Phildar, on sait que c'est toi, de Paris. Donc, c'est Bounty ou... C'est Christian ou Moustache, là. '''Moustache''' : Ouais, c'est Moustache, c'est Moustache. '''Gérard''' : Non, mais je voudrais bien que les trois filles aussi réagissent un peu, là. Non, parce qu'on les entend pas assez, là. '''COquelicot''' : Oui, non, mais nous, on est là, on écoute, on est passionnées. On se dit que fumer, de toute façon, ça salit. Onsent dans les doigts, on sent dans les vêtements, on sent partout, donc on est grillés, hein. '''Braguette''' : C'est une bonne odeur qui pue bien, moi, je trouve. '''Gérard''' : Ouais, mais moi, dans ces cas-là... Oh, là, qui c'est qui a un téléphone pourri, là ? '''Sucre d'orge''' : Là, c'est Sucre d'Orge, là. Ouais, enfin, moi, je trouve que... je veux dire, tu sors dans la rue, les voitures, ça te dérange, tu vas pas dire aux gars... Enfin, si, tu vas pas dire au gars, vas-y, arrête de conduire, quoi. '''Gérard''' : Non, non, attends, Sucre d'Orge. Sucre d'Orge. Je vois pas le rapport avec la fumée de cigarette. '''Sucre d'orge''' : Ah, bah, si, c'est de la pollution, quoi, mais... '''Gérard''' : Non, mais, justement, justement, on va en... On va en parler, on va en parler des voitures. Hein ? On va en parler. Donc, pour l'instant, je parle de fumée. Par exemple, moi, je peux vous dire une chose, qu'il est là, il peut très bien réagir, il est planqué derrière moi, là-bas, il peut très bien prendre la place à Phildar, c'est que lui, quand il vient dans les studios et qu'on fume, ça le dérange. Et dans les soirées, il y a certaines personnes qui fument, mais est-ce que ça te dérange à toi, Max ? '''Max''', ''[faussement timidement]'' : Alors, d'abord, bonsoir. '''Phildar''' : T'appelles d'où ? '''Max''' : Donc, savoir si ça me dérange la cigarette. Dans des lieux comme les discothèques. Non, sauf si il y a une personne qui fume et qui va me mettre la fumée dans la gueule, quoi. J'ai remarqué ça dimanche en étant dans un lieu public qui était... le Parc des Princes et je voyais quand même des mecs qui fumaient le cigare. Eux, ils fument le cigare, donc c'est quand même un truc qui empeste. Mais eux, quand ils recrachent la fumée, à aucun moment, ils ne se la prennent pas dans la gueule. Mais par contre, ils l'envoient à la gueule de gens qui ne fument pas. Donc, le minimum, c'est au moins, quand tu fumes, c'est de voir si tu ne déranges pas des gens autour de toi. '''Gérard''' : Mais moi, par contre, il y a une personne... Je pense que... '''Max''', ''[en diva]'' : on pourrait me balancer deux, trois applaus, quand même... '''Gérard''', ''[applaudissant avec Phildar et Manu, mollement]'' : Bravo, chef. Mais moi, je peux répondre à la personne, je ne sais pas, c'est Sucre d'Orge ou Braguette ou Coquelicot qui a dit ça. Quand on envoie la fumée sur la personne d'un mec, ça veut dire qu'on l'aime. Mais moi, je peux vous dire une chose, c'est qu'à l'heure actuelle, j'ai deux paquets de cigarettes, voire trois. Et sur les trois, c'est marqué... ''[il sort un paquet de sa poche]'' '''Phildar''' : Tu fais un débat sur la santé ? '''Gérard''' : Nuit grave. Nuit gravement à la santé. '''Max''' : Mais nuit ou jour ? C'est nuit et jour ou c'est nuit gravement, dans le sens de la nuit ? '''Gérard''' : Non, c'est nuit gravement à la santé. '''Max''' : C'est juste la nuit. Donc, le jour, c'est pas dangereux ? '''Gérard''' : Fumer nuit, à votre entourage... '''Max''' : Pourquoi ils parlent de la nuit ? '''Gérard''' : C'est ce qui est marqué sur les paquets. '''Max''' : Pourquoi ils disent que c'est la nuit ? '''Gérard''' : Je sais pas. Je pense que ma nuit... '''Max''' : Je sais pas si on est vraiment dans le débat de la pollution. Je sais pas si on fait un débat sur le tabac et sur le cancer ou si on fait un débat... Je crois qu'on est un peu sortis du débat, mais c'est vrai qu'il faut y réfléchir. Pourquoi on dit nuit gravement ? Pourquoi c'est la nuit grave ? '''Gérard''' : Nuit gravement parce que ça esquinte... ça esquinte la santé. Ça, c'est un débat qu'on fera peut-être la semaine prochaine. ''[Manu applaudit]''. '''Phildar''' : Toi, t'as répondu, Gérard. T'as répondu à la question. Donc, on peut passer à la troisième. '''Gérard''' : Donc, un incident provoque-t-il une pollution ? '''Sucre d'orge''' : Un quoi ? '''Gérard''' : Un incident. '''Phildar''' : C'est-à-dire ? Tu peux expliquer ce que t'entends par incident ? Un accident de voiture, des trucs comme ça ? '''Gérard''' : Non, un incident. '''Braguette''' : Quel genre d'incident ? '''Gérard''' : Bon, même... un incendie... Ah, non ! Un incendie, oui. Pardon, pardon, pardon. Non, parce que... Non, c'est moi qui me suis trompé. C'est un incident provoque-t-il... '''Manu''' : Un incendie, Gérard. '''Gérard''' : Un incident, un incendie, pardon... Je vais y arriver. Un incendie provoque-t-il une pollution ? Donc, on va demander à... Sucre d'orge. '''Sucre d'orge' '' : Un incendie, accidelleement incendieux ? '''Géra''' : Non, mais un incend... Oh là, sucre d'orge, t'as un téléphone pourri ! Ah non, parce que là, j'ai un grésillement... C'est pas possibe. '''Manu''' : Ça vient pas d'eux, en fait. '''Sucre d'orge''' : En fait, je crois que c'est pas nous, c'est... C'est le standard de... C'est Phildar qui déconne, hein. '''Phildar''' : Non, c'est le standard de fun, on peut rien faire, Gégé. Parce qu'ils sont en train de refaire, derrière. Moi aussi, j'ai le même, hein. '''Manu''' : C'est pareil, partout. '''Phildar''' : Ou baisses un peu ton casque, alors. '''Sucre d'orge''' : Oui, ben, ça pollue, hein. T'as vu la fumée, quand il y a un incendie, dans le midi, là, avec les canadaires et tout, c'est de la folie. Ouais, ouais, ça pollue grave. '''Gérard''' : Ouais, mais... Non, mais attends. Je vois pas le rapport avec un incendie et... '''Sucre d'orge''' : Et un incident ? '''Gérard''' : Non, mais... Un incendie, plus les canadaires. Parce que qu'est-ce que le canadaire a à voir dans les incendies ? Le canadaire, il provoque pas une pollution. '''Sucre d'orge''' : Non, mais quand il y a un incendie, il y a un canadair. '''Briquet''' : Si, Gérard, le canadaire, il provoque la pollution, puisqu'il va chercher l'eau dans la mer et certains endroits, tu vois, la mer, elle est polluée. '''Sucre d'orge''' : Et quand le canadair, il s'ouvre, ça fait plein de fumée blanche sur le feu. '''Gérard''' : Non, mais ça, c'est... Ça, c'est l'eau. '''Sucre d'orge''' : Mais l'eau, elle peut être polluée. '''Manu''' : Gérard, le canadaire, là, il y a bien de l'essence dedans. Donc ça pollue, de toute façon. '''Gérard''' : Non, mais attends, Manu, je sais pas si t'as regardé le reportage sur les canadaires. Ils ont une trappe en dessous qu'ils prennent l'eau... '''Manu''' : Ouais, mais moi, justement, j'avais vu ce reportage, ils avaient pas de pastilles vertes sur le pare-brise, les canadaires. '''Gérard''' : Non, mais on s'en fout de la pastille verte.<ref name="hist4"></ref> '''Phildar''' : Non, mais Gérard, oui, ils prennent de l'eau pour éteindre le feu, mais pour décoller, pour voler, ils prennent bien de l'essence, ils volent pas à l'eau. '''Gérard''' : Non, non, non, non, là, je suis pas d'accord avec vous. Donc on va demander la Braguette. Par contre, t'essaies de voir avec sucre d'orge si elle peut pas changer de poste, parce que là... '''Manu''' : Essaie de changer de poste, va à la Caisse d'Épargne. '''Phildar''' : Non, non, non, t'es ailier droit, c'est ça ? Non, pilier. '''Sucre d'orge''' : Je passe en avant ? '''Gérard''' : Braguette ! ''[il réitère plusieurs fois mais Braguette ne répond pas, les échanges humoristiques sur le rugby se prolongeant]''. '''Phildar''' : Ouvre-la un peu. '''Braguette''' : Moi, je dis que, bah si, ça pollue, mais bon, c'est bien, quoi, parce qu'après, les forêts repoussent et c'est de la bonne pollution, quoi. '''Phildar''' : Non, mais tu parles. '''Gérard''' : Tu crois... Attends, attends, Braguette. Braguette. Tu crois que... Même en éteignant un incendie... Tu crois qu'après, ça va repousser ? '''Braguette''' : Bah, exactement, ça repousse. '''Gérard''' : Ah, oui ? Alors, ça met combien de temps pour repousser ? '''Braguette''' : Ça met 10-20 ans, mais c'est de la bonne pollution qui va te donner une bonne forêt. '''Gérard''' : Ah, oui ? Quand tu vois 120 000 hectares qui partent en fumée... Que les gens sont derrière, qui ont des habitations, qui ont l'habitude de voir de la verdure, et que maintenant, ils voient que simplement de... Des arbres qui sont partis en feu, tout ça, et tu crois que... '''Braguette''' : Mais ça, c'est le coup du sort, Gérard, ça, c'est le coup du sort. C'est des pauvres gens, c'est grave pour eux. Mais bon, avoue quand même qu'une forêt incendiée, c'est vachement beau à regarder. '''Gérard''' : Non, non, non, non, non, non, non, non, Braguette, non, braguette... '''Phildar''' : Ferme-la un peu. '''Gérard''' : Moi, je vais te dire une chose. Même derrière, là... Moustache et briquet, vous vous calmez, parce que... Je réponds à Braguette, d'accord ? Donc, moi, je peux te dire une chose, Braguette. Moi, cet été... J'ai regardé les infos, et quand tu vois ce qu'on a vu cette année, qui sont partis en fumée, fais-moi confiance que c'est toute la ville qui va payer pour... pour remettre tout ça en état. Et quand tu vois... Quand tu vois des arbres... Quand tu vois des arbres qui partent en fumée... C'est pas possibe. ''[applaudissements du studio]''. '''Braguette''' : Tu trouves pas ça vachement beau, un arbre en feu ? '''Gérard''' : Non. Moi, je vais te dire une chose, que je préfère regarder des arbres qui fleurissent et tout. ''[Manu applaudit]''. '''Braguette''' : J'adore voir les arbres en feu. Ben, c'est chacun ses... '''Gérard''' : Ouais, ben, dans ces cas-là, toi, du côté... Ah, c'est dommage. Tiens, en fait, braguette. Ça... Ça a rapport le thème du débat. À Clermont-Ferrand, est-ce qu'il y a des volcans ? '''Braguette''' : Oui, oui, il y a des volcans à Clermont-Ferrand. '''Gérard''' : D'accord. OK, je te remercie. '''Braguette''' : Je t'en prie, Gérard. '''Gérard''' : Non, non, mais c'était simplement pour savoir. Donc, on va demander à Coquelicot de répondre. '''Coquelicot''' : Ben oui, moi, je crois que ça pollue, mais je crois qu'on peut pas faire grand-chose, parce que c'est des choses qui arrivent naturellement et on peut pas arrêter ça, quoi. '''Sucre d'orge''' : Contre. Moi, je suis contre, c'est Sucre d'orge. '''Gérard''' : Oh là là, mais qui c'est qui a un téléphone pourri, là ? '''Manu''' : Ça vient pas du standard, Gérard. '''Gérard''' : Oh là là, c'est mauvais d'entendre un... '''Phildar''' : C'est vrai que c'est chiant, mais on peut rien faire. '''Bounty''' : Oui, ben, moi, je suis d'accord avec les autres. Il y a pas mal de fumée. Il y a des fumées de cheminée, exactement, aussi. '''Phildar''' : Ça pollue, ça, au fait, Gérard, les feux de cheminée ou pas ? '''Gérard''' : Non. Non, mais attends, ça dépend s'ils sont bien allumés dans l'appartement. '''Briquet''' : Hé, Gérard ? Ça pollue les feux de bois ou pas ? Est-ce que ça pollue les feux dans les forêts ? '''Gérard''' : Mais attends, on vient de... Hé ! Oh, Briquet, Briquet, Briquet, Briquet ! Tu vas aller voir Manu au standard, s'il te plaît. Non, non, mais attends ! Attends, tu vas aller... Tu vas être gentil, tu vas aller voir Manu au standard, parce que je viens de... J'ai répondu à la question à Braguette. '''Phildar''' : Tu ne suis pas à Briquet, hein. '''Briquet''' : Mais si, mais j'ai pas compris, en fait. '''Gérard''' : Non, non, mais tu... Ouais, mais tu n'as pas compris, ben, tu vas aller voir Manu, il va te faire comprendre au standard.Reego ? '''Reego''' : Oui, sur IRC, il y a Lagafou qui te demande si péter ça pollue. '''Gérard''' : Ça dépend si les fenêtres sont toutes fermées, ça... Même dans un lit, ça ne peut polluer. Ça, je peux dire oui. Briquet, s'il te plaît ? '''Manu''' : Il n'a rien dit, Gérard, ce n'est pas lui. '''Gérard''' : Non, non. Mais Briquet, tu le reprends au standard, il va comprendre. '''Phildar''' : Tu expliques la troisième question et tu le remets après. '''Gérard''' : Non, non, mais... Là, on finit la troisième et je pose la quatrième. Bounty ? Ah ben, toi, t'as répondu. Tu m'as parlé de... Je ne sais plus quoi, là. Ouais, fumée de cheminée. Ok, t'as répondu. Donc, moustache ? '''Moustache''' : Ouais, ben, alors, moi, je voudrais répondre à Coquelicot. Parce que Coquelicot, elle a dit... En fait, on ne pouvait rien faire contre les incendies. Eh ben, elle dit n'importe quoi. Parce que les incendies, il n'y en a pas que des naturels. Il y en a aussi qui sont provoqués par des gens. '''Gérard''' : Attendez, attendez, attendez. Moustache et Coquelicot. Moustache et Coquelicot, s'il vous plaît. Vous écoutez ? Là, d'accord, je suis d'accord avec vous. Il y a des incendies qui sont... Je sais, il y a des incendies qui sont provoqués pendant l'été. Mais ça, on ne peut pas savoir qui c'est qui les provoque. Mais oui, mais de toute manière, quand vous prenez une nationale ou autre, vous voyez que c'est marqué interdit de fumer. Donc, je ne comprends pas pourquoi il y a des gens qui s'amusent à fumer ou qui laissent leur mégot. '''Braguette''' : C'est des pétomanes, ça. '''Gérard''' : Ben oui, mais dans ces cas-là, pourquoi ? Pourquoi que les gens savent que c'est interdit de fumer... Pourquoi qu'ils laissent leur mégot allumé ? '''Braguette''' : Parce que c'est des pétomanes, ils le font exprès. Ça les fait jouir de mettre le feu. '''Phildar''' : Donc, on peut dire que les pétomanes, c'est pour des pollueurs. '''Gérard''' : Ben voilà. Donc, Briquet, il a quand même... '''Manu''' : Oui, Briquet a tout pigé, a tout compris. '''Briquet''' : Je me suis calmé, j'ai compris. C'est bon. '''Gérard''' : Alors, pour toi ? '''Briquet''' : En fait, vu que j'étais au standard avec Manu, je n'ai pas très bien compris ta question. '''Manu''', ''[coupant Gérard dans son mouvement d'impatience]'' : Mais c'est normal, je lui ai expliqué, Gérard. '''Briquet''' : Il m'expliquait de me calmer, tout ça, donc je n'ai pas pu entendre et mettre en feu. '''Gérard''' : Donc, un incendie provoque-t-il une pollution ? '''Briquet''' : Ben moi, je pense... '''Gérard''' : Non, mais vite, vite. '''Briquet''' : C'est bon, laisse-moi le temps de répondre. Je pense que oui. '''Phildar''' : C'est une bonne réponse. '''Gérard''' : Ouais, ben... '''Phildar''' : Quoi ? Et toi, Gérard, qu'est-ce que tu penses de ça ? '''Gérard''' : Moi, personnellement, je vais te dire une chose. Ce que je pense, c'est déjà qu'on devrait respecter tout ce qui nous est interdit quand on part en vacances. Et même à l'heure actuelle, c'est ce qu'on devrait respecter, les endroits qu'on n'a pas le droit de fumer. Moi, celui qui renifle comme un veau va se calmer. '''Phildar''' : Il doit prendre ses comprimés parce qu'il est malade. '''Gérard''' : S'il est malade, il va redégager au standard. Ça va aller vite pour moi. '''Phildar''' : Et donc ? '''Gérard''' : Dans ces cas-là, il faut mieux respecter la vie des gens. Il faut respecter la nature. Parce qu'en fin de compte, la nature, qui c'est qui la paye ? C'est nous. Qui c'est qui paye ? '''Phildar''' : C'est cher, en plus. '''Gérard''' : Oui, mais qui c'est qui paye derrière ? '''Phildar''' : C'est le contribuab. '''Gérard''' : Oui, mais on paye... On paye sur les impôts. On paye là-dessus pour redonner goût à la vie. On paye des impôts. On paye des impôts, donc c'est nous qui payons, en fin de compte. C'est pas parce qu'on achète une voiture. Si, par exemple, une voiture prend feu dans une forêt, la forêt va... Va prendre feu. Et en fin de compte, qui c'est qui est responsable ? C'est nous. Parce qu'après, il faut reconstruire tout ça. ''[applaudissements du studio]''. '''PHildar''' : Il faut reconstruire la voiture. '''Gérard''' : Donc, alors, la quatrième... '''Phildar''' : Et on va mettre un petit disque. '''Gérard''' : Et donc, alors, je pose la question. La télé est-elle un moyen de pollution ? et on va s'écouter Baba au Rome avec des petits... Des petits... '''Phildar''' : Petits loups de nez. Tu peux rappeler les numéros, Gérard, aussi. '''Gérard''' : 0803 08 5000 et 080070 5000 et toujours le 3615 code Fun radio et l'IRC... Reego s'il te plaît ? '''Reego''' : Oui je suis là, irc.funradio.fr. '''Phildar''' : Et il y a 25 connectés sur le Minitel quand même. '''Gérard''' : Oui mais s'il y a des réponses aux questions, je voudrais bien que tu me les donnes, Reego, comme la semaine dernière. Merci. ''[Musique]''. '''Gérard''' : Et voilà, vous nenez d'écouter Baba au rhum avec des petites... '''Phildar''' : Des petits loups de nez, voilà. '''Gérard''' : Donc vous pouvez toujours nous appeler au 0803 08 5000 et 0800 70 5000 et 3615 code Funradio, rubrique direct. Et bien sûr, l'Internet, où que Reego vous attend, vous pouvez réagir sur le débat, il n'y a pas de problème. Je vous répondrai en direct. Voilà. Donc, alors, quatrième question. La télé est-elle un moyen de pollution ? Donc, on va raccueillir sucre d'orge. Braguette. Coquelicot. Christian de la Celle-Saint-Cloud. Moustache. Briquet. Et... '''Phildar''' : Et donc, on commence avec qui, Gérard ? '''Gérard''' : Et on va commencer avec... On va commencer avec Sucre d'orge. '''Sucre d'orge''' : Oui. Eh bien, oui, t'as raison, Gégé. La télé, c'est un moyen de pollution énorme de l'esprit. Surtout, certaines chaînes. Les premières, là, tu vois. Et si tu les regardes... '''Gérard''' : Non, mais sans... Non, non, mais attends, attends. '''Sucre d'orge''' : Je ne dis pas de nom de chaîne. Je dis simplement celles qui commencent les numéros, là. Eh bien, si tu les regardes trop souvent, tu finis par devenir comme elles, quoi. '''Phildar''' : C'est pas mal, ce qu'elle dit. T'as compris, Gégé ? '''Gérard''' : Non. Braguette ? '''Braguette''' : Oui. Non, mais ce n'est pas un moyen de pollution, c'est un moyen de communication. On te communique des informations sur la pollution. '''Sucre d'orge''' : Elle parle avec sa télé, elle ? '''Gérard''' : Non, mais je pense qu'elle doit parler avec... Avec un gorille, elle, derrière. Donc, ça y est ? Ah, ben, c'est bien, Braguette. Coquelicot ? '''Coquelicot''' : Oui, moi, je crois que c'est un moyen de pollution. Mais enfin, ça dépend pour qui. Parce que, moi, je dis... Je ne sais pas, il y a des trucs qui sont intéressants quand même. Il ne faut pas tout rejeter dans la télé. '''Phildar''' : Est-ce que tu crois, Gérard, que la radio, c'est quelque chose qui pollue plus que la télé, Gérard ? '''Briquet''' : Oui, quand on écoute Gérard, oui. '''Phildar''', ''[alors que Gérard a la tête tournée vers la porte du studio, le regard ailleurs]'' : Gérard, on est là. Est-ce que tu crois que la radio, ça pollue plus que la télé ? C'est ce qu'on demande sur Minitel. '''Gérard''' : Non, je ne pense pas. Non, je pense que le Minitel, de toute manière, c'est... C'est un truc pour les gamins. S'ils ont envie de dépenser leur pognon là-dedans, ils font ce qu'ils veulent. '''Phildar''' : Ce n'est pas ça, la question. La question, c'est est-ce que la radio, ça pollue plus que la télé ? '''Gérard''' : Moi, c'est ma réponse. ''[applaudissements sarcastiques devant cette citation politique]''. Christian ? '''Bounty''' : Oui, moi, j'adore beaucoup le débat à la télé. Il y a pas mal de débats que j'écoute en deuxième et en première. '''Gérard''' : D'accord. Non, mais je ne vois pas le rapport avec la question, Christian. '''Phildar''' : C'est sa réponse. C'est un peu comme toi. '''Moustache''' : Ouais, ben, moi, je veux dire que la télé, c'est... Bon, en ce moment, il n'y a un peu que de la merde, quoi. S'il y avait des émissions un petit peu plus intellectuelles, tu vois, ça serait mieux. Voilà, c'est tout ce que j'ai à dire. '''Gérard''' : Non, mais attends, je ne vois pas... Ah, là... Là, Moustache ? Je pense que tu n'as pas très bien compris la question, mais ce n'est pas grave. '''Moustache''' : Si, si, j'ai bien compris. '''Gérard''' : Non, non, mais... '''Gérard''' : Non, non, je pense, à mon avis, que tu n'as pas compris la question. '''Moustache''' : Répète-la, moi, alors. '''Gérard''' : Non je la rémèterai pas. Briquet ? '''Briquet''' : Oui, alors, moi, avant de répondre à la question, je voudrais quand même te demander ton avis. Oui ou non, est-ce que ça pollue ? Toi, je voudrais que tu me répondes avant. '''Gérard''' : Non, mais moi, maintenant, tu vas répondre à la question, parce que ce n'est pas toi qui me poses les questions, c'est moi qui vous les pose. '''Briquet''' : J'aurais répondu par rapport à ta réponse, en fait. '''Gérard''' : Non, non, mais moi, maintenant, tu vas me répondre à la question. '''Phildar''' : Ben, aide-le. Aide-le un peu. Donne-lui ta réponse, déjà, comme ça, ça... '''Gérard''' : Non, non, mais attends, il va déjà répondre correctement. Après, je lui dirai. '''Phildar''' : Il ne peut pas. '''Briquet''' : Ouais, je ne peux pas si tu ne me donnes pas ta réponse avant. '''Gérard''' : Non, ben, alors, dans ces cas-là, n'attends pas ma réponse. Sur Internet ? '''Reego''' : Ouais, donc, sur l'IRC, il y a Fedji qui te demande si c'est la télé qui pollue ou si c'est les animateurs télé. '''Gérard''' : Là-dessus, il faut dire une chose, c'est qu'en ce moment, vu ce qu'on voit à la télé, je pense qu'on a du mal à savoir ce qu'on va regarder comme chaîne. '''Briquet''' : Ben ouais, mais alors, dans ce cas-là, toi aussi, tu pollues, puisque tu passes sur Fun TV. '''Gérard''' : Alors là, je vais te dire une chose, Briquet... Tu vois, tu vois, Briquet... C'est con, ce que tu viens de dire. Parce que là, maintenant, tu dégages. Je ne veux plus te revoir. Salut à toi, Briquet. Salut à toi, Briquet ! '''Sucre d'orge''' : Gérard ? En plus, il a pas tort parce que ça pollue moins quand ça passe par satellite que quand ça passe par courant à la télé. '''Moustache''' : Qu'est-ce qu'elle dit... '''Gérard''' : Qui c'est qui vient de dire ça ? Ouais, ben, Sucre d'orge. Fais gaffe parce que tu risques de faire comme Briquet si tu continues. '''Phildar''' : Non, mais c'est vrai. Non, Gérard, attends. '''Gérard''' : Ouais, non, mais il faut dire une chose. Il faut se dire une chose qu'à l'heure actuelle, pour voir des émissions de cons, des émissions qu'on ne sait même pas ce que ça veut dire... '''Phildar''' : Donne des exemples. Donne des exemples pour toi d'émissions polluantes. '''Gérard''' : Moi, je peux te dire une chose. Des émissions polluantes, tu sais ce que c'est ? C'est l'après-midi, hein, même le matin, sur les coups de 9h, c'est pas pour critiquer Françoise... '''Phildar''' : C'est pas des émissions, c'est des séries, ça, nuance. '''Gérard''' : Ouais, mais même, quand tu vois Amour, Gloire et Beauté, ça n'a ni queue ni tête parce que ça n'a rien à voir. '''Braguette''' : T'as qu'à zapper. '''Gérard''' : Ouais, mais Les feux de l'Amour, c'est pareil, ils ont signé pour 10 ans. de toute manière, tu peux rien voir... tu comprends même pas ce que ça veut dire. '''Phildar''' : Et ça, c'est polluant. '''Gérard''' : Victoria et Cool. Cool, je pense que c'est ça. '''Phildar''' : Ouais, mais c'est de la merde, mais tu regardes. Alors faudrait savoir. '''Gérard''' : Non, non, moi, je regarde pas ça. '''Phildar''' : Attends, t'es en train de nous dire les prénoms et tout, là. Victoria sort avec machin, bidule. Non, mais on s'en fout, on s'en fout. Donc, c'est polluant pour toi. '''Gérard''' : Pourquoi on s'en fout ? Elle peut réagir, quand même. '''Phildar''' : Non, mais on s'en fout de la série, c'est ce que je veux te dire. '''Gérard''' : Ouais, bah, peut-être. Moi, je vais te dire une chose. Je préfère regarder des reportages, comme j'ai vu hier... Malheureusement, je me suis endormi dessus. Je préfère regarder des reportages sur les routiers que de voir des émissions, des feuilletons qui durent, quoi, ils commencent à 14h05 et à 14h45, c'est terminé. '''Phildar''' : Ouais, mais je vais te dire un truc, les routiers polluent, quand même. '''Gérard''' : Ouais, mais attends, les routiers polluent, peut-être, mais on est bien contents de les avoir pour se nourrir et pour nous ravitailler. Pour ravitailler les magasins et les stations-service. Parce qu'on est bien contents... On est bien contents de les avoir, grâce à eux. Qui c'est qui bouffe ? C'est quand même grâce à eux, si on bouffe. '''Phildar''' : Ouais, mais ils polluent, quand même. '''Gérard''' : Ouais, mais ils polluent... Mais grâce à qui t'as de l'essence dans ta voiture ? Grâce à eux. '''Manu''' : Aux garagistes. '''Gérard''' : Ouais, mais les garagistes, ils font appel à qui ? Au transport routier ! ''[triomphant]'' Eh, oui, Manu. '''Manu''' : Bah non, c'est le train. '''Gérard''' : Bah non, le train... Mais attends, le train, avec le train, tu vas... '''Phildar''' : Tu vas pas loin. '''Gérard''' : ...Je sais pas où. Surtout en ce moment, avec ce qu'il se passe. '''Phildar''' : Allez, on revient sur le débat. '''Manu''' : Sinon, excusez-moi, on accueille Greenpeace, 26 ans de Colmar, où on peut écouter Fun sur 92.2 FM. Bonjour, Greenpeace. '''Phildar''' : À la place de Bricquet. '''Gérard''' : Donc, sixième question. Peut-on faire l'amour en polluant ? '''Greenpeace''' : Gérard, si Greenpeace, je peux répondre ? Alors, en fait, moi, je trouve qu'on peut effectivement faire l'amour en polluant. Si, par exemple, on fait de l'amour sur une péniche, et qu'après, en faisant l'amour, on voit une canette, je dirais pas la marque, et on la balance dans la Seine. '''Gérard''' : Non, mais attends. Là, je vais te dire une chose, Greenpeace... T'e Non, mais... Là, tu reviens tout à fait à la première question. Ouais, ouais. Ah, Tony ? Ouais, ouais. '''Phildar''' : Non, mais on peut faire l'amour quand même sur une péniche. Puisque... On peut faire l'amour partout. Donc, à ton avis, est-ce qu'il a raison ? S'il n'a pas raison, t'expliques. '''Gérard''' : Non, mais moi, je vais te dire une chose. C'est pas parce que tu vas faire l'amour et que tu rebalances des canettes dans la Seine. OK ? '''Greenpeace''' : Bah, tu peux si t'es assoiffé en train de faire l'amour. '''Phildar''' : Est-ce que t'as soif, toi, quand tu fais l'amour ? '''Gérard''' : Non, moi, je fume une cigarette. '''Phildar''' : Bah, tu pollues, alors. '''Gérard''' : Ah, non, mais moi, je fume une cigarette chez moi. Nuance. '''Phildar''' : Ouais, mais tu pollues quand même. '''Gérard''' : Ah, non, mais moi, quand je fume une cigarette, j'ai la fenêtre ouverte. '''Sucre d'orge''' : Ah, bah, ouais, donc tu pollues, hein. '''Gérard''' : Un homme, non, mais je pollue quoi ? Je pollue personne. '''Sucre d'orge''' : Tu pollues l'atmosphère. '''Gérard''' : Bah, je pollue l'atmosphère... Mais dans ces cas-là, les pots d'échappement des voitures, ils polluent quoi ? '''Phildar''' : Non, mais attends, pendant l'amour aussi, Gérard, il t'arrive d'avoir des pollutions nocturnes. On est d'accord. '''Gérard''' : Ah, mais ça, il y a une personne qui pourra répondre si elle veut bien venir à côté de Manu pour répondre à la question, mais elle veut pas. '''Phildar''' : Ah, mais c'est pas grave, on continue le débat, on va pas s'arrêter pour ça. '''Moustache''' :Non, mais si tu veux, j'ai perdu une fil, donc... Je vais sauter cette question. Voilà, je vais écouter, comme ça, au moins, tu vois... '''Gérard''' : Bon, bah, alors, Moustache, bonne nuit. Allez, hop. Au revoir. C'est pas la peine de le reprendre sur un autre nom, hein. Christian, de la Celle Saint-Cloud. '''Bounty''' : Moi, j'aime bien faire l'amour, n'importe où. Même dans le foin. '''Gérard''' : Ouais, mais... Peut-on faire l'amour en polluant ? '''Bounty''' : Non, je crois pas. '''Phildar''' : Pourquoi ? '''Gérard''' : Non, mais pourquoi... Tu vois... Non, non, mais... On avait bien précisé. Il n'y a pas de pourquoi ni des comment. Donc, maintenant, tu le laisses répondre si... '''Phildar''' : Alors, why ? '''Bounty''' : C'est très difficile. '''Gérard''' : Ouais, mais... Alors... Comment... Pourquoi... '''Phildar''' : Ah, non, pas de pourquoi, Gérard. '''Gérard''' : Ouais, mais... '''Phildar''' : Ah, ouais, bah, ouais, t'es bien emmerdé, là. '''Gérard''' : Dans quel sens... '''Phildar''' : Non, non, pas dans quel sens, non plus. '''Gérard''' : Non, non, parce que là, c'était des conneries, ici. Alors, moi, je fais ce que je veux. '''Phildar''' : Ah, d'accord, toi, t'as le droit, OK. '''Gérard''' : Donc, Christian, donc... Dans quel sens ? Peut-on faire l'amour en polluant ? Donc pour toi... '''Bounty''' : Dans le foin. '''Gérard''' : Ouais, dans le foin... Ouais, mais je vois pas... Je vois pas du tout le rapport. Parce que, dans ce cas-là, tu cherches une aiguille dans une botte de foin. ''[PHildar applaudit, les auditeurs ovationnent]''. Dans ce cas-là, Christian... Moi, je vais te dire une chose. Donc, je vais répondre à la question. Donc, si, admettons, t'arrives pas à trouver la foufoune de la personne, donc, t'es obligé de la chercher dans une botte de foin. '''Bounty''' : Exactement. '''Gérard''' : Alors, on va demander à Coquelicot. '''Coquelicot''' : Non, moi, je crois pas que ça pollue. Franchement, non. '''Gérard''' : Ouais, mais est-ce que t'as déjà essayé, toi ? '''Coquelicot''' : Non, franchement, non. '''Gérard''' : Non, mais attends, 19 ans, je pense que... C'est vrai, à Troyes, ils font pas beaucoup l'amour, hein. ''[rire bruyant, rocailleux, moqueur, envers Phildar, originaire de cette ville]''. '''Phildar''' : Qu'est-ce que t'en sais, t'y habitais ? '''Gérard''' : Hein, Phildar ? Braguette ? '''Braguette''' : Oui ? Bah, moi, je suis d'accord avec Coquelicot. Je dis que ça pollue pas. '''Gérard''' : Ouais, bah, toi non plus, t'as pas essayé, là-bas. '''Braguette''' : Ah, si, si, moi, j'ai essayé... J'ai essayé dans les volcans, j'ai essayé dans les petites rivières autour des volcans et j'ai pas pollué. '''Gérard''' : Ouais, non, mais, de toute manière, les volcans, j'ai annulé... Normalement, c'était le thème du deuxième débat, mais je l'ai annulé parce que... C'était... C'était pas évident. Non, et puis même... '''Braguette''' : Harroun Tazieff était pas libre. '''Phildar''' : T'as trop de problèmes, en ce moment, avec les volcans, la grève et tout, c'est chiant. '''Gérard''' : Non, non, non, mais même, les volcans, c'était pas... Ils en parlent pas assez à la télé, tout ça. Moi, je sais, je sais très bien que j'ai été sur Clermont, il y a 3-4 ans, j'ai été me balader. Je sais que c'est là-bas qu'on voit... Il y a un coin qui est... Qui est volcanique. En Auvergne, je sais que c'est le truc des volcans. Donc... '''Braguette''' : T'as été à Vulcania, non ? '''Gérard''' : Ben, j'y ai été, oui, mais c'est pas évident parce que quand tu y vas à pied, faut quand même monter la côte. Parce que tu peux pas y monter en voiture. '''Greenpeace''' : Gérard, je voulais te poser une question, c'est Greenpeace. Est-ce que t'as vu ce qui s'est passé à San Francisco, Volcano ? Il y a un volcan qui est sorti de San Francisco. '''Gérard''' : Non, non, mais attends, pour l'instant, on est dans la pollution, d'accord ? Sucre d'orge. '''Sucre d'orge''' : Oui. Ben, alors, moi, je trouve que l'amour, c'est trop beau, quoi. Ça pollue en aucun cas. '''Gérard''' : Bon, ben, c'est tout ce que t'as à dire ? Non, mais je pense que, là, ce soir, on dirait que vous êtes pas réveillés, là. '''Greenpeace''' : Mais si, Gérard. '''Phildar''' : Non, ils sont calmes, nuance. '''Greenpeace''' : Si tu veux, on peut s'exciter hein. '''Sucre d'orge''' : Il y a un autre sucre d'orge là. '''Gérard''' : Quoi, un autre sucre d'orge ? '''Sucre d'orge''' : Ouais, il y a plusieurs sucres d'orge dans cette maison. On est trois sucres d'orge. '''Greenpeace''' : Je vais te le foutre, mon sucre d'orge, moi, tu vas voir. '''Phildar''' : Ben, réponds, alors, vas-y. '''Sucre d'orge''' : Eh ben, moi, je me dis que ça pollue pas et que Gégé, je sais pas pourquoi il pose la question. T'as pollué en faisant l'amour, Gégé ? '''Gérard''' : Ah, ben, ça, je vais te dire une chose, Sucre d'orge, tu vas te calmer, déjà. '''Sucre d'orge''' : Mais non, mais je sais pas, j'ai pas compris ta question. '''Phildar''' : Ouais, voilà pourquoi, toi, Gérard, t'as écrit cette question ? Pourquoi ? Toi, tu penses que l'amour, ça pollue ou pas ? '''Gérard''' : Non, peut-on faire l'amour en polluant ? Bon, de toute manière, tu peux faire très bien l'amour comme Moustache disait, ou Greenpeace, ou Coquelicot, ou Bounty, je sais plus. Enfin, bref, on s'en passe. Mais je pense que faire l'amour, tu peux faire l'amour où que tu veux. '''Phildar''' : Mais ça pollue pas. '''Gérard''' : Ben oui, mais voilà, d'accord. Mais je crois pas pourquoi, tout de suite, y'en a qui s'attachent sur des trucs qu'on vient à voir sur ce thème du débat. '''Phildar''' : Mais pourquoi t'as pensé à cette question, toi ? '''Gérard''' : Ben, pourquoi ? Parce que c'était une question qui me venait à la tête. Je voulais savoir. C'est tout. '''Phildar''' : D'accord. Comme ça, t'as la réponse. T'es content ? '''Gérard''' : J'ai la réponse... De toute manière, y'a personne qui est capable de répondre. Alors, un orage provoque-t-il une pollution atmosphérique ? '''Bounty''' : Un tonnerre. Un très fort tonnerre. '''Gérard''' : Non, mais, un orage provoque-t-il une pollution atmosphérique ? '''Christian''' : De gros dégâts. De gros... De gros... De gros... Accidents. Des gros... Qui provoquent pas mal de dégâts. '''Gérard''' : D'accord. D'accord. Ouais, je vois ce que tu veux me dire. Sucre d'orge ? '''Sucre d'orge''' : Moi, je dis que ça nettoie, un orage. Après, tout est beaucoup plus propre. '''Gérard''' : Non, mais un orage... Un orage provoque-t-il une pollution atmosphérique ? Moi, je peux vous dire une chose que... '''Sucre d'orge''' : Non, ça assainit. '''Gérard''' : Non, non, mais... Non, mais attends, Sucre d'orge, je vais répondre à ta question, s'il te plaît. C'est que... Vu le cyclone Georges et tout ça... Ouais, mais ça, je vais vous dire une chose. suPhildar''' : Et la couche d'ozone, ça a rapport ou pas ? '''Gérard''' : Bah oui. Moi, je vais te dire une chose. Dans ces cas-là, on parle d'un orage. Tu viens de dire ? '''Phildar''' : La couche d'eau jaune. '''Gérard''' : La couche d'ozone. Donc, tu prends... le truc... météorologique. La couche d'ozone, avec les gaz d'échappement... '''Phildar''' : Vous allez apprendre quelque chose ce soir, écoutez. '''Gérard''' : Avec les gaz d'échappement, tu peux avoir plus de pollution. Donc, cet été, on a atteint le barème... voire 4, 5 à un moment donné sur Paris. '''Bounty''' : Même 6. '''Gérard''' : Non, non, non, non, Christian. Non, non, on n'a pas dépassé le barème 5. '''Phildar''' : Le 5,9, je crois. '''Gérard''' : Non, on est resté à 5. Mais il faut dire une chose, c'est que là-dessus, quand on dit « ouais, les pastilles vertes », donc, les pastilles vertes, je vois pas ce qu'elles ont à faire là-dedans, parce que, de toute manière, les gens prendront toujours leur voiture pour se déplacer, pour aller au boulot. '''Manu''' : Ouais, mais ils ont pas besoin de bouffer de pastilles Valda pour ça. '''Gérard''' : Mais non, mais la pastille verte, c'est... Arrête tes conneries, toi. Occupe-toi de ton standard et réponds pas aux questions. '''Manu''' : Je peux accueillir un nouvel auditeur, par contre ? Donc, on accueille Kelnumero, 20 ans, de Toulouse, sur 105.9. '''Kelnumero''' : Bonsoir, Paris, et bonsoir, le bar où je travavaille, c'est-à-dire le Maxi Eiffel Fire. '''Gérard''' : Salut à toi, Kelnumero ! '''Phildar''' : Non, c'est une petite pub. '''Gérard''' : Non, mais les pubs, on les fait pas. '''Phildar''' : C'est la nuit sans pub, OK ? '''Max''' : Et Manu, tu prends sur les 24 lignes, ok ? Parce que je suis venu lui donner un coup de main, il y a 24 lignes. '''Gérard''' : Ouais, alors, t'accouches. ''[Manu pousse des cris et des respirations rapides, comme ceux d'une emme qui accouche]''. Je senq due tout à l'heure, il y en a un qui va se prendre une pêche. Donc alors, un orage provoque-t-il une pollution atmosphérique ? '''Kelnumero''' : Moi, je ne sais pas, je ne pense pas, mon cher Gérard, je ne crois pas. '''Gérard''' : Ouais, mais... Réponds quand même à la question. Non, mais attends, Kelnumero, pourquoi tu appelles ? '''Kelnumero''' : Ben non, mais pour participer au débat, Gérard. '''Gérard''' : Non, mais je te pose la question. Si tu ne veux pas répondre, si tu n'as pas la réponse, c'est pas la peine d'appeler. '''Phildar''' : Ah si, quand même, attends. C'est pas parce qu'il n'a pas une réponse à une question qu'il n'est pas obligé de participer à tout le débat. '''Gérard''' : Mais là, pour l'instant, il n'est même pas capable de dire... '''Phildar''' : Non, c'est pas grave, il répondra la prochaine. '''Kelnumero''' : Avec les éclairs et tout, oui, oui, tout à fait, je pense, oui. '''Phildar''' : Pour sortir un peu du débat, excuse-moi, il y a Steph sur le Minite qui demande si les pète-fouf polluent l'environnement. '''Gérard''' : Bon, ben ça, c'était quand on faisait l'amour. Je ne vois pas du tout... Le rapport. '''Phildar''' : C'est une sorte d'orage. C'est une sorte d'orage. Non, ça ne pollue pas, alors. '''Gérard''' : Christian. Christian, pour toi ? '''Bounty''' : Ben, moi, je suis tout à fait d'accord avec toi. '''Greenpeace''' : Christian, je t'ai reconnu. Pourquoi, Tony, tu prends cette voix de mongole ? '''Gérard''' : Bon, eh, vous commencez à vous calmer, là. Hein Kelnumero ! '''Kelnumero''' : C'est l'autre, là, Moustache, là. '''Greenpeace''' : Ouais, Moustache, Gérard, tu devrais le virer parce qu'il fout la merde depuis... '''Gérard''' : Non, mais c'est bizarre, Manu, je t'avais dit... '''Manu''' : Mais Moustache est parti, donc... '''Gérard''' : Non, mais pourquoi qu'on le récupère ? '''Manu''' : Mais il n'est pas là ! Oui, ben, moi, je dis que ça... Je pense pas que ça pollue, non. '''Gérard''' : Ouais, mais... Ben... T'as pourtant bien vu des orages ? '''Sucre d'orge''' : Des fois, il y a des orages de pluie acide. Des fois, ça pollue tout sur le son passage. '''Braguette''' : Moi, je dis que c'est le contraire, en fait. C'est la pollution atmosphérique qui provoque les orages. Mais c'est bon, en fait. Un bon orage, une bonne pollution d'orage, c'est bien. Ça assainit, elle a raison. Et puis, l'électricité statique, ça fait peur aux enfants, c'est... '''Gérard''' : Non, non. Moi, je peux vous dire une chose, que l'orage, pour moi, personnellement, vu ce qu'on en... Reego, vas-y, avant que je termine. '''Reego''' : Ouais, c'est juste Choune sur l'IRC qui te demande ce que veut dire atmosphérique, parce qu'il sait pas du tout. '''Gérard''' : Ben, atmosphérique, c'est... Atmosphère. '''Greenpeace''' : Et c'est quoi l'atmosphère ? '''Gérard''' : L'atmosphère, c'est les nuages et c'est tout ça. Quand vous voyez des gros nuages noirs, là, vous pouvez être sûr d'avoir un gros orage. Quand vous voyez des éclairs, c'est pareil. '''Greenpeace''' : Gérard, c'est Greenpeace, moi, j'ai pas répondu. Moi, je pense que les orages, ça pollue carrément pas, puisque, en fait, quand il y a de la pollution, c'est qu'il y a de la chaleur. Donc, les orages, il fait froid, généralement, et voilà, ça pollue pas. '''Gérard''' : Non, non, non, non, non, non, non. '''Phildar''' : Pourquoi, Gérard ? '''Gérard''' : Non, non, je vais dire une chose. En été, quand on n'a pas de flotte, on se plaint parce qu'on a trop chaud. Et quand il pleut, c'est pareil, on se plaint parce qu'on a trop froid. '''Greenpeace''' : Oui, mais Gérard, moi, ce que t'as pas compris, c'est que, tu vois, quand... '''Gérard''' : Non, mais attends, dis carrément que je suis un con, que je comprends pas. '''Greenpeace''' : Moi, je le... Enfin, non, mais bon. '''Gérard''' : Non, tu le penses... Tu veux pas le dire, mais tu le penses. '''Greenpeace''' : Exactement. '''Gérard''' : Bon, alors, Greenpeace, bonne nuit. C'est bon. Non, non, Greenpeace et Moustache, bonne nuit à vous deux. Allez, hop, terminé. On va terminer... Il nous reste deux questions. On va terminer avec Sucre d'orge, Bragate, Coquelicot, Bounty et Kelnumero. Voilà. Alors, le parfum est-il un moyen de pollution ? On va demander à Kelnumero. '''Kelnumero''' : Oui, alors, moi, j'estime que oui, parce que je vois des grosses bonnes femmes, des fois, qui se foutent de la cocotte et tout. Et, tu sais, quand t'es dans un endroit, dans un magasin et tout, et que t'es à côté d'elles, elles s'en foutent plein, plein, plein. C'est une horreur. C'est une pollution du nez, quoi, oui. '''Gérard''' : Ouais, mais ça... Ça, je vais te dire, Kelnumero, moi, je peux te confirmer, c'est que... Je pense que Coquelicot, Bounty, Braguette et Sucre d'orge, je pense que vous allez tous être d'accord avec moi. Donc, je pense que je vais vous dire une chose là-dessus sur le parfum. C'est que dès que, par exemple, une personne va avec sa copine pour y acheter du parfum... Donc, déjà... Rien que si elle en met le peu sur la paume de sa main, déjà, tu vas le sentir pendant un bout de temps. '''Braguette''' : Mais ça dépend quel parfum, en fait. '''Gérard''' : Oui, mais même que ça soit du parfum pour femme ou pour homme... '''Braguette''' : Non, non, mais c'est même pas ça. C'est qu'en fait, il y a des bons parfums et il y a des mauvais parfums. Les mauvais parfums, il y a des mauvaises choses dedans, et c'est les parfums qui puent, genre marque de sport. Tu vois ce que je veux dire ? '''Gérard''' : Non, non. Attends, attends, attends. Attends, attends, attends. Qui c'est qui vient de me parler de marque de sport, là ? '''Phildar''' : Est-ce que l'Adidas, ça pue ou pas ? '''Gérard''' :Attends, attends, attends. Justement, tu me coupes... '''Max''' : J'ai aussi un jeune, là, que j'ai à l'antenne, mais ils ont été au moins... On parle de la pollution des téléphones portables. Il voulait savoir si les portables, portab, téléphones polluent. Tout ce qui est électronique. C'est une question qui revient souvent. '''Gérard''' : Ça, sur l'électronique, ça m'étonnerait que ça pollue. Ça dépend des gens qui veulent... Ils veulent l'acheter. '''Manu''' : D'autre part, excusez-moi tout le monde, d'autre part, on accueille Prof Salade, qui est chercheur au CNRS à la place de Greenpeace. '''Gérard''' : Non, mais attends. Tu le dis au grand chef, parce que c'est lui qui l'a sélectionné. '''Max''' : C'est moi qui l'ai sélectionné. Je ne sais pas s'il est valab. '''Gérard''' : Oui, mais j'espère qu'ils n'ont pas changé de nom pour... '''Max''' : Non, non, non. C'est moi qui viens de le rappeler, là, à l'instant, sur son portable. Par contre, il est sur son portable. Normal, il est dans son laboratoire. '''Prof salade''' : Oui, allô ? Bonsoir, Gérard. Oui, je suis désolé de t'appeler d'un portable, mais voilà, je suis au moment... Oui, donc je vais te démontrer, comme deux et deux font trois... '''Gérard''' : Non, deux et deux font quatre chez moi, pas trois. '''Prof salade''' : C'est un incendie de forêt. Je suis désolé de revenir sur le début du débat... '''Gérard''' : Non, non, non, non, on en est à la huitième, on parle du parfum, on ne reprend pas les questions du départ. Parce que sinon, tu vas retourner voir le chef. '''Prof salade''' : D'accord. Donc, est-ce que tu as fait de la chimie dans ta vie ? Voilà. Donc, est-ce que tu sais que la combustion du carbone avec de l'oxygène donne de l'eau et du CO2 ? '''Gérard''' : Oui, mais attends, je vais te dire une chose, je me suis tapé de... Non, non, mais je me suis tapé des acides de carbone quand on était en Allemagne avec Sandy, chez Goodyear. '''Phildar''' : C'est bon ? C'est pas mauvais, ça, non ? '''Gérard''' : Oui, Reego ? '''Reego''' : Non, rien. '''Gérard''' : Non, je croyais que t'avais une question. Non, mais si t'avais... ...sur l'IRCE, moi, ça me dérange pas. '''Reego''' : Non, on me dit juste que tu fumes des acides de carbone, mais je vois pas le rapport. '''Gérard''' : Non, mais ça, moi non plus. '''Prof salade''' : Les acides de carbone, ça n'existe pas, Gérard. '''Gérard''' : Oui, ben, les acides de carbone, tu sais, ça sert à quoi ? À faire des pneus et des joints de voiture. '''Phildar''' : Je le savais pas, en plus, je l'ai dit comme ça au hasard. '''Sucre d'orge''' : Et Gérard, moi, je disais que les parfums, ben, ça pollue, parce que c'est fait pour cacher les mauvaises odeurs, et les mauvaises odeurs, c'est de la pollution. Alors, les sportifs qui puent, ils mettent du parfum, et c'est pour cacher la pollution, et tout ça, c'est pour cacher la pollution. T'es d'accord ? '''Gérard''' : Non, je suis pas d'accord avec toi. '''Sucre d'orge''' : Mais il y a des parfums, quand ils sont doux, c'est agréable, ça pollue pas. Mais il y a les parfums de chiotte, aussi, ça pollue, parce que ça proue la couche d'ozone. '''Bounty''' : Moi, je trouve que les parfums, ça sent très bon, même sur une femme. C'est très agréable. C'est très agréable à sentir, une femme qui a beaucoup de charme et du parfum. '''Gérard''' : Ouais, mais, alors, Christian, moi, je vais te poser la question, et ça, toi, tu vas répondre, tu vas te mettre à côté de Phildar. Quoi, non ? Non, non, pourquoi ? '''Phildar''' : Non, moi, je réponds pas, je croyais que je devais répondre, non, non. '''Gérard''' : Parce que moi, je vais te dire une chose, une nana qui s'en met trop, par un moment donné, ça fait mal à la tête avec le... '''Kelnumero''' : Pourquoi ? '''Gérard''' : Non, attends, il n'y a pas de pourquoi, toi, tu vas la fermer ! C'est pas à toi que je m'adresse ! Quand je t'appellerai pot de chambre, tu sortiras de sous le lit, toi ! Ok ? ''[applaudissements du studio]''. '''Kelnumero''' : D'accord, Gérard, je me soumets à ton courroux. '''Gérard''' : Alors, dans ces cas-là, t'as qu'à fumer la moquette et on verra ! ''Phildar ''' : Non, ça pollue, hein ! '''Gérard''' : Hein, ok ? Alors vas fumer la moquette ! '''Max''' : En même temps, je me permets, Max, c'est Max, si le mec, il dit, quand tu dis que quand une femme met trop de parfum, ça donne mal à la tête, quand il te demande pourquoi, c'est normal qu'il te pose pourquoi, parce qu'il est en train de savoir pourquoi. '''Gérard''' : Ouais, mais j'en connais une, elle s'en met du matin au soir, c'est pas parce que moi, je m'en mets beaucoup, mais je voudrais bien qu'elle réagisse, là. Allez, hop ! '''Max''' : Ça, c'est peut-être pour camoufler la transpi, non ? ''[Sandy va s'asseoir près du icro mais peu convaincue]'' '''Braguette''' : Par contre, il y a des mecs qui se mettent pas de parfum... '''Gérard''' : Non, non, attendez, s'il vous plaît, derrière, merci, il y a un morceau, là. '''Sandy''' : Disons que le... Oui, bonsoir, disons que le parfum, c'est bien, t'es obligé d'en mettre, si tu vas à un rendez-vous, t'es obligé de mettre du parfum. '''Gérard''' : Ah ouais, mais attends, attends, attends, tu vas à un rendez-vous, tu te mets... Attends, je te réponds à ta question, et là, je pense qu'on va se marrer sérieux. Tu crois que tu vas dans un bureau d'un directeur, par exemple, moi, je vais voir Axel. J'arrive, je suis avec ma bouteille, vas-y, hop ! ''[rires sarcastiques et forcés de tout le studio]''. '''Sandy''' : Non, mais moi, je prends pas ma bouteille sur moi, hein. '''Gérard''' : Non, mais attends, mais dans ces cas-là, c'est pareil. '''Sandy''' : Et ce soir, j'ai même pas amené ma bouteille de parfum, donc tu vois... '''Phildar''' : Elle est tombée dedans, OK ? '''Gérard''' : Ouais, elle est tombée, parce que t'es à côté, toi. Tu te calmes, hein, tu gardes tes mains... '''Phildar''' : Ah, t'inquiète. ''[le studio explose de rire]''. Je touche pas à ta cam'. '''Gérard''' : Ça, c'est ma propriété. Défense d'y toucher. '''Phildar''' : T'as un droit de bail, non ? '''Gérard''' : Ouais, j'ai un droit. Donc, dernière question, je pense, ça, c'est... Le chef, il va répondre. Ça, c'est lui qui l'a sélectionnée. Moi, je pense que ça va me retomber sur la gueule, mais c'est pas grave. Les boissons sont-elles... '''Kelnumero''' : Oui, oui. '''Gérard''' : Ah, oui, oui ? qui ? Alors, Kelnumero, vas-y ? '''Kelnumero''' : Bah oui. '''Gérard''' : Bah oui, mais t'as même pas entendu la fin de la question. '''Kelnumero''' : Est-ce que c'est une pollution pour toi ? Oui, certainement. '''Gérard''' : Ah, voilà. T'es content de ta réponse ? '''Kelnumero''' : Pour moi aussi, parce que moi, je bois beaucoup. Tu sais, ma mère est écossaise, donc... J'ai l'alcool dans le sang depuis que je suis petit donc... '''Braguette''' : Ton père est boulonais, non ? '''Prof salade''' : Euh, allô ? Est-ce que les chiottes de la Loco sont polluées ? '''Gérard''', ''[explose]'': Bon alors Kelnumero, au revoir ! '''Kelnumero''' : Non, non, c'est pas moi. '''Gérard''' : Bonne nuit ! Bonne nuit, bonne nuit, bonne nuit, bonne nuit ! '''Manu''' : C'est pas Kelnumero, c'est prof Salade. Ça y est. Voilà. '''Gérard''' : Attends ! Hé, Manu ! Je te préviens ! '''Max''' : Non, parce qu'il avait son portable. '''Gérard''' : Je te préviens ! J'avais prévenu. Ce soir, le premier débat, je veux pas le casser. '''Phildar''' : C'est nickel, là. '''Gérard''' : Là, t'es en train de me le niquer. '''Manu''' : C'est prof Salade, il est parti. '''Gérard''' : Alors maintenant, tu te démerdes. Je veux pas savoir. Euh... Bounki ? Bounky, pour toi ? '''Bounty''' : Oui, bah moi, quand je vais dans... Quelque part, je bois de l'alcool, mais très modérément. '''Coquelicot''' : Moi, je ne bois pas du tout. Donc, je peux pas répondre à cette question. '''Braguette''' : Ouais, alors moi, je bois pas du tout et je supporte pas les gros cons qui picolent, quoi. Pour moi, c'est... Parce que eux, ce sont des pollueurs, oui. '''Gérard''' : Alors, attends, euh... Je vais te dire une chose, Braguette. Quand tu vas dans une boîte de nuit, t'envoies des gros cons ? '''Braguette''' : J'en vois pleins, oui. '''Braguette''' : Et à Clermont-Ferrand, il y a des boîtes de nuit, quand même ? '''Braguette''' : Et puis, il y a aussi des gros cons qui picolent. '''Gérard''' : Alors, dans ces cas-là, pourquoi que tu vas dans les boîtes de nuit s'il y a des gros cons ? '''Braguette''' : Bah, attends. J'ai le droit de sortir, quand même. '''Sucre d'orge''' : T'as des bons DJs ? '''Gérard''' : Ouais, sucre d'orge, pour finir ? '''Sucre d'orge''' : Bah, moi, je bois beaucoup, mais que de l'eau. Alors, je peux répondre que boire, ça pollue pas quand tu bois de l'eau. '''Gérard''' : Ouais, c'est ça. '''Phildar''' : Ouais, c'est limite comme réponse. '''Gérard''' : Ça m'étonnerait. À mon avis, ça m'étonnerait. '''Sucre d'orge''' : Tu me crois pas ? Je bois un petit peu de champagne de temps en temps. '''Gérard''' : Ouais, un petit peu, quand même. '''Kelnumero''' : Est-ce que tu penses que, pour toi, ça en est une, Gérard ? Bah, une pollution. '''Gérard''' : Non, mais moi, je vais te dire une chose, que si je bois, c'est mon problème, c'est pas le vôtre, et ça vous regarde pas, les auditeurs. '''Phildar''' : C'était pas ça, la question, Gérard. C'était de savoir si c'est pour toi, de boire, c'est une pollution ou pas. '''Gérard''' : Ben, ça regarde... Simplement, ma femme, c'est tout. Voilà, c'est tout. Ça regarde personne d'autre. Donc, conclusion... '''Manu''' : Attends, Gérard, justement, pour la conclusion, on va accueillir Cactus, 22 ans, de Paris. '''Cactus''' : Bonsoir, Gérard. Ça va ? '''Gérard''' : J'ai pas regardé, ce matin. '''Cactus''' : T'aurais dû regarder, comme ça, t'aurais pu me répondre. '''Gérard''' : Ouais, ben, vas-y. '''Cactus''' : Non, mais tu vas bien, Gérard ? '''Gérard''' : Ben... Je sais pas, je te dis. '''Phildar''' : Il a pas regardé, ce matin. Alors, ta conclusion, Cactus ? '''Cactus''' : Alors, ma conclusion à tout ça... C'est que c'était un très long débat qui était très bien fait. Bien animé par Gérard. Et qui s'est vachement bien passé, pour une fois. Et puis, voilà. Voilà ma conclusion. '''Gérard''' : D'accord. Ben, comme t'as fait la dernière question, tu vas rester sur le deuxième. '''Phildar''' : Ah, la classe ! '''Gérard''' : On va demander à Sucre d'orge... '''Sucre d'orge''' : Oui ? Eh bien, je crois que t'as... Enfin, ouais, bien organisé le truc. T'as viré ceux qu'il fallait virer, t'as gardé ceix qu'il fallait garder. '''Gérard''' : Non, mais ça, je l'ai fait parce que j'avais... '''Phildar''' : Ça vient du cœur, ce qu'il a fait. '''Gérard''' : Non, non. Non, non. Ça, euh... Je le dois à quelqu'un, vu ce qu'il s'est passé mardi, donc... C'est tout. J'y avais promis que ce soir, le premier et le deuxième allaient bien se passer, donc... '''Phildar''', ''[riant]'' : On avait pas dit le deuxième. On avait dit seulement le premier. '''Gérard''', ''[souriant]'' : Attends, tu vois... Tu vois, c'est con, parce que toi, t'ouvres toute ta grande bouche. Mais manque de pot, tu vas te taper la réa ! Eh, les deux. Tu vas faire les deux. ''[Manu proeteste avec gestes à l'appui]''. '''Manu''' : Oh, non, putain. Oh, mince. Je vais démissionner, moi. '''Gérard''', ''[triomphant]'' : T'es baisé. T'es baisé, mon pote. Et toi aussi. Alors, Sucre d'orge. Conclusion. '''Sucre d'orge''' : Eh bien, je pense que même si on a dit beaucoup de bêtises et beaucoup de choses intéressantes, le fait... '''Gérard''' : Non, non, non, non. '''Phildar''' : On n'a pas dit une chose intéressante. Je tiens à le signaler. '''Manu''' : Par contre, on a dit de ces conneries... '''Sucre d'orge''' : Non, mais le simple fait d'avoir répété le mot pollution toute la soirée, c'est bien parce que ça rentre dans la tête des gens et puis ils vont en prendre conscience petit à petit. '''Braguette''' : Ouais, alors moi, sur le thème, en fait, sur la pollution, je trouve que c'est bien, la pollution, parce que ça fait réagir les gens, parce que maintenant, on privilégie l'électricité, on privilégie aussi le chauffage, tu vois, solaire. Et sinon, pour le débat en lui-même, quand t'es gentil avec les gens, les gens sont gentils avec toi. '''Coquelicot''' : Moi, c'est la première fois que je viens à un débat avec toi. Je trouve ça très sympa et je trouve que ça a apporté beaucoup de choses quand même, même s'il n'y a pas que des choses intéressantes, c'est vrai, mais je trouvais que c'était très sympa et j'espère que ça va faire réagir des gens. Christian de la Celle-Saint-Cloud. '''Bounty''' : Oui, moi, j'adore beaucoup ton débat et c'est pas mal de... Ça apporte beaucoup de choses et j'adore pas mal ton émission. '''Phildar''' : Qu'est-ce que ça t'a apporté, Christian, le débat de ce soir, toi ? '''Bounty''' : Beaucoup de choses. '''Phildar''' : C'est-à-dire ? '''Bounty''' : Sur la pollution, sur le cinéma, sur le... '''Gérard''' : Non, non, mais attends, Christian, Christian, Christian ! Christian ! '''Phildar''' : On l'a pas encore fait. '''Bounty''' : Non, sur la pollution, sur certaines choses, sur les orages, sur tout. Sur les parfums. '''Gérard''' : Oui, mais t'avais pas autre chose à demander ? Parce que je t'ai entendu tout à l'heure à 22h. Non, c'est pas grave. Kelnumero ? '''Kelnumero''' : Bon, alors pour ma toute première participation aux débats de Gérard, moi, j'ai trouvé ça bien, mais bon, je sais que la pollution, toi, c'est ce que tu vis au jour le jour et c'est... '''Phildar''' : À Paris, ouais. '''Kelnumero''' : C'est pénible pour toi. '''Gérard''' : Non, mais de toute manière, la pollution, on la vit dans toutes les villes, hein. Je vais te dire une chose, ça, tu peux pas t'y échapper, que ce soit sur Paris, sur... Même en province, je pense que tu peux pas y échapper, hein. '''Phildar''' : Il y a des endroits dans le monde où il n'y a pas de pollution, Gérard ? '''Gérard''' : Euh, je pense pas, non. Donc, conclusion sur le premier débat. Donc, j'ai répondu quand même un peu aux gens. J'ai même coupé la parole pour répondre sur les questions. '''PHildar''' : C'était bien, ouais. T'as bien fait. '''Gérard''' : Donc, je pense que le deuxième, je voudrais qu'il se passe comme ça. '''Phildar''' : D'accord, mais la pollution, la pollution. '''Gérard''' : Ouais, mais il faudrait qu'on aye moins de pollution, moins de voitures. Parce que là-dessus, ça sera dur. Donc, le deuxième débat qui va porter sur le cinéma. Et on va s'écouter Bernard Mauvaise-Hallen avec Drajets Fuca. Et vous pouvez toujours nous appeler au 0800 70 5000 et 0803 70 5000 et toujours 3615 code Funradio, rubrique Direct. Et l'IRC qui... fonctionne bien je pense ? '''Reego''' : Ca pulse à mort ! '''Gérard''' : On se retrouve tout à l'heure d'ici dix minutes. ''[Musique]''. == Le débat sur le cinéma == === Contexte === Second débat de Gérard de cette nuit du 8 octobre. Le principal fait à noter est l'émergence de Reego comme régulateur. Discret jusqu'ici, il commence à prendre de l'ampleur pour devenir le vrai thermomètre régulateur de Gérard dans ses virées d'humeur. Au surplus, combiné à Phildar et Manu, il ajoute la dimension qui manquerait au surréalisme sur la durée. Pour la première fois, Max se permet de ne pas rester jusqu'au bout de l'émission, confiant à son équipe la direction réelle des opérations de cette nuit. Il ne le fera pas souvent cette saison-là, mais le fera beaucoup ensuite pour gérer d'autres obligations professionnelles. Le fait est que le format, tout en prenant son envol, trouve aussi déjà sa limite. Gérard est tellement limité dans son contenu qu'il aparaît déjà évident qu'il va falloir combiner d'autres éléments comiques pour pérenniser l'émission, le registre sérieux pouvant devenri ennuyeux. Il est même probable que les acteurs habituels, les auditeurs, n'y trouvent pas leur compte. Mais pour l'heure, c'est bien ce format qui perdure. Ce débat montre aussi, pour une nouvelle fois, l'ambiguïté de gérard, très pointilleux ici sur sa vie privée et sa pudeur, alors qu'il est prêt à tout dévoiler, sans filtre, dans d'autres circonstances moins adaptées voire risquées. C'est ici que l'instabilité psychique du personnage est claire, par-delà la dimension théâtrale de cette aventure. === Les personnages === * Gérard Cousin : Gérard * Phildar, Manu * Igor : Reego * Franck Bargine : Max * Olivier Bouchet : Olivier de la pro * Mégane : Moulinette * Tulipe: anciennement Coquelicot * Scooby-doo : anciennement Kelnumero * Laura : Cactus * Goldo : Ananas, Yoshimitsu, Multiplex * Christian * Sandy Threadkell : Poussin * Tony Morestin : Rocco (le nez pincé) === Transcription === '''Gérard''' : Et voilà, bonsoir à tous. Donc vous nenez d'écouter Baba au rhum avec des petits ...de loup dans le nez. '''Phildar''' : Non, ça c'était il y a trois disques, Gérard. '''Gérard''' : Oui, mais le deuxième c'était ? '''Phildar''' : Non, le premier, tu peux rappeler le premier et je te donne le... '''Gérard''' : Le deuxième, le premier, je l'ai, là, c'est Baba au rhum avec... '''Phildar''' : Non, le premier disque, là, on en a passé deux. C'était Bernard Mauvais-Hallen. Et le deuxième, c'était Blur. Voilà. '''Gérard''' : Et donc, continuez à nous appeler au 0800 70 5000 et 0803 08 5000 et toujours 3615 4 Fun Radio, rubrique direct et sur l'IRC, on continue de nous appeler. '''Reego''' : Oui, toujours énormément de monde. Je salue Féji, Seb Zed, Gaëtan, Corben, Miss Lover et tous les autres qui sont là. '''Gérard''' : Et on a combien de personnes sans indiscrétion, Reego ? '''Reego''' : Une petite seconde, je tape un petit truc et c'est vrai que ce n'est pas très bien de le dire, mais il y a 56 personnes. '''Phildar''' : Ne le dis pas, ça reste entre nous, non ? '''Gérard''' : Non, mais c'est bien, 56 personnes, il est 1h39, c'est bien quand même. '''Max''' : Dites-le en direct, mais pas trop fort, il ne faut pas que les gens l'entendent. '''reego''', ''[à voix basse mais devant le micro]'' : 56, il y en a 56. '''Phildar''' : Et sur le Minitel, Gilles, l'inconnu, il y a aussi Babette et Sandy. '''Manu''' : Et moi, j'aimerais saluer ma mère et ma copine. Moi, je salue Titi et la Madrilaine et voilà. '''Reego''' : Pas de marque, pas de marque. '''Gérard''' : Non, mais la Madridaine, il se reconnaîtra. '''Manu''' : Si, si, c'est une marque de vélo. '''Gérard''' : Mais il se reconnaîtra, la Madridaine. On va accueillir Moulinette, 21 ans de Dijon. On écoute Fun Radio... Fun Radio sur 90.7. Tulipe, 19 ans, Toulouse, 105.9. Ananas, Saint-Leu-la-Forêt sur 101.9. Scooby-Doo, 23 ans, Du Havre. On écoute Fun Radio sur 106.9. J'espère que c'est la bonne fréquence. '''Manu''' : C'est la bonne fréquence, Gérard. '''Scooby-doo''' : Oui, oui. Bonsoir, Paris. Bonsoir, la Dreamtease. '''Gérard''' : Cactus. Rebonsoir. Donc, Paris, 101.9. Et Christian de la Celle SaintèCloud, 101.9 toujours. Donc, deuxième débat qui porte sur le cinéma. J'espère qu'il va se passer aussi bien que le premier. '''Phildar''' : Bien péchu aussi, parce qu'il va se réveiller un petit peu, Gérard. Un petit peu, oui. '''Gérard''' : Non, mais j'espère qu'il va se passer impeccab, comme le premier, c'est tout ce que je demande. Alors, avez-vous déjà été au cinéma cette année ? Alors, on va demander à... Non, ben, tiens, comme Christian, il a répondu le premier. '''Christian''' : Oui, j'ai été souvent au cinéma. Oui. Et j'ai vu pas mal de films. '''Phildar''' : Comme quoi ? '''Christian''' : Comme Le Titanic, Dîner de con, Six jours sept nuits, Prends garde à toi et Pédale douce. '''Gérard''' : D'accord. Pédale douce, je peux te dire une chose, c'est un film qui est passé dimanche sur... '''Christian''' : Sur Première chaîne. Avec Richard Berry. '''Manu''' : Christian, t'es allé manger chez Gérard ? Il t'a invité ? '''Christian''' : Non. '''Manu''' : Non, c'est pas grave. Ouais ! Non, mais j'ai rangé la blague, elle est pourrie. '''Gérard ''' : Non, non, mais tu te calmes, Manu, parce que... Cactus ? '''Cactus''' : Ben, moi, j'ai pas trop d'argent, alors tu vois, je me souviens pas avoir été au cinéma. '''Scooby-doo''' : Moi, ben, j'ai pas tellement eu l'occasion parce que je suis serveur dans un bar. Euh, le problème, j'ai pas vu beaucoup, beaucoup de films cette année. J'en ai vu quelques-uns, mais... ''[pendant ce temps, Manu transmet discrètement une feuille à Phildar]''. Oh là ya larcène là. C'est Olivier à la pro ? '''Gérard''' : Non, c'est Cactus, à mon avis, qui a... Non, c'est Scooby-Doo qui doit avoir un truc bidon. ''([regardant Phildar]'' Non, mais tu vois, là, ce que Manu t'a donné, c'est pas... '''Phildar''' : C'est des sondages. '''Gérard''' : Non, non, mais ça, j'en ai rien à foutre. '''Phildar''' : D'accord. C'est pas grave. '''Gérard''' : Tu vois, parce que moi, tes sondages, j'en ai rien à foutre. Alors, on fait pas de sondages lors des débats. '''Moulinette''' : C'est intéressant, les sondages. '''Phildar''' : Non, mais c'était pas un sondage, c'était des statistiques, en fait. C'était des questions, genre, pour ou contre le cinéma. C'était pour savoir ce que les Français... '''Gérard''' : Non, non, mais tu vois, maintenant, dans mes débats, je mets plus des pour ou contre. OK ? Alors, ça, tu me le donnes ? '''Phildar''' : Il y avait aussi Qu'aimez-vous dans le cinéma. Tu peux le lire, si tu veux, tiens. ''[il lui donne la feuille]''. '''Gérard''' : Non, mais ça... '''Gérard''' : Non, mais tu peux le lire, c'est vachement intéressant. '''Gérard''' : Non, non, mais je verrai ça après. Ananas ? '''Ananas''' : Ouais, ben, moi, je suis un vrai fan de ciné. Je vais souvent au cinéma. Et dernièrement, j'ai vu Une chatte sur un doigt brûlant. '''Gérard''' : Non, non, mais attends. Toi, si tu commences ta vulgarisé... Si tu commences à être vulgaire... '''Ananas''' : Ah, mais je suis pas vulgaire, Gérard. '''Gérard''' : Non, non, mais attends, une chatte... Une chatte, tu sais ce que ça veut dire, pour moi ? '''Manu''' : C'est un petit animal à poils courts... '''Phildar''' : Attendez, il faut savoir si on considère que le cinéma pornographique ne fait pas partie du cinéma, Gérard. '''Gérard''' : Mais justement... Non, mais justement... Donc, si Ananas veut répondre... bien avant moi à la cinquième question... Donc, dans ces cas-là, prends les questions à ma place. '''Ananas''' : Ben, je peux pas savoir. '''Phildar''' : Donc, Ananas, tu gardes ta réponse, parce que ça, c'est pour la cinquième question. '''Ananas''' : OK, alors, je serre les fesses jusqu'à la cinquième. '''Gérard''' : Bon, ben, alors, tu vas serrer les fesses avec Manu au standard. '''Phildar''' : Il a l'habitude, Manu, de serrer les fesses. '''Tulipe''' : Ben, moi, je suis un peu prise par le boulot, donc j'ai dû aller au cinéma quelquefois, mais en ce moment, je peux pas trop. e ? '''Moulinette''' : Oui, alors, moi, j'y suis allée, mais bon, je peux pas te dire si c'est souvent ou un peu, beaucoup. C'est... je sais pas, une fois tous les deux mois, quoi. '''Gérard''' : Ouais, non, mais je pense qu'à l'heure actuelle, vous pouvez quand même aller voir certains films qui sont sortis. Peut-être Minitel, non ? '''Phildar''' : Ouais, je pense qu'ils vont aussi au cinéma. '''Gérard''' : Non, mais on a des réactions ou pas ? Parce que sur l'IRC, on a du monde. Si sur Minitel, ils veulent pas répondre... '''Phildar''' : Ben, on a Dada sur Minitel qui dit que tu es quelqu'un qui parle plus vite qu'il ne réfléchit. '''Gérard''' : Ouais, ouais, dans ces cas-là... '''Phildar''' : C'est flatteur. '''Gérard''' : Non, non, mais dans ces cas-là, elle aurait pu dire l'homme qui parle plus vite que son ombre. '''Phildar''' : Voilà, c'est un peu le même principe. '''Gérard''' : Ou l'homme qui tire plus vite que son ombre, en parlant de Lucky Luke. Sur IRC ? '''Reego''' : Oui, il y a Corben qui me demandait si le cinéma pollue. '''Gérard''' : Oh, non, mais alors là... '''Phildar''' : C'est plus le thème du débat. '''Manu''' : Mais est-ce que la pollution, c'est du cinéma ? '''Gérard''' : Non, non, mais ça... Non, non. Donc, alors là, je pense que c'est une question qui va faire plaisir à tout le monde. Je pense que tout le monde a entendu parler du film. On en a fait de la pub sur Fun Radio. Que pensez-vous du film Godzilla ? '''Phildar''' : Ah, vous ne pouvez pas passer à côté. '''Christian''' : Je trouve ça très bien, Christian. Zé vu le film, ze le trouve très formidable. '''Gérard''' : Christian, sans indiscrétion, on va demander à Cactus, Scooby-Doo, Ananas, Tulip et Mouninette de se calmer. Où t'as été le voir ? '''Christian''' : Au Gaumont-Parnasse, le matin de très tôt. '''Reego''' : Pas de marque ! '''Philda''' : Gérard, il a été à New York alors... '''Gérard''' : Tu vois, moi, j'ai été le voir avec Sandy qui se planque derrière là-bas. '''Phildar''' : Il n'a rien compris. Il n'a rien compris, mais il l'a vu. '''Manu''' : Tu as compris que c'était un monstre qui cassait une ville ? '''Gérard''' : Oui, bien sûr. Je vais te dire une chose. Tu demanderas à Poussin de tout à l'heure, après l'émission, tu verras... '''Phildar''' : C'est le nom qu'ils avaient donné au monstre dans le film. '''Gérard''' : Non, non, mais tu demanderas à Poussin tout à l'heure. Donc, Christian, pour toi, tu as été le voir au Gaumont ? '''Christian''' : Oui, au Gaumont-Parnasse, très tôt le matin. '''Cactus''' : Écoute, moi, j'en ai entendu parler. J'en ai entendu parler que du bien. Donc, comme je te l'ai dit tout à l'heure, je n'ai pas d'argent. Je n'en ai pas beaucoup. Donc, je ne dépense pas mon argent là-dedans. Mais il paraît que c'est super bien. Mais dès que j'ai l'occasion d'y aller, j'irai le voir. '''Gérard''' : Eh bien, il faudra peut-être se dépêcher parce que là, il est... '''Manu''' : Il est déjà 1h46, c'est chaud, là. '''Cactus''' : Non, mais ne t'inquiète pas, Gérard. Quand on veut voir un film, on arrive toujours à le voir. '''Scooby-Doo''' : Gérard, je sens que tu vas me virer si je dis que je déteste Jean Reno, que je déteste les films américains de merde et tout ça, donc... '''Gérard''' : Bon, alors... Non, non, non, mais là, Scooby-Doo ! '''Moulinette''' : Il a le droit, hein. '''Scooby-doo''' : J'ai le droit, je ne l'ai pas vu et je n'ai pas envie de le voir. '''Gérard''' : Oh, stop ! Stop ! On se calme. Scooby-Doo, si c'est pour insulter les acteurs de cinéma, dans ces cas-là, tu vas aller voir Manu parce que je pense que tu n'es pas encore rentré dans... '''Scooby-doo''' : Je ne l'ai pas insulté. J'ai dit que je ne l'aimais pas. '''Phildar''' : Ben oui, t'es sectaire quand même, Gérard. T'es un peu sectairé. '''Gérard''' : Non, mais attends. Non, mais attends, je vais te dire une chose. Quand t'insultes des acteurs de... '''Phildar''' : Non, il n'a pas insulté, il a dit qu'il n'aimait pas. C'est-à-dire que, ça se trouve, il n'aime pas Jean Reno dans Godzilla parce que le rôle est bidon. '''Gérard''' : Ah, non, mais attends. Son rôle est vachement bien dans... '''Phildar''' : Ben, explique pourquoi. '''Gérard''' : Son rôle est... Attends, Scooby-Doo, tu permets ? Non, non, Scooby-Doo. Scooby-Doo, tu me laisses parler ? Maintenant, je réponds à la question à Phildar. Moi, je vais te dire une chose. Jean Reno, dans le rôle qu'il a dans Godzilla, fais-moi confiance qu'il est vachement bien. Il joue le rôle d'un... '''Moulinette''' : Le dis pas, je ne l'ai pas vu. '''Gérard''' : Il joue le rôle d'un... ' ''Phildar''' : D'un agent secret, non ? '''Gérard''' : D'un agent secret. '''Moulinette''' : Faites chier, merde. '''Gérard''' : Oh, qui c'est qui a envie de chier, là ? C'est la deuxième porte à droite. '''Manu''' : Non, mais elle n'avait pas vu le film, vous lui dites la fin. '''Moulinette''' : Ne racontez pas, je veux le voir. '''Gérard''' : Non, non, mais je peux te dire une chose. Jean Reno joue là-dedans dans un super... Il a un très bon rôle. '''Manu''' : Ce n'est pas le monstre ? Ce n'est pas le monstre, Jean Reno ? '''Gérard''' : Non, non, non. '''Scooby-doo''' : Gérard ? Ce n'est pas parce que je n'ai pas les mêmes goûts que toi que tu dois forcément t'énerver et vouloir me virer. J'ai vu tout un tas de films avec Jean Reno, je n'aime pas du tout ce type. '''Gérard''' : Oui, mais si tu n'aimes pas Jean Reno, dans ces cas-là, c'est... Dans ces cas-là, est-ce que tu as regardé... '''Scooby-doo''' : Léon, tout ça, mais je n'ai pas aimé. '''Gérard''' : Mais il est passé, il y a... Quand est-ce que c'est ? Il a joué dans... '''Moulinette''' : Highlander. '''Gérard''' : Non, il n'a pas joué dans Highlander, il a joué dans... '''Ananas''' : Les Bronzés, les Bronzés. '''Gérard''' : Non, pas dans les Bronzés. Le film, l'opération Cornet de Beaf. '''Christian''' : Ils l'ont passé à la télé. '''Gérard''' : Oui, mais il était très bien comme film. Je suis désolé. '''Scooby-doo''' : J'ai regardé Big avec Tom Hanks. '''Gérard''' : Oui, tu as raison. Tulipe ? Non, Ananas. '''Ananas''' : Ananas. Écoute, moi, ce n'est pas les acteurs qui me posent un problème, c'est la bestiole quoi. En fait Godzilla, c'est quand même un petit peu un monstre de tapette, parce que si tu le mets à côté de King Kong, il ne fait pas le poids, Godzilla. Attends, moi, je suis prêt à organiser un combat entre Godzilla et King Kong quand tu veux, je suis prêt à mettre de l'argent quand tu veux, moi, je te dis, King Kong, il met une branlée à Godzilla, c'est tout. '''Gérard''' : Non, mais attends, King Kong et Godzilla sont de la même taille. Godzilla, c'est un gorille... c'est un gros lézard. Et King Kong, c'est un singe. '''Ananas''' : Mais King Kong, il est plus fort, c'est tout. '''Manu''' : Ce qu'on ne sait pas, c'est que dans la vie, ils sont amants. '''Gérard''' : Non, non, non, non. '''Ananas''' : Là Manu, tu as balancé quelque chose, là, il ne fallait pas en parler. '''Gérard''' : Non, non, Tulip, Tulip, Tulip. '''Tulip''' : Moi, j'ai trouvé ça super. '''Gérard''' : Tu as été le voir ? '''Tulip''' : Oui, oui, j'ai été le voir, oui, oui. '''Moulinette''' : Alors, moi, je ne l'ai pas encore vu pour la simple et bonne raison que je ne regarde pas les films américains en français, mais je les regarde en anglais, donc j'attends qu'il passen en anglais. '''Phildar''' : Tu l'as vu en anglais, Gérard ? '''Gérard''' : Non, américain. '''Phildar''' : Ah, pardon. Excuse-moi. '''Manu''' : Phildar, tu as fait une erreur... C'est impardonnable. '''Gérard''' : C'était américain. Moi, je peux vous dire une chose, que ce film-là est très beau à voir. Même Poussin l'a vu. Et je pense qu'elle peut dire que... C'est sûr qu'on a du mal à le comprendre, le film, mais il est très bien. IRC ? '''Reego''' : Oui, sur l'IRC, il y a Fedji qui demande si, au cinéma, les monstres peuvent remplacer les acteurs. '''Gérard''' : Ah ben, la preuve, c'est que Godzilla, le monstre, s'est vu opposé avec Jean Reno. '''Phildar''' : C'est un peu la vedette, aussi. '''Gérard''' : Oui, mais ça, c'est Jean Reno qui a fait son film, donc... '''Phildar''' : Non, mais Godzilla, c'est la vedette. Et pourtant, on ne l'a pas vu à l'avant-première en smoking. Il n'est pas venu. Pourtant, c'est la vedette. '''Gérard''' : Jean Reno... '''Phildar''' : Non, Godzilla. '''Scooby-doo''' :Est-ce que Godzilla il va monter les marches de Cannes ? '''Scooby-doo''' : Tu mets Gérard en face de Françoise, t'as Godzilla 2. '''Gérard''' : Qui c'est qui vient de dire ça ? '''Phildar''' : Ça, c'est pas cool. '''Gérard''' : Scooby-Doo, bonne nuit. '''Manu''' : Par contre, moi, je croyais que le monstre Godzilla et le gars qui faisait sauver Willy, la baleine, c'était le même. '''Reego''' : Gérard, justement sur IRC, on me demande si tu connais le nom de l'acteur qui joue Godzilla. '''Ananas''' : Sandy. '''Gérard''' : Alors, celui qui vient de dire Sandy, bonne nuit. '''Phildar''' : Non, c'est Brandy, il a dit. '''Gérard''' : Non, mais même, ce n'est pas une raison. '''Manu''' : C'est le nom de l'acteur, Brandy. '''Moulinette''' : Brandy Walker, son vrai nom. '''Gérard''' : Oui, c'est ça. C'est faux. '''Phildar''' : Je pense que tout le monde a répondu à Godzilla. Maintenant, Gérard, on peut peut-être passer à la prochaine. '''Gérard''' : Donc, combien payez-vous la place de cinéma ? On va demander à Moulinette. '''Moulinette''' : Moi, je la paye 47. Sauf quand c'est en tarif réduit, c'est 37. '''Tulip''' : 52. '''Gérard''' : Attends, 52 francs à Toulouse ? '''Phildar''' : Ça fait 5 francs de plus ? '''Ananas''' : Ouais, bah écoute, tu sais, moi, je fais le bon vieux truc. J'y vais avec un copain, puis il vient m'ouvrir la porte de sortie de secours près des chiottes, et puis je rentre gratos, quoi. '''Gérard''' : Bon, bah alors, Ananas ? '''Phildar''' : Ça, c'est n'importe quoi. '''Ananas''' : J'ai le droit, non ? '''Gérard''' : Ananas ? Tu vois ? C'est terminé pour toi. Au revoir ! '''Manu''' : Mais qu'est-ce qu'il a dit ? '''Ananas''' : J'ai pas le droit de resquiller ? '''Manu''' : Pourquoi tu payes le métro, toi ? Tu resquilles pas ? '''Ananas''' : Toi aussi, tu truandes des fois, Gérard. Chacun ses business, hein, GG. '''Gérard''' : Allez, allez, hop. Ananas, c'est terminé pour lui. Hop ! Scooby-Doo ? '''Manu''' : Ah bah, il est parti, Scooby-Doo, tu l'as jeté. '''Gérard''' : Ouais, mais... Eh, tu me prends des gens au standard, là, ou quoi, toi ? '''Phildar''' : Ah, les 24 lignes, là. '''Gérard''' : Non, mais attends, ça va, moi, je peux faire des débats comme ça... ''[il lève les jambes pour mettre ses pieds sur la table]''. '''Manu''' : Non, parce que là, les pieds près de moi, c'est pas possible, Gérard. '''Phildar''' : Ah, tu bosses un peu, Manu, quand même. '''Manu''' : Ouais, bah, j'y vais, j'y vais, j'y vais. Non, mais t'y vas maintenant ! Tu me reprends deux personnes à place d'Ananas et de Scooby-Doo. '''Reego''' : Le débat, Gérard, le débat. '''Cactus''' : Euh, c'est... Je crois que c'est 48 francs, la place, moi. '''Christian''' : Moi, ze paye 56 francs. '''Moulinette''', ''[réagissant au fait que Gérard note tous les chiffres qu'on lui donne]'' : Ça rentre pas dans les cases du loto. '''Gérard''' : Alors, 56... Alors, moi, je peux vous dire une chose, que là, il y en a aucun... Personne m'a donné la bonne réponse. Les meilleures places, c'est 30 balles la place du cinéma. '''Phildar''' : Où ça ? Dans tes rêves ? '''Gérard''' : Non. Non, moi, je peux te dire une chose, UGC, c'est 30 balles. '''Phildar''' : Mais pour les moins de 12 ans. '''Cactus''' : En tarif réduit ? '''Gérard''' : Non, non, il n'y a pas de tarif réduit. '''Moulinette''' : Pour les mongoliens. '''Phildar''' : Attends, Gérard. Moi, j'ai rarement vu des places à 30 balles à Paris. Et même en province, je pense que c'est pareil. '''Gérard''' : Non, mais attends. Toi, dans ta ville de Troyes, il n'y a pas de cinéma. J'y ai été une fois, il n'y a aucun cinéma dans ta ville de Troyes. '''Phildar''' : Si, ya des cnnémas, mais moi je faisais comme Ananas. Je passais par derrière. Bon, le problème, c'est pas ça. Le problème, c'est que c'est 50 balles maintenant, parce que la vie évolue et qu'on pollue le système. '''Gérard''' : Bon, quelle heure il est ? '''Cactus''' : On revient toujours à la pollution. '''Gérard''' : 1h50. 1h54. Non, on ne continue pas la pollution. Donc, oui... '''Reego''' : Enchaîne la question. '''Gérard''' : Vas-y, si quelqu'un voulait réagir sur les places. '''Reego''' : Oui, alors, il y a Corben qui demande si Godzilla paye sa place quand la pollution est niveau 3. '''Gérard''' : Non, mais ça, je ne vois pas le rapport. '''Phildar''' : On s'en fout ça, Reego, on t'a déjà dit. '''Reego''' : Non, non, mais il fait bien de poser la question, mais ce n'était pas le thème du débat. C'est qui sur IRC ? '''Reego''' : C'était Corben. '''Manu''' : Gérard, donc, à la place de Scooby-Doo, on accueille Poussin. Et à la place d'Ananas, on accueille Yoshimitsu de Caen, où on peut écouter Fun sur 96.3 FM. '''Gérard''' : Donc, on va attaquer la quatrième. Regardez-vous la télé sur les films sortis ? Donc, alors, je refais la question. Par exemple, quand vous regardez la télé, par exemple, le mercredi... oh là, il y a des téléphones qui sont pourris, là, je n'aime pas ça. '''Manu''' : Je crois que c'est Poussin. '''Gérard''' : Eh Poussin, tu n'en es pas comme un bœuf. '''Poussin''' : Non, non, ce n'est pas moi. '''Phildar''' : Ben si, mais dès que tu parles, ça s'arrête. '''Gérard''' : Donc, est-ce que vous regardez, par exemple, le mercredi, vous avez des films qu'on vous annonce à la télé ? '''Cactus''' : Ça s'appelle des bandes annonces. '''Gérard''' : Voilà, les bandes annonces. '''Christian''' : Sur exclusif. '''Yoshimitsu''' : Pas de gros mots. '''Gérard''' : Non, sur exclusif, je ne pense pas que j'en ai encore eus. Alors, donc, est-ce que vous les regardez ? Est-ce que vous regardez l'avant-première du film qui sort ? '''Phildar''' : Ah, il passe les avant-premières ? '''Gérard''' : Oui, ils passent les bandes annonces du film. Et ça, je peux le confirmer. Donc, on va demander à Moulinette. '''Moulinette''' : Alors, moi, je ne regarde jamais ça, parce que ça te donne toujours une image carrément faussée du film que tu vas aller voir. Je me fais une opinion plutôt par les journaux et plutôt par mes amis. '''Gérard''' : Oui, mais attends, Moulinette. Dans ces cas-là, si tu ne regardes pas la bande annonce à la télé, donc, sur les journaux, c'est pareil. Donc, sur les journaux, ça te met la bande annonce du film qui sort. Donc, tu vois l'image. '''Moulinette''' : Pas du tout, Gérard. Tu ne vois pas l'image sur le journal, Gérard. '''Gérard''' : Moi, je peux te dire que si, et je peux... '''Manu''' : C'est parce que tu lis des BD, Gérard. '''Yoshimitsu''' : Avec Gérard, elle bouge l'image. '''Gérard''' : Non, non, mais moi, je peux te ramener un journal, pas demain, mais mardi, si tu veux. Moi, je te ramène le journal, et tu vas voir que même mercredi, je peux te ramener le journal, comme quoi que la bande annonce... Ils vont te mettre la bande annonce des films qui sortent le jour même. Donc, Tulipe ? '''Tulipe''' : Bah, moi, ça m'intéresse énormément, parce que vu le peu de films que je vais voir, je suis sûre au moins qu'il m'intéressera ou pas. '''Gérard''' : Ouais, mais... Oh là, qui c'est qui a un téléphone pourri ? '''Manu''' : C'est Poussin, je ne sais pas, elle le gratte sur son menton, c'est une horreur... '''Yoshimitsu''' : C'est parce qu'elle a de la barbe ou quoi ? '''Gérard''' : Oh vous vous calmez, s'il vous plaît, derrière, merci. Tulipe ? Je me demande si à Toulouse, vous avez... Je me demande si vraiment, vous avez des salles de cinéma. '''Tulipe''' : Ah, si, si, franchement, Gérard, il y a des salles de cinéma, hein. '''Gérard''' : Ouais, ça m'étonnerait, hein. '''Moulinette''' : C'est pas le tiers-monde, hein. '''Gérard''' : Ouais, mais attends, à 19 ans, je crois que t'es en pleine études, ça m'étonnerait que t'ailles voir des films. '''Tulipe''' : Je travaille, Gérard, je ne suis plus dans les études, moi. '''Phildar''' : Moi, je voulais te poser une question, Gérard. Imagine, tu vois la bande annonce le mercredi. Une bande annonce, ça dure combien de temps ? Ça dure une minute, une minute trente. Qu'est-ce que tu vas te faire chier après à aller voir le film ? '''Gérard''' : Non, mais toute manière, sur la bande annonce, tu ne vois presque rien. Tu ne vois presque rien, il faut voir le film réel. Par exemple, sur Godzilla, t'as vu quoi ? T'as vu simplement le monstre qui cassait carrément l'hôtel. '''Manu''' : Ouais, mais il n'y a que ça dans le film, de toute façon. '''Gérard''' : Oui, non, mais il ne fait que ça, je suis d'accord. '''Moulinette''' : Raconte pas, raconte pas, raconte pas. '''Gérard''' : Non, mais attendez, je réponds à Manu. Oui, d'accord, Manu, il ne fait que ça. '''Phildar''' : Donc, je me dis, ça ne sert à rien d'aller voir le film après. '''Gérard''' : Mais si, pour les gens qui aiment bien voir des films comme ça, peuvent aller le voir. Moi, je leur conseille d'aller le voir. '''Phildar''' : Mais ça ne sert à rien de dépenser 50 balles si tu vois une bande annonce où il y a tout. . '''Gérard''' : Non, mais ils ne vont pas dépenser 50 balles parce que le mercredi, c'est moins cher. Là, sur tous les chiffres que j'ai eus, le moins cher, c'est 30 balles la place. Donc, Reego, oui ? '''Reego''' : Oui, ça va. Ok, c'est bon, on peut y aller. Il y a encore Corben qui demande si le Titanic a coulé à cause de Godzilla qui était monté à bord. '''Gérard''' : Alors là, c'est vrai qu'on parle de Godzilla, on ne parle pas du film Titanic avec Céline Dion et Leonardo DiCaprio. C'est vrai que ce film-là, c'est vrai... Non, mais... Non, mais c'est vrai que ce film-là a fait un ravage. Mais je pense qu'à l'heure actuelle, c'est pas lui qui sera dans les premiers. '''Yoshimitsu''' : Eh, Gégé, c'est Céline Dion ou c'est Lara Fabian, t'es sûr ? '''Gérard''' : Non, non, c'est Céline Dion. Attends, tu permets... Non, non, mais attends. '''Yoshimitsu''' : Je ne l'ai pas vu. '''Gérard''' : Non, non, mais tu ne l'as pas vu, mais moi, je peux te dire une chose, que c'est Céline Dion. C'est pas Laura Fabian. '''Manu''' : D'ailleurs, elle est super belle dans ce film. '''Moulinette''' : Elle est trop belle. '''Gérard''' : Elle joue un rôle... Elle joue le rôle, si je me souviens bien, elle doit jouer le rôle de l'épouse... '''Phildar''' : De la vieille, non ? De l'iceberg. '''Gérard''' : Ah, mais arrêtez, là ! Parce que ta l'heure, toi, je vais t'éclater ton bénur. Tu vas pas me casser les burnes, ok ? Je pense qu'elle joue le rôle de la femme de Leonardo DiCaprio, mais je ne suis pas sûr. Donc, on va demander à... Yushimitsu, là. '''Yoshimitsu''' : Non, non, non, attention. Yushimitsu, tu restes correct, quand même. Attends, moi, je ne t'appelle pas Gérald. Alors, c'est Yushimitsu. Ben, moi, je suis un vrai fan de cinéma. En plus, on n'est pas très riches. Donc, moi, je n'ai carrément pas la télé. Je ne vais qu'au cinéma. Donc, en fait, les bandes annonces, je ne les vois pas à la télé, quoi. '''Gérard''' : OK, Poussin. Poussin ! ''[silence]''. Oh, putain, mais merde ! '''Manu''' : Mais je n'ai rien fait ! Elle est là ! Mais elle est là ! '''Poussin''' : Non, mais je suis là, hein. Non, moi, ce que je voulais dire, c'est que les bandes annonces, c'est bien, quand même, de pouvoir les voir à la télé. Au moins, ça te donne envie d'aller voir les films. Et au moins, tu peux savoir les extraits de films, comment ça se passe et tout ça. ''[les auditeurs ponctuent par « d'accord », en voix de tête, accompagnés de Moulinette]''. Donc, tu peux y aller et puis tu peux... '''Gérard''' : Celui qui dit, d'accord, super, tu la fermes derrière, s'il te plaît. Merci. '''Poussin''' : Si, par exemple, ça ne t'intéresse pas, ty vas pas. Comme ça, ça te donne un point de vue. '''Cactus''' : Ouais, moi, je m'y intéresse beaucoup aux bandes annonces parce qu'en fait, je ne me fie pas aux opinions des autres et... Quand j'accroche avec une bande annonce, je vais voir le film et quand je n'accroche pas, je ne vais pas le voir, voilà. '''Christian''' : Oui, les bandes d'annonces, moi, je les vois dans les salles de cinéma avant de commencer les films. Ils présentent beaucoup de bandes d'annonces. '''Gérard''' : Que pensez-vous des journaux sur les films X même voire à la télé ? Donc, vous allez réfléchir et on va se retrouver d'ici... Trois minutes. Et on va s'écouter les petits poils de bouc avec des slips et toujours 0800 70 5000 et 3615 code Funradio, rubrique direct. Et toujours l'IRC. On vous retrouve d'ici trois minutes. ''[musique]'' '''Gérard''' : Et voilà, vous venez d'écouter les petits poils de bouc avec des slips et on récupère donc Moulinette. Tulip. Yo... Poussin. Cactus. Christian de la Celle-Saint-Cloud Donc alors, cinquième question, vous l'avez entendue. '''Moulinette''' : Tu peux nous la rappeler, s'il te plaît ? '''Gérard''' : Oh, non, non, mais attendez, je vais pas... '''Yoshimitsu''' : C'est sur le cul, c'est sur le cul. '''Gérard''' : Alors, que pensez-vous des journaux sur les films X ou à la télé ? Putain, mais arrêtez de renifler comme des boucs ! '''Phildar''' : C'est vrai, arrêtez de renifler, quoi. Arrêtez de respirer, c'est tout. '''Yoshimitsu''' : Vas-y, laisse-nous vivre. '''Gérard''' : Si ça te plaît pas, toi, c'est le même prix, tu vas dégager, OK ? '''Phildar''' : Bon, alors, la question, Gérard, on y va, oui. '''Gérard''' : Alors, que pensez-vous des journaux sur les films X et même à la télé ? Donc, on va demander à Moulinette. '''Moulinette''' : Ouais, alors, moi, t'as du pot, parce que j'adore ça. J'adore regarder, en fait, les petits journaux qui vendent des cassettes porno, parce que t'as toujours le résumé de l'histoire avec des mots super crus. Ça donne vachement envie de regarder le film. J'adore également le journal du hard, parce que ça me fait délirer. '''Gérard''' : Non, mais attends, le journal du... '''Moulinette''' : J'ai pas fini. C'est fait sur un ton comique. Et tu vois vraiment des images... '''Gérard''' : Mais non, mais attends, attends, Moulinette, Moulinette. Moulinette ! Moi, attendez, s'il vous plaît, derrière, on se calme. Alors, t'as 21 ans, tu fais quoi dans la vie sans indiscrétion ? '''Moulinette''' : Oui, je travaille dans une boulangerie. '''Gérard''' : Ah, ouais ? Et tu crois que tu peux te permettre de t'acheter... '''Moulinette''' : Mais je dis pas que je les achète, je dis que je les regarde, les... '''Gérard''' : Non, non, mais est-ce que... est-ce que, est-ce que, en travaillant dans une boulangerie... Tu peux te permettre de louer Canal Plus ? '''Moulinette''' : Bah, bien sûr, hein. '''Gérard''' : Ouais, tu te fais combien sans indiscrétion par mois ? '''Moulinette''' : Bah, ça, ça te regarde pas, mais oui, j'ai les moyens d'avoir Canal, je fais ce que je veux, Gérard. '''Gérard''' : D'accord. Tulipe ? '''Tulipe''' : Bah, moi, sans vouloir paraître coincée, bah, ça m'intéresse pas vraiment. Mais bon... si ça intéresse des gens, moi, je trouve que c'est bien. '''Moulinette''' : Ah, faut que t'essayes Tulipe, c'est génial, hein. '''Gérard''' : Non, mais attends, Moulinette, pour l'instant, je demande à Tulipe, ok ? '''Phildar''' : C'est plus Moulinex. '''Gérard''' : Euh... Yo, Yoshimoutchou, là. '''Yoshimitsu''' : Ah, Yoshimitsu, s'il te plaît, reste poli. '''Gérard''' : Ouais, oh, t'as qu'à prendre un autre nom, d'accord ? Parce que tout à l'heure, je vais t'appeler, euh... '''Yoshimitsu''' : T'es gentil, c'est mon vrai nom, je suis Thaïlandais, ça te pose un problème ? Bon, alors, tu te calmes. Bon, je te réponds, maintenant. '''Gérard''' : Oh, oh, oh ! Oh, tu me parles sur un autre ton ! '''Phildar''' : Bah, toi aussi, Gérard. '''Tulipe''' : T'énerve pas, Gérard, ça sert à rien, oh ! '''Yoshimitsu''' : On va repartir sur de bonnes bases, hein. '''Gérard''' : Ouais, ouais, ouais, je pense. Hein, Tony ? '''Phildar''' : Bah, non, y a pas de Tony, ce soir. Ils sont en vacances, je te dis, ils sont... '''Gérard''' : Ouais, ouais, ils sont en vacances, ça m'étonnerait. '''Phildar''' : Ils sont en Afrique. Ils sont en vacances. '''Yoshimitsu''' : Alors, moi, ouais, je suis un gros fan de films X, j'en consomme pas mal. Et, dernièrement, j'ai vu Ouvre la fenêtre que je te mette et Change de trou, ça fume. Et, franchement, je les conseille à tout le monde. '''Gérard''' : Non, mais d'accord, je vois pas du tout le rapport avec la question. Euh, Poussin ? '''Poussin''' : Bah, écoute, je pense que si ça intéresse des gens pour regarder des cassettes porno, moi, je pense que, personnellement, c'est pas utile de regarder des cassettes porno pour prendre son pied. '''Moulinette''' : T'en regardes pas, toi ? '''Poussin''' : Non, pas du tout, non. Je trouve que c'est... Enfin, s'il y en a qui veulent regarder ça, ils regardent ça s'ils veulent, mais... C'est pas intéressant, tu peux prendre ton pied autrement. '''Moulinette''' : Et ton mec, il regarde ça ? '''Yoshimitsu''' : Attends, GG ? '''Gérard''' : Non, attendez, attendez, 5 minutes, attendez. Vous allez répondre après, mais il y a une question... '''Reego''' : Oui, sur IRC, SebZ te demande, Gérard, si tu préfères les films X, Y ou Z. '''Gérard''' : Euh... Aucun des trois. '''Phildar''' : C'est quoi la différence ? '''Gérard''' : X, Y, Z ? '''Reego''' : Non, les films X, ou les films Y, ou les films Z. '''Gérard''' : Bon, déjà, les films X, c'est les films porno. Les films Z, ça existe pas. Et les films, quoi après ? Y, non plus. '''Reego''' : On me dit que ça existe, et qu'en fait, tu connais rien sur le cinéma, et que tu devrais pas faire un débat là-dessus. '''Gérard''' : Eh ben, dans ce cas, s'il n'est pas content, il va au ciné de lui-même. Cactus ? '''Cactus''' : Moi, honnêtement, je m'intéresse pas à ce genre de truc, parce que j'ai assez l'imagination pour me passer de ce truc-là. Mais pour taper un bon délire, ouais, ça me dérange pas de regarder. ''[souffle de quelqu'un qui rit dans le combiné]''. '''Gérard''' : Oh, derrière, quand quelqu'un parle, s'il vous plaît. '''Manu''' : C'est poussin, Gérard. Si, si, je l'enlève, je la remets, c'est elle. '''Phildar''' : Ouais, c'est vrai, en plus. '''Gérard''' : Non, non, bien sûr. Vous voulez la virer... Christian, pour finir ? '''Christian''' : Oui, ben moi, j'adore ça. Ça, j'envoie pas mal de photos à Max. Chez moi, à la Celle-Saint-Cloud, j'ai pas mal de tableaux des femmes avec des culs nus. Même dans les chiottes. '''Phildar''' : Excuse-moi, avant que tu réponds, j'ai une question de Sucette, 22 ans, sur le Minitel, qui demande à quel âge tu as vu ton premier film de cul. '''Gérard''' : Ça, j'y répondrai pas, à elle. '''Phildar''' : Ben pourquoi ? C'est indiscret ? T'en as déjà vu un, ou pas ? '''Gérard''' : Non, mais c'est des questions qui sont atteinte à la vie privée, donc... Sur la vie privée, je réponds pas. '''Phildar''' : À 17 ans ? À 17 ans, tu l'as vu ? '''Gérard''' : Je répondrai pas. C'est tout. '''Yoshimitsu''' : J.J., c'est Yoshimitsu. Tout à l'heure, Poussin... Elle disait qu'elle connaissait pas trop les films. Moi, si elle veut, je me propose gentiment de lui faire découvrir. On pourrait échanger nos coordonnées hors antenne. '''Gérard''' : Non, mais tu vois... Je pense qu'à mon avis, Poussin, elle sera peut-être pas d'accord. '''Poussin''' : Non, mais en fin de compte, ça m'attire pas trop. '''Yoshimitsu''' : Non, mais je vais te faire découvrir, après, on essayera et tout, non ? '''Poussin''' : Non, non, c'est pas un truc qui m'attire. '''Yoshimitsu''' : Tu as ce qu'il faut à la maison ? '''Poussin''' : Non, c'est pas ça, mais je regarde pas ce genre de choses. Je regarde plutôt des cassettes comiques ou des cassettes plus intéressantes que ça. '''Phildar''' : Il y a aussi les mangas. Les mangas, c'est des dessins animés comiques et il y a du cul aussi. '''Gérard''' : Ouais, mais ça... Moi je regarde pas les dessins animés. Donc une question... ça je pense que... c'est dommage parce qu'on n'en a pas beaucoup là. Et c'est bête, parce que cette question-là, je vais la poser. '''Phildar''' : Aux nanas, c'est pour les nanas ? '''Gérard''' : Non, ça concerne certaines personnes... donc c'est un reportage que j'ai vu hier, donc c'est malheureux. Je vais le passer parce que c'est ma question. Avez-vous déjà vu... Avez-vous déjà vu un film sur les routiers ? Ça, je sais, c'était... '''Phildar''' : C'est du cinéma, ça ? '''Yoshimitsu''' : De cul ? '''Gérard''' : Non. Non, non, non, non, non, non, non, non, non, non, non, non, non, attendez, attendez. Je peux vous dire une chose que... Ça, avez-vous déjà vu... Avez-vous déjà vu un film sur les routiers ? Je peux dire une chose que c'est un film qui est passé sur... Je sais plus quelle chaîne. '''Manu''' : Mais c'était pas un film, Gérard, c'était un reportage. '''Gérard''' : Non, non, je sais, il y avait un reportage hier sur les routiers. Mais il y a un film qui est passé sur la 6, M6. '''Yoshimitsu''' : Ça s'appelait Asphalt Fucker. '''Gérard''' : Non, non, ça s'appelait Le Convoi. '''Phildar''' : Non, c'était un non-voyant. '''Cactus''' : C'était un téléfilm, ça n'a rien à voir avec le cinéma, Gérard. '''Gérard''' : Moi, je vais dire une chose, Cactus, que le film est passé sur M6 et qui a duré pendant une heure et demi. C'est un mec... '''<mznu''' : Gérard, Gérard, excuse-moi, il y a eu une grave erreur, pas de marque. Sur la chaîne... '''Reego''' : Et à propos de films sur les routiers, on me conseille Mêlée Ouverte pour routiers à moustache. '''Gérard''' : Non, mais ça... '''Phildar''' : C'est un bon film, je l'ai vu, c'est un bon film. Il y a deux nanas moustachues là-dedans, ça s... grave. '''Gérard''' : Non, non, non, non, non, non, allez. Non, non, allez. On revient sur la question des routiers. Donc, je peux vous dire que ce film-là est bien passé et je l'ai vu. '''Christian''' : Avec Jean Gabin. '''Manu''' : Attendez, excusez-moi, parce que, bon, Gérard, t'as vu le film, explique-nous un peu, peut-être, ce que ça racontait. '''Gérard''' : Ben, attends, on va demander s'il y a des gens qui l'ont vu. '''Yoshimitsu''' : Yoshimitsu, je l'ai vu. C'est l'histoire d'un routier qui glisse sur une plaque de verglas et ça se finit mal. '''Gérard''' : Bon, alors, toi, tu peux dire... '''Manu''' : Ça y est, il a fait ses valises. Ça y est, il est parti. '''Gérard''' : C'est plus la peine qu'il revienne. Tu me prends quelqu'un d'autre sur les 24 lignes. '''Manu''' : Non, sur les 3 lignes, là. '''Gérard''' : Ah, il n'y a plus que 3 lignes ? '''Manu''' : Non, c'est parce que c'est plus le 0800 70 5000, mais le 0803 08 5000 exclusivement. '''Gérard''' : Alors, donc, si vous voulez nous appeler pour réagir sur cette question-là, faites vite, parce que dans 4 minutes, je change de question. '''Phildar''' : Le numéro vert est toujours disponible sur IRC et sur Minitel. '''Gérard''' : Donc, Christian ? '''Christian''' : Oui, ben, moi, zé vu un film comme ça, de con... de routier. '''Phildar''' : De con, oui, tu peux le dire. '''Gérard''' : Non, non, c'est le titre du film. Ça s'appelle Le Convoi. '''Christian''' : Oui, c'est ça, que j'avais vu avec Jean Gabin, puis qu'il traversait un camion. '''Phildar''' : En moto ? '''Gérard''' : Non, non, tu te trompes. Cactus ? '''Cactus''' : Ben, écoute, personnellement, je ne l'ai pas vu, mais si tu me raconterais un petit peu de quoi ça parle, je pourrais te dire un petit peu mon avis. '''Gérard''' : Non, ben, pour l'instant, je vous raconterai tout à l'heure, parce que je peux vous le dire, je l'ai vu, ce film-là, il est très beau à voir. '''Cactus''' : Bon, ben, je ne me ferai pas d'opinion, alors. '''Gérard''' : Non, mais j'expliquerai après. Poussin ? '''Poussin''' : Ben, moi non plus, je n'ai pas vu le film, donc je ne pourrais pas te répondre. '''Tulipe''' : Moi non plus, je n'ai pas vu. '''Moulinette''' : Moi, je ne l'ai pas vu, et par contre, j'ai vu un épisode de Drôles de Dames où elles enquêtaient sur le milieu des routiers, et elles étaient routières. '''Phildar''' : Ah, c'était bien, ça, je l'ai vu aussi, ouais. '''Gérard''' : Non, je pense que là, vous faites illusion. '''Phildar''' : Donc, c'est quoi l'histoire du film ? '''Gérard''' L'hiistoire du film... en fin de compte, c'est un gars qui... qui part avec un autre pote, et bon, c'est malheureux à dire, c'est un black. Donc, il se fait taper sur la gueule. '''Tulipe''' : Et pourquoi c'est malheureux à dire ? '''Moulinette''' : Pourquoi c'est malheureux, Gérard ? '''Phildar''' : Non, parce qu'il y avait un peu de racisme dans l'histoire du film, c'est ça. '''Gérard''' : Voilà. Et en fin de compte, t'as tout le monde, t'as même un truc, ça, c'est ce qui m'a, dans le passage du film, ce qui m'a fait marrer le plus, et je voudrais bien qu'il repasse, c'est que tu vois des prêtres qui sont tous en train de dire « Amen ». '''Phildar''' : Ouais, c'est excellent. '''Gérard''' : Non, mais ils s'amusent, et en fin de compte, ils vont… Après, t'as les routiers… '''Phildar''' : T'as Alain Delon, ouais. '''Gérard''' : Non, non, il n'y avait pas Alain Delon. T'as tous les routiers qui organisent une chaîne, parce que… Non, qui organisent une chaîne, parce que… '''Phildar''' : Parce que t'avais pété celle de ton vélo. '''Gérard''' : Non, parce que lui, sa femme est enceinte, et il veut la retrouver. '''Phildar''' : Ah, ils veulent la porter jusqu'à la clinique. '''Gérard''' : En fin de compte, il se fait arrêter par les flics, il se fait tabasser dessus, à mort. Et en fin de compte, t'as tous les routiers qui se mettent… qui déboulent tous, tu vois, plus de 150 routiers… '''Manu''' : Ah ben, ça doit faire un beau bordel. '''Cactus''' : Ah, la solidarité. '''Phildar''' : Ça fait un paquet de posters de cul aussi. '''Gérard''' : Comme dit Manu… Ça fait un beau bordel. Quand tu vois 150 routiers, tu vois même les mecs qui nettoyent la route avec leur gros camion, là, et qui t'envoient de l'eau des deux côtés. Donc, tu les vois tous qui arrosent. T'as les motards qui les escortent jusqu'au bout. Et après, t'as tous les camions qui dépensent le commissariat. Et après, ils vont dans un stade et ils font le truc du corbillard parce que, soi-disant, qu'il serait morts. Et en fin de compte, tu le revois… '''Moulinette''' : Raconte pas la fin. '''Gérard''' : Non, mais c'est drôle à voir. Et en plus, c'est un camion, c'est un camion-citerne et il y a une nana qui est avec. '''Moulinette''' : Enfin, faut aimer les camions, hein. '''Gérard''' : Ah oui, ça, faut apprécier. Oui, Reego ? '''Reego''' : Oui, la plupart des gens sur IRC disent que les routiers, c'est pas du tout le thème du débat. '''Phildar''' : Et ça, tu le prends dans les dents, quand même. Déjà que t'en as plus beaucoup. '''Gérard''' : Non, mais c'est peut-être pas le thème du débat, mais la question, c'est avez-vous déjà vu un film sur les routiers ? '''Reego''' : Ok. Et il est bientôt 20, on va passer à une autre question. '''Manu''' : Et d'ailleurs, Gérard, avant ta prochaine question, à la place de Yoshimitsu, on va accueillir Multiplex 19 ans de Toulon, où on peut écouter Fun sur 93.1 FM. '''Multiplex''' : Oui, salut, bonsoir à tous. '''Gérard''' : Salut à toi. Donc, t'as écouté la question, non ? '''Multiplex''' : Ouais, c'est bon. Ouais, non, mais je voulais dire que moi, le film, le convoi, je l'ai vu. Je suis derrière toi à 100%. '''Gérard''' : Voilà. Donc, regardez-vous les reportages sur le cinéma ? Eh ben, tiens, Multiplex, on va te demander à toi. '''Multiplex''' : Les reportages sur le cinéma ? Du genre Exclusif et tout ça, c'est ça ? '''Gérard''' : Non, mais pas spécialement Exclusif, n'importe quelle chaîne. '''Multiplex''' : Je préfère regarder le cinéma directement, en fait. Le reportage, la vie des stars et tout, tout ça, ça nous intéresse pas, quoi. C'est un peu leur vie privée, quoi. '''Gérard''' : Ouais, mais attends, Multiplex, je pense que tout le monde va réagir. Ils vont me dire, oui, mais la vie des stars, ça regarde personne. Mais en fin de compte, la vie des stars, c'est quand même eux qui font le film. '''Multiplex''' : C'est quand même eux qui la vivent, la vie des stars. '''Manu''' : Attends, Multiplex. On va demander à Christian de la Celle. '''Manu''' : Non, ben justement, Christian, je viens de l'avoir, il est parti se coucher. Donc, 0803 08 5000 pour nous joindre. '''Gérard''' : Donc, Cactus ? '''Cactus''' : Ben, écoute, honnêtement, je m'intéresse pas trop à la vie privée. Chacun fait sa vie comme il veut. Tant que le film est bon, le reste, après, je m'en fiche, quoi. '''Poussin''' : Ben, jusqu'à présent, j'ai pas vu de reportage sur les films. Mais, pourquoi pas, ça peut peut-être être intéressant. '''Tulipe''' : Moi, je suis de son avis aussi, pareil. '''Moulinette''' : Moi, j'aime bien savoir ce qu'il se passe dans la vie privée des stars. Parce que je suis une grande curieuse. Et j'aime bien savoir qui couche avec qui, enfin, tu vois. Et par contre, leur capacité à bien faire le film, ça passe après, quoi. '''Phildar''' : C'est ça que je me demande. Je me posais comme question dans le cinéma, c'est est-ce que les stars, elles couchent vraiment ensemble dans les films ou pas ? '''Moulinette''' : Ben, ouais, ouais, elles font pas semblant, hein. '''Gérard''' : Non, Moulinette, je pense que tu te trompes. '''Phildar''' : Ils mettent des capotes ou pas ? '''Gérard''' : Ouais, ouais, ouais. '''Phildar''' : Ils couchent ensemble, ils mettent des capotes. Pour éviter d'avoir des... '''Gérard''' : Non, non, mais ça, c'est pour le film sur la scène. '''Multiplex''' : Ouais, mais réel, hein. '''Moulinette''' : Non, non, ils en mettent, hein. '''Phildar''' : Des capotes réelles. '''Gérard''' : Ouais, mais ça, ils mettent vraiment des capotes, mais je peux te dire une chose, que c'est le truc, bon, ben, c'est pour le passage du film. Bon, donc, tu vas les voir, ils vont s'embrasser sur la bouche et autres, ils vont mettre des capotes, ça, ok. Mais c'est simplement que pour le passage du film. Que pour le passage de l'extrait. '''Phildar''' : Ah, ils couchent seulement pendant le passage, ils couchent pas pendant tout le film. '''Gérard''' : Non, non, tout le film, tu les auras pas... '''Phildar''' : en train de coucher ensemble. '''Poussin''' : Comment tu peux le savoir qu'ils mettent des capotes ? '''Gérard''' : Ben, attends, ça se voit, ça se voit vraiment. '''Phildar''' : ça se sent. '''Manu''' : Oui, donc, à la place de Christian qui est parti se coucher, on accueille Rocco, 26 ans, de Tignes. Et la fréquence sur Tignes, c'est 94.3 FM. '''Rocco''' : Oui, tout à fait. Bonsoir. '''Gérard''' : Salut. Donc, pour toi ? '''Rocco''' : Ben, j'ai pas écouté la question. '''Gérard''' : Oh, non, mais je vais pas m'amuser à faire que ça, hein. '''Rocco''' : J'étais au standard, excuse-moi. '''Gérard''' : Ouais, alors, regardez-vous les reportages sur le cinéma. '''Rocco''', ''[retenant difficilement un fou-rire]'' : Ben, oui, tout à fait. Ouais, tout à fait, ouais. '''Gérard''' : T'aurais pas fumé la moquette ? '''Rocco''', ''[tousse pour tenter d'expulser son fou-rire]'' : Non, non, pas du tout, pas du tout. '''Gérard''' : Non, t'aurais pas bu un coup ? '''Phildar''' : Il est un peu malade, je crois. '''Rocco''' : C'est pas évident de parler comme ça. '''Gérard''' : Ouais, tu serais pas malade ? '''Rocco''' : Un petit peu. '''Gérard''' : Ouais, un petit peu. Alors, si t'as rien à dire dans ce cas-là... '''Manu''' : Non, oui, moi, il m'a pas raconté plein de trucs au standard, mais bon. '''Gérard''' : Non, mais attends, Manu. Le premier s'est bien passé, le deuxième, pour l'instant, il a l'air de se passer impeccab. Non, mais je voudrais pas qu'il foire. '''Manu''' : Non, mais, tranquille. '''Reego''' : Non, c'est sur IRC, y'a un... Enfin, c'était juste pour dire à Manu qu'il faut qu'il rappelle Arnett. '''Gérard''' : Non, non, non. '''Phildar''' : Non, pour les cadeaux, parce qu'on lui a offert un CD de Céline Dion. '''Rocco''' : Ça, faut rappeler Arnett. Pourquoi pas. '''Gérard''' : Ouais, alors, Rocco, tu vas te coucher. D'accord, Tony ? '''Rocco''' : Pas du tout. '''Gérard''' : Ouais, ouais, d'accord, Tony. Allez, bonne nuit. Allez, bonne nuit. '''Phildar''' : Salut, Tony. C'est coupé. Coupé, c'est coupé, hein, avec Manu. '''Manu''' : Non, bah, moi, tu me dis qu'on coupe, on coupe, hein. '''Gérard''' : Non, mais, tu vois, j'aime pas trop avoir... '''Phildar''' : Il aime pas trop, ça, tu le sais. '''Gérard''' : J'aime pas, c'est pas parce que le chef, il est plus là que les souris dansent, hein. OK ? ''[applaudissement du studio]''. '''TUlipe''' : Bravo, Gérard. '''Gérard''' : Donc, tu me... Tu me... Tu m'envoies le disque, parce qu'il reste trois questions, donc... '''Phildar''' : En pleine gueule ? Tu le veux en pleine gueule ou pas ? Non, mais je sais pas, je te demande. '''Gérard''' : Tu veux un café en pleine gueule ? '''Phildar''' : Non, non, mais tu peux peut-être poser la question, on gagnera du temps, déjà. Comme ça, ils pourront réfléchir. '''Gérard''' : La Formule 1 est-elle un moyen de film ? '''Phildar''' : Oh, non, c'est naze. Non, non, tu me dégages cette question, c'est... '''Reego''' : Sur IRC, on m'a dit, s'il parle de Formule 1, il faut lui dire que c'est pas le thème du débat. '''Phildar''' : Les auditeurs, vous avez déjà vu un film sur la Formule 1 ? '''Gérard''' : Oui, oui. ''[les auditeurs dient non]''. Si, si, si, si, ça existe, ça existe, ça existe. '''Reego''' : Sur IRC, c'est marqué. '''Gérard''' : Non, mais sur IRC, ils me diront ce qu'ils veulent, mais moi, je peux vous dire que ça existe. '''Phildar''' : Mais t'as vu ça où, toi ? '''Gérard''' : Voilà. D'accord, super. ''[musique]'' '''Phildar''' : C'était les Rita Mitsuko avec le sexe des bébés éléphants est plus gros que le tien. '''Gérard''' : Donc, on va faire un petit... statistique... '''Phildar''' : Sur le cinéma. Et vous pouvez toujours appeler au 0803 08 5000 si vous voulez réagir, bien sûr, aux statistiques de Gérard sur le débat qui porte sur le cinéma. '''Gérard''' : Et donc, toujours 3615, code... '''Phildar''' : Fun Radio, rubrique direct... où il y a encore sucette, tige de cote, je sais pas ce que c'est. '''Manu''' : Voilà, on accueille Tony, d'ailleurs. '''Tony''' : Oh, bonsoir. Ça va bien se passer. '''Gérard''' : Non, non, mais Tony, je t'ai dit quelque chose. '''Phildar''' : De toute façon, t'as géré ça hors antenne, Gérard, donc c'est bon, on peut y aller. '''Gérard''' : Donc, alors, les statistiques sur le débat sur le cinéma. Donc, à la question, que pensez-vous du cinéma ? Donc, il y a 40 personnes qui ont répondu... Bah, voilà, c'est tout. On répondu à la question... '''Phildar''' : 40%, pas 40 personnes. '''Gérard''' : Ouais, 40%, mais moi, j'aime bien quand on me donne des trucs comme ça. À la question, qu'avez-vous vu dans les cinémas, donc ? Alors, 20% aiment les pop-corn, donc je vois pas du tout le rapport avec le film. 30% aiment les ouvreuses, je vois pas du tout. Et 50% aiment rester chez eux. '''Phildar''' : Ah, il y a pas beaucoup de gens qui aiment le cinéma, alors. '''Gérard''' : Donc, 30% qui aiment les ouvreuses. Ça, j'en ai rien à foutre, parce que ça rentre pas dans les films. '''Phildar''' : C'est quoi, les ouvreuses ? '''Gérard''' : Les ouvreuses, c'est celles qui te placent. '''Phildar''' : Mais il y en a plus beaucoup, en plus. '''Gérard''' : Si, je crois qu'il y en reste encore pas mal sur... '''Phildar''' : Il y en a deux sur Nantes, je crois. '''Gérard''' : Ouais, et puis 20% qui aiment les pop-corn. Alors, ça, c'est les trucs qu'ils nous donnent pendant l'entract. '''Phildar''' : Ouais, mais c'est vrai que les meilleurs pop-corn qu'on a pu manger, c'est quand même au cinéma. '''Gérard''' : Ouais, mais ça, je vois pas du tout le rapport, donc pour moi, c'est... '''Phildar''' : Donc, il y en a qui vont peut-être au cinéma seulement pour manger les pop-corn, qu'est-ce qu'on pense ? '''Gérard''' : Ou voir les ouvreuses. Enfin. Alec, oui, Reego ? '''Reego''' : Non, non, vas-y. '''Gérard''' : Parce qu'Arnette, c'est pas la peine d'essayer d'appeler, on te... Ça sert à rien. Ça servira à rien pour toi. Donc, alors, à la question pour ou contre le cinéma, donc 30% qui sont pour. Donc, j'avais pas posé la question pour ou contre le cinéma, donc ça, je vois pas pourquoi qu'on me donne ça. '''Phildar''' : Et peut-être que les auditeurs veulent répondre aussi aux questions des stats, Gérard. '''Gérard''' : Ouais, mais 20% sont pas contre. 18% sont d'accord. Et 100% sont contre. '''Phildar''' : Il y a une erreur de calcul, je crois. C'est 99. '''Gérard''' : Ouais, ouais. Non, mais à mon avis, ça, c'est vous, là. Bande de guignols, là. Hein Olivier ? Non, c'est pas toi, non. Non, c'est pas toi. C'est jamais toi. Non, non, c'est jamais toi. C'est jamais toi qui fais des conneries. '''Olivier''' : Mais j'ai rien fait, non. '''Gérard''' : À la question, quel est votre acteur préféré ? Alors, 100% ont répondu Georgette Bitoun pour sa prestation dans Les Pigeons aiment les Goélands. Alors, ça, Olivier, ça, je vais te dire une chose, que maintenant, c'est toi. Alors, ça, c'est toi. Alors, il y a 100% qui dit, vos gueules, les mouettes, vlà les Goélands. Donc, tu ferais mieux de... Pas pour moi, tu me mouettes, alors là les Goélands. Allez, hop, dégage. '''Phildar''', ''[hilare]'' : Tu peux rappeler le titre du film ? '''Gérard''' : C'est 100% Les Pigeons aiment les Goélands. Donc, à mon avis, c'est 100% vos gueules, les mouettes, vlà les Goélands. Ok, Olivier ? Merci. Merci, Olivier, pour le larsen. Alors, à la question, quel est le dernier film que vous avez vu ? Alors, 50% ont vu O, les beaux camions. O, les beaux camions. '''PHildar''' : Je l'ai vu aussi, il est super, celui-là. '''Gérard''' : Avez-vous vu CB ? Hein, Olivier ? Et 100% ont vu, C'est pas le thème du débat. Olivier ! Olivier ! ''[il froisse le papier et le jette vers Olivier]'' Tu prends ça et tu vas te torcher les fesses avec. '''Olivier''' : Mais c'est pas moi qui l'ai fait. '''Gérard''' : Non, non, c'est pas toi. '''Phildar''' : Mais c'est les Français qui ont répondu, c'est cool. '''Gérard''' : Non, non, non, non, non, non. Ça, pour moi, c'est des conneries. '''Reego''' : C'est un sondage. '''Gérard''', ''[adouci]'' : Non, non, ouais, mais même pour moi, c'est des conneries. '''Multiplex''' : C'est un sondage à la Goldo, ça. '''Gérard''' : Ouais, ouais, ça, c'est un sondage bidon. '''Olivier''' : C'est Sam Zell qui nous l'a passé. '''Gérard''' : Bah oui, c'est Sam. T'as raison. Tu veux que je lui garde et que je lui fasse voir demain ? '''Tony''' : Et tu pourrais rajouter sur ta liste, éclate-moi la chatte à la grenade. '''Gérard''' : Ouais, bah, toi, tu ferais mieux d'éclater ta voix basse. OK ? Merci. Alors, les montgolfières ont-elles sorti un film ? '''Phildar''' : Les sœurs montgolfières. '''Poussin''' : Qu'est-ce que t'entends par là, Gégé ? '''Gérard''' : Alors, les montgolfières... Les montgolfières, c'est un ballon dirigeable qui s'allume avec du gaz. '''Poussin''' : Donc, ce n'est pas des parachutes, alors ? '''Gérard''' : Non, c'est un zizi avec des poils qui tombe tout seul du désert et qu'on retient avec quelque chose. '''Cactus''' : Eh ben voilà ! Maintenant, je comprends déjà beaucoup mieux ce que tu veux dire. '''Poussin''' : Moi, personnellement, je n'en ai jamais vus. '''Tony''' : Tu vois des b... avec des... '''Gérard''' : Tony, Tony, Tony, Tony, Tony, Tony, Tony. '''Phildar''' : Ça va ? '''Gérard''' : Tony, tu vas la fermer parce que les ..., je ne veux pas entendre ça à 2h36 du matin. Alors, tu vas voir Manu au standard. '''Phildar''' : Il va te donner, en fait, les synonymes qu'on peut dire à cette heure-là. Et tu reviens, ne t'inquiète pas. Donc, Poussin voulait répondre à toi. '''Poussin''' : Donc, ce que je voulais dire, Gégé, c'est que les montgolfières, ça n'a rien à voir avec le cinéma. Je ne comprends pas pourquoi tu... '''Gérard''' : Non mais il y a des films sur les montgolfières. '''POussin''' : Oui, mais ça dépend si tu parles de reportages, oui, mais si tu parles de films, je n'en ai jamais vu. '''Gérard''' : Ben, tu as qu'à regarder de temps en temps la télé. Oui, Reego ? '''Poussin''' : Non, mais je n'ai pas le temps de regarder la télé. '''Reego''' : Non, mais c'est bon, Poussin, merci. À propos de montgolfières, il y a Yankee qui demande si tu as un cerveau lent. '''Gérard''' : Non, mais de toute manière, c'est pareil. Les cerfs-volants, tu les tires sur des trucs, mais il faut avoir du vent, pour les cerfs-volants. Les montgolfières, c'est avec du gaz. '''Phildar''' : D'accord, mais ça, c'est super calé dans le ciné, ça. '''Manu''' : Gérard, excuse-moi, on va peut-être revenir, justement, dans le thème du cinéma, parce que là, je crois qu'on s'égare. Donc, allez, on y va. '''Gérard''' : Donc, tiens, Tony, maintenant, toi. '''Tony''' : Oui, mais le problème, c'est que moi, je suis tout le temps au standard, pour un rien, pour un oui, pour un non. Alors, moi, je voudrais bien que tu me répètes la question, s'il te plaît. '''Gérard''' : Non, mais attends. Non, non, mais tu as entendu la question avant que tu ailles au standard. '''Tony''' : Ah, les sœurs mongolfière ? Oui, je suis allé voir tous leurs films. '''Phildar''' : D'accord, et qu'est-ce que tu en as pensé ? '''Tony''' : Franchement, c'est de la balle. '''Phildar''' : C'est planant, non ? '''Tony''' : Oui, c'est planant, c'est le mot. J'aime bien passer comme ça, Philippe, quand tu es de bonne humeur. Je te kiffe. '''Cactus''' : Oui, c'est vachement planant, comme film. '''Multiplex''' : Moi, je suis tout à fait d'accord. C'est très bien, mais il ne faut pas se moquer de ces gens-là. Il n'y a pas de quoi être fier, c'est tout. '''Tulipe''' : C'est super aussi, moi, je trouve. '''Moulinette''' : Oui, moi, j'ai vu pas mal de films sur les Mongols. Maintenant, savoir s'ils étaient fiers, je ne sais pas. '''Gérard''' : Bon, alors, Moulinette. '''Manu et Phildar''' : Ils n'ont pas compris la question. '''Gérard''' : Non, non, mais je pense qu'on parle des Mongolfières, on ne parle pas des Mongols. D'accord ? Parce que toi, pour l'instant, t'as une tête de Mongole, toi. '''Multiplex''' : Et si je te dis trisomie 21 ? '''Moulinette''' : Toi, t'a un QI de mongol. '''Gérard''' : Alors, Moulinette, bonne nuit. Moulinette, au revoir. '''Tony''' : On appelle Arnette. '''Multiplex''' : Ou Goldo. '''Gérard''' : Non, non, Moulinette, bonne nuit. De toute manière, on ne rappelle plus personne, là. Ça va être terminé, alors. '''Olivier''' : Ah, c'est dommage, il y avait des filles qui voulaient te parler. '''Multiplex''', ''[en voix de tête]'' : Allô ? Oui, Gérard ? C'est Conchita. '''Gérard''', ''[crescendo]'' : Non, non, mais c'est bon, c'est pas la peine, j'ai dit. Conchita, tu vas faire ton ménage. Donc, dernière question. C'est la dernière, et là... Oui, c'est la dernière, il est 40 et on arrête après, c'est tout. '''Tony''' : Ah, mais il faut ller jusqu'à 3h, là. '''Gérard''' : Non, non, mais on arrête après, c'est tout. '''Tony''' : T'as signé un contrat, il faut aller jusqu'à 3h. '''Gérard''' : Mais attends, si t'es pas content, Tony, tu dégages. '''Phildar''' : Non, mais attends, c'est vrai, Gérard. T'es payé pour trois heures de débat, si tu commences à te casser avant la fin... '''Manu''' : On pourrait faire encore 2 questions. '''Phildar''' : Non, mais j'aurai une question, j'aurai une question cinéma, après. '''Multiplex''' : Il faut qu'il enlève 100 francs de ticket au restaurant, c'est tout. '''Gérard''' : Alors, là, tu le dégages. '''Tony et Multiplex''' : C'était Polo. '''Manu''' : Bon, allez, on va reprendre, là. On enchaîne la question. '''Gérard''' : La France sort-elle plus de films qu'aux Etats-Unis ? '''Phildar''' : Ça, c'est une question intéressante. '''Multiplex''' : Tout à fait, tout à fait. Tout à fait, je pense que la France sort, elle sort bien, elle sort tard, et beaucoup plus qu'aux Etats-Unis, bien sûr. '''Gérard''' : Non, mais attends. Multiplex. La France sort-elle plus de films qu'aux Etats-Unis. Je ne vois pas du tout avec ce que les Français auront à faire dans la rue. '''Multiplex''' : De toute façon, les chiffres, on leur fait dire ce qu'on veut. '''Tony''' : Oui, mais la France, elle sort plus que 2 films par an. '''Poussin''' : Gérard ? Donc, c'est Poussin. Moi, ce que je voulais dire, c'est que les films en Amérique, ils sortent plus... Enfin, ils sortent en première... Enfin, en première fois, par rapport aux Français. Ils sortent d'abord en Amérique et après, on les voit, ils sortent en France. '''Multiplex''' : Non, non, non, on n'a rien à voir. Regarde, un film, regarde, un film français, Les Visiteurs, tu ne vas pas me dire qu'il est sorti d'abord aux Etats-Unis. '''Tony''' : Non mais quand Sandy et Gérard, ils sont allés à New York, c'était un peu Les Visiteurs. '''Poussin''' : Godzilla, il est sorti en Amérique d'abord. '''Gérard''' : Oui, et il est sorti en avant-première en Amérique. Tulipe ? ''[silence]''. TUlipe ? '''Tulipe''' : Ah, pardon, excuse-moi, Gérard. Parce que je m'occupe d'une petite, alors elle pleurait. Excuse-moi. '''Gérard''' : Ah, non, non, mais dans ces cas-là, si t'as quelqu'un avec toi, ça sert à rien de réagir. '''Phildar''' : Non, mais elle fait du babysitting. ''[prononcé babysittinge)''. '''Multiplex''' : Elle a besoin d'un rempotage, Tulipe. Moi, je vais te rempoter. '''TUlipe''' : Eh bien, moi, je sais pas. Franchement, je sais pas. Pour la France et les Etats-Unis, je sais pas du tout. '''Gérard''' : Alors, moi, je peux vous dire une chose, que le film Godzilla, qu'on a été voir en avant-première, est sorti à New York... '''Phildar''' : Alors, explique-nous, Gérard, pourquoi, alors, Godzilla est sorti à New York en avant-première et pas en France, par exemple ? '''GTony''' : C'est pour se faire pardonner parce qu'il a détruit New York. '''Gérard''' : Non, non, non, non, non, non. Non, c'est un film qui est sorti à New York en premier. Ça a été sorti sur New York parce que c'est... C'est pas parce que c'est un film que Jean Reno a fait en avant-première, là-bas, dans les villes de New York, que... ça sort en premier. Donc, il est sorti, d'abord, en avant-première. Après, il est sorti sur les écrans parisiens depuis le 16 septembre. ''Multiplex ''' : En avant-dernière. '''Gérard''' : Ben non, arrêtez vos conneries. Cactus ? '''Cactus''' : Ben, moi, je dirais que... que je laisse la parole à quelqu'un d'autre parce que je ne sais pas quoi te répondre. '''Phildar''' : Pourtant, c'est un sujet intéressant. Moi, j'aimerais bien savoir pourquoi, en fait... '''Gérard''' : Non, mais, hé, Cactus ? T'as jamais été au cinéma, encore ? '''Cactus''' : Mais si, j'ai déjà été au cinéma, Gérard. '''Gérard''' : Non, mais attends, t'as jamais été voir des films ? '''Cactus''' : Mais si, j'ai été voir Le Titanic. J'ai déjà été voir des films, t'inquiète pas pour moi, Gérard. '''Phildar''' : Non, c'est ce que je voulais te demander, Gérard. Pourquoi... Ah, Reego, une question IRC, pardon. '''Reego''' : Oui, on a Riff qui demande s'il y a plus de pollution en Amérique qu'en France. '''Gérard''' : Non, mais ça... On est plus... '''Manu''' : Reego, tu suis rien, hein. '''Gérard''' : Non, non, mais... Non, non, mais c'est pas Reego, c'est l'IRC. La pollution, c'est terminé depuis une heure, donc... '''Moulinette''' : Il y en a eu quand Gérard est arrivé... '''Phildar''' : Donc, ce que je voulais te demander, Gérard, c'est que tu sais, il y a des films français, par exemple, je sais pas si t'as vu 3 hommes et un coufin... Et ce film-là, tu sais, c'était un succès. Et les Américains l'ont copié et ont refait le même film en Amérique. '''Tony''' : 3 hommes et un oursin, ouais. '''Phildar''' : Qu'est-ce que tu penses, en fait, des versions dans le cinéma, par exemple, des films français qui ont du succès et qui se font aux Etats-Unis après ? '''Multiplex''' : Longue ou courte. '''Gérard''' : Non, mais attendez, s'il vous plaît. Oh, on se calme derrière, je réponds. Non, mais ça, de toute manière, que ça soit des films qui sortent en France, qui soient repris par des acteurs américains, de toute manière, en principe, ce qui sort en premier, c'est des films américains, non français. '''Moulinette''' : N'importe quoi... '''Gérard''' : Quoi, n'importe quoi, si ça te plaît pas, tu vas te faire foutre. OK ? '''Phildar''' : Non, mais tu vois, parce que, en fait, le film avait tellement de succès en France que les Américains nous ont copiés. Est-ce que tu trouves ça normal ? '''Gérard''' : Non, mais ça, c'est un truc, c'est à eux de voir. C'est pas à nous, parce que c'est... On sait pas... '''Multiplex''' : C'est une histoire de fric. C'est une histoire de fric, c'est tout. '''Gérard''' : Oui, mais de toute manière, c'est pas qu'il y a eu une histoire de fric, c'est de savoir... Mais c'est de savoir les nombres d'entrées qu'ils ont fait en salles. '''Multiplex''' : Mais non, il y a des dessous de table. '''Gérard''' : Non, mais attends, parce que moi, le film Godzilla, il a fait plus d'un million d'entrées en France. Et nous, quand on y a été, quand on a été le voir à New York en avant-première, il y a eu 150 000 personnes. '''Moulinette''' : Tout ça pour toi ? '''Gérard''' : Non, mais il y a eu 150 000 personnes et faites-moi confiance que 150 000 personnes dans une salle qui hurlent dès qu'ils voient Jean Reno dans un passage, la salle se met à hurler. '''Manu''' : Pourquoi ils hurlent ? Il n'est pas beau, Jean Reno ? '''Gérard''' : Non, mais c'est pas qu'il n'est pas beau, c'est que dès qu'ils le voient dans la... Dès qu'ils l'ont vu sur un passage, par exemple, quand il passe à... '''Phildar''' : Un clouté, un passage clouté, tu vois. '''Gérard''' : Non, quand il passe avec une voiture de l'armée et qu'il mâche un chewing-gum pour pas qu'on le reconnaisse, tout le monde, tu les entends tous hurler même quand il joue le rôle du médecin là-dedans. '''Manu''' : Il mâche un chewing-gum pour pas qu'on le reconnaisse, donc. '''Multiplex''' : C'est un gros chewing-gum alors. '''Tony''' : Alors que moi, personne ne me reconnaît, je suis vraiment une merde. '''Gérard''' : Bon, tais-toi, toi, Tony. '''Multiplex''' : Et toi, attends, Gégé, et toi, New York, les gens, ils ne t'ont pas reconnu du coup, alors ? Vu qu'il y avait Jean Reno ? '''Gérard''' : Mais attends, de toute manière, on paraît... '''Phildar''' : C'est vrai qu'il t'a un peu pris la vedette, quand même. '''Gérard''' : Non, non, il n'y a aucune personne qui nous a reconnu. '''Poussin''' : Est-ce que tu penses que les acteurs américains jouent mieux dans les films que les acteurs français ? '''Gérard''' : De toute manière, maintenant, voir comment qu'on a des films en salle, je vais te dire une chose, je pense que c'est les Américains qui vont bientôt nous dépasser. '''Tony''' : Non, mais t'es d'accord, Gérard, qu'il y a une différence entre Al Pacino et Bernard Ménez, quand même. '''Gérard''' : Non, mais attends, toi, Tony, Tony, dégage. Je veux plus t'entendre. '''Manu''' : Non, non, il a raison. '''Reego''' : Il a raison. '''Gérard''' : Non, mais moi, je peux vous dire une chose, qu'à l'heure actuelle, maintenant, on n'a plus grand-chose parce que maintenant, il faut qu'on prenne des films américains. '''Multiplex''' : Et pourquoi pas des films du Turcménistan ? '''Manu''' : Non, regarde Un dîner de cons, justement, on en parlait tout à l'heure. Un dîner de cons, c'est français, ça a bien marché. '''Gérard''' : Oui, mais attends, un dîner de cons, c'est sorti en cassette vidéo, ce n'est même pas sorti sur les grands écrans. '''Manu''' : Je l'ai vu au cinéma. '''Cactus''' : Et toi, tu préfères quoi, Gérard ? Les films américains ou les films français ? '''Gérard''' : Moi, je n'en ai rien à foutre. '''Cactus''' : Argumente ? '''Gérard''' : Moi, personnellement, pour l'instant, je n'ai pas les moyens de me payer le ciné. '''Phildar''' : Non, Gérard, il n'a pas les moyens d'aller au ciné, il préfère aller à New York voir le cinéma. '''Gérard''' : Donc, voilà. Je pense que vous avez été contents de... '''Phildar''' : De sa réponse. Ça vaut le détour. '''Multiplex''' : Ce que j'aurais voulu savoir, c'est si une carrière, un jour d'acteur se présentait à toi, parce que tu as commencé dans la radio, mais tu vas peut-être aller plus haut. Si une grande carrière d'acteur, comme tout à l'heure, on parlait de Jean Gabin ou Lino Ventura, se présentait à toi, est-ce que tu penses que ça t'intéresserait ? '''Gérard''' : Je peux te dire une chose que là-dessus, personnellement, non. Je préfère rester à la radio que d'aller faire du cinéma. '''Multiplex''' : Il y a des rôles qui sont faits pour toi. '''Phildar''' : Justement, en parlant des gens qui font un autre métier et qui veulent se lancer dans le cinéma, il y a Sucette sur le Minitel qui te pose la question, Gérard, est-ce que tu trouves qu'Ophélie Winter est une bonne actrice ? Et que penses-tu des chanteurs qui se lancent dans le ciné, justement ? '''Gérard''' : Ça, chacun voit midi à sa porte dans les chanteurs. C'est vrai qu'on n'en a pas parlé. Je n'ai pas pensé à faire la question. C'est vrai qu'il y a beaucoup de chanteurs qui se lancent dans le cinéma. '''Phildar''' : Est-ce que tu trouves que c'est bien et est-ce qu'ils sont bons dans le cinéma aussi bien que dans la chanson ? '''Gérard''' : Ophélie Winter, elle, je la vois mieux dans la chanson. Il y a Michel Sardou que j'adore. Lui, il a sorti deux films. '''Phildar''' : Sur CD ? '''Gérard''' : Il a sorti Cross, qui était pas mal. Il y a Patrick Bruel aussi. '''Multiplex''' : Michel Sardou, il vaut mieux qu'il arrête de chanter, il vaut mieux qu'il arrête de faire des films et qu'il fasse de la poterie. '''Gérard''' : Oui, qui c'est qui vient de dire ça ? Multiplex... '''Phildar''' : Chacun ses goûts, Gérard. '''Tony''' : Qu'est-ce que tu as pensé de la prestation de Guy Béard dans Scarface ? '''Gérard''' : Non, mais là, tu te trompes. Allez, conclusion du débat. '''Moulinette''' : À chier. '''Gérard''' : À chier. Qui c'est qui vient de dire ça ? '''Multiplex''' : Une fille. C'est toujours les filles qui foutent le bordel. Je ne sais pas si tu as remarqué. Avant, c'était les garçons, maintenant, c'est les filles. '''Manu''' : Allez, chacun votre tour. Multiplex, conclusion. '''Multiplex''' : Multiplex, moi, je pense que Gérard, tu pourrais faire carrière dans le cinéma. Je pense que notamment des rôles comme celui de Quasimodo te conviendra très bien. '''Manu''' : Ou le bossu de Notre-Dame, non ? '''Multiplex''' : C'est le même, c'est celui-là. '''Tulipe''' : Moi, j'ai trouvé ça bien. C'est sympa. '''Cactus''' : Moi, je pense que le cinéma n'existerait pas, on n'aurait pas eu de débat ce soir. Je trouve que c'est pas mal. '''Tony''' : J'ai trouvé ça trop calme comme débat. Déjà, je voulais te le dire. Il faudrait que tu respectes un petit peu plus ton équipe parce qu'elle est quand même là pour travailler avec toi. '''Gérard''' : Non, mais attends, Tony, déjà pour commencer, l'équipe ce soir, elle a bien travaillé. Je voulais la remercier. '''Phildar''' : Merci, chef. '''Gérard''' : Je voulais remercier Phildar quand même qui a fait les deux débats à la réa. '''Phildar''' : Et tu sais que ça me démangeait. '''Gérard''' : Manu, qui a fait un peu n'importe quoi au standard, mais c'est pas grave. '''Manu''' : C'était nickel, il n'y a pas eu une insulte, pas eu un truc. '''Gérard''' : Oui, mais quand je demande de retirer des gens, c'est pas la peine d'essayer de les passer sur d'autres personnes. Sur le premier débat, c'est ce que tu as voulu jouer et puis là, c'est le deuxième avec Ananas et l'autre et Multitex. On a vaguement repéré. '''Tony''' : D'ailleurs, c'est Goldo, je te le dis. '''Manu''' : Non, ce n'est pas possible, c'était un 03. Il n'a pas déménagé, Goldo, je l'ai vu ce midi. '''Gérard''' : Je vais voir parce que j'ai gardé les fréquences. '''Tony''' : Je n'aime pas trop que vous fassiez des coups comme ça à mon Gérard, je vous le dis. '''Phildar''' : T'es un peu lèche-botte, Tony. '''Gérard''' : Mais Rocco qui s'est fait passer pour Tony, donc on l'a reconnu tout de suite. '''Tony''' : Non, ça c'est faux. C'est faux parce qu'ils m'ont appelé un quart d'heure avant la fin. Et Reego, tu l'as pas remercié ? '''Gérard''' : Non, mais Reego, de toute manière, il a fait comme le mardi dernier. Il a bien travaillé. De toute manière, si j'ai qu'un truc à dire, c'est Reego qui a le mieux. C'est le mieux qui a travaillé parce qu'il a voulu que tout le monde réagisse sur l'Internet et je remercie. '''Reego''' : Et d'ailleurs, pour la conclusion, il y a Arnette sur l'IRC qui chie sur ton débat. '''Gérard''' : Eh bien, Arnette, moi je te... '''Phildar''' : On a bien compris. '''Poussin''' : Donc c'est vrai que les salles de cinéma, s'il n'y en avait pas, on ne pourrait pas en parler et puis on ne pourrait pas aller voir les films, c'est clair. '''Gérard''' : Oui, mais il faut dire une chose que les salles de cinéma, c'est qu'il y en a beaucoup en France et elles sont moins fréquentées qu'avant. '''Poussin''' : Mais il n'y en a pas beaucoup par contre dans les petites campagnes. '''Gérard''' : Oui, mais ça dans... Oui, c'est... '''Phildar''' : Excusez-moi, justement sur Minitel, il y a une question de Sucette encore qui dit étant donné qu'il y a trop de salles de cinéma, est-ce qu'il ne faudrait pas en abandonner sur le bord de la route ? '''Gérard''' : Non, mais ça, voilà, Sucette, tu vois, je ne préfère même pas te répondre à ta question. Donc la semaine prochaine... '''Phildar''' : Ta conclusion Gérard sur le cinéma avant ? '''Gérard''' : Non, mais attends, je vais annoncer le thème du débat de la semaine prochaine. Donc la semaine prochaine, le premier débat, comme ça va intéresser tout le monde et qu'il y a longtemps qu'on ne l'a pas fait. Disons qu'on l'a fait mais on va le refaire. On va faire les boîtes de nuit. '''Phildar''' : Oui, le milieu de la nuit, les DJ, tout ça. '''Gérard''' : Voilà. Et le deuxième débat, on verra. '''Phildar''' : D'accord. Tu vas réfléchir chaque semaine et tu vas donner ta conclusion sur le cinéma, bien sûr. '''Gérard''' : Donc en conclusion sur le cinéma, je pense que ce soir ça s'est bien passé, les deux débats se sont bien passés, personne ne s'est énervé. Ça, c'est ce qui m'a fait le plus plaisir et ça fera plaisir à Max s'il est encore dans le quartier mais je ne pense pas. Et donc, j'espère que la semaine prochaine ça sera pareil. Et donc, on va se quitter pour finir avec Banga avec Montez-moi dessus sans selle et vous allez avoir Rousseau Rousseau pour la nuit sans pub et bien sûr demain 22h minuit Max, le Star System. Bonne nuit à tous et à la semaine prochaine. == Le débat sur les boîtes de nuit == === Contexte === Cette semaine, la routine semble reprendre ses droits. Pourtant, il semble bien que l'équipe, et en particulier Phildar, tente de réintroduire des éléments comiques dans l'émission. Par ailleurs, Gérard prenant confiance, il libère son instinct de bavard et l'émission renforce encore son surréalisme dans le contenu de ce qui y est dit, largement alimenté par Max. Cette tendance n'est pas sans risque de dérapage, et cette émission en est une belle démonstration. Alimenté par des auditeurs à l'esprit vif, rebondissant sur d'anciennes expressions qu'il utilisait dans le cadre de ses conseils comme « Sans indiscrétion » ou d'autres liées à ses courriers comme « Ca se termine, au tribunal », ils accélèrent le déroulé de la scène, ce qui rend gérard confus, et l'expose aux vrais dérapages. L'équipe contrôle et surtout, on le voit ici, il n'y avait pas la même sensibilité au sujets de genre et autres. On peut en effet parier que en 2026, nombreux seraient ces dérapages qui l'auraient exclu de l'antenne alors qu'ici, un simple recadrage suffisait. C'est l'image de cette liberté qui reste intéressante aussi à explorer à travers ces programmes, liberté qui peut d'ailleurs se discuter au regard des cibles de ces propos parfois maladroitement outranciers. Enfin, c'est le premier débat où Gérard accordera de l'importance à l'IRC et au nombre de connectés. Nous y reviendrons, cet élément prendra une ampleur imprévisible ensuite. === Les personnages === * Phildar et Manu * gérard Cousin : Gérard * Franck Bargine : Max * Igor : Reego * Crouton (idem que Tulipe la semaine dernière) * Axel : Oignon * Tuteur, Col roulé * Tony Morestin : Tony * Mladen Derek : * Olivier Bouchet : Olivier de la pro === Transcription === '''Gérard''' : Et voilà donc bonsoir à tous, 0h42, on est un petit peu en retard donc c'est un peu de ma faute parce que j'ai eu des petits problèmes mais c'est pas grave... Donc là vous venez d'entendre deux passages des Bee Gees, Philippe si tu peux... '''Phildar''' : Helle woman et le deuxième je te le laisse annoncer quand même. '''Gérard''' : Ouais mais... Steve... Alave Steve Alave, donc c'était le un, je pense que ça devait être la fièvre du samedi soir... '''Phildar''' : Non c'est le deuxième, la fièvre du samedi soir et le premier c'était... Ouais mais c'était quoi comme film à peu près ? '''Manu''' : Rocky IV je crois. '''Phildar''' : Ouais ça devait être dans Rocky... Enfin bref, c'était un bon film. '''Gérard''' : Voilà, donc le premier débat il va porter... Il va porter sur les boîtes de nuit. Donc on va accueillir pour ça Crouton, 21 ans de Beauvais. On peut écouter Funradio 101.9... A mon avis, tu vois, Manu... A mon avis Beauvais, on écoute, Beauvais c'est dans l'Oise '''Manu''' : Ouais, c'est 101.9. '''Gérard''' : Non, à mon avis je pense pas. '''Manu''' : Bah c'est marqué sur mon truc. '''Gérard''' : Ah ouais mais c'est marqué sur ton truc mais ton truc il doit pas être à jour. '''Manu''' : Ah ok. Alors je peux pas savoir, je m'en excuse. '''Gérard''' : Donc alors Beauvais, ça m'étonnerait que ça soit sur 101.9. Crouton, t'es là pour me confirmer ? '''Crouton''' : Oui oui, bonsoir Gérard, mes respects d'abord. '''Gérard''' : Bonsoir. Non non mais tu peux me confirmer la fréquence ? '''Crouton''' : 101.9 oui '''Gérard''' : Ah non non, Beauvais dans l'Oise ? '''Phildar''' : Attends Gérard, elle habite dans l'Oise, si elle te dit que c'est sa fréquence c'est la sienne. '''Gérard''' : Non mais attends... '''Phildar''' : Bon on va faire des recherches, on va faire des recherches, on va continuer les présentations, allez on y va. '''Gérard''' : Donc petit_poil, donc il y a Bondy, donc 101.9, pas de problème pour cette fréquence, 23 ans. Allo ? Oh là, vous vous réveillez quand je dis bonsoir ou pas là ? Allo ? '''Petit_poil''' : Tu m'entends ? Allo '''Gérard''' : Oh là, ça commence très très très mal hein Phildar... Je sais pas comment vous... Tuteur d'Aix-en-Provence, on peut écouter Fun Radio sur 103.1. '''Tuteur''' : Ouais c'est ça, c'est là-bas. '''Gérard''' : Voilà. Oignon, donc Brest 98.9. '''Oignon''' : Oui, bonsoir Gérard, bonsoir à toute l'équipe '''Gérard''' : Tony, 20 ans. Tony, gentil hein ? '''Tony''' : Ah oui. Sans problème. On est gentil et puis on écoute Fun Radio sur 101.9. '''Gérard''' : Voilà. Et... Col_roulé. Donc... Ou qu'on peut écouter Fun Radio Lille 96.8. Et voilà. Donc alors, les débats vont porter sur les boîtes de nuit. Donc... Avez-vous déjà été en boîte de nuit ? ''[silence]''. Non, non mais attendez. Là, je ne vais pas commencer à parler dans un mur. '''Tony''' : Calme-toi Gégé, calme-toi. '''Gérard''' : Non, non mais attends, Tony, Tony Tony. Attendez, attendez, s'il vous plaît derrière. Tony, je vais me calmer. De toute manière, tu sais que la semaine dernière je t'ai eu, ok ? Non mais moi je voudrais... Quand je pose la première question, je voudrais pas déjà... J'aimerais déjà pas avoir un blanc. Parce que là... '''Phildar''' : Attends, j'ai une idée pour ça. Pour pas avoir de blanc, quand tu poses la première question, tu fais, par exemple : « Col roulé, qu'est-ce que t'en penses ? ». Comme ça, il y aura moins de blancs. '''Gérard''' : Alors donc... Donc, déjà, la première question : avez-vous déjà été dans une boîte de nuit ? On va demander à... Col roulé. '''Col roulé''' : Ouais, ben ok. Ouais, ben ouais... Moi, j'ai déjà été en boîte de nuit, ouais. Et puis, en fait, je voudrais dire que c'est vachement cool parce que tu rencontres plein de gens. '''Gérard''' : Ouais, mais ça... Non, mais attends ! Là, déjà, commencez pas à me casser le thème du débat parce que... petit à petit, on va y revenir là-dessus. '''Col_roulé''' : J'approfondis, Gérard, j'approfondis. '''Gérard''' : Bon. Donc, pour toi, t'as déjà été en boîte de nuit ? '''Col roulé''' : Ouais, voilà, quoi. Ouais. '''Gérard''' : Tu peux me citer... euh... Non. Non, non, j'allais dire : « Tu peux me citer... ». '''Phildar et Manu''' : Non, pas de marque. Non, non. '''Gérard''' : Euh... Tony ? '''Tony''' : Oui, oui, bien sûr. J'ai déjà été en boîte de nuit. J'aime bien y aller, mais je préfère plutôt les ambiances soirées. '''Gérard''' : Euh... Dans... dans quel sens ? Si ça te dérange pas. '''Tony''' : Ça me dérange pas du tout, mon Gérard... euh... bah, je préfère... si tu veux, je préfère les soirées. Parce qu'en boîte de nuit, je trouve... bon, c'est bien, on s'éclate, on s'éclate bien... Mais je trouve ça un petit peu... il y a trop de monde, si tu veux. On fait moins de rencontres que, par exemple, si on fait une petite soirée en appartement. '''Gérard''' : Ouais, non mais... euh... Dans ces cas-là, Tony, moi je peux... je te renvoie la... Oh, non ! Mais attendez derrière, s'il vous plaît ! '''Tony''' : Tu me renvoies un rot, là. Parce que j'ai entendu un... '''Gérard''' : Non, non, non, non, non. Je t'envoie pas un rot. Parce que je dis aux gens qui sont derrière qu'ils se calment, parce que moi, je vais quand même répondre à la question. Donc, je suis d'accord avec toi. Donc, c'est vrai qu'on a du mal à... Dans des boîtes de nuit, je pense que c'est... Col roulé qui a dit... On peut faire plus de rencontres. Moi, je suis pas d'accord. '''Tony''' : Ouais, moi non plus, hein. '''Col_roulé''' : Non, bah si, mais ça dépend du tempérament aussi, Gégé ! Si t'as un tempérament ouvert, tu vas vers les gens, franchement, tu peux faire des rencontres, quoi. '''Crouton''' : Oui, mais par exemple, je pense que ce ne sont pas que des bonnes rencontres. '''Gérard''' : Oui, Crouton. Bah, vas-y alors, dis, toi, dis ta pensée. '''Crouton''' : Moi, personnellement, je crois que ce ne sont pas que des bonnes rencontres. '''Gérard''' : Oui, mais dans ce cas-là, je vais rejouer avec... les... les... les jeux avec Manu : « Pourquoi et comment ». Donc, pourquoi que ce ne sont pas des bonnes rencontres ? '''Crouton''' : Bah, quand je dis des bonnes... pas que des bonnes rencontres, ça veut dire que tu peux tomber sur des gens sympas et des gens sincères, comme tu peux tomber sur des loubards '''Col_roulé''' : Des gros obsédés, quoi. '''Gérard''' : Non, non, non, non, mais... Non, non, non, non, attendez, attendez, attendez ! Là, je vais demander à... Tony, Col_roulé et Crouton... donc on va laisser parler les autres. Après, on va essayer de... de rentrer dans... '''Col_roulé''' : dans le débat. '''Gérard''' : Non, non, non, non. On va essayer de... d'approfondir la question. Parce que moi, je... je peux... je peux vous dire que des rencontres... j'ai jamais eu l'occasion d'en faire là-dedans. Donc, Petit Poil, pour toi ? '''Petit Poil''' : Alors, pour moi, j'aime bien... j'aime bien aller en boîte pour m'éclater, pas forcément pour draguer. Pour être dans mon trip sur la techno. J'aime bien aussi les soirées pour plus rigoler, faire connaissance. '''Tony''' : Voilà, comme moi. '''Gérard''' : Ok. Tuteur ? '''Tuteur''' : Moi, j'aime bien aller en boîte pour me détendre le week-end, quand j'ai rien à faire. Et puis, on peut sûrement faire des rencontres sympas. Et puis, quand elles disent que... qu'on peut tomber sur des gens pas cool et tout ça... ben, je veux dire, où que t'ailles, de toute façon, tu peux avoir des gens sympas ou pas, quoi. '''Tony''' : Excuse-moi, Gérard. Est-ce que je peux poser une question à cette jeune demoiselle ? '''Gérard''' : Oui, tu peux si tu veux. Mais attends, Tony. '''Tony''' : Oui. '''Gérard''' : On a Ognon qui n'a pas répondu encore. '''Ognon''' : Ben ouais, Gérard, bien sûr. Ouais, je vais en boîte. Je vais en boîte... une fois par semaine, à peu près, quoi. Tous les week-ends, plutôt le samedi. '''Gérard''' : D'accord. '''Ognon''' : Et voilà, quoi. Je m'éclate bien, plutôt dans les boîtes techno. '''Gérard''' : Ouais, mais... Ouais, mais d'accord, mais bien sûr ! Tout le monde me parle de boîtes techno, mais il n'y a pas que la techno en France. '''Ognon''' : Ah ouais, mais ça, ça dépend en fonction de toi, ton style de musique. Moi, je préfère aller dans une boîte pour m'éclater sur de la techno plutôt que... enfin, je sais pas, je me vois mal en boîte pour danser sur du rap, par exemple, ou du raggameuf. '''Gérard''' : Non, non, non. Attendez, attendez, attendez ! Attendez, attendez. On va quand même... on va quand même éclaircir la question. '''Tony''' : Ça devient intellectuel tes débats. Oulala ! '''Gérard''' : Ouais, mais... Avez-vous déjà été en boîte de nuit ? Donc, moi je peux vous le dire : oui. Parce que j'y ai été plus d'une fois. J'ai... bon, Tony, je pense que tu dois savoir... '''Tuteur''' : à la Loco. '''Tony''' : On avait dit qu'on en parlerait pas. '''Gérard''' : Non, mais justement, donc ! On va en parler parce qu'il y a quand même Jean-Marie K., tout à l'heure, qui était parmi... ouais, avec Max, qui en a parlé. Donc, maintenant, si je ne retourne plus à la Loco, c'est qu'à l'heure actuelle, bon ben, moi j'ai trouvé ma... la personne avec qui faire ma vie. '''Tony''' : Tu peux retourner en boîte pour t'éclater avec Sandy. '''Phildar''' : Ce que je voulais dire, c'est qu'on n'est pas forcés d'aller en boîte pour trouver une nana. '''Gérard''' : Voilà. Je pense qu'à la Loco, de toute manière, vous allez pas... vous allez pas trouver la chaussure à votre pied. '''Tuteur''' : Pourquoi ? '''Gérard''' : Ah ben, je pense pas. Ah non, parce qu'il y a trop de nanas... '''Tony''' : Ouais, il y a un tas de nymphomanes, il faut le dire. '''Gérard''' : Ouais, ben oui. Mais de toute manière, un tas de nymphomanes... Attendez, attendez, attendez ! Pour finir, pour répondre à la question à Tony... '''Tony''' : Oui. '''Gérard''' : Donc, moi je peux te dire : des "nymphos"... je vais te dire une chose, c'est même pas une nympho. C'est des allumeuses, pour moi. '''Crouton''' : Ah ouais, exactement. '''Gérard''' : T'as plus d'une personne, ils vont te dire : « Ouais, ben, tu me payes un verre », et après ça va se terminer juste... juste... Attendez, attendez, attendez ! Attendez. Tout le monde me dira oui ou non derrière si vous êtes pas d'accord. Mais moi, je peux vous dire une chose : que ça se termine, à la fin, juste par un verre ou par une soirée à la casba et après c'est terminé, tu revois plus la personne. '''Phildar''' : C'est une autre boîte, ça, la casba ? '''Gérard''' : Non, ça c'est... c'est mon terme. '''Phildar''' : Ah, pour dire chez toi ? '''Gérard''' : Non, non, c'est mon nouveau... mon nouveau truc. J'ai envie de dire ça, c'est tout. '''Tony''' : Ouais, Gérard, j'avais une question. '''Gérard''' : Oui, mais attends. Attendez, attendez. Me laissez voir sur Internet si des fois on a des réponses sur la première, non ? Non, pas pour l'instant. Ok reego, mais de toute manière, tu peux réagir sur Internet. Donc, c'est quoi le site Internet ? '''Reego''' : C'est irc.funradio.fr. '''Gérard''' : Voilà, donc vous pouvez réagir sur le débat de la boîte de nuit. Et le deuxième portera sur les routiers. Alors donc, Ognon, tu voulais rajouter quelque chose ? '''Ognon''' : Ouais, est-ce que ça t'est déjà arrivé ? Parce que, justement, je t'entends parler de ça... est-ce que ça t'est déjà arrivé de te faire draguer par une allumeuse ? '''Gérard''' : Euh... ça m'est déjà arrivé, oui. Oui, oui, oui. '''Tony''' : Sans indiscrétion, comment ça s'est passé ? En tout bien, tout honneur ? '''Gérard''' : Non, non, mais je peux te dire qu'en boîte de nuit, même à la Loco, même que j'étais avec Sandy — Sandy, ça fait 8 mois que je la connais — je peux te dire une chose : j'ai eu des gens, des nanas qui sont venues me voir. '''Ognon''' : Ça s'est terminé, comme t'as dit, par un verre ? '''Gérard''' : Non, non, non. Ça s'est pas terminé par un verre. C'est que... '''Crouton''' : Et avant Sandy ? '''Gérard''' : Avant Sandy, ben... avant Sandy, il n'y avait rien d'autre. '''Crouton''' : T'avais connu qui ? '''Gérard''' : À part Christine, c'est tout. '''Tony''' : On la salue d'ailleurs. '''Phildar''' : Tu l'avais rencontrée pas à la Loco, celle-là ? '''Gérard''' : Non, non, mais Tony ! On la salue pas. '''Tony''' : Ah, pardon. '''Crouton''' : Qui t'avais rencontré à la Loco ? '''Gérard''' : Ben, j'ai rencontré plus d'une personne. Bon, ben, je pense qu'elle nous écoute, donc voilà. '''Crouton''' : Non, mais c'est qui ? '''Gérard''' : Ah non, mais je ne citerai pas tous les noms. '''Crouton''' : Ah, pourquoi ? '''Phildar''' : Parce que ce n'est pas le thème du débat ! '''Gérard''' : Non, non, ce n'est pas le thème du débat. '''Crouton ''' : D'accord. Donc pour répondre à la question que tu disais. Donc, il y a des nanas qui allument, qui se font payer un verre et puis qui se cassent. C'est ça, hein ? Donc, qui veut répondre à la question ? Non, mais c'est... c'est vrai, franchement. Il y en a beaucoup comme ça. '''Gérard''' : De toute manière, dans les boîtes de nuit, de toute manière, c'est ça. Si t'es à pied et que la nana elle a un petit coup dans le verre, un petit coup dans le nez... c'est de savoir si le mec il a une voiture pour la raccompagner. Et après ça se termine dans le plumard. '''Ognon''' : Au tribunal oui. '''Gérard''' : Non, non, non, attendez ! Attendez, attendez. On se calme, Tony. '''Tony''' : Oui, ce qu'il faut dire, Gérard, aussi... '''Gérard''' : Non, non, mais Tony, on ne dit pas « ça se termine au tribunal », d'accord ? '''Phildar''' : Ce n'était pas Tony, Gérard, c'était Ognon. '''Gérard''' : Bon, Ognon ! Manu, tu me prends Ognon et tu lui dis qu'il reste... '''Manu''' : Donc, je lui prends l'Oignon et je lui dis qu'il se calme... '''Gérard''' : Non, non, tu le prends hors antenne ! '''Phildar''' : Tu prends l'Oignon de Tony... '''Gérard''' : Tu prends Ognon et tu lui dis... '''Ognon''' : Je me calme, je me calme ! '''Gérard''' : Non, non, mais tu vas aller voir Manu, là. '''Ognon''' : Non, pas de problème, je me calme, Gérard. '''Gérard''' : Non, non, mais parce que... Non, non, mais parce que moi, cet après-midi, on a fait une réunion avec toute l'équipe. Donc je voudrais... '''Phildar''' : Donc c'était cet après-midi, et là il est 1h du matin... donc on en était où ? '''Gérard''' : Oui, non, mais je voudrais que le débat se passe comme la semaine dernière : impeccabe. '''Tony''' : Qui c'est qui va me prendre le cul là ? parce que je suis perdu... '''Petit poil''' : Oui, Gérard ? Je voulais dire aussi, il ne faut pas généraliser. Toutes les filles ne sont pas comme ça, hein. '''Gérard''' : Oui, non, mais attends. C'est qui qui parle, là ? '''Petit Poil''' : C'est Petit Poil, là. '''Gérard''' : Oui, mais Petit Poil, moi je vais dire une chose. Tu as certaines nanas, quand tu les vois à la Loco, il faut dire une chose : il faut voir comment vous êtes habillées. Parce que les trois quarts... '''Petit Poil''' : Oui, les trois quarts, mais pas toutes ! '''Gérard''' : Oui, mais... Non, mais... '''Crouton''' : Moi je crois qu'il ne faut pas généraliser. '''Gérard''' : Oui, mais d'accord. Vous venez en boîte pour vous éclater. '''Tony''' : Mais nous on veut vous éclater, c'est ça le truc ! '''Gérard''' : Mais venez pas, dans ces cas-là, nous allumer. '''Petit Poil''' : Oui, mais Gérard, si on vous allume, c'est pour avoir un verre, hein. '''Tony''' : Oui, mais nous on veut bien payer un verre, mais il faut que vous couchiez ! '''Gérard''' : Ah oui, voilà ! Voilà. Non, bon. Tony, Tony, Tony ! '''Tony''' : Je ne sais pas si tu es d'accord avec moi... '''Gérard''' : Non, non, mais c'est bon, on arrête. Parce que là, sinon, la question on va en faire... On va garder... '''Tuteur''' : Je veux dire quelque chose, c'est Tuteur qui parle. '''Gérard''' : Oui. '''Tuteur''' : Il y a des filles — enfin, moi j'en fais partie, j'en ai déjà fait partie, quoi — qui viennent en boîte que pour trouver un mec. Donc... '''Gérard''' : Oui, mais Tuteur ? '''Tuteur''' : Oui. '''Gérard''' : Tuteur, est-ce que tu crois que dans une boîte de nuit tu vas rencontrer l'âme sœur ? '''Col roulé''' : Ah si si, elle va rencontrer Col roulé, c'est tranquille. Voilà. '''Gérard''' : Non, non, mais Col roulé, s'il te plaît, tu te calmes. '''Col roulé''' : Ok. '''Gérard''' : Maintenant, on va passer à la deuxième question : que pensez-vous des ball-traps en plein air ? '''Intervenant''' : Des quoi ? '''Gérard''' : Des ball-traps. '''Tony''' : Alors, un ball-trap, c'est quoi ? Reego, oui ? '''Reego''' : Non, non, ils se demandent ce que c'est un ball-trap. '''Gérard''' : Un ball-trap, c'est des soirées qui sont organisées en plein air. Style, par exemple... Non, pas la fête à Neuneu ! Parce qu'il n'y a pas de bal. '''Phildar''' : La fête des Loges ? La fête des Foire du Trône ? '''Gérard''' : Non, non. Où c'est qu'on pourrait trouver des ball-traps ? '''Manu''' : Bah, dans mon village, à la kermesse. Les kermesses, toutes les kermesses, il y a des bals à la fin. '''Gérard''' : Voilà, voilà, genre kermesse. '''Phildar''' : Il y a pas mal de bals-tringues aussi, chez Manu. '''Gérard''' : Non, des ball-traps, abruti ! '''Phildar''' : Ah, pardon. '''Gérard''' : Eh, commence pas toi parce que... sinon je vais te gaufrer, toi. '''Manu''' : Sur IRC, on me dit que les ball-traps, c'est à Trappes. '''Gérard''' : Non, mais ball-trap, c'est pas à Trappes ! '''Gérard''' : Non mais c'est des trucs pour danser, c'est pas à Trappes spécialement. '''Crouton''' : Ouais, mais t'as les farces-et-attrapes aussi. '''Gérard''' : Oui, mais ça, les farces-et-attrapes, ça c'est autre chose. '''Crouton''' : Bah, c'est comme un bal, hein. '''Gérard''' : Oui, mais... Non, non, mais... Donc, répondez déjà à la question. D'accord, alors... Donc, Crouton ? '''Crouton''' : Bah moi, je pense que c'est pas mal, mais enfin... c'est peut-être réservé à une certaine catégorie d'âge. '''Gérard''' : Oh là, mais Crouton ! '''Crouton''' : Oui ? '''Gérard''' : Crouton, t'as un téléphone sans fil ? '''Crouton''' : Bah non... Enfin, si, ouais, c'est un sans fil, mais c'est pas un portable. '''Tony''' : Ah, ça marche pas avec Gégé, ça... '''Gérard''' : Non, mais apparemment, t'as un décalage entre nous. '''Crouton''' : C'est vrai ? '''Gérard''' : Ouais, parce que... '''Crouton''' : Bah non, bah là... Moi je suis le plus près possible, je peux pas faire plus près. '''Tony''' : Allez, avale-le ! '''Gérard''' : Non, non, mais on se calme derrière, hein ! Tony, on se calme. '''Tony''' : Désolé, c'est pas moi. '''Petit Poil''' : Alors, moi je suis pas d'accord avec Crouton qui disait que c'est pour que un certain âge. Moi je dirais, quand tu vas dans des petits patelins, il y a des jeunes aussi, ils ont pas le choix. Donc il faut bien qu'ils aillent essayer les bals à Trappes pour rencontrer des personnes. '''Gérard''' : Ouais, non mais ball-trap, c'est... Non, mais attends, Tony, s'il te plaît. '''Tony''' : Pardon, pardon. '''Gérard''' : Je vais y répondre quand même, parce que c'est quand même moi qui gère le débat. '''Tony''' : Oui, oui, tout à fait. '''Gérard''' : Donc, le ball-trap, c'est un truc qui se passe en plein air avec de la musique. '''Petit poil''' : C'est comme la fête de la musique, quoi, c'est en plein air ! '''Gérard''' : Bah oui, si tu veux. C'est pour ça que je dis les ball-traps, parce qu'on peut très bien parler de la fête de la musique. Justement, ça sera la onzième question. Donc tu y reviens maintenant, donc c'est même pas la peine. Donc c'est pareil : sur la fête de la musique, est-ce que tu peux rencontrer des gens ? '''Petit poil''' : Oui, oui. Bah bien sûr, tu peux faire connaissance de plusieurs personnes en, je sais pas, en prenant un verre, en dansant, en écoutant la musique. '''Tony''' : Moi ce que je voulais dire, c'est que Petit Poil là, elle dit qu'elle voit des jeunes... mais moi je suis déjà allé à des ball-traps. Bon... '''Gérard''' : Tony, Tony ? '''Tony''' : Oui ? '''Gérard''' : Bon, vas-y alors, toi. '''Tony''' : Ouais, mais parce qu'il y a... '''Gérard''' : Non, mais court, court, court, hein ! Parce que... faut qu'à une heure... à une heure et demie... faut qu'à une heure... Non, non, mais faut qu'à une heure et demie j'attaque le deuxième, hein. '''Phildar''' : Non, on a pris plus tard, donc on peut aller au moins jusqu'à deux heures moins le quart quand même. '''Gérard''' : Non, non, non, non. Une heure et demie, comme la semaine dernière. Non, non, mais c'est pas vous qui commandez ! Donc moi j'ai les consignes : c'est une heure et demie, terminé. Le deuxième : deux heures... euh... deux heures moins le quart jusqu'à trois heures. '''Tony''' : Je peux réagir au débat quand même ? '''Gérard''' : Bon, alors... euh, Tony ? '''Tony''' : Oui, je voulais réagir à la personne qui vient de parler. '''Gérard''' : Oui, Petit Poil. '''Tony''' : Oui. Ouais, tu disais que... Mais tu sais qu'il y a un... '''Gérard''' : Attends, Tony. Moi je voudrais savoir qui c'est qui a un téléphone qui est pourri parce que là, c'est impossib. '''Phildar''' : On l'a dit, Gérard, c'est Petit Poil, c'est ça ? '''Petit Poil''' : Ah, non non, c'est pas moi. '''Manu''' : C'est pas Petit Poil, c'est Crouton. S'est rapproché de la base et ça doit aller mieux. '''Phildar''' : Ça va mieux là. '''Gérard''' : Là, on va pas continuer le débat avec un son comme ça ! '''Crouton''' : Mais écoute, Gérard, je suis déjà passée dans le débat et ça a jamais fait ça, quoi. '''Gérard''' : Ah, mais alors pourquoi qu'aujourd'hui ça le fait ? '''Crouton''' : Eh ben, je suis désolée. Je m'excuse, t'énerves pas. C'est peut-être pas que moi... '''Gérard''' : C'est pas la première fois que t'appelles, toi ? '''Crouton''' : Ben non, c'est pas la première fois. '''Phildar''' : Elle a appelé l'année dernière quand on faisait le débat la nuit. '''Gérard''' : Bon, donc Tony ? '''Tony''' : Oui, moi je voulais réagir à ce que disait Petit Poil. Parce qu'elle disait qu'il y avait beaucoup de jeunes qui venaient aux ball-traps. Moi je suis allé à des ball-traps, et les jeunes que j'ai vus, c'était des bouseux qui venaient en tracteur. '''Gérard''' : Non, mais attends ! Pourquoi des bouseux ? Non, mais attends, Tony ! Pourquoi que tu vas tout de suite chercher des trucs comme ça ? Des gens... '''Tony''' : Bah écoute, je te fais part de mon expérience. '''Petit Poil''' : C'est peut-être pas dans les bons endroits que t'as été. '''Tony''' : Bah écoute, moi je suis allé à Jouy-en-Josas. '''Gérard''' : Non, non, mais ça y est ! C'est bon, c'est pas la peine de citer les villes. Ok, Tony. Donc t'as été dans certaines villes et ça s'est mal terminé, c'est ça ? '''Tony''' : Non, pas du tout ! Parce qu'elle disait qu'il y avait beaucoup de jeunes. Moi j'ai vu que des vieux, et puis des mecs qui venaient en tracteur. '''Gérard''' : Bon, on va demander... on va demander à Tuteur. '''Tuteur''' : Bah moi j'ai... moi je sais pas, je suis jamais allée dans un ball-trap. Mais je trouve que c'est pas très sympa de dire des bouseux, parce que je trouve que c'est méprisant. '''Tony''' : Tout le monde me déteste, de toute manière. '''Gérard''' : Non, mais attends, stop Tony ! '''Petit poil''' : Mais non, pas moi... '''Gérard''' : Attends, Tuteur. Avec Aix-en-Provence, je pense que t'as dû déjà aller dans des ball-traps, me dis pas le contraire. Attends, avec Aix-en-Provence... '''Phildar''' : y a un festival en plus là-bas. '''Gérard''' : Y a pas mal de trucs. '''Tuteur''' : Mais si tu veux, ça fait que cette année que j'y habite, donc... '''Gérard''' : Ah ouais, donc y a pas longtemps. '''Phildar''' : Parce qu'il y a le festival des ball-traps là-bas. '''Ognon''' : Ouais, bah moi j'ai jamais été dans un ball-trap. Mais bon, pour les fans de bal musette et Licence IV en tout genre, ouais, ça peut être sympa. '''Gérard''' : Non, mais ça on en a rien à foutre de Licence IV ! Non, non, non, non. Non, mais moi je vais te dire tout de suite qu'on en a rien à foutre de Licence IV parce que je sais sur quoi tu veux me parler. '''Phildar''' : C'est quoi la différence entre ball-trap et bal musette, par exemple ? '''Gérard''' : Non, non, mais attends ! Licence IV, il veut parler de... '''Phildar''' :Mais c'est un groupe, Licence IV. Mais c'est du bal musette. alors quelle est la différence, Gérard, entre ball-trap et bal musette ? Est-ce que tu pourrais expliquer la différence aux auditeurs ? '''Gérard''' : Là-dessus, non. '''Tony''' : C'est pas pareil. '''Phildar''' : Ouais, c'est pas pareil. C'est peut-être pas la même musique ? '''Gérard''' : C'est pas du tout la même musique ! '''Phildar''' : Qu'est-ce qu'on écoute dans les ball-traps, alors, comme musique ? '''Gérard''' : Un peu de tout, hein. '''Phildar''' : C'est-à-dire ? '''Gérard''' : T'écoutes... de l'accordéon... '''Phildar''' : Yvette Horner ! '''Gérard''' : Non, non ! De l'accordéon, on vient de le dire. Alors euh... '''Tuteur''' : De la guitare ? '''Gérard''' : Euh, de la guitare... euh... avec qui ? '''Tuteur''' : Du synthé. '''Gérard''' : Euh... je pense pas que Jean-Michel Jarre prenne un truc sur les ball-traps, hein. '''Tuteur''' : Bah si, il doit en faire. '''Gérard''' : Non, non, non, non. '''Tony''' : Il joue de l'accordéon électronique, hein. '''Gérard''' : Ah ouais, ouais. Non, mais attends... Euh, Tony ? '''Tony''' : Oui ? '''Gérard''' : Tony ? '''Tony''' : J'ai déjà vu, j'ai déjà vu, hein ! '''Gérard''' : Non, non, mais attends. C'est toi qui viens de dire « de l'accordéon électronique » ? '''Tony''' : Oui, tout à fait, ça existe. '''Gérard''' : Donc, moi je peux te dire une chose : c'est que Jean-Michel Jarre, quand il fait venir des gens, euh... fais-moi confiance qu'il fait déplacer des camions ! Et son truc c'est... c'est pas de l'accordéon comme tu dis. C'est ça ? Non, non, mais attends Tony... Tony, tu me laisses finir ? De toute manière, on va faire... là, on va pas en discuter trop parce que je risque la semaine prochaine de faire un débat sur les synthés. '''Reego''' : Sur quoi, sur la santé ? '''Gérard''' : Non ! Le synthé. '''Phildar''' : C'est quoi ça ? '''Gérard''' : Le synthétiseur. '''Ognon''' : Est-ce que t'as déjà joué du synthé, toi, Gérard ? '''Gérard''' : Non ! '''Tuteur''' : Est-ce que tu penses que, toi, les ball-trap, c'est de la balle, hein ? '''Gérard''' : Euh... ball-trap, c'est de la balle... ça dépend dans quel sens que tu veux le dire. '''Tuteur''' : Bah, dans le sens figuré. '''Gérard''' : Ouais, mais dans quel sens ? Ouais, mais dans quel sens ? '''Tuteur''' : Bah, c'est-à-dire que c'est de la balle, c'est bien quoi. '''Gérard''' : Ouais, c'est de la balle. Tu peux même dire que c'est de la bombe, bébé ! '''Col roulé''' : En fait, moi je veux dire sur les ball-traps que j'étais un petit peu de l'avis de Tony. C'est que, en fait, bon, c'est réservé à une certaine catégorie de gens, quoi... à peu près la cinquantaine, quoi. Et plus. '''Gérard''' : Ouais, non, non, mais attendez, attendez ! Attendez, attendez, oh ! Stop, stop, stop, stop. On va pas mettre les personnes âgées là-dedans, parce que de toute manière, un ball-trap, c'est fait pour tout âge. Pour tout type d'âge. Ça peut être de 7 ans jusqu'à 77 ans. Attendez, attendez ! Et chacun fait ce qu'il veut. S'il n'a pas envie de danser sur la musique, ne danse pas. On est d'accord ? '''Col roulé''' : Mais attends, j'ai pas fini de dire ! Donc j'ai dit qu'en fait, c'était réservé à une certaine catégorie d'âge. Il y avait aussi des gens qui étaient un petit peu moins âgés, mais le problème c'est qu'ils avaient le même tempérament, quoi. C'est pour une certaine catégorie de gens, quoi. '''Gérard''' : Ouais, mais Col roulé, moi je vais te dire une chose : dans les ball-traps, tu vois tout style d'âge. T'as pas un âge spécial. '''Col roulé''' : Non, d'accord, mais c'est tous des gens qui écoutent que de l'accordéon, quoi. '''Gérard''' : Non, pas spécialement que de l'accordéon ! '''Col roulé''' : Est-ce que tu y as déjà été, toi, Gérard ? '''Gérard''' : Euh, non. '''Tony''' : Tu verras jamais des jeunes danser sur Verschuren. '''Gérard''' : Non, mais attendez ! Mais attendez ! Non, mais on va pas s'amuser à prendre des noms comme ça. Danser sur André Verschuren, sur Yvette Horner ou sur... votre... votre... Des accordéonistes on en a pas mal. '''Ognon''' : C'est bidon. '''Gérard''' : Ouais, c'est bidon. Bah si ça te plaît pas... '''Phildar''' : ça dépend de l'âge. '''Gérard''' : Non, mais attends, il y en a un qui vient de dire : « Si, c'est bidon ». Pour toi, si c'est bidon la question... c'est l'accordéon qui est bidon. '''Phildar''' : Mais dans ce cas-là, il n'en écoute pas, c'est tout. '''Gérard''' : S'il aime pas, il n'en achète pas, il n'en écoute pas. Non, mais il achète autre chose, comme CD ! '''Petit poil''' : On peut écouter les deux aussi. On peut aimer l'accordéon et la techno. '''Gérard''' : Non, mais attendez ! Parce que là, si on part comme ça sur l'accordéon et sur la techno, je peux tenir jusqu'à 3h, même à 4h, et on fera qu'un débat. '''Tony''' : D'ailleurs, moi j'ai acheté Cyber Accordéon Volume 4, c'était le top. '''Gérard''' : Bah, bien sûr ! Dis-moi plutôt : Musique de Nuit Volume 4, tu veux ? Ok Tony. Terminé, terminé, stop ! Donc, la troisième question : quel genre de danse que vous aimez ? Vous allez réfléchir à cette question. '''Phildar''' : Je répète la question : quel genre de danse aimez-vous, par exemple quand vous allez en boîte de nuit ? Parce qu'il faut bien tourner la question. '''Gérard''' : J'ai pas précisé toujours... '''Phildar''' : Dans le monde de la nuit, le monde des boîtes de nuit, des DJ, tout ça. '''Gérard''' : Et donc on va s'écouter Guy Préjean avec « Viens voir la vie de l'autre côté de l'autoroute ». Et vous pouvez toujours nous appeler au 0803 08 5000. ''[musique]''. '''Gérard''' : Donc, vous êtes toujours en direct de Fun Radio, c'est toujours les débats de Gérard. Et donc, vous venez d'écouter Guy Préjean avec « Viens voir la vie de l'autre côté de l'autoroute ». Et on récupère Crouton, Petit Poil, Tuteur, Ognon... Tony. '''Tony''' : Salut, je te kiffe. '''Gérard''' : Moi je te kiffe pas. Tony, tu restes poli, s'il te plaît, merci. Col roulé pour terminer. '''Phildar''' : Et donc, la question c'était quoi ? '''Gérard''' : Donc : quel genre de danse que vous aimez en boîte de nuit ? En boîte de nuit, même voire autre... c'est-à-dire, bien sûr, dans les ball-traps. Ognon ? '''Ognon''' : Oui, Ognon. Moi je voulais répondre. Moi il y a un style que j'adore, c'est les breakers. C'est ceux qui font des "waves", tout ça, c'est les vagues. '''Phildar''' : Ça, c'est génial. En boîte, ça se voit souvent en boîte de nuit. Généralement vers 2-3 heures du matin. '''Tony''' : Ils sont tous pétés... '''Ognon''' : Ils roulent sur la tête comme des... '''Gérard''' : Oh, ouais ! Comme des... Col roulé ? '''Col roulé''' : Ouais, bah alors moi, comme danse, ce que j'aime bien c'est le tango, tu vois. Ouais... les ball-traps, ouais. Ouais, ouais. Parce qu'en fait, c'est une technique de drague, quoi. '''Gérard''' : Non, mais attends, Col roulé. Col roulé ! Col roulé ! Col roulé ! Je pense qu'à mon avis tu reviens dans la deuxième question, et on va pas s'éterniser. '''Col roulé''' : Ouais, mais non, je t'assure ! En fait tu vois, j'aime bien cette danse, mais en plus c'est une technique de drague, quoi. Bah oui, tout à fait. Je remue, tu vois, mes petites fesses... '''Gérard''' : C'est le métro qui passe, là ? Non, non, mais attends Col roulé ! Je suis en train de... '''Phildar''' : Gérard est perturbé parce qu'il vient d'y avoir un métro à 1h15 du matin, donc ça le perturbe. '''Manu''' : Non, mais là il est passé près celui là. '''Tuteur''' : Je ne sais pas... Moi j'aime bien tous les styles de musique. Mais c'est vrai qu'en boîte, quand il n'y a que de la techno, enfin moi personnellement, ça me lourde, quoi. '''Gérard''' : Ouais. Alors attends, Tuteur. Dans ces cas-là, tu n'aimes pas du tout ce que Max il passe le soir ? Attendez, attendez. Ognon, Ognon, Tony et Col roulé ? Et Petit Poil et Crouton, vous ne dites rien. Alors donc, pour toi Tuteur, ce que Max il passe le soir entre 22h et 1h du matin, donc ce n'est pas ton style de musique ? '''Tuteur''' : Non, je n'ai pas dit ça. J'ai dit qu'au bout d'un moment, ça commençait à m'agacer. Ouais, enfin moi j'aime... moi j'aime pas tout sur la techno. Je n'ai pas dit que je n'aimais pas écouter ça. '''Gérard''' : Ouais, mais alors attends. Tuteur, Tuteur ? Moi je vais te poser une question. Admettons que tu prennes ça de 23h jusqu'à 6h du matin... '''Tuteur''' : Ouais. Ben, je ne peux pas. '''Gérard''' : Ah, ben alors dans ce cas-là, tu n'iras jamais à Clichy... '''Tuteur''' : Ben si ! '''Phildar''' : Non, mais attends Gérard, dans toutes les boîtes il y a différents styles. À la Loco, puisque tu parles en fait de la Loco... Tu restes au rez-de-chaussée, tu as de la techno. Tu vas en bas, tu as du rock. Et en haut, tu as de la funk, tu as du rap. '''Gérard''' : Ouais, mais attends. Dans ces cas-là, dans ce cas-là, pourquoi qu'elle dit qu'elle n'aime pas la techno ? Donc elle n'aime pas ce que Max il passe. '''Petit poil''' : Elle a le droit d'aimer ce qu'elle veut ! '''Tuteur''' : J'ai pas dit ça en plus, Gérard, déforme pas ce que j'ai dit. J'aime pas écouter trop de techno, quoi. Mais... '''Gérard''' : Ben ouais, mais dans ce cas-là, dans ces cas-là, toute la journée t'écoutes que ça sur Fun. '''Phildar''' : Non, on parle pas de Fun, on parle des boîtes ! '''Tuteur''' : Ouais, voilà, en plus. '''Gérard''' : Non, non, mais attends, moi je peux lui dire... '''Manu''' : Le dernier Céline Dion est quand même super deep house ! '''Gérard''' : Zora... Zora sourit. Ouais, je l'ai vu. Mais de toute manière, c'est pas... '''Phildar''' : Il vaut mieux qu'elle arrête de sourire. '''Petit Poil''' : Ouais, alors pour moi, j'aime bien tout style : salsa, zouk, techno. J'aime bien faire des pogos de temps en temps quand les mecs sont pas trop violents. J'aime pas trop le rap. J'aime bien le classique. J'aime bien un peu tout, quoi. '''Gérard''' : Ouais, mais attends... le classique, tu verras jamais ça dans des boîtes de nuit. '''Manu''' : Ya des boîtes de classique. '''Gérard''' : Oh ouais, mais où ? '''Manu''' : Ya une boîte qui s'appelle l'Opéra, où ils jouent plein de classique. '''Gérard''' : Ouais, non, mais attends. Dans ces cas-là, si on prend l'Opéra Garnier, tout ça... '''Petit poil''' : Ouais, il n'y a pas que ça ! Dans la journée, il y a des boîtes — bon, je dirai pas le nom — qui font du dancing pour les personnes. '''Gérard''' : Ouais, ben je sais, je vois. Tu veux dire 103 avenue Foch ? '''Petit poil''' : Non, non, c'est pas ça. '''Ognon''' : Pas de marque ! '''Gérard''' : Non, mais au 103 avenue Foch ils jouent pas mal de dancing. '''Petit poil''' : Ouais, mais c'est pas là. '''Gérard''' : De toute manière, là-dedans ils en jouent pas mal, et en plus c'est une radio que je déteste parce que ça c'est une radio de blaireau. '''Petit poil''' : Je parle pas de radio moi, hein ! Je parle pas de radio. '''Gérard''' : Non, non, mais moi je peux te dire une chose : c'est que... au 103 avenue Foch, c'est une radio de blaireau : c'est Radio Montmartre. Alors je vais dire une chose : le mec qui a envie de s'endormir avec Radio Montmartre et qui se réveille avec ça... Non, mais... non, mais il est complètement servi ! T'entends du André Verschuren, du Yvette Horner, tout ce qui s'ensuit. Donc, on revient presque à la deuxième question. ''[bruit de Phildar qui mâche un sandwich]''. '''Gérard''' : Donc, on entend... '''Pildar''' : Ouais, je suis en train de manger. J'ai faim. J'ai pas mangé. '''Gérard''' : Non, mais Phildar ! Phildar, t'es gentil. '''Phildar''' : Bah quoi ? '''Gérard''' : Quand tu manges, t'éteins ton micro. Tu fais pas comme mon chef, hein ? Parce que là on dirait un vrai porc qui mange. '''Phildar''' : Ah, merci. '''Gérard''' : On dirait un cochon. Alors, le chef il sait manger, mais toi tu manges comme un cochon. Donc Crouton ? '''Crouton''' : Oui. Bah moi personnellement, moi j'adore me chauffer sur de la techno, mais finir un peu sur du reggae, quoi. '''Tony''' : Toi, t'es chaude. '''Gérard''' : Mais s'il vous plaît ! Allez Tony... Tony ? '''Tony''' : Elle aime bien se chauffer, elle est chaude ! '''Gérard''' : Non, non, mais attends Tony ! Tu restes poli parce que sinon je vais t'obliger de te zapper, toi. '''Tony''' : "Chaude" aussi c'est une insulte ? Faut que tu me fasses une liste ! '''Gérard''' : Ouais, bah alors... Euh, t’expliques à Tony qu’il se calme. '''Crouton''' : Non, mais Gérard, chaude c’est pas une insulte. '''Gérard''' : Non, non, mais on va... on va pas s’éterniser parce qu’il reste encore 7 questions et il est quand même 1h20 du matin. '''Crouton''' : Alors, vas-y, pose ta 4ème question. '''Gérard''' : Alors, moi je peux... Quel genre de danse ? '''Phildar''' : Réponds au moins à la question, voilà. Qu’est-ce que t’aimes bien en boîte de nuit ? '''Gérard''' : Moi, ce que j’aime bien danser, c’est style... bah, un techno. Parce que j’ai l’habitude de... Au début, j’y allais... Bon, je suis... je suis plus, maintenant, techno, slow et... et un peu disco. Bon, voilà. '''Tony''' : T’étais plus souvent au bar, sans te manquer de respect. '''Gérard''' : Bon, Tony, s’il te plaît ? '''Crouton''' : Oui ! Mais c’est pas vrai, Gérard ? '''Gérard''' : Ok. Euh, ça m’étonnerait. D’accord. Sortez-vous en boîte ? '''Phildar''' : Attention, c’est la 4ème question. Attention, accrochez-vous, c’est la meilleure : '''Gérard''' : Sortez-vous en boîte pour draguer ? '''Phildar''' : Non, c’est faux, c’est pas la meilleure. '''Gérard''' : Pourquoi, toi ? Parce que t’as déjà rencontré des nanas, toi, dans une boîte ? '''Phildar''' : Non. '''Intervenant''' : T’as déjà dragué ? '''Phildar''' : Non. J’ai déjà dragué, mais j’ai jamais rencontré une nana dans une boîte. '''Gérard''' : Ouais, bah... Donc, Crouton ? '''Crouton''' : Bah, moi, franchement, je crois que la boîte c’est bien pour s’éclater. Mais au niveau des gars, c’est pas ça, quoi. Parce qu’en fait, c’est le gars que tu chauffes pour la soirée. Enfin, personnellement, moi je le chauffe pas parce que j’aime pas ça, mais c’est bien pour t’amuser une soirée, quoi. Puis après, basta. Enfin, moi c’est mon avis, hein. Parce que sinon, après, si tu commences à aller plus loin, en général, c’est sûr que ça va pas durer. '''Gérard''' : Euh, qui c’est qui renifle comme un cochon, là ? Parce que ça m’énerve. '''Phildar''' : Mais c’est pas le souci. T’as même pas écouté ce qu’elle vient de dire, Crouton. C’est quoi, ce travail ? Comment veux-tu, après, réagir par rapport à la question ? '''Gérard''' : Mais attends, de toute manière, tu vas pas... Sortez-vous en boîte pour draguer ? À mon avis, t’es pas forcé d’aller en boîte pour draguer, je suis désolé. '''Petit Poil''' : Bah, moi j’y allais pour draguer quand j’avais 14-15 ans. '''Gérard''' : Ouais, non, mais attends. À 14-15 ans, tu crois que les videurs, ils te font rentrer ? '''Petit Poil''' : Bah, je suis désolée... '''Gérard''' : Non, non, non, non, non. '''Phildar''' : Avec un petit billet, si ! '''Petit Poil''' : Je suis désolée, je rentrais, hein ! '''Phildar''' : Quand t’es nana... quand t’es nana,s te font rentrer à partir de 14 ans... '''Gérard''' : Donc, moi je peux te dire une chose, Petit Poil : qu’à l’heure actuelle, maintenant, pour aller en boîte de nuit, si t’as pas la majorité, c’est pas la peine. '''Petit Poil''' : Ah ouais ? Bah, je peux te dire qu’à la Loco, il y a des filles mineures qui rentrent, alors, hein ! '''Gérard''' : Ouais, ouais, ouais, ouais. Mais... '''Phildar''' : mais elles rentrent avec Gérard. Non, mais je rigole. '''Petit poil''' : Non, mais à l’époque, moi on me laissait rentrer. '''Tuteur''' : Attends, on est toutes allés en boîte à 15 ans, en fait. Donc, quand j’avais 15 ans... '''Gérard''' : Non, non, non. Non, non, non, mais attendez ! Attendez, attendez, attendez ! Attendez, parce qu’il y a... il y a d’autres personnes qui vont réagir. Donc moi, Petit Poil, moi je peux te dire une chose : là-dedans, c’est plutôt des soirées, des après-midi que les boîtes sont ouvertes aux nanas et c'est tout. '''Petit poil''' : Bah, moi je suis pas d’accord. '''Tuteur''' : Moi non plus. Pas que pour les filles, enfin je sais pas... Personnellement, moi je suis rentrée en boîte à 15 ans. J’avais un mec qui en avait 18, donc t’as aucun problème. Et puis c’est rare quand t’es... enfin, les filles de toute façon, elles font toujours plus âgées, quoi. '''Gérard''' : Parce que la personne à l’entrée ne fait pas gaffe aux cartes d’identité. '''Phildar''' : Il y a aussi le maquillage, les filles elles se maquillent. '''Tuteur''' : Exactement. Et puis ils vont pas vérifier toutes les cartes d’identité. Mais c’est vrai que les jeunes qui vont en boîte, la plupart du temps, enfin c’est... c’est des gens de... mineurs, hein. '''Gérard''' : Ouais, mais... bah ok. '''Phildar''' : Moi j’avais... j’ai une anecdote à ce sujet. C’est... je connaissais une fille qui n’était pas majeure et qui prenait la carte d’identité de sa mère pour aller en boîte. Et les mecs, les videurs, ils la laissaient rentrer. '''Gérard''' : Ouais, non, mais attends. Dans ces cas, si la personne prend la carte d’identité des parents, ça sert à rien non plus. '''Phildar''' : Bah ouais, mais elle peut rentrer en boîte. '''Gérard''' : Oignon ? '''Tony''' : Moi, je connais un mec qui paye pas ses impôts. '''Gérard''' : Bon alors, toi, Oignon, bonne nuit ! Allez, hop ! Toi... toi... Non, non. Non, non, non. Et toi, pour toi c’est terminé, Oignon. '''Manu''' : Ça y est, ça y est. Ça y est, il est parti. Et il revient pas. '''Tony''' : Non, moi ce que je voulais dire, c’est que j’allais à la Loco de temps en temps et ce que j’aimais bien, c’est aller au 3ème... enfin, au 1er étage. '''Gérard''' : Non, mais attends. Sortez-vous en boîte pour draguer ? Tony, tu réponds à la question. Ou sinon je fais comme Oignon, toi. '''Tony''' : Ah, d’accord. Ouais, bah oui, je sors en boîte pour draguer. D’ailleurs, il y a même des fois ça me surprend parce que ça marche. '''Petit poil''' : Il y en a qui attendent que ça, aussi. '''Gérard''' : Bon, bon, bon, bon. C’est bon, c’est bon, Tony. '''Phildar''' : Ce que voulait dire Tony... Excuse-moi, Tony. Ce que voulait dire Tony, en fait, c’est quand il allait au 1er étage, c’est plus facile pour draguer. Parce que c’est pas évident de draguer sur de la techno. '''Gérard''' : Ouais, mais attends. Ouais, tu montes au 1er étage, c’est archi-plein. Tu descends en bas au... '''Phildar''' : C’est pas le problème qu’il y ait du monde ou pas ! C’est ça. Mais même, de toute manière, tu peux plus draguer sur de la musique que genre de la funk ou de la soul que de la techno. '''Col Roulé''' : Ouais, d’accord. Ouais, bah moi je voudrais dire qu’en fait, je vais pas trop en boîte pour draguer, mais plutôt pour ploter, quoi. '''Gérard''' : Ouais, bah d’accord. Je vois le style que t’es, toi. T’es un gros porc. T’aimes bien mettre la main au cul des nanas. Ouais, bah si ! Bah si, de toute manière. Excuse-moi de te le dire, Col Roulé, pour moi t’es un gros pervers. Comme... comme Petit Poil vient de te dire. T’aimes bien mettre la main au cul des nanas. Parce que si la nana... si la nana est bien foutue, tu vas lui mettre la main au cul et après tu vas lui monter aux seins. Et si elle est... si la nana est bien foutue... si la nana est bien foutue, si la jupe elle est au ras des genoux, t'iras... '''Phildar''' : Si elle est pas bien, tu le fais quand même ? '''Col Roulé''' : Non, bah non. Si elle est pas bien, non. J’ai un code d’honneur, quand même. '''Phildar''' : Pourquoi ce serait toujours les canons qui se feraient ploter, pas les boudins ? '''Gérard''' : Non, non, non. Non, non, mais attends. Moi je vais te dire une chose. Pourquoi les boudins ? Parce que là-dessus je te répondrai pas. '''Reego''' : Oui, Internet... Oui, il y a Davy1 qui te demande, Gérard, si tu aimes sortir en boîte avec des sardines. '''Gérard''' : Euh, non. '''Reego''' : Et avec des thons ? '''Gérard''' : Non plus. Ni avec des maquereaux ! Voilà, ok. Alors, je pense que on va faire... Non, non. Pour l’instant, c’est moi qui va poser la question parce qu’il reste 3 minutes. '''Phildar''' : Non, mais attends, on n’a pas 5 minutes. T’es un vrai fonctionnaire, maintenant, toi ! Et à 3h t’arrêtes. 3h pile, t’arrêtes ? '''Gérard''' : Ah ouais ! '''Phildar''' : Ok d’accord. Bon, alors pose ta question, vas-y. '''Gérard''' : Alors, la question... Tiens ! Tiens, celle-là elle est bien. Tiens, toi. Comme toi, un apprenti des DJ... Lors de vos soirées, est-ce que vous aimez mixer ? '''Crouton''' : Faut avoir l’occasion, aussi. '''Tony''' : Gigi Caca, on t’écoute. '''Phildar''' : Ah non, mais c’est pas moi qui fais le débat, c’est vous. '''Gérard''' : Ouais, ouais, mais... Hé, Gigi Caca ? Toi qui sais mixer comme un cave... Parce que là, t’as un bon mixeur. ''[il désigne Reego du doigt, tout sourire, Phildar sourit aussi, entre gêné et amusé de cette attaque puérile]''. Là, lui, il sait mieux mixer que toi. '''Phildar''' : Ouais, il fait des bons jus de fruits ! '''Gérard''' : Ouais, non, non, mais lui il sait mieux mixer que toi. Et le chef, encore plus. Donc toi, t’es un... ouais, Caca Boudin. Petit Gigi. Ouais, un petit qui a besoin d’apprendre. '''Reego''' : Oui, encore sur IRC, il y a Malkavian qui me demande : "C’est quelle marque, le mixeur ?" '''Manu''' : Seb, c'est bien. '''Reego''' : Pas de marque, Manu. '''Gérard''' : Voilà. Manu, je vais te mettre une gaufre. '''Manu''' : avec du chocolat, s’il te plaît. '''Gérard''' : Oui, non, mais moi je te la mettrai au sucre, la gaufre. Donc, alors, Crouton ? '''Crouton''' : Ben ouais, ben franchement, moi je crois que c’est bien, quoi. Mais faut savoir mixer, déjà. Parce que moi, personnellement, c’est pas mon cas, hein. Mais j’aimerais... '''Gérard''' : Non, mais... non, mais attends. Crouton ? '''Crouton''' : Oui ? '''Gérard''' : Moi je peux te dire une chose. Je sais plus dans quel reportage que j’ai vu, il y a quand même des nanas qui mixent. '''Crouton''' : Oui, mais bien sûr, Gérard. Non, mais c’est pas ça que je te dis. Non, mais je veux dire, j’aimerais bien regarder, hein. Apprendre, je sais pas. C’est vrai que j’aime bien la techno, mais j’apprécie ceux qui... '''Gérard''' : Ouais, mais... mais tiens justement, comme on parle de techno et qu’on parle de mixer. '''Crouton''' : Oui. '''Gérard''' : C’est dommage que Max il soye pas là. Mais je vais demander à Reego, parce que tout le monde... tout le monde me pose la question. Par exemple, quand tu prendre le vinyle ou le disque... Est-ce que ça esquinte le disque ou pas ? '''Reego''' : Tu esquintes le disque de le passer ? '''Gérard''' : Non, mais quand tu fais le... '''Reego''' : De scratcher ? Ouais, ça l’abîme un peu quand même. Mais ça dépend du matériel. Avec du bon matériel, ça abîme pas beaucoup. '''Gérard''' : Ah, voilà. Donc, parce qu’il y a certaines personnes qui m’ont demandé si on abîmait le disque. '''Phildar''' : Des vigiles ? Des vigiles ? '''Gérard''' : Toi, tout à l’heure, toi là-bas, toi tu vas te prendre des claques, mais grosses ! '''Phildar''' : Non, mais qui t’a demandé ça ? C’est intéressant. '''Gérard''' : Non, non, mais ça c’est des gens qui m’ont demandé. Même moi, personnellement, quand j’ai vu Max faire dans des soirées, même à la Loco, même quand j’ai vu Reego dans les studios derrière, je me posais la question. Est-ce que... '''Phildar''' : On peut dire que ça use un peu. Parce qu’à la base, le disque il est lisse, et à force de passer le... le manche dessus, ça te fait un sillon. '''Gérard''' : Non, parce que tu passes la main dessus. C’était pour savoir : est-ce que le disque, après, si tu veux le réécouter, si t’as la platine tourne-disque, est-ce que le disque n’est pas esquinté derrière ? '''Manu''' : Ça dépend, parce que si t’as les ongles trop longs, ça peut le rayer, quoi. '''Crouton''' : Tu prends des disques spéciaux ? Tu prends des disques spéciaux ou n’importe quel disque ? '''Gérard''' : On va demander à Reego. Il y a des styles de... de disques... '''Reego''' : C'est pas mon débat, Gérard. C’est ton débat avec les auditeurs ! '''Phildar''' : On peut dire qu’il y a des disques en laine. Il y en a aussi en marbre. '''Reego''' : Voilà. Le mieux, c’est les disques en marbre. '''Phildar''' : Les disques en marbre, c’est plus résistant. '''Reego''' : Je te montrerai, j’ai des disques en marbre. '''Gérard''' : Tu me feras voir. Je demanderai au chef après. Petit Poil ? '''Petit Poil''' : Petit Poil, ben écoute, elle a déjà mixé chez un copain. J’aime bien ça, par contre, j’ai pas le matos à la maison. '''Gérard''' : Petit Poil ? Petit Poil, moi je pense que, à mon avis... je sais pas si Phildar pourra me répondre, mais je pense que faut compter à peu près combien pour avoir une table de mixage et tout le bon matériel ? '''Phildar''' : En temps ou pas ? '''Tony''' : 400 euros à tout casser. '''Gérard''' : Bon, Tony, s’il te plaît ! '''Manu et Phildar''' : Non mais il a raison en plus. '''Phildar''' : C’est 400 euros ! Parce qu’en fait, une bonne table de mixage, t’en as pour... allez, disons 252... Entre 250 et 400 francs. '''Gérard''' : Tu rigoles, toi ? Non, mais attends. Attends. Tu vas aller... '''Phildar''' : Combien coûte la table de mixage qu’on a derrière ? Elle coûte 342 francs, je crois, un truc comme ça. '''Gérard''' : Ouais. Je pense que... c’est dommage que Max ne soue pas là pour me répondre. Je pense qu’il faut compter entre 1 million et 2 millions de francs. '''Tony''' : C’est moins cher maintenant. Et en Russie, c’est encore moins cher. '''Gérard''' : Bon, Tony, s’il te plaît ! C’est terminé pour toi, au revoir. '''Phildar''' : C’est vrai ce qu’il dit. '''Tony''' : Non, mais c’est la crise. Non, mais c’est vrai. Non, mais attends. Mais qu’est-ce qu’il se passe ? '''Phildar''' : Attendez, on a Olivier de la Pro, un professionnel. '''Olivier''' : Non, il faut compter au moins 50 millions maintenant. Moi, celle que j’ai là-bas dans le studio, c’est 50. '''Gérard''' : Non, mais attends. Toi, c’est... '''Phildar''' : Non, mais c’est de la pro. '''Gérard''' : Ouais, mais toi c’est pas pareil, c’est avec tous tes petits boutons de caca boudin. C’est tous tes boutons de caca. '''Phildar''' : Bon, disons que c’est entre 1 million et 2 millions de toute manière. '''Gérard''' : Je demanderai... je demanderai à Max plus tard. Bon, Tony ? Tony, pour lui c’est terminé parce que là... '''Phildar''' : on va souhaiter une bonne soirée à Tony. '''Manu''' : Bon, bah ok alors. '''Tony''' : Ah non, mais attendez ! Il ne faut pas déconner, les mecs, là ! '''Gérard''' : Non, non, mais attends, Tony. S’il te plaît. Tony ! Je pense que... j’avais été clair la semaine dernière. '''Tony''' : Non, mais attends, qu’est-ce que j’ai fait ? J’ai rien fait, là ! '''Gérard''' : Non, non, mais... Alors dans ce cas, si tu continues, tu restes calme, ok ? '''Tony''' : Attends, mais on ne peut pas parler des Russes ? Je ne peux pas dire "chaud". '''Phildar''' : C’est vrai que c’est vachement moins cher en Russie, le matériel, parce qu’il y a la crise. '''Gérard''' : Non, mais qu’est-ce qu’on en a à foutre ? '''Phildar''' : Eh bien, c’est important ! Imagine, il y a des DJs français... '''Gérard''' : Mais attends, mais je ne vais pas faire un débat sur la politique là-dessus ! '''Phildar''' : Il n’y a pas de polémique ! '''Gérard''' : Non, politique. '''Tony''' : Ah, pardon. Je veux dire que les DJs français qui n’ont pas beaucoup d’argent, ils peuvent très bien aller acheter du matériel en Russie. '''Gérard''' : Alors dans ces cas-là... dans ces cas-là, c’est dommage que Jean-Marie K ne soit plus là, Sonic non plus. '''Phildar''' : Fais un appel. Fais un appel. Si tout DJ techno ou autre pourrait venir te renseigner, tu peux le demander. '''Tony''' : Écoute, moi je peux te renseigner, Gérard, puisque je mixe un petit peu. '''Gérard''' : Ouais, non, non, non, mais attends. Pour l’instant, non, non, allez, allez. On ne s’éternise pas là-dessus. Hop, la question elle va être vite passée. '''Col Roulé''' : Oui ? Il n’y a qu’à le rouler ! Il n’y a pas répondu encore. T’arrêtes pas de m’oublier. '''Gérard''' : Non, mais là, on ne va pas s’éterniser sur la question parce que là, je pense que... sinon... '''Phildar''' : De toute façon, je pense qu’on a le temps pour le débat des routiers, parce que tu n’as pas fait les questions. Donc tu peux y aller, tu peux embrayer une question au moins. '''Gérard''' : Non, mais de toute manière ils vont... Bon alors, Col Roulé, vas-y. '''Col Roulé''' : Donc en fait, moi je dois dire que, ouais, j’aime bien mixer quand je fais des soirées. En fait, je dois dire que le mieux, en fait, pour mixer, quoi, c’est que tu aies une gonzesse sur la console. C’est vraiment comme ça, tu la... '''Gérard''' : Oh, mais attends, mais attends ! Col Roulé, dans ces cas, tu prends... tu prends le truc de la Loco. Quand les nanas sont là, en train de danser, en train de s’éclater... mais attends, mais je vois ça. Je vais regarder le reportage qui a lieu vendredi sur une chaîne... sur une chaîne. Et ça, c’est un truc spécial techno. '''Reego''' : Gérard ? Sur IRC, il y a Snul qui te demande si tu aurais aimé être DJ. '''Gérard''' : Euh, non. '''Phildar''' : Pourquoi ? '''Gérard''' : Non, ça m’intéresse pas. Non. Voir trop de monde, non. '''Tony''' : Gérard, avec tout ça, j’ai pas parlé... j’ai pas parlé de ma vie de DJ. Est-ce que je peux te raconter une anecdote ? '''Gérard''' : Bon, on se dépêche, Tony, parce que... parce que là, je pense que... '''Tony''' : Donc moi, bon, je mixe un petit peu dans des soirées. Moi, ce que j’aime bien, c’est faire bouger la foule. Mais moi, j’aime pas trop qu’on me fasse chier quand je suis dans mes aigus. Ça, je voulais le signaler. Et j’achète mes disques à Techno À Port. Voilà. '''Gérard''' : Ouais, ben merci, Tony, pour ta publicité. Dans ce cas-là, tu vas aller voir Manu... '''Phildar''' : Attends, attends ! Gérard, Techno Import c’est le magasin où Max va acheter ! Donc on peut en parler. '''Manu''' : On peut le dire. On peut le dire. '''Phildar''' : Sinon après, on n’a plus de vinyle... on n’a plus de vinyle gratos. C’est bien, Tony, c’est bien. '''Gérard''' : Il retourne voir Manu au standard après, ok ? '''Tony''' : Y a pas de problème. On y passe tous. '''Gérard''' : Ouais, non, mais... Non, non, mais je pense que pour toi ça va être terminé, là. '''Phildar''' : Tu y retourneras un jour, Gérard, au standard. '''Gérard''' : Hein ? Qu’est-ce que tu dis, toi ? Moi au standard ? '''Phildar''' : Ben pour aider Manu, ouais. '''Gérard''' : Non, c’est pas moi qui va... qui va choper, qui va répondre aux gens qui sont derrière, ok ? Alors : Comment s’habiller pour aller en boîte ? Donc, c’est la dernière question. La... la, la, la, la sixième. Oh là là, merci pour le larcène. Et donc, on va s’écouter Joe Couscous avec Ma tante danse le... '''Phildar''' : Oh là, c’est de pire en pire les titres ! '''Gérard''' : Non, non, mais attends. C’est toi qui écris... '''Phildar''' : Ben oui. Joe Couscous avec Ma tante danse le reggae. '''Gérard''' : Alors, Danse le reggae. Donc, vous pouvez toujours nous appeler au 0803 08 5000 et 0800 70 5000. '''Phildar''' : À venir, le débat qui portera sur les routiers. Donc vous pouvez déjà nous appeler. Appelez Manu, voilà. Et il vous sélectionnera avec plaisir. Voilà. À tout de suite, Gérard. ''[Musique]''. '''Gérard''' : Ben Philippe, t’annonces le disque, parce qu’à mon avis c’était pas ça. '''Phildar''' : Ben, c’est quoi alors ? Joe Couscous avec Ma tante danse le reggae. Une nouveauté. C’est pas mal, là. '''Gérard''' : Ok. Donc, on rappelle Crouton ? Petit Poil ? Tuteur ? '''Phildar''' : Tu tiens debout ? '''Tuteur''' : elle est facile, hein, franchement. '''Gérard''', ''[rote bruyamment]'' : Pardon. '''Manu''' : Gérard... Gérard, tu dégages au standard. Faut que je te calme, faut que je te parle. Tu dégages au standard. '''Gérard''' : Euh, Tony ? '''Tony''' : Ouais, Ouais, le disque c’était Zoubir avec ''[deux bruits de baiser]''. '''Gérard''' : Euh, Col Roulé ? Donc, à la place d’Oignon, on a qui ? '''Manu''' : À la place d’Oignon, pour l’instant on a personne parce que la personne que je devais rappeler, eh ben... j’y n’y arrive pas. '''Gérard''' : Donc, dernière question. Donc : Comment êtes-vous habillé pour sortir en boîte ? Col Roulé ? Col Roulé ? '''Col Roulé''' : Moi je dois dire que, en fait, pour aller en boîte, je m'habille très classe, quoi. '''Gérard''' : Ouais, mais attendez ! Attendez, attendez ! Avant de répondre à la question, j’aurais bien voulu que Reego me donne un petit point internet pour savoir le nombre de connectés. '''Reego''' : Alors, petit point internet : actuellement sur le site, il y a 182 connectés. Tu vois, t’as la liste ici. La classe ! C’est quand même la classe. Et il y a Sean qui te demande s’il peut passer un bonjour à Nicolas... Ah, c’est pas le thème. '''Gérard''' : Ben non, non, mais si, si. Si, si, on peut lui faire un petit coucou à la personne. '''Reego''' : Bah c’est fait. '''Gérard''' : Donc voilà. Ben... donc... ben coucou. Non, non, mais donc on remercie tous les gens qui sont sur internet. Ça me fait plaisir quand même de voir un jeudi 182 connectés sur internet. Ça, c’est... Ça, c’est pas mal. J’applaudis. 182 ! Eh ben, continuez comme ça ! Donc, c’est bizarre parce que là j’ai fermé le Minitel, mais si je peux l’avoir devant mes yeux... '''Phildar''' : Non, ça te ferait trop mal. '''Gérard''' : Non, il y a... il y a zéro... '''Phildar''' : 47 connectés. '''Gérard''' : Bon attends... 47 connectés ? Fais voir, fais voir ! ''[il force l'appareil à se tourner vers lui et regarde l'écran]''. Attends, tourne-moi le... '''Phildar''' : Non, mais c’est pas grave, je te le dis. '''Gérard''' : Non, non, mais attends. Fais voir. Ouais, zéro connecté ! Bien sûr ! '''Manu''' : Putain, ça a chuté vite ! '''Phildar''' : Ah non, mais il y a deux minutes il y en avait 47, mais le temps... le temps que tu retournes... '''Gérard''' : Non, non, mais de toute manière vous pouvez toujours nous appeler. Donc 0803 08 5000 et 0800 70 5000. Toujours le site internet www... point fr. '''Reego''' : Voilà, exactement. '''Gérard''' : Après je sais même plus. '''Manu''' : Et le Minitel : 3615 Fun Radio. '''Gérard''' : Voilà, toujours 3615 Fun Radio. J’essaierai de... de vous répondre en direct, mais si c’est pas des conneries. Donc on va attaquer la dernière question. '''Phildar''' : Oui, ça fait déjà trois fois que tu la poses : "Comment préférez-vous être habillé en boîte ?" '''Gérard''' : Non, non, mais même je pense qu’on va en faire deux quand même, parce qu’on est jeudi. Et donc, comme les gens sont un peu sympas, ça va être le week-end, donc on va... allez, allez, on va faire 10 questions. '''Phildar''' : Ah non, non. '''Gérard''' : il reste... il reste... il restera encore deux questions après la huitième. '''Phildar''' : T’emballes pas, t’emballes pas non plus. '''Manu''' : On va en faire une et puis on va voir. '''Gérard''' : Allez : Comment êtes-vous habillés pour sortir en boîte de nuit ? On va demander à Crouton. '''Crouton''' : Alors moi, je suis habillée sexy mais pas excentrique. '''Gérard''' : C’est-à-dire ? '''Crouton''' : C’est-à-dire, j’évite tout ce qui est fluo, tout ce qui est excentrique, mais je suis sexy. '''Gérard''' : Non, mais là, sexy... '''Crouton''' : C'est--dire un petit pantalon trompette... '''Col roulé''' : Sal... '''Gérard''' : Tony, s’il te plaît. '''Col roulé''' : Non, c’était Col Roulé ! '''Gérard''' : Ouais, ben Col Roulé. Col Roulé, tu vas te calmer ! '''Col Roulé''' : Ouais, je me calme. '''Gérard''' : Sinon moi je vais te calmer, tu vas... tu vas zapper direct. Je vais faire comme Oignon. Parce que là, maintenant, faudra peut-être qu’on fasse des débats corrects. '''Tony''' : Non, mais ça se passe bien là, Gégé ! '''Gérard''' : Non, non, mais Col Roulé, pour l’instant... Moi je peux... je peux répondre à Crouton. Donc moi je peux vous dire une chose : que les trois quarts des nanas sont habillées au ras des genoux, et c’est... c’est tout juste si on ne leur voit pas leurs culottes. '''Manu''' : Elles ont le cul bas quand même. '''Phildar''' : Ouais, ou des grosses culottes ! '''Gérard''' : Non, non, non. Mais il faut dire... il faut dire que quand même les nanas, quand vous allez en boîte de nuit, vous n’hésitez pas... oui Reego ? '''Reego''' : Continue ta phrase au moins ! '''Gérard''' : Les filles, vous n’hésitez pas... vous... vous n’hésitez pas à nous allumer. '''Crouton''' : Ouais, mais n’empêche que vous aimez ça ! '''Gérard''' : Ouais, non, mais attends. Attends. On aime ça... Fais moi confiance que, tu vois, comme Tony le sait et tout le monde le sait maintenant, je suis avec Sandy. Et Sandy, jamais, jamais elle est sortie avec des trucs au ras des genoux. Parce que moi... moi je vais te dire une chose... bon. Non, non, mais attendez. Moi je peux vous dire une chose : que dans... dans les métros, quand je vois des trucs comme ça, ça me dégoûte. Non, ça me dégoûte quand tu vois des nanas comme ça ! Attends, parce que là... non, non, ouais, ouais. Ouais, mais attends. Elles peuvent être bien foutues si on veut, mais il y a des limites ! Non, non, mais ouais. Non, mais il y a des limites. '''Manu''' : Et les limites c’est des genoux, voilà. '''Gérard''' : Voilà, il y a des limites pour pas provoquer. Parce qu’après... après dans ces cas-là, on va dire : "Ouais, mais on se fait violer". Alors les nanas, arrêtez, hein ! Parce que... '''Phildar''' : Attends, tu vas un peu loin Gérard ! Ouais, mais c’est pas... c’est pas parce que tu mets une mini-jupe en boîte que tu te fais violer automatiquement. Faut pas exagérer non plus. '''Gérard''' : Ouais, mais attends. Combien que t’en vois de viols à l’heure actuelle ? '''Phildar''' : Non, mais ça on s’en fout, c’est pas le thème du débat. '''Crouton''' : Gérard ! T’es pas obligé d’être en jupe parce qu’on va en boîte. Il y a des femmes qui sont en jupe parce qu’elles y sont obligées par leur boulot. '''Gérard''' : Ouais, mais Crouton, moi dans ces cas-là, moi je vais te dire une chose : dans ce cas-là, c’est de l’harcèlement sexuel, et c’est tout. ''[rire gêné et applaudissements de Phildar]''. Si, les trois quarts des patrons, si t’es pas en mini-jupe, de toute manière t’es pas pris. '''Manu''' : Et si t’as des culottes aussi, faut pas en mettre ! '''Crouton''' : Alors, là-dessus, moi je suis secrétaire dans une entreprise et, excuse-moi, mais je trouve pas ça très sympa quand tu dis que le patron nous accepte pas lorsqu’on n'a pas de mini-jupe. Je suis en jupe, tout simplement, et j’ai jamais été harcelée, quoi. '''Petit poil''' : Ouais, bah moi j’ai été harcelée, moi ! Parce qu’il m’oblige à me mettre en mini-jupe et sans culotte ! ''[la voix nouée de pleurs]''. C’est dégueulasse. '''Phildar''' : Ah, voilà. Ça, c’est en plus... c’est dans le débat. '''Manu''' : C’est grave dans le débat, c’est grave ! Le milieu de la nuit, la discothèque, tout ça... '''Phildar''' : Bah, Gérard, ce que tu devrais faire, tu veux... elle t’a peut-être donné une bonne idée, là. Je sais plus si c’est Petit Poil... Petit Poil, tu pourrais peut-être faire, dans les semaines à venir, un débat sur le harcèlement. '''Manu''' : Mais pour l’instant, on est quand même dans la discothèque et le milieu de la nuit. Et il serait sage d’y revenir au plus vite. '''Phildar''' : Tu sais qu’on n’est pas restés longtemps dans la discothèque. On a été partout. On a été partout ! '''Manu''' : Entre René Verschuren, l'ccordéon et tout... '''Reego''' : Justement, pour reparler de la discothèque, il y a Snul sur IRC qui te demande, Gérard : "Comment faut-il s’habiller pour aller en discothèque et pas se faire refouler par le gros gorille à l’entrée ?" '''Gérard''' : Alors ça, c’est une très bonne question. Justement. '''Phildar''' : C’est bien, Reego, tu travailles bien, toi. '''Reego''' : Merci les gars. '''Gérard''' : Non, non, mais de toute manière, pour l’instant, je ne vais pas trop me plaindre de Manu, à part qu’il n’a pas toujours fait ce que je lui ai demandé. Donc, toi pour l’instant... ça va, tu te la coules douce. '''Phildar''' : La question, Gérard, tu réponds. '''Gérard''' : Donc je réponds à la question. Donc c’est qui, Reego ? Alors Snul, moi je peux te dire une chose : c’est que j’ai quelqu’un, une fois, qui a voulu aller à la Loco, qui s’est pointé en jeans et qui a été refoulé. Il était habillé tout en jean. Comme moi, souvent je suis en jean et autres. Bon ça va, parce que moi je rentre avec vous. Mais le mec, il a été refoulé. Et il s’appelle Titi. Et Titi. '''Tony''' : Je l’ai vu ce mec-là : il était venu en chaussons et avec un boa aussi. C’était abusé ! '''Gérard''' : Ouais, ouais, t’as raison. C’est celui qui nous a emmenés en Allemagne avec Sandy, d’accord ? Alors tu le connais pas, ok ? Alors tiens, Tony, comme t’as une grande gueule : comment que tu t’habilles, toi ? '''Tony''' : Je vais l'ouvrir, je vais l'ouvrir, ouais ! '''Tony''' : Ouais, bah, tu vas l'ouvrir ta gueule ! Bah, parce que moi, je vais... bon, classique : en jean, en baskets et puis en chemise. '''Tuteur''' : Ouais, tu rentres pas en baskets. '''Tony''' : Moi, je rentre ! Moi, je suis Tony de Fun, moi. '''Gérard''' : Dans ces cas-là, pourquoi pas... Moi, il y a une question que je suis en train de me poser : pourquoi pas y aller en costume-cravate ? '''Reego''' : Tu te fais refouler, Gérard, en costume-cravate. '''Gérard''' : Bah ouais, mais attendez ! Mais costume-cravate, tu vois que ça toute la journée : dans le métro, que ça soit dans les bus, n'importe où. Tu vas dans un café pour prendre un sandwich — moi j'ai vu ça cet après-midi — tu vois des mecs en costume-cravate. '''Tuteur''' : Ouais, mais c'est des cadres. '''Gérard''' : Mais attendez, mais attendez... Mais dans ces cas-là, pourquoi qu'on accepte des mecs en costume-cravate dans des boîtes de nuit et pourquoi qu'on refoule des gens en jean ? Moi, je ne suis pas d'accord, je ne suis pas d'accord ! '''Reego''' : Gérard, sur IRC, on me dit qu'on accepte les costards-cravate parce qu'on n'accepte pas les costards crados. '''Gérard''' : Bah ouais, mais même... on accepte, ça ne sert à rien. Olivier ? Olivier ? Non, non. Non, non, toi tu vas travailler ailleurs. '''Olivier''' : Je cherche les auditeurs. '''Phildar''' : Pour une fois qu'Olivier bosse... '''Olivier''' : Je suis seul à bosser mais j'ai rien fait, Gérard ! '''Gérard''' : Non, non, mais attends. Depuis tout à l'heure... 'Olivier' ''' : ça se passe plutôt bien. '''Gérard''' : J'entends Allô, allô, allô... Et je viens de regarder, c'est toi. '''Olivier''' : Alors donc, je ne dis plus allô. '''Gérard''' : Non, non, mais dégage ! '''Olivier''' : Non, je te promets, je ne dis plus allô. '''Gérard''' : Parce que ça s'est bien passé jusqu'à maintenant. Dégage ! Et voilà, hop, au revoir. '''Olivier''' : J'ai rien fait ! '''Gérard''' : Dégage ! Tu prends ton café, tu vas sur le site internet, tu vas dialoguer avec Reego. '''Olivier''', ''[sortant, boudeur]'' : Toujours pareil, et c'est tout. '''Reego''' : Tu l'as vexé, Gérard. '''Gérard''' : Non, mais même, attends... Toi, ça s'est bien passé jusqu'à maintenant. Je ne vois pas pourquoi qu'il arrive et j'entends des "allô" et "allô". '''Manu''' : Oui, moi c'est clair, on ne m'entend pas dire allô. '''Phildar''' : Donc, je me demande comment tu fais pour être aussi concentré dans ton débat Gérard. C'est extraordinaire. '''Gérard''' : Tuteur ? '''Tuteur''' : Oui, oui, je suis là. ' ''Gérard''' : Donc toi ? '''Tuteur''' : Personnellement, moi je m'habille en pantalon parce que j'ai... enfin, je n'aime pas les jupes quoi. Mais bon, ça c'est... mais c'est aussi plus agréable d'être en pantalon pour danser parce que c'est plus pratique quoi. Si tu es en jupe, bon, enfin... Puis comme disait Petit Poil... '''Gérard''' : Oui ? '''Tuteur''' : Je ne sais pas. Enfin, les jupes, c'est vrai que c'est quand même... ça allume pas mal quoi. '''Phildar''', ''[soufflant d'impatience]'' : Réveille-toi Petit Poil. On va te raser. '''Gérard''' : Allez, qui c'est qui n'a pas répondu ? Non, Petit Poil, tu viens de répondre. '''Petit poil''' : Mais non, c'était pas moi, c'était Tuteur. '''Phildar''' : Ah, c'était Tuteur, pardon, excuse-moi. '''Gérard''' : Petit Poil, vas-y. '''Petit Poil''' : Ouais, alors moi j'aime bien aller en boîte en tailleur et en robe longue pour... donc pour pas allumer justement. '''Tony''' : T'as pas chaud avec tout ça ? '''Petit Poil''' : Non, je me déshabille vite fait. '''Gérard''' : Bon, mais de toute manière, pour voir, il y a un vestiaire pour mettre les pringues. Mais faites-moi confiance : quand vous voyez après, vous êtes quand même des allumeuses. Alors venez pas nous dire le contraire ! '''Petit Poil''' : Mais il faut pas généraliser, Gérard. '''Gérard''' : Ouais, mais de toute manière, je prends pas mon cas pour une généralité, d'accord ? '''Petit Poil''' : Ok, chef. '''Gérard''' : Ok ? Bon, alors maintenant on fait la conclusion. Donc, Crouton ? '''Crouton''' : Bah, moi la conclusion, c'est que ça a pas apporté grand-chose sur ce débat. Donc bon, je veux dire, il y a eu des choses peut-être intéressantes pour certains. Enfin, pour moi, je trouve pas. Mais peut-être que pour certains il y a eu des choses intéressantes. '''Gérard''' : Non, mais est-ce que... est-ce que pour toi, est-ce que le débat s'est bien passé ? '''Crouton''' : Ah oui, ça c'est sûr, il s'est très bien passé. Mais il y a peu grand-chose d'intéressant parce que je trouve que tu t'es énervé un peu trop vite. '''Gérard''' : Non, non, non, non, non ! Non, non, non, non. Hé, Crouton ? Crouton, je me suis pas énervé. Je pense que je vous ai répondu à chaque question que vous m'avez posée. '''Crouton''' : Gérard, t'as trop généralisé sur tout le monde. T'as pris un exemple et ça y est, t'as généralisé. '''Gérard''' : Bah oui, mais de toute manière, là-dessus, je suis obligé de... de voir pour essayer de... de mettre un peu d'ambiance. Ok ? '''Phildar''' : Ah, t'as eu raison, t'as un peu d'ambiance. '''Crouton''' : Ah pour de l'ambiance, t'en as mis... '''Gérard''' : Ouais, bah pour un... à part Oignon que j'ai viré, sinon j'ai viré personne. Ah, maintenant Max est là ! Donc Max, il va peut-être nous renseigner sur le prix de... '''Manu''' : C'est deux millions, deux millions ! '''Max ''' : J'ai écouté, j'ai écouté. '''Gérard''' : Donc pour toi, dans les soirées, est-ce que vous aimez mixer ? Donc on m'a dit que... bon... ''[Olivier revient]''. Non, toi, dégage ! Merci Olivier. '''Max''' : Non, je t'écoute... C'est quoi la question ? '''Gérard''' : Non, parce que j'ai demandé... '''Max''' : J'ai écouté, j'ai écouté. Donc on m'a... j'ai entendu des chiffres, j'ai entendu des chiffres. Donc genre, pour le prix, combien coûte aujourd'hui du matériel pour mixer correctement ? Donc j'ai entendu un, deux millions. '''Gérard''' : Non, moi j'ai dit c'est... '''Max''' : Non, Olivier a dit cinquante millions. J'ai écouté, c'est pour dire. Il a dit qu'il était comme toi, peut-être entre un et deux millions. '''Gérard''' : Non, non. Il m'a dit deux cent cinquante balles. '''Max''' : Non, ça c'est la table de mixage ! Reego a confirmé. J'ai écouté : deux cent cinquante-quatre francs. J'étais là. '''Gérard''' : Oui. Et toi, pour toi personnellement, toi qui es... qui es un grand amateur de mixage, toi qui aimes bien mixer ? Donc pour toi le prix, on va... '''Max''' : Alors moi, je pense qu'il faut aujourd'hui plus un ou deux millions. C'est-à-dire que si tu veux du bon matériel pour mixer un peu comme à la Loco, je pense qu'il faut mettre dans les sept, huit millions. Nouveaux !<ref name="hist5"></ref> '''Gérard''' : Donc ça fait soixante-dix mille... soixante-dix mille francs. Soixante-dix mille à quatre-vingt mille... '''Max''' : Quatre-vingt mille francs à peu près. Pour une table de mixage, j'entends. Si tu veux avec les platines — moi j'ai ça chez moi — il y en a pour cent-vingt mille balles. '''Gérard''' : Ah bah d'accord. '''Max''' : Attention... Non mais ce qui est bien après, c'est qu'une fois que t'as le matos — je parle pas des amplis, des enceintes, s'il y a plus des amplis, des enceintes faut rajouter quarante mille balles — après ce qui est bien, c'est que les disques, bon c'est du vinyle, comme c'est en import, souvent c'est des imports. '''Gérard''' : Ouais, comme Tony nous a dit. '''Max''' : Bon, je vais acheter ça, tu l'as dit tout à l'heure, sans faire de marques, chez Techno Import. '''Gérard''' : Non non, c'est Tony qui l'a dit, c'est pas moi. '''Max''' : C'est à peu près dans les quatre-cents francs un disque. Bon, c'est pas très très cher. Après... après c'est pas très très cher. Quatre-cents francs le disque, moi j'en achète à peu près quarante, je m'en sors pour quatre-mille à dix mille, enfin entre quatre et quinze mille, vingt mille francs. '''Gérard''' : Une question... Une question qui... '''Max''' : Te brûle les lèvres ? Elle te brûle les lèvres ? Je crois non.  ? '''Gérard''' : Je l'ai posée à Reego et Reego m'a dit que ça... il me dit oui. Est-ce que quand tu mixes, par exemple avec le disque comme tu fais toi à la Loco... Est-ce que ça l'abîme ou pas ? Reego me dit oui. '''Max''' : Oui, parce que le problème c'est que lui c'est un DJ de hip-hop, ils savent pas manier les disques. '''Phildar''' : Il l'a dit trop vite ! '''Gérard''', ''[entre sourire et vanne]'' : Toi tu te tais, tu sais pas mixer ! Alors toi, va prendre un mixer ! '''Max''' : Non mais en techno, en techno, on scratche pas comme ils scratchent. Nous on utilise pas ça, le scratch. On utilise un peu le velcro. '''Gérard''' : Mais est-ce que ça... est-ce que ça abîme ? '''Phildar''' : Non, parce que ça agrippe. '''Max''' : Non, ça l'abîme pas. Ça abîme pas le disque que tu veux mettre. Parce que si tu veux pas abîmer le disque que tu veux mettre, par exemple au lieu de jouer la face A, tu vas faire exprès de scratcher sur la face B. Comme ça, le disque que tu veux écouter c'est sur la face A, tu l'abîmes pas le disque. Non mais c'est une technique. C'est une technique, c'est très technique, je reconnais. Je m'excuse, je fais un peu une parenthèse : si vous voulez pas abîmer les morceaux que vous aimez bien sur le vinyle, par exemple si sur la face A c'est le morceau que tu adores et que tu veux le mixer, pour pas l'abîmer, tu joues la face B. '''Gérard''' : Ouais, mais dans ces cas-là, tu retournes le disque ? Mais comment tu peux retourner le disque quand t'es en boîte ? '''Max''' : Tu joues pas ! Tu joues pas le disque, '''Phildar''' : Tu l'écoutes pas c'est tout ! '''Max''' : C'est-à-dire que tu vas passer un disque en disant : "Voilà, sur la face A, je voulais passer le tube de Das Fuck, Das Puck". Et bah tu te dis : "Ok, je vais pas abîmer mon disque en mettant les doigts dessus, donc je joue l'autre face". Donc c'est un morceau qui est pas connu, mais les gens savent que sur ce morceau pas connu, sur l'autre face, y'a le tube. '''Gérard''' : Donc ça abîme pas... '''Max''' : Non, ça abîme pas la face A. '''Gérard''' : Ouais, non mais même que ça soit la face A ou B, on s'en bat les... '''Max''' : Non, ça le bousille le disque ! Ça le raye ! En gros, t'achètes le disque, tu le mets trois fois en soirée, il est mort. Faut en racheter un. Et un disque, je te dis, ça coûte pas cher, Reego peut te dire, en hip-hop c'est à peu près pareil, à 5 francs près, c'est dans les 400 francs. Normal. En import, ça va coûter 600 balles le disque. Mais ça vaut le coup ! '''Reego''' : Et en marbre, encore plus cher ! '''Gérard''' : Ouais, mais je pense que maintenant on n'arrive plus à trouver. Maintenant c'est... '''Max''' : C'est-à-dire que si tu cherches le live du Palais des sports de Johnny en 77 en vinyle, c'est un peu dur. Non mais en techno, c'est à peu près 600 francs le disque, c'est pas très très cher. Pour faire une bonne soirée, pour faire un bon mix de 3 heures, il te faut à peu près 50 disques. Donc tu calcules : 50 disques à peu près, on va dire 110 pour faire une nuit complète, 200 000... à 600 francs le disque... 200 000 ? Ça fait à peu près 60 000 francs. Pour 60 000 francs, tu peux faire une bonne soirée. '''Gérard''' : Et donc, grosso modo, donc pour finir, pour répondre à la question que j'ai posée — de toute manière, j'aurais pu la poser la question à tous les auditeurs... '''Max''' : Oui, vas-y, pose la question ! '''Gérard''' : Donc c'est que pour toi, donc tu serais prêt à mettre combien dans toute une table ? Donc toi, pour toi, 120 000 ? '''Max''' : Ma bite entière ! '''Gérard''' : Je te remercie, Max. Donc, Crouton ? '''Crouton''' : Oui, bah je viens de te faire ma conclusion. '''Gérard''' : Donc Petit Poil ? '''Petit Poil''' : Ouais, bah alors moi je dirais que certaines choses t'as raison. Mais en fait, certaines choses tu crois toujours avoir raison et en fait quand on n'est pas d'accord, tu essaies toujours d'avoir le dernier mot, ce qui est dommage. Mais bon sinon ça s'est bien passé, c'était calme. On kifferait... enfin ça serait bien que ça bouge un petit peu. '''Gérard''' : Ah bah que ça bouge ! Si vous voulez que ça bouge, dans ces cas-là, le deuxième, je vais bouger plus ! Ok ? Je vais m'énerver et ça va être encore plus dur. Parce que là, je vais m'attaquer... je vais m'attaquer... sur un truc que j'ai vécu : c'est les transports routiers ! '''Phildar''' : C'est du lourd ! '''Petit Poil''' : Ouais, mais on a déjà fait ça, les routiers. '''Gérard''' : Et alors ? Si ça te plaît pas, tu fais une chose : t'écoutes ta radio, tu zappes sur une autre radio, ok ? En de bon entendeur, salut ! ''[applaudissements du studio)''. '''Petit Poil''' : Ouais bon bref. Non mais ce que je veux dire... non mais t'es pas obligé de t'énerver pour avoir de l'ambiance. '''Gérard''' : Non mais attends ! Dans ces cas-là, tu me dis : "Ouais, je me suis pas énervé". Mais attends, moi c'est... c'est mon chef qui m'a dit ne pas m'énerver ce soir. '''Max''' : Non mais tu peux t'énerver si ça reste cohérent. Si tu t'énerves sur quelqu'un qui dit des conneries, d'accord. Si tu t'énerves parce qu'un mec à un moment donné parle au-dessus d'un autre, c'est pas normal. Par contre sur les routiers, ça risque de gueuler, mais c'est normal, c'est ton métier. C'est un amour de métier ! '''Phildar''' : Tu sais de quoi tu parles ! Putain merde... ''[applaudissements du studio]'' '''Gérard''' : Alors Tuteur ? '''Tuteur''' : Moi c'est la première fois que je participe à ton débat et je trouve que c'était plutôt cool quoi. Faudrait qu'on s'écoute un peu plus les uns les autres, parce que c'est un peu le bazar des fois. '''Gérard''' : Ouais non mais attends. Écoutez-nous les uns les autres '''Phildar''' : Et aimons-nous aussi ! '''Tony''' : Oui, aimons-nous, aimons-nous ! Mais moi je voulais... puisque Max est là. Il faudrait que tu lui demandes parce que tu ne me croyais pas : le prix d'une platine russe. '''Max''' : Alors, le prix d'une platine russe ? J'ai entendu parler d'en euros... '''Phildar''' : 400 ? '''Max''' : Ouais, c'était à peu près ça. Alors là, en russe, pfiou là là ! '''Manu''' : Ça fait 24 francs français je crois, je ne sais pas. '''Max''' : Mais là-bas maintenant, ça s'échange avec des bouteilles de vodka. Donc il faudrait parler en Vodka. Je sais qu'une platine avec du bon matériel en URSS — moi j'ai vu ça — ça vaut... '''Phildar''' : C'est Pierre Import. Moi je l'ai vu chez Pierre Import. '''Max''' : Je ne sais pas... Je crois que c'est pour deux putes ukrainiennes. Je pense que tu peux avoir du bon matos. '''Tony''' : C'est une demi-Lada quoi. '''Max''' : Ouais, à peu près ouais. '''Gérard''' : Bon. Col Roulé pour terminer. '''Col Roulé''' : Ouais voilà. Bon bah pour ma conclusion, moi je voudrais dire que au début du débat je me doutais que les filles étaient des allumeuses en boîte de nuit, mais là j'en ai eu confirmation. Voilà. '''Max''' : J'ai beaucoup apprécié ce qu'a dit, Gérard. Effectivement pour les filles qui se permettent de mettre des choses ras-la-foufoune jusqu'à la hauteur des genoux, moi je trouve ça également... je trouve que c'est en fin de compte, c'est provoquer l'acte sexuel. '''Gérard''' : Voilà. Donc moi, conclusion de ce débat : bon bah, je pense que j'ai pas trop de choses à rajouter parce que j'ai répondu à peu près à vous, à toutes vos questions. Même sur internet — peut-être que j'ai pas pu tout... tout le monde a pas pu comprendre ce que je disais — '''Reego''' : En plus là ça augmente, il y a 250 personnes ! '''Phildar''' : Oh là là ! Qu'est-ce que tu donnes... '''Gérard''' : Donc bon bah, le deuxième débat portera sur les routiers. Donc on va s'écouter Patrick Petit Suisse avec "Ma cravate marche au diesel". Et vous pouvez toujours nous appeler... ''[Max explose de rire]''. bah mais attends c'est l'autre cave... donc les numéros à rappeler, Manu ? '''Manu''' : Non, ça a l'air de marcher toujours. 0803 08 5000 et 0800 70 5000 si ça marche. '''Gérard''' : Et toujours 3615 Fun Radio, rubrique Direct et toujours l'internet www.fr FunRadio. Et je vous retrouve d'ici 10 minutes ! == Le débat sur les routiers == === Contexte === Dès cette semaine, Gérard perd quelque peu son équilibre professionnel. Dans l'avant-débat, on comprend qu'il n'a pas préparé ce débat, privilégiant un thème non prévu, face à un Max étonné voire inquiet. L'équipe va donc l'aider à bâtir des questions pour ce débat, lui donnant toute sa dimension surréaliste, ajoutée à la confusion généralisée de Gérard. Le fait marquant est la confirmation que, désormais, Gérard va mesurer sa célébrité, son succès d'audience, au nombre de gens connectés sur Internet. Cette sensibilité à ce média va avoir une foule de conséquences : Reego va devenir un vrai régulateur important et adoré de Gérard, lequel va regarder en permanence le chiffre, qui deviendra bien sûr ubuesque au fil des émissions. === Les personnages === * Franck Bargine : Max, Antiroutier, Tam tam * Igor : Reego * Gérard Cousin : Gérard * Phildar, Manu * Arnet * 35 tonnes (35t, ancien Col roulé) * Laura : Tu me saoules (tumsoule) * Dégage (ancien petit poil) * Axel : Frigo * Olivier Bouchet : Horloge, Marcel * Goldo === Transcription === '''Gérard''' : C'était Patrick Petit suisse avec Ma caravane marche au Diesel, etdonc c'est toujours les débats de Gérard, 2h10. Donc vous pouvez toujours nous appeler au 0800 70 5000 et 0803 08 5000, et toujours le 3615 Code Fun Radio, rubrique "Direct". Et pour l'instant, j'ai zéro connecté. '''Phildar''' : C'est pas cool ça, hein ? '''Manu''' : C'est une honte ! '''Gérard''' : Et sur Internet, donc, vous pouvez toujours nous laisser des messages ; donc : ww.fr funradio. '''Reego''' : Slash fun, pas de problème. Et on va bientôt atteindre les 300 connectés. ''Phildar ''' : Oh là là, le blé qu'on va se faire encore ! '''Gérard''' : Eh ben, c'est bien. Donc, on va accueillir Arnett pour le deuxième débat qui portera sur les routiers quand même. Arnett, bonsoir. On peut écouter Fun Radio sur 101.9 ? Alors, 35 tonnes, c'est quoi là, Manu ? '''35 tonnes''' : C'est moi. '''Gérard''' : Non mais tu donnes ton nom correctement s'il te plaît, parce que moi je vais pas m'amuser à faire "35 tonnes" sans arrêt. '''Phildar''' : C'est son QRZ. '''35t''' : Voilà, je suis un cibiste, c'est tout. '''Gérard''' : OK, donc on peut écouter Fun Radio à Arras sur 96.9. Tu me confirmes bien la fréquence ? '''35t''' : Ouais, je te confirme, ouais. '''Gérard''' : Tu Me Saoules ? '''Tumsoul''' : Bonsoir mon amour. '''Gérard''' : Il n'y a pas de "ton amour", d'accord ? En de bon entendeur salut. OK, tu vas pas commencer comme ça, OK ? '''Tumsoule''' : Excuse-moi Gérard, j'avais une envie et j'ai pas réussi à la contrôler. '''Gérard''' : Moi je te dis tout de suite, je suis pas ton amour, OK ? Donc on peut écouter Fun Radio à Brest sur 98.9, c'est bien ça ? '''Tumsoule''' : C'est tout à fait ça. '''Phildar''' : Non, mais non, c'est pas ça ! '''Tumsoule''' : Mais si, ça lui fait plaisir ! '''Gérard''' : Donc, Horloge, 18 ans d'Arcachon, on peut écouter Fun Radio sur 92 FM. Dégage ? Euh au standard, tu vas te calmer Manu, parce que sinon je vais t'attraper ta tête, je vais te l'éclater ! Je vais faire comme dans opération "Cornet de beaf", tu vois ? Je vais prendre un pétard, je vais te mettre ta cervelle sur une bagnole ! OK, alors tu éteins ton micro et je ne veux plus t'entendre, OK ? Donc, Dégage, 21 ans, on peut écouter Fun Radio à Laval sur 102.3. '''Dégage''' : Exactement Gérard. '''Gérard''' : Et Frigo ? '''Frigo''' : Oui, bonsoir Gérard, big big up à tous ! '''Gérard''' : Toulon, 93.1. OK. Donc, première question sur les routiers : que pensez-vous des routiers ? On va demander à Frigo. '''Frigo''' : Ouais, moi je trouve que c'est une bonne solution parce que, de toute façon, sans les routiers on pourrait pas manger, c'est clair. Donc il en faut, il en faut. '''Gérard''' : Eh oui, mais moi si je te dis... si on se met en grève et qu'on peut plus... s'ils peuvent ralimenter les grandes surfaces, qu'est-ce que tu fais ? '''Frigo''' : C'est des emmerdeurs dans ces cas-là ! '''Gérard''' : Ah ouais, mais c'est des emmerdeurs ? Mais attention, c'est leur gagne-pain quand même ! '''Frigo''' : Ah ouais, mais faut pas qu'ils se mettent en grève ! '''Gérard''' : Ah ouais, mais attends ! Dans ces cas-là... Non mais attendez, attendez ! Parce que là je connais le truc, moi je peux vous dire une chose : quand t'as un patron qui dit "Bon ben il faut que tu soyes à telle heure là-bas"... Ouais, mais faut que tu respectes quand même le temps de coupure parce que moi j'ai vécu l'expérience avec un chauffeur là, il y a quinze jours, on était en Allemagne ; il fallait quand même qu'il respecte ses temps de coupure. '''Phildar''' : C'est quoi les temps de coupure ? '''Gérard''' : Par exemple, tu roules huit heures, faut que tu t'arrêtes au moins trois quarts d'heure. '''Phildar''' : Pour pisser. '''Frigo''' : Pendant les trois quarts d'heure tu fais quoi ? '''Gérard''' : Eh ben tu te reposes, tu te mets dans ta couchette et tu t'allonges, et tu dors. '''Horloge''' : Ils foutent rien ! '''Gérard''' : Ouais ben, Horloge, s'ils foutent rien, ben je suis désolé mais ils vont pas risquer leur vie à cause d'un patron, on est bien d'accord. '''Manu''' : Mais nous, notre bouffe, elle arrive en retard aussi au supermarché ! '''Gérard''' : Ouais, mais d'accord, votre bouffe elle arrive en retard, mais de toute manière... '''Manu''' : Parce que trois quarts d'heure au départ, ça fait six, sept jours à l'arrivée ! '''Frigo''' : En plus elle est périmée en plus après ! '''Gérard''' : Ouais ouais, c'est ça, t'as bien... t'as raison ! Tu me prends pour un con, toi ? Non, tu m'y prendrais pas, tu m'y laisserais ! OK, alors attention à toi, Horloge ! Ouais, mais attention à toi Horloge parce que maintenant... tiens, ben comme t'as... on va demander à Dégage. '''Dégage''' : Écoutes, moi Gérard, c'est un métier que je respecte tout particulièrement parce que je trouve que c'est un super métier. '''Gérard''' : Alors maintenant Horloge, avec ta grande gueule, oui, maintenant tu vas l'ouvrir ! '''Horloge''' : Bah écoutes, moi, je pense que les routiers font pas... ils font pas un métier si difficile que ça, faut pas exagérer non plus quoi. '''Gérard''' : Non mais attends, attends ! Tu sais combien de temps qu'ils passent sur la route ? Ils passent pas loin de... '''Phildar''' : Sur un an par exemple... '''Gérard''' : sur un an, ils rentrent chez eux à peu près... à peu près... ça dépend des pays où qu'ils vont, mais t'en as les trois quarts, ils sont à peu près cinq jours sur la route. ''[applaudissements et rires dans le studio]''. '''Manu''' : Par an, ça c'est du taff de pro. '''Gérard''' : Alors je vais te dire une chose : non, non, non, non, non ! Mais attention, parce que là, là je m'attaque à... c'est moi qui ai décidé de faire ce débat-là parce que normalement on avait prévu la politique et je veux pas en faire. Donc avec Max, on avait décidé de changer. Donc maintenant, les questions sont pas préparées, maintenant ça va être des questions que je vais vous poser, mais faites-moi confiance... '''Max''' : Pourquoi ? Parce que d'habitude, quand tu les prépares tes questions, c'est pas toi qui les poses ? '''Phildar''' : Il joue gros, ce soir. '''Gérard''' : Si, si ! Donc je peux... je peux vous dire que le premier qui va déconner surn ce métier-là... '''Max''' : Ils ont le droit d'être contre par contre. '''reego''' : Sur IRC, ya chasse qui me dit qu'il aime pas les routiers parce qu'ils sont toujours là pour créer des accidents. '''Gérard''' : Là, par contre, Chasse, moi je vais te dire une chose : c'est pas les routiers qui créent les accidents ! Parce qu'il faut dire une chose, c'est que... d'accord on s'en prend toujours aux routiers, mais il faut dire une chose qu'on est bien content de les trouver. Mais les trois quarts du temps, c'est... c'est les bagnoles ! C'est des nanas même, voire même des mecs ou même des motos qui s'amusent à faire les cons. Par exemple, moi je l'ai vu il y a quinze jours, trois semaines, hein ? Fais-moi confiance qu'un mec sur deux... une file où que les routiers ne peuvent pas doubler, le mec qui roule à 60... je suis désolé ! Le mec... le routier, c'est... il y a des panneaux qui sont interdits pour doubler pour eux. Il peut pas doubler, il a beau faire des appels de phare au mec, eh ben le mec il n'en a rien à foutre à part freiner ! Les mecs qui s'amusent à faire ça, pour moi, qu'ils restent chez eux, qu'ils prennent leur voiture le dimanche ou qu'ils prennent les transports en commun, ça sera mieux. Ça coûte encore moins cher, ça fait moins de pollution. '''Phildar''' : Ouais, mais le transport en commun sur l'autoroute, c'est pas évident. '''Gérard''' : Ouais, mais attends ! Maintenant il y a le Météor et puis il y a des "Tramways... '''Phildar''' : nommés Désir" ! '''Gérard''' : Ouais, non mais t'as des tramways et t'as des... t'as des bus, euh... '''Phildar''' : Roissy Bus, tout ça. '''Gérard''' : Ouais, non mais t'as des bus, hein ! Donc euh... Tu Me Saoule ? '''Tumsoule''' : Ouais, bah moi je les trouve hyper sympa. Mais néanmoins, sur l'autoroute, sache qu'ils me gonflent, mais puissants quoi, parce qu'ils me bloquent à chaque fois ! '''Gérard''' : Ah mais attends ! C'est pas toi qui les emmerdes aussi ? '''Tumsoule''' : Euh non, mais quand je te dis ça, c'est qu'ils roulent pas vite et franchement ça m'emmerde, ça me fait perdre du temps. '''Gérard''' : Ouais, mais ils sont... ouais, mais euh... dans ces cas-là, si tu peux pas les doubler, dans ces cas-là... '''Tumsoule''' : j'ai rien contre eux, mais simplement ils me font chier. Ils me font chier sur la route. '''Gérard''' : Ouais, mais... mais attends ! Dans ces cas-là, si on vous fait chier sur la route... si les... les routiers te... te font chier sur la route, dans ces cas-là, pourquoi tu prends ta bagnole ? Dans ces cas-là, tu prends... tu prends une... une mobylette et puis euh... tu seras tranquille ! '''Arnet''' : Oui, mais Gérard, la route n'appartient pas aux routiers... '''Tumsoule''' : Une mobylette sur autoroute, je pense pas que ça se fait. '''Gérard''' : Non mais attends ! Sur autoroute tu as quatre voies, alors viens pas me dire à moi que tu peux... tu peux pas doubler parce que là, moi je vais te dire une chose : que t'as eu ton permis dans une pochette surprise ! '''Manu''' : Il n'y a pas besoin de permis pour la mobylette. '''Gérard''' : Ouais, non mais peut-être ! '''Tumsoule''' : T'emballes pa. Les routiers, je les aime bien, mais ils me font chier, c'est tout. '''Gérard''' : Ouais, bah alors dans ces cas-là, le jour où tu vas te faire coincer entre deux routiers, hein ? Et tu verras que qu'est-ce que ça va te faire. 35 tonnes, 35 tonnes ? '''35t''' : Ouais. Alors moi je voudrais dire en fait que les routiers, bah je les aime bien quoi, parce que bon, comme je suis... comme je suis cibiste et tout, bon, des fois on discute ensemble. '''Gérard''' : Non mais attends ! Est-ce que... est-ce que t'es routier ou pas ? '''35t''' : Non non, je suis pas routier, je suis cibiste moi, c'est pas pareil. '''Gérard''' : Non mais attends, faut pas confondre tentacule et enc... ta sœur. Parce que la CB avec les routiers, je vois pas le rapport. Moi je te parle : que pensez-vous des routiers ? donc je te demande pas si t'es cibiste ou pas, moi je m'en fous ! '''35t''' : Moi je le vois très bien parce que tous les routiers ont une cibie ! Donc j'écoute les routiers, donc on discute ensemble et donc je dis qu'ils sont sympas. Voilà. '''Gérard''' : Ah, OK. Arnett ? Internet, pardon ! Tu m'excuses, mais je prends une question... je prends les questions les plus importantes sur Internet. Et c'est quoi ce Minitel de naze là ? '''Reego''' : Oui, en attendant sur IRC, il y a... je sais plus comment il s'appelle... Desmercelles qui disait que : "il y a des pistes cyclables, pourquoi ils feraient pas des pistes camionnables ?" '''Gérard''' : Ça n'existe pas et je pense pas qu'ils en feront. '''Phildar''' : Et pourquoi ? '''reego''' : Non mais pourquoi ils en feraient pas ? '''Gérard''' : Non mais il n'y a pas des pourquois, et des comment? Les accidents, c'est pas les routiers qui les font ! Faut pas dire tout ça ! Que ça soit... les routiers, en fin de compte, ils ont... ils sont au volant 24 heures sur 24 derrière leur camion, et les mecs qui sont en bagnole, ils sont même pas 24 heures sur 24. Ils prennent leur boulot pour aller... pour aller... ils prennent leur bagnole pour aller au boulot, ils posent leur bagnole, ils vont bosser et ils ont rien à foutre de ce qui se passe après. Les routiers... les routiers... les routiers, c'est leur boulot, c'est leur gagne-pain, OK ? Alors, Arnett ? '''Arnet''' : Ouais, alors moi j'aime bien les routiers mais quand même, il y a des limites. Parce qu'un jour j'ai voulu aller à Eurodisney, à cause d'eux j'ai pas pu, puisqu'ils étaient en grève et ils ont bouché l'autoroute. '''Gérard''' : Attends Arnett. Ouais, Arnett. Déjà, pour aller à Euro Disney, tu as deux possibilités : tu prends ou l'autoroute ou la nationale. Ne viens pas me dire... viens pas me dire qu'ils ont bloqué l'autoroute et la nationale parce que je te dirais : "t'es un menteur" ! '''Arnet''' : Bah ouais, mais moi j'ai une voiture, c'est pas pour prendre les transports en commun, donc voilà. '''Gérard''' : Dans ce cas-là, t'as une voiture, tu peux prendre la nationale. '''Arnet''' : Bah oui, mais c'est plus rapide par l'autoroute, donc j'ai pas à perdre mon temps non plus. '''Gérard''' : Et alors ? Bah dans ce cas-là, t'avais qu'à prendre la nationale ! De toute manière la nationale, elle est pour tout le monde ! Elle est aussi bien pour les routiers pour que... pour les voitures. '''Frigo''' : Justement ! Il y a des routiers sur les nationales et sur les autoroutes. '''Arnet''' : Oui, pour le raisonnement de tout à l'heure : pourquoi les routiers ne prennent pas les transports en commun dans ce cas-là ? '''Gérard''' : Mais attends ! Mais les gens, quand ils partent de chez eux pour aller bosser, ils y vont comment ? '''Max''' : Comment tu veux mettre un camion dans un bus ? '''Arnet''' : Ah, c'est vrai ! Désolé les gars ! '''Phildar''' : On peut mettre un camion sur un train. '''Gérard''' : Non mais attendez, non mais ça... l'histoire du camion sur les trains, ça c'est une histoire du gouvernement. Je trouve que le gouvernement il est un peu con, parce que s'ils vont mettre des camions sur les trains, fais-moi confiance qu'on n'aura plus de routiers en France ! '''Manu''' : Pourquoi pas mettre des trains sur des camions ? Comme ça, ça ferait plus de taff pour les routiers. '''Gérard''' : Occupes-toi du standard et éteins ton micro, que je t'ai déjà dit, ça vaudra mieux. Donc deuxième question : combien coûte un permis VL ? '''Horloge''' : Un permis quoi ? '''Gérard''' : PL ? '''Horloge''' : VPL ? '''Tumsoule''' : C'est quoi ça ? C'est le nom d'un vaccin ? '''Gérard''' : Bon alors toi, tu dégages ! Bonne nuit à toi. C'est qui ? '''Phildar''' : Ça doit être une meuf mais je sais plus laquelle. '''Gérard''' : Non mais là tu es... tu cherches pas, allez hop, tu me vires n'importe... '''Phildar''' : Donc un permis PL, je pense que c'est un permis poids lourd. '''Gérard''' : Alors, combien ça peut coûter à votre avis ? On va demander à Arnett. '''Arnet''' : D'après moi, ça doit coûter genre dans les dix mille francs comme un paquet de clopes. '''Gérard''' : D'accord, ben Arnet... '''Phildar''' : Il sait pas, il dit une proposition. '''Gérard''' : Mais tu n'as pas de permis de voiture, toi ? '''Arnet''' : Si mais je n'ai pas payé très cher puisque je l'ai passé aux États-Unis. '''Gérard''' : Ouai t'as raison. Tu as passé ton permis aux États-Unis ? Tu me... mais tu me prends pour un con ou quoi ? '''Arnet''' : J'ai passé un an d'études aux États-Unis et j'en ai profité pour passer mon permis là-bas puisque c'est moins cher. '''35t''' : Ouais, alors moi je pense que... t'as approximativement... je pense que ça doit coûter dans les 1 franc, 50, 2 francs. '''Gérard''' : Bon alors toi... '''Phildar''' : Il est lourd lui ! '''Gérard''' : 1 franc, 50, 2 francs ? Non non non, mais attends ! C'est le prix d'une communication téléphonique. OK ? '''35t''' : Mais non... anciens, je te dis, pas nouveaux ! '''Phildar''' : Ancien permis ou nouveau permis ? '''Gérard''' : Non mais de toute manière il n'y a pas d'ancien ou nouveau permis ! '''35t''' : Non mais ancien franc, tu comprends ? '''Gérard''' : Il n'y a pas d'ancien ou nouveau permis maintenant ! '''Phildar''' : Bah si ! Bah si, t'as le permis euro et t'as le permis franc ! '''Gérard''' : Mais attends, abruti ! Toi, qu'est-ce que tu me parles de l'euro ? Mais attends, t'es complètement... ''[Gérard se met à pousser des cris de singe maladroits, inspirés de vincent Lagaffe]''. '''Tumsoule''' : Ouais, je sais pas, ça doit certainement coûter la peau des fesses parce que vu le nombre de manifestations qu'ils font... '''Gérard''' : Je crois que t'es à la plaque aussi toi, t'es comme 35 tonnes, vous y allez à la moquette, hein ! Tu Me Saoule ? '''Tumsoule''' : Ah ouais non mais moi quand je t'écoute je débloque. '''Gérard''' : Ah ouais, ben fume la moquette ! Fume la moquette, ça vaudra mieux. Horloge ? '''Horloge''' : Oui, ben moi je pense que le permis tu l'as... c'est celui qui arrive à boire le plus de bières à la suite. Parce que les routiers, c'est des alcooliques quand même. '''Gérard''' : Horloge, c'est terminé pour toi. Bonne nuit. Horloge, terminé. Non non mais c'est même plus la peine qu'il revienne ! '''Dégage''' : Ben moi franchement j'ai pas vraiment d'idée, mais je pense quand même que ça doit valoir un tout petit peu plus cher que le permis voiture. C'est-à-dire dans les alentours... je sais pas, du permis voiture quoi. '''Gérard''' : Non mais attends, un permis voiture vaut combien à l'heure actuelle ? '''Dégage''' : Ben moi j'ai payé ça 10 000 balles quoi. Ah ben oui, avec les cours, excuse-moi ! '''Gérard''' : On se tait derrière ! Attendez, attendez ! Tu dis 10 000 balles ? '''Phildar''' : Tu déconnes... '''Gérard''' : J'ai l'impression... Dégage ? Dégage ! Non mais attends, Dégage ! Dégage, dégage ! Et derrière vous vous la fermez, merci ! Et dégage, déjà rien que le prix que tu m'as annoncé... c'est rien que le prix d'un permis voiture, et encore si tu l'as du premier coup avec les formations qu'ils font ! '''Dégage''' : C'est ce que je te dis Gérard ! Tu m'as demandé le prix que j'ai payé pour mon permis voiture, je t'ai dit : "10 000 balles". '''Frigo''' : Je sais pas, je vais dire 100 000 francs hors taxes, non j'en sais pas du tout. '''Gérard''' : Hé Frigo ! Je pense que tu ferais mieux d'aller voir s'il n'y a pas quelque chose dans ton camion. '''Frigo''' : Ah mais j'ai pas de camion moi Gérard ! '''Manu''' : C'était pour vous dire qu'on accueillait donc, à la place d'Horloge, on accueille Antiroutier. Je crois qu'il a eu un accident, un truc pas possible, un truc pénible. Bonsoir. Il va vous raconter. Bonsoir. '''Gérard''' : Bonsoir. ''[un blanc]''; Alors ? '''Phildar''' : Il a eu un problème avec un routier, donc laisse-le se remettre quand même. '''Gérard''' : Non mais attends, qu'il réponde maintenant ou c'est pas la peine qu'il passe ! '''ANtiroutier''' : Je dois répondre à la question ou ? '''Gérard''' : Bah oui ! '''ANtiroutier''' : Bah je viens d'arriver donc... '''Gérard''' : Ouais bah alors ? Combien coûte un permis PL ? '''Antiroutier''' : Euh... c'est-à-dire c'est du... c'est quoi, c'est du sans-plomb ça ? C'est du... je dirais... ''[Gérard siffle l'air d'une chanson de supporter de foot mise sur CD, intitulée Ce soir on vous met le feu, avant de la chanter]''. Justement vous êtes en train de chanter une chanson qui fait bien penser que les routiers quand même sont des alcooliques. Parce que moi j'ai eu un accident avec un camion. '''Gérard''' : Ouais ? Il y a combien de temps ? '''Antiroutier''' : Il y a un an et demi. Un accident.. Un petit accident, mais pas méchant quoi. Mais bon, le... le routier avait un peu bu. Vous parlez, vous rigolez depuis tout à l'heure sur les routiers, mais je pense qu'il y a beaucoup de routiers... vous rigolez depuis tout à l'heure sur les routiers qui roulent beaucoup, mais qui ont de l'alcool, qui boivent un peu, et je pense qu'on n'en parle pas. Les routiers c'est très dangereux parce qu'un camion c'est très dangereux. Quand ça double est qu'il est fatigué, qu'il a pas dormi depuis 48 heures... Parce que les routiers vous dites qu'ils s'arrêtent pour dormir, mais ça il faut... ils s'arrêtent pas pour dormir, c'est pas vrai ! Quand ils sont en retard, ils s'arrêtent pas. '''Phildar''' : Quand ils sont en retard ils s'arrêtent pas. '''Gérard''' : Attendez, attendez ! Alors Phildar, moi je peux te dire une chose : que si le patron lui dit... tu vas... t'y vas... c'est que c'est le patron ! C'est de la faute du patron parce que le mec il risque sa vie aussi ! '''ANtiroutier''' : C'est peut-être la faute du patron, mais c'est pas le patron qui va tuer des gens sur la route ! '''Gérard''' : Ouais, mais d'accord, mais là-dedans c'est pas le patron qui prend ! '''Phildar''' : C'est le contribuab ! '''Gérard''' : Non non non ! Parce qu'il faut dire... attends toi, le contribuab... ''[extrême difficulté pour redire le mot]''. '''Reego''' : Oui, oui, il a raison ! '''Gérard''' : Attends ! Mais attends ! Tu crois que c'est le contribuab qui va redonner ? bon bref. Je vais répondre à la nana qui m'a dit ça coûte 1000 francs quoi. '''Manu''' : Moi j'ai une question Gérard : est-ce que dans le permis poids lourd il y a le camion qui est compris avec, dans le prix ? Quand t'achètes le permis, t'as le camion avec, non ? '''Gérard''' : Non ! '''Manu''' : En plus ou que t'achètes le camion ? '''Frigo''' : Faut acheter la remorque en plus. '''Gérard''' : Non mais attends ! Tout à l'heure, je vais t'acheter... ta remorque, que tu vas dégager. '''Frigo''' : Non mais je me renseigne, c'est tout, je sais pas. '''Gérard''' : Ouais, non mais moi je te dis, tu vas dégager si tu continues ! Non mais moi je peux vous dire... moi je peux dire qu'un permis à l'heure actuelle coûte plus de 20 000 balles. '''ANtiroutier''' : Non non non ! '''Gérard''' : Quoi non ? Attends ! T'es mieux renseigné que moi ? '''Antiroutier''' : Oui, tout à fait monsieur ! Je me suis renseigné tout à fait. Je peux vous dire qu'un permis à l'heure actuelle... on voit que ça fait longtemps que vous n'êtes plus routier ! Ça vaut plus 20 000 francs, ça vaut au moins 30 ou 40 000 francs. Vous étiez peut-être routier, vous vous êtes tout à fait le genre de routier... le genre de routier des années 80, mais aujourd'hui on est à l'an 2000. '''Gérard''' : Ouais, mais non ! Pour l'instant, on est en 1998, OK ? '''Antiroutier''' : Non mais jouez pas sur les mots ! Vous êtes bien routier. '''Gérard''' : Ouais. Alors la troisième question : la Cibie est-elle un moyen de communication ? Donc, on va s'écouter Gilbert Bisous avec "Donne-moi du sud pour Noël" et on se retrouve tout à l'heure pour la suite du débat. ''[Musique]''. '''Gérard''' : Voilà donc vous pouvez toujours nous appeler au e ... C'est ça ? '''Manu''' : Les deux doivent marcher. '''Gérard''' : Donc apparemment ça a l'air de bien fonctionner. '''Phildar''' : C'est super ce soir ! '''Manu''' : C'est super, c'est magnifique. '''Gérard''' : Merci à tous sur Internet, ça a l'air de... de bien fonctionner aussi. Sur Minitel par contre, là je suis pas content, parce que sur Minitel y'a personne. '''Phildar''' : C'est pas grave ! Ça fait deux heures qu'on est là, il a pas fonctionné. Donc on va attaquer... on va attaquer la troisième question. JG. ''[Gérard ferme l'écran du minitel, rageusement]''. '''Gérard''' : Il m'énerve, lui. Donc, troisième question : la Cibie est-elle un moyen de communication ? Donc 2h36 et on est toujours sur le thème du débat des routiers. Donc on va demander à Arnett. '''Arnet''' : Ouais. Tu sais, tu peux me répéter la question ? C'est pas pour t'ennuyer... c'est pas pour t'ennuyer Gérard, je te jure ! '''Gérard''' : Non non Arnett ! Arnett, je ne répète plus les questions ! '''Manu''' : Moi je vais la répéter si tu veux. '''Arnet''' : Merci Manu, t'es gentil. Alors vas-y. '''Manu''' : La Cibie est-elle un moyen de communication ? '''Arnet''' : Alors... Bah je pense que oui. Oui, c'est sûr, puisqu'on peut communiquer avec des gens en fait. C'est automatiquement un moyen de communication. '''Gérard''' : OK. OK. Donc pour toi, la Cibie c'est un moyen de communication ? OK. 35 tonnes ? '''35t''' : Ouais bah je dirais un petit peu comme Arnett quoi, en fait. C'est beaucoup de gens qui... '''Gérard''' : Ouais, non mais attends ! 35 tonnes ? Faut quand même essayer... de chercher... Non non mais vous avez eu le temps pendant la pause de réfléchir ! Faut pas dire... '''Arnet''' : Ouais mais tout le monde est d'accord avec moi, c'est pour ça Gérard. '''Gérard''' : Ouais mais attends Arnett ! Arnett, pour l'instant tu vas te taire s'il te plaît. '''ANtiroutier''' : Je suis pas d'accord, moi ! '''Gérard''' : Non mais attends, 35 tonnes... et même les autres là qui sont pas d'accord... '''35t''' : Bon alors attends. Moi je te dis déjà : la Cibie, à la base, c'est un moyen de communication, tu vois ? Comme le téléphone. Donc en fait, ça s'est partagé à plein de gens, de l'émotion quoi, tu vois ? Donc voilà, c'est un moyen de communication, c'est tout. '''Gérard''' : Ouais, non mais... donc tu reprends la question d'Arnett. Ben oui, Arnett il t'a dit que c'était un moyen de communication. Non non non mais attendez, attendez ! Moi je vais vous dire une chose : là, si tout le monde me répond le même truc qu'Arnett... Je suis d'accord avec Tarnet ou avec toi 35 tonnes. Moi je vais vous dire une chose : je vais zapper vite fait les questions. '''ANtiroutier''' : Allô, c'est Anti-Routier là. Allô ? '''Gérard''' : Non non. Tu Me Saoule ? '''Tumsoule''' : Moi je trouve que la Cibie c'est vachement important pour eux. Au moins quand il y a un contrôle, tout de suite ben ils sont prévenus quoi. Parce que sinon... '''Gérard''' : Non mais attends ! Parce que j'ai pas... j'ai pas entendu ce que tu m'as dit, parce qu'il y en a qui ricanent derrière. ''[antiroutier rit, forcé]''. Bon Arnett ? Tu te la fermes ! '''Phildar''' : C'est Anti-Routier. '''Gérard''' : Bon alors Anti-Routier, tu commences à me les gonfler sérieusement ! '''ANtiroutier''' : Parce que t'as pas laissé parler les hommes jusqu'au bout ! '''Gérard''' : Ouais mais attends ! Moi je fais ce que je veux, d'accord ? En de bon entendeur, salut. Alors pour l'instant tu t'écrases ! Non mais pour l'instant je t'ai pas demandé quelle heure il était ! '''Antiroutier''' : Ouais ben il est 2h ! '''Gérard''' : Ouais ben quand je t'appellerai Pot de chambre, tu sortiras de sous le lit, OK ? Alors, Tu Me Saoule ? '''Tumsoule''' : Ouais, donc je te disais que pour eux, je trouve que c'est vachement important la Cibie parce que quand il y a des contrôles d'alcootest, ils peuvent être prévenus et puis ça leur évite de leur faire sauter leur permis. '''Gérard''' : Ouais, c'est ça ! Non mais attendez, attendez derrière s'il vous plaît ! '''ANtiroutier''' : Oui mais Gérard ? C'est l'Anti-Routier ! Tu trouves pas que c'est normal vraiment qu'avec la Cibie, justement qu'elle dit comme ça ça permet les routiers entre eux d'éviter... de prévenir l'autre pour que justement... il y a des contrôles d'alcool ! Ça veut dire que un mec qui a bu au volant et on va le prévenir qu'attention il y a des flics, donc on va essayer d'éviter qu'il puisse se faire arrêter, donc il va continuer à conduire avec l'alcool au volant. '''Tumsoule''' : Ah bah c'est ce que les routiers font ! Ils continuent à conduire ! '''ANtiroutier''' : Ben c'est inadmissible ! '''Gérard''' : Oh tu me... oh ! Anti-Routier, Tu Me Saoule s'il vous plaît, vous vous calmez ! '''Antiroutier''' : Mais attends, tu nous saoules aussi ! '''Gérard''' : Anti-Routier, si ça te plaît pas, tu dégages ! Tu raccroches. Anti-Routier, si ça te plaît pas, tu t'écrases, tu t'écrases ! On va demander à Dégage ? '''Dégage''' : Bah bon écoute Gérard, moi je crois que c'est quand même un moyen de communication vu le nombre de personnes qui ont la cibie, même dans les voitures. Moi je suis tout à fait d'accord parce que c'est quand même un moyen pour les routiers de communiquer, parce qu'à part le camion ils n'ont rien d'autre. Donc moi je suis tout à fait d'accord. ''[antiroutier ponctue cette réplique, par un oh làlà écœuré, puis "ils vont en boîte de cul"]''. '''Gérard''' : Manu, tu me dégages Anti-Routier là. '''Antiroutier''' : Eh voilà ! Merde ! On peut même pas discuter. '''Gérard''' : Ouais, y'a pas de merde ! OK ? '''Dégage''' : Ah mais c'est incroyable la vulgarité dans ce débat ! '''Reego''' : Gérard ? Gérard ? Sur IRC y'a Dav qui te demande si les kits mains libres Cibie dans un camion, est-ce que c'est dangereux ? '''Gérard''' : Kit main libre sur Cibie ? Pour l'instant j'en ai jamais entendu parler. '''Antiroutier''' : Ça existe aux États-Unis ! '''Reego''' : Ah si, tu viens d'en entendre parler là ! '''Gérard''' : Pour l'instant aux États-Unis... '''Reego''' : On me confirme ! '''Phildar''' : Aux États-Unis, en fait, tu peux te masturber, conduire et faire de la Cibie ? '''ANtiroutier''' : Non c'est pas ça ! Non ! '''Gérard''' : Non mais attends ! Parce que toi tu te masturbes en conduisant ta voiture et en faisant... '''Antiroutier''' : Les routiers ils font que ça puisqu'ils sont jamais avec leur femme ! '''Gérard''' : Alors attends ! Alors là je vais te dire une chose : qui c'est qui vient de dire ça ? Eh oh ! Alors je vais te dire une chose : que tu vois, la question que tu viens de dire... '''ANtiroutier''' : Non mais c'est pas une question, c'est une affirmation ! '''Gérard''' : Oui non mais moi je peux te dire une chose... moi je vais te répondre à ta question... Je vais te dire une chose : que tu crois que les routiers ont que ça à foutre de se masturber dans leur camion ? '''ANtiroutier''' : Avec le système de main libre ! Avec le système de main-libre. '''Gérard''' : Mais attends, tu crois... tu crois qu'ils ont... ils ont des trucs automatiques ? '''ANtiroutier''' : Mais par exemple, au lieu de mettre de la cibie, il faudrait mieux de mettre l'Internet. '''Gérard''' : Je vais te mettre un gros doigt dans le cul aussi ! '''Manu''' : Ça c'est toi qui balances l'info là. '''ANtiroutier''' : T'es bien routier, t'es bien vulgaire, t'es bien routier là ! '''Gérard''' : Attendez s'il vous plaît ! J'ai une question Internet. '''Reego''' : Non, c'est pas une question, c'était juste pour dire qu'il y a un certain Yoda sur IRC qui est en direct dans son camion. Bon, il est actuellement en direction vers Rouen. '''Gérard''' : Direction vers Rouen ? '''ANtiroutier''' : Est-ce que... est-ce que l'Internet ça vous sert... est-ce que... pardon, la cibie ça vous sert pas justement à savoir où est-ce qu'on peut trouver du carré de vigne à deux heures du mat' ? '''Gérard''' : Allez, dégage toi ! Allez ! C'est terminé ! C'est terminé ! '''Frigo''' : Donc moi je trouve que c'est un bon moyen de communication, la cibie. Puis ça permet aux routiers de prévenir quand il y a un accident sur leur route. '''Gérard''' : Ouais, mais ça... ça de toute manière... la cibie, je pense que moi j'en ai fait, je peux vous dire une chose : que la cibie... ''[ANtiroutier crie Tatayé dans le combiné, pseudo Cibie prétendu par Gérard le concernant]''. bon, tu vas te calmer toi, OK ? Donc moi je peux vous dire une chose, que la cibie c'est un moyen de communication pour savoir où sont les radars et de savoir comment que ça roule. '''Arnett''' : GG ? J'ai une question Internet de la part d'Anakin qui me demande si t'as des calendriers de femmes nues dans ta cabine de camion. '''Gérard''' : Oui. Alors toi tu dégages ! '''Reego''' : Non mais il est sur Internet en plus ! '''Frigo''' : Mais c'est pas lui qui doit dégager, c'est le mec sur Internet ! '''Gérard''' : Ouais, non mais lui tu lui dis au revoir, on lui répond plus ! '''Manu''' : Gérard excuse-moi ! On va accueillir deux personnes : on va accueillir Goldo et on va accueillir Tam Tam. '''Gérard''' : Salut Tam Tam, bonsoir. Donc t'as entendu la question là ? Donc je la répète pour Goldo et Tam Tam : donc la Cibie est-elle un moyen de communication ? Pas 50 ans. '''Tam tam''' : Tout à fait ! Oui. Pour moi oui. Pour moi Tam Tam c'est un moyen de communication. Ça permet effectivement, lors des accidents,, des contrôles radars, de prévenir. '''Gérard''' : Voilà. Donc tu reviens à ce que... ce que je disais à l'instant. Attends 5 minutes Tam Tam. '''Reego''' : Oui ? Sur IRC on me demande si tu connais la "mini Cibie" ? '''Gérard''' : Ouais, c'est un petit truc de poche, un genre de portab. De toute manière c'est... Ouais ouais, c'est des Cibie portab. Non non ! Non non ! Non non ! Non non ! Tu rigoles Phildar ! Mais moi je réponds, je réponds ! Moi je vais dire une chose : que la Cibie portab, tu n'entends même pas la personne que t'as. '''Phildar''' : T'es capab de l'avoir dans la main ? '''Gérard''' : Ouais, non mais... c'est comme un téléphone portab mais sauf... sauf que t'as les canaux qui s'affichent ! '''Manu''' : C'est un peu incroyab, non ? '''Tam tam''' : La distance du portable ? C'est à combien de distance ? '''Gérard''' : Euh... sur la Cibie portab je pense que c'est à peu près la même distance que le portab. '''Goldo''' : 2 mètres 50 ? '''Gérard''' : Ouais, non même pas ! Même pas ! '''Tam tam''' : Mais il paraît que... il paraît que le son est exécrab. '''Gérard''' : Ouais ben ça... ça dépend de l'antenne qu'on a. '''Phildar''' : Ça dépend des contribuab ! '''Gérard''' : Non non non non, ça dépend de l'antenne qu'on met dessus ! Ça dépend de l'antenne ! Non non mais stop ! Là on va... on va couper parce qu'il est quand même 3h... 2h45. '''Tam tam''' : Salut à tous, merci en tout cas ! '''Gérard''' : C'est qui ? '''Tam tam''' : Ah c'est pas fini ? '''Phildar''' : Bah tu dis qu'on coupe alors nous on arrête l'émission. '''Gérard''' : Alors non, non non mais... on va abréger sur la question. Maintenant, moi je vais... une question qui m'est revenue... et il y a... il y a un auditeur qui est là et il y a un auditeur et qui m'a demandé de la poser : combien coûte pour faire décorer son camion ? '''Tam tam''' : Tam Tam. J'ai vu le reportage. '''Arnett''' : Arnet aussi je l'ai vu ! '''Tam tam''' : Et c'est hallucinant ce que ça coûte cher ! '''Gérard''' : À ton avis ? Non non mais grosso modo ! On va... on va pas s'acharner sur ça. À ton avis, combien que ça peut coûter ? '''Tam tam''' : Parce que Manu m'a dit qu'il fallait que je réponde en euros. C'est obligé ? '''Gérard''' : Non non non ! Pas en euros ! '''Manu''' : C'est mieux ! C'est la nouvelle norme ! '''Gérard''' : Éteins s'il te plaît ! Manu merci ! Non non. Non non Tam Tam ! Non non mais sans parler d'euros, '''Tam tam''' : En francs français ? Je dirais 30 000 francs. '''Gérard''' : 30 000 ? '''Phildar''' : Qui dit mieux ? '''Gérard''' : Donc pour toi ça coûterait 30 millions '''Tam tam''' : Avec toutes les guirlandes et tout. À peu près. '''Gérard''' : Non non non ! Simplement pour faire décorer l'extérieur ! Pas l'intérieur. '''Tam tam''' : Ah pardon ! Je dirais 100 000 francs. '''Gérard''' : Ouais, mais le tout grosso modo, qu'il me dit... '''Tam tam''' : 100 000 francs. 50 000 francs avec la peinture. '''Goldo''' : Avec 50 000 francs, avec la peinture, je te fais un prix, GG ! '''Gérard''' : OK, attendez. Tam Tam, tu me dis 50 ? '''Tam tam''' : 50 000 francs avec la peinture. '''Goldo''' : Ouais bah moi je te disais, je te fais un prix si tu veux pour écrire « poissonnerie » ou « camion de fret » sur un camion, pas de problème, je te fais ça pour... '''Gérard''' : Ouais bah Goldo, Goldo, Goldo... Au revoir ! Va, va, va ! Va, va... Essaye de... de continuer... Non mais continue, continue à voyager ! '''Goldo''' : Mais c’est une décoration ! '''Manu''' : C’est qu’il a pas compris : c’est pas les écritures, c’est les peintures, les dessins ! '''Goldo''' : Tu parles de publicité, tout ça... poissonnerie, boucherie pour les livraisons. Excuse-moi, j’ai pas compris. '''Gérard''' : Mais attends, faut pas confondre... '''Goldo''' : Tu veux dire genre un dessin ? Genre tu te fais dessiner un cow-boy, un indien, un truc comme ça ? Un paysage ? '''Gérard''' : Non mais n’importe ! T’as pas besoin de dessiner ce que tu veux. '''Goldo''' : Qu’est-ce que tu dessinerais toi, GG, si tu pouvais décorer ? '''Gérard''' : Non non, mais on va demander à Frigo. '''Frigo''' : Ouais, moi je dirais 20 000 francs. '''Arnet''' : Moi je dirais 10 000. '''Dégage''' : 30 000. '''Tumsoule''' : 383,44... '''Gérard''' : Dégage-moi ça, dégage-moi ça ! Dégage ! Allez hop, bonne nuit. Euh, 35 Tonnes ? '''Manu''' : Il est parti. C’est Goldo à la place, je te l’ai dit tout à l’heure. '''Arnet''' : Euh ouais, moi je pense que ça doit coûter aux alentours de 10 000 francs. '''Gérard''' : Ah bah... Ah bah... Non non ! Grosso modo, je pense que... Ça c’est dommage que j’ai pas un routier qui pourrait me le confirmer, mais c’est pas grave. Je le saurai et puis je vous donnerai le prix réel. '''Reego''' : Il y en a un sur IRC, il peut te répondre tout de suite si tu lui poses la question. '''Gérard''' : Bah qu’il me dise ! Bah... le prix que ça peut y coûter ! '''Phildar''' : S’il est sur IRC... Ça dépend ce que tu dis. '''Gérard''' : Non mais, le prix que... que ça coûte. '''Arnet''' : Un ordinateur ? 2 francs. Ou 1500 ? Un truc comme ça. '''Goldo''' : 2,29 la minute ! '''Phildar''' : Ça dépend si tu prends le clavier. '''Reego''' : Il est sur la route, ça met un peu de temps à répondre. Il me dit 50 000 euros. '''Gérard''' : Euh... non mais ça... non ! Moi je peux vous dire, eh je pense que... je pense que de toute manière tout le monde a regardé le reportage de la semaine dernière, je pense. Tu ne l’as pas vu ? Moi je peux vous dire que ça coûte plus de 10 000 balles. '''Manu''' : Pour nous renseigner, on a Marcel, un routier là qui nous a appelé. Marcel, salut ! '''Marcel''' : Oui, bonsoir. Moi j’ai fait décorer mon camion là justement, ça tombe vachement bien. Et là, j’ai la facture sous le nez : j’en ai eu pour 25 367 francs HT. '''Arnet''' : Avec la TVA ou pas ? '''Gérard''' : Non mais attends, Marcel. Non mais attendez les autres s’il vous plaît derrière ! Vous me laissez... vous me laissez parler ! Avec ou sans TVA, toi tuvas te la fermer pour l'instant. Je vais discuter un peu avec Marcel. Bon, toi Marcel, tu me dis 25 367 francs HT ? Donc hors taxe ? Mais t’as fait l’extérieur ou l’intérieur de ta cabine ? '''Marcel''' : La totale ! '''Gérard''' : Donc la totale ? Donc t’as le volant avec... Oh attends ! Tu me calmes celle qui rigole comme une... comme une bécasse, parce que ça m’énerve ! '''Tam tam''' : Tu as mis la photo de ta femme sur le... le volant ? '''Marcel''' : J’ai un volant... le levier de vitesse... '''Gérard''' : Phildar ? Attendez ! Attendez s’il vous plaît ! Phildar, tu me coupes tout le monde sauf... Tu me laisses le dernier, Marcel. Donc pour toi, Marcel, ça t’a coûté 25 000... '''Marcel''' : 267 francs quand même. '''Reego''' : Attends, attends Marcel ! Sur IRC, donc il y a Zioui qui te demande ce que tu préfères comme décoration sur un camion. '''Gérard''' : Alors là, ça c’est une très bonne question. Donc... '''Tam tam''' : La photo de Jacques Brel ! '''Gérard''' : Toi, tu... tu fermes ta gueule ! '''Marcel''' : Ça dépend du routier ! '''Gérard''' : Bon, toi, tu te la fermes aussi ! Donc... Moi personnellement, dessus, j’aurais bien vu... mais je sais pas si ça existe... '''Phildar''' : Cloclo ? '''Manu''' : Ricky Martins ? '''Gérard''' : Donc moi je réponds : donc c’est... c’est un truc avec carrément la Formule 1 dessus ! ''[réactions des auditeurs grognant que c'est blaireau]''. Non non mais... mais... mais peut-être c’est un truc blaireau, mais il faut dire une chose... '''Tam tam''' : Tu peux faire ça en Alain Prost ou Senna, comme ça, tu mets juste des briques. '''Gérard''' : Ouais, c’est ça ! Alors bonne nuit à toi ! OK. Donc, qui c’est... comme on avait Marcel ouais... Donc... ouais, mais t’as payé que l’extérieur toi, pour toi ? '''Marcel''' : Ah non non, la totale ! Extérieur, poupée gonflable comme tout routier qui se respecte. Et puis un petit frigo pour mettre les bières ! '''Gérard''' : Ouais ça, le frigo de toute manière tu peux le mettre à l’extérieur. '''Tam tam''' : Quand tu dis que tu veux repeindre ton truc en Formule 1, c’est parce que t’aurais l’impression d’aller plus vite ou pas ? Ou c’est juste pour un hommage ? '''Gérard''' : Non non non ! Mais ça maintenant tu peux mettre n’importe quoi ! Non, mais je veux pas rendre hommage à Ayrton Senna ou autre. '''Tam tam''' : Je parle de la Formule 1 en général. '''Gérard''' : Non mais moi je te dis : tu peux très bien... tu peux très bien décorer ta cabine avec un truc de Formule 1. '''Tam tam''' : Si t’as pas l’argent ? '''Gérard''' : Bah dans ce cas-là tu le fais pas. '''Tam tam''' : Sinon, sur ton camion, tu pourrais très bien marquer "Vroom" ! '''Gérard''' : Bah ouais, Vroom ! Ça veut dire quoi ? '''Marcel''' : Bah, pour aller vite ! '''Goldo''' : Moi je veux bien te refaire ton intérieur, y’a pas de problème. '''Gérard''' : Bon bah toi, toi tu t’appelles... euh... Bon, de toute manière on s’écoute le dernier disque. '''Phildar''' : Bah tu vas peut-être poser une question ? Y’a encore des questions ? '''Tam tam''' : Est-ce que les routiers, quand vous faites la nuit, quand vous roulez la nuit, vous êtes obligés de vous arrêter sur l’autoroute... sur les aires d’autoroute la nuit ? Est-ce que vous vous arrêtez pour voir des putes dans les camionnettes ? Dans les camionnettes ? Dans les camionnettes ? '''Gérard''' : Alors toi, tu vas dégager tout de suite parce que c’est pas le thème du débat ! '''Reego''' : Ah bah Gérard, sur IRC, Yoda qui est dans son camion, il me dit qu’il en a vu une tout à l’heure ! '''Gérard''' : Ça... ils font ce qu'ils veulent. Alors la dernière question c’est... '''Marcel''' : Il n’a pas préparé son débat ! '''Phildar''' : Si si si ! Il va la retrouver. Attends, tu connais pas Gérard, toi. '''Gérard''' : Euh, au hasard... Qui c’est qu’a une... '''Arnet''' : Pourquoi les routiers sont trop cons ? '''Gérard''' : Non ! Alors toi tu dégages ! '''Tam tam''' : Pourquoi les routiers n’ont pas de QI ? '''Marcel''' : Putes ou routiers, y a-t-il une différence ? '''Reego''' : Gérard, sur IRC, la question... Attends, y en avait une bien là... y en avait une bien. Alors, Malcavienne qui demande si... ah bah c’est trop tard, je l’ai raté. C'est con parce que ça défile et j’ai pas eu le temps de le voir. '''Tam tam''' : Est-ce que les routiers peuvent devenir des stars ? Que font les routiers par temps de verglas ? '''Arnet''' : Est-ce que le pare-soleil vert transparent avec l’équipe de foot préférée marquée dessus est obligatoire ? '''Reego''' : Merci ! C’était la question de Malcavienne. '''Gérard''' : Voilà ! Alors donc la question c’est : combien de temps les routiers passent-ils sur la route ? Et on se retrouve juste après. '''Reego et Phildar''' : C’est naze ! Tu l'as déjà posée. Tu peux pas poser cette question-là. ''[tout le monde réagit en même temps au standard]''. '''Marcel''' : C’est nul ! '''Gérard''' : C’est nul ! Vous la fermez ou sinon... Allez hop, conclusion ! '''Phildar''' : Non attends ! Ça y est j’ai une question. Bon, routier c’est un métier dur, on est d’accord. Combien de temps, à votre avis, un routier peut-il exercer dans la profession de routier ? '''Gérard''' : Voilà. '''Phildar''' : Ça c’est une bonne question. '''Gérard''' : Voilà. Et on se retrouve après ! On va s’écouter Roger Pussot avec "Ma sœur elle joue du pipeau cul nu". ''[Musique]''. '''Gérard''' : Donc vous pouvez toujours nous appeler au 0800... 08 5000 ! '''Phildar''' : On est toujours dans le débat des routiers. Et la dernière question c’était donc : à votre avis, les auditeurs, combien de temps un routier peut-il exercer dans cette profession si belle ? '''Gérard''' : Voilà. Tam Tam ? '''Tam tam''' : Bah déjà, moi je sais pas, mais je pense qu’un routier peut tenir facilement jusqu’à... bah... la retraite, c’est à quel âge Gérard ? '''Frigo''' : Justement, c’est la question je crois. '''Gérard''' : Non non mais moi je te demande : jusqu’à quel âge un routier peut-il continuer de rouler ? '''Tam tam''' : Un routier ça doit... la retraite ça doit être vers 55 ans. '''Gérard''' : Non ! Non, 55 ans ça c’est... ça c’est... c’est les mecs qui... qui travaillent dans... à la RATP ! '''Tam tam''' : Moi je pense que bon, les routiers c’est quand même un métier assez simple parce que tu fais que de la route, t’es en balades et tout. Je pense que ça devrait travailler jusqu’à à peu près 70-75 ans, parce que c’est quand même une profession de fénéants. '''Gérard''' : Ouais non mais attends ! Une profession de fénéants ? Fais-moi confiance ! Non non mais attends ! Celui qui vient de dire que c’est une profession de fénéants, fais-moi confiance... celui qui vient de dire ça... déjà c’est un con ! Et un boulot de fénéants, c’est pas vrai ! Parce qu’il faut dire une chose : que les mecs, faut les voir... '''Marcel''' : On bosse comme des tarés ! '''Goldo''' : Boarf arrête toi ! '''Gérard''' : Ouais bah attends ! Si t’es pas content Tam Tam... '''Tam tam''' : Non mais d’accord ! Non mais c’était pas Tam Tam... D’accord, OK. Vous bossez 15h par jour, mais je trouve que bosser 15h par jour, c’est quand même des fénéants quand même ! '''Gérard''' :Hein ? Attends ! Tu crois que dans les bureaux ils font 15h par jour ? '''Phildar''' : Non mais c’est pas des fénéants ! '''Gérard''' : Attends ! Ils arrivent... attends... Non mais attends, attends Tam Tam ! Moi je vais te répondre à ta question : le lundi ils arrivent, hop, ils commencent déjà par leur petit café... '''Phildar''' : On parle des routiers ! On parle des routiers ! '''Gérard''' : Non non non ! Non mais attends ! Non non non ! Stop ! Stop ! Stop ! Stop ! Maintenant Tam Tam, tu vas bien m’écouter ! Tu vas bien ouvrir tes esgourdes. '''Tam tam''' : Pour l'instant, tu dis qu'ils sont en train de boire,c’est tout ce que tu dis. '''Gérard''' : Bon alors moi je peux te dire une chose : que déjà les routiers, ils commencent le dimanche soir à 22h ! '''Phildar''' : Ils n’ont pas le droit de rouler le week-end. '''Tam tam''' : Ils commencent le dimanche à 22h, c’est pour arrêter le lendemain ou le mercredi ! '''Gérard''', ''[exhalté, remplis de gestes amples]'' : Mon cul, Phildar ! Les routiers commencent à partir de 22h ! Ils n’ont pas le droit... ils n’ont pas le droit aux autoroutes le lundi... Oh Tam Tam ! Tam Tam ! Tu t’écrases, je vais te répondre moi ! Alors déjà, dans les bureaux ils ne font pas 55h ! '''Tam tam''' : Non mais oui ! Ils commencent à 8h du matin et pas à 22h ! '''Gérard''' : Ah ouais ? Alors dans ces cas-là, à 8h du matin le chauffeur il est déjà sur la route ! On est bien d’accord ? Alors à 8h du matin, la nana elle arrive au bureau, elle dit à son copain : "Oh ouais mais tu sais..." à sa copine : "Oh ouais mais tu sais, mon mec il m’a bien baisé et tout", hein ? Alors que les routiers... que les routiers... les routiers partent... non non... non que les routiers... que les routiers... attendez s’il vous plaît ! Que les routiers partent le dimanche soir à 22h et ils disent au revoir à leur femme... ils ne savent même pas s’ils vont rentrer ! OK ? Alors Tam tam, tu te la fermes.Stop ! ''[le chaos s'installe, les auditeurs réagissant tous, et notamment tam tam, Gérard hurlant pour les arrêter, sans succès]'' : Stop ! Stop ! Stop ! STOP ! Ya une question... Allez, allez, coupe-moi ! Coupe-moi tout ça là ! Enfin ! Alors Reego ? '''Manu''' : C’est allé trop vite ! C’est allé trop vite encore. '''Reego''' : J’ai vraiment pas eu le temps de lire vu qu’il y a environ 418 connectés et tu vois les... '''Arnet''' : C'est bon, Reego, je peux t’aider ? C’était qui ? C’était qui ? '''Reego''' : C’était... je crois que c’était Snul... je sais plus... il y avait une question intéressante et j’ai pas eu le temps de la voir. '''Phildar''' : C’est pas grave ! Tu vas la retrouver. '''Frigo''' : Oui, je crois que les routiers peuvent conduire jusqu’à l’âge de 50 ans. '''Tam tam''' : Ah non ! C’est des conneries ça ! '''Frigo''' : Bon attends ! Je suis d’accord, j’ai lu un bouquin moi sur les routiers. Et je peux te dire que dedans, bon c’est... le mec, bon il disait que les routiers pouvaient rouler jusqu’à l’âge de 50 ans, mais après au-dessus : interdit ! '''Gérard''' : Je pense pas. Je pense pas, je pense pas à mon avis. Parce que moi, moi je peux te dire une chose : c’est... c’est... c’est bête parce qu’à chaque fois je vais dire, je vais reparler de Titi, mais lui ça fait... ça fait... ça fait plus de 22 ans qu’il fait de la route ! '''Manu''' : Et est-ce que t’as vu son gros minet ? '''tam tam''' : Et il a quel âge ? '''Gérard''' : Non mais ça, son âge ça vous regarde pas ! Reego ? question Internet pour finir. Non ? Allez, conclusion? '''Arnet''' : Gégé, j’ai une question intéressante sur Internet : "Pourquoi les hommes éjaculent-ils par saccades ?" '''Reego''' : Ah là j’ai la même là ! Tu vois ! C’est pas le thème du débat ! '''Goldo''' : "Parce que Gérard avale par gorgées" ! '''Gérard''' : Lui, tu me le dégages ! Hop là, il est terminé ! '''tam tam''' : On fait la conclusion là ? Bah moi ce que je conclus de ce débat : bon c’est intéressant pour les routiers. Ce que je constate c’est que bon, vous êtes... vous écoutez que du Johnny et du Coluche, et vous êtes des fénéants ! '''Gérard''' : Non mais de toute manière, en plus c’était pas... c’est un débat improvisé qu’on a fait ! '''Tam tam''' : Ouais bah ça s’est bien entendu ! On sent que tu connais pas le sujet ! Tu nous fais croire que t’as été routier, mais on se le demande. '''Gérard''' : Euh... Alors je vais te dire une chose ! '''Arnet''' : Ouais ouais, tu la diras tout à l’heure ! '''Gérard''' : Non mais je pense que celui qui s’amuse à faire des conneries comme ça va se calmer ! '''Tam tam''' : Bon, est-ce que t’as été routier pour de vrai ou pas ? '''Gérard''' : Oui ! '''Tam tam''' : Prouve-le ! '''Phildar''' : Non, il a été routier sur Internet ! '''Goldo''' : Est-ce que tu as glissé sur du verglas ? Oui ou non ? '''Tam tam''' : Non mais sérieusement ! Est-ce que t’as été routier ? Combien d’années ? '''Gérard''' : J’ai fait deux ans de route. '''Tam tam''' : Combien de kilomètres t’as fait ? '''Gérard''' : Euh... J’ai fait plus de 10 000 bornes ! '''Goldo''' : Combien de putes ? '''Tam tam''' : C’est tout ? '''Gérard''' : Combien de putes et ta sœur ? Ta sœur elle est en train de se faire enc... ! ''[cris de Phildar et Manu pour couvrir le mot et l'empêcher de poursuivre]''. Toi tu dégages ! Allez hop, terminé pour celui-là. Allez on y va ! La conclusion ! Allez vite vite vite vite vite ! ALLEZ Allez hop ! Hop ! Terminé ! Terminé ! Terminé ! T’envoies le... '''Phildar''' : Attends, ta conclusion à toi ? '''Tam tam''' : 10 000 kilomètres en deux ans, c’est pas beaucoup quand même Gérard ! Oui, t’es un fénéant ! '''Gérard''' : Ouais ben... moins que toi. Abruti ! '''Marcel''' : Je vais te donner ma conclusion. Alors je pense que... je pense que les routiers, ça peut... ils travaillent dur et ils peuvent conduire encore longtemps. Nous en tout cas, on a fait ça sur la route toute la journée et on a mis... beaucoup de routiers ont la photo de toi, Gérard, pour se soutenir, pour essayer d’aller d’aller plus vite, d’aller plus vite parce que pour nous t’es un symbole de réussite quoi, quand même ! Parce que tu fais de la radio maintenant, on voudrait bien être tous à ta place ! '''Gérard''' : Ouais mais de toute manière, faut dire une chose : que grâce... grâce aux routiers... grâce... grâce aux routiers qui nous écoutent encore à l’heure actuelle — et je sais qu’ils sont nombreux, ils sont nombreux ! — même les chauffeurs de taxi, tout ça... Grâce... grâce à tout ça, grâce à ces gens-là, c’est grâce à eux quand même si on peut... même malgré les grèves... qu’on puisse rentrer chez nous avec les chauffeurs de taxi, mais grâce aux routiers ! '''Marcel''' : C'est grâce à toi ! '''Gérard''' : Oh s’il vous plaît ! Laissez-le finir ! Grâce aux routiers, c’est grâce à eux si on mange quand même ! Que les grandes surfaces soyent ravitaillées. Si on n’a rien dans les grandes surfaces, on ne peut pas manger ! Alors taisez-vous, vous savez pas. '''Reego''' : Deux secondes sur IRC, je trouve qu’il y a une conclusion intéressante : "Si tu es routier, que tu sors en boîte, que tu sais mixer, que tu mets un costard-cravate et qu’en plus tu as une CB avec un kit main libre, et bien ça veut dire que tu deviendras un pote de GG !" J’applaudis Dave sur l’IRC ! '''Gérard''' : De toute manière sur la CB, il faut dire une chose. Avec la CB, on peut savoir pas mal de choses, mais il faut dire une chose : qu’à force, la CB ça commence à devenir rengaine ! Parce que sur le canal 19, c’est qu’il y en a qui s’amusent à s’amuser à nous mettre de la radio constamment, et on peut pas savoir où sont les barrages ni rien. Donc alors maintenant, ceux qui s’amusent à faire ça sur la CB, pour moi, c’est des petits cons ! C’est des petits branleurs ! Alors maintenant, qu’on respecte... Qu’on respecte le métier des routiers et des chauffeurs de taxi et des animateurs radio ! C’est tout ce que j’ai à vous dire. En de bon entendeur, salut ! ''[le studio applaudit]''. Vous allez... vous allez retrouver... '''Goldo''' : J’ai pas fait ma conclusion ! '''Dégage''' : Les conclusions ! '''Gérard''' : Alors allez-y vite fait ! '''Arnet''' : Alors c’est vrai, ouais, je te kiffe ! Parce que franchement ce que t’as fait c’était bien. '''Gérard''' : Non mais attends ! Moi je te kiffe pas, OK ! '''Arnet''' : Mais alors les routiers c’est n’importe quoi ! Le seul truc qu’ils savent faire c’est se branler dans leur cabine ! '''Gérard''' : Alors Arnett, c’est terminé ! C’est même pas la peine de continuer parce qu’il y a des routiers qui nous écoutent, OK ? Et fais-moi confiance que yen a qui sont en haut, à m’attendre. '''Arnet''' : Salut bouffon ! '''Gérard''' : Ouais bah bouffon toi-même, connard ! '''Goldo''' : GG, c’est Goldo ! Je peux faire ma conclusion ? Bah je voulais dire que déjà je suis derrière toi à fond, à 100% tout profond ! Et que je voulais dire que bah les routiers c’est quand même, comme a dit Arnett, un métier de feignasses qui se pignolent et t’es un digne représentant de cette profession ! '''Gérard''' : Alors Goldo, dégage ! Bonne nuit ! C’est terminé pour ta conclusion. '''Dégage''' : Ouais bah écoute, moi je trouve que je savais pas grand-chose sur les routiers mais j’en ai appris quelques-unes. Mais alors par contre, il y a un truc que je reproche dans ce débat, c’est qu’il y a énormément de vulgarité et j’aime pas ça. '''Gérard''' : Et bah c’est dommage parce que c’est comme ça... '''Phildar''', ''[hilare avec Ma, rentré dans le studio]'' : C’est comme ça tout le temps ! '''Dégage''' : Bah ouais mais c’est pas bien, moi je trouve. Parce que franchement, votre débat il est bien, et s’il y avait un peu moins de vulgarité je trouve que ça serait pas mal. '''Max''' : Bah ouais mais dans ces cas-là, les routiers faut bien comprendre... c’est Max... que c’est quelque chose de viril ! On l’a compris encore par Gérard ce soir, c’est normal. Et quand c’est routier, que c’est viril, forcément ça amène un peu... au lieu d’en venir aux mains, ça en vient un peu aux mots ! Et même si ça a été un peu vulgaire, je pense que ça a apporté beaucoup. Ça vient du cœur ! Et quand t’es un passionné... le routier c’est un peu comme un animateur radio, c’est une passion. Et quand t’as une passion, tu la défends, et donc très vite tu peux devenir agressif parce que tu défends ta profession que tu aimes. Gérard ? '''Dégage''' : Je suis tout à fait d’accord avec Gérard ! Ça c’est sûr ! '''Gérard''' : Non mais ça de toute manière moi c’est un truc que je défendrai jusqu’au bout ! Et moi, je dis aux routiers : chapeau pour ce que vous faites ! Je sais qu’il y en a qui sont là-haut... il y a Enji qui est venu et qui m’a dit qu’ils étaient en haut et qu’ils voulaient me voir. '''Max''' : Mais t’es d’accord avec moi comme quoi c’est une passion et que c’est normal qu’on s’énerve ? '''Gérard''' : Une passion de toute manière tu es obligé de la défendre ! C’est un gagne-pain, c’est tout ce que tu veux pour toi ! C’est comme toi animateur radio... '''Max''' : Quand on parle des passions, tu dis que c'est un gagne-pain. Est-ce que, si t'es passionné de papillons, le papillon c'est un gagne-pain ? '''Gérard''' : Ça dépend des personnes... '''Phildar''' : Donc ta conclusion, Gérard ? '''Gérard''' : Donc ma conclusion : c’est dommage que je n’ai pas préparé ce débat-là parce que ce n’était pas prévu. '''Phildar''' : Pour une fois il était bien ! '''Gérard''' : C’est pas mal, à part qu’il y a eu des petits emmerdeurs. '''Max''' : Non mais c’est normal, c’est un métier de passion ! '''Gérard''' : Mais donc on vous retrouve... '''Max''' : Jeudi prochain déjà, pour les débats. Donc ça portera sur quoi d’ailleurs ? On peut savoir les thèmes ou pas ? '''Phildar''' : T’avais pensé tout à l’heure aux synthétiseurs. '''Gérard''' : Alors donc on va parler sur les synthés et sur le harcèlement sexuel. Donc on va se quitter. '''Max''' : J’ai hâte d’écouter le débat sur le synthétiseur ! '''Phildar''' : Tu sais qu'à mon avis, il y a de la question quand même ! '''Max''' : Tu planches pas au dernier moment comme d’habitude où le mercredi tu viens me voir en me disant que t'y arrives pas. T’es sûr ? C’est un débat sur le synthétiseur. '''Gérard''' : Ah ouais ! Alors là le synthé, t’as intérêt de me trouver... du Jean-Michel Jarre, j’en ai moi à la maison, on va s’en écouter un la semaine prochaine ! '''Max''' : Si si si ! Le truc de la Coupe du Monde... le Coupe d’Europe... '''Gérard''' : Coupe du Monde... Ouais ! J’en ai même plus que ça à te faire écouter. Donc on se quitte et donc je vous retrouve jeudi prochain. Donc bonne nuit à tous ! Et vous allez retrouver Rousseau, Rousseau pour la nuit sans pub. Et on va se quitter avec la bande de Billy du slip avec les cochons ont le grillon qui chauffe. Vas-y ! '''Phildar''' : "On a le groin qui chauffe" ? Les cochons ça a un groin, c’est pas un grillon ! '''Gérard''' : Bon attends, t’avais qu’à l’annoncer toi-même après tout, c’est toi qui fais la réa et puis c’est tout ! Alors poupougne à toi ! OK ! En de bon entendeur salut. == Le débat sur les synthétiseurs == === Contexte === === Les personnages === === Transcription === Pas de radio et pas d'insultes de Gérard Bienvenue sur Fun Radio, donc 0h37, c'est toujours Fun Radio que vous écoutez Vous pouvez nous appeler si vous voulez participer toujours au débat sur les synthétiseurs On va dire la musique électronique parce que si on dit que les synthés vont avoir peur Sur la musique synthé, tout ce qu'on peut entendre joué par Jean-Michel Jarre Ou autre comme chanteur Donc on va accueillir Citron 19 ans de Mazanet Bonsoir Gérard Bonsoir Et alors Tupu Bonsoir Gérard, bonsoir Sandy, bonsoir Yargla Non mais Sandy elle n'est pas à côté de moi donc désolé pour toi Pardon Elle est là mais elle ne veut pas venir écouter On embrasse là pour moi Ongle de pied Bonsoir Gérard Bonsoir Machat Bonsoir Gérard Salut Guillaume, Guimauve Bonsoir On va parler un peu plus fort déjà Bonsoir Bonsoir et Trou Noir Bonsoir Gérard Bonsoir Donc premier débat, on va parler sur la musique des synthétiseurs Donc il y a toujours le site internet Non c'est moi qui parle à Manu Oranten, excuse-moi Donc il y a toujours le... L'internet L'internet www.fr Voilà, tout à fait Double slash Il y a déjà beaucoup de connectés Donc voilà Donc alors en gros Aimez-vous la musique Aimez-vous la musique jouée au synthé ? Qui ça ? Ben qui ça ? La main de ma soeur dans les culottes d'un zouave qui joue Oui ça commence Non mais Gérard comme à chaque fois tu débutes tes débats Tu dis jamais à qui tu t'adresses Tu demandes à un auditeur de répondre Alors ongle de pied Moi j'adore franchement Je trouve que c'est de la bonne musique Mais bon chacun son style Mais moi j'aime bien Non mais toi dans l'ensemble T'aimes bien Ouais moi je trouve que c'est de l'ambiance C'est bien au moins Ouais ouais D'accord Tu pues ? Ouais ben moi je pense que ce gars-là C'est un peu comme Francis Cabrel Il a su toujours se renouveler C'est vraiment Je trouve ça très fort Non mais attends Francis Cabrel il a jamais joué du synthé Il a toujours joué de la guitare Non attends Faux Il a fait des morceaux au synthé Ouais mais je voudrais bien savoir quel morceau C'était des sons de guitare Mais c'était au synthé Ouais Ouais non mais Non si Gérard t'es d'accord avec nous Qu'au synthé on peut faire Plusieurs sons On n'est pas obligé de faire Plus de son canot Ouais mais ça c'est C'est une autre question On verra par la suite Ne vous inquiétez pas Il a tout prévu Gérard Citron Oui Oui moi j'aime bien aussi Ouais Par ordinateur aussi Ouais mais Ben synthé c'est quoi ? Ça peut être très bien aussi Sur ordinateur Comme Jean-Michel Jarre Il a fait Lors du concert Au Wembley Le 14 juillet A Wembley Non à Paris Ah ouais j'ai pas vu Je l'enregistrerai Faudrait que tu me le prêtes alors Non non Moi je prête pas J'aimerais que cette vidéo Que j'enregistre comme ça Ben j'aimerais le voir chez toi Non Il est en deux questions Attends Euh Machat Ouais ouais Ben moi je kiffe ça Ouais j'adore Techno House Trouble ou Acide Transdip Deepcore Adfitcore Tout ça ouais Ouais j'aime bien ouais Non mais je te parle De la musique du santé Ah ouais ben C'est de la musique électronique Ben c'est pareil Ah bon ? Ouais Non mais ouais je kiffe Ouais c'est bien Ouais tu kiffes Ouais je kiffe à mort Euh Guimauve Euh non moi j'aime pas Ça me prend la tête Et dans Dans quel sens S'il te plaît Ça te prend la tête Dans tous les sens du terme C'est à dire Ouais non mais attends Tu vas répondre aux questions Que je te pose C'est tout D'accord Alors pourquoi que ça te prend la tête Et dans quel sens C'est tout Parce que je trouve que C'est pas de la musique C'est pas de la musique pour moi Bon alors c'est quoi alors ? Ben alors C'est des sons inventés Sur des machines Pour moi Ben alors le synthétiseur C'est quoi ? C'est des On invente des sons Me dis pas Me dis pas de conneries Guimauve s'il te plaît S'il te plaît Ok Non je suis pas d'accord Bon d'accord Ben pourquoi ? Trou noir Ah ben moi j'adore Le synthé Gérard Et puis je suis moi-même Joueur de synthé Ah c'est bien ça Ok Ben tiens ben justement C'est une question Peut-être sur IRC Oui sur IRC Déjà on te demande Gérard Qu'est-ce que c'est un synthétiseur ? Un synthé c'est une musique Comme t'as là Toi attends Tu prendrais ça Et que Et on voit pas nous Non mais vous voyez pas Vous avez pas besoin de voir Ah d'accord Donc Donc ça serait Un genre d'appareil Comme tu tapes Sur un clavier C'est-à-dire que là Attends je vais essayer De jouer un morceau Voilà Et dedans Mais là T'as l'écran Et dessus T'as toute la musique Qui ressort Mais bien sûr Là t'as des noms Mais ils peuvent modifier Le truc Ah c'est ça un synthétiseur alors ? C'est pas comme un piano Alors c'est différent Ben le piano c'est Le piano c'est le piano Ouais mais ça c'est pas pareil C'est-à-dire ? C'est quoi la différence Entre un synthé et un piano ? Non mais justement Arrêtez de me bouffer Les questions Ah merde On s'intéresse On s'intéresse Ouais non mais attendez On a faim Donc comme un trou noir Comme toi Tu joues de Donc jouez-vous Du synthétiseur chez vous Donc c'est une question Qui est pour toi ? Ah ben moi je joue Du synthétiseur Oui Gérard Et puis Ben synthétiseur Ouais c'est loin d'être un piano Mais comme je crois Que c'est une de tes Prochaines questions Gris pas les questions Trou noir s'il te plaît Non non non Par contre je vais dire Quand même qu'un synthétiseur Ben ouais c'est un générateur De son Et puis ça existe Sous forme de sampleur Maintenant sur pas mal de choses C'est vrai que Maintenant Tout le monde Tout le monde joue Sur Sur du Des synthés Ou sur Des Des genres de Wetman Spécialisés pour Pour ça Ouais ouais Et même Francis Cabral Gérard Je confirme Oh non mais ça Je m'en fous moi Personnellement Tu vois c'est pas un chanteur Qui m'intéresse Gingmove Bon toi je sais que ça Ça t'intéresse pas Non non moi j'en joue pas Je préfère casser des assiettes Et des verres Ça fait le même bruit Bon ben alors tu vois Gingmove Tu vas aller casser tes assiettes Et tes verres Chez toi Parce que dans ce cas là Je sais pas pourquoi Qu'on t'a sélectionné Bonne nuit Bonne nuit Il en faut qui aime Et qui aime pas Non mais attends Non mais attends Si toutes les questions Je te les pose Et que tu me dises Moi j'aime pas Je préfère casser ceci cela Ben dans ce cas là Tu restes chez toi A écouter la radio Ou si t'aimes pas Les débats Tu zappes Tu vas sur une autre radio C'est tout Point final à la ligne En devant d'entendeurs Salut Gérard Gérard un débat C'est des pour et des contre Non non mais attends Elle aime pas Elle aime pas La première question Attends s'il te plaît C'est moi qui fais les débats C'est pas toi qui vas me commander Ok ? Ok Donc vas-y explique Donc la première question T'as pas voulu me répondre La deuxième je te demande Jouez-vous du santé Tu me dis non Je préfère casser des assiettes Alors si je te demande Combien coûte un synthétiseur Tu vas me dire Ah ben je préfère acheter Des assiettes et des verres Alors dans ce cas là C'est pas la peine Mais non mais non Alors si je te dis La quatrième Connaissez-vous le fonctionnement Des synthés Gris pas tes questions Gérard Bon alors Non mais moi je vois pas Une nana comme ça Qui Non mais Gérard Laisse-moi parler 30 secondes Et après tu jugeras par toi-même Je ne critique absolument pas Les synthétiseurs Je t'explique simplement Que pour moi Que je casse des assiettes Ou que je joue sur un synthé Ca fait exactement le même bruit Mais non Voilà c'est tout Ouais mais attends En tout cas c'est Le synthé Tu peux le faire réparer Les assiettes Faut que t'en rachètes Alors attends C'est pas con La guimauve Là je crois que Moi qui t'as un peu de colle Ouais De la superglue C'est ça Ouais mais enfin Dis-toi que Ca revient moins cher D'acheter les assiettes Qu'un synthé quoi Ouais bah justement On verra ça tout à l'heure Donc Machette Ouais bah moi je joue pas de synthé Mais j'aimerais bien en jouer C'est un instrument Qui me plairait bien La question c'était quoi Gérard Ta question Est-ce qu'on peut jouer du synthé Chez soi Jouez-vous du synthétiseur Chez vous Mais est-ce qu'on peut jouer Du synthétiseur Ailleurs que chez soi Si je demande chez vous Pour l'instant J'ai pas dit où Je pose chez vous C'est tout Ah d'accord Mais tu vas Tu vas Après on peut peut-être Par exemple savoir Si on peut emmener un synthé Si c'est On peut en jouer en plein air Ouais on peut en jouer en plein air Si ça est portable Si on en joue Quand on fait des soirées Automatiquement Le synthétiseur Tu vas pas le lécher chez toi Tu vas l'emmener Ah ouais Donc il est portable Ouais voilà Ah d'accord Sur IRC Il y a Vatou Qui demande Si le synthé Fait autant de bien Que le synthol Ah Je vois pas du tout Le rapport avec Le synthol et le synthé C'est pas grave Bah si parce que Le synthol ça relaxe Aussi bien que Le synthé Quand on joue Ah c'est ce qu'il nous dit Ça s'écrit presque pareil En plus ouais Oncle de pied Donc toi Non bah moi malheureusement J'ai pas l'occasion d'en jouer Mais c'est vrai que j'aimerais bien D'accord Tu pues ? Bah moi non Tu sais j'habite à Gap Et je sais Bon J'ai pas J'ai pas le loisir De pouvoir T'es dans une cabine téléphonique ? Je suis chez moi Je suis désolé Ça c'est bizarre On vient d'entendre Un genre de De corne De corne ? Ouais c'est le groupe fun Ah non c'est pas moi ça Ah c'est pas moi Ça doit être quelqu'un Qui trafique dans les studios encore Moi non mais je me doute Qui c'est Mais c'est pas grave Citron Oui alors moi J'en joue pas chez moi J'en joue chez ma tante Parce qu'elle a un synthé Donc comme j'ai joué Un peu de synthé Bah j'en joue chez ma tante Ça se prête pas un synthé normalement ? Bah je sais c'est personnel Mais bon Je l'ai dit Normalement Tous les appareils électroniques C'est que Ça se prête pas C'est comme une femme Une femme ça se prête pas C'est à dire Tu prêtes pas ton tatou Tu prêtes pas ton portable Une femme ? Mais non mais tu dis Tous les instruments électroniques Ne se prêtent pas Une femme Une femme Une femme C'est pas électronique Une femme ça se prête pas Mais c'est pas électronique une femme Ça dépend Mais tu peux en mettre une Sur Poupée Gonflop Pour toi ça y est Si tu veux Gonflop Gonflop ouais Je me doute où que c'est maintenant Ça doit être Trou Noir Non non non C'est pas Trou Noir Tu vois c'est Olivier Dapro Qui est en train de me brancher Le synthé que vous avez De l'autre côté Me prends pas pour un compte Tu veux ? Ok Non non je n'en serai surtout pas Non non mais tu m'y laisseras D'accord ? Olivier Olivier Olivier Il paraît que tu as un synthé là-bas Ah ouais non C'est n'importe quoi T'as grillé Gérard Il t'a grillé Tiens tiens tiens Ouais ouais t'es là T'es en train de chercher Pour en venir au débat Pour en venir au débat La plupart des gens sur IRC Préfèrent les 3T au 5T Je vois rien Je vois pas le rapport Avec le débat Donc alors maintenant Ta réponse à toi C'est au standard Ça se voit que c'est au standard C'est un auditeur qui fait ça Bah oui c'est ça T'as raison Prends-moi pour un compte aussi toi Bon le synthé Gérard Pour toi alors Est-ce qu'il faut en jouer chez soi Ou on peut en jouer ailleurs Ta réponse Bon celui qui s'est mis à ça Arrête parce que ça commence A me prendre la tête Ouais Donc En plus il sait même pas bien jouer C'est vrai Ce serait agréable Ça c'est un truc On peut le prendre Tu peux le transporter comme tu veux A une condition Que là où tu veux jouer T'as Une batterie Non mais t'as la vide Qui te donne le feu vert Pour pouvoir brancher Alors celui Celui qui s'est mis à ça Qui s'amuse à faire ça Arrête ça Parce que ça commence à me gonfler Je sens que tu auras pas L'éducation ce soir là Ah si Alors Qu'il arrête tout de suite Ça vaudra mieux Donc troisième Combien peut coûter Un synthétiseur ? Ouais Bon Manu Tu vas me gérer ça Parce que sinon Je vais te gaufrer Oui mais le problème C'est qu'ils me disent Que personne n'a de synthé Au standard Ouais non mais personne Ils se foutent de toi Ils se foutent de toi Les auditeurs Manu Non mais c'est pas sûr Non plus que ça vienne Du standard Ça peut venir de n'importe où Ouais ouais Non non non C'est du standard C'est sûr et certain Gérard c'est quand tu veux Citron Oui Comment ça coûte Je sais pas Entre 150 balles Un bon tant pis Et puis 30 ou 40 balles Un bon synthé Non mais attends Tu sais ce que c'est Un synthétiseur ? Oui Pas de marque Oui oui je sais Alors c'est quoi ? Bah c'est un instrument Sur lequel tu fais De la musique électronique Ouais Et tu crois que ça vaut 150 balles ? Un bon tant pis Ouais un vrai bon Un bon tant pis Non mais là je crois Non non là je crois Que tu te mets de loin dans l'œil Ah bah écoute non Je pourrais t'apporter des preuves Ouais bah tu les envoies à la radio Y'a pas de problème Tu pues ? J'ai pas trop Moi tu sais comme je te dis J'habite un peu à Gap Et donc j'ai Enfin je sais pas Un citron Bah attends Non non mais attends Tu pues Quand je demande un citron Quoi ? Le nom de la personne Parce que ça c'est des C'est des habituels Qui ont compris les autres noms Parce qu'hier ils étaient là Ils étaient là C'est Goldo, Arnett et Tony Oh n'importe quoi Ils ont voulu Ouais non mais attends Des noms comme ça Ongdopi et Machat Faudrait quand même Vraiment parano Hein ? Ouais bah parano Prenez des noms Autrement que des noms Qu'on a l'habitude d'employer Parce qu'on veut On veut jouer sur moi Ok ? Gérard il est pas parano Il est perno Hein ? Alors maintenant Réponds toi Qui ça moi ? Ouais tu pues D'accord Bah moi je sais pas Je pense entre 100 ou 150 francs Mais des francs anciens Je sais pas trop exactement moi Ouais d'accord Apparemment Tu dis que Tu penses Je suis pas de Paris moi Je connais pas bien les prix Je suis en haut dans la montagne Je connais pas C'est où que c'est ? C'est derrière Non mais de toute façon Maintenant il faut se dire un truc C'est qu'à Paris On vend des synthés en euros Ouais ouais Non non attends Pour l'instant l'euro Ça sort pas encore Ça sort pas avant l'année prochaine Non mais il commence Ongdopi Bah écoute moi J'ai pas vraiment d'idée Mais je pense que ça doit Tourner dans les alentours De 10 000 francs Je sais pas du tout Combien ? 10 000 francs Ah enfin Une Une qui répond à peu près A la question Parce que les deux autres On met genoux On peut avoir des synthés De casse aussi On est pas obligé De l'acheter neuf Attends un synthé Tu vas trouver un synthé Pour combien toi De casse ? Bah peut-être 150 balles Bah ouais t'as raison Bah c'est clair Justement Y'en a un qui va pouvoir Nous répondre Après Il va venir Il va venir Et il va nous répondre Machette Ouais bah on va dire 2000 roubles Bon alors toi Toi ça va être pareil Que Gimbaub Soit tu vas répondre Correctement aux questions Soit tu vas virer Pour 15 000 francs Les bancos 15 000 15 000 15 000 Tu les fais cher toi On est loin Du prix encore Génial Toi Oncle de pied T'as dit 10 000 Ouais dans les alentours Dans les alentours De 10 000 10 000 Y'a combien de 0,4 ? Guimauve Si elle est encore là Ouais je suis là J'espère que je vais pas Te décevoir dans ma réponse Mais je dirais 5-6 000 francs Ah bah d'accord Ça c'est un truc D'occasion pour moi Bah ouais Ça c'est clair Non mais tout dépend Si tu prends un matériel De haute gamme Ou un matériel De gamme moyenne Ouais mais de toute manière Tout ça dépend De la perfection Que vous pouvez Avoir pour en jouer C'est-à-dire ? Alors on va demander Un trou noir Est-ce que tu pourrais Expliquer ça Gérard ? Non non mais on va finir Au moins répéter Au moins répéter ta phrase Parce qu'elle était très forte Tout ça dépend De la perfection Que vous avez Pour taper sur un synthé Qu'est-ce que t'entends dire Par perfection Gérard ? Non non mais Y'a y'a C'est pas évident C'est un genre de piano Y'a quand même Les touches noires et blanches Donc faut bien savoir Prendre dessus Y'a peut-être une question IRC Sur IRC Ils me disent Qu'ils connaissent Saint-Michel Saint-François Mais ils connaissent pas du tout Synthétiseur Bon bah ça Trou noir Oui donc Bah moi Gérard Ouais t'es quand même Pas loin du vrai Les synthétiseurs T'en as à bas prix Bon 150 francs C'est n'importe quoi Mais t'en as à 3500 Et puis ça peut aller Jusqu'à 50 000 francs T'as Jean-Michel Jarre Qui avait un synthé Qui coûtait 750 000 francs Dans ses débuts Aux époques Des premiers albums Oh mais Qui c'est Qui s'amuse avec ça là ? C'est bizarre Quand on se gueule Ça s'arrête Ah bah oui Mais il peut pas t'entendre Les jouets Non ouais Je me doute D'où que ça devient Olivier Ça peut pas être Olivier Gérard il est là Attends ouais ouais Dégage Non non dégage Je sais qui c'est Qui a la roue Non non Non non Dans ton studio Y'a qui ? Y'a un synthé Y'a Max et Jean-Marie Qui viennent d'arriver Mais pas du tout Ils sont en train justement De préparer la soirée De la loco demain Donc Trou noir Oui Ils viennent de répondre Gérard Donc toi tu me dis à peu près Bah vas-y Y'en a à tous les prix Ça commence Ça commence de 3 500 Jusqu'à 750 000 francs Pour le Fairlight Que Jean-Michel Jarre A utilisé pour la Chine Par exemple C'est comme les prostituées Non non non Attends Parce que là Faut quand même pas confondre Synthé et pute Et une pute Parce que la pute A 100 balles T'as quelque chose Dans un synthé Pour 100 balles Tu l'auras pas Et puis surtout Elle fait pas le même bruit Ma pierre elle balle pas Non mais Donc c'est Trou noir T'aimes bien un peu Jean-Michel Jarre quoi Ah bah oui Tiens Je vais même te dire un truc J'étais le voir A un concert Que t'étais même peut-être Pas au courant Le 18 septembre Ça se passait Dans un salon D'une marque informatique Que je vais peut-être Pas citer à l'antenne Ouais je sais Il avait fait un salon Au mois de septembre Ouais c'était à la porte De Versailles Moi je l'ai vu C'était sur Invitation Alors donc Attends Je vais te Redonne-moi le Ah ouais Parce qu'en fait Gérard nous a mis Un CD de Jean-Michel Jarre Oxygène Donc toi Toi tu dois connaître Parce que comme ça fait Sur synthé Tu connais à peu près Tous les Tous les oxygènes Il y a oxygène Il y en a beaucoup J'ai l'oxygène J'ai même J'ai tout Ouais ouais J'ai même l'oxyde de carbone Il y a tout Non non non Non mais attends Trou noir Je te parle De Jean-Michel Jarre Parce que moi Moi une question Que je voulais poser Et c'est dommage Parce qu'elle est pas Elle sera pas dedans Mais on Donc tu la poses pas Bah la pose pas Si si On va la poser Donc pour moi Pour vous Est-ce qu'un synthétiseur Comme Jean-Michel Jarre Parce que Trou noir Toi qui l'as Qui l'as vu A peu près jouer Oui Donc t'as vu Qu'il joue avec des gants Il a un genre de casque C'est pour pas se brûler Ah non non Quand il joue avec des gants C'est quand il joue Avec l'harpe laser Ouais bah Donc le harpe laser Donc c'est branché Aussi sur santé C'est branché sur synthétiseur Mais c'est très technique Je vais pas faire Un cours de technique À ce temps-là Non non non C'est pas le but du débat Non non mais Je te pose la question Parce que toi Je sais que Apparemment T'es un fan de Jean-Michel Jarre Comme moi Donc c'est pour ça Que je voulais te demander Ah bah oui oui Non mais quand il met les gants Et les lunettes C'est pour l'harpe laser C'est pas de la frime C'est parce que l'harpe laser C'est quand même Des lasers assez puissants Et ça brûle un petit peu Et puis bon Les lunettes Pour la protection des yeux Et ça déclenche des synthés Par un système midi Mais c'est assez compliqué Ok Gérard Oui C'est Machat Je voulais te poser une question Est-ce que tu penses Que le synthétiseur C'est la musique du futur ? Ça À l'heure actuelle Je ne sais pas Parce qu'il faudrait On est pas dans le futur encore Non mais il faudrait voir S'il y a des personnes Qu'on a chez eux Et qui pourraient Nous le confirmer Ah bah moi J'ai des synthés chez moi Bah ouais Non mais Par exemple Des gens Qui ont l'habitude D'en jouer Ou qui ont déjà été Dans le futur Et qui savent Si ou non Les synthés existent là-bas Dans le futur Je ne sais pas Mais certainement oui Donc Je vais poser La quatrième question Et vous allez Y réfléchir Y réfléchir Et on s'écoutera un disque Donc connaissez-vous Le fonctionnement D'un synthétiseur Et on va s'écouter Gilbert Stradus Avec Au bébé Mets-toi De la crème Sur les genoux Toujours nous appeler Au 0875000 Et donc Il est 1h du matin Et toujours Le site internet Donc www.fr www.fr Et il y a Environ Je vais demander Aux gens de l'IRC De me dire Combien il y a de connectés Parce que je ne peux pas le voir 527 connectés Ah c'est pas mal déjà 527 Déjà La semaine dernière Au premier débat On était On n'était même pas A tout ça On est meilleur Et on aura peut-être Une surprise D'ici une dizaine de minutes D'ici 10 minutes On aura Un spécialiste Du débat Sur le synthé Donc la personne en question Donc Jean-Michel Jarre Et par contre S'il y en a Qui s'y connaissent En synthé Donc n'hésitez pas A nous appeler Manu se fera un plaisir De me gérer ça Pas de problème Je suis là Je vous attends Donc Quatrième question Connaissez-vous Le fonctionnement D'un synthé Mais je vais répondre Quand même à la question Là tout à l'heure Combien peut coûter Un synthétiseur Donc on va reprendre Trou noir Guignol Machette Ongle de pied Tupu Et citron Donc J'ai vu Avec Jean-Marie K Comme il est Comme il est parmi nous Là dans les studios Pour une soirée spéciale Une soirée spéciale Anniversaire Du Star System Donc Que j'y ai demandé Donc en fin de compte Si Selon Ce que vous voulez faire C'est vrai Que ça peut varier Jusqu'à 750 000 francs Ah ouais Le synthé Ouais ouais ouais Et bah tu vois Sinon Sinon on peut tourner Entre 5 Et 3 000 balles Et en euros 5 balles ? Non non 5 Entre 5 000 Et 3 Entre 3 000 5 000 Et 750 000 francs Pour Là 750 000 francs Faut quand même Avoir Les moyens En euros Ça fait combien Gérard ? Ça j'en sais rien Mais Gérard Gérard moi je voulais te demander Ça fonctionne à quoi un synthé ? C'est de l'essence ? C'est du Non non Truc électrique Ton micro Ton micro devant la bouche Non non c'est électrique C'est électrique ? Ça marche à pile Non non ça marche pas à pile Désolé Le mien marche à pile Donc Ouais bah tiens Il fonctionne à pile Mais le mien il fonctionne pas à pile Le mien j'en ai pas Donc connaissez-vous Le fonctionnement d'un synthétiseur ? On va demander à Citron Oui Ouais bah t'appuies sur on Ouais Et après ça joue Ah ouais D'accord T'appuies sur on Après ça joue Donc tu crois que Alors tu vas T'appuies sur on par exemple Moi j'appuie sur le Minitel on Et puis j'attends que Que le Minitel il fonctionne Bah voilà Après tu joues Tu joues avec tes doigts Bah alors tu dis J'attends qu'il fonctionne Non je dis après tu joues Bah ouais mais là Tout le monde a entendu dans le studio T'as dit J'appuie sur on Et après j'attends que ça joue Ah non et après j'ai dit Après ça joue Après ça joue Tu joues quoi Donc Par contre J'ai eu un Un petit sondage là En même temps Donc on va On va prendre Tupu Juste après La question Que pensez-vous Des synthétiseurs Donc il y a 40% 40% des gens Qui ont 40% des gens On dit Qu'avec Leur mode 103 Alliant Plus vite Allez plus vite Allez plus vite C'est pas ça du tout C'est 40% On pense avec Avec leur synthé Il y en a Avec leur mob Leur mob 103 Allez plus vite Donc je vois Pas le rapport Là je vois pas le rapport Avec le synthétiseur Tu te sers du synthé Comme kit Non non mais attends Et une mob Tu sais c'est quoi C'est une mobilette Ok Eh bah oui Bon alors 60% Non tu permets 60% des gens On dit qu'ils aimaient Qu'ils aimaient bien Mais que Jean-Michel Jarre C'était de la merde En boîte Alors là J'ai jamais vu Jean-Michel Jarre En boîte Bon ça Pour moi Je continue même pas Mais si Après il y avait Jean-Michel Jarre Mais c'était Non non Non non Non non Ça tu vois Hop Voilà Voilà On rigole bien quand même Enfin J'ai un air d'emploi Gérard deux secondes Je voudrais préciser quelque chose Aux gens de l'IRC JMJ JMJ C'est Jean-Michel Jarre C'est pas les journées mondiales De la jeunesse Merci Voilà Alors donc Tu pues toi Moi je connais pas exactement bien Le mode de fonctionnement Mais je pense que ça va être Une histoire de multiplexeur De bascule De résistance en parallèle Et de polymultiplier indexé Oh la la la C'est le genre de truc Qui marche avec Non mais attends Le synthé Tu le branches sur courant T'as même pas besoin D'une table de mixage Tu branches ça T'essayes de Avec les enceintes Mais en fait Faut avoir des bonnes enceintes Parce que si tu prends Des petites enceintes de caca Là je crois que tes enceintes Elles crament Tout à fait Même ton appareil Il crame derrière D'accord Ça dépend de ce que tu utilises En série Ouais mais De toute manière On va pas préciser les marques Non mais ça dépend Ça dépend si tu le branches Dans le synthé en dérivation aussi Ça c'est important Ouais Ok Tu vois la différence J'irai en série en dérivation ou pas ? Non Je t'expliquerai après On va écouter les questions Sur l'IRC Il y a Ziwi Qui te demande Vu que sur son téléphone Il a des touches noires Et des touches blanches Est-ce que son Et qu'il fait des sons Quand il appuie Est-ce que c'est un synthétiseur ? Non Si c'en est un Ah bon C'est un synthétiseur Par exemple T'appuies sur une touche Sur un téléphone C'est un synthétiseur pour toi Bah non N'importe quoi Ça remplit Ça remplit le rôle D'un synthétiseur Mais oui Les touches noires Les touches blanches Ça fait de la musique C'est un synthé Alors attends Moi j'ai un téléphone Quand j'appelle quelqu'un Ça me fait pas de musique Comme tu me dis C'est très simple Les auditeurs Ils ont des téléphones Ils ont qu'à essayer De nous faire un morceau Avec leur téléphone Ouais bah on va voir Non c'est pas un synthé Si c'est un son de synthé ça C'est bon c'est bon C'est bon arrêtez Arrêtez Arrêtez Arrêtez J'ai reconnu Ils jouent la marseillaise quand même Putain mais hey Tu vas où ? Donc c'est bon tu vois Ils t'ont fait Ils t'ont montré Ils t'ont fait l'exemple que Oncle de pied On peut se servir d'un téléphone comme synthé Moi Gérard J'ai jamais eu l'occasion De toucher un synthé Donc je peux vraiment pas te dire Comment ça marche D'accord Ma chatte Ouais alors c'est tout simple Tu prends ton synthé play school Tu le branches sur le gris peint Tu mets une biscotte dedans Dès que t'envoies la biscotte Ça marche Et si je mets ta connerie Dans le gris peint Dans le gris peint Est-ce que Est-ce que ta connerie Va ressortir ? Non je crois que ça marchera pas Gérard Non ça marche pas J'ai un synthé play school Si tu veux Bon j'ai plus de pied J'ai plus de courant chez moi Bon je m'éclaire la bougie Est-ce que je peux Attends t'as plus de courant Et tu permets de nous appeler Abrouti Bah oui mais je t'appelle D'un téléphone play school Que je branche Sur le frigo C'est ça allez Bah ouais le frigo Ça marche au courant Espèce de petit con Non il pédale Allez allez allez Il peut très bien avoir Des vietnamiens chez lui Qui pédalent C'est ça Guillemove D'après ce que je sais Je crois que c'est Des composants électroniques Tu vois c'est des puces Intégrées au synthé Qui sont reliées Par les électrodes Au système central Tu peux appuyer Sur les touches T'as les sons Qui se forment A l'aide d'un amplificateur D'écoute Ouais tout à fait N'importe quoi Elle a du coup quoi Trou noir Désolé Moi je connais Le fonctionnement d'un synthé Mais tu veux savoir quoi Exactement comment ça marche Bah oui Bah tu branches sur le courant Tu branches un ampli Une table de mixage Des bonnes Enfermes Comme tu dis Et t'appuies sur Bah voilà Mais moi ce que J'aimerais bien comprendre Gérard J'aimerais bien que tu expliques Aux auditeurs Et ainsi qu'à moi-même C'est comment En appuyant sur une touche Tu fais un son Mais ça c'est C'est à toi de le gérer Pourtant vous en avez un Synthé Bah oui mais ça m'explique Comment ça marche Mais alors Mais de toute manière Vous avez différents sons Donc c'est à vous De choisir Ce que vous voulez Non mais Je vais te l'expliquer Non mais attends Attends Attends Toi ça fait combien de temps Que tu travailles à la radio ? Je sais pas Mais je vois pas Non mais attends Depuis le temps Que tu es à la radio Le synthé Tu le connais pas ? Oui mais moi J'en ai déjà fait Mais attends Mais Max le matin Lui ça fait plus longtemps Qu'il est à la radio Il connait comment Il fonctionne le synthé Alors toi T'es à moitié cab Bah non mais je le sais T'es comme les auditeurs T'es une cab C'est tout Vous avez entendu les auditeurs ? Gérard Gérard Gérard Oui C'est Machat Je voulais savoir Si tu te foutais le synthé Dans le cul Est-ce que ça le faisait marcher ? Alors toi Machat Tu dégages Au revoir pour toi Bonne nuit Ça y est Terminé pour lui Liquidé C'est même pas la peine Qu'il revienne sous un autre nom Rasé Direct Je dégage Machat Alors vas-y Rien Continue Donc qu'est-ce qui vous plaît Dans un synthé ? Son cul Oh non Là sérieux Fille d'air Fais gaffe Parce que tout à l'heure Tu as dégagé plus vite Chez toi Qu'autre chose D'accord On va demander à Trou Noir Qu'est-ce qui me plaît Dans un synthé ? Je parlais de cul J'ai raison C'est sensuel Un synthé C'est sensuel Non mais qu'est-ce Non mais qu'est-ce Qu'est-ce qui te plaît Toi dedans ? Ah bah moi Qu'est-ce qui me plaît C'est les sons C'est tout Mais moi je te dis Je suis joueur de synthé Donc c'est les sons C'est fabriquer ses sons Faire sa musique Et tout ça Moi je dis Tu peux Oui Moi je veux dire Que ce qui est bien Avec un synthé C'est que vraiment T'en fais ce que tu veux Il t'obéit au doigt Et à l'œil Tu le manipules C'est ça qui est vraiment C'est ça qui est un peu jouissif Tu vois Non mais attends Le synthé Tu ne le manipules pas C'est toi C'est toi Avec tes doigts Avec tes mains Qui le fais fonctionner Ne me dis pas de conneries Il y a des programmes aussi Le synthé On appuie sur une touche Il marche tout seul Ouais mais ça Peut-être que De toute manière Il y aura sûrement Une question là-dessus Que je vais faire Il y a peut-être Une petite surprise Bah voilà La surprise que t'avais annoncée Est arrivée Donc tu peux dire bonjour Au monsieur Que Tu peux dire bonjour Au monsieur Mais tu idolâtres Donc JM Oui bonsoir C'est Jean-Michel Jarre Oui bonsoir Bonsoir à tous Donc j'ai écouté le débat Actuellement Bon en jouant Quelques petits morceaux synthétiques Et j'en déduis Que monsieur Gérard Dit de Suren Avait raison Puisque Un synthétiseur Fonctionne bien Par courant électrique Et non pas à pile Comme j'ai pu entendre Dans ce débat Et ma foi Si vous voulez Que je réagisse Sur vos questions Il n'y a pas de problème Déjà je voulais quand même Remercier Jean-Michel Jarre D'être délégué Avec nous ce soir Oui je sais J'ai un emploi Le temps très chargé Mais je me suis Alors donc Une question Que je voulais te poser Combien coûte un synthé ? Un synthétiseur Peut coûter environ 150 000 francs C'est un bon synthé C'est le synthé Dont tu te sers Jean-Michel Quand tu fais des concerts ? Voilà Non mais ça c'est Le mien je le paye Exactement 20 millions de francs Mais un synthétiseur D'occasion 150 000 francs D'accord Ok Alors Oui Ça fait cher quand même Je veux dire pour moi Je sais que je pourrais Jamais me payer Un truc comme ça Non mais donnez bon nom Quand vous posez des questions Excuse-moi C'est Tupu Je sais que bon Quelle que soit Ma future vie Je pourrais pas me payer Un truc comme ça C'est beaucoup trop cher Oui mais c'est normal Vous vous utilisez Du matériel de merde Moi je me sers De produits Qui sont professionnels Il y a une question Hier c'est Une question pour Jean-Michel Jarre Les gens de l'IRC Se demandent Si c'est le frère De Maurice B. Jarre Je vois pas du tout Le rapport avec La question sur les synthés Excuse-nous Jean-Michel Pour la question Il y a pas le mal Il y a pas le mal Donc la question Qu'on va poser aux auditeurs Donc qu'est-ce qui vous plaît Dans un synthé Donc on va demander Un citron J'ai dit son cul Alors moi ce qui me plaît C'est que tu peux jouer De la trompette Sans avoir besoin De savoir jouer De la trompette Je vois pas Je vois pas tellement Le rapport avec Tu mets sur le programme Trompette Et tu joues du piano Tu pianotes Et ça fait de la trompette Ah bon T'as le son de trompette En fait Tu peux faire de la harpe Tu peux faire des maracas Tu peux faire du triangle Tu peux faire Je sais pas moi Du piano Tu peux faire du synthé techno Du synthé moins techno Non mais Et là je pense que Là t'es en train de nous citer Pas mal de trucs Donc ça Je pense que Jean-Michel pourra nous répondre Là-dessus Sur techno Je me demande Si on peut faire quelque chose De potable Même en house En house Oui c'est possible Effectivement sur un synthétiseur Mais techno Je ne pense pas House Oui plutôt oui Après on rajoute des voix dessus Et on peut faire quelque chose Exceptionnellement bien Oui tout à fait Ok Tu pues ? Moi je viens de te répondre Je te l'ai dit tout à l'heure Attends T'as répondu Ongle de pied Ongle de pied est parti se coucher Excuse-moi Et entre temps Donc j'ai rappelé Comme t'as fait ton annonce tout à l'heure Pour des gens qui s'occupaient de ça Il y a Bernard Qui est responsable d'un magasin Il était sur Minitel Et on l'a rappelé Bernard Voilà Allo Bonsoir Bonsoir Bernard Bonsoir T'appelles d'où ? De Saint-Etienne Et on écoute Fun sur Sur une radio pareil Sur la radio Sur la radio ouais Non mais je demande à Manu la fréquence Attends bouge pas je te trouve ça Bah j'essaye Donc bah Ma chatte elle est partie Game over Moi je trouve C'est l'esthétique C'est vraiment joli En plus genre Faut que ta chatte elle est à l'accueil non ? Gare à celui qui s'amuse à dire des conneries Parce que ça va virer Il va casser Moi j'ai pas dit J'ai pas dit pour lui Gérard Donc game over Ouais moi je t'ai dis Donc c'est l'esthétique de la machine T'as plein de touches C'est vachement joli C'est très esthétique T'as des touches noires Des touches blanches et tout Ouais mais c'est ce que j'ai dit tout à l'heure Je pense Mais c'est toujours pareil en fait C'est Bernard là Oui Bernard J'ai pas entendu la fréquence de Saint-Etienne Non moi non plus La fréquence de Saint-Etienne 86.3 Et non c'est 104.7 Ouais ça a changé Ah mince Bravo Manu Bravo Manu Bravo Manu hein Je sais pas si ça a changé Si ça a changé Tu demandes à ce qu'on Mette ton tableau à jour Donc Bernard Oui donc moi je tiens un magasin De Saint-Et plus A Saint-Et Et je tiens à dire Qu'il n'y a plus que des touches Noires et blanches Qu'on peut les faire De couleurs différentes Les gens peuvent demander Aujourd'hui de faire des synthétiseurs A la couleur dont ils veulent Comme on fait les matriculations Des voitures Donc si on veut avoir Les touches jaunes Et je sais pas moi La place des touches noires On peut avoir les touches noires Oranges Non mais Bernard Oui Quel est le Je vois pas le Le rapport avec la question Non parce que T'as l'air Non mais Bernard Bernard Bernard Quel est le rapport Avec la question Tu peux m'appeler Nanar Enfin bon comme Bernard Non non mais Non non mais Je vois pas le rapport Parce qu'on parlait Des touches noires On a C'est pas parce que j'ai dit Qu'il y avait des touches noires Et blanches Sur un Saint-Et Je vois pas le rapport Avec le thème du Le thème du débat Sur les Saint-Et Non mais c'était juste En jaune En jaune Ou Orange Orange Ou bleu Ou vert si tu veux C'est pas grave C'est Jean-Michel Je voulais préciser que Moi je connais C'est Bernard Pardon C'est Bernard C'est Bernard à l'appareil Ouais bah Bernard Tu te calmes C'est le passé versé Jean-Michel avait Jean-Michel avait déjà acheté Du matériel chez moi à l'époque Quand il travaillait Oui c'est vrai Tu sais on se connait bien Moi je voulais préciser d'ailleurs Que bon Moi je connais Des joueurs de synthétiseur Qui sont racistes Et qui jouent Que des touches blanches Il fallait le préciser ce soir C'est vrai C'est bien placé pour Pour le C'est pour ça C'est pour ça que des fois On m'a demandé Est-ce que les touches noires Soient jaunes ou oranges Voilà Les jaunes c'est des chinois D'accord Non mais on fait pas du monde Là-dessus Donc moi Il y a une question Il y a une question IRC Une question IRC Non non pas du tout Ils ont marre des synthétiseurs Ça les fait chier Ah bah ça les fait chier Qu'ils arrêtent Et puis qu'ils aillent se coucher Gérard Ça me prend les vacances Gérard Oui Oui donc c'est Bernard Parce que moi je suis Donc je tiens un magasin Où je ne fais que du synthé Et de l'orgue Et j'ai entendu quand même Beaucoup de choses Assez absurdes ce soir Heureusement que Jean-Michel Jarre Est venu intervenir Alors il est vrai Qu'il y a des synthés Qui peuvent coûter 150 francs Mais bon ce sont des synthés Qui ne contiennent plus qu'une note Oui mais ça existe Oui mais seulement Tu peux choisir la note Do ou ré Mais bon ça ne te fait pas Non plus le Voir le la Le la Et effectivement Il y a des synthés Qui coûtent très très cher Alors il y a aussi Ce qu'on appelle Les systèmes de disquettes Incorporés en fusion C'est-à-dire que là Par contre c'est directement Avec un ordinateur Et là ça coûte Oui on parle en euros Ou pas non ? Non pas ce soir Bon si Jean-Michel est d'accord On peut parler en euros Gérard on peut parler en euros Oui on peut parler en euros Ce soir c'est important Bon bah d'accord alors Je peux préciser Ça vaut à peu près 150 000 euros Donc on multiplie par 6 Ça vous donne Bon c'est pas très très cher Il y en a pour 250 000 francs D'accord Ok Donc prochaine question Donc Que peut-on rajouter Comme musique Sur un synthé ? Ah c'est une bonne question ça Pour 250 000 francs Ça peut paraître cher Mais bon Mais Oui C'est Jean-Michel Gérard Je peux répondre à cette question Oui Peut-être que Bernard A pas terminé la question d'avant Je pense Non non mais c'est bon On va pas s'éterniser Sur une question Ça me semble cher 250 000 francs Mais c'est vrai qu'il y a des gens Qui viennent acheter Pour 250 000 francs Non mais attends Il revient sur la troisième Alors qu'on est déjà A la septième Ah Bernard Non mais c'était juste Pour préciser quoi Non mais non mais Il y a un curé qui est venu Qui voulait acheter un orgue Parce qu'on parle des synthés Mais on parle pas des orgues Mais qu'est-ce que j'en ai à foutre moi Des curés Des Des curés Qui a des camarades Qui a des coups qui vendent C'est tout Gérard c'est Jean-Michel C'est vulgaire Oui c'est vrai c'est vulgaire Oui donc Vous posez la question Sur les Avec un synthétiseur On peut rajouter des bruits De paix De rot Ou de tout ce qui s'ensuit Voir une chiasse Ou quelque chose Dans ce genre là On peut faire tout Avec un synthétiseur Des pets de fous Oui d'accord Des pets de fous Ok Bernard Bernard Bernard Oui non mais Je sais pas Je suis un peu déçu Parce que j'ai l'impression Que le débat Bon moi je suis Un responsable d'un magasin Qui ne fait que du synthétiseur Et avec ce débat de ce sort Malheureusement Vous ne donnez pas Une belle image De cet instrument Qui est comme l'avait Très bien dit Un de vos réalisateurs L'instrument du futur Et j'ai l'impression Que vous en parlez Comme si c'était Une vieille harpe Alors que Je trouve ça un peu dur Pour tous les fans De synthétiseurs Non mais Bernard On va essayer de se rattraper Gérard il faut que tu remontes Le truc là Non mais le problème C'est que bon C'est bien de faire un débat Sur les synthétiseurs Mais quand on En animateur Quand on n'est pas Le sujet Je pense qu'il vaut mieux Non je connais pas Le synthé Je connais pas La musique du synthé Non mais vous connaissez Non mais je connais pas La musique Non presque pas Mais tout à l'heure J'entendais Vous voulez savoir Comment fonctionnaient Les sons de synthé Je veux dire Et alors Parce que C'est moi qui fais Les débats C'est tout Oui mais d'accord Mais si ça vous plaît pas Dans ce cas là Vous faites une chose Vous raccrochez votre téléphone Et vous changez de radio Vous écoutez Vous écoutez ça chez vous Et c'est tout Ça sert à rien De réagir comme ça Guimauve Je pense que ce débat Peut apporter beaucoup Pour les novices En la matière du synthétiseur Complètement Jean-Michel a raison Guimauve Vous demandez des réactions Quand même de spécialistes Moi personnellement Je pense qu'il n'y a pas besoin De rajouter d'autres instruments Parce que le synthé C'est quand même quelque chose D'assez complet Non mais comme musique Ouais Comme musique Guimauve Parle devant ton téléphone Ma chérie Mais j'ose pas Je suis un peu inquiétée Ouais mais fais-le quand même C'est encore Bernard là Parce que On On parle des synthés Mais on peut y faire des violons On peut mettre des violons dedans On peut mettre toutes les machines On peut mettre d'autres instruments Pour en faire plus qu'un Aujourd'hui il y a des gens Des artistes Qui vont mettre par exemple Un bruit de Un bruit d'orgue dans le synthé Un bruit de violon Et qui vont faire des violons Avec des synthés Donc avec un synthé On peut faire un morceau Comme s'il y avait 150 000 instruments Et 250 000 personnes Je veux dire Non mais à ce compte là A ce compte là Bernard et Jean-Michel Je pense qu'ils seraient d'accord avec nous C'est qu'il faut avoir une remorque Une remorque pour synthé Oui C'est une remorque Américaine d'ailleurs Exceptionnellement pardon Dans les magasins Qui vendent des synthétiseurs Bah chez moi par exemple Mais tu vends des remorques Bernard ? Ah ça c'est plus Oui alors le problème C'est pas trop de pub Bernard quand même Je lui en ai déjà acheté Plus ou moins Parce que Gérard Il va te choper ça Non mais Tu pues Oui Toi même Oui c'était quoi ta question ? Je suis désolé mais j'ai On parlait des remorques Des synthés Que peut-on ajouter Comme musique sur un synthé ? Bah je pense qu'on peut On peut rajouter tout ce qui nous passe Par la tête quoi Non non non Une sonnerie de voiture Enfin une sonnerie N'importe quoi non ? Moi je connais pas très bien Vous savez J'aimerais bien J'aimerais bien connaître un peu plus Citron ? Oui Tu peux mettre des animaux Qui font des bruits Ou tu peux mettre Le bruit de la mer Ou tu peux mettre ce que tu veux C'est vrai C'est tellement facile Elle est toute naze elle C'est pas possible Il faut la vivre elle Elle ne connait rien Non moi dans mon magasin Saint-Etienne Pas de marque Bernard ça commence à bien perdre Parce que je voudrais Quoi ? Je vais préciser Gérard Car moi j'ai besoin De faire un peu de pub Pour acheter des synthés Dont je me sers Ouais mais toi Toi Jean-Michel C'est pas pareil Donc on va passer A une autre question Non mais Gérard T'es en train de bâcler le débat là Non mais c'est une erreur Parce qu'il y a des mecs Qui écoutent Et qui sont intéressés du synthé On a des professionnels En plus on a Jean-Michel Jarre Quand même Ouais Bernard est là Et on attend lui Lui pour l'instant Il est en train de me sortir Son truc de Saint-Etienne On en a rien à foutre A Saint-Etienne Vous pouvez m'appeler Jean-Mich Bon Bernard Oui Il faut que tu donnes envie A Gérard De continuer le débat Et d'intéresser les gens du synthé Moi ce que je peux dire C'est que je l'invite De venir à mon magasin A Synthé Plus Magmar De toute manière J'irai jamais à Saint-Etienne Allez hop Quel genre de musique Peut-on jouer sur un synthé ? Ah bah du synthé Qui ? Bernard du synthé Bah tout le monde Bah d'accord On appelle ça Une musique synthétique Gérard Voilà En fait c'est quoi Le nom de ton magasin ? Non mais attends Le nom du magasin Si vous voulez Des renseignements Vous attendez hors antenne S'il vous plaît Merci 8 Avenue du Mer Ouais bah alors Bernard Bonne nuit Gérard A quel coin ? Hop Pour l'adresse c'est très bien Lui tu peux l'envoyer se coucher Synthé Plus 8 Boulevard du Mer D'accord merci Avenue du Mer Avenue du Mer pardon Non mais c'est bien pour lui Hop Terminé pour lui Comme ça il comprendra Sa douleur aussi celui-là Ça en fait déjà Trois On me souvient Trois dans un premier débat Faut le faire Gérard c'est trop noir Oui Oui et tu m'as pas laissé répondre A la question tout à l'heure Tu m'as un petit peu oublié A la première A ta question d'avant Que peut-on Que peut-on rajouter Comme musique sur un synthé ? Ouais bah moi je voulais dire Qu'on peut pas rajouter de musique Sur un synthé Un synthé ça sert à rajouter Par dessus de la musique Normalement Non c'est faux monsieur Bah si C'est tout à fait Maintenant On prend les vieux disques Pas tous en même temps C'est pas C'est pas un champ de bagarre Maintenant On prend les vieux disques On les sample Ça c'est des boîtes à rythme Actuellement C'est des boîtes à rythme C'est des boîtes à rythme C'est des boîtes à rythme C'est même pas la musique électronique En elle-même Non non ça y est c'est bon On se calme Parce que moi je tiens un magasin Également à cette année Qui s'appelle Rythme Plus Non mais ça y est On se calme On se calme C'est Bernard ou quoi là ? Oui Boîte à rythme plus C'est encore lui ? J'avais repris un autre Mais je sais pas Je me suis fait blouser quoi C'est quoi la rue ? Il doit repasser sur les lits 7 avenue du maire C'est même pas la peine Il parlera pas lui Parce que Je lui laisse pas la parole Donc la question suivante Maintenant c'est Quel genre de musique Peut-on jouer Au santé ? Au santé ? Oui Bah sur un synthétiseur On peut jouer On peut jouer à la musique synthétique Je viens de vous le dire C'est qui ? C'est Jean-Michel C'est à dire plusieurs styles de musique On peut jouer de la techno Comme de la house Comme du rock Comme du rap Oui de la house Si vous voulez Ok Au standard Oui un autre professionnel du synthé Qui s'appelle Tristan Et j'ai pas eu le temps de lui demander D'où il... Ah je le connais aussi Bonsoir Bonsoir Tristan Bonsoir T'appelles d'où Tristan ? De Lyon De Lyon d'accord Et tu fais quoi ? Je travaille également Dans la musique Je travaille pour un magasin Et la fréquence de Lyon ? C'est quoi le nom de ton magasin ? Non non mais c'est On va pas commencer comme ça Musique plus à Lyon Oui voilà Je connais bien lui aussi C'est quoi la rue ? Bon Citron Guillaume Je sens que pour vous Ça va mal s'écarmer On n'a rien fait Alors nous on voit Également des guitares électroniques Non mais c'est pas Je crois que c'est pas Le thème du débat Donc c'est quel Quel jour On parle de la musique On parle de synthé Mais c'est la musique électronique Et il y a également Des saxophones électroniques Des Même des accordéons Des accordéons électroniques Il y a même aujourd'hui Le nouveau Comment on appelle ça Les On se fout là L'harmonica électronique Les putain bec électronique Également Voilà donc Bon bah moi je vous invite Tous à venir à Où ça ? Non non il n'y a pas D'où ça Pas de pub Tristan fais gaffe Gigmove Moi je vous invite A Musique Plus à Lyon Gigmove Oui mais en fait Je ne coupe pas la parole Il est en train de parler Non non mais Maintenant tu réponds Tu réponds à la question Je te demande de répondre D'accord C'est celui du général Leclerc Alors lui Tristan terminé Lui Au revoir Tristan Salut Ça en fait 4 C'est bien Continuez comme ça Bien manu Contre le deuxième débat Il n'y en aura pas Ah tiens c'est nous Attention Je dirais Toutes les Toutes les personnes Qui sont intéressantes Qui parlent de synthétiseurs Sans donner Sans préciser Les adresses où qu'ils sont Donc ça fait déjà le deuxième Qui s'amuse comme ça Donc moi j'aime pas Ça leur apporte beaucoup Pour leur magasin Oui mais peut-être Peut-être pour eux Mais pas pour moi Je dois seulement te dire Gérard tu n'es pas très crédible Par rapport à Jean-Michel Gérard Qui est avec nous Gigmove Oui alors On peut faire de la musique techno Oui La house Tout ça Et on peut même faire De la musique classique Et puis on peut faire Un peu tous Tous les styles de musique Il y a même la musique orientale Maintenant Qui se fait sur synthétiseur Oui d'accord Tu peux ? Moi je crois que Comme l'a dit Jean-Michel Oui Jean-Michel Je n'ai pas ma place Excuse-moi Jean-Michel Tout le monde l'a dit Juste après On peut vraiment jouer Quasiment de tout De la techno De la house De la synthétise De rien ajouter Là on va Sur IRC Non au standard Ou non IRC Tout de suite C'est juste une conclusion IRC Bon on va attendre un peu Alors on va prendre Au standard On va prendre Guillaume Qui est musicien lui-même Qui voulait réagir Genre de synthé aussi non ? Oui oui oui Tout à fait musicien Il est d'où ? Il est de Limoges Et la fréquence Je vais vous la dire tout de suite A moins que Guillaume Veuille la dire lui-même Je la connais pas Ah mince Alors tu habites Limoges Et tu connais pas La fréquence de De fin de radio Je suis pas de Limoges Je suis en concert en ce moment Là-bas Je travaille Enfin mon nom d'artiste C'est Bébert Ah Guillaume Je le connais bien lui aussi 92.2 FM à Limoges Pourquoi ? On m'a dit C'était 93.4 moi Ah putain Manu Mais c'est pas vrai C'est lui qui fait une erreur Vous pourrez Peut-être accorder Vos violons Guillaume Guillaume Bonsoir Donc pour toi Alors moi je travaille Dans un Je peux juste dire Que je travaille Avec un groupe Qui s'appelle Les Electrochocs Ouais alors vas-y La Russe s'il te plaît Non non mais Sinon ça va Je sens que De toute manière On va faire conclusion Comme ça Mais c'est un groupe En fait qui Non mais écoutez Laissez parler Moi je travaille Dans l'électronique Je sais pas que je Moi je travaille Sur un synthé Toyota 130 Voilà pour bien préciser La marque C'est important Parce qu'il en existe Plusieurs marques Et c'est une marque Que j'affectionne Tout particulièrement Moi j'ai testé Plusieurs synthés Et c'est vrai Je connais d'ailleurs Musique Plus Là de Lyon Je connais bien Mais ça on en a rien à foutre Guillaume Et je trouve Oui D'abord Grand respect à Jean-Michel Je passerai Samedi Prendre mes bons tempis Oui Non mais ça Vous règlez Votre popote Hors antenne Ah oui mais je suis Overbooké Il faut que je règle Donc Citron Oui Donc toi Vite parce qu'elle est Assez pressée C'était quoi déjà Excuse-moi La question Quel genre de musique Peut-on jouer Sur un synthé Tout Surtout la musique Faut que je fasse vite Parce qu'il faut que je répète Là Ouais ben Magne-toi de poser des questions Tout Non mais Magne-toi de poser des questions Si je veux Guillaume Tu peux m'appeler Bébert Ouais non mais Tu vas te calmer Mon ascard Parce que Sinon tu vas aller vite Répéter Je peux juste faire un peu de pub Pour le groupe Les électrochats Non non non Y'a pas de pub à faire Ils se produisent où ? Ouais Donc Le 27 octobre On reste à Limoges Oh Tu Quoi mais quoi ? Les plats sont de 20 Mais t'es con Pourquoi t'es un connard ? Mais Manu C'est toi C'est toi qui gère les auditeurs Fil d'art Pas connard En plus Pauvre con va T'es vraiment Une bite Une bite con Putain C'est pas bon C'est pas vrai De devoir Travailler avec Une équipe de cons C'est fou ça Je crois que vous avez Un petit en besogne Monsieur Gérard Mais Terminé Conclusion Orgue plus à Paris Pour mon frère Bon Gérard Je vais faire la conclusion De l'IRC Vas-y Fais conclusion Tous les gens de l'IRC Sont d'accord Ils savaient que Tu étais un gros teaser Et maintenant Ils savent que tu n'es pas sain Voilà C'est bien Donc Citron pour toi Oui conclusion Oui Je vais continuer à jouer Sur l'orgue de ma tante Ah non Faut jouer avec un Toyota 130 Ouais mais j'ai un bon tampi Moi à 150 balles Mais moi je possède Des Tu viens de la part de Bébert Tu viens Mon Bébert Tu fermes Tu fermes Ta goule Vous venez de la part du groupe Les électrochocs Vous avez 5% Bon Manu Tu me le vire Lui c'est terminé C'est le boulevard de Clichy Ouais Dans le 18ème Ok Il a été vachement viré Bravo Manu C'est le standard Tactile J'arrive pas Oui oui oui C'est là Je vais te calculer quelque chose Moi mon con Mon con je pense Tu pubs pour finir Conclusion Oui bah moi je voulais dire Que j'étais très content Quand même de parler Avec Jean-Michel Jarre Et je suis aussi content D'avoir plein d'adresses Maintenant pour les Saintes Ouais mais Vérifie bien Vérifie bien Que c'est des bonnes adresses Parce qu'à mon avis C'est des fausses adresses Alors Manu Tu dégages Tu fais pas le deuxième débat Je te veux plus au standard D'accord Tu peux prendre ton VTT Non mais faites pas de pub comme ça Tu prends ton VTT Et tu te passes Ok Allez Gérard Y'a Jean-Michel Jarre Qui s'en passe Game over Ouais bah moi je vais continuer A casser mes assiettes D'accord bah c'est bien Maintenant on rachètera Sur le marché La semaine prochaine Exactement Jean-Michel Jarre Pourquoi la conclusion ? Le débat n'a rien apporté Vu qu'on a entendu Un mec bourré comme vous Qui a porté des choses Complètement abstraites Envers la musique synthétisante Non Et je ne vous salue pas Monsieur Gérard Et bah c'est bien Dans ce cas là On va s'écouter Je vous mets une quexotte Dans le cul Et bah c'est bien Vous pouvez garder Vos musiques de naze alors Et continuer On va pas l'écouter alors On va peut-être pas en mettre Un de morceau On va pas l'écouter Si c'est prévu Sur la fin du débat Il t'a insulté ? On va s'écouter Surtout toi Tu fais pas de conclusion Bah moi conclusion Conclusion c'est que toi Ouais T'as d'habitude Quand c'est Max Ça se passe impeccable Là tu m'as fait des conneries Tu l'as T'as laissé les gens en parler Mais c'est pas moi Qui tire les gens C'est Manu Non mais lui Lui de toute manière Il va reprendre son VTT Il va rentrer chez lui C'est moi qui vais rentrer chez moi Et puis toi aussi Comme ça je vais être tranquille Comme ça Rigo Va passer au standard Et sur l'IRC On aura personne Et Olivia la prend Si il faut quelqu'un sur l'IRC Ah non Personne à l'IRC Donc pour le deuxième débat Il y a 800 connectés Je peux pas les laisser C'est vrai Donc conclusion c'est con Parce que Manu Tu m'as fait du boulot dégueulasse Ça c'est un peu de ta faute Pour moi je suis désolé Je savais pas que ça allait partir en couille Avec Jean-Michel Mais non Mais non T'es jamais au courant Abrouti La semaine dernière Tu me fais du boulot Du bon boulot Cette semaine Tu m'as fait du boulot Tu me fais de la merde Mais ça arrive Maintenant si c'est pour me faire de la merde Tous les jeudis C'est pas la peine Je t'ai commis vu Tu viens jusqu'à minuit Et après minuit Dès que tu me vois Tu te casses Ça vaudra mieux pour toi Il y a un niveau du débat Sur les synthés Toi le synthé Moi le synthé C'est une musique que j'adore C'est ta passion Moi j'aime bien La musique C'est tout D'accord Donc le synthé C'est bien Voilà D'accord Donc on va se quitter Enfin on va finir le débat Avec un morceau De Jean-Michel Jarre C'est lequel ? C'est toi qui as choisi C'est la plage 2 C'est la plage 2 Et sur la plage 2 J'ai Oxygène numéro 8 Et on se retrouve tout de suite après Pour le deuxième débat Qui va porter sur L'harcèlement sexuel L'harcèlement sexuel Les numéros 0875000 Et toujours l'IRC Pour un peu le radio Et 0803 Aussi 085000 Au cas où le numéro vert Ne fonctionne plus bien sûr == Le débat sur le harcèlement sexuel == === Contexte === === Les personnages === === Transcription === Et voilà, vous m'avez écouté Jean-Michel Jarre, donc Oxygène 8, et donc pour l'instant on va attendre qu'au standard on me donne les auditeurs, donc le débat, ça porte sur les harcèlements sexuels, alors donc on va déjà poser, comme on attend, je vais attendre encore un petit peu, donc la première c'est, que veut dire, alors on a Marmite, on a Frisbee, Cassoulet, on a Bidon d'huile, on a Point Noir, attends, Ericou est en train de gérer parce que c'est pas son taf, donc t'as voulu que ce soit rigolo, ça a l'air sérieux c'est les casques, et Point Noir. Sinon, moi je peux peut-être dire un petit truc sur l'IRC, on est 858. Eh ben c'est bien, voilà. Ok. Alors donc, Marmite, bah d'accord ça commence déjà bien. C'est pas très professionnel ça quand même. Donc Marmite, bonsoir, donc on écoute Fun Radio à Rouen sur 104.8. Ouais c'est ça, ouais. Et toi là, comme d'habitude. Ah ouais, c'est vrai avec... D'accord, dégage. Ah mais ça va ? Dégage, dégage. Mais ça va pas, t'es fou ? Dégage un maximum. Ah mais oui, je dégage. Dégage. Un maximum, ça vaudra mieux pour toi. Donc Marmite, on peut écouter Rouen, à Rouen, Fun Radio sur 104.8. Ouais c'est ça. Donc Frisbee's, 22 ans de Bordeaux sur 101.7, Fun Radio. C'est exact, j'écoute sur Internet, c'est exactement ça. C'est pas sur Internet, c'est sur l'AFM, d'accord ? Pardon. C'est pas du tout pareil. Cassoulet, Disneyland, Seine-et-Marne... Je gère Cassoulet, pour l'instant elle est pas là. Ah d'accord. Donc Bidon d'huile, on peut écouter Fun Radio... C'est Bidon d'huile qui a raccroché. Non mais hé, oh ! Tu vas pas commencer à foutre ta merde avant que je te gouffe, toi ! Moi je suis pas là, c'est la merde au standard. C'est de ma faute, c'est la première fois que je fais le standard, excuse-moi Gérard. Alors c'est qui qui est parti ? Donc Bidon d'huile est parti, et je suis en train de gérer Cassoulet. Et je rappelle des gens. Ah bah là, ça commence bien. On a Poupon, on a Poupon aussi. Bonsoir Poupon. Poupon, bonsoir. Oui, salut, bonsoir. Donc t'es d'où ? Je suis de Paris, je suis de Paris. Donc t'as quel âge ? J'ai 23 ans. 23, et on écoute... 101.9. 101.9. Et on accueille aussi... On accueille aussi Point Noir. Bonsoir Gérard, bonsoir Manu, bonsoir tout le monde. Bonsoir. Alors donc, première question. Donc que veut dire le mot harcèlement sexuel ? On va demander à Marmite. Ouais, ça veut dire quand t'es harcelé sexuellement. Ouais mais... Que veut dire exactement ce mot ? Ouais bah ça veut dire que t'es un canon, et puis tu te prends plein de mains au cul. Ouais non mais attends, t'es un canon, tu veux dire un top modèle ? Ah non, t'es un canon. Non mais attends, un canon, un canon, un canon, tu veux dire quoi dans... Bah t'es un canon, t'es super belle. Ah bah donc, je viens de te dire, un top modèle, tu me dis non. Ah non mais t'es pas forcément top belle. Bah mais attends, un canon pour moi c'est un top modèle, je suis désolé. Ah bah ouais d'accord, mais on n'avait pas le même mot alors. Bah oui mais un canon ça veut dire ça pour moi. Ah d'accord. J'ai récupéré le bidon d'huile. Salut Jean. Salut le bidon d'huile. Donc cassoulet... J'ai trouvé quelqu'un d'autre. Ok, donc on n'a pas de cassoulet, c'est bon. C'est pas grave, j'ai trouvé une choucroute. Bah tiens, on a une choucroute là, comme elle veut faire partie du deuxième débat. Ah non, non, non. Quoi non, si. L'invité mystère. Le bulldog. Le bulldog. Le bulldog il t'emmerde. Putain. Tu vois, comme ça t'es tout de suite servi là toi. Alors attends, celui qui vient de dire le bulldog, maintenant tu vas répondre à la question. Ça va t'apprendre à ouvrir ta gueule. Allô ? Bah qu'il réponde. Ouais bah qu'il réponde, alors c'est qui ? Entre Poupou, Point Noir, Bidon d'huile ? Ah c'est pas Poupou. C'est pas Bidon d'huile Jean. Non et c'est pas Point Noir. Ah non, non, j'ai rien dit moi. Ouais c'est Pierrot. Hein ? Ouais c'est Pierrot qui a dit ça. Non mais attends, il sort d'où celui-là là ? Bah excuse, je suis arrivé, on va pas avancer. Il sort d'où, il sort d'où lui ? Non c'est Bidon d'huile. Non c'est pas moi Jean. Excusez-moi, pour répondre à la question c'est... Eh moi je suis... Eh Gérard, c'est le bordel hein, quand c'est Rigaud. Eh mais c'est pas là, allez, allez, allez, Rigaud, tu retombes là, quand tu retombes là-bas, non non, parce que là c'est le bordel. Si je peux me permettre quelque chose, excusez-moi, on nous dit un canon, on nous dit un canon, c'est fun, et on nous dit que le boulet c'est Gérard, merci Jean-Denis. Non pas t'es fatigué, tu rentres chez toi. Ah ouais, j'ai compris là. Hein, t'es fatigué, tu rentres chez toi toi. C'est chaud là. Hein, parce que là, c'est le vrai bordel. Là c'est... Je peux pas, je peux pas commencer le premier débat, le deuxième débat, dans des conditions de merde. Ouais. Alors Pildar, Pildar. Bon les mecs. Pildar. Calme-toi. Dégage chez toi, t'es fatigué. Allez hop. Manu au standard. Manu au standard. Manu au standard. Allez c'est bon, ça y est, on se calme. Pildar, tu rentres chez toi, t'es fatigué. Allez hop. Ça vaudra mieux. Alors donc, pour toi Marmite, toi, le moins harcèlement sexuel, pour toi c'est un canon. Bah ouais. Donc canon, donc c'est comme j'ai dit tout à l'heure, c'est un top modèle, tu m'as démenti. Ouais d'accord. Hein ? D'accord, on est bien d'accord. Oui d'accord. C'est ta réponse. Ouais. Frisbee. Euh oui, je crois que l'harcèlement sexuel, ça doit avoir un rapport avec Binkington, non ? Non mais attends. Non. Eh Frisbee. Oui ? Oui, je suis là. Que veut dire le mot harcèlement sexuel ? C'est pas de savoir si Bill Clinton, il a été harcelé, ça on en a rien à foutre. On est bien d'accord. Quand même, il a été harcelé quand même. Non mais attends, ça c'est son problème, c'est sa vie privée, c'est pas la mienne. D'accord. Gérard, on va accueillir le dernier auditeur, il s'appelle Sifflet. Allo ? Salut. Bonsoir. Bonsoir. Salut Sifflet. T'appelles d'où ? De nulle part. De nulle part. Alors donc, la fréquence c'est nulle part, d'accord. Dis-moi Sifflet, je peux t'y faire dedans ? Bidon d'huile. Ouais, donc pour moi, le mot harcèlement sexuel en lui-même, pour moi, c'est les gens qui ont des problèmes à faire l'amour. Non mais attends. Je crois que c'est ça. On te demande, je te pose la question parce que je commence à en avoir marre. Que veut dire le mot harcèlement sexuel ? Je vais te le dire, c'est les gens qui n'arrivent pas à baiser. Non mais attends, toi t'es con. Il n'a rien compris. Non, il ne comprend pas lui. Non mais attends, prends-le hors antenne et explique plus sur lui. Je vais m'expliquer parce qu'ils ne sont pas capables. Prends-le bien. T'es même plus capable de faire des débats correctement à part faire la réa, c'est tout ce que t'es capable de faire. Ouais. Bidon d'huile. C'était lui, c'était lui. Je viens de le dire Gérard. Non, c'était Frisbee qui ne comprenait pas. Frisbee, je suis toujours là. Mais alors toi, pour toi ? Mais je viens de répondre. Mais c'est quoi là ce bordel ? Ah, ce n'est pas moi, je ne suis plus là-bas. C'est quoi là ce bordel ? Frisbee vient de répondre, bidon d'huile. Eh, il faudrait peut-être savoir. Il est bidon d'huile. Mais je suis là Gérard. Alors pour toi ? Ouais, donc en fait, le harcèlement sexuel, c'est ceux qui sont harcelés sexuellement. C'est ceux qui sont, on va dire, comment je pourrais t'expliquer ça ? C'est par exemple, c'est comme l'affaire Big Litton, voilà. Bon, non, je ne vois pas du tout le rapport. Point noir, tu es là toujours ? Ouais, je suis là. Donc pour toi ? C'est persécuter quelqu'un physiquement et moralement pour avoir son cul. Ouais, c'est ce que je voulais dire. Ouais, mais toi, de toute manière, tu veux toujours dire ce que les gens ils répondent avant toi. Il est heureux. Poupou ? Ouais, ben en fait, le harcèlement sexuel, c'est, tu as une fille, elle est là. Ok, après tu as un mec, il est là. La fille, elle se met comme ça. Et puis le mec, il arrive comme ça. Et puis il lui met là. Et puis la fille, elle dit ça. Oh non, ben attends. C'est aussi dans l'autre sens quand même. Oh non, mais il peut y avoir des variables. Attendez, il y a une question IRC. Oui, sur IRC, on me demande pourquoi le harcèlement sexuel est-il sexuel ? Ça, tu vois, c'est une question qu'on m'avait demandé de poser et que je ne poserai pas parce que je ne vois pas du tout le rapport. Parce que si on parle de l'harcèlement sexuel, de toute manière, automatiquement, harcèlement sexuel est sexuel. Donc, je ne vois pas du tout la question de poser aux gens parce que si je demande à une personne de me répondre sur cette question-là, qu'est-ce qu'elle va me répondre ? Parce que c'est sexuel. C'est sexuel, c'est tout. C'est tout. C'est Frisby, là. Je crois qu'on peut faire un harcèlement sexuel avec les pieds, par exemple. Mais non, mais est-ce que t'as compris la question IRC qu'on a eue ? Je crois. Répète-la-moi si je me suis perdu. Alors, la question, c'était est-ce que l'harcèlement sexuel est sexuel ? Pourquoi est-il sexuel ? Pourquoi est-il sexuel ? Moi, je peux répondre. Qui ? C'est Point Noir. Oui. Parce qu'il n'y a pas que l'harcèlement sexuel. Il y a tout le sexe allemand aussi. Mais attends, dans ce cas-là, pourquoi est-ce qu'il est sexuel si c'est sexuel ? Automatiquement, si on parle de l'harcèlement sexuel, de toute manière, on va parler de sexe. Donc, l'autre, avec sa question, je voyais pas le rapport. Si, Gérard, regarde-moi. Moi, sur l'IRC, c'est du harcèlement textuel. Oui, mais c'est pas pareil, toi. S'il te plaît. Oui, moi... Attendez, attendez, attendez. Quand même pas tout le temps les mêmes. Moi, je considère que l'harcèlement sexuel peut être vécu comme un viol. Oui, mais ça... Parce que si la personne ou si la nana n'est pas consentante, c'est considéré comme un viol et comme un crime. Oui, alors, dans ce cas-là, moi, la question que je vais poser, parce que là, je pense que je vais pas faire toutes les questions, on n'aura pas le temps. Donc, moi, je vais déjà attaquer sur la 3. C'est pas grave si on a 2. C'était quoi, la 2 ? C'était quoi ? Non, c'est curieuse que ton en pratiquant le harcèlement sexuel, mais ça... C'est un déclin. C'est pas mal. Oui, alors, qui veut répondre ? Tiens, ben, Poupon ? Non, s'il te plaît, s'il te plaît, pardon, Poupon. S'il te plaît. Moi, je pense que les personnes qui font ça, qui violent des personnes ou qui font du harcèlement sexuel peuvent faire au moins de la prison et peuvent avoir aussi des amendes. Donc, je suis d'accord avec toi, s'il te plaît. Là, il y a... On m'a donné un... un sondage. Donc, alors, sur la question le harcèlement sexuel, donc, que pensez-vous du harcèlement sexuel ? Donc, il y a 20% des gens n'ont jamais fait l'amour. 30% des gens sont puceaux et 50% des gens sont vierges. Oh, Gérard ! Oui ? Moi, j'avais entendu dire que 70% des gens étaient valences. À 100%, dans le cancer. Alors, attends. Là, je vais te dire une chose. C'est qui qui vient dire ça ? C'est Bidon d'huile. Alors, Bidon d'huile. Et Bidon. Et Bidon. Et Bidon. Bidon d'huile. Ouais. Tu vois, ton nom, il porte bien. Bah, t'es vraiment Bidon. Parce que là, tu viens de jouer sur le signe astrologique du CEP. Il a pas entendu. J'ai entendu vierge. Donc, moi, je pensais que c'était le signe astrologique. Bah, ouais, attends. Et la main de ma soeur dans la culotte d'un zouave, c'est astrologique, ça ? Bon, ça, c'est pour problème, hein ? Bravo. Bravo. Alors, Bidon d'huile, adieu pour toi. Bon, j'ai eu le choix. Gérard, il y a Devi1 sur l'IRC qui te demande, alors, est-ce qu'il y a des endroits spécifiques pour se faire harceler et est-ce que tu peux donner les adresses ? Euh, non, je donne... Je connais tes adresses, oui. Non, non, mais ça, je... On parle pas de la vie privée. Loco ? Ah, non. Frisbeez, tu vas te calmer. Bah, moi, j'ai dit qu'on parlait pas de la loco, moi. Marmite ou Point Noir, vous allez vous calmer toutes les deux parce que... Non, non, j'ai rien dit, tu plaisantes ou quoi ? Oui, c'est une fille, elle a été sifflée, alors. Bon. Donc, que risque-t-on en pratiquement le harcèlement sexuel ? On va demander à Poupon. Ouais, bah, déjà, je voulais dire à Sifflé qu'il y a une différence entre se faire violer et se faire ploter les fesses, par exemple, tu vois, une main aux fesses ou un viol, c'est pas la même chose. Et deuxièmement, bon, bah, tu risques une bonne paire de claques, quand même. Ouais, mais attends, alors, moi, je vais te renvoyer la balle. Vas-y, renvoie. Par exemple, si la personne n'est pas consentante et qu'elle n'est même pas capable de te mettre une claque dans la figure, comme tu viens de dire, et qu'elle porte plainte. Pourquoi ? T'as parlé de mettre la main aux fesses à des manchots ? Pourquoi elle peut pas me mettre de claques ? Non, mais attends, Sifflé, elle t'a bien dit, c'est entre ces deux trucs-là. Par exemple, si la personne ne peut pas, comment que tu vas faire ? Tu peux me la faire décoder, j'ai pas... Attends, toi, bidon d'huile, tu la permes. Oui, je sais. Je t'ai dit de dégager. Alors, lui, il dégage pour de bon. Ouais, je parlais avec mon professeur. Ok, je l'avais calmé, mais bon, je vois que c'est pas calmé, donc hop, il dégage. Hop, terminé pour lui, c'est même pas la peine qu'il revienne sous un autre nom. Ouais. Donc, point noir. Bah, au pire, ce qui peut arriver au gars, c'est de se faire du bien, quoi. S'il arrive assez fin. C'est-à-dire, ouais, mais tu crois que en harcelant une nana dans la rue, tu crois qu'il va pouvoir coucher avec ? Bah, attends, Gérard, il y en a qui aiment ça. Bon, bah, attends, peut-être des nanas qui aiment ça. Bah, des mecs aussi, hein. Bah, ouais. Non, non, non, non, non, non, non, non. En vrai, c'est... Non, non, qui, qui, qui, qui, qui, qui ? Non, mais ça peut être du jeu, Gérard. Ouais. Non, mais attendez, attendez, attendez, attendez, pas tous à la fois. Qui est pas d'accord avec moi ? Moi, moi, moi, moi. Poupon, poupon. Poupon, bah, moi, je dis, s'il y a des punis qui a des filles, il y a forcément des garçons avec. Elles sont pas toutes seules. Elles se produisent pas toutes seules. D'accord. S'il plaît, tu voulais peut-être répondre à la... sur ce qu'elle vient de dire, là, Point Noir ? Euh, non, pas du tout, non. Non ? Euh... Oui ? Couscous ? Bonjour, Gérard. Bonsoir à tous. C'est Gérard. J'aime bien tes débats. Bonjour, Couscous. Salut, Couscous. Salut, Gérard. Ça va ? Ça va, ça va, Couscous. Y a pas de problème. J'ai pas regardé ce matin, quand même, mais ça va, carrément. OK. Bon, Gérard, on y va, là, un peu. Alors, euh... Donc, Prisby... Euh... Prisby ? Oui ? Donc, toi ? Vas-y, pose-moi... Oh, non, mais attends, hé, oh ! Tu l'as entendu ? Je vais pas m'amuser, là, hein. La deuxième ou la troisième ? Non, non, c'est la deux. Que risque-t-on en pratiquant le harcèlement sexuel ? Hop. Ben... En même temps, Couscous, tu réfléchis à la question, hein. D'accord, Gérard. Je pense que c'est vrai. On peut passer devant les tribunaux et puis se faire emprisonner, quoi. C'est risqué, hein. Faut faire attention, hein. Faut vraiment bien prévoir ce harcèlement, hein. Sinon, bon, on risque, comme je t'ai dit, voire même de se faire, après, harceler en prison, aussi. Et ça, c'est plus... De toute manière, c'est ce qui est arrivé à je sais plus qui. Je veux pas en citer de nom, parce que, de toute manière, ça me regarde pas. Ouais, non. Tapis ? Non, non, non, non, non, non. Sur celui qui a voulu jouer le con avec ses enfants, c'est ce qu'il y a. Lui, il s'est fait prendre... Il s'est fait tabasser dessus. Marmite ? Oui ? Donc, pour toi ? Tu risques gros et dans certains pays, tu peux même te faire couper les couilles. Ouais, non, mais ça, je pense... Ouais, non, mais ça, je pense qu'en France, c'est ce qu'on devrait faire sur ceux qui pratiquent ça, sur les mineurs. Ça va pas ? Ah oui, sur les mineurs, mais c'est pas du harcèlement sexuel. Non, mais alors, c'est quoi ? Attends. Non, non, mais attends. Hé, Marmite ! Attendez, attendez, attendez. Marmite, Marmite. Attendez, attendez. Marmite. Oui ? Moi, je vais te dire une chose. Alors, si c'est pas de harcèlement sexuel quand tu t'attaques sur un mineur, sur une mineure de 15-16 ans, alors c'est quoi pour toi ? Moi, je pensais qu'on parlait de harcèlement sexuel au travail. Non, mais attends. On parle pas aux fesses. Non, mais que risque-t-on en pratiquant le harcèlement sexuel ? C'est-à-dire, si tu t'en prends sur une jeune de 16 ans dans la rue, il faut pas qu'il arrête de parler de ça. Bon, ben alors ? Gégé, on parle pas des mineurs. Euh, couscous. Attends, attends, couscous. Minitel. Pas Minitel. Oui, sur Internet. Donc voilà, sur l'IRC.fanradio.fr, je le rappelle quand même, il y a Nesquik qui te demande si le harcèlement sexuel est une discipline olympique. Je vois pas du tout le rapport. C'est un tournoi de kékaraté. Ouais, demande-lui s'il y a pas un tournoi de kékaraté, lui, pour dire des conneries comme ça. Tu peux lui demander toi-même. T'as juste à dire. Tu peux lui dire dans le micro. Ben, tu réponds à la question. Est-ce que t'es ce tournoi de kékaraté pour me sortir des conneries ? Donc, couscous pour toi. Ouais, ben moi, Gérard, je pense qu'avec le harcèlement sexuel, on peut prendre un grand coup de merguez dans la boîte à smoules. Ça, ça m'aurait étonné que tu me sors pas l'histoire de ta merguez avec ton couscous. Ah, ouais, il y avait longtemps que j'étais pas passé sur l'antenne. Eh ouais, mais si, t'es passé il y a quand même 15 jours. Ouais. Qui c'est qui voulait réagir, l'habitude ? Moi, je voulais dire que dans ton débat, là, quand même, c'était un peu... On se sent un peu chier, et puis, bon, je raccroche. C'est de la merde. Au revoir. Au revoir. Au revoir, comme ça. Bonne nuit. C'était bien, Frisbee. Frisbee. Ah, ben, on se sent bien. Frisbee, il est parti. Une place de libre. Ah, ben, c'est bien, ça fait une place de libre pour les autres. Ouais. Comme ça, si tout le monde pouvait me dire que mes débats, c'était de la merde, eh ben, dans ce cas-là, on fera plus de débats. Non, non, Gérard, c'est bon, il est là, on pète les barres. Très bien, Gérard. Moi, je m'en fous, hein. Non, mais j'adore tes débats, Gérard. Moi, si tout le monde se plaint que les débats, c'est de la merde, dans ce cas-là, moi, je fais encore une question, à deux heures, je laisse la place à Rousseau, je rentre chez moi, et... Non, il était gris, il était gris, je sais pas ce qu'il avait. Non, mais on s'imagine, Gérard, on reprend, on reprend tout. Votre patron vous a-t-il déjà harcelé ? Donc, voilà, on va revenir avec la question que Marmite m'avait posée en premier. D'accord. Donc, voilà. Donc, je te pose la même question aussi, toi. D'accord. Moi, ouais, ça m'est arrivé, ça m'arrive encore, ouais. Mais elle aime ça, donc je dis rien, quoi, au contraire. Ah ouais, non, mais attends. Attends, dans ces cas-là... C'est une cochonne, c'est une cochonne. Non, non, attendez, attendez, attendez, attends, Poupou. Ouais, Poupou. Ouais, Poupou. Ouais, bah, c'est qu'elle aime ça, si elle dit rien, c'est que ça lui plaît, en fait. Bah, ouais, mais dans ces cas-là, pourquoi... Dans ces cas-là, pour pas qu'ils viennent se plaindre, après, ils t'ont... Bah, ouais, mais dans ces cas-là, si t'aimes ça, c'est que t'as envie d'avoir plus que les autres qui travaillent avec toi, c'est ça ? Non, c'est pas ça, c'est que ça permet de coucher sans t'engager, quoi. T'as pas de mec, tu couches avec tes collègues, comme ça. Ouais, non, mais attends, dans ces cas-là, si tu couches avec ton patron, c'est parce que tu veux avoir un peu plus que les autres, c'est tout. Je suis désolé. Si, si, je suis désolé. Je suis désolé. Je suis désolé. Stop, stop, stop, parmi... Non, juste, vite fait, il y a Titus sur l'IRC, il demande ton patron ou ta patronne. Ah ouais ? Ouais, mais ça, ça... Il a pas tort. Ouais, j'aurais pu préciser. Oui, Manu ? Donc, à la place de Frisbee, ce qui est raccroché, on accueille Focu, il appelle d'Angoulême sur 92.4. Bonsoir, Gérard. Salut. Focu. 93.4, voilà. OK, donc... Qu'est-ce qu'il nous reste ? Bidon d'huile est parti. Qui ? Moi, j'ai couscous. Ouais, il y a couscous à sa place. Donc, point noir. Ah ouais ? Ben, moi, c'est pas mon patron qui me harcèle, c'est moi qui le harcèle. Ben non, alors attends. Encore une cochonne. Ah non, non, attendez, attendez. Il y a que des cochonnes. Non, mais attends. Il y a que des cochonnes. Je suis désolé, regarde. Il y en a une qui se laisse faire et c'est l'autre qui harcèle son patron. Ouais, non, mais attends. Poupon, poupon, poupon. Ouais, ouais, ouais. C'est toi qui viens de réagir comme ça, non ? C'est moi, ouais. Non, mais attends. Si. Il y a que Sifflet qui n'est pas cochonne. Il y a que Sifflet qui est normal. Ouais, mais Sifflet, ça, c'est son problème, c'est pas le vôtre. Elle va répondre, elle. Le boss, il va être content. Qui ? Ben, rien, non, rien. Ben si, fini ta pensée. Ben rien, je sais pas. Sifflet, elle a peut-être pas de boss, c'est peut-être pour ça. Moi, c'est mon cas, en fait. Je suis chômeur, donc j'ai pas de patron. Ouais. Ben, je peux pas me faire harceler, quoi. En fait, c'est mon problème. OK. Alors, attends. Point noir à 17 ans, c'est toi qui te fais harceler par un patron ? Ben oui. C'est toi qui harcèles les patrons à 17 ans ? Ben oui. Non, mais tu me prends pour qui, là ? Ben, pourquoi ? Je fais un contrat d'apprentissage dans une boulangerie, je travaille. Ouais. Et mon patron, il me plaît, donc je fais du harcèlement sexuel. Ah ouais ? Ben, dans ces cas-là, à 4 heures... Attends, attendez, attendez. Dans ces cas-là, à 4 heures du matin, tu te réveilles et tu vas y ploter des... des coucouillettes alors qu'il fait sa baguette ? Non, non, non. Elle va lui ploter les pois chiches. Je le touche pas, je le provoque. Je le travaille au corps. C'est pas pareil. Non, mais alors, c'est pareil. Non, c'est pas pareil. C'est pareil, parce que tu... En travaillant sur le corps, tu peux descendre... Mais pourquoi tu lui plotes les pois chiches ? Le couscous, il a réponse à tout, hein. Euh, s'il plaît. Non, je pense que... Non, attends, attends. Poupon, poupon. Ben, je t'ai déjà répondu, moi, je t'ai dit, j'ai pas de boss, donc au pire, je peux me faire harceler par la nana de la NPE, quoi. Mais, euh, non, je peux pas me faire harceler par mon boss, y a pas rien. T'aimerais ça si t'avais une patronne ? Euh, si j'avais une patronne ou un patron pas des masses. Ouais. Parce que je suis pas fan de l'usine à six fers, quoi, mais une patronne, j'ai pas. Pourquoi pas. Euh, s'il plaît. Non, je me suis jamais fait harceler par un patron, ni rien du tout. Oh, ben, c'est clair. Non, mais pourquoi ? Dans quel sens ? Ben, elle a pas de patron. Bah, parce que j'ai jamais eu l'occasion... Elle travaille pas. D'après moi, elle doit pas être bien belle. Bon, toi, tu peux mieux te regarder ta montre, hein. Oh, là. Joli ! Joli, joli. Je sais pas qui c'est qu'a voulu lui poser ce... Je pense qu'elle a une voix bien mignonne. Je l'habituerai bien, ma couscous par contre. Elle a l'air sexy, hein. Euh, couscous, pour toi. Oui, ben, j'ai pas entendu la question, excuse-moi. Oh, ben, d'accord. Euh, votre patron vous a-t-il déjà harcelé ? Ben, moi, je travaillais à l'usine. Alors, mon patron, c'est un mec, et moi, j'aime que les grosses Fatma. Alors, je peux pas me faire harceler. D'accord. Euh... Focu, pour terminer sur ce question... Moi, Gérard, j'étais au standard avec Manu, j'ai pas entendu la question. Non, mais attends, ouais. Non, c'est vrai, c'est vrai. Non, mais t'aurais pu lui expliquer la question. Je l'ai calmé, j'ai pas eu le temps, tu viens de l'appeler, donc... Alors, Focu, pour la dernière fois, je répète la question. Votre patron vous a-t-il déjà harcelé ? Euh... Non, j'ai pas de patron. D'accord. Et donc, tu t'es jamais fait harceler ? Ben non, parce que je suis mon propre patron, donc quand je me tape des branlettes, à la rigueur, je me harcèle tout, d'accord. Et tu te tapes des branlettes avec... Ah là là, il est chaud comme la braise. Eh, eh, Focu, à mon avis, tu te tapes des branlettes avec tes secrétaires. Ah non ? Ah ben si, t'as quand même des secrétaires, si t'es patron. Euh... Non, des secrétaires, mais mal. Ouais, des mauvaises, d'accord. IRC, oui, sur IRC, il y a Cab qui te demande s'il y a harcèlement sexuel quand on branche son synthé. Ah ben... Rien à voir. C'est pas du tout le... Oui. Alors, la question, peut-on... On va réfléchir, vous allez réfléchir à la question. Vous allez réfléchir à la question. Peut-on dire que c'est un produit vendu en magasin et on va s'écouter les gens débiles ? Je respire la sardine. Et on se retrouve tout de suite après. Vous pouvez nous appeler au 0800 308 5000 et toujours le... IRC. IRC. www.frfanradio. A tout de suite. Et voilà, vous venez d'écouter les gens débiles. Je respire la sardine. Je ne sais pas si c'est vraiment ça comme titre. On nous a laissé ça, donc en... Il est parti, donc il nous a laissé ça. Donc maintenant, vous pouvez nous appeler au 0800 308 5000 et toujours le... L'IRC qui marche... Super bien, je crois. Combien de connectés, à peu près ? On a dépassé les 800. J'espère atteindre les 1000 d'ici 3h du matin. Combien ? On me dit 989. On y est presque. Joli ! Attends, déjà, la semaine dernière, on était à 856. On bat les records, ce soir encore. C'est dommage que l'humidité ne fonctionne pas parce que je crois qu'à partir de 200 connectés, il n'y a plus personne. Ça a sauté. Ah ben alors, c'est dommage. Donc, on va récupérer Marmite. Marmite ! J'ai allumé, hein. Oh ! Ouais, ouais. Ouais, pardon, pardon. C'est bon. Marmite. Bonsoir. Rebonsoir. Rebonsoir. Point noir. Salut. Rebonsoir. Poupon. Oui, bonsoir à tous. Rebonsoir. Oui. Sifflet. Bonsoir. Rebonsoir. Qu'est-ce que ça a été, Merguez ? Allô, vrai body. Ah, c'est Ashley Body. OK. Faut que... Faut que... Oh, oui. Faut que... Je vais répéter la question pour qu'il la comprenne bien. Non, non, mais quand je dis... On reprend et on n'attend plus. Faucu, t'es là ? Ouais, ouais, tranquille. OK, c'est bon. Donc, la question, je ne vous la repose pas. Ouais. Donc, maintenant, on va demander... Tiens, Faucu, comme t'étais au standard, on va savoir ce que t'en penses, toi. Moi, je ne suis pas trop d'accord, en fait. Alors, explique. Ça ne peut pas être une marque. Non, mais attends. Je te demande d'expliquer. Si tu me dis que ça ne peut pas être une marque et que tu me fais un blanc, ce n'est pas la peine. C'est tout. Non, mais je pense que ça ne peut pas être une marque parce que je ne vais pas acheter de harcèlement sexuel. Mais est-ce que c'est un produit vendu en magasin, c'est tout ? Je ne te demande pas si c'est une marque. Ben, si c'est un produit vendu en magasin, tu vas acheter du harcèlement, toi ? Je peux te dire, moi, je vais acheter du chewing-gum, je ne sais pas quoi, et dedans, on va me mettre du sperme et je vais manger ça. Bon, ben alors ? Et alors ? Et c'est un produit qui est vendu, quand même. Je suis d'accord avec toi, mais tu ne vas pas aller dans un magasin et dire bonjour, je vais acheter un petit peu de harcèlement et un petit peu de sexuel. Euh, ok. Couscous ? Ouais, ben moi, j'achète du harcèlement sexuel à l'épicerie de chez Bébé. Ouais, ok. Tu achètes les couscous, les pois chiches et les merguez ? Ouais, ouais, il n'y a pas de problème, genre. Le mouton et le poulet ? Il n'y a pas de problème, mais fais quand tu veux pour qu'on fasse une couscous party et je te mettrai la merguez. D'accord. Sifflez. Oui, je pense que ça peut être un produit vendu en magasin parce que l'église fait bien le viagra. Ouais, non, mais attends, toi, si tu commences à me bouffer les questions, je pense que tu as passé... Non, mais c'est vrai, Gérard, il exhibe bien le viagra, donc pourquoi pas... Non, mais ça, le viagra... Le viagra, c'est pour ceux qui sont... Oui, ceux qui sont impuissants. Ouais, ben tiens, justement, tu peux bien en parler, du viagra, tiens. Voilà les deux thèmes de la semaine prochaine, on les a trouvés. Le viagra et le gras. Donc pourquoi pas, hein ? Ouais, pourquoi pas. Poupon ? Ouais, ben le vieux gras, moi, j'aime pas trop, mais... Non, non, non, mais attends, ça, c'est pour la semaine prochaine, la question... Le débat, c'est pas pour cette semaine. C'est pas pour le vieux gras, c'est ça ? Non, pour l'instant, c'est sur l'harcèlement sexuel, c'est pas sur le vieux gras. Alors, en supermarché, moi, je dis que vous avez rien compris, si tu veux trouver du harcèlement sexuel en supermarché, tu vas au rayon, je sais pas, poissonnerie ou légumes, n'importe quoi, et tu verras, ben, le chef de rayon, s'il met la main aux fesses, ben, aux vendeuses ou aux caissières, ben, là, il y a harcèlement, c'est tout. Non, mais attends, comment tu peux... C'est tout, c'est tout. Ben, écoute, le harcèlement, c'est que tu veux le trouver, sinon. Forcément, il y a des mains qui plotent des fesses dans les supermarchés, donc il y a du harcèlement. Non, mais moi, de toute manière, une fois, je pense que, s'il plaît, elle peut le dire, une fois, j'étais dans un supermarché... Et tu t'es fait ploter les fesses. Non, non, c'est pas ça, c'est qu'on était en train de boire de l'eau, parce qu'il y a... Il y avait de l'eau à dispo... Attends, attends, attends... Tu bois de l'eau, toi ? Toi, t'es allergique ? Non, non, je bois de l'eau, tu vois, alors me prends pas les... Arrête, non, bah... Non, tiens, Sifflé, elle peut te le dire, sans le faire exprès, c'est elle qui... Je sais pas comment j'y ai fait, j'avais pas envie de finir mon verre, et elle était juste derrière moi, je me suis retourné, j'ai balancé le verre dans la tête. Tu la connais ? Tu connais Sifflé ? Tu connais Sifflé et Sifflé ? Je me rappelle pas du tout, non. Tu t'en souviens pas ? Bah, c'est pas grave. Donc, à la question, comment faites-vous... Comment faites-vous... Comment vous vous faites harceler sexuellement ? Donc, il y a 10% de gens qui se font harceler sexuellement, qui se font harceler sexuellement par téléphone. Ça, c'est vrai que par téléphone, c'est... Ça, c'est... Je pense qu'ils auraient été un peu plus nombreux, ça aurait été mieux. C'est horrible. 60% des gens se font harceler par courrier. Ça, j'en connais un qui est bien placé. C'est clair. Merci, chef, de mettre la super musique de boîte de nuit. 30% des gens se font harceler par des rapports. 1% des gens ont dit... Ils me mettent sa bite dans ma chatte. Moi, j'aimerais bien avoir le numéro de téléphone du 1%, là. Ouais, bah... Bah, Manu, il va se faire un plaisir de te trouver ça. Je vais te trouver ça, il n'y a pas de souci. Parce que là, je sais qu'il y en a une, pour l'instant, elle attend encore mon chef, là-haut. C'est grave, hein. Elle est grave, elle, encore, là-haut. Gérard, sur IRC, il y a 6 gars qui te demandent si le harcèlement est héréditaire. Comment ça ? Impossible. C'est des histoires de famille, ça. C'est des histoires. Tu m'éteins ça avant que... Que je me déplace et que je t'éclate tes petites lunettes. Vite ! OK ? Bon. Bon, Gérard, t'as pas répondu à la question est-ce que le harcèlement est héréditaire ? Ça, je peux pas savoir, parce que j'ai pas goûté à tout ça. Donc, point noir. Écoute-moi, en magasin, franchement, j'en ai jamais vu. Par contre... Toi, tu travailles en boulangerie, donc en grande surface, ça m'étonnerait que tu puisses voir ça. Ouais, non, mais attends, je fais des courses quand même, quoi, je veux dire. Mais par contre, par correspondance, oui. En fait, on te vend des cours, donc c'est des cours qui sont payants, et tu payes après les résultats. Donc, si leur technique marche, tu payes, et si ça marche pas... Ouais, dans ces cas-là, on vient sur les 60% qui sont harcelés par courrier. Ah non, non, non, absolument pas. En fait, moi, j'ai fait appel à une société qui te vend des cours d'harcèlement sexuel, donc ils t'envoient une technique de savoir-faire, tout ça, donc ils t'envoient ça par courrier, donc tu suis à la lettre, toutes les instructions. Ensuite, quand t'as envie de harceler quelqu'un, comme moi, j'ai harcelé mon patron, ça a marché, j'ai payé, et quand la technique ne marche pas, tu payes pas. Et si tu veux, je peux te donner une adresse. Non, non, non, on s'en fout. On s'en fout. Mais attends, point noir, tu vas pas me dire que t'as payé ton patron pour te faire harceler. Non, mais attends, tu captes vraiment rien. Non, c'est dalle. Attends, si je suis grave dans ces cas-là, t'as qu'à pas dire de conneries, parce que j'ai bien entendu dire que t'avais payé. Gérard, elle a payé un organisme pour lui harceler. Non, non, elle a payé aussi le patron. Bon, Marmite. Oui. Moi, une fois, j'ai piqué un truc dans un magasin, donc c'est pas bien, mais bon, je me suis fait choper, donc j'ai été emmenée au directeur, donc j'ai proposé de me harceler. Et comme ça, on a annulé la situation. Elle a assisté le vigile. Elle a assisté le vigile et ça se fait pas. Ouais, je pense. Non, mais ça, je peux vous dire une chose que je sais pas, parce que moi, j'ai jamais eu l'occasion de me faire harceler dans un magasin. Bah, t'as pas de chance. Bah, je préfère. Ah ouais. Alors, moi, je préfère être tranquille que de me faire harceler par des emmerdeuses. Ah ouais. Voilà. Donc, moi, c'est pas moi qui aurais payé pour me faire harceler. Ouais, ça, ça s'appelle une putain, quand même. J'ai le droit de demander un truc ? C'est qui, c'est qui, c'est qui ? C'est Fokur. Il y a Manuel sur Minitel qui demande si tu fuches pour une binouze. Bon, alors, Fokur, Fokur, tu sais ce que tu as fait, alors, hein ? Tu vas aller voir Manuel Standard parce que tu commences à me gonfler avec tes conneries. Il a raison, il a raison, c'est un message Minitel. Ouais, non, non, mais attends, les messages Minitel, pour l'instant, le Minitel, il y a plus de 100 connectés, donc il fonctionne pas. Donc, je vois pas pourquoi qu'il s'amuse à me dire des conneries comme ça. Donc, Fokur, tu vas voir Manuel Standard. Si ça va pas, tu vas dégager. J'ai le calme, j'ai le calme. Si ça va pas, tu vas dégager. Donc, le harcèlement sexuel, peut-il être petit ? Peut-il être consentant ? Donc, je répète, le harcèlement sexuel peut-il être consentant ? Fokur, écoute, moi, j'ai un exemple. Je me souviens il y a quelques années, je me suis harcelé par une fille, donc une femme qui était ma patronne à l'époque, et elle sentait du con, donc elle avait le con consentant, ouais. Ouais, non, mais elle était consentante. J'allais la faire, merde. Ah, je suis désolé. Je suis désolé, Régo. T'étais consentant ? Non, moi, j'étais juste d'accord. Ah, t'étais d'accord, donc tu te sentais consentant, tu te sentais bien dans ta peau quand t'as proposé ? Ah, je me sentais carrément con, ça c'est clair. Ah, bah ouais, d'accord. Fokur, s'il s'est calmé ? Ouais. Oui, je me suis bien calmé. Donc, alors, vas-y. Mais, je me suis calmé, j'ai pas pu entendre rien. Ouais, là, je crois qu'il y a... Ah, j'ai dû répéter, il voulait savoir si t'étais consentant pour te faire harceler dans le sexuel, voilà. Ah, oui, mais, bah, vu que moi, je suis mon propre patron, je peux pas être consentant ou pas, puisque j'ai pas ce problème-là. Bah, si, ta main droite, elle est d'accord avec ta main gauche quand tu te pignoles, donc t'es consentant. Ouais. Bah, ouais, donc... Bon, on est d'accord. Bah, oui. Là, je pense que... Mais, le problème, c'est... Non, c'est que j'ai pas de problème, en fait, de se projeter là, puisque je suis mon propre boss. Ouais, d'accord. Donc, voilà. Poupon, ça prend la peine d'essayer d'y faire comprendre parce qu'apparemment, il a l'air de nous prendre pour des cons. Bah, j'essaye de l'aider, quoi. Non, non, mais il nous... Non, non, mais il nous prend pour des cons, donc... Allez, tu me prends quelqu'un d'autre à la place parce que ça vaudra mieux. On va pas s'amuser avec... J'arrête, je coupe, là. Non, non. Euh... Couscous. J'ai coupé. Ah, Rachida, sur la couscous, hier, j'ai mis un grand coup de chipolata, elle est consentante. Il y a pas de problème. Non, mais attends, parce qu'Olivier, il vient de reprendre la pro parce qu'il y en a un qui était crevé, donc il commence à s'amuser à me faire des conneries. Donc... Welcome back, Olivier. Donc, pour toi, Couscous, donc... Ah, il y a pas de problème. Moi, je suis toujours consentant pour faire l'amour, il y a pas de problème. Ok. Euh... S'il plaît. Non, je pense que là, seulement c'est seul, il peut pas être consentant. Bon, ça va, là, vous me laissez parler, un peu ? Oh, Pascal ! Oh là là ! Olivier, tu commences pas, d'accord ? J'ai rien fait. Non, non, t'as rien fait, à peine. Et les autres, vous vous tchalmez quand je pose une question, s'il plaît, d'accord ? Y a pas de problème. Ouais. Bon. Donc, je disais, non, le harcèlement sexuel peut être considéré comme... peut être consentant. Oh, putain, moi, j'arrête, hein. Oh là là ! Putain, elle a une belle voix, c'est dommage. Oh, les charmes, Antoine ! Elle est pas conne, en plus. Et voilà. Merci, merci ! Merci pour celui qui s'amuse à faire cette connerie. Donc, là, elle a arrêté, c'est même pas la peine d'essayer de la rappeler, elle reprendra pas. Alors, point noir. Je voulais juste dire que sur IRC, tout le monde est content qu'il ait pu siffler. Appelez l'invité mystère, soit fait l'invité mystère. Sur IRC, moi, je les emmerde que, s'il plaît, je sois plus là, c'est tout. Gérard. Au standard, à la place de Faucu, qui était tout bidon, on accueille Mathieu, lui, il s'est fait harceler sexuellement par sa patronne, et en fait, ça a fini par une belle histoire d'amour, quoi, en gros. Non, mais attends, pour l'instant, on n'en est pas là-dessus, on est sur le consentement. Je t'annonce... Ben oui, mais je t'explique ce qui s'est passé dans sa vie. Ok. Point noir. Est-ce que tu peux me répéter la question, s'il te plaît ? Putain, mais vous allez faire ça jusqu'à 3h du matin, là ? Bon, les filles... Ben attends, c'est la première fois que je te demande de répéter. Le harcèlement sexuel, petit L... Petit L, consentant. Euh, tout à fait, ouais. Petit L, non. Petit L, grand L. C'est petit L, c'est ce que je voulais dire. Voilà. D'accord. Donc, le harcèlement, petit L, consentant. Voilà. Ouais, d'accord. Ouais, moi, je pense que, ouais. Enfin, c'est un avis personnel, mais ouais, je pense, ouais. D'accord. Marnit ? Ben oui, moi, oui, c'est clair. Oui, je suis consentante. Ça, de toute manière, je pense que les trois quarts des personnes sont toutes consentantes sur des problèmes, comme ça, hein. Le harcèlement ? Euh, Mathieu ? Oui, ben moi, j'étais complètement consentant, puisque j'ai eu, donc, un harcèlement sexuel de ma patronne, et ben maintenant, je suis marié avec. Ah, d'accord. Et ben oui. Et t'as quel âge, sans indiscrétion ? J'ai 23 ans. Et t'appelles à elle d'où, sans... D'un tourneur. Bon, Olivier, tu vas commencer par t'écraser, parce que tout à l'heure, tu l'as dégagé, ça va aller vite fait. D'accord. Donc, t'appelles d'où ? De Toulouse. De Toulouse, de la fréquence ? Ben, moi, je sais pas, parce que je l'écoute sur Internet. En 17.5. Ouais, ben, non, je pense pas, hein. Si, si, je crois pas, je sais pas, je dis ça comme ça, hein. Non, parce que c'est pas la première fois qu'on a des gens de Toulouse. C'est en 3 points de la fréquence, tu verras. Non, mais moi, je pense que, si je la demande à Manu, le temps qu'il achète, on verra. Alors, donc, moi, je peux vous dire que je me suis jamais fait harceler, donc, même le jour où ça arriverait, je sais pas si je serais consentant là-dessus. Donc, voilà. Pourquoi ? Ben, attends, explique-nous pourquoi. Ben, parce que je veux pas me faire harceler par n'importe qui, déjà, pour commencer. Ah, mais elle est mignonne. Non, mais ça, ça dépendra de la personne. Et tu donnerais pas ton consentement ? Non. Non. Donc, les animaux pratiquent-ils le harcèlement sexuel ? On va demander à Marmite. Ouais, les chiens. Il y en a plein, ils viennent sur moi, puis ils frottent les cheveux. Ils mettent leurs zigounettes sur ma jambe, c'est désagréable. Moi, je vais te dire une chose, Marmite, je pense que Point Noir... Oui ? Point Noir, ça va être pareil. Ouais, ouais. C'est surtout chez les bulldogs. Oh là là ! Olivier, tu fais gaffe ! Il y a Gérard qui m'attaque. Olivier, tu fais gaffe, c'est la dernière fois ! D'accord, d'accord. On a Olivier, c'est content de t'avoir. T'amuses pas à faire des conneries, toi. Gérard ? Oui ? On accueille Casse-toi à la place de Sifflet. Salut, Gérard. Salut, Casse-toi. Casse-toi, salut. T'appelles d'où ? Et j'appelle de Seine-et-Marne. Et la fréquence, c'est 101.9. Ouais, voilà, 101.9. Donc, on va demander à Point Noir. Attends, Marmite, tu me disais, toi ? Que j'étais sexuellement harcelée par les chiens. Non, mais ça, je peux... Maintenant, il y a quand même trois filles. Trois filles et trois garçons. Oui. Je pense que... Les trois quarts du temps, les nanas, c'est quand vous avez vos règles. Et ça, je peux vous le dire, moi, j'ai le... J'ai le temps par les... Non, non, non, mais attendez, attendez, attendez. Je vais continuer. Moi, j'ai le chien de ma copine, donc... Il se frotte toujours à ta jambe quand t'attends. Non, non, non. Comme ça ? Non, non. Il va carrément sur sa sœur. Ouh là ! Donc, je pense, à chaque fois, il va... Dès qu'elle a ses règles, hop, tu peux être sûr que t'as le clé barqué, là. Il suffit juste de te laver, Gérard. Tu sens pas, ça sent pas. Faut te laver, c'est tout. Non, mais c'est pas moi qui... Non, mais dis-le à ta belle-sœur. Non, mais de toute manière... Ou à ta meuf. Non, mais attends, ma meuf, attends, merde, toi. D'accord ? Tiens, ben, Poupon. Oui. Donc, pour toi ? Ben, écoute, moi, bon, déjà, j'ai un gros problème. Je sais que tu vas pas être d'accord, mais moi, j'aime pas les animaux. Donc, je vais te dire, le premier clé barqué, qui vient se frotter sur ma jambe, il prend un coup de savate, quoi. Non, mais alors, dans ce cas-là, je vais te dire une chose, que... Non, non, non, non, non, non. Ça dépend du chien, ça dépend du chien. Non, mais t'es vraiment dégueulasse de dire ça, c'est tout. Si t'es un gros rottweiler, je le laisse terminer. Si t'es un caniche, je le fous. Non, mais attends, moi... Ah, c'est dégueulasse, là, franchement. N'importe quoi. Attends, j'ai pas envie de me faire spermer par un clé bar sur la jambe. Pousse, pousse. Ouais, Gérard. Moi, j'ai déjà vu deux dromadaires qui se frottaient là-bas, aussi. Ils étaient en train de se masturber, eux-mêmes. Dans le désert du Sahara, en plus. Attends, attends, hé, hé, hé, hé. À la place des dromadaires, il n'y avait pas des chameaux ? Oui, il n'y a pas de problème, mais c'est pas le même nombre de bosses, donc ça fait pas le même effet. Ouais, les chameaux, ils ont deux bosses ? Ouais. Non, une, une, une. Non, ils en ont deux. Non, ils en ont deux. Les dromadaires, ils en ont une. Oh, les filles, bravo. Ça veut dire deux en arabe. Mathieu ? Ouais, bah moi, je pense pas que les chiens et les animaux sont capables de nous harceler sexuellement. Je pense que c'est pas... Ils ont tout ce qu'il faut, hein. Ils ont une quéquette, ça suffit, hein. Bah ouais, mais comment tu veux qu'ils reproduisent, alors ? Faut bien qu'ils aillent sur une femelle. En plus, ils arrivent à se la lécher. Bah ouais, c'est ça. Oui, ça, oui. Attends, moi, je sais qu'il y a déjà des chiens qui m'ont mis des mains au cul. C'est pas super agréable, quoi. Attends, un chien te met une main, une couille. Ouais, c'est ça. Tu dirais qu'ils te mettent une patte, ouais. C'est plutôt malin de te toucher une couille. Moi, ça m'est déjà arrivé, un chien qui me fait un clin d'œil, par contre. Bon, toi... Attends, Couscous. L'autre, quand il me dit qu'il y a un chien qui lui a fait un clin d'œil, vu qu'il a ouvert ta tranche, ça m'étonne pas de toi, hein. Ça m'étonne pas de toi, hein. Bravo. Les premiers chiens que tu vois dans la rue, ils sont pour toi, hein. Casse-toi. Gérard, sur IRC, on me demande si tu t'es déjà toi-même harcelé sexuellement. Non. Avec ta main droite ou gauche ? Non plus. Alors, casse-toi. Oui, ben, excuse-moi, j'ai pas entendu la question. Tu peux la répéter ? Les animaux pratiquent-ils le harcèlement sexuel ? Ah, j'y crois pas, là, du tout. C'est quoi le débat, Gérard ? Les animaux. J'étais pas là au début. Non, ben, toi, les oreilles, c'est comme le cul, ça se lave. T'étais dans l'ossidio en train de faire le con, alors... C'est sur les animaux, les animaux. Ils travaillaient. Oh, non, ben, ils travaillaient, mais ils n'avaient qu'à écouter. Et tu m'éteins ce son, parce que tout à l'heure, je vais te faire du... Je vais te mettre une barf. Je vais te mettre une barf. Alors, septième question, Manu, tu m'éteins... Tu veux répondre, moi ? Qui ? Point noir. T'avais pas répondu, toi. Non, j'ai pas répondu. Tu m'as posé la question, et puis tu m'as coupé en plein milieu. Ah, bon, ben, alors, vas-y. Ouais. Donc, je voulais te dire que c'est vrai qu'effectivement, les chiens sont réputés pour faire du harcèlement sexuel, et surtout la race des bulldogs. Ouais, mais ça, c'est partout. C'est pas drôle. Donc, voilà. Moi, je peux... Oui ? Non, rien, rien, rien. Donc, je peux vous dire une chose, que j'ai jamais vu des animaux le faire, mais bon, peut-être que jour, je m'en verrai. Donc, la question... Avez-vous déjà été harcelé ? Je pense que je l'avais posé, cette question-là. Ouais. Ouais, j'ai hâte. Ouais, j'avais oublié de donner les sondages. Donc, il y a 55% des gens qui répondent qui ne sont pas bricoleurs. Donc, je vois pas le rapport avec le harcèlement. 40% des gens répondent qu'ils préfèrent le foot. Donc, je vois pas du tout le... Le foot ? Le foot. Ah, pardon. Le football. Donc, je vois pas du tout le rapport avec le harcèlement sexuel. Ça, c'est les sondages. Donc, 5% des gens répondent qu'ils s'en foutent de la politique. Je vois pas du tout le rapport avec le harcèlement sexuel. Rien à voir. 0% des gens n'ont pas compris la question. Alors, s'ils n'ont pas compris la question... Donc, il y a 0% qui n'ont pas compris la question. C'est bien. Comme ça, ça me fait plaisir. Moi... C'est des Mongols. Pour moi, c'est des Mongols. C'est des petits cons. Ouais. Sur Minital, il y a Caroline DS qui dit qu'elle veut te voir à la loco. Mais écoute, il n'y a personne. Tiens. Regarde. Ah, il y a un connecté. Deux. Ah, un connecté. Bah, allez, non, ça... C'est les parents, Olivier, de toute façon. Ah, bravo. Non, je pense pas. Le téléphone ne répond plus, Max. Je te branche. Bon, bon, d'accord. Bon, bah... OK. Donc, septième question. Avant qu'on fasse la pub. Non, non, non, non, non, non. La pub ? Il n'y a pas de pub, Gérard. Il n'y a pas de pub. La pub, à 2h30 du matin. Gérard, il veut de la pub. Non, non, avant qu'on... On va faire la pub. Avant qu'on s'envoie à un petit disque. Alors, être harcelé sexuellement peut-il devenir une maladie ? On va demander à... Casse-toi. J'ai pas compris ta question, Gérard. Tu peux répéter. J'ai rien compris. Être harcelé sexuellement peut-il devenir une maladie ? Ah, pas du tout. Bien sûr, bien sûr. Mais alors, ça n'a aucun rapport, quoi, je veux dire. Si, moi, je sais, moi, je sais, moi. Qui ? Poupon, Poupon, Poupon. Ouais, vas-y, Poupon. Bah, déjà, si tu penses que ça peut être une maladie, il faut que tu vois ça, en fait, avec ton boss, parce que ton boss, il a fait l'émission du dimanche soir, c'est Malade Nocturne. Ouais. Et Malade Nocturne, c'est donc pour guérir, justement, la maladie du harcèlement sexuel. Non, mais attends, mon boss, mon boss, déjà, il a un nom, il s'appelle Max. Bon, Max. Hein ? Il a fait... Il a fait... Voilà, comme dit Couscous. Mais il n'a pas fait ça dans le but de faire chier... C'est tout. Mais je ne t'ai pas dit dans le but de faire chier, c'est pour soigner la maladie, c'est fait pour ça. Mais attends, mais ce n'est pas avec la musique que tu vas te faire harceler, espèce d'abruti. Mais non, ça guérit du harcèlement, et c'est pour ça que ça s'appelle... Ah ouais, tu crois que la musique a guéri le harcèlement sexuel ? C'est une nouvelle thérapie New Age Goer, le malade nocturne. Ouais, une malade nocturne. Ok, une question IRC. Oui, il y a Nostradaminus... Nostradaminus ? Non, Nostradaminus. Il te demande s'il existe des traitements à base de médicalement. De médicament, non. Pas de médicament, de médicalement. Non, pas à ma connaissance. Normal. Qu'est-ce que c'est ? Je t'ai répondu, Gérard. Non, ce n'est pas toi qui... Il vient de me répondre, c'est Poupon. J'ai répondu juste avant que je disais que ça n'avait aucun rapport. Bon, ok. Mathieu ? Moi, je pense que oui, ça peut être une maladie de harcèler sexuellement. Ok. Koskos ? Ouais, ça peut être une maladie, mais il faut consulter un bon médecin qui peut te traiter au Koskos pour que tu te soignes. Ouais, d'accord, avec les merguez, les pois chiches... Que la semoule. Pourquoi pas avec une carotte ? Non, mais il la fume, la semoule, ou quoi, lui ? Non, mais attends, il fait bien et... Il habite dans une couscoussière... Non, non, mais lui... Restez quand même polis, parce que c'est quand même bien qu'il y ait un mec comme lui, au moins pour nous donner un peu d'ambiance dans les débats, parce qu'avec vous, je crois qu'on s'ennuie rien. Je peux t'en mettre, si tu veux. Moi, je suis gentil, Gérard. C'est pas qu'une ambiance. Poupon ? Oui, je t'ai déjà répondu, je te dis malade nocturne. Alors, point noir ? Moi, je pense pas que ça peut devenir une maladie, par contre, je pense que ça peut devenir un remède. Ouais. Euh, Marmite ? Non, mais Olivier, c'est pas la peine de t'amuser, parce que tout à l'heure, je vais terminer à deux heures et demie, moi, ça va aller vite. Oh non, oh non, oh non, oh non, oh non. Marmite ? Oui ? Oh non, Gérard. Marmite ? Oh non, oh non. Non, Gérard. Ah, s'il vous plaît, derrière, vous laissez... Vous laissez finir les questions, là. Marmite ? Moi, ça me rend malade quand je me fais parceler, ouais. Bon, ben, toi, c'est... C'est carrément... Ça, c'est carrément une maladie. C'est une maladie pour toi. Ouais, ben, toi, si t'en as pas, t'es malade. Ben, carrément, ouais. Donc, plus t'en as, plus t'en veux. Ben, plus j'en ai, plus j'en ai, plus j'en veux, ouais. Ouais, mais plus t'en... Si t'en as pas, ça devient grave. C'est comme de la drogue. Ouais, c'est une drogue, ouais. Ouais, ben... Tu la roules, tu la fumes ? Mais attendez, attendez, il y a une question hier, c'est... Oui, c'est une question, Gérard. Alors, attends. Est-ce que lorsque l'on pense à toi, Gérard, c'est du harcèlement mental ? C'est clair. Ça, ça dépend des nanas, et c'est leur problème. C'est leur problème, c'est pas le mien, et c'est tout. Donc, je pose la huitième. Pourquoi que les gens ont peur de parler de ce problème, et on va s'écouter les poules qui puent avec... J'ai un oeuf pourri dans le trou d'épaisse, et vous pouvez toujours nous appeler au 0803 085000 et toujours le Minitel et à tout de suite. ... des débats du jeudi avec Gérard, donc il est 2h31 et on vient de s'écouter les poules qui puent avec... J'ai un oeuf pourri dans le trou d'épaisse et on va récupérer Marmite. Marmite ! Allô ? Allô ? Marmite ! Allô ? Tu me les calmes, j'irai ! Allô ? Allô ? Manu ? On n'entend plus rien. On n'entend plus rien. Vous m'entendez, moi, ou pas ? Allô ? Allô ? Allô ? Est-ce que vous m'entendez, moi ? Gérard, essaye de parler pour voir s'il t'entend. Il y avait un problème de micro. Marmite ! Allô ? J'entends rien. Allô, couscous ? Allô ? Allô ? Il est parti, Gérard ? Attends, essaye. Marmite ! Il a quitté le studio, Gérard ? Bon, Olivier, tu me fais quoi, là ? Je fais rien. Et voilà, c'est pour moi. Allô, Popan ? Ça marche, là ? Marmite ! Ah, ben voilà, ça y est, ça marche. Marmite ! Ah, salut ! Marmite, rebonsoir. T'étais où ? J'étais là, mais c'est Olivier qui s'est mis à faire le con. C'est pas grave. Marmite, donc, tu es toujours là ? Toujours là, ouais. Point noir ? Ouais, je suis là. Toujours là. Allô, Popan ? Ouais, je suis là, ouais. Toujours là. Couscous ? Toujours, fidèle. Toujours là. Mathieu ? Encore là. Toujours là. Et Castoy ? Salut, Gégé. Salut, Castoy. Donc, toujours là. Donc, huitième question. Pourquoi les gens ont peur de parler de ce problème ? Mais de quel problème ? On a... Il y a Dark Vader qui vient d'arriver. Oh là là ! Dark Vader. Oh, la force de Dieu ! J'ai rien fait, moi. Petit Jedi. J'ai rien fait, moi, Gérard. C'est quoi ? C'est quoi, cette histoire de merde ? Bah, allez, on continue, on continue. Donc, Castoy ? Oui, oui, oui, je suis là. Castoy ? Oui, Gérard. Donc, pour toi ? Bah, écoute, je sais pas du tout, moi. Personnellement, c'est pas un problème pour moi d'en parler. Donc, si des gens n'en parlent pas, c'est que ça les gêne, je sais pas, j'imagine. Allô ? Allô ? Donc, Mathieu ? Mathieu ? Je vais calmer tout le monde. Je vais calmer tout le monde, Gérard, c'est pour ça, excuse-moi. Il est en train de me calmer. Direct, il me calme. Bon, alors, Mathieu, pourquoi ? Bah, ouais, moi, je pense que c'est dur d'en parler, de harcèlement sexuel, quand même. Parce que si on a peur de se faire harceler, on a automatiquement peur d'en parler. Ouais, bah, ça, c'est un problème qui se passe à l'arrêt de cause, c'est que personne veut en parler. Ouais, parce que les gens ont peur. Non, moi, j'en parle. Non, mais faut en parler, parce que sinon... Attendez, attendez, attendez. Attendez, parce que les gens de l'IRC n'ont pas entendu la question. Alors, pourquoi les gens ont peur de parler de ce problème ? Ah, ok, merci. Gérard, c'est Couscous, je peux répondre ? Ouais, Couscous. Bah, moi, j'en parle pas, parce que si j'en parle, si tu parles d'harcèlement sexuel, tu te fais forcément harceler sexuellement. Donc, j'en parle pas. Non, mais je vois pas, mais si... Bon, bah, toi, si tu te fais harceler sexuellement... Mais si j'en parle à une personne, imaginons, j'en parle à Bébert et Rachida, ils vont m'harceler sexuellement. Bah, non, si tu leur en parles, que t'as déjà eu des problèmes comme ça... Ah, bah, ça se voit que tu les connais pas, hein. Ah, non, mais... Mais ça, je connais pas tes problèmes, moi. Euh, Poupon ? Bah, écoute, les gens ont peur d'en parler, parce que c'est dangereux, c'est une maladie, et... Bah, y'a des médecins qui font une série, des psychologues, des harceleurs sexuels, des marabouts, tout ça. Non, non, mais attends, là, Poupon, non, mais non, y'a d'autres personnes, bon, d'accord, tu peux aller... C'est une peur, c'est une peur. Non, mais si la personne a peur d'aller en parler à un psychologue ou autre, ça, c'est son problème. Non, mais si c'est une peur, c'est une phobie, c'est un zombie... C'est sexuel, donc forcément, tu vas voir un sexologue. Ah, tiens, y'a une question, Colgate, alors là, elle commence à s'amuser. Gérard, t'es déjà été harcelé dans un couscoussier par les merguez, alors après, t'as Gérard, t'es déjà harcelé... Allô ? Allô ? Allô ? Allô ? Allô, Gérard ? Allô, Gérard ? J'ai rien fait. Allô, j'entends ? Est-ce qu'on m'entend, moi ? Allô ? Allô, le micro, là, celui-là, il marche pas. Non, non, mais si ! Celui-là, il marche pas. Mais forcément, c'est toi. Ben voilà, ben voilà, attends. Ça va marcher, là. Attendez, attendez, les auditeurs, ça va marcher, ça va marcher. Vas-y, parle, Gérard. Allô ? Allô ? Allô ? Vous l'entendez, là, vous l'entendez, Gérard. Ça marche. Ça marche ! Gérard, t'as vu, toi ? Si, vous l'entendez. Ça marche. Non, j'ai pas les CD, arrête ! Allô, j'ai pas les CD ! J'ai pas les CD, j'ai connu ! Voilà, ça y est, ça marche. Parle dans ton micro, Gérard, parle dans ton micro. Vous l'entendez, là. Là, il va vous parler, il va vous parler, vous l'entendez, c'est sûr. C'est toi qui arrête pas de déconner, Gérard ! J'ai rien fait ! On t'entend, même. Hein ? On t'entend, Gégé. Ouais, y'a pas de problème, y'a pas de problème ! Eh, vous l'entendez, vous l'entendez, vous l'entendez. Non, tout le monde ! Oui, je suis là. Tout le monde ? Oui, oui, oui, oui. Ben, toi ? Ben, tu peux m'éviter la question, parce qu'avec tout ce bazar, avec les problèmes techniques, là, ça devient dur, hein. Pourquoi que les gens ont peur de parler de ce problème ? Ben, ce que je te disais, si t'as peur, t'as une phobie, ok ? Ah, ben, ouais, t'avais déjà répondu quand je t'avais dit... C'est sexuel, voilà, c'est bon. Ok. Point noir. Ben, moi, j'ai pas peur d'en parler, au contraire, c'est Mexique. Ben... Non, mais attends... Ouais, je pense, parce qu'à ton âge, à ton âge, je pense que j'irais voir quelqu'un pour en parler quand même, hein. Non, je préfère pas en parler, je préfère le faire. Oh, là, non, d'accord. N'importe quoi. Marmite. Ouais, ben, moi aussi, j'en parle, hein, je m'en fous, hein. Oh, les cochons... Ouais, mais t'en parles dans ton entourage. Ouais, moi, j'en parle à tout le monde, t'as vu, là, je t'ai appelée pour t'en parler, hein. Non, mais attends, c'est pas moi qui t'ai appelée, c'est au standard qu'on t'a appelée. Non, c'est moi qui t'ai appelée. Ouais, mais après, le standard t'a rappelée pour participer au débat. On l'a harcelée. On l'a harcelée. Ils m'ont un peu harcelée sur la scène. Non, je l'ai téléphoné uniquement. Hum-hum. Tu le disais, Couscous ? Je disais qu'ils l'ont harcelée téléphoniquement. Non, mais ça... Ouais, mais c'est si bon. On l'a bien fait, là, un peu ! Moi, je voulais juste rajouter que vous avez quand même harcelé le boss, quoi. Ouais. Ouais, on a harcelé le boss depuis le radio. Je vais te dire que le boss, on a été à deux doigts de l'enlever, de le torturer, c'est clair. C'est clair, c'est clair, quand même. Ça, il sévire, quand même. Moi, je l'ai harcelée à coups de saucisse dans le derrière. Il a bien fait de lâcher... Oh, non ! Bon, on reprend pour ton débat. Donc, neuvième question. Devrais-t-on créer une école sur le harcèlement sexuel ? Oh, oui ! On va demander ça, tiens, point noir, parce qu'à 17 ans... Point noir, j'ai t'éclaté, ouais. Ah, ouais, non, mais moi, je suis tout à fait d'accord pour cette initiative, ouais. Ah, ouais, il n'y a aucun problème. Bah, déjà, comme je te disais tout à l'heure, on fait des trucs par correspondance. Mais alors, si on ouvre une école, ah, ouais, moi, j'arrête la boulangerie et je vais dedans, quoi, c'est clair. Moi aussi, hein. Moi, je fais prof. Qui, qui, qui, qui ? J'en fais prof, j'harcèle tout le monde, hein. Moi, je veux bien des cours particuliers, à ce moment-là. Bah, il n'y a pas de problème. Ah, moi aussi, hein. Non, mais attendez, attendez, attendez, attendez, attendez. Alors, Marmite, toi, t'es d'accord avec point noir, poupon ? Bah, moi, je dis qu'effectivement, il faut des pédagogues pour faire des écoles, c'est clair. Des pédologues. Non, des pédagogues. Des pédagogues. Des pédologues. Mais, d'accord, allez-y, allez-y. Tu vas du tube. Jeune Skywalker. Ah, tu vois ? Je vais aller voir la Blancie. Couscous. Oui, Gérard. Ouais, moi, je pense que ça serait bien, mais il faudrait que la professeure, elle soit bien roulée, hein. Ouais, mais ça, c'est... Ah, parce que sinon, il n'y a pas moyen d'apprendre, hein. Toi, tu ne peux pas trouver des propres... Donc, elle écarte bien les cuisses, pour qu'on va bien la foufler, quoi. Non, bah, t'es vraiment un cochon, toi. Ouais, mais il faudrait qu'il n'y ait pas que de la théorie, il faudrait qu'il y ait de la pratique aussi. Mathieu ? Bah, évidemment. Oui, alors moi, je pense que ça serait une bonne initiative de faire une école sur le harcèlement. Puisque, comme ça, je pourrais être professeur et je pourrais faire mes mises avec des... D'accord, euh... Casse-toi. Bah, écoute, moi, Gérard, je suis tout à fait d'accord. Elle s'est cassée. Pourquoi tu l'as dit, casse-toi ? Je ne sais pas, il l'a pris pour lui, quoi. Tu lui dis, casse-toi. Je vais le rappeler, je crois que c'est Couscous, en plus. Couscous, il l'a mal... Non, il n'est plus là. Il l'a mal pris, ce que tu lui as dit. Bon, bah, il y a une place, hein. Bon, donc, moi, je peux vous dire une chose. Moi, je peux vous dire une chose. Des écoles, je ne voudrais pas que ça existe. Bah, pourquoi ? Ouais, non, pas avec les profs, hein. Eh, l'école, c'est bien, quand même. Ouais, non, mais peut-être... Attends, je vais te dire, s'il y avait des cours de quéquette à l'école, les lycéens, ils ne seraient pas en grève, hein. Tu m'étonnes, tu m'étonnes. Non, mais attends, ça... Non, non, ça, là-dessus, c'est... Attends, ils feraient des heures supplémentaires en permanence et tout, tout ce que tu veux. Il y a une question, IRC... Il y a une bonne question, IRC, de Kevin Klein. Gérard, comment reconnaître un harceleur potentiel ? Voilà, euh... C'est trop compliqué pour lui. C'est pas les harceleurs potentiels, en plus, c'est les harceleurs sexuels. Tu dis n'importe quoi, Rigo. Non, mais même, de toute manière, là-dessus, je peux rien dire. Non. Alors, dernière question. Déjà ? Eh oui, bah... Attends, il reste encore 20 minutes. Bah non, bah... Après, on verra... Moi, j'ai plein de questions sur l'IRC, si tu veux, Gérard. Est-ce que c'est du harcèlement sexuel si on fait l'amour ? Ouais. Alors, Marmite ? Euh... Ouais. Bon, toi... De toute manière, toi, t'es... Ouais, ouais, moi, j'aime tout, quoi. Toi, t'es carrément branché... Toi, t'es carrément branché à fond, là-dedans, hein. Bah, à fond, ouais. Ah, ça y est, c'est lui qui applaudit. Donc, euh... Pour toi, donc, euh... Ça te dérange pas ? Oh, non, non, non, rien ne me dérange. Toi, Noir ? Oh, bah, moi, tant qu'il y a de la vie, tout va bien. Oh, bah, toi, à 17 ans... Oh, non, non, non, alors... À quel âge que t'as perdu ta... Ta petite flamme ? À quel âge que t'as été... À quel âge que t'as commencé tes relations ? À 14 ans. Oh. Allez-y, j'espère que vous serez demain à la locaux, hein. À 14 ans ? 14 ans ? Ouais, 14 ans. Oh ! On jette rien, tu vois. On jette rien. J'ai rien fait, mais... 14 ans que je te balance un micro ! Je suis sûre que je t'en apprendrai des trucs. Olive ? OK, OK. J'ai rien fait. Non, presque pas. Euh, Poupon ? Ouais, bah, écoute, moi, je dis, dans ces cas-là, on sait à quoi on s'expose. On peut perdre sa place de président, hein. Non, ça, je crois pas. Non, mais ça... On va pas parler de vie privée, mais tu sais très bien de quoi on parle. Tu crois que Chirac... Bah, je veux dire, avec la gueule de Bernadette, moi, je comprendrais qu'il a garcelé ailleurs. Mathieu ? Mathieu ? Il y a quelqu'un qui applaudit, ça me gêne. Ça commence à me prendre... Olivier, fais gaffe, parce que tout à l'heure, je vais te balancer quelque chose, toi. Tu vas comprendre. Je vais te balancer la douleur. Chirac, excusez-moi, on retrouve Couscous. Ouais, bonsoir, Chirac. Il l'avait mal pris, mal pris, quand tu lui as dit, casse-toi, mais je lui ai expliqué que c'était pas lui. OK. Voilà, Chirac, en attendant... Alors, attends, je vais retrouver, j'arrive plus à savoir où c'est. C'est Disco qui dit, si Adam avait pas harcelé Ève, on serait pas là. Exact. Ouais, bah, ça, peut-être. Donc... Ah, bah non, sûrement. Bah, oui. Mathieu, pour toi ? Donc, oui, je pense que le harcèlement sexuel, c'est faire l'amour, c'est sûr. Ouais, mais casse-toi. Moi, je crois pas qu'il y ait de l'harcèlement là-dedans, parce qu'étant donné que je suis une entente entre les deux, moi, je crois pas, non, franchement. Et Couscous ? J'ai pas entendu, parce que tu viens de me rappeler. Alors, est-ce que c'est du harcèlement sexuel si on fait l'amour ? Ah, bah, ça dépend comment tu le prends et ça dépend comment tu le fais, par derrière. Comment tu l'apprends ? En sodomie, moi, j'aime bien. Non, mais ça, c'est... Moi, je crois pas que c'est du harcèlement sexuel. Du moment que tu fais l'amour, il n'y a pas de problème. Ouais, mais... Ah, il y a un mec qui est malade. On coule, les mecs, on coule. Je suis en évasion dans mes chiottes. Par contre, Gérard, moi, j'ai une question pour toi. Est-ce que tu crois que quand on drague une fille, on peut considérer ça comme du harcèlement ? Ouais. Non, non, non, non. Parce qu'au début, t'insistes. Si elle veut pas, t'insistes. Ouais, ça, s'il te plaît. Non, mais je peux dire que t'as pas besoin d'insister. Ouais, mais toi, c'est parce que t'es un sex-symbole que t'as pas besoin d'insister. Il pense à tous les Tony, Arnett et Goldo comme William Graham. Non, mais ça, chacun... Attendez, laissez parler Gérard. Non, mais chacun voit midi à sa... Chacun voit midi quoi ? Chacun voit midi à sa porte et c'est tout. Ça, je vois pas du tout le rapport. Si la nana veut pas sortir avec toi, elle sortira pas avec toi, c'est tout. Donc... Confusion ! Bravo. Bravo. Conclusion, Marmite ? Ben, conclusion, vive la bite. Mais pas déjà, attends, il reste un quart d'heure. Non, mais c'est pas grave, après, on fait un mini-débat improvisé. Il reste un quart d'heure, j'ai inventé une question, improvise. Un débat sur les portes clés, après, ça va être génial. Allez, on... Non, non ! Une question sur l'IRC, une question sur l'IRC. On fait con... On est bien ! Tu veux du tube ? Oh, oh, oh ! On dit... Alors, à la demande des auditeurs, on a une petite question IRC de Compi Musique. 8ème com, c'est un peu long comme nom. Le harcèlement donne-t-il la chiasse ? Si oui, de quel côté ? Du côté droit. Ouais, c'est clair. De la fête droite. Non, je vois pas du tout le rapport. C'est connu, pour vrai. C'est connu, Gérard. Non, on fait la conclusion sur... Alors, attends, attends, parce qu'il y a une question. Vas-y, Gérard. Vas-y, excuse-moi. Oh, bon, ben... Est-ce que, par exemple, la pilule Viagra incite au harcèlement ? Bon, Manu, ta question retourne en standard. Tu veux du tube ? Pas forcément, Manu, parce que moi, je prends pas de Viagra et j'harcèle, quoi. Tu vois, c'est une bonne question. Non, mais ça, c'est le débat de la semaine prochaine. On est bien, t'as-tu un ? Eh, dégage, dégage ! Je veux plus te voir, là ! Ah, j'ai pas fait exprès. Bon, en attendant, j'ai Davy1, Davy1, sur l'IRC, qui est allé voir la définition du harcèlement sexuel dans le dictionnaire. Ouais, quand même ! Et on y apprend que le petit Robert a harcelé la rousse. Ah, ah, ah ! Donc, conclusion marmite, on fait conclusion sur ce débat et c'est terminé, après. Ouais, ben, vive la vie. Et puis, prends garde le sourire, Gérard. Ouais, mais... C'est important, là. Il y a certains trucs... Demain, je viens te harceler dans les chiottes de la loco. Ouais, ben, t'as raison. Tu verras comment tu vas être aussi avec moi, demain. Ben, d'accord. À demain. Ouais, ben, on verra. Dans les toilettes, hein. Point noir. Oui, oui. Ben, écoute-moi, Gérard, honnêtement, t'es devenu ma proie. Je vais t'harceler, ça va être puissant, quoi. Tu suis ? Je dis, ça va être puissant, parce que tu m'as donné l'envie de t'harceler. Et franchement, tu... Ouais, non, mais attends, moi, je sors pas avec des mineurs, hein. Tu vas subir. Tu vas subir ce que jamais t'as subi, Gérard. Ouais, ben, moi, je sors pas... Tu vas pouvoir définir le terme harcèlement. Ouais, ben, moi, je ne sors pas... Ah, les mineurs ! D'ici, tu me sauteras, Gérard. C'est ça, ben, alors, je préfère me mettre une capote avant d'attraper des morpions avec toi. C'est plutôt l'inverse, je crois. Poupon ! Il sort pas avec des mineurs, il sort que avec des horreurs. Alors, Poupon, ta conclusion, je viens de l'entendre. Terminé pour toi. Mathieu ? Ouais, je me suis mis à skier tranquille, donc, Gérard, tes débats, bof. Et puis, mais par contre, moi aussi, je vais t'harceler, je vais te faire ta fête demain, tu vas voir. Ouais, ben, on verra. Je te dis bon. Ouais, ben, surtout de Toulouse, t'as raison. Tu crois que... Attends, tu crois quoi ? Moi, j'ai une voiture, hein. Moi, j'ai une voiture, mon pote. Casse-toi. Ah, ben, écoute, moi, Gérard, ton débat, il m'a vachement chauffé. Ouais, casse-toi, mais casse-toi. Bon. Bon, ouais, tu me vires la chialose, là. Ouais, mais bon, tu l'as déçu, quoi. Et alors, j'en ai rien à foutre. Casse-toi. Ouais, Gégé. Ben, écoute, Gérard, je viens de te le dire, je t'ai dit, ton débat, il était vachement chaud, et maintenant, j'ai vachement chaude. Ah, ben, c'est bien. Ouais, Gégé. Couscous. Couscous. Oui. Il y a de la soule dans les oreilles. Couscous. Ouais, il y a pas de problème. Moi, je dis que le harcèlement sexuel, c'est pas bien, mais fais quand même gaffe à ton derrière. Il y a un accident si vite arrivé, Gérard. Non, mais t'inquiète pas, j'ai mon cadre du corps. Moi, je vais te le prendre le derrière comme il faut, tu vas voir. J'ai rien fait. Olivier, tu m'éteins ce micro vite fait. Tu m'éteins ça vite fait. Ça y est, ça y est. C'est toi qui joue. C'est toi qui joue depuis tout à l'heure. M'éteins ça. Bon, ça va, Simon, les auditeurs ? Ouais, ça va, il n'y a pas de problème. M'éteins, sinon, tu vas le payer dix-cinq. C'est un petit débat. Tu es du tube. Tu es du proche. C'est bon, Gérard ? Donc, moi, la conclusion sur le harcèlement sexuel, c'est la dernière fois, Olivier, que tu fais la pro. Oh non ! Non, mais je peux te le dire, c'est la dernière. C'est pas une conclusion. Déjà, tu m'as fait taper ton bordel, donc t'as gagné. Et voilà, je ne fais jamais rien, c'est toujours ce que j'arrive à faire. Non, non, là, tu viens d'appeler. Alors, t'éteins ça, parce que... Ok, ok, ok. Tu ne me jettes pas ce laser dans la figure. Ouais, mais c'est pas le tien, c'est à moi. Alors, ça te coûte dix-cinq. Ouais, mais ça peut lui faire mal aussi, quand même. Tu veux me jeter un laser dessus et tu veux me le faire payer. C'est un peu de pratique. Donc, si vous avez des questions à me poser, moi, je peux... Allez, chacun son tour, chacun son tour, une question. Alors, on va demander à Marmite. Vous avez encore dix minutes. Euh, même pas... Si, si, si, un quart d'heure, dix minutes. Non, non, non, non. Fais tourner, fais tourner. Marmite ! Ouais, attends, je réfléchis, là. Non, mais vous, il faut faire vite. Ouais, ouais, non, mais je réfléchis. Si un jour, tu travailles, est-ce que toi, si tu travailles, si t'étais patron, tu harcelerais tes secrétaires ? Non. Oh. Pourquoi ? Je t'ai vu harceler des fois des filles ici. Oh, mytho, Gérard. Non, mais attends, toi, Olivier, tu t'écrases, tu pourrais mieux t'occuper de ton boulot. Quand Sandi n'est pas là... Mais attends, attends. J'ai vu harceler des mecs. Eh, tu veux qu'on n'en passe des cendres ? Des chiens, mais... T'es vraiment un bâtard, hein. Oh, là, là, là, là, là. T'es vraiment un bâtard, quoi, de dire des conneries comme ça. Là, t'es en train de le... Le harceler, verbalement. Tu dégages. Allez, hop. Tu vires. On finit. Tu vires. Non, non, non, tu vires. Je veux plus te voir dans les studios, toi, maintenant. Bonne nuit. Hop, casse-toi. On en parle tout à l'heure. Non, non, non, non. Ah, OK. Gérard, sur IRC, Gérard, sur IRC, il y a Axel Durot qui dit conclusion quand tu passes à mon bureau. Moi, qui veux. Ça m'étonnerait que ça soit le vrai. On verra demain. Un avertissement. On verra demain. On voit noir. Ouais, ben, moi, j'ai pas de questions spéciales, mais je voulais simplement te dire que te retrouve jamais tout seul parce que sinon, je vais te sauter dessus, quoi. Ouais, ben, attends. Déjà, à 17 ans, faudrait que tu sais que tu m'attrapes. Ouais, il faudrait... Je cours pas super vite, Gérard. Elle peut te rattraper, hein. Ouais, non, mais attends. Je pars du principe que quand on veut quelque chose, on l'a. Ouais. Tu crois que je vais quitter Sandy pour toi ? Ah, non, absolument pas. Tu peux la garder. Moi, ça me dérange pas. Je préfère être la maîtresse. Ah, non, ben, alors là, je vais te dire une chose. Tu te mets le doigt bien profond, que je pense. Tu te quittes pas, je basse mon flip et je le mets. Ouais, ben... La cochonne, la cochonne. T'es vraiment une allumeuse, toi. Salope. Ah, la salope. Je sais pas, je voulais pas dire ce mot. Et tu l'as dit pourtant. Non, non, c'est pas moi qui te l'ai dit. Gérard, est-ce que je peux me faire un fist ? Qui ? Mermitte. Moi, je te fais un foot, hein. Non, Mathieu. Ouais, ben, moi, je voudrais savoir quand est-ce que tu vas t'acheter un rasoir parce que là, t'as vraiment une tête de pignouf, en fait. Ben, quand j'en ai les moyens. Ben, je t'en amènerai un de ces quatre, alors. D'accord, ben, tu l'envoies à la radio. Pas de problème, pas de problème. Et casse-toi. Mais, Gérard, j'ai pas de questions pour toi, désolée, mais... Tu veux du tube ? Arrête, arrête, arrête, arrête. Mais y a un gamin ou quoi ? Qui c'est qui vient avec un niard ? Qui c'est qui a un gamin, Manu ? Je sais pas, moi, c'était pas... Non, c'était pas prévu, mais tu prenais mieux de le prévoir. Ben, tu sais pas, moi, c'était pas... Tu vois, quand c'est du harcèlement, ça finit par faire des gosses, hein, toi. Ben, voilà. Ça fait rire les gamins, le harcèlement. Non, mais tu es le premier de prévoir. Ah ! Ça, c'est la génération, le harcèlement. T'as été le premier de prévoir. Ben, le gamin, il rigole. Tu l'amuses, tu l'amuses. Non, mais attends, parce que... Casse-toi, j'ai pas compris sa question. Et couscous, c'est à proposer. Et poupons non plus. Quoi ? Et poupons non plus. Si, tu l'as déjà posé, toi, ta question. Non, c'était Mathieu. Euh, casse-toi. Ben, donc, Gérard, ça va être difficile de comprendre ma question, étant donné que j'en ai pas posé. Oh, pardon. Olivier ! Je l'ai coupé. Arrête ! J'ai coupé, c'est ça, exprès. Toi, je sens qu'il y a une ramette de papier, là. Je pense qu'avant la fin de la soirée, elle va voler dans ta tranche. Cool, cool. Dans ta tranche. Alors, casse-toi, donc. T'as pas de questions ? Non, j'ai toujours pas de questions. Eh ben, t'inquiètes pas. Ben, casse-toi. Ben, voilà. Tu peux... Moi, j'en ai une. Est-ce que, Sandi, tu la harcèles sexuellement ? Alors, non, c'est qu'elle a... Ah, et vice-versa. On me dit sur IRC. Tu fais 849, on va lui demander qu'un réagisse. Ok, ok, ok. Donc, Couscous... 849 kilos ? Oh, là, là. C'est gentil, ça, hein. Non, mais continue ton débat. Attends, j'attends que Couscous pose la question. Et tu éteins ce doublasson ! Oh, Chewbacca. Oh, oh, oh ! Éteins ça, là. Quoi ? Éteins, éteins. Tu m'excites, Gérard, quand tu cries. Elle mouille, elle mouille. Je suis trompée, hein. Eh ben, eh ben, voilà, Gérard. Gérard, quand tu veux, hein. Gérard, elle est là, ta femme. Donc, la question, c'est quoi ? Est-ce que Gérard harcèle sexuellement et vice-versa ? D'accord. Alors... Ah, ben, raconte-nous. Oui, effectivement, il harcèle, mais c'est uniquement pour lui ramener le café le matin. Oh, là, là ! Chotte comme la moelle. Je crois que, là, si je ramène pas le café le matin, là, il me fait une crise, hein. Ah, ouais. Oui, moi, j'étais poupon. Ouais, poupon, oui. Ouais, je voulais dire, vous parlez beaucoup du harcèlement sexuel, mais, effectivement, on parle pas du harcèlement ménager ou du harcèlement culinaire. Merci. Où l'homme force sa copine à la cuisine et le ménage. Ça, c'est du harcèlement ménager et culinaire. C'est un peu macho, Gérard, en fait. Ah, Gérard, t'es couscous. Ouais, couscous. Pour finir... Est-ce que tu penses que le harcèlement sexuel est en principe ? Hein ? Principe ? Par rapport au site. Si tu parles de la syntaxe des palmypèdes dans la pédagogie instinctive, c'est sûr. Non, mais c'est pas con, ça. C'est pas con, Gérard. Qu'est-ce que t'en penses ? Personnellement, rien du tout. Ouais, en fait, tout est lié, quoi. Pourquoi ? Ça serait pas entre un site par rapport au site du texte. Non, si tu reviens au concept abstrait de la prévision... Laissez parler un peu Gérard, aussi. Non, non, mais moi, de toute manière, sur la question, je peux pas répondre. Non, mais c'est du con. Ça dépend de quelle façon t'interprètes la réponse. Voilà. Si uniquement tu vas à la lignée 1, c'est pas possible. Non, mais là, on va se quitter. On va se quitter, là-dessus. 6 minutes, encore. Non, non, 6 minutes. Non, mais c'est vrai, tu as 10 minutes. Oh, 6 minutes ? Jusqu'au bout, ton boulot. Gérard, c'est Bousco, je peux te poser une question ? Vas-y. Est-ce que t'as déjà vu des personnes faire du harcèlement sécuel ? Euh, jusqu'à maintenant, non, pas encore. Eh ben, tu vas bientôt pouvoir le voir. Mais attends, toi, à 17 ans, tu vas pas me prendre la tête. Elle va te prendre le cul. Non, mais attends, toi, à 17 ans, déjà, t'es pas sûr de rentrer à la loco. À mon avis, t'es une grosse allumeuse. Toi, t'es une... Ouais, Gérard, encore mieux. Et je préfère maintenant... T'es une grosse pétasse, aussi, hein. Non, mais... Elle est jalouse. Oui, elle est jalouse, et elle a très bien... C'est pas la question d'être jalouse, c'est la question que ça se fait pas. Quand t'as un mec, tu vas pas aller voir ailleurs, tu vas pas allumer les autres mecs pour le plaisir. Attends, je vais te quitter, j'ai un mec. Non, non, mais attends, eh. Attends, eh, euh... Elle, elle va allumer Gégé. Eh, point noir, point noir. Pourquoi pas, pourquoi pas. Eh, point noir. Bon, l'anniversaire. Eh, point noir, quand même, tu pourrais te faire plaisir, j'ai... Eh, point noir, déjà, à 17 ans, t'es pas sûr de rentrer à la loco, déjà ? Je la ferai en... Je peux t'attendre à la sortie. Ouais, bah, là, là, tu sauras même pas comment que je serai allumé. Ouais, mais Gérard, j'ai pris selon son nom, et je l'ai mis plus un sur le liste. Ouais, bah, dans ce qu'elle a... Je vais la faire rentrer. Attends, eh, tiens, point noir. Je vais la faire rentrer, moi, je vais la faire rentrer. T'as qu'à allumer le bouboulot standard. Elle veut pas de moi, elle veut de toi. Non, mais moi, j'en veux pas, moi, j'ai appris. Alors, dans ce qu'elle a, tu vois, point noir, ce que tu viens de dire, eh ben, tu vas gâcher l'anniversaire à Max, et que demain, je reste chez moi. Voilà, bravo, point noir. Ah, bah, pour une fois, j'étais décidée d'y aller. Bah, ouais, mais tu diras merci à point noir. Gérard, c'est pas à cause d'une fille de 17 ans que tu vas pas venir dans l'anniversaire. Moi, je réponds pas à des questions d'une petite... Mais t'es une vraie gonzesse, toi, à 39 ans, tu perds les pédales pour une fille de 17 ans. 17 ans, tu dis, 17 ans, c'est une anniveuse. Elle rentrera pas, elle rentrera pas. Mais c'est quoi, ce délire, là ? Gérard, si ça peut te rassurer, je travaille le week-end. Bah, ouais, c'est ça, t'as... Gérard, tu vas venir vendredi à la loco, puis c'est tout. Attends, tu vas pas discuter, attends, ça va. On a besoin de toi, Gégé, on t'aime. DJ sur N. Ouais, un couscous. Oui. Bah, toi, alors, qu'est-ce que t'as de spécial à poser comme question ? Parce qu'à force... Non, ça suffit, derrière, là. Moi, j'en ai une, Gérard. Bah, moi, je prends un Mars et ça repart. Ok, bah, ça, c'est bien comme pub. Ouais, qui ? C'est moi, deux trucs, c'est... Qui, qui, qui, qui ? Marmite ! Non, c'est Marmite, en premier. Est-ce que tu crois que le thème du... Arrête, arrête. Bon, eh, tu me laisses Marmite pour un instant, tu me coupes les autres parce qu'ils me font chier. Eh, bah, non, ouais. Est-ce que tu crois que le thème du... Oh ! Ah, non ! Eh ! C'est marmite ! Eh bah, ouais, ça y est, j'enlève les autres ! Putain, il m'a mis une claque, j'ai réussi. Eh, ouais, eh ! Tu vois, tu ne t'y attendais pas. Ah, ça, c'est éventuellement bien. Voilà, je réponds. Alors, Marmite ! Eh, Gérard ! Gérard, est-ce que tu crois que le thème du harcèlement... Oh, les mecs ! ...pourrait être porté au cinéma ? Gérard, tu pourrais te retenir. Marmite ! Gérard, est-ce que tu crois que le thème du harcèlement pourrait être porté au cinéma ? Bah, de toute manière, ça se voit dans les films. Harcèlement sexuel. T'as vu des films de harcèlement ? Quand tu vois Brigitte Laé ou... C'est un film de boules, ça. Ouais, mais même, quand tu vois les trucs sur la mode, fais-moi confiance. Les mecs, ils se rincent bien l'œil quand ils préparent les nanas pour défiler. C'est sifflé. Est-ce que t'as vu le film Le harcèlement, avec Demi Moore ? Alors, le film Harcèlement avec Demi Moore... Demi Moore ! Oui, c'est vrai que... Bien sûr, c'est... Avec Roger Moore. Avec Demi Moore. Avec Roger Moore. De toute manière, tu l'as, la maison. C'est pas... Oh ! C'est pas harcèlement, c'est striptease. C'est striptease. Il est encore sifflé, ou quoi ? Non, je sais pas, je crois que c'est en haut, à l'accueil, ils font la toffe. Moi, j'ai vu un autre film d'harcèlement, ça s'appelait Ferme la porte, que j'ai écarté. Moi, j'ai vu un truc, c'est que maintenant, je vais vous laisser. Gérard, c'est Couscous, j'ai une question. Ouais, vas-y, la dernière. Est-ce que tu peux me reciter une fable de La Fontaine ? Le corbeau et le renard, voilà, terminé, point final à la ligne. Gégé, Gégé, 9.9, ça fait combien ? 9.9, 68. Non, arrêtez, c'est pas grave. Bon, Gégé, moi, je voulais te dire, la semaine prochaine, tu fais un débat sur le vieux gras, et je voudrais savoir où c'est qu'il faut le mettre, le vieux gras. Non, mais le vieux gras, c'est un truc que tu mets dans ta bouche et que... Il est là, le vieux gras. C'est sûr que c'est pas des suppos de vieux gras ? Bon, alors, conclusion vite faite, Gérard, pour le débat de ce soir, qui était bien, quand même, à part Olivier, qui a perturbé un petit peu la fin de ce débat, dommage. Donc, tu ne feras pas partie de l'équipe la semaine prochaine. Pour commencer. Donc, tu es renvoyé, tu ne fais plus partie de notre équipe le jeudi. Alors, la conclusion, Gérard, s'il te plaît, parce que tu t'écares toujours du débat. C'est toujours aussi mauvais. Ben non, conclusion, c'est dommage que ça soit terminé comme ça, sinon, je pense que c'était un bon débat, à part le premier, qui a foiré. Non, il était bien, il était bien. Il a quand même foiré, mais je pense que sur l'IRC... Ça a répondu présent, c'était parfait. La conclusion sur le harcèlement sexuel, parce que ce n'est pas ça ce qu'on attend de toi, c'est de parler du débat. Je pense que c'est un peu con ce qui arrive aux gens, maintenant, quand ils vont voir les patrons. Voilà. D'accord. Quand la nana va voir le patron, si t'es bien, si t'es canon, comme Marmite a dit, t'es prise. Si t'es pas bien, tu retournes chez Noir. C'est canon, Marmite, tu crois ? Je ne sais pas. Moi, je m'en fous, personnellement. Mais moi, je peux te dire que si t'es bien, t'es prise. Si t'es pas bien, ben... C'est simple, il va te dire, on te rappelle. Et puis, ta candidature, elle va, comme Manu vient de faire, hop, à la poubelle. Voilà, exactement. Donc, la semaine prochaine, les deux thèmes du débat. Donc, on va parler sur le Viagra, qui est sorti, là, depuis peu. Et bien sûr, le fameux débat, tu veux que je fasse à tout prix, mais... Je ne suis pas chaud, mais on va le faire quand même en deuxième partie du... En deuxième... Deuxième partie. Ça sera sur la politique. Et voilà. Donc, deux débats qui risquent d'être, quand même... Assez mouvementés. Assez mouvementés et assez chauds. Et on va se quitter avec... Avec Jazz. Jazz. C'est pas ça, c'est... Non, c'est pas ça. Non, c'est pas celui-là. Jazz sur Fun Radio. Je vous souhaite une bonne nuit. Demain, 22h, bien sûr. Et puis, on vous souhaite une bonne nuit avec Rousseau. Et puis, on se retrouve jeudi prochain. Et sinon, demain soir, avec nous, à la loco, pour fêter mon birthday. Ça sera en direct, d'ailleurs, de minuit. Nuit à 4h du matin. Bonne nuit. == Le débat sur la politique == === Contexte === === Les personnages === === Transcription === 21 ans de Mazamé Mérice Pédissoir Gérard Cassenoisette 19 ans de Niort Ça va bien ? Je sais pas, j'ai pas regardé ce matin Plotte-moi, 20 ans de Gap Bonsoir Gérard, bonsoir Yargla Bonsoir Tuiline, je te kiffe bébé Pas de message Les messages terminés, c'est bon pour toi Tony Et bonsoir, j'adore la politique 20 ans de Paris C'est tout, on va les rappeler Non, on va les rappeler, ils sont pas encore là Alors pourquoi vous me donnez des fiches Avec des noms qui sont pas là, des auditeurs Alors commencez pas à faire votre travail à moitié Au boulot Ce soir faut être sérieux, on va arrêter de déconner Parce que ça commence à déconner à plat tube Donc dans un instant, débat de Gérard Comme chaque jeudi bien sûr, sur la politique On récupère saucisson à l'ail qu'on a eu tout à l'heure Bon, rebonsoir Rebonsoir Gérard Cassenoisette, rebonsoir Rebonsoir Gérard Parle un tout petit peu Parle un tout petit peu Parle un tout petit peu Un petit peu plus fort s'il te plaît, merci Rebonsoir Gérard Plotte-moi 20 ans de gap Oui bonsoir, je tiens à préciser que je ne foutrai pas le bordel ce soir Ouais ben j'espère pour toi Et ceux qui ont des téléphones pourris, vous me le dites Attends, Manu il va gérer ça Parce qu'il y en a qui ont un téléphone vraiment pourri, on va le trouver Tony, rebonsoir 20 ans Paris Rebonsoir Gérard Tête bête Salut Gérard 20 ans de dîner Et gros string, 23 ans de bourge On peut écouter Fun Radio sur 96.7 J'ai oublié de préciser les fréquences Ouais c'est ça, salut Gérard Bonsoir, donc tête bête c'est Dîner en 103.5 Tête bête, pas tête bête Dîner en 103.5 Paris 101.9 Gap 93 FM New York 93.4 Mazamé 99.4 Celui qui s'amuse avec les sonnettes Son prier d'arrêter, merci d'avance C'est chez toi Gérard Non mais je ne suis pas chez moi pour l'instant Celui qui s'amuse avec les sonnettes Gare Alors première question Donc le premier débat c'est sur la politique J'ai oublié de préciser Ma passion Donc à quoi sert le vote en politique ? Anthony comme c'est ta passion, vas-y Le vote en politique, c'est pour élire les élus Et c'est très important Parce que c'est ceux qui nous représentent Au sommet de l'Etat Donc c'est eux qui nous disent Tu vas payer tant d'impôts chaque mois Et qui nous prennent un cinquième de notre salaire Et je trouve ça dégueulasse Il n'y a pas qu'un cinquième de notre salaire Et qui nous prennent quand même plus aussi Parce qu'il faut dire aussi qu'il y a la La CPG aussi Non non il y a un autre truc La CSG quand même il nous retire pas mal C'est un syndicat ça Grosse ring Grosse ring pour toi Moi je trouve que déjà Si tu veux le vote quelque part Ça fait une sortie quoi Une ou deux fois par an tu vas voter Tu votes deux fois dans Deux fois, tu as deux tours Faut préciser Ouais Non mais toi si tu votes deux fois C'est ton problème quoi Non mais il y a deux tours Faut bien préciser Si ça t'a plu tu peux y retourner Je suis d'accord Non mais attends Si au premier tour ça passe pas Tu re-votes une deuxième fois C'est ça que je veux te dire Si t'es pas éliminé au premier tour Non mais attends je sais Non mais attends Si j'y avais pas la première fois Je peux y aller la deuxième Si je loupe Bah oui mais même si t'as pas envie d'y aller Que t'es ailleurs De toute manière il y a une question là-dessus Je pense que c'est sûrement l'affaire T'es bête Ouais ça sert à rien Pourquoi ? Parce que c'est C'est triché quoi On sait déjà qui c'est qui va être élu Donc c'est pas la peine d'y aller Ah non mais attends Tu peux pas le savoir dès le premier Tu peux pas le savoir Mais non tu peux Non mais attends Attends tu peux pas le savoir Dès le départ Qui c'est qui va être élu au début Je crois qu'aux dernières élections Il y avait les résultats sur internet Deux jours avant Bah oui Ouais mais tu peux pas savoir Tout de suite au premier tour Qui c'est qui sera là Mais si j'arrange un peu Mais non mais non mais non Mais non tu connais rien Quoi j'y connais rien Attends tu as pas commencé Parce que sinon toi tu as Tu as retourné à dix noms Vite fait toi D'accord Hein Euh Plote moi Euh oui Non non non non non Pas de ça Non bah c'est son nom Il pourrait peut-être trouver D'autres noms Des noms comme ça Excuse-moi c'est pas ma faute Bon et qui c'est qui s'amuse Avec les réveils là Ça commence à me prendre la tête là Je me réveille tôt demain Bon alors Tu peux y aller Jean Ouais ouais vas-y Comme a dit monsieur Tony Là je crois que c'est vrai C'est les élus quoi Ils nous enculent un peu Et en plus Eh tu restes poli S'il te plaît quand même À 0h42 J'ai pas dit qu'ils nous enculaient J'ai dit que c'était des gros pédés Ouais bah tu restes poli Tony Parce que sinon Tu vas faire un stage au standard Toi aussi tout à l'heure Parce que si tu veux faire les débats Tu restes calme C'est ce qu'on avait bien précisé Quand t'étais venu Le jour de l'anniversaire à Max D'accord ? Bon anniversaire Ouais d'accord Alors donc pour toi Donc plot moi Donc on continue avec toi Avant de demander à Casse-Noisette Et Saucisson à l'Aïr Bah moi je crois que Effectivement c'est vrai quoi Ils nous Bon je vais pas dire enculer Parce qu'ils nous enculent pas Mais ils nous prennent vraiment de la thune Et c'est ça qui est vraiment chiant quoi Ça m'énerve moi C'est toi qui joues avec un réveil ? Moi ? Ouais Bah non mais tu déconnes J'ai pas de réveil Non mais qui c'est qui joue avec un réveil là ? Ça commence à m'énerver là Casse-Noisette Ouais bah moi je trouve que Ça sert à rien d'aller voter D'accord Question réaction Oui sur IRC Il y a Snul qui me dit Que le vote est une chose bien Surtout pour Miss T-shirt mouillée Non bah ça Peut-être pour lui C'est pas C'est pas Il y a pas deux tours là Il y a qu'un tour de poitrine Ah ok donc C'est pas valable Ouais mais il y a deux seins quand même Ouais mais c'est pas valable Ouais mais il y a qu'un tour Non mais ça y est c'est bon On va pas s'éterniser sur Les T-shirts mouillées Donc Casse-Noisette Moi j'aime bien toucher les parties Bon Anthony Tu t'écrases s'il te plaît un peu maintenant Casse-Noisette Ouais bah moi je trouve que Ça sert à rien d'aller voter quoi Mais pourquoi toi ? Pourquoi ? Bah c'est tout simple Tu te pointes là-bas Tu vas voter Tout est truqué Tout est déjà fait d'avance Non non non non non C'est pas Non non non non non Je te dis que non Non Non je te dis Mais si Gérard Non non mais attends Moi j'ai insisté à un dépouillement Dans la région où j'habite Et j'ai même insisté Au truc des bottes Et fais-moi confiance Que c'est pas truqué Je peux te le dire tout de suite Moi je te dis quelque chose Gérard C'est que je suis très bien placée Qui ? Qui ? Qui ? C'est Casse-Noisette Je suis très bien placée pour le savoir Je te dirai pas ce que je fais dans la vie Mais je suis très bien placée pour le savoir Bah peut-être pour toi Mais moi je te dis tout de suite Que c'est pas truqué C'est pas truqué d'entrer c'est tout Saucisson à l'ail Bah écoute moi je suis un peu d'accord Avec tout le monde Mais moi aussi je dis que c'est truqué quoi Parce que des fois tu vois les chiffres Ça monte, ça descend C'est n'importe quoi C'est vrai c'est n'importe quoi Mais non mais Je suis pas trop d'accord avec vous Parce que là Non non mais attendez Moi je vais donner quand même mon truc Moi je peux vous Non mais Je peux vous dire Je peux vous dire une chose Que c'est pas possible Que ça soit truqué d'entrer C'est impossible C'est contrôlé Donc ça peut pas être truqué tout de suite Pourquoi ? Dans quel sens ? Non non mais y'a pas de dans quel sens Pourquoi ? Moi je te dis que ça peut pas être truqué Oui Rigo Attendez attendez Oui y'a Y'a Goldberg sur IRC Qui demande c'est quoi un épouillage ? Un épouillage c'est de retirer le bulletin Non le sac d'une petite vieille Dans la rue Non non non Attends Fildar T'écrases s'il te plaît merci C'est quoi l'épouillage alors ? Non dépouillage Il a pas compris ce que j'ai voulu dire Donc dépouillage c'est de retirer le bulletin Qu'on a mis dans une enveloppe Et on le met de côté Et on fait des tailles Après on les compte pour savoir Qui passe Qui sera Élu ou pas Voilà c'est tout Ça sert à quoi de le mettre dans une enveloppe Si après ils nous le retirent ? Mais non mais on le retire Et après ils ont tout ce qu'ils veulent Ça sert à fabriquer des enveloppes Voilà Donc deuxième question La politique vous rend-elle amoureuse ? On va demander Bon celui qui avec son réveil t'arrête C'est clair et net Parce que je vais pas chercher Le midi à 14h tout à l'heure Je vais en virer Ouais Parce qu'il y a d'autres personnes Qui attendent pour participer C'est bien clair Ouais moi je voulais répondre à la question C'est que Moi je trouve Ton nom c'est quoi ? Tony Ouais bah précisez vos noms Quand vous voulez parler D'accord Ouais mais on le reconnait quand même Moi je voulais dire que Elisabeth Guigou Je la trouvais bonne Non mais attends T'arrêtes de donner des noms S'il te plaît Bah écoute c'est son nom C'est de la politique Ouais ouais C'est pas la peine de citer les noms Des personnes politiques Gérard Oui C'est Grosstring Moi je voulais Je voulais dire que Moi c'était Ségolène Royal Que je trouvais bonne Bon et Grosstring et Tony Soit que vous vous calmez Et vous arrêtez de donner des noms Pas de marge Soit que vous gerbez Ça va aller vite vous deux C'est pas la peine De sauter de ma gueule derrière Parce que sinon Vous allez virer tout de suite C'est clair et net Mais pourquoi ? Non y'a pas de pourquoi C'est ta question Excuse-nous Alors t'es bête Ouais Donc toi ? Ouais moi une fois J'ai rencontré un mec Dans l'isoloir On a fait crac crac machin Et tout Et ouais j'étais amoureuse Donc c'est bien C'est bien D'accord Plotte moi Non Mais si Non Si quand même merde Un peu Oh Oui bah j'y vais Ah non Plotte moi Bon Manu T'essaies de me choper Le réveil Et celui Qui a du monde chez lui Parce que ça m'énerve là Je crois qu'il attend des invités Ouais mais je sais pas qui c'est Ouais mais moi je veux pas le savoir Si il participe au débat S'il a des invités Il dégage Écoute qu'elle est rentrée Mais elle est dans la cuisine Et puis on en parle plus Bon alors Plotte moi Il y a peut-être un mec Qui est un policier Qui l'attend des gens Genre le marché Y'a pas moyen que tu rentres Ah ça finit Oui là avec les noms Ouais arrêtez c'est vrai Bon merde je peux parler un peu là Euh comme on dit les autres là Bon avec les guigous et tout ça Moi c'est la mère La mère Tiberie je crois D'accord Je pense que Plotte moi Et Tony Et Grossim Je crois que vous allez pas finir Le débat J'ai rien vu Non non mais vous donner des noms Comme ça C'est pas tellement bon Casse-noisette Ouais bah moi je pense pas Que la politique rend amoureuse Néanmoins Moi quand je vais voter Je vote pour celui Qui a apparemment La plus grosse queue quoi D'accord carrément Saucisson à l'ail Bah écoute moi Je vois pas vraiment le rapport Mais je vais quand même te répondre Bah moi ça me rend pas amoureuse C'est bien Ah bah c'est pas mal Moi je peux vous dire une chose Que moi non plus Ça me rend pas du tout amoureux Je croyais que t'étais amoureux De Jaco pourtant Non non non Moi ce que je voulais dire C'est que les membres Du parti communiste Ils sont pas très brandants Bon Tony Oui Encore une connerie comme ça Et tu t'en vas Pas de marque Tony Pas de marque Ok t'as pas besoin de citer les partis Pardon la prochaine fois Je dis que t'es initial Ah ouais Gérard j'ai une question Minitel de Merlot Du département 44 Qui demande Enfin il veut revenir A la question précédente Très rapidement Est-ce que Gérard Mets un timbre à l'enveloppe Quand il va voter Je vois pas du tout le rapport Je vois pas du tout le rapport Là dessus Bah si Comme tu prends une enveloppe Et que tu la déposes Est-ce que tu prends soin De mettre un timbre avant Pour qu'elle arrive bien A destination C'est quoi l'adresse aussi Non non non Attends déjà C'est pas ça A quoi sert le vote en politique C'est quand tu vas dans les urnes Tu t'amuses pas à voter Avec des timbres sur les enveloppes Ah d'accord Ça c'est une autre question C'est pas les mêmes enveloppes Voilà c'est pas du tout pareil Gérard Je peux te poser une question Je voudrais savoir Si des fois Tu te grappes les urnes N'importe quoi toi Moi par contre J'avais une question Comment c'est fait Un urinoir Parce que moi je sais pas Je suis jamais allé voter Bah c'est simple C'est une petite cabine Avec un rideau C'est tout Pour pas qu'on voie Et tu mets 2 francs Tu mets 2 francs Pour pas qu'on voie Pour qui tu votes Et quand t'as 10 000 votés Tu tires la chasse Ils te donnent une petite serviette Pour t'essuyer Peut-être On sait pas Donc troisième question Les enfants ont-ils le droit De faire de la politique On va demander ça A Castenoisette Comme elle est bien placée Oui Il y en a déjà Qui ont tenté le coup Gérard Et je peux te confirmer Que effectivement Bientôt Les médias vont parler D'un petit jeune Qui a 14 ans Et qui s'y met vachement Et en fait Castenoisette Parle plus fort un peu Castenoisette Tu parles plus fort Il y a du monde derrière toi Oui donc Ouais bah alors Tu demandes aux gens Il y a personne Il y a personne Il y a absolument personne Je suis toute seule Assise sur ma chaise Comme une clocharde Non bah c'est bizarre On entend du monde Chez quelqu'un Mais je voudrais bien savoir Chez qui Ah oui mais non Mais moi c'est pas chez moi Donc alors Donc tu disais Ouais donc je te disais Bientôt Il y a un petit jeune De 14 ans Qui commence à se mettre A la politique Et les médias Vont bientôt en parler Je peux pas en dire plus Parce que sinon Ça serait divulguer Des secrets Des secrets d'état Néanmoins sache Que tu vas bientôt Entendre parler D'un petit jeune De 14 ans C'est pas Jordi Non non mais c'est bon On a pas besoin De savoir les noms D'accord Je ne donne pas de noms Oui non mais je sais Ouais je sais Casse-moi cette C'est pas pour toi Que je parle C'est pour Tony Qui veut dire Sûrement de qui il veut parler Je vois à peu près Ah oui Donc Moi je voudrais parler Attends 5 minutes Oui Gérard Il y a un certain Max Sur l'IRC Qui me demande Si les animaux Ont le droit de voter Je vois pas comment Qui pourraient voter Les animaux Il me dit Dans la mesure Où certains hommes politiques Sont des chiens Les animaux pourraient voter Ouais mais ça Maintenant avec les trucs Sur les guignols de l'info Comme ils font pas mal De conneries Ils s'amusent A faire des Des figurines Des hommes Politiques En tête de chien Et tout ça On nous aurait menti Alors Saucisson à l'ail J'étais venu à toi Bah écoute Moi je pense Qu'ils ont pas vraiment Le droit Mais c'est pas pour ça Que ça les empêche De le faire quoi D'accord Ok Plotte-moi Je veux dire Pardon Oui Oh c'est fini Derrière Putain ma caisse Ah il y a un mec Qui se fait tirer sa caisse Là on dirait Bon bah alors S'il se fait tirer sa bagnole Je sais pas qui mais Putain les enculés Oh tu restes poli S'il te plaît Plotte-moi parce que tout à l'heure Tu vas virer Je pense qu'il vient de parler là Elle a ma BM Alors plotte-moi vas-y Euh oui donc je crois Que c'est un peu bizarre Ce qu'elle a dit tout à l'heure Parce que moi J'ai entendu parler Qu'il fallait quand même Avoir 23 ans Il me semble Non là Tu peux Non c'est 21 Non si je me souviens Si je me trompe pas Non non c'est Non non pour être Pour machiner Pour avoir 21 ans A peu près Pour voter Pour se présenter Aux élections C'est combien C'est quel âge 21 ans Normalement Je peux rajouter Juste quelques Oui oui vas-y Il faut savoir Qu'en fait Cet enfant là Ce jeune adolescent Va demander l'anticipation Ah d'accord D'accord Donc c'est pour ça Que je répondais A la question Je ne peux pas dire Julien C'est quand même Un secret d'état C'est pas moi d'en parler Les médias vont faire Leur boulot Beaucoup mieux que moi Et donc voilà C'est tout ce que je voulais C'est ton gosse Jérôme Non c'est On se calme Je viens d'entendre Un nom Que j'aime pas Par contre Là on vient de me Donner Un petit sondage Il y a 20 Donc pour ou contre La politique Mais ça J'en avais pas parlé Donc je vois pas Pourquoi qu'on met Pour ou contre Donc il y a 20% Des gens qui Qu'ont dit Qu'ils n'aimaient pas La grossièreté Ca c'est vrai 40% des gens Ont dit Que les Que les types C'étaient des Petits parasites Parasites Que l'éthique L'éthique C'étaient des petits parasites Ouais que c'était L'éthique C'étaient des petits parasites Que l'on trouve Sous les Sous le chien Et 40% des gens Ont dit Qu'ils n'en avaient Rien à foutre Et ça Je suis bien d'accord Avec les 40% Qui disent Qu'on en a rien à foutre Ca pour moi C'est réel Donc Tony Pour toi J'ai pas suivi la question Parce qu'avec tes sondages Là tu m'as perturbé Alors Les enfants ont-ils le droit De faire de la politique Voilà la question Bah oui tout à fait Moi je pense que les enfants Ca serait pas pire Que ce qu'il y a maintenant Enfin moi je sais pas Si par exemple Une fille de 12 ans Elle est aussi bien galpée Qu'Elisabeth Guigou Bon Tony Tony c'est la dernière fois Tu vas retourner Voir Manu au standard Ah il est impossible ce Tony Alors c'est fini Non non Tony Je te l'avais dit gentiment Tout à l'heure De ne pas citer Le nom des personnes politiques Si si t'as très bien entendu Donc c'est terminé C'est terminé Tony C'est terminé C'est terminé C'est terminé Terminé pour toi Tony Au revoir Et sur IRC On me dit Tony tu dégages Voilà bah ça y est Il est parti Donc Tébette Moi je dis que les gosses Ils ont rien à faire Dans la politique Oui Il ferait mieux de jouer au Lego Et de pas nous faire chier quoi C'est une affaire d'adultes Et c'est pas du tout Une affaire de gamins quoi Ouais mais Comme je disais tout à l'heure Donc faut bien avoir La majorité pour y être Mais c'est même pas Une question de majorité C'est que les gosses Ils ont rien à faire là-dedans quoi Ils jouent aux billes Et puis c'est tout Ouais mais t'en as beaucoup Qui veulent se lancer dedans aussi Mais ouais Mais c'est des petits cons Bon ok Grosse frigne Bah moi je sais pas Mais je sais pas Si tu regardes des fois Ils invitent des mômes A l'Assemblée Nationale Ouais mais ça Ouais mais ça c'est Pour faire des séances et tout Et pour s'intégrer un peu Ouais non mais attends Ça Merde ils posent tous La même question Quand est-ce qu'on mange Ils veulent tous Aller pisser en même temps Ouais non mais Et en plus Ils dégueulassent Tous les sièges Des députés Ouais mais non mais attends Attends je parle s'il te plaît Moi je trouve que Vraiment Les mômes C'est à l'école A la crèche Ou à la babysitting Et tout Et puis c'est pas Dans la politique quoi Ça va Non mais faut dire Qu'aussi avec ce qui se passe A l'heure actuelle Bon bah Les étudiants Les trois quarts Ont 15, 16 Voire 17 ans C'est des petits cons Les étudiants Ouais mais attends Mais c'est quand même C'est quand même C'est quand même Leur problème Parce que bon Faut dire une chose Que si Ils sont trop nombreux Dans les classes Faut voir aussi Le nombre de personnes Qu'il y a dans les classes Mais attends Attendez Attendez Attendez Attendez Attendez Attendez Laissez-moi finir J'ai entendu dire Qu'ils étaient jusqu'à 50 personnes Dans une classe 70 moi j'ai entendu 70 Ouais il y a J'ai entendu 40 50 et 70 Aussi par là Oui Excuse-moi Mais même s'ils sont 50 par classe C'est pas beaucoup T'en mets 20 dans la classe Et 30 dans le couloir Tu laisses la porte ouverte Et tout le monde peut suivre Ouais non non non Non non Attends attends Attends attends Gros string Gros string Gros string S'il te plaît Attends il y a une question IRC Oui gros string Je suis désolé Il y a Erki sur IRC Donc qui te demande Gérard Combien d'érections As-tu participé Non mais ça J'y répondrai pas Parce que c'est pas le thème Du débat politique Et Gérard Ah si en politique Les élections c'est normal A la place Les clochettes c'est bon A la place de Tony On accueille Kyra Qui appelle de Sarcelles 101.9 Bonsoir Laska Allo Bonsoir Laska Non tu parles comme Hippo Je suis Kyra Moi je voulais dire Que je vote Je vote et Voilà Tu votes pour qui toi Moi je vote pour Pour ceux qui Légaliseront le vol De Des mobilettes Voilà D'accord Ok D'accord Tu peux répondre A la question J'ai pas entendu Il était au standard Alors les enfants Ont-ils le droit De faire de la politique Tout à fait Moi je suis Tout à fait d'accord Que pourquoi Il y aurait Des discriminations Comme ça Dès le plus jeune âge Non mais Pourquoi Qu'est-ce qu'il y a Moi je peux vous dire Moi je peux vous dire Une chose Que j'ai Je voudrais pas Que mon enfant S'amuse à faire de la politique Parce que ça Ça me plairait pas du tout Déjà moi j'en fais pas Donc Et pourquoi justement Justement sur Minitel En plus ça cartonne Ce soir on est 30 connectés Il y a un auditeur Qui s'appelait Je sais plus comment Yann Qui voulait te demander Pourquoi toi tu ferais pas De la politique Et pourquoi tu serais pas Ministre de la route Non non mais ça Moi c'est un truc Qui me branche pas Et quand j'entends parler De ce qu'il parle A la télé Même sur les radios Fais-moi confiance Que c'est une prise de tête Pas possible C'est-à-dire Donc C'est sans arrêt En train de nous dire Ouais mais de toute manière Comme ils disent Pour les étudiants C'est malheur d'en parler Ils disent ouais De toute manière On vous promet des bourses Et puis tout ça Et puis en fin de compte Ils ont jamais rien Les étudiants C'est dégueulasse Ils ont jamais rien eu Et c'est pour ça Moi je leur donne raison De faire ce qu'ils font C'est tout C'est quand même leur truc Pour avoir un bac Et donc moi je leur donne raison C'est tout Continuez En attendant Gérard Gérard président Gérard président A ce propos Y'a Yankee sur IRC Qui me dit Si Gérard était président C'est l'état qui se fera enculer Bon bah ça Il se démerde Donc Quatrième question Oh ça suffit Avec les sonnettes Oh ça suffit Merci Pensez-vous Que l'on parle Bon Manu Tu me le gères s'il te plaît Parce que ça me prend la tête Ou sinon Je gère la sonnette La sonnette tu dégages Alors pensez-vous Que l'on parle trop de politique Putain J'ai dit tu dégages Ça commence à me prendre Ça commence à me prendre la tête là Euh Caria Caillera Caillera Moi je suis d'accord Avec toi Gérard Parce que Moi y'a Dans la PC Il tourne Y'a le maire L'autre fois il est venu Et il nous parle Il nous prend la Il nous prend la Il nous prend la gueule Il nous fait Arrêter de fumer des tarpés Trouver un diable Tout ça Mais non on s'en fout Non on s'en fout Parce que On casse des trucs Ok Grosse ligne Bah moi je trouve que On en parle pas Pas tellement en fait Là pas plus tard que Attends ouais c'était hier J'ai regardé le juste prix Que dalle Non mais attends Eh Toh Oh grosse ligne Tu crois Tu crois qu'ils en parlent pas assez Ils ont fait Ils ont fait carrément Tout un truc sur Euh Sur Bill Clinton A 23h10 Attends Tu te fous de moi là J'ai jamais de l'avis Dans le juste prix T'es fou Non non mais attends Dans ce cas là Si tu regardes le juste prix C'est pas la peine de participer Au débat sur la politique Quand au journal télévisé Là tout à l'heure Ils ont pas vendu Tout ce qu'ils ont montré C'est la fusée qui les colle Bah ouais mais ils ont quand même Parlé de la politique Je suis désolé Ils ont parlé de politique Les astronautes Quand ils décollaient J'en sais rien mais Non non mais ils en ont quand même Parlé à 20h Je suis désolé À 20h Moi j'allume à 20h02 Ils n'en parlaient plus déjà Alors Non non mais attends T'es bête T'es bête Toupé Toupé à Québec Vas-y Toupé Oh Tu te réveilles Allez hop Bonne nuit pour lui Allez hop Celui-là c'est Comme ça il se réveillera Oui Rigo Oui il y a Vomis de porc sur IRC Qui te demande Gérard Pourquoi tu dis Qu'il y a trop de poils éthiques Tu aimes les hommes imberbes Non n'importe quoi N'importe quoi Plote moi Ouais moi je pense que Non Il y a trop de Il y a trop de Il y a trop de politiques D'ailleurs on devrait directement Passer au deuxième débat Non mais alors Pour l'instant c'est pas Toi tu n'as qu'à acheter toi Non mais attends Toi si t'es pas content Tu vas faire comme Tony T'es bête Tu vas gerber aussi Comme ça on va prendre D'autres personnes Tu vois j'ai envie de Ce soir On est à la troisième Il y a 12 questions Alors soit que tu réponds Gentiment à la question Soit que tu vires Tu choisis Je veux bien faire comme Tony Parce que mon nom Il me plaît pas trop là Eh ben alors C'est bien alors Pareil Allez salut Salut à toi Salut C'est bien il ne nous reste plus Qu'un, deux, trois, quatre Il nous en reste plus que quatre Alors casse-moi Z On accueille Attends excuse-moi Gérard On accueille quand même Citrouille Eh salut Gérard Salut Citrouille On t'appelle d'où ? J'appelle de Paris Ok Alors donc je répète la question Comme tu viens d'arriver Oui s'il te plaît Alors pensez-vous Qu'on parle trop de politique On va demander à casse-moi Z Comme j'étais sur elle en premier Ouais ben on en parle beaucoup Oh le porc là On en parle beaucoup C'est vrai mais à tort et à travers Tu vas dire que je vais remettre L'histoire de Clinton sur le tapis Non mais justement J'en ai parlé aussi moi Donc Bon je vais t'expliquer en gros Moi j'ai dû partir là-bas J'ai dû partir aux Etats-Unis Parce que je travaille au Parlement Et on a dû donc aller là-bas Et on a eu des réunions Donc avec Bill Clinton Et il faut savoir Qu'il y a des choses qui sont vraies Et qu'il y a des choses qui ne sont pas vraies C'est-à-dire qu'on va revenir Sur le harcèlement avec Ouais mais on ne va pas s'éterniser là-dessus Non non non Mais il y a des choses Il faut savoir que Bon il ne l'a pas harcelée quoi Elle était tout à fait d'accord Et bon Elle était consentante Elle était tout à fait consentante Elle adorait le sucer Elle ravalait tout Elle était contente Et puis voilà quoi D'accord Attendez attendez Il y a une question IRC Oui enfin c'est une réaction A ce sujet On te demande Gérard A ton avis Est-ce que Pour qu'un président Fasse parler de lui Il faut qu'il se fasse sucer Non pas spécialement On va peut-être pas revenir Sur l'affaire Bill Clinton Non mais En deux mots Moi je lui dis Là je peux y répondre De toute manière Ça sert à rien Strictement C'est casse-couille Ouais mais Gérard Il faut reconnaître Que ça aide quand même Ouais mais ça Je vois pas où ça fait du bien S'il y avait un président Par exemple Un président bulgare Ou un truc comme ça Un mec On n'en entend jamais parler Il se faisait pomper un bon coup Je suis sûr que dès demain On en entendrait parler quoi C'est clair Non mais ça T'as vu l'accueil des Attendez attendez Cueil gras Cueil gras 5 minutes oui On accueille casse-couille Bonsoir Bonsoir à tous Bonsoir aux 20 millions d'auditeurs Qui nous écoutent quand même Eh celui qui s'amuse A A faire ça Là il va se calmer Il est d'où lui ? Bah écoute Demande lui Parce que j'ai pas eu le temps J'ai 19 ans Et j'appelle de Mont-de-Marsan Et la fréquence de Mont-de-Marsan ? Euh alors ça Je sais plus moi Je vais la trouver Il va nous la donner Il y en a un qui est malade là Ouais je crois La malade c'est le deuxième de bas Celui qui s'amuse à faire ça Va se calmer Parce que sinon C'est moi qui vais le calmer Aurentaine C'est la chiasse Alors casse-noisette Oui Donc pour toi Non toi tu viens de répondre Ah oui Sois-ci son à l'aïe Bah écoute moi Gérard Moi je pense que la politique Si tu veux en entendre parler T'en entends parler Mais si tu veux pas en entendre parler T'en entends pas Bah voilà Donc je suis tout à fait Euh Citrouille T'avais pas répondu Ouais mais alors moi je dis On parle pas assez de la vie privée Des hommes politiques Ah si si Attends attends Citrouille Citrouille Citrouille Citrouille Attends Citrouille Je vais te dire une chose On en a quand même On en entend parler sans arrêt Parce qu'hier Y'a un truc sur la première Qui a passé carrément Toute la partie Une bonne partie de la nuit Ils ont fait ça à 23h30 Sur la 1 Je sais plus le nom du reportage Je crois que c'est reportage Ils nous ont cassé les burnes Avec la paire Bill Kington Pourquoi t'as regardé ? Non non je vais pas regarder J'ai zappé parce que ça me prenait la tête Moi je dis qu'il faudrait faire ça Toutes les semaines Si Chirac il a des maîtresses Si Jospin il a une grosse piste Ouais bah c'est bon On en a rien à foutre Ouais casse couille Ouais Gérard Ouais c'est qui ? Ouais c'est gros string Je voulais juste dire un truc Sur la vie privée des hommes politiques Je sais pas si t'as remarqué Mais l'été Dans tous les magazines Genre Paris Match Gala etc C'est que des photos Des hommes politiques Qui sont Qui sont moules couilles Sur la plage Ouais mais d'accord Mais ça c'est Non mais ça c'est leur problème On a même vu Barthez en jet ski T'imagines Casse couille Tu veux répondre Avant qu'on pose la cinquième Ce qu'il y a c'est que moi J'étais au standard Alors pensez-vous Qu'on parle trop de politique Manu tu me gères celui Qui arrête pas de roter Comme un porc Parce que ça m'énerve ça Pas de problème Il va aller gerber Il va revenir Ouais bah il va aller gerber Il va aller gerber Chez lui définitivement Gérard Ah bon ouais Calmez-vous s'il vous plaît Il y a Gognol sur IRC Qui te demande Comment tu ferais Pour boucher le trou de la sécu Ah bah ça C'est pas mon problème Ça c'est pas mes problèmes Pour les trous de la sécu Ils sont assez grands De s'en occuper Ça ça me regarde Bah apparemment non Ouais mais attends C'est bien aux hommes politiques De s'occuper du trou de la sécu Manu tu me le calmes S'il te plaît Parce que sinon Ça va chauffer pour toi Alors casse-couille pour toi Oui au fait Alors pensez-vous Que l'on parle trop de politique Donc c'était la question Comme tu étais au standard Ouais je tiens à préciser Que d'abord Que la fréquence C'est 52.6 à Mont-de-Marsan Vu que je l'avais pas dit Tout à l'heure Donc effectivement Je trouve qu'on en parle beaucoup Mais on en parle quand même Un peu moins Que quand il y a les élections Là on en a 24 heures sur 24 Il y a que de ça Ah ouais mais Mais non mais casse-couille N'empêche je suis au directeur C'est une chose que D'accord on en parle moins Avant qu'il y ait eu les élections Mais là quand même Ils nous bassinent encore A l'heure actuelle Avec l'affaire Big Clinton Et l'affaire Les visqués Avec les visqués Ouais mais je croyais Que tu voulais pas en parler Non non mais moi je te dis Tu dis qu'on en parle pas assez Si ils sont en train De nous bassiner avec tout ça Mais ils en parlent pas assez Bah ouais mais on en a ras-le-bol D'entendre parler de ça sans arrêt Mais non Donc alors vous allez réfléchir A la question Avez-vous un membre De votre famille Qui fait de la politique Et on va s'écouter Pierre de la Montagne Avec Elles sont blanches Mes chaussettes Et elles puchent Et on se retrouve tout de suite après T'appeler au 0800 308 5000 Et 0870 5000 Toujours le 36 15 4 Fun Radio Rubrique directe Et lire c'est www.fr Fun Euh Fun Radio Flash Fun Radio On a 921 connectés quand même Gérard ce qui est énorme Ouais J'en veux 1000 J'en veux 1000 avant Avant une heure et demie Ça arrive Ça arrive Et alors on va T'as trouvé là Qui c'est qui Ça y est Il est allé Il est allé aux toilettes Il a fait ses besoins Il est revenu Il est en pleine forme Super Ok Donc on récupère Saucisson à l'ail Toujours là Gérard Casse-noisette Ouais je suis là Gros string Ouais Euh Queyra Soir non Citrouille Ouais salut Et casse-couille Oui si tu pouvais donner Le label La maison d'édition Des disques que tu mets Ça m'aiderait Bon alors là Faut demander ça A Filda C'est le label rouge C'est approuvé D'accord merci Je connais Je connais Tu es pas people Ouais Bon c'est bien C'est bien comme ça Donc vous avez eu le temps De réfléchir A la question On va demander Bah tiens casse-couille Moi non J'ai pas de J'ai pas de membre Ni de ma famille Ni de mon corps Qui participe A la politique Ouais Voilà Ok Je suis désolé D'accord Citrouille Ouais moi j'ai un oncle Mais bon c'est l'athéon Il est communiste Alors on lui parle plus Non non non Non non mais ça On fait pas de politique Ah ok ouais Bon bah on lui parle plus Quand même Parce que c'est un gros con Ok Ah bah c'est bien Alors Keira Ouais moi je Mais nous Ils veulent pas de nous Parce qu'on a Avec des tepeaux On a voulu faire Un parti politique Ouais Et on est allé A la mairie Et ils ont pas voulu De nous Ces messieurs D'accord Grosse ring Bah moi j'ai un cousin Ouais qui fait de la politique Ouais Et il colle des affiches Hum Et bah voilà quoi Un jour il était dans la merde Parce que Il avait emmené Qu'un tube de colle Et il a pu en coller Que trois quoi D'accord D'accord Je vois pas du tout Le rapport On prend pas de la colle On prend pas des tubes de colle On prend pas des tubes de colle Les mecs Y'en a qui sont avec des seaux Et qui préparent déjà Ouais ouais Non mais c'est bon Tu me laisses Reparler s'il te plaît Merci Bah non je crois Qu'il y a un moment Si tu sais pas Comment on colle des affiches Moi je peux rien faire Pour tout le monde Non mais attends Tu demanderas A ceux qui Quand ils les colleront Pour les élections Tu leur demanderas Excuse moi J'ai beaucoup de respect pour toi Bon alors celui-là Ça commence à m'énerver Il a passé Mon cousin Il a passé un CAP En collage d'affiches Et il sait certainement Beaucoup mieux Que quiconque Coller des affiches Peut te le dire Non non non Si si si Casse-moi Z Ouais bah moi J'ai pas sa amie Qui travaille là-dedans Mais bon moi Je suis dans le milieu Je travaille pour le parti De Jean-Marie Le Pen Bon bah alors Casse-moi Z C'est bon là pour toi C'est terminé Elle a le droit de parler Non non non J'avais précisé De pas donner de Pas de FN Allez hop Terminé c'est bon Allez hop Hop Oh non non non Alors Je m'en fous de celui Qui s'amuse à faire ça De tout à l'heure Ça va mal C'est terminé pour lui Saucisson à l'ail Bah écoute Gérard Moi chez moi Tout le monde est contre Oh non non non Oh Oh si Bah qu'est-ce que j'ai dit Saucisson à l'ail Continue Non non mais j'arrête Celui qui s'amuse là Ah ok excuse-moi Moi je t'ai dit Mais chez moi Tout le monde est contre Oh non non non Mais quoi Et ça commence à bien faire là Un fil d'art Non c'est pas moi Non c'est pas toi Qui t'amuses avec Un petit bouton là Non Non non Toi tu es en train De me percer les miens Mais ça c'est T'en regardes pas Oui oui oui Mais t'es en train De t'amuser là-bas Ok C'est vu Donc Saucisson à l'ail Toi pourquoi Gérard deux secondes J'ai une question sur Minitel On est encore 23 connectés De R2D2 Je trouve qu'il y a Beaucoup trop d'hétérosexuels Dans le milieu de la politique Et toi Gégé Que t'en penses quoi Moi j'en pense Rien du tout de ça Mais est-ce que tu trouves Que en fait Justement en ce moment On parle du PAX Je sais pas si tu Non non mais ça C'est pas Ça rien J'en parle pas Pour le mariage Des homosexuels Qui font de la politique J'en parle pas là-dedans Ce soir Pourquoi Parce que ça m'intéresse pas C'est tout Mais c'est intéressant Les gens ils aimeraient savoir Ouais bah peut-être Mais moi Gérard Excuse-moi Excuse-moi gros string là T'aimerais pas De faire introduire Dans le milieu Non non non On va faire sur le côté On accueille X S'il vous plaît Oui bonsoir Gérard X bonsoir Oh elle est bien elle T'appelles d'où Bah j'appelle de chez moi apparemment Un appartement très bien d'ailleurs Manu Manu Quel fréquent S'il te plaît Non mais je te dis J'appelle de mon appartement Donc région parisienne Région parisienne Le truc que tu paies 900 balles là Région parisienne 90 mètres carrés là Région parisienne Bah oui région parisienne Ok 101.9 Merci d'apprécier Ainsi de suivre Donc à toi X Alors de répondre Bah si tu peux me répéter la question Avez-vous un membre Avez-vous un membre de votre famille Qui fait de la politique Non malheureusement J'ai pas J'ai pas quelqu'un Qui fait de la politique Dans mon entourage Ni dans ma famille Non C'est la vie des mystères ça Non D'accord Donc moi je peux vous dire Que moi non plus Comme j'ai pratiquement personne Que de son entourage Moi là-bas Je suis tranquille Oui c'est qui C'est gros string Ton membre Il fait pas de politique Bah en gros string Tu veux parler de quel membre Alors vas-y Ton membre A toi Tu nous demandes Nos membres à nous Maintenant De la famille s'il vous plaît Que je demande Ah ouais d'accord Faut pas confondre Les torchons et les serviettes D'accord Et alors ta femme Ma femme à temps merde Ma femme Ma femme à temps merde Tu sais ce qu'il dit Le vieux porc Exactement Alors Sixième question Déjà ça passe tellement vite Bah oui Doit-on voter Pour Peut-être une question Hier c'est avant J'en aurai une J'en aurai une Vas-y Vas-y Fildar Ok donc c'est Paul Ethic Qui te demande Gérard as-tu un membre actif Dans les parties Non Donc il reste serré Sur IRC Pardon Il y a SNUL Qui te demande Si tu connais le parti GNB Non plus On est combien là maintenant On est On est 7 ou 8 dans le studio Non non mais ça Je m'en fous Je veux savoir Sur l'IRC Si on va dépasser Les milles ce soir 986 On y arrive bientôt Putain t'es 12 Alors c'est bon Merci le pape Alors on continue Donc sixième question Doit-on voter Pour avoir une copine On va demander ça A Grossring Comme il n'arrête pas De jacter sans arrêt Est-ce que tu peux répéter J'ai mal compris Doit-on Doit-on voter Pour avoir une copine C'est la dernière fois Que je répète la question Alors ouvrez bien les oreilles Alors j'ai compris Mais il faut articuler aussi un peu Alors est-ce qu'on doit voter Pour avoir une copine Moi je dis Oui si on veut Si on veut Niquer une nana Qui fait de la politique Genre Je sais pas moi par exemple Comment elle s'appelle L'autre là Ah la blonde là Elisabeth Elisabeth Kikou Alors Alors C'est Kaira C'est Kaira Oui Kaira Elisabeth Kikou Alors c'est bon Kaira Tu peux partir Et Grossring avec Tous les deux Tu peux partir Allez viens avec moi Viens Tu rentres chez toi Et c'est bon Voilà alors Je t'aide un peu Je t'aide un peu Parce que t'as du mal Fais gaffe Fais gaffe Donc On a plus Kaira On a Grossring Non plus On va demander Sa saucisson à laïc Bah écoute Moi franchement Je dis que non Ça dépend Mais franchement Je dis que non D'accord Je vois Bien ce que tu veux dire Citrouille Ouais moi je me suis jamais Fait de meuf Alors je suis pas Non mais doit-on voter Pour avoir une copine Ou un copain Si tu veux Dans l'ensemble Bah moi j'ai plein de copines Non mais Putain mais T'es bouchée ou quoi Toi ce soir Non pourquoi T'as mangé quoi là T'as mangé Du poulet Du poulet enragé On dirait Non il était pas enragé Bah dis donc On le dirait Parce que je crois Je crois que tu comprends pas Ce que je veux dire Peut-être les champignons Ils vont pas être frais alors Ouais d'accord Gérard il y a Turpentine Sur IRC Qui te demande Si tu as voté Pour trouver Sandy Personnellement Non je l'ai Il a voté nul ouais Attends je l'ai voté Par pochette surprise Dans IP Magazine Ça va lui faire plaisir C'est pas un truc De homo ça ? Non non C'est un magazine Comme ça Donc Qui c'est qui nous reste Cascouille Oui bah moi J'ai très bien entendu Ta question Mais je la comprends Pas très bien quoi Alors doit-on J'ai compris J'ai très bien compris Doit-on voter Pour avoir Une copine Ou un copain Bah je comprends pas Le rapport là Bah doit-on voter Par exemple Si tu veux voter Pour qui Tu peux voter Si tu veux Tu peux voter Pour retrouver une copine T'as le droit Bah logiquement Quand tu votes C'est pour Pour élire quelqu'un Bah oui Bah dans Dans la politique Y'a bien des nanas Qui font de la politique Donc si tu veux Être copine avec elle Faut bien que tu votes Pour elle voyons Ah ouais mais faut avoir Des business Quoi qui c'est Qui dit n'importe quoi Qui c'est qui vient de dire N'importe quoi Je crois que c'est X Oh X Eh toi la grosse Déboue espèce de filiasse là Eh ça va toi là-bas Elle a dit Calme ta joie toi Eh tu vas te calmer Ta joie là ou quoi là Eh toi la grosse Déboue espèce de filiasse là Oh ça suffit là Pile d'art Ou sinon je t'en vois Je sais pas ce quoi là Euh bah Bah X Eh toi la grosse Déboue espèce de filiasse là Ils sont trop Non mais attends Je crois que ce soir Ils ont fumé la moquette Ou ils ont fumé Ils ont bouffé Je sais pas quoi Y'a pas de moquette à fun Merde Ouais alors Donc on accueille Téton Et on accueille aussi Bulldog Mystère Oui bonsoir Bulldog Mystère Bonsoir Gérard Bonsoir tout le monde C'est ce qu'il m'a donné Comme nom Gérard Me regarde pas comme ça Alors lui tu peux Tu peux lui dire Qu'il prenne un autre nom Non mais je restais Je restais dans l'anonymat Qu'est-ce que c'est encore Ce travlot là Eh bah écoute Je vote Eh c'est pas un débat Sur les travlots C'est un débat sur la politique Je vote aussi bien que toi Ouais bah moi je tombe Donc Mystère Bulldog Bulldog Mystère Ouais si je veux Les fréquences là S'il vous plaît 96.10 Pour qui ? Pour Bulldog Mystère Ouais 96.10 96.10 ? Oui Et Téton ? Bah moi j'appelle Delil Fréquences ? J'ai pas encore 96.8 J'ai pas encore de Téton moi 96.8 Ok Et alors X ? Ouais bah je pense Qu'il faudrait Oh tu mettais en la musique là Non non mais c'est pas moi Non non mais il y a J'ai de la musique là Oh une collègue Moi j'ai rien Là tu sais rien moi Bon X ? Non je pense qu'on devrait Créer des écoles Pour voter Pour essayer d'avoir Une copine ou quoi Ah fil d'art T'arrêtes avec cette Cette chanson là Parce que ça me prend Ça me prend la tête C'est la fête C'est la fête Ouais ouais bah c'est bon On l'a fait assez hier la fête Ça c'est la fête Euh Téton ? Oui bah si tu voudrais Répéter la question Parce que j'étais au standard Il a dit qu'il la répétait pas Alors doit Ça commence à bien faire Faudrait peut-être écouter Quand je leur parle Quand je leur parle Ils peuvent pas t'entendre Gérard Donc euh Gérard il y a une bonne question De Toons sur l'IRC Est-ce qu'il est normal Que tout le monde Aie le droit de voter ? Bah ça dépend des âges En principe Tu as le droit de voter Qu'à partir de 18 ans Mais donc Si t'as moins de 18 ans Tu n'as pas le droit de voter Et on est mille sur l'IRC ça y est Ah ça y est On a atteint les mille hein Ouais On a atteint les mille quand même Il est normal 20h20 J'avais dit avant 1h30 C'est bien Continuez Moi Gérard en tant que Travlo J'estime que tout le monde A le droit de voter Non mais attends Pour l'instant je demande à Téton Je demande pas au Bulldog Tu m'as toujours pas répété la question Alors doit-on voter pour Pour choisir une copine Ou un copain ? Doit-on voter pour choisir Un copain ou une copine ? Voilà Euh ouais peut-être Pourquoi pas ouais Ouais Ouais mais c'est pas mal Là ta réponse Ah qu'est-ce que t'en penses ? Ouais bah elle est nulle à chiquer Bah ouais Missère Bulldog missère là Comme la question Attends si t'es pas contente Tu raccroches Et tu vas faire dodo Écoute Moi je vote Mais c'est pas pour trouver une copine Parce que je suis hermaphrodite Donc Pas d'insulte Pardon Bon et les autres derrière Vous le laissez parler On vous a laissé parler Alors vous le laissez parler Un petit peu de respect quand même Je suis différent de vous Mais je suis quand même J'estime T'as le droit de t'exprimer Bah oui T'inquiète pas Merci Sildar De rien Tu connais ce problème en plus Ouais non mais vas-y Accouche là On va pas Bah oui bah je te dis Moi j'ai pas besoin de voter Pour Pour trouver un copain D'accord Même en boîte Même en boîte De toute manière Tu peux te trouver facilement Des copains ou des copines J'ai vaguement entendu Sur l'antenne C'est pas le terme du débat Non mais je peux répondre Que j'ai vaguement entendu Ce soir Qu'il y en a une Elle savait pas du tout Ce qu'elle voulait faire Avec le mec Qu'elle a rencontré Vendredi à la loco Donc c'est pas grave Oui Rigaud Oui il y a Le Chiant sur IRC Qui te demande Si on peut voter Dans tous les pays Euh Très bonne question Je vais y réfléchir Je vous donnerai les réponses Tout à l'heure Ok Alors La septième Peut-on faire de la politique Pour être une star On va demander ça A Bulldog Mystère Apparemment Tu m'aimes bien Ouais bah Tu vas parler Comme c'est toi Le dernier arrivé Donc tu parles un peu Euh Alors peut-on faire de la politique Pour être une star Ouais Bah oui Bah tu vois bien Qu'on a parlé De l'habit à Clinton Assez souvent Que maintenant Je pense qu'il peut faire Un film de boule Sans problème L'habit à Clinton Est connu Du monde entier Bah ouais Non mais Sur internet Ouais bah ça Je sais pas Sur internet Si c'est vraiment vrai Écoute J'ai cliqué dessus Hier Toute l'après-midi Je peux te dire Que sa bite Est sur le net Si si c'est vrai Ouais je sais Il paraît qu'ils veulent Qu'ils font des photos dessus Euh Tétons Bah moi je suis d'accord Avec ce que tu dis Gérard Bah mais C'est à dire Bah c'est à dire Que je suis d'accord Non mais C'est pas la peine de dire Que t'es d'accord avec moi Mais tu précises Ta réponse Bah je pense Exactement comme toi Alors C'est à dire Bah c'est à dire Que oui Je pense que oui Ouais effectivement Vu les circonstances Ouais je pense Euh X Bah écoute Une collègue Oh Bouledogue Missaire Je suis pas du tout Un collègue à toi T'inquiète pas Hé Bouledogue Missaire Tu t'as mis un petit peu en veilleuse T'es jalouse parce que j'ai une vie Tu t'as mis en veilleuse S'il te plaît merci Bon tu peux me la répéter Parce qu'elle arrête pas de parler Et j'entends rien Alors peut-on faire de la politique Pour être une star Non je pense pas Qu'on peut faire de la politique Pour être une star Parce que toi t'es déjà une star Non mais attends J'ai pas T'as pourtant pas fait de politique N'importe quoi Qui c'est qui dit n'importe quoi ? Bah non Bah pourquoi tu dis n'importe quoi ? Il est vrai ce qu'il dit N'importe quoi Hé celle qui est pas contente Alors tu rentres chez toi Et tu t'écrases d'accord ? T'as des meilleures réponses toi ? Euh casse couille Non tu m'as pas répondu Connerie à la radio Casse couille Moi tout d'abord un truc Que je comprends pas là Euh Bouledogue Missaire et X C'est pas la même personne ? Non Non c'est ma soeur Ouais c'est ta soeur À Balbeur entre les cuisses D'un catcheur Ouais Ouais Alors casse couille Alors moi je pense que ça Ça devrait te donner des idées d'ailleurs Vu que tu fais quand même Aujourd'hui même ce soir 20 millions d'auditeurs Je pense que tu devrais Te mettre dans la politique Non non attends Pour l'instant On a pas fait 20 millions d'auditeurs La semaine dernière On a fait 15 millions d'auditeurs Là ce soir La semaine dernière On avait plus de On avait 1000 connectés À je sais plus quelle heure Et là il y a À 1h20 On était déjà 1000 connectés Sur le net Et là On atteint bientôt les 1200 Et là on va arriver On va arriver sur 1200 connectés D'ici deux heures Ouais mais Ouais mais Gérard Oui Imagine T'es 15 millions là 15 millions d'auditeurs Imagine ils votaient pour toi Et tu serais président quand même Ouais mais ça on verra Bah faudrait que Tu vois faudrait que tu réfléchisses À ce genre d'hypothèse Non faut pas que tu réfléchisses Non mais Celle qui dit Faut pas que je réfléchisse Je fais ce que je veux T'es méchant Comme ça vous êtes en train de feu Euh Citrouille Oui Donc toi Moi je dis qu'il faut être une star Pour faire la politique Et pas le contraire Non mais doit-on Elle est mal tournée ta question Moi je dis si Depardieu Fait de la politique T'es sûr il est élu Moi je dis qu'il faut être une star Pour faire la politique Bon ok C'est ton opinion Mais moi personnellement Non je te dis tout de suite Bah tu la partages pas C'est pas tant pis pour toi Mais moi je te dis que c'est ça Ok Tu verras on en reparlera On en reparlera Ceux-ci sont à l'aïe Bah écoute moi je suis pas tellement d'accord Parce que je dis que C'est pas parce qu'on fait de la politique Qu'on est une star hein Hum Parce que Il y a bien des gens Qui font de la politique Et puis On s'en fout totalement On en entend jamais parler C'est quoi ça ? Allo ? Ceux-ci sont à l'aïe Je crois que c'est X Qui a raccroché Non non je suis là moi Merde Merde, merde, merde, merde, merde Euh Bulldog mystère Tu dis encore une seule fois Un gros mot Tu gerbes Merde Alors tu dégages Bonne nuit Non c'est pas moi C'est pas moi Non c'est pas toi C'est ma soeur Ceux-ci sont à l'aïe Donc t'as peut-être pas fini Si si j'ai fini Gérard C'est bon ? Gérard Oui Il y a Serval qui me demande Enfin qui te demande S'il y a être une star politique S'il vous plaît S'il y a être une star politique Dans les Mercedes C'est dangereux Non Je vois le rapport Qui veut en venir Mais Moi je vois pas Je le vois pas Gérard Si si Non mais moi je vois Hey Bulldog mystère Là tu t'écrases Ça commence à bien faire Bulldog mystère Quoi il y a histoire d'un pont Dans la Non non mais c'est bon Je vois ce qu'il voulait dire Donc c'est pour ça Que j'y réponds pas Alors Ok Voilà Donc Huitième question Les extras Les extras Les extra-intérêts Doivent-ils faire De la politique On va demander ça Attends Manu Oui oui oui A la place de X Qui est raccroché On ne sait pas pourquoi On accueille Jean-Pitivier Ben X C'est plus là Non elle est raccrochée Alors donc Ben faudra la rappeler Jean-Pitivier On n'a plus de ligne Pour l'instant Gérard Jean-Pitivier Tu me refais Une fiche Je veux qu'on rappelle Ma sœur Oh toi Bulldog mystère Tout à l'heure C'est toi Qui m'a rappelé Tu m'as dégagé Oui ça va me faire Une ligne de libre Oui bonsoir Jean-Pitivier Oui bonsoir Bonsoir Alors je travaille Je suis Maire, sénateur, député De l'Aviron J'écoute vos débats Depuis tout à l'heure Sur la politique Je trouve ça très sympathique Mais je trouve que ça n'a aucun intérêt Pourquoi je m'explique Vous vous allez parler D'ailleurs je vous ai entendu dire Là où sont les extra-intérêts Je pense que vous prenez Un petit peu à la légère La politique Et qu'on est en train De dénaturer un petit peu Tout ce milieu de la politique Qui est certes Magouille et peau de vin Mais c'est en même temps Grâce à la politique Qu'on peut faire avancer le pays Et je vous entends tout à l'heure Poser des questions du genre Est-ce qu'on peut être amoureux En faisant de la politique C'est bidon C'est admissible Bon alors Bulldog Milster Tu dégages pour deux Bon ce coup là Allez hop Ça t'apprendra à couper La parole Jean Je pense que vous abusez un petit peu Que vous avez tendance Un petit peu à prendre à la légère Ça sert à rien de faire Un débat sur la politique Si c'est pour l'aborder D'une manière rigolote À ce moment-là Vous faites un débat Sur les strings Ou sur la sodomie Mais ne venez pas nous emmerder On va faire des débats Sur la politique Oui la sodomie La sodomie ça c'est bien ça Bon de toute manière C'est pas moi qui ai décidé De faire ce débat là Dans ces cas-là Vous appellerez Non mais dans ces cas-là Monsieur vous assumez Vos responsabilités Bon alors dans ces cas-là Si c'est pour réagir comme ça C'est pas la peine d'appeler Ok ? Non mais écoutez J'essaie de le dire Vous êtes en train de vous énerver On dirait Vous êtes vous-même Un homme politique Et je trouve ça très décevant De votre part Non mais moi je fais les débats Qu'on me dit de faire Parce que vous avez l'air Aussi débile qu'un homme politique Ouais bah alors si ça vous plaît pas Bah dans ces cas-là Vous restez chez vous Moi ça me plaît Mais c'est sûr que je voterai pas Pour votre gueule Bah tant mieux Bah moi non plus Et moi je voulais dire Que j'avais la Gérardo Zablak Bon allez Celui-là tu me le vire là Le bulldog mystère J'avais pas entendu Hop terminé pour lui Monsieur Gérard Est-ce que vous avez voté Dernièrement pour les cantonales ? Ça ça vous regarde pas Voilà D'accord ? Est-ce que toi t'as déjà été voté ? C'est une bonne question ça On parle de politique Bah de toute manière J'ai déjà été voté C'est tout Pourquoi vous êtes de droite RPR ? Non non mais ça c'est pas Ça je vous dirai pas mon parti Parce qu'on parlait tout à l'heure De Jean-Marie Guigou Un homme politique Que j'aime beaucoup Demeurent Et on parle pas suffisamment D'hommes politiques Des politiques Je veux dire Qu'est-ce que vous pensez de la gauche ? Le RPR de gauche ? Non non mais ça On en a rien à foutre J'ai dit que Je voulais pas parler des partis Alors vous n'en avez rien à foutre Et dès qu'il faut parler de politique Vous quand même parlez des partis Non non mais moi je parle pas des partis C'est tout Si ça vous plaît pas Vous raccrochez Vous restez chez vous C'est tout Non mais c'est débile De parler de politique Avec des extraterrestres Bon c'est bon Ça y est ça y est On a compris Merci Vous êtes cons alors A la place de Bulldog Mystère On accueille Pitbull secret Bonsoir Gérard vite fait Sur IRC Y'a ce nul Qui te demande Si tu connaîtrais Un président idéal Non Alors donc On va poser la Il répond à aucune question Il est con comme ça Bon alors Jean-Petit Viens vous dégagez Ça vous apprendra De m'insulter Hop Tu peux le dire Attendez monsieur Insulter Allez allez C'est bon c'est bon C'est bon c'est bon Insulter ça fait partie Du milieu politique C'est normal C'est ça c'est ça Allez restez chez vous On insulte Allez allez C'est bon c'est bon C'est bon Allez allez Alors les extraterrestres Doivent-ils perdre la politique On se retrouve tout de suite après Vous allez y réfléchir Et on va s'écouter Gilles Duboudin Avec mes Des baskets Pour manger Du pâté Et on se retrouve tout de suite après On va saluer à tout le monde Voilà je voulais saluer Tous les gens de l'IRC A savoir On est quand même 1350,2 Mais ça je suis perso On s'en fout Ce qui est pas mal Je voulais saluer Est-ce que je les cite tous Non non non C'est bon C'est bon Salut le pop Avant de Jérin Avant de reprendre On accueille Jean Cotivier Bonsoir Bonsoir Bonsoir Ça s'appelle un blanc Merci Gérard Bonsoir Donc On va parler On va Je vais vous donner Un petit sondage là quand même Parce que Rapidement Allo Rapidement Oui Donc qu'est-ce qu'il nous fait lui là ? Gère-le Gère-le là Parce que ça va pas Donc tout le monde A la question Tout le monde Peut-il faire de la politique Allo Bon tu te tais s'il te plaît Merci A la question Tout le monde Peut-il faire de la politique Alors il y a 50% des gens Qui ont répondu Qu'il faut obligatoirement Posséder Allo Et moi j'entends plus Gérard Il y a un problème au standard ou quoi ? Allo Allo Qu'est-ce qu'il se passe là Mani ? Bah non il y a rien Il y a rien Allo Et là c'est bon ? Allo Vous nous entendez là ? Bah non On t'entend plus Gérard mais Vous m'entendez ? Vous m'entendez ? Allo Allo Allo J'entends Mani ouais Gérard parle un coup Allo Allo On n'entend plus Gérard Ouais mais qu'est-ce que tu me fais toi là ? Fildar Fildar merde C'est toi qui fais des conneries encore Mais non j'ai bien fait Allo On t'entend pas Gérard Assuré RC ils t'entendent plus non plus Qu'est-ce qu'il se passe là Fildar ? Qu'est-ce que t'es en train de déconner là ? J'ai vu une claque J'attends Fildar Le bouton là Fildar Lequel ? Celui-là le petit blanc là Désenclenche-le Voilà Voilà j'ai bon Voilà on t'entend là Voilà Fildar T'arrêtes de faire tes conneries oui Allo moi j'entends rien Allo Wow Ah ça a coupé encore Allo Fildar merde Bon voilà la question Tout le monde peut-il faire de la politique Allo Oh t'arrêtes avec tes allos toi Monsieur vous m'entendez ? Est-ce que vous nous entendez là ? Gérard est-ce que tu... Allo Oh Fildar merde Mais j'ai rien fait Mais lui de droite Mais y'a rien là Y'a rien Y'a rien Y'a rien Y'a rien là Mais c'est encore coupé là Mais Fildar je suis fait là Fildar il se fout de toi Mais lui de droite Gérard on n'entend plus ta grosse gamelle Oh c'est quoi ce bordel là ? Mais non mais moi je continue pas comme ça Allo les auditeurs Les auditeurs vous m'entendez ? Attends je vais laisser ce bouton là Et là ça va mieux ? Mais non n'insistez pas On n'entend pas on vous dit Et là ? Et là vous vous entendez ? Non on n'entend pas N'insistez pas On n'entend pas On n'entend pas le gros con là Le gros con il t'emmerde toi pédé Mais d'où ce con là ? Je comprends pas Manu c'est du standard C'est pas possible Ça vient pas de moi Ça vient pas de moi Ah ça y est on entend Allo ? Ouais Ouais bah c'est bon allo Ah bah voilà Ah oui voilà c'est bon Donc y'a la question Tout le monde peut-il perdre la politique ? Celui qui m'a traité de gros con Je te préviens que je t'emmerde Toi gros pédé d'accord ? Oh Gérard Pas de vulgarité Je te préviens Tu restes poli ok ? C'est bon c'est bon Gérard On y va Alors donc 50% des gens ont répondu Qu'il faut obligatoirement procéder Oh putain Manu C'est bien tu me sacs Tu me sacs celui de Allo C'est pas de sa faute C'est nous Non non mais il va pas me percher Toute la soirée avec Allo allo allo Qu'est-ce qu'il se passe Manu ? On entend plus Gérard là Bon qu'est-ce que t'as fait Gérard ? Tout marchait bien là T'arrêtes de déconner ou quoi ? Ouais bah je vous entends moi aussi Mais vous entendez plus Gérard Bah je sais pas ce qu'il se passe Il est parti là ? Gérard t'es là ? Non non il est là mais Je pense que le débat il va s'arrêter N'invitez pas on vous entend pas Non mais attends il déconne depuis tout à l'heure lui Y'a rien là Ah mais ouais mais c'est normal Faut appuyer là t'appuyez là Voilà c'est bon vous m'entendez là ? Ouais impeccable Ohlala t'es vraiment un cave Impeccable Gérard Bah je le savais pas Ouais non mais tu vas le savoir Tout à l'heure tu vas te prendre une gaufre Ils ont changé Bah au chocolat Alors tout le monde doit-il Tout le monde peut-il perdre de la politique Sur la question Donc y'a 50% des gens qui ont répondu Qu'il faut obligatoirement posséder Un chromosome de 2 mois Je vois pas ce que ça veut Si c'est plus ça va mieux Quand t'as un chromosome de 2 mois T'as moins de chance 40% des gens ont répondu Que oui puisque c'est Gérard Et le président des cons Bah moi je l'emmerde celui qui a répondu ça Ça c'est des sondages de merde Non Olivier Delapro Et voilà ça m'étonne pas lui 10% des gens qui ont répondu merde Ah bah c'est bien Si c'est Olivier Delapro Qui s'amuse à faire des sondages comme ça Le deuxième il passe le carré au cul C'est quoi ce chromosome ? J'en sais rien Sinon sur l'ERC Y'a un seigneur qui dit Que son chien fait de la politique Sa queue part en sucette vers la droite Et il a son permis d'érection Alors saucisson à laïc t'es toujours là ? Oui oui je suis toujours là Casse couille Pas de problème je suis là Toujours là Cétrouille Ouais je suis là Téton Bah ouais Pic boule Pic bulle Pic bulle secret Pic bulle Bonsoir Bonsoir et... Jean Jean Cotivier Jean Cotivier Oui Oh tu te réveilles hein ? Allo Oh tu te réveilles ? Allo Oui Allo On entend une barbe Merde C'est trop facile Non fais gaffe Parce que tu as retourné chez toi tout à l'heure Je le sens hein Dans ta voiture caca Ouais Dans sa merde Bon la question Gérard Alors donc Vous avez Bon s'il vous plaît vous vous calmez Merci Pour les écologistes dans 15 jours Pour les élections Je voudrais parler du pétard à Guigou Bon toi ta gueule D'accord Donc vous avez On a dit qu'on allait changer la question Sans écologie Extraterrestre Et qu'on allait parler du président de l'Allemagne Ouais donc qui s'appelle ? Gérald Krafner Voilà Donc vous en avez entendu Gérald Roswell Putain tu vas fermer ta gueule toi Tu vas la fermer ta gueule quand je parle ? C'est quoi l'histoire de l'Allemagne ? C'est quoi ? J'ai pas compris Non c'est un pays qui était Qui était machiné par un autre chancelier Et maintenant ça a changé Non un chandelier Un chandelier Un chancelier Non on me confirme c'est chandelier Non c'est chanc... Chancelier vous savez rien du tout Alors taisez-vous Chancouille C'est les bougies là Mais vous allez vous chalmer ou quoi là ? Gérald ça se trouve où l'Allemagne ? L'Allemagne ça se trouve du côté de Du Pakistan un peu ou pas ? Non du côté de Strasbourg par là Vers Strasbourg de toute manière Il y a une frontière qui se trouve à la limite de Strasbourg Dans la banlieue ? Il y a une île pas loin non ? Non il n'y a pas d'île Parce que toi tu viens d'une île toi ? Bah ouais Tahiti excuse-moi Ouais tu viens d'une île des cacahuètes Donc alors je pense que vous en avez tout le temps Je voulais savoir juste l'Allemagne C'est bien là où il y avait eu Marguerite Non c'est pas du tout là Ça c'est en Angleterre On va peut-être pas confondre l'Angleterre et l'Allemagne Bon alors c'est quoi la question ? Donc vous en avez entendu parler Donc qu'est-ce que vous pensez qu'il va faire lui maintenant ? Ben Edmund Cole je pense que c'est bien qu'il soit passé au pouvoir Non mais il a été viré Il a été remplacé à Brouty Vous êtes peut-être au courant de choses que nous on ne sait pas Moi en tout cas je sais que Moi en tout cas je sais qu'Edmund Cole Qui est en contact avec Marguerite Thatcher Non mais écoute Écoute bien ce qu'on vient de te dire Qui n'est plus Président de l'Allemagne Je fais de la politique alors En Allemagne moi je sais de quoi je parle Parce que moi j'ai vécu en Allemagne La capitale à Bucarest pendant pas mal d'années Non mais Bucarest c'est pas la capitale de l'Allemagne à Brouty C'est la préfecture C'est la préfecture C'est en Suisse Bucarest Ah ouais c'est une ville jumelée Je pense qu'on va pas s'éterniser trop Sur cette question là Justement si il y a un mec qui veut répondre à cette question C'est ça qu'a merde Il dit qu'il va faire comme Clinton Il va sauter sa secrétaire C'est bien il fait ce qu'il veut Il fait ce qu'il veut de son cul Juste c'est dire que l'Allemagne c'est quand même la plus belle ville fleurie C'est tout Avec Strasbourg derrière Le secrétaire allemand démangeait de la bière Et puis il buvait des patates Tu te calmes un petit peu toi J'étais trop bonne Mais ta question c'est quoi ? Ma question je vais vous la poser Parce que c'était pas du tout prévu dans ce truc là Il y a eu une question avant sur IRC Une question de Turpentine qui te demande Gérard Où est-ce que tu es ? Est-ce qu'on peut apprendre à voter ? Où on peut apprendre à voter ? Il n'y a pas besoin d'apprendre Non pas du tout Alors toi tu as commencé par fermer ton clapet Parce que tu as viré toi Tu as déjà voté Gérard ? Tu commences à être vulgaire encore toi Une dédiffune à Elisabeth Guigou Ça nous écoute Alors toi Jean Gauthier ou Pitbull Vous allez vous calmer parce que vous allez rejerber Je pense que je vous avais dit de ne pas revenir Vous êtes revenu sous d'autres noms Non à peine Parce que pas On va peut-être revenir Gérard il a décidé de s'arrêter de voter Le jour au Krasniki il a décidé d'arrêter la politique Et ta connerie elle a arrêté de voter quand toi ? Gérard c'est Krasniki Avec 15 000 millions d'auditeurs 15 000 millions 1 million 15 000 millions d'auditeurs Reprends la question Tu te calmes Je vais les calmer mais reprends 15 000 millions d'auditeurs Reprends le débat Gérard Reprends la question on y va Alors donc il y a une question que je voulais poser Parce que tout le monde... 15 000 millions d'auditeurs 15 000 millions Putain je t'entends plus Gérard encore Putain merde Manu s'il te plaît Vous l'entendez Gérard là ? Fildar qu'est-ce que tu t'amuses là ? Je cherche un disque Fildar ! Quoi ? Max il t'a dit d'aider alors tu remets les auditeurs Regarde tu lui mets des bâtons dans les crouilles Vous avez entendu parler des grèves en ce moment Je pense que vous en avez tous ras le bol Ah bon il y a des grèves ? Oui il y a des grèves Il y a des grèves encore Où ça ? Bah la grève du coeur Non il n'y a pas des grèves Ça c'est la grève à Brouty Les routiers sont en grève Non non vous avez... Les routiers c'est des feignants Oh ta gueule toi Là comme ça t'es tranquille toi Au moins je vais t'avoir répondu tout de suite toi Il y a la grève des... Il n'y a que de kilomètres qui parcourent Il y a la grève des porcs là Des trucs de porcs en ce moment Ouais il y a ça Il y a aussi... Demain il y a la RATP je crois Demain... Ah s'il vous plaît vous fermez vos gueules quand je parle Merci C'est la grève des porcs C'est-à-dire que ta femme elle est en grève en ce moment Tu sais qu'il vient de dire ça Ça te rend le kilo de Sandy là Alors tu me viens... Je ne sais pas qui c'est Tu gères Manu parce que là on n'en a pas le bol Je sais je sais je vais essayer C'est impossible de faire un débat potable Non non non moi je n'ai rien fait moi Non non c'est pas... On ne peut pas faire un débat potable Donc vous avez entendu ? Moi je me casse, salut Salut Au revoir C'est un con Svab C'est qui ? C'est Jean Cotivier Il n'est pas content comme ça il... Gérard Pour revenir sur le débat Sur IRC on me demande si un bulletin blanc est réutilisable Non Non un bulletin blanc ne peut... Un bulletin blanc de toute manière ne servira à rien Parce que c'est un bulletin qu'il n'y a rien à écrire Non non non C'est simplement une enveloppe blanche qui ne peut pas être réutilisable Au deuxième tour peut-être si Parce que si la personne veut re-voter blanc Re-vote blanc Non non non il ne la garde pas Ils n'ont pas le droit Mais est-ce qu'ils gardent le même... Est-ce qu'ils gardent le même ticket ou... Non non non Bah si on peut réécrire dessus Mais c'est une technique écrécrable Non non mais attendez Moi je trouve ça lamentable C'est bon Non mais moi je peux vous dire une chose Que les papiers une fois qu'ils sont servis Sont détruits ou même brûlés Mais c'est n'importe quoi Non mais attend c'est ce que je parle Mais ils en font du PQ après Mais oui c'est ça Non parce que je suis désolé Parce que les billets ce n'est pas combustible Non non mais attend Si tu parles du prix comme Gainsbourg Qui a brûlé 500 balles en direct à la télé Fais-moi confiance qu'il faut complètement être starbé Il n'y a pas de rapport Donc alors moi je peux vous dire qu'en ce moment Vas-y vas-y Non non vas-y Alors oui bon vite fait Il y a Turpentine Qui te demande si tu as déjà voté par procuration Justement c'est la question On allait en venir On accueille Vaseline A la place de Cotivier Salut Vaseline Salut Vaseline Alors donc On était sur les grèves Vous en avez entendu parler Je pense qu'il y en a pas mal d'entre vous Je crois qu'ils sont encore étudiants je pense J'ai une question de J'ai pété Gérard est-ce que c'est vrai que les électeurs Pour voter doivent glisser leurs enveloppes Dans ton urne à caca Alors là tu peux dire à ce petit con C'est qui C'est Pitbull Non mais il est là Non mais il n'y en a pas qu'un Pitbull en France Non mais je vais dire que celui-là Je l'emmerde sur Minitel d'accord Fildar je t'ai prévenu de ne pas me couper Sur des questions con Minitel Au lieu de te marrer parce que tout à l'heure Je vais me lever et tu vas te foutre une gaufre De toute manière au deuxième débat C'est là ta place Ouais je vais l'arrêter Voilà Tu te trompes Non mais c'est bon c'est bon Tu calmes tes nerfs Manu Mais t'éteins ton micro merci Alors donc je pense que Certains d'entre vous sont encore étudiants Dans tout ce qu'il nous reste Saucisson à l'ail Donc t'es encore étudiante toi Non pas du tout Oui moi je fais des études en sorcellerie Et j'ai pris option en chaudronnerie N'importe quoi Citrouille Non moi je ne suis pas étudiante je ne suis pas une saignante D'accord Teton Ouais moi je suis étudiante Pitbull Moi je suis Alénal Clodo Bon toi tu vas te calmer parce que tout à l'heure tu as viré Hein Tony ? Hein Tony ? De quoi tu parles là genre ? Tony il est parti tout à l'heure Vaseline donc toi ? Bah moi je suis dans la vie rétroactive Non mais est-ce que t'es étudiant ou pas ? Bah non je suis dans la vie rétroactive T'es dans un tube aussi Bah en tube ou en comprimé Non mais je pense que Pour ceux qui sont étudiants je pense que pour vous les grèves Vous en avez ras le bol aussi vous Vous avez bien que vous vous attendez Je pense que vous voulez bien que ça se termine Et qu'ils trouvent un moyen Pour que ça cesse Le nombre d'élèves dans les classes Ah bah tu m'étonnes on a envie de bosser nous En plus ils peuvent même pas aller faire la grève Parce qu'il y a les grèves des métros Non non non Si demain ? Non Je te jure que si Moi je te dis que non Alors là tu te mets bien profond dans le cul toi Mais attends C'est pas imaginable Donc je peux vous dire que ça ça faudrait que ça cesse Et que l'autre là celui qui s'occupe de ça Des étudiants Face à ce qu'il a promis Parce que sa confiance A devenir chiant pour vous Vous pouvez pas suivre vos études Voilà bravo On va pas s'éterniser sur cette question C'est un petit point Que je voulais faire parce que Maxime en a parlé Donc on a fait le tour à peu près de la question Donc maintenant je vais vous demander Est-ce qu'il y en a parmi vous Qui ont déjà voté par correspondance ? Ouais moi Non mais parmi les auditeurs Ah non moi j'étais abonné à J'aime lire c'est tout Non mais attends toi tu vas répondre correctement A la question parce que sinon tu vas gerber Très vite maintenant Parce que je veux pas me laisser emmerder Dans les douze dernières minutes qui nous restent du débat Je vous préviens d'entrer Alors Vaseline Par correspondance Tu peux préciser un petit peu Qu'est-ce que tu veux dire C'est-à-dire que t'envoies ton bulletin de vote à de la famille Non non non par correspondance Par exemple si tu pars en vacances au moment des élections Tu peux demander à quelqu'un de ta famille De voter pour toi en laissant ta carte D'identité c'est ça la correspondance Si j'étais moins con il serait pas des élections Pendant les vacances Non mais regarde quand il y a des ponts Par exemple comme au mois de mai Comme ça s'est passé là Au mois de mai abruti Non mais on parle pas du pont de l'Allemagne C'était pas au mois de mai c'était au mois d'août en plus C'est quoi une procuration ? Une procuration c'est que tu donnes l'autorisation par exemple A quelqu'un de ta famille pour aller voter pour toi Et comment on fait pour donner l'autorisation ? Comment ? Et comment on fait pour donner l'autorisation ? Au commissariat de police Le plus proche de chez toi Ou tu vas même à la mairie et tu leur demandes Tu dis voilà je suis pas là Pendant le temps des élections Est-ce que je peux donner l'autorisation à mes parents ? Donc en fait si toi tu vas pas voter Je peux me pointer à ta mairie et dire voilà Je viens de la part de Gérard et je vais voter pour lui Non mais à une condition que moi je signe Parce qu'il faut que la personne intéressée signe aussi Mais comment peux-tu être sûr Que la personne va voter ce que tu veux ? Ah non mais ça c'est sûr ça là-dessus Je suis d'accord avec toi Mais ça c'est C'est pour voir avec quelqu'un de ta famille Tu peux très bien dire à la personne de ta famille Tu mets rien dans l'enveloppe, basta Ouais mais je crois que c'était personnel Que t'avais le droit de le dire à personne Ouais mais si tu veux voter blanc, tu votes blanc c'est tout Gérard il fait caca partout mais il vote écologiste Ouais moi je t'emmerde toi J'ai vraiment pique-bulle Oui Régo Sur IRC il y a Pingouin qui te demande s'il faut un isoloir Pour voter par correspondance Non pas spécialement Est-ce qu'il faut un abonnement ? Non plus Est-ce qu'on peut voter dans le noir ? En principe quand tu tires le rideau Bien sûr tu peux voter dans le noir Comment ça ? Normalement t'es une voiture, moi je regarde l'émission tous les soirs Non t'es toi toi Et il y a Le Chien aussi qui te demande si on peut continuer à voter Quand le vote est fini Non je pense pas, une fois que c'est terminé à partir de 8h A partir de 20h ils peuvent plus voter Mais alors pourquoi les résultats ils arrivent après 8h ? Parce que le temps Il y a le dépouillement déjà à 8h S'il vous plaît vous me laissez parler Je réponds à Régo Donc déjà à 8h ils commencent déjà à faire un sondage BBVA pour te dire à peu près Le nombre Si ça s'appelle comme ça Il y a le BBVB aussi Non BBVA et IFOPS Donc ils commencent déjà à te donner Un point de vue sur le nombre De personnes qui ont voté, le nombre d'abstentions Une estimation Une estimation voilà Quand tu parles de dépouillage ça veut dire qu'en fait Ils se bourrent la gueule juste avant quoi Non mais attends c'est qui là qui parle ? C'est qui qui vient de poser là ? C'était ton ? Ouais c'est moi ouais Non mais je crois que la question sur le dépouillage Il y a longtemps qu'elle a été posée Je vois pas ce que tu vas ramener Attends je réponds Je suis en train de te poser une question qui a tout à fait rapport avec ce que tu viens de dire Parce qu'on dit que les résultats sont après 8h Et pendant ce temps là ils font le dépouillage Le dépouillage c'est quoi ? C'est se bourrer la gueule avant ? Mais non c'est de retirer les papiers qui sont dans les enveloppes Voilà tu vois que t'es capable de répondre quand tu veux Il y a longtemps que j'avais répondu déjà Fallait te réveiller un peu A ce sujet Gérard il y a Turpentine qui me demande si c'est des facteurs qui dépouillent les enveloppes Non c'est des gens comme nous Des toxicomanes ? Non non ça peut être des gens comme nous Pas comme toi quand même Moi si je l'ai déjà fait Il l'a fait ? Ah oui il s'est déjà dépouillé Tu l'as fait ? Oui oui ça y est Ça m'étonne pas que la droite est passée Doit-on parler de politique en cours ? Ça va concerner ceux qui font Attends doit-on parler de quoi ? De politique en cours En cours voilà En cours de quoi ? En cours quand t'es à l'école Quand tu cours ? En cours Quand on fait du jogage ? Non non non C'est toi qui me parle en même temps Je croyais que c'était l'autre dindon là-bas Donc saucisson à l'ail Bah écoute moi ça fait longtemps que je suis plus à l'école Parle un peu plus fort Je dis ça fait longtemps que je suis plus allée à l'école Donc je peux pas vraiment répondre Mais je pense que de toute façon c'est interdit Ouais bah de toute manière Tu peux enculer à partir du moment où tu parles de politique Non mais t'en as beaucoup qui essayent d'en parler Oui qui essayent mais enfin ils se font vite Vite casser en général Ouais mais dans les lycées je pense que S'ils sont pas pronds ils peuvent en discuter entre eux Ah ouais non mais là y'a pas de problème c'est sûr Ok Casse-couille Ouais non en cours non on parle pas de politique A part des fois d'Elisabeth Guigou mais sinon Bon alors casse-couille là tu te casses Comme ça tu me les casseras plus Allez c'est terminé pour lui Ça a commencé à me les gonfler Qu'on arrête pas de parler d'elle Alors ce coup là terminé C'est trouille Ouais alors moi une fois y'a un prof qu'on a parlé Il a pas le droit J'ai porté plainte Et le mec il est radié d'éducation nationale Non mais attends parce que souvent Ah attendez s'il vous plaît Je vais répondre quand même à cette rouille Souvent t'as des profs qui en parlent pour dire à peu près Ce qu'ils en pensent C'est sûr que normalement ils ont pas le droit Ils ont pas le droit C'est pour essayer de machiner un peu l'atmosphère Mais je pense que c'est sûr Ils ont pas le droit Mais oui je sais Donc t'es ton ? Non ils ont pas le droit d'en parler c'est interdit par la loi D'accord Pic Bull Bah moi j'échangerais jamais un cours de politique Contre le cours de bio La reproduction des bonus colantartiques Ouais c'est ça t'as raison toi Gérard excuse moi à la place de caisse Couille on accueille Pé de Burne Bonsoir Gérard bonsoir à tous Salut Pé de Burne Vas-y Gérard je crois que tu peux parler maintenant Donc je te répète la question Comme t'étais au standard Donc doit-on parler de De politique en cours Donc Donc Pour toi Bah je pense que les élèves quand ils sont en cours Ils ont d'autres trucs à faire Bah oui mais est-ce qu'on a le droit d'en parler Tu me diras surtout qu'en ce moment il y a certains problèmes On en a discuté tout à l'heure Sur les histoires des grèves qui commencent à nous prendre la tête On en a ras le bol Pour les étudiants ils en ont marre aussi C'est des feignants Mais ouais mais c'est des feignants Non c'est pas des feignants C'est les profs qui sont des feignants Parce qu'ils veulent pas Comme les routiers c'est des feignants Oh ta gueule toi C'est des alcooliques Bon alors toi ces trucs tu dégages C'est pas moi Non mais t'es pas visé qu'on dit alcoolique Non mais t'es ton pour toi Oui Donc toi Oh vous vous réveillez là Vous répondez aux questions Mais je t'entends pas Gérard Alors peut-on Doit-on parler de politique en cours Allo C'est interdit C'est quoi Ah ça c'est Fildar ça Ah là là Mais lui une droite Tu me fais pas gueule ou quoi toi là Bah j'ai rien fait Non tu me coupes les auditeurs Ça va pas non Bah oui j'ai guéri dans la gueule Donc t'es ton Ouais bah je t'ai répondu il y a deux minutes Gérard Donc Pic Bull Bah moi aussi Ok Vaseline Ouais bah doit-on en parler en cours Moi je dis si les filles elles se mettent des doigts dans les cours Ça le fait pas Bon d'accord je vois pas du tout le rapport Bah doit-on tu dis doit-on Bah si elles se touchent c'est pas bien Bon alors les sondages Avant de faire la conclusion Je vais donner les Un petit sondage rapide ouais Les deux derniers sondages qu'on a Donc à la question La politique est-elle bien faite en France ? Il y a 60% des gens qui disent qu'elle est bonne Avec des dessins énormes Ça je vois pas Ça c'est bien signé Olivier de la production Pour me sortir des conneries comme ça 40% des gens qui disent Que la maquette on voit des traces de colle Donc ça je vois pas du tout le rapport Avec la politique Olivier de la pro Après question À la question Votez-vous Non non t'as rien fait Tu me prends pour un con toi Tu me prends pour un con non ? Termine Gérard termine Donc à la question Votez-vous souvent Donc il y a 40% des gens Qui disent qu'ils votent Qu'ils rotaient seulement après avoir bu du coca Donc je vois pas du tout C'est bien lui 36% des gens qui ont dit Qu'ils votaient plus de 6 fois par jour Donc je vois pas du tout le rapport non plus Et 30% des gens Qui ont dit Qu'ils ne votaient jamais Car Gérard ne s'est jamais présenté Aux élections Et je me présenterai jamais Donc pour terminer Une petite question Vite fait sur IRC Il y a Orki qui te demande Qu'est-ce qu'on gagne Quand notre bulletin est tiré au sort En fait Non mais attends Je vois pas du tout Son bulletin au sort C'est dans les jeux Donc ça je m'en fous C'est pas dans la politique Une Twingo Ouais une Twingo Une Kangoo tiens Ouais pourquoi pas s'il veut Donc on va perdre la conclusion du débat Ouais Donc il est 57 Donc saucisson à la gueule Bah écoute Laisse passer les autres Après je répondrai Bon ok Vaseline Ouais bah je sais pas Je voulais te féliciter Pour la manière dont t'as présenté La dualité indicible De la phénoménologie intrinsèque du problème Et puis au revoir pour ton débat Bon allez ça commence à devenir l'autre Ta conclusion c'était ça pour me dire ? C'était bidon Bon alors pig bull Pig bull une fois Ouais ouais c'est moi Alors Donc moi je fais toujours ma dédicienne A Elisabeth Guigou si tu m'écoutes Alors allez hop c'est bien Tu peux rentrer chez toi Maintenant t'as la conclusion à la fête Voilà Alors Vaseline Vaseline C'est la fête Déjà fait Déjà fait ? Non parce que j'ai pas Si si Non t'es ton parton Bah moi je dirais que la politique C'est comme toi Gérard C'est catastrophique quand on en parle Eh bah c'est bien Si c'est pour ça que t'as voulu participer au débat C'est bien Bah ouais je fais ce que je veux Je suis assez grande Bah de toute manière tu fais ce que tu veux Moi aussi je fais ce que je veux Bah moi aussi je fais ce que je veux Je suis majeur à vacciner J'ai pas besoin de Pourquoi tu me parles d'abord ? Bon bah alors je te demande la conclusion Donc tu réponds et c'est tout Eh bah donc la conclusion C'est la politique C'est comme toi C'est catastrophique quand on en parle Point barre Eh bah alors ok bah salut Allez bonne nuit Citrouille Ouais Moi je dis Des poivrons Hein ? Je dis les politiciens C'est comme les routiers C'est des poivrons D'accord Eh bah alors c'est sympa C'est bien parce qu'il y en a beaucoup Qui ont entendu ce que tu viens de dire Petite Burne Pet Burne Pet Burne Ouais Moi je dois dire que T'as souvent trouvé Qu'il y avait des questions Qui avaient pas de rapport Mais faut être indulgent Avec ceux qui disent des trucs Qui ont pas de rapport Parce que toi tes questions Bon elles ont pas trop de rapport Entre elles aussi donc Non mais attends Mais dans ces cas là T'avais qu'à écouter dès le début T'aurais peut-être pu Comprendre plus Ouais bah dans ces cas là T'avais qu'à comprendre Les questions qu'on a posées Parce que je trouve que On a fait quand même Largement le tour De tout ce qui se passe En France Ouais mais t'as quand même parlé Des extraterrestres Bon Non non non Justement ça a pas été fait Je suis désolé La question elle a pas été faite On a passé sur le truc Ouais mais tu l'as cité quand même Ouais non non Mais on l'a pas faite Donc nuance Faut pas confondre Entre citer et l'avoir fait Ok ? Euh oui Pour finir Hugo alors Oui donc une conclusion Hier c'est de Daube Avant de voter Mettez une capote C'est important Contre le cancer du sida Surtout si vous êtes Homosexuel Non mais ça c'est C'est même pas une question Que je vais faire Dans les maladies Tout à l'heure Après les deux disques Saut s'ils sont à l'aïe Pour terminer la conclusion Bah écoute J'ai pas trouvé Que c'était un débat Très intéressant Parce que vu les conneries Que tout le monde faisait C'était pas génial Ouais non mais d'accord Bah c'est ça De toute manière Je m'en doutais un peu De toute manière Que ça allait foirer Un tout petit peu Non c'était bien C'était bien Ouais ouais Non non mais quand j'ai Un abruti de câble Qui me fait que des conneries Je vais faire la vraie Un fil d'art Donc moi je peux vous dire Une chose Que c'est dommage Qu'on a pas trop de temps Pour continuer Parce qu'on a C'est vrai que t'as tellement De trucs à dire sur la politique On est tellement pris Par le temps Donc moi je peux vous dire Une chose C'est qu'à l'heure actuelle C'est vrai Ce qui est bien en même temps Excuse-moi c'est Max C'est que tu disais au début Que tu voulais pas faire un débat Et en même temps Ta conclusion c'est dommage Qu'on ait pas eu assez de temps D'en parler plus longtemps Tu voudrais parler plus longtemps D'un débat que tu ne veux pas faire C'est bien ? Non parce qu'il y a Certaines questions Qu'on aurait pu plus approfondir C'est à dire sur les grèves Il devrait y avoir la suite Dans les mois à venir Ouais bah ça On verra On attendra le sondage Du premier On attend de voir Si Bill Clinton est encore Au président Soit écrase Donc la conclusion C'est vrai qu'en ce moment On a parlé pas mal de grèves Et ça c'est vrai Que c'est chiant pour tout le monde Les grèves Ce qui se passe à l'heure actuelle Donc maintenant C'est au gouvernement De s'en prendre après Ils font ce qu'ils veulent Ils nous emmerdent pas Avec leur connerie Et ils font ce qu'ils peuvent Ok voilà Donc on va se quitter Et on va se quitter pour Pour mieux se retrouver tout à l'heure Pour mieux se retrouver tout à l'heure Sur les maladies Donc on va se quitter Avec Marie-Josée Perrec Avec les cafards C'est meilleur chez soi Et vous pouvez nous appeler Toujours au 0803 0803 5 000 Toujours 36 15 Camphone Radio Rubrique directe Et l'IRCD On était combien ? On est actuellement 1428,6 C'est bien On continue On continue Allez à tout de suite == Le débat sur les maladies == === Contexte === === Les personnages === === Transcription === C'était bien ça, c'est quoi ? C'était Marie-Josée Perrecq avec les capards C'est Meilleur Chez Soi Donc vous pouvez toujours nous appeler au 0803 08 5000 08 175 000 Toujours 36 15 4 Fun Radio rubrique directe et sur l'internet de Rigaud qui y est toujours Donc www.frfunradio je sais plus quoi Slash Fun Radio Ouais Slash Fun Radio on était 1400 je sais plus combien On a dépassé, on arrive à 1584,1 Oh là là là, bravo Gérard Combien j'ai cru mal entendre là ? 1584,1 Ah d'accord, c'est pas mal Alors on va accueillir Potchambe, 21 ans de Montluçon On écoute Fun Radio sur 92.1 Bonsoir Bonsoir Jamal, 24 ans de Brest, 103.2 Ouais salut Girose, 20 ans Cirose Cirose, du foie 20 ans Paris, 101.9 Bonsoir Bonsoir, je sens pas bon je sais pas ce que c'est encore Ouais non C'est quand le matin tu t'habilles et que tu sors directement Quoi ? Hé, à 2h du matin il est pas encore couché lui là ? Il a quel âge ? 12 ans Hé non non Salut, salut Non non, ça va pas non ? Bah quoi ? Ouais bah j'ai le droit quand même, j'ai pas le cours, je suis en vacances C'est les vacances Gérard C'est les vacances on peut On écoute Fun Radio Gap 90.7 On écoute, t'as pas de problème S'il te plaît, 22 ans de Dieppe, on écoute Fun Radio 100.1 S'il te plaît, 22 ans de Dieppe, on écoute Fun Radio 100.1 S'il te plaît, 22 ans de Dieppe, on écoute Fun Radio 100.1 Salut Gérard Salut, répondez bien quand je parle hein, surtout Dites pas bonsoir quand on vous parle hein, surtout Bonsoir Gérard Oui, bonsoir de 17 ans, on écoute Fun Radio J'habite en Belgique A Bourbon ? A Bourbon A Bourbon ? A Bourlon A Bourlon, pas Bourbon, à Brouty Oh là là, fil d'art Oh là là Et on écoute Fun Radio Belgique 100.9, c'est ça ? Euh ouais, c'est ça Ok Ok Donc alors, le débat c'est sur la maladie Les maladies Les maladies Les petites maladies Donc je pense qu'on en avait déjà discuté la semaine dernière qu'on allait faire ce débat-là Alors, on va poser la question La grippe s'attrape-t-elle sur le menton ? On va demander ça Tiens ben, ah oui De Bourlon Tu peux remettre s'il te plaît ? Oh non ouais, ça va pas commencer hein J'ai pas entendu, j'ai pas entendu la fin de ta putain de question Ma putain de question Attends, merde, si t'es pas contente ma petite Tu vas perdre ton nom Tu vas aller au standard, je vous ai dit Je vais pas me prendre la tête là-dessus Alors, la grippe s'attrape-t-elle sur le menton ? Bah moi je trouve que la grippe s'attrape partout J'en ai attrapé sur la plante de pied, ça me fait prendre du mal D'accord Ok, s'il te plaît, va, s'il te plaît Bah t'es poli, c'est bon Donc toi ? Dans le métro D'accord, je pense que vous êtes vachement bien réveillé pour le deuxième débat, ça fait peur Merci pour le Larsen De rien Dans le TGV aussi Alors, je sens pas bon Bah moi, j'ai pas de J'ai pas de grave maladie Mais bon, je suis jeune, mais je suis déjà très précise quand même Mais la grippe, je sais pas La grippe s'attrape-t-elle sur le menton ? C'est la question, c'est pas une autre question que je te pose Bah moi, les maladies, on m'a pas encore pu Expliquer encore, moi j'ai rien eu au menton Non mais attends En 12 ans, t'as pas eu de maladie, tu me prends pour un con là ? Ouais, j'ai eu la coqueluche, mais c'est tout quoi Ouais, la coqueluche T'as pas un petit problème de voix là ? Si, si, un petit peu, ouais Il a pas encore muté, c'est pour ça Bah ouais, à 12 ans, dis donc, ça fait bien Cirrhose, du foie Bah écoute, je pense que la La grippe peut s'attraper aussi sur le menton Parce que tu peux avoir aussi des boutons sur le menton Ouais, mais de toute manière, la grippe Elle peut s'attraper sur les La grippe peut s'attraper partout Sur les parties les plus sensibles du codor C'est-à-dire celles du milieu Et à 12 ans, tu L'achète, l'achète Ouais, bah, oh sinon Hey, gamin, là, tu vas te calmer Parce que tout à l'heure, tu es allé voir Fildar au standard Excuse-moi, papa Ouais, bah, si tu veux pas choper la grippe sur le menton Tu mets une écharpe, simplement Ouais, d'accord Bah, on dirait que ça vous fait peur Quand je fais le débat sur la maladie Parce que vous êtes à moitié endormi là-dessus Ouais, on a peur de la personne Ils sont reculés un peu de la radio Pour essayer de choper un truc Attends, qu'est-ce que tu viens de dire ? Je sens pas bon, là Je sens pas bon, qu'est-ce que tu viens de dire ? On a pas envie d'avoir une femme Parce que je suis, voilà Ouais, t'es puceau, mais attends Ça va venir Ça va venir, Gérard, il l'a encore Rigo Oui ? Ouais, je suis malade Salut Non, non, mais Alors, faut demander à Gérard Si on peut soigner l'acné juvénile Et si on a des chances un jour De trouver un vaccin pour éradiquer cette maladie Non, mais ça, le problème sur l'acné On va en parler aussi Est-ce qu'il y a plus de chances Ça, c'est Orki qui me demande Enfin, c'est Orki qui me demande Qui te demande Est-ce qu'il y a plus de chances D'attraper des maladies Dans les chiottes de la loco ? Ah, non Non, c'est Gérard Excuse-moi, j'avais pas lu C'est Gérard, il y traîne, ouais Tu sais qui vient de dire ça ? C'est le petit, mais il s'est pas au courant Non, non, non, ça, c'est une bonne nana Donc, pot de chambre ? Ouais, bah moi, je pense que En fait, ça s'attrape par les cheveux Hein ? Par les cheveux, peut-être Par ? Les cheveux Par les cheveux ? Les tifs Ouais, bah, je vois pas du tout le rapport Les poils, les poils Si tu mets pas de bonnet, ça va pas après Moi, Gérard Moi, Gérard Je voulais dire que J'avais aussi attrapé un truc, là Chez le Tobib C'est la Gérardite aiguë Et je peux forniquer qu'avec des boudins Ouais, ouais, je sens pas bon Je sens pas bon Tu vois ce que tu as fait ? Tu vas aller faire dodo Au revoir Sois tolérant Allez, hop Bonne nuit pour lui Gérard Oui ? J'aimerais te poser une question Est-ce que tu crois qu'on peut attraper Les maladies par téléphone ? Euh, non, pas spécialement Pourquoi ? Heureusement Bah, je pense que Je sais pas On sait jamais, hein Bon, ok Gérard Oui ? Sur Minitel, il y a Comment il s'appelle ? Non, je vais pas donner le nom Il nous dit que t'as une tête d'hémorroïde Non, bah, lui C'est quoi un hémorroïde ? C'est beau un hémorroïde Bah, je sais pas C'est pour ça que je demande à Gérard Des hémorroïdes Ça s'attrape Aux couilles Non, non, non C'est dans le derrière Ouais, bah, ouais Ça y est À force de mettre du coton-tige Non, mais c'est que Souvent, Gérard Il a des couilles très proches du derrière C'est peut-être pour ça Alors, là, j'en connais J'en connais Qui parle de coton-tige Si tu continues Je vais pas chercher midi à 14h Je vais en saquer un au hasard Ouais, c'est pas mal Dans ton cul Alors, oui, tu dégages Allez Vous avez dit un dit ? Non, non, c'est personne Je sens pas bon Et je viens de le virer Non, non, mais lui Tu le vires complètement Non, mais ça y est, ça y est Putain, attends, Gérard Je dis rien, tu veux me virer ? Non, non, non, ça y est, ça y est On a trouvé qui c'était C'est bon Oui, Rigaud, il y avait une question Non, qui a passé trop vite Oui, oui, il y en a plein Il y a Viandox qui te demande Si on a des séquelles Après une maladie mortelle Non, ben, je vois pas Parce que si t'es mort Tu peux pas avoir de séquelles Bravo C'est la première fois Donc, la diarrhée s'attrape-t-elle ? Par contre, moi, je peux vous dire une chose Que la grippe Je l'ai jamais attrapée Sous le menton, en principe Tu l'as attrapée où ? Tu l'as attrapée où ? Je l'ai attrapée dans la gorge C'est tout À force de gueuler Elle vient de sortir Souvent, t'as plus de voix Non, mais gorge profonde ou pas ? Ben, ça dépend Des maladies Je pense que t'es plutôt gorge profonde Ouais, gorge profonde à fond Bon, alors, la diarrhée Elle est bien pleine aussi, quand même Tu sais qui parle, là, comme ça ? Ah, c'est pas drôle C'est oui Oui, oui Oui, alors ? Tu disais ? Ah, non, mais attends C'est pas moi, j'ai rien dit S'il te plaît, tu disais ? Moi, je disais rien Ouais, c'est bizarre Il y a une question, là Sur un sondage, encore Je me demande si c'est pas encore Des petites conneries, ça Non, celui-là, il est officiel C'est moi qui l'ai récupéré Hop Hop Bon, excuse-moi, Gérard Je sens pas bon On a Viagra 27 ans De Boulogne Alors, Viagra, bonsoir Bonsoir Il est au travail Ouais Salut, Viagra Donc, moi, je voudrais témoigner En expérience Non, mais tu retires Tu retires tes lois de thé d'arrêt Donc, je te donnerai mieux Non, mais je suis enrhumé C'est sur les maladies Donc, ça tombe très bien Donc, moi, ce que j'ai fait C'est que, bon, là Pauline Viagra Vient d'être introduite en France Non, non, mais attends Attends, pour l'instant Tu vois, c'est pas Je suis pas encore arrivé A cette question-là Alors, tu commences pas A jouer les gros caïds Ok, pas de problème Ok Alors, maintenant Je vais faire le petit sondage Là, qu'on m'a donné Ouais Donc, alors Pour ou contre les maladies Ça, de toute manière J'avais jamais J'en ai marre qu'on mette Des pour ou contre Lors des Sur les Non, mais c'est important De demander ça aux auditeurs Ouais, alors, il y a 10% Qui ont répondu Que la question était trop compliquée Ben, c'est pas mal Ça, c'est 60% des gens ont répondu Mais on ne On ne s'en souvient plus Et 30% des gens Qui sont contre les maladies De l'éléphant qui pue Alors, ça Fille d'or, tu vois Ton sondage comme ça Tu peux te carrer dans le cul Et te torcher avec C'est pas moi On a fait un sondage Sur les auditeurs Comme là, tu vois Ça, c'est La dernière question Avez-vous déjà vu Des maladies Et si oui, pourquoi Tu vois Là, je ne vais même pas y répondre Ça va aller vite fait Voilà Bonjour Allez Alors, l'autre question La diarrhée s'attrape-t-elle En été Ou en hiver En hiver ou en été On va demander à Viagra Ben, c'est plus en été Parce qu'il fait chaud Donc, on transpire Ouais Donc, parce qu'en fait En hiver Le caca a tendance A se solidifier Ouais Donc, ça fait Qu'on chie des pavés de merde D'accord Euh, oui Pour toi Ben, moi, c'est ni en hiver Ni en été C'est en automne D'accord Ben, c'est bien Ben, pourquoi C'est la saison des feuilles Ah ouais, d'accord C'est pas mal Tu vois quoi Ah non, non, mais c'est pas mal Ouais, c'est bien S'il te plaît Ouais, moi, j'ai la diarrhée Quand j'ai la chiasse La chiasse, c'est quoi ? La chiasse, c'est la diarrhée Gérard, est-ce que tu pourrais S'il y a une différence Expliquer Ben, c'est pareil C'est de l'eau Quand t'as la chiasse Tu fais de l'eau Et quand t'as la diarrhée Tu fais de l'eau C'est-à-dire Quand t'as la diarrhée Tu chies de l'eau Donc, c'est pareil Tu peux la récupérer Pour la boire, alors ? Non, non, je pense pas Parce que c'est dégueulasse Pourquoi c'est sans bulle ? Elle recycle tout, l'écologie Euh, c'est plus le thème Sur la politique, bien grave Ok Euh, cirrhose Du foie Alors, tu peux avoir La diarrhée à tout moment Et à toute saison J'en ai rien à foutre Mais alors ? Donc, à toute saison Tu peux avoir la diarrhée À n'importe quel moment Voilà, ça c'est C'est une bonne question Ce que je voulais dire Mais c'est bien On me retire les parles de On me retire les verres du nez J'avale Les verres du cul, c'est la diarrhée Ta gueule, toi J'avale Ouais, ben écoute Plutôt, plutôt en hiver Parce que moi, dans la fois Que j'ai eu la diarrhée J'avais chopé une hépatite G Et j'avais eu Et en plein hiver Et j'avais une chiasse Mais l'enfermé D'accord Un moustache Euh Non mais euh C'est bien Que j'ai ton micro Quand on Là, c'est pareil Alors, euh Donc, euh Peau de chambre Ouais, ben moi Je pense que c'est en automne Puisque je l'ai eu Il y a deux jours Ben, euh Pour un Non, tu l'as eu Il y a deux jours ? Ouais Ah ben d'accord Donc, euh Tu pourrais préciser ? Prouve-le La chiasse, c'est tout Qu'est-ce que tu veux que je fasse ? Prouve-le, pétaco Oh, ça y est Vous vous calmez là-derrière S'il vous plaît Merci Moi, je peux vous dire Que c'est rare Quand j'ai la diarrhée Et ça m'arrive pratiquement jamais Ouais, non Toi, c'est toi la diarrhée Heureusement Parce que ça sera Un sacré bordel chez toi Alors, euh T'es tout petit Tu en dis encore Un mot de travers Je me lève Et je ne mets plus ma main Dans ta gueule C'est pas ta directe Que de la gueule Ok Alors Doit-on Troisième question Doit-on trouver un vaccin Contre le Viagra ? On va demander ça Peau de chambre Ouais, je pense, ouais Ben, allô ? Oh, là, là, là, là, là J'arrête d'être marreuse Sans colline, toi Gérard, ton débat Assieds-toi Fais ton débat Alors, euh Peau de chambre Ouais, j'ai dit ouais Dans quelle phase ? Ben, je dis oui Que je suis d'accord, quoi Mais putain Mais tu vas laisser ton micro Éteint Tu vas faire ton boulot Comme il faut Au standard Ou tu finis le truc de classe Regarde des connards Là, qui font le bordel Tu gères rien Fille d'art C'est une honte Putain, mais Mais quoi Ah, putain Putain, t'es péché, Fille d'art Ouais, ça y est, ça y est La droite, elle est partie, ça y est Ouais, j'ai un coup de tête Un coup de tête Putain, Fille d'art Tu as bossé un peu, là Parce que ça devient Rangaine avec toi, hein Bon, Gérard, en attendant On a une question sur l'IRC Que je trouve intéressante De Blue Falcon Comment attrape-t-on le Viagra ? Alors, ça, le Viagra C'est... Je peux témoigner Moi, je pensais Qu'on l'attrapait au lasso Moi, je peux témoigner C'est Viagra Donc, moi, ce que j'ai fait J'ai un peu décollé, quoi Parce que le Viagra Est venu en France C'est que j'ai pris Dix pilules d'un coup Donc, maintenant À chaque instant, je bande Non, mais ça Ça, de toute manière Normalement, la pilule La pilule contre le Viagra La pilule Le truc du Viagra Normalement, c'est prescrit Par les médecins Et c'est bien précisé Combien qu'il faut en prendre C'est pas un médecin agréé Donc, il va prescrire Attends, ce qui dit n'importe quoi Tu commences à me casser les couilles, toi Non, mais c'est bon On m'a fait un vaccin Une picousse dans la bite Et maintenant, c'est encore pire Parce que c'était de l'adrénaline Bon, ça y est Toi, t'as rappelé Le tour de la question Gérard, c'est quoi le Viagra ? Le Viagra, c'est une pilule Pour ceux qui sont impuissants Bah, c'est quoi, impuissants ? C'est pas une maladie ? Impuissants ? Non, non, les impuissants C'est quelqu'un comme Gérard Ouais, mais attends Moi, je t'emmerde, toi, connard Hé, Gérard Oui ? Est-ce que tu prends du Viagra, toi ? Non Et toi, quoi ? Non, il a déjà du gras à la maison Il a déjà du gras à la maison Il n'y a pas ta gueule, toi Je ne vais pas te louper, tout à l'heure Si tu veux saccager le boulot Tu le saccages Et tu dégages Ça va chier pour toi, Filder Alors, on va demander à... Oui ? Salut, ça va ? Ouais, et toi ? Tranquille ? Oui Allô ? Oui Allô ? Gérard, Gérard, Gérard Tu as géré les auditeurs Ta mère ! Oh, la vache, Fildar, il est par terre Il vient de se prendre un coup de feuille Un coup de savate Tu viens de me faire gosser, ou quoi ? Tu vas se faire gosser Les gladiateurs Bon, on va reprendre le thème Ouais Allez T'as l'état de ton micro ? Arrête, c'est bon Gérard, assieds-toi, vas-y Pousse le bout, merde Il tape Fildar avec des bouts de cadeaux Vous ne pourriez plus rien gagner dans la journée Gérard Arrête, Filipe Mais tout à l'heure, je l'ai éclaté pour de bon Je vais laisser le débat terminé Je vais laisser Rousseau maintenant Je crois qu'on avait prévenu Toi, ça avait prévenu avant Je me perds un boulot comme Hippo Alors tu vas chercher le connard Mais vite fait Salut, ça va ? Et alors, troisième question, on va demander à Potchambe Arrête de me barrer, fais le boulot, putain On va demander à Potchambe Doit-on trouver un vaccin contre le Viagra ? Mais je t'ai dit oui tout à l'heure Tu m'as posé la question en premier Ouais, d'accord Déjà, moi, je voulais te dire que le Viagra, ça m'intéresse Parce que je suis atteint de mini-zobisme Et je voudrais savoir Parce qu'apparemment, Viagra, là, il est dans le business Et je voulais savoir S'il pouvait justement me businesser Me dealer 2-3 Viagra, là, parce que je suis en galère Bah écoute, y'a pas de problème, j'ai acheté une cartouche de vin Non, non, non, mais J'avais le Viagra, là Vous verrez ça pendant la pause publicitaire Moi, j'aimerais bien me faire mettre une cartouche En parlant de ça Gérard, ton débat T'as dit que t'avais des auditeurs ou c'était quoi ? Comment ça me fait chier, là ? Salut, ça va ? Bon, envoie un disque Non, non, on peut pas, on peut pas tout de suite Non, non, c'est moi, t'envoie On va reprendre dans le calme Sur l'IRC, y'a au moins 200 personnes qui sont parties Suite au débordement de Fildar Merci Fildar Et on est plus que 2 sur Minitel aussi Un broutille, va Combien c'est ? Plus que 2 ? Eh ben c'est bien Tu gères un peu, Phil Si Rose Donc toi, pour toi Je pense qu'on peut pas trouver de vaccin Contre le Viagra Parce que le Viagra, c'est un médicament Le Viagra, c'est un médicament Tu le prends si t'es impuissant Je vois pas quel est le rapport avec la question D'avoir un vaccin Contre l'obésité, y'a un truc ou pas ? Contre la connerie Je sens que tout à l'heure Y'en a qui vont se prendre des claques Ça va leur faire tout drôle Et là, t'arrêtes aussi, Manu T'arrêtes avec l'appareil Parce que ça me gonfle, c'est toi C'est toi, je viens de te voir appuyer sur les touches J'ai fait ça, regarde, j'ai appuyé là Ça fait quoi ? Y'a pas de son Donc, s'il te plaît Ne me marre pas, toi, parce que tout à l'heure Ça va te faire tout drôle, toi S'il te plaît S'il te plaît, tu réponds Oui, je réponds Moi, je dis que le Viagra, c'est bien, mais il faut pas en abuser D'accord, et oui ? Bah, écoute, Fildar vient juste me remettre à l'antenne à l'instant, donc j'ai pas entendu la question Bon, alors, Fildar C'est pas vrai, je te jure, j'ai pas touché aux touches Fildar, tu vas dégager pour de bon, toi Mais non, mais oui, réponds, c'est faux T'es plus dans l'équipe Tu vires, tu peux rester chez toi Non, mais Fildar, arrête de nous couper Oui, donc, toi Si tu pourrais me répéter la question, je suis désolée, mais c'est Fildar Doit-on trouver un vaccin contre le Viagra ? Euh, non, je pense pas, non, parce qu'au contraire je pense que le Viagra ne peut qu'améliorer les cas désespérés, quoi D'accord, donc Viagra, t'avais répondu, toi Non, mais répondez pas Non, non, il est là, il est là Ouais, je suis là, je suis là Donc, pour toi ? Bah, ouais, tout à fait D'accord, alors, quatrième question Je pense qu'on va arrêter avant 3h à cause de Fildar Non, c'est vachement intéressant Tu vas pas arrêter à cause de Fildar Non, non, à cause de la merde que t'as foutue, tu vois Maintenant, sur IRC, on était 1400 Maintenant, il n'y a plus personne Bravo, Fildar, de tes conneries On est quand même plus de 1000, ce qui est déjà très bien, Gérard Non, mais tout à l'heure, on était à 1400 S'il n'avait pas déconné, on aurait été à plus de 1600 Là, Gérard, sur le 3615 Fun Radio ça remonte, vu qu'on est quand même à 47 Ouais, bah, d'accord Et Gérard, pour reparler de l'IRC, je lis vite fait Alors, il y a Turpentine qui te demande GG, est-ce que tu es dérangé par tes bourrelets de vieux gras ? Non, bah, ça, c'est je ne vois pas du tout le rapport avec le vaccin contre le vieux gras Donc, avoir la cangrène est-elle une maladie ? C'est quoi la cangrène ? Alors, j'explique tout de suite le truc C'est un ongle qui est incarné Je croyais que Gérard, excuse-moi, je croyais que la réincarnation c'était dans le bouddhisme Non, non, la cangrène, c'est une maladie qui peut être très grave et malheureusement, il y en a beaucoup qui ne sont pas soignés à temps contre ça et ils risquent de perdre un membre de leur famille Non, non, un membre sur eux Si tu as un ongle incarné et que tu ne te fais pas soigner, ça va continuer de s'infecter et tout Donc, à un moment donné, ça va venir sur la main, ça va monter dans le bras et ils seront obligés de te couper le bras Et là, j'ai une personne que j'ai connue T'as vu sa vie ? Non, non, qui avait eu la cangrène Elle n'a pas voulu se faire soigner Oh, s'il vous plaît, vous me laissez parler, merci Elle n'a pas voulu se faire soigner à temps et elle a perdu carrément une jambe Mais bon, ça, c'est une maladie grave On ne va pas en parler Je suis désolé La question, elle est faite comme ça Je la pose et c'est tout Donc, vous allez y réfléchir et on va s'écouter Guy Brouty avec des mots fléchés sur Télé 7 jours Et on se retrouve tout de suite après 2h32, donc vous pouvez toujours nous appeler au 0800 308 0875000 et 0875000 Toujours le 3615, Capone Radio, rubrique directe et toujours l'IRC qui doit revenir normalement Oui, on remonte d'ailleurs, on a redépassé quand ils ont entendu que tu virais Fildar du Standard Ils sont revenus et il y a 1685 personnes Virgule 4 Fildar, je t'ai dit dehors Alors, tu vois ? Attends, attends Tu me retires le casque, je ne t'ai pas demandé de le remplacer pour foutre ta merde non plus Pardon Alors, on récupère pas de chambre Bonsoir Bonsoir Jamal, rebonsoir Jamal Doudou Zirose, pardon Bonsoir S'il te plaît Rebonsoir, oui Oui, s'il te plaît Je suis là, mais Manu vient de me rebalancer maintenant Non, c'est pas Manu Excusez-moi, je suis à l'arrière Manu, il m'a mis tout le monde Là, ça doit être Olivier qui doit s'amuser Ah bah c'est Olivier, alors c'est un des deux Viagra, donc, qui est toujours parmi nous Putain, j'ai la gaule Bon bah, tu restes poli, s'il te plaît Donc, alors, la question... La question, vous l'avez compris ? Non Ouais, tranquille, ouais Mais faudrait que tu la répètes, en fait, ouais Alors, avoir la gangrène est-elle une maladie ? Donc, on m'a demandé ça, bah, à Viagra Bah, oui, bah, si tu le dis que c'est une maladie Je pense que c'est une maladie, mais moi, je... Bah, si t'arrives pas à comprendre C'est pas la peine de continuer le débat comme ça, toi C'est sûr, avec une bite dans l'oreille, quand même Allez, hop, s'il vous plaît, là Vous me virez à Viagra, parce que j'aime pas ça Gérard Oui Merci, il y a Davy One Oui Qui me dit, alors... Est-ce qu'il y a un bébé qui naît Quand le monsieur met la petite gangrène dans la madame ? Bah, en principe, oui, hein Et il me demande aussi combien ça fait en euros Ah, ça, je sais pas Voilà Donc, on va demander à Oui C'est pas une maladie, en fait Non, c'est quoi, alors ? Bah, c'est toi qui la provoque Une grippe, ça s'attrape, tu... Olivier, s'il te plaît Je peux parler, Gérard ? Oui Ouais, donc, je disais Une grippe, ça s'attrape dans la rue, tu vois Tu la sens pas venir Tandis que la gangrène, c'est... C'est quand tu te soignes pas que tu l'attrapes C'est ce que j'ai dit C'est ce que j'ai précisé Bien avant le disque Eh ben, c'est pour ça que je t'ai dit Que c'est pas une maladie Bah, si, ça peut être une maladie, quand même C'est pas une maladie, quand même Ça s'attrape pas D'accord Non, mais j'ai pas dit que ça... J'ai pas dit que ça s'attrapait Nuance, j'ai demandé Est-ce qu'avoir la gangrène est-elle une maladie ? J'ai pas dit si ça s'attrapait Eh ben, moi, je te dis non Parce qu'une maladie, ça s'attrape Et la gangrène, ça s'attrape pas D'accord Ok, alors, s'il te plaît Oui Oui Oui, ben, je t'écoute Oui C'est une maladie, oui Ah ben, c'est tout ce que tu me réponds ? Bah oui, c'est une maladie Bah oui Bon, alors, Olivier Tu retournes Allez, retourne Non, mais je me suis trompé Non, mais retourne d'où tu viens Non, je voulais juste te dire Parce qu'en fait, à la place de Viagra On accueille Syphilis Voilà Bonjour Comment ? Je suis Jean-Louis Connard Salut, Connard Salut, Connard Salut, Jean-Louis Je suis pas rien Connard Donc, on va préciser Jean-Louis Parce que... Ouais, non, mais non T'as pas compris Non, Jean-Louis Syphilis Mais c'est Syphilis son prénom Mais il se l'appelait Connard Je suis grec Alors, si... Ben, tiens, Jean-Louis Jean-Louis, la gangrène est une maladie Ok Ça, c'est sûr Non, mais tu peux préciser ? Précise Jean-Louis, Jean-Louis Oh, tu précises ? Oui, c'est Jean-Louis Salut, Connard Connard, voilà Bon, allez, gros Tous les deux, là Vous me gérez, là Parce qu'il comprend rien, là Je comprend rien C'est Jean-Louis ou Syphilis ? Non, c'est Jean-Louis Syphilis C'est mon prénom et mon nom Mais tu peux l'appeler Connard Non, c'est Syphilis Il t'a dit que oui, c'était une maladie Donc c'est bon, il t'a répondu Il est où, Michel ? Syrose Oui, ben moi, je suis pas d'accord Avec lui qui disait que la gangrène C'est pas une maladie Moi, je pense que c'est une maladie Parce que si tu peux la raper, la gangrène... Bon, elle est celle qui dit n'importe quoi Tu as commencé par te la fermer Ouais, tu la vires, tu la vires Mais par contre, si tu attrapes la gangrène Est-ce qu'on peut te couper tous les membres ? N'importe quoi J'ai le droit de répondre aussi J'ai le droit de l'exprimer Sur Yancy, on me demande Quelle est la personne pas intelligente Qui essaye de s'exprimer ? Je suis sûre, ça doit être toi C'est peut-être une bouffonne, je sais pas Bon, alors, tu me gères... Attends, attends, je vire la bouffonne Non, non, tu la laisses, la bouffonne Non, mais j'ai viré la bouffonne Syrose, donc, toi T'as répondu ? Oui, c'est une maladie, la gangrène Mais tais-toi J'ai le droit de répondre, hein Non, Gérard, passe aux autres auditeurs, c'est bon Je crois que tu vas me prendre un peu Sur les nanas, là Parce que ça commence à me prendre la tête, là Javal Ouais, mais on parlait de petites graines Moi, je suis donneur, et quand tu veux... De la gangrène, abruti ! Quand tu veux, les petites graines dans ta turbine à chocolat Bon, alors, Javal, tu dégages, bonne nuit Allez, hop, celui-là, on l'envoie se coucher Il aura tout compris Il est où, Michel ? Pot de chambre Oui, qui c'est qui veut réagir ? Pot de chambre Ouais, je t'appellerai, c'est le lit, tout ça, je connais Donc, ouais, non, ça le saoule, cette question Non, alors, elle te saoule ? Tu veux continuer le débat, ou pas ? Ouais, c'est pour ça, il vaut mieux qu'on passe à une autre question, c'est mieux Non, mais attends, je fais ce que je veux Non, elle est nulle, la question Bon, Olivier, si t'es pas content, tu retournes de l'autre côté Non, mais non, je suis pas content, mais elle est nulle Moi, je fais ce que je veux, d'accord ? Il a raison, Olivier Moi, je fais ce que je veux Bon, alors, pot de chambre, tu dégages, bonne nuit pour toi Allez, hop Il n'y a plus personne Non, non, mais vous m'avez récupéré d'autres personnes, vite fait Sur les 24 lignes, on y va Alors, les piqûres d'insectes... D'insectes ? Les piqûres d'insectes, rendent-ils malades ? On va demander ça à Jean-Louis Les piqûres d'insectes ? Oui Bah oui, bah oui, tout à fait Moi, j'ai eu... Enfin, il y a un moustique qui m'a piqué Et cet enculé, il avait le sida D'accord Donc, je l'ai attrapé aussi D'accord, Jean-Louis, pour l'instant, j'ai pas envie de parler de sida de ça, ce soir Ah ouais, tu parles de la gangrène, mais tu parles pas de sida Non, mais je parle pas... J'ai pas envie d'en parler, c'est tout Parce que c'est un truc qui est trop long à gérer Ah, ok, excuse-moi Ok Je suis désolé Euh, oui, pour toi Euh, ouais, moi, une fois, je me suis fait piquer sur le clito Depuis ce temps-là, ça n'a pas dégonflé, donc ça craint un peu, quoi Ouais, mais dans ce cas-là, t'as qu'à aller voir un médecin Bah ouais, mais tu sais, le médecin, tu sais ce qu'il va... En fait, non, je vais t'expliquer, Gérard Moi, j'ai un antidote, c'est ma salive Une fois, je me suis fait bronzer, donc j'étais à poil Et, si tu veux, il y a une abeille qui est rentrée à l'intérieur Donc j'ai été voir le gynéco, le gynéco m'a dit Bah écoute, il n'y a qu'une solution Vous savez, mademoiselle, il n'y a qu'une solution Donc en fait, au bout de son temps, il a mis du miel Et puis il est passé à l'intérieur, tu vois, il me l'a rentré Comme ça, il s'est dit, l'abeille va sortir Va s'accrocher sur le miel Et puis en fait, donc il se retire Et puis l'abeille n'était pas là Et puis en fait, il continue, et puis il fait des va-et-vient Tu vois, et puis alors là, vraiment carrément, quoi Donc je lui dis, mais qu'est-ce que vous faites ? Ouais, mais ça y est, ça y est, on a compris, on a compris Non, c'est pas fini ! Ouais, mais maintenant, dépêche-toi, parce qu'il y a d'autres personnes Et puis il y a une question IRC Donc à la fin, il me dit, bah, en fait, vu qu'elle ne veut pas venir Vu qu'elle ne veut pas se coller, maintenant, il faut la noyer Bon, ça y est ? Donc sur IRC, il y a Snul qui te demande Est-ce que quand on est malade et qu'un insecte nous pique L'insecte peut-il tomber malade ? Euh, ça, je pense pas, mais... Je t'en dis, ouais Alors toi, je t'emmerde, toi, oui D'accord ? Bah non Voilà, comme on sait que c'est elle qui s'amuse depuis tout à l'heure Bon, j'ai rien, j'ai rien Et la question, alors, tu penses quoi ? Donc, bah, attends, tout le monde n'a pas répondu Non, mais pour l'insecte malade, là, parce que t'as répondu Non, non, mais je pense pas qu'il peut être malade en même temps Ça, j'ai jamais vu un insecte malade comme ça On a qu'une cuvette à la place de... Je sais pas À la place de peau de chambre Salut, Gégé On accueille Chippo à la place de Javal Salut, ça glisse ? Ok Alors, s'il te plaît Ouais Donc, pour toi, la question Les piqûres d'insectes rendent-ils malades ? Bah, moi, ça m'a rendu pas mal malade Il y a une fourmi qui m'a piqué entre les deux seins Et maintenant, j'en ai trois Non, mais attends, c'est des fourmis rouges Ouais, je suis allée en Amazonie intérieure Et... Je me suis fait piquer par une fourmi rouge Bah, maintenant, j'ai dit Bah, toi, il est soutif, quoi Non, mais t'as pas... Tu t'es pas fait vacciner pour aller là-bas ? Pas contre les fourmis rouges, j'ai pas pensé Non, mais il y a... Attendez, s'il vous plaît Il y a quand même des vaccins Il faut quand même se faire vacciner Avant de partir dans certains pays Oui, mais... Lesquels, Gérard ? Non, mais... Il y a plusieurs pays comme... Surène Surène Ouais, bah, c'est ça Alors, fermez vos gueules Si le prochain que j'entends dire Surène, il va dégager Je vais pas chercher qui c'est maintenant Non, mais la personne qui a trois seins Comment elle s'appelle ? Elle s'appelle... S'il te plaît, merci pour l'arsène Parce que même avec trois ou quatre seins Moi, je m'en fiche Bon, ok, bah, c'est bon Alors, vous allez vous calmer S'il vous plaît, merci Elle a parlé qu'elle veut vite Oh ! Regonne, la cuvette est suppos, là J'ai rien dit Ouais, on a rien dit Bon, bah, vous vous calmez, merci Je veux être calme Si rose Oui, je pense que les insectes, ils peuvent... Elle est encore là, elle est... Hé, je vous en avoue, je vous emmerde, elle est OK Non, mais j'ai le droit d'exprimer, quand même Non, t'as pas le droit Non, t'as pas le droit Tu me vires tous les autres Et tu gardes si rose Et tu me prends d'autres personnes Je reprends pas le... Je continue pas le débat comme ça C'est bon, c'est bon, j'ai viré si rose Et j'ai gardé tous les autres C'est bon, c'est bon, c'est bon Je vire si rose Bonjour, c'est l'inverse Ah, merde Gérard Voilà Alors, tu vires tous les autres Et je continue pas Je t'en fais une fiche, Gérard Alors, donc, ouais Pourquoi tu connais pas la mouche testée Qui donne la maladie du sommeil ? C'est qui ? Bah, c'est... C'est si rose Ouais Non, mais attends Mais moi, je te parle Les piqûres d'insectes Rendent-ils malades ? C'est ça, la question C'est pas... Justement, il y a la mouche testée Qui donne la maladie du sommeil Ah, d'accord Parce que t'as déjà testé une mouche Toi, qui rendait malade Bah, oui, j'ai... On fait une épidémie Sur une ville Que je dirais... Attends, c'est ce que tu fais, toi Attends, parce que là Gérard, il t'écoute plus Gérard, écoute au moins les auditeurs C'est ça, mais j'ai entendu ce qu'elle disait Donc, c'est bon Donc, alors, maintenant On va... On va attendre un petit peu Que Fildar me retrouve Des auditeurs potables Et qu'ils arrêtent de... Il n'y a plus d'appel Il n'y a plus un seul appel Moi, j'ai plein de questions, hier Ah, oui, connard Celui qui s'amuse à ça Va se calmer, Manu, d'accord ? Sinon, tu vas faire un standard Ouais, bah... Alors, il y a... En attendant Alors, il y a Turpentine Qui te demande Si un lépreux peut attraper la gangrène Un lépreux, bah, de toute manière C'est un peu... Ça vient de chez eux Ils sont déjà souvent en train De la gangrène, aussi, là-bas Chez eux, hein D'accord Ouais Et... Dub, tu te demandes... Excuse-moi, quand tu dis chez eux C'est le pays, ou c'est le... Ouais, ouais, ouais Dans leur pays Non, parce qu'il y a... Bah, il y a la gangrène Et la hougraine, aussi Non, non, non J'ai oublié d'en parler tout à l'heure Toi... C'est peut-être ta réa, tranquille Non, mais voilà Fais du bon boulot Et tu resteras dans l'équipe Sinon, tu retournes au standard Avant la fin de l'émission Oui, chef ! Alors, il y a... Serval qui me dit La mouche de la cirrhose Elle donne la maladie de Parkinson Non, je comprends rien Ouais Est-ce que quand on perd ses doigts On peut les remplacer ? De quoi ? De quoi ? De quoi ? De quoi ? Est-ce que quand on perd ses doigts... Attends, attends C'est Baby One qui me dit Est-ce que quand on perd ses doigts On peut les remplacer par des Twix ? Euh, non Non, parce que quand tu perds tes doigts Tu peux pas les remplacer, en principe Ça, c'est pas mal Et on me demande aussi Si cirrhose pique quand elle se rince, pas ? Non, c'est pas les femmes qui piquent C'est les hommes qui piquent Quand ils se rasent pas comme moi Voilà, donc, alors... Alors, à la place de cuvette On accueille cuvette numéro 2 Ouais, bien sûr On accueille suppo 2 Bien sûr, et tu reprends toujours les mêmes espèces de connards Non, c'est pas vrai Syphilis 2 Vous vous êtes pas pris la tête Soutif et pâté de flotte Non, mais vous avez... Alors, par contre, il y a cirrhose qui s'en va Non, cirrhose, elle s'en va Allez, hop, allez Ah, on fait une bonne nouvelle Alors, hé, je vous préviens Vous vous êtes pas fait chier Vous avez viré tous les autres Et vous les avez repris sous d'autres noms Non, mais cirrhose, remplace-la par boulimie Quand je t'appellerai peau de chambre, tu sortiras de sous le... Toi, tu fermes ta gueule Maintenant qu'on a des nouveaux auditeurs On va reprendre le débat et on se calme Ouais, on se calme, tout de suite Donc, alors, il y a un sondage, déjà, je vais le faire Oh, là, là, là À la question, être malade peut provoquer des maladies Alors, ça, c'est même pas la peine que je dirais Qu'on a ça Non, non, ça, c'est des conneries Non, non, non Les oreillons vont-ils malades ? On va demander à cuvette 2 Ouais, alors, les oreillons, non, ça rend pas malade Ça fait juste mal aux oreilles, en fait Ouais, mais ça peut rendre malade Oh, non, non D'accord, suppos ? Ouais, bah, écoute, j'ai eu les oreillons Et ça m'a filé une transpirationite aiguë Et je pense que tu connais le problème Non, je vois pas du tout ce que tu veux dire Fais-moi un... Ok, cirrhose ? Oui, les oreillons peuvent être une maladie Mais ça, c'est surtout pour les garçons C'est pas pour les filles Oui, ça paraît que ça fait gonfler les couilles Non, mais attends, vous allez... Je vous préviens, vous allez arrêter de dire des conneries comme ça Parce que sinon, la sixième question, ça va être la dernière On va faire conclusion et je rentre chez moi Ça va être clair et net Ça, ça serait bien Alors là, faudrait peut-être vous calmer un peu Non, mais ce qu'il faudrait, c'est que tu leur expliques Non, non, mais attends, au standard, vous êtes pas fait chier Non, non, non Moi, perso, ils m'ont dit qu'ils s'emmerdaient grave, ce soir C'est nul, ton truc, là Ils sont nuls, toi, tu dégages Dégage, maintenant Non, mais non, c'est bon Je gère Non, non, tu dégages Tu dégages Je vais voir Donc, euh... Syphilis ? Oui D'accord, et toi ? Les oreillons, je les ai eus quand j'étais petit D'accord Et ça m'a laissé des séquelles Ouais, bah, je pense pas Soutif ? Oui Donc, toi ? Les oreillons, oui, c'est une maladie Et il y en a qui ont eu la gangrène des oreilles et elles sont tombées Non, mais attends, les oreillons, ça donne pas la gangrène, hein Ah si, je te jure, hein Ah ouais, bah, tu me diras... Je travaille dans le milieu hospitalier Je peux te dire que ça arrive D'accord Une question... Oui, il y a Serval qui te demande Si on attrape les oreillons en écoutant trop fort son Walkman Euh, non, pas spécialement Pas telle fois Oui, bah, tout d'abord, bonsoir, Gérard Bonsoir Donc, je viens d'arriver Oui, bonsoir Salut Donc, bah, ouais, il paraît, il paraît, ouais C'est quoi ta maladie ? C'est une maladie sexuellement transmissible, en plus C'est quoi ta maladie, à toi ? Non, mais les oreillons, bon, je peux... Bon, qui c'est qui veut poser la question, là, vite fait ? Voilà, vous répondez, là ? C'est moi, c'est moi, c'est Syphilis Je voulais lui demander quelle était sa maladie À celle qui vient d'arriver, pas telle fois Bah, pas telle fois, vas-y, pas telle fois, on te pose la question Bah, moi, j'ai attrapé l'oreillon d'une seule oreille Suite à un rapport sexuel Un dérapage de coton-tige Mais t'es toujours baisable ? Euh, ouais, je suis toujours baisable Alors, Syphilis, tu vas te calmer Comment tu l'as appelé ? Tu fais quoi, toi ? Et celui qui vient de dire, en parlant des coton-tiges Toi, ça va être la dernière fois parce que tu as dégagé Hé, ça va, tous les deux, là ? Ça va, là, je vous emmerde trop Gérard, Gérard Reviens au débat Sur Minital, on nous demande si t'as eu la congraine du cerveau Tellement t'es con Non, c'est plutôt lui qui a eu la congraine C'est qui qui dit ça ? C'est Bibitte Bibitte, il a quel âge ? Il a 112 ans Ouais, c'est ça, j'ai mon cul avec l'orage Je crois que ça s'attrape dans les toilettes, surtout Bon, toi, tu fermes ta gueule Bon, alors, encore une fois Cette manière, c'est la dernière question Parce que vous me cassez les couilles à cause des deux du standard À cause des deux du standard, c'est tout Ils sont même pas capables de faire un boulot comme une fois Ces deux connards Après, c'est qui qui paye ? C'est les auditeurs C'est pas de ma faute, dans ces cas, vous avez qu'à vous apprendre Après, Olivier et Fildar C'est pas de notre faute si t'es une équipe de merde Pour l'instant, il y en a deux qui font du bon boulot C'est Manu et Fildar Et Rigaud C'est Manu et Rigaud qui font du bon boulot Les deux autres, c'est deux cons Alors, l'éthique C'est des faillots L'éthique, sont-ils des maladies Qu'on peut avoir en automne ? Qui c'est qui pose et qui répond comme ça ? Non mais donnez pas vos noms, s'il vous plaît C'est Pedro Putain, allez, c'est la dernière question Vous me cassez les couilles, là Là, au standard, vous me cassez Vous faites du boulot dégueulasse Vous m'avez fait du boulot dégueulasse Le deuxième débat, vous me cassez J'aimerais bien que vous réfléchissez un peu aux questions de Gérard et que vous fassiez un débat un peu plus potable parce qu'après, c'est nous qui prenons et l'émission est pourrie C'est facile, ça J'aimerais bien que quand on vous sélectionne que vous fassiez quand même un minimum d'effort pour comprendre, c'est quand même pas compliqué ces questions Il faut qu'il nous cite Celui qui a voulu répondre répond maintenant Tu donnes ton nom et tu réponds Gérard, il se casse le cul une semaine pour faire un débat Putain, mais c'est quoi cet auditeur qui a voulu répondre et qui ne veut plus répondre maintenant ? C'est qui, encore ? Moi, je vais répondre C'est Philippe, dégage, on va terminer pour toi Mais c'est pas moi Celui qui se marre va dégager aussi Oh là là Celui-là, je crois que ça commence à bien faire Je leur ai dit ce qu'il fallait qu'il fasse Non, non, mais attends Le premier débat, il est potable Le deuxième, c'est de la merde À cause de vous deux Pour l'instant, il y a Crico qui va, c'est Manu Ouais, ouais, ouais Attendez, après le débat, on va discuter la semaine prochaine Oh, j'ai rien fait, Gérard Non, non, je veux pas le savoir, vous faites du boulot de merde Alors, pas cette fois pour toi Tu peux répéter la question, s'il te plaît ? L'éthique De quoi ? L'éthique, sont-ils des maladies qu'on peut avoir en automne ? Non, c'est des petites bêtes que les chiens attrapent Voilà, d'accord C'est ce que je voulais t'entendre dire Soutif Allô ? Oh, Gérard, Gérard, Gérard Arrête de t'en faire sur tout le monde, Gérard Plus jamais, merde Non, c'est ma faute, c'est ma faute C'est ma faute, excuse-moi Non, non, oui, tu dégages Gérard, pour revenir au débat Attendez, les auditeurs, attendez Pour revenir au débat Enfin, on va faire un vrai débat Il y a un petit débat Merde, là Et toi, t'arrêtes de bosser comme il faut Sinon, t'en prends autant D'accord Bon, ben voilà Ben non, je l'ai raté Ben, le... Bravo, le fil d'art Merci, merci, fil d'art L'auditeur qui a voulu poser la question, celui-là C'est, s'il te plaît, tu peux revenir Je te remercie C'était Oxyd, Oxyd, tu peux répéter Reviens, tu connais l'adresse Je l'ai, je l'ai Alors, la politique des maladies gêne-t-elle les camionneurs qui jouent du synthé ? Ça, je vois pas du tout le rapport avec les maladies C'est pas grave Donc, à la place de Syphilippe, tu me prends quelqu'un d'autre Ben, si, Jean-Pierre, là Fais gaffe, fil d'art Parce que tu vas t'en prendre autant qu'Olivier Je vais trouver un truc Si, Rose Oui, ben, comme elle disait, paté de foie Les tiques, ça s'attrape C'est dans les animaux, quoi C'est dans leur poil, quoi D'accord Suppos de... Quoi ? Ouais, ben... C'est dans leur poil Ouais, c'est dans les... Mais non, un tique, c'est genre quand tu clignes de l'œil C'est un tique Il y en a, mais il y a... Ouais, mais il y a... Attendez, paté de foie Bon, mon tique, c'est le prout Oh, ta gueule, toi Bon, alors, suppos, tu dégages C'est pas grave, réponds, vas-y, vas-y, vas-y Réponds, parce que moi, ça m'intéresse, ça Non, parce que les tiques, il y a certaines personnes Qui ont des tiques qui n'arrêtent pas de bouger les épaules Ou de se gratter la moustache Ouais, comme moi Moi, c'est un tique de me gratter la moustache Voilà, c'est ça que je voulais dire Donc, c'est pas du tout dans les bêtes, paté de foie Ah, ouais, non, mais enfin, moi, tu me parles de tiques Moi, tout de suite, je... Non, mais des tiques, t'as certaines personnes Qui ont des tiques sans arrêt Non, mais tu comprends bien Oui, mais, ouais, bien sûr Ça peut aussi aller dans les animaux Je suis d'accord avec Siron Donc, suppos, t'as répondu Alors, réponds Les tiques en automne, ouais, les taques en hiver Les tiques en été et les toques au printemps D'accord, ben... Gérard, on me demande si les tiques sont politiques Non, non, je vois pas Merci, merci Je vois pas du tout le truc Excuse-moi, Gérard C'est drôle C'est galéré Donc, en fait, c'est un prénom composé C'est Marc, Serge, Thierry, mais tu peux l'appeler MST Bonsoir Salut Salut C'est Cuvette, j'ai pas répondu à la question Vas-y Je pense que c'est des petites bêtes qui mangent les caniches Mais je viens de te dire Que ça servait C'est aussi sur les humains, mais Je suis sûr que les chiens aussi, quand même D'accord, donc, MST Oui, alors, les tiques, ben oui, comme disait la génération Demoiselle, qui est toujours baisable J'ai bien repéré son nom C'est qui, alors, vas-y ? Celle qui a trois seins Alors, moi, je dirais Elle est plus là, celle qui a trois seins, je te signale Dommage, dommage Elle est morte, elle avait quoi comme maladie ? Non, mais je vais te dire, depuis tout à l'heure C'est l'autre auditeur qu'on a Ah, Syrose, il y aurait Syrose Ouais, ben, Syrose, elle vous emmerde D'accord, bon, que moi, les tiques, ouais, c'est comme disait la personne C'est pour les chiens, c'est une maladie des chiens Non, mais, on vient de dire tout MST, t'as pas encore Euh, pâte-toi, tu te calmes, s'il te plaît C'est un espèce de Non, mais, les tiques, c'est un espèce de morpion canin Qu'il y a sur les tresses Quoi ? C'est un espèce de morpion canin qu'il y a sur les tresses C'était tout, en fait Ah, mais je te jure Bon, de toute manière, il est 50-30 De toute manière, je pense qu'on n'ira pas jusqu'au 10 Bonjour, c'est un message qui s'adresse Au connard qui habite à côté de chez moi C'est moi Euh, ça y est, pour celui qui s'amuse à ça Gérard ? Je peux te répondre ? Ouais, sous-type Moi, j'ai des tiques, mais la décence m'interdit de le dire au téléphone Je te mets des doigts D'accord Peut-être une voix qui m'excite pas du tout, je te l'aide, je le dis Bah, toi-même S'il vous plaît, ça va, de faire votre propre On va peut-être revenir dans le débat De toute manière, c'est la dernière question Mais non J'en ai plein pour toi Si c'est tout, là, si tu dégages, MST, d'accord ? Allez, allez, la question Alors, à l'heure des coups de soleil, vous rendent-ils malades ? On va demander à Cubette Ouais, ouais, moi, ça me rend vraiment malade Bah, t'en as déjà eu ? Euh, non Non, bah, alors, comment tu peux... Bah, parce que je dois pas me mettre au soleil Mais on m'a dit que ça me rendait malade, donc je prends pas le risque, en fait D'accord C'est pas con, ça, hein Je suis courageux, mais pas téméraire D'accord, ok, suppos Ouais, non, les coups de soleil, moi, ça me dérange pas Les coups de victoire non plus Non, mais attends, tu réponds correctement à la question Pas à côté, s'il te plaît Les coups de soleil, ça me dérange pas Et les coups de victoire non plus Les coups de... Victoire D'accord, mais non, mais je crois que, toi, tu comprends Pourquoi ? Non, mais je crois que t'as un peu bouché des oreilles Ouais, ouais, bah, j'ai... C'est une maladie Parce que depuis, depuis le temps que tu dois écouter Fun et que je fais des débats, tu dois comprendre les questions Alors, si tu comprends pas la question que je viens de poser, ça servait à rien de faire le débat D'accord ? Mais là, tu penses que t'es un solotone ? Ouais Alors, Siroze ? Non, moi, les coups de soleil ne me font pas attraper de maladie, c'est que... On en a déjà Non, non, c'est pas ça, mais c'est que moi, je brosse facilement, j'ai une peau... C'est black ? Non, elle est pas black Ah non, tu la connais ? Non, non, elle a une jolie peau, elle est belle, tout ça Elle est pas black, elle est sale Oh, s'il vous plaît, là, vous la laissez parler, merci Même si on attrape des coups de soleil, je pense qu'il faut quand même mettre de la crème et se protéger en mettant un chapeau, tout ça Gérard ? Ouais, de la crème sur le chapeau On nous dit sur Minitel que contre les coups de soleil, le meilleur remède, c'est de superposer plein de couches de fond de teint Non Ils nous disent que c'est un super remède Non, pas du tout MST ? Bah oui, c'est comme l'invité mystère, moi, c'est... je mets de la crème, mais pas sur le chapeau, je suis pas débile Non, mais attends, toi, t'es un peu... Non, mais je crois que MST, il est un peu con, lui Non, non, mais attends, elle a dit qu'elle mettait de la crème sur le chapeau, ça sert à rien Mais non, je mets de la crème sur le corps Oh, encore pire Tu veux me faire vomir ou quoi ? Non, mais attendez, il y a des... Oh, je vous signale qu'il y a des crèmes solaires pour... Pour le corps, hein, au corps, vous le saurez pas On appelle ça de la vaseline Ouais, c'est ça, et ta connerie, on appelle ça de la merde Ah, si tu veux Ok, alors Soutif Oui ? Donc, pour toi ? Bah moi, quand j'ai des coups de soleil, c'est un foulard carré Ah bon, d'accord, carrément, toi ? Bah carrément, j'évite de me faire bronzer le derrière, puisque à chaque fois, ça le fait, alors... Attends, Soutif, je te coupe 5 minutes Celui qui s'amuse encore à redire à la personne qui parle de dégager, je vais pas chercher entre MST, suppo et cuvette, je vais en virer un des trois au hasard Au hasard Ok Discrimination, c'est pas du tout Alors, Soutif Oui ? Donc, si tu me disais... Bah, ça me fout la diarrhée, donc j'évite de partir au soleil en vacances, je me fais des vacances d'été en Normandie, en Norvège, des choses comme ça Ouais, mais en Normandie, je pense qu'il y a quand même pas mal de soleil Je suis allée un an en Normandie, il y a eu 15 jours de pluie, et les 15 autres jours, il a plu Attends, je comprends pas, t'as eu 15 jours de pluie et les 15 autres jours de... Eh non, mais attends, ça veut dire que t'es... Que t'es partie un mois, et pendant un mois, t'as eu de la pluie Oh, bah, t'as tout compris Ah, d'accord Oui, j'ai pas trouvé, donc j'ai pas eu la diarrhée Ça te sert d'aller au restaurant, hein ? Euh, oui Avant qu'on n'ait pas t'étoie Voilà, il y a Le Chiant sur l'IRC qui te demande si les coups de lune sont-ils aussi dangereux que les coups de soleil Non, dans la lune Non, mais, alors là, je vais te dire une chose Chiant, c'est même pas la peine que je réponde à ta question C'est Le Chiant Le Chiant, t'as même pas compris la question Non, mais ça existe, les coups de lune Euh, pâté de foie Les coups de dent, la lune Ouais, bah... Non, mais il comprend rien Ouais, c'est... En fait, avec les coups de soleil, on peut attraper les maladies de la peau Donc, moi, pour me protéger, au lieu de mettre de la crème solaire, bah, je mets de l'huile abronzée Comme ça, au moins, je suis sûre de pas attraper de coups de soleil Donc, tu reviens à ce que je te disais, qu'il y avait des crèmes solaires pour éviter d'attraper des coups de soleil Ah, c'est l'huile solaire Voilà, mais il y a bien de... Avec un indice, zéro Ok Au moins, tu comprends Euh, qui c'est qui vient s'amuser à dire ça ? Mais c'est une vieille chanson C'est sympa, cette chanson C'est la fête, fête, la fête Ouais, bah, je pense pas Alors, moi, je peux vous dire une chose, que les coups de soleil, il y a certaines crèmes solaires qui servent pour éviter qu'on les attrape Parce que les écrans totales, ça fait bronzer, hein, Gérard Comment ? Les écrans totales, ça fait attraper des coups de soleil Euh... L'huile Ouais, mais t'as certains trucs, comment qu'on appelle ? Non, non, c'est des conneries, l'écran total, c'est des conneries, c'est de l'huile qu'il faut mettre pour pas attraper des coups de soleil Non, mais il y a aussi les... Manu, si tu pouvais m'aider, là, tu sais ? Oui, les gens, là, au... Ah, sur les sonos... Ah, je peux t'aider, Gérard ? Les UV Non, mais quoi ? Les crans anales Non, non, toi, tu m'as fait du mauvais boulot L'autobronzant Ouais, il y a les... Les trucs où tu te mets dans une machine, là, et ça te... C'est des sonars, ou sinon, il y a... Un bronzé Il y a aussi... Là, il y a un problème Il y a des néons aussi, je sais plus comment qu'on... Les UV Ah, ouais, les UV C'est moi qui t'ai aidé Non, mais toi, tu fermes... Toi, je t'ai dit de la fermer, je veux que tu m'entendes Je t'ai fait du boulot de merde Allez, hop, dégage Alors, tu t'es... Gérard, c'est pas le thème du débat Au standard Alors, sur IRC, il y a Dimitri qui te demande si on peut attraper des coups de soleil sous l'eau Par exemple, dans sa baignoire Euh, non Et pendant une éclipse de lune, demande Turpentine Putain, mais c'est bidon, l'Internet, c'est pas les maladies, ça Bah si, on parle des coups de soleil dans cette question Mais attends, ils sont moins cons que toi J'aimerais bien faire un débat un peu potable Ouais, mais attends, c'est... T'as déjà foutu ta merde, alors ça suffit comme ça Franchement, t'as fait des trucs trop inconcevables ce soir Alors, dernière question, parce que... Ouais, mais il a été avec ses crabes Il est inconvenable Oh là là C'est horrible C'est lamentable Oula Je sens que Fildar, tu vas t'en prendre une, hein Mais c'est un débat constructible Alors, l'acné, euh... Tu te calmes, toi, parce que avant que tu gerbes... Je vais t'emmener mon rib Je sens que tout à l'heure, on va finir à trois que six À trois que six ? À trois auditeurs au lieu de six Attention, parce que je vais pas chercher tout à l'heure Je vais se virer au hasard Bah non, il est là Alors, l'acné, est-elle une maladie qui s'a... L'acné L'acné ? La quenée La quenée ? La quenelle L'apostrophe A-C-N-E Bon, tu me dégages, je vais m'ester, allez hop J'ai pas le vaccin L'acné, L'apostrophe A-C-N-E Dans la queue au bout du nez, on dit Euh... C'est toi qui viens de dire ça, là-bas ? Non, j'ai rien dit, moi, par contre Alors, donc, on va demander à Cubette Ouais, bah moi, je pense que c'est pas... Je sais pas ce que c'est comme maladie, en fait Bah, tu sais pas que t'as jamais eu de l'acné ? Bah, si, peut-être, mais je connaissais pas, en fait Je savais pas que ça existait Bah, si, ça existe, hein Ça existe Et c'est quoi, comme truc ? Bah, je te le dirai tout à l'heure Suppos Ouais, bah, moi, quand j'étais petit, à l'école, on m'appelait coccinelle Parce que c'était bouton rouge, point noir Bouton rouge, point noir Bouton rouge, point noir D'accord, et t'as pas... Et à part bouton rouge, point noir, bouton rouge, point noir T'avais pas autre chose qu'on te disait ? Ouais, toi, on devait t'appeler le trou noir, à l'école, avec ton petit truc Et toi, on t'a jamais appelé tête de con ? On met une cliquette dedans, elle disparaît, hein, hop Allez, hop, suppos de la bonne nuit pour lui Je voulais dire que j'avais fait de l'acné Mais ce qui me dérangeait, c'était les méduses C'est qui qui vient de répondre ? Qui c'est qui vient de répondre, là ? Je sais pas, moi MST, t'as un nom de maladie ? MST, je te l'avais dit de dégager, Fildar Alors, il dégage Gérard, mais t'es nul Gérard, il y a TomJPSG qui me demande Si l'acné sur le sexe existe Ouais Attends, il rajoute Surtout suite à la sodomie dans les chiottes de la... Ah, excuse-moi Ouais, d'accord, lui, il peut garder ses réflexions Siroge Oui, l'acné C'est quoi, c'est... L'acné, tu ne peux être une maladie On n'écoute même pas la question Oh, tu t'écrases, tu vas être, s'il te plaît, merci Si j'essayais de parler tous en même temps, je pourrais répondre Mais qu'est-ce que c'est ? Donc, l'acné est une maladie Puisque tu peux avoir des boutons partout Sur le corps Donc, ça peut être une maladie très contagieuse D'accord Soutif ? Oui Donc, pour toi ? Ben, moi, je travaille dans le milieu hospitalier Et il nous arrive d'avoir des petits jeunes qui ont de l'acné, effectivement C'est une maladie Que l'on soigne très bien, effectivement Ouais, mais... Grèves de peau, des choses comme ça Ouais, mais je pense qu'il y a certaines personnes Qui vont voir des médecins qui disent Qu'ils veulent se faire soigner contre l'acné Puis qu'en fin de compte, on leur prescrit des médicaments Et ils n'en ont rien à foutre Bon, alors, on a un petit secret qu'on ne dit pas, en fait Parce que, bon, on n'a pas envie de faire notre business Mais la masturbation enlève les boutons Ah, d'accord Ben, ça, c'est la première fois que j'en sens ça Gérard, sur Minitel, on nous demande Si toi, plus jeune, tu as eu de l'acné, justement Attends, laisse-moi finir avec pâté de foie Sur IRC, on me demande combien de temps T'arrives à tenir en acné Bon, ben ça, je ne répondrai même pas à cette question Excuse-moi, Gérard, à la place d'émission, on accueille Petit Quiste Non, mais, hé, ce n'est pas la peine Je suis dans le cours Je suis dans le cours Non, mais, t'es vraiment une pute T'es vraiment une pute Je t'ai dit que ce n'était plus la peine de prendre d'auditeur J'ai arrêté Je suis dans le cours Je suis dans le cours Et à la place de suppôt 2, on a suppôt 3 Non, non, non, c'est pas la peine Non, non, mais c'est terminé, là, le débat Bon, arrête, on fait la conclusion, au moins Non, non, non, vous avez été trop cons Grâce à Fildar On a perdu près de 200 personnes sur l'IRC Merci, Fildar Ils sont revenus, on est presque 2000 Grâce à lui, on avait perdu Quand même 200 personnes Oui, mais ils sont revenus et on est presque 2000, Gérard Donc, si tu pouvais continuer le débat calmement Pour faire plaisir à ces gens-là Pâté de foie pour la dernière question Ouais, bah, moi, tout ce que je sais, c'est que l'acné, maintenant On peut la résoudre à l'aide de la chirurgie esthétique N'importe quoi Bon, allez, tu me dégages ces trois caves Elle a raison Tu me viens de suppôt 2 Et le dernier est arrivé Terminé, terminé, terminé Terminé, terminé, terminé J'en ai ras-le-bol À chaque fois que les naines apparlent, on leur coupe les paroles Alors, maintenant, c'est terminé, tu me les vires Hop, bah, ça Ça va aller plus vite, on termine le débat Avec trois... Ça sera évident, quand même Non, non, pareil Non, petit quiste, il a rien dit, tu vois, c'est bon, quoi Alors, cuvette, j'en veux plus Ouais, c'est bon, cuvette, il est viré Et, euh, voilà Alors, donc, pâté de foie pour toi Donc, tu me disais Pâté de foie, s'il te plaît Je suis d'accord avec la fille qui parlait juste avant Parce que la chirurgie esthétique, maintenant, on l'emploie pour, justement, enlever l'acné D'accord Alors, l'acné au visage, l'acné sur les bras L'acné sur le bout des seins Dans le dos Dans le dos, c'est dégueulasse Ouais, dans le dos, aussi, ouais Donc, Rigaud, comme je vois qu'il y a des questions, je pense Bah, ouais, il y a dévi1 qui te demande où t'as mis l'acné de chez lui Parce qu'il est dehors et il sait pas Non, non, mais on s'est même pas dit Donc, Manu, tout à l'heure, tu m'avais posé une question, toi, sur l'acné Oui, on demandait sur Minitel, je sais plus trop qui Demandait si, toi, quand t'étais jeune, t'as eu de l'acné Et si oui, comment tu t'es soigné et pourquoi, dans quel sens Alors, ça, de l'acné, de toute manière, ça s'attrape Facilement, souvent, il y en a qui disent que c'est en mangeant trop de charcuterie Ça, c'est des dermatologues qui l'ont dit T'as dû bouffer du saucisson, quand même Non, non, mais ça, attends, laisse-moi finir Ou en pétant avec une trouille Oh, ta gueule, toi, petit kiste Donc, il y a certains dermatologues qui m'ont dit Qu'à force de manger trop de charcuterie, on pouvait attraper de l'acné Maintenant, comment que ça se soigne ? Ça se soigne avec des produits style... Merde, comment on... Pas de marque Non, mais il y a des savons spécialisés Des savons spécialisés, et puis des trucs comme du pouce-mousse-mousse Du quoi, du quoi, du quoi ? Pas de marque Des gens de pouce-pouce, là, pour se laver les mains C'est un produit spécial, donc... Du directol Alors, dernière question pour finir le débat On remercie en pile d'art du bordel qu'il a fait jusqu'à maintenant Alors... Qui c'est qui parle, là ? Petit kiste Alors, petit kiste, ça, ouais, tiens, je... Je l'avais pas vu, lui Tiens, réponds, toi Ah, bah, je suis là, regarde Bah, réponds Ouais, bah, oui, l'acné, moi, j'en ai jamais eu Mais j'espère que j'en aurai jamais Non, mais... T'en as jamais eu, d'accord ? Mais si un jour, t'en attrapes, tu te demanderas pourquoi Je te le refile Ouais, non, mais je te demande si c'est une maladie Bah, ouais, c'est une maladie, hein Bon, bah, alors... Il y a des personnes qui ont... Mais il y a des personnes aussi, c'est tout concentré Dans une partie du corps Mais si je dis le coup, ça va te vexer, donc je le dis pas Moi-même, de toute manière, je le sais Mais moi, c'est pas de l'acné que j'ai dans le cou, tu vois Oh, pourtant, il y a du pus dedans, c'est pareil Non, non, non, c'est pas du tout, c'est pas... D'ailleurs, Gérard, il y a un seigneur qui demande Si on peut se nourrir du pus de l'acné Ah, non, là, je vais te dire une chose Le mec, voilà, c'est une question C'est seigneur, quand même Ça donne faim, toi Arrête, Gérard, assis-toi Gérard, Gérard Ah, ouais, non, mais Gérard, c'est pas de ta faute Alors, pour terminer la dernière question Donc, tout le monde a répondu Comme il ne reste plus que Syros, Petit Kist, Soutif et Paté Toit Donc, dernière question Non, suppos, j'ai dit que c'était terminé pour toi Non, mais deux, on a trois, il est là Non, mais attends, parce que On a peut-être que vous passiez votre boulot correctement Ce temps-là Au premier débat, Manu l'a fait Manu l'a fait super bien Toi, c'est de la merde Écoute, Gérard, on a réussi à envoyer deux suppos On peut en envoyer un troisième, quand même Non, mais c'est de la merde, parce que t'as repris la même personne Tu lui as dit, je te fais passer pour suppo 3 D'accord ? Manu, quand j'ai dit Qu'il vire quelqu'un, il a fait son boulot correctement C'est faux Toi, à part Chercher une voiture caca, c'est tout ce que tu sais faire Qu'on vire ta merde Ok, dernière question Petit Kist, deux Ouais, c'est ça, bien sûr Gégé, écoute-moi, la famille suppos On est trois frères, c'est comme les Hansons Parce que nous, c'est les suppos, c'est tout Bon, c'est bon, arrêtez vos conneries, parce que vous commencez à me les gonfler Allez, Gérard, dernière question Allez, allez, on y va Il est 3h10, donc le débat Le dépistage peut-il vous rendre malade ? Ouais, je pense que ouais Ouais, alors vas-y Je pense que ça peut te rendre malade Ça s'arrête là Non mais attends, dans quel sens Que ça peut te rendre malade ? Allô ? Allô, Gérard ? Non, mais Gérard, j'ai été coupé par Phil là encore A tous les coups Non, je disais donc que ça peut rendre malade Dans le sens où ça peut rendre malade D'accord, c'est bien Petit Kist, tu vois bien que le dépistage Ça rend malade, je sais pas si t'as vu Quand Chomara, elle a fait une queue de poisson à Jacques Villeneuve Il a eu la chiasse, Chomara Et ta connerie, elle a eu la chiasse ? Non mais tu parles de ça, du dépistage, moi je te réponds Il a dépisté, voilà Non mais attends, le dépistage, tu sais ce que c'est ? Bah oui, c'est quand il sort de la piste, voilà N'importe quoi, enfin bref C'est quoi le dépistage, Gérard ? Non mais je vais laisser tout le monde parler, après je... Non mais comme ça tu diras pas, bien sûr Le dépistage sur IRC... Attends, toi tu m'éteins le micro et tu t'écrases maintenant Je peux t'entendre jusqu'à la fin, ok ? Sur IRC, on me dit, le dépistage, c'est quand tu... Quand tu coupes tes pistaches en D Non plus Alors, Sirose C'est le dépistage, quoi ? Bah le dépistage, peut-il vous rendre mal... Eh, qu'est-ce qu'elle éconne, à ton mère, toi pétasse, là T'as compris ? Ah mais pourquoi ils sont méchants avec moi, je comprends Non mais attends, celle-là, je vais la calmer Parce qu'elle va répondre tout de suite Soutif ou peut-être moi, maintenant vous répondez toutes les deux Oui, Gérard Alors vas-y Alors tu réponds Vas-y Soutif Vas-y Soutif, je te laisse la parole Euh, le dépistage... Ouais, ouais Regarde Richard Virac Bon d'accord, toi... Pas de marque, pas de marque On l'a dopé à la suite de son plein gré, maintenant il est malade Donc on le soigne en lui faisant des piqûres Mais je vois pas du tout le rapport Je te dis qu'il est malade, donc il a été dépisté gravement même N'importe quoi, toi tu comprends Je crois que t'as été... Je me demande si t'es vraiment une infirmière Gérard Gérard, c'est moi Ouais, sur Minitain, on... On nous demande si chez toi aussi, ta pisse, elle tâche Ah, exactement Alors, qui c'est qui pose cette question con ? Euh... Question con Sur IRC, c'est pour continuer Bah, question con, bah c'est un con Voilà, c'est tout Est-ce que la piste tâche ? Ouais, pareil Ce serait pareil sur l'IRC Pas tête-poids pour finir ? Euh, non, non, le dépistage, au contraire, c'est fait justement pour éviter les maladies Et voilà, quoi, point barre D'accord, bah, c'est bien Gérard, il y a Yankee qui te conseille d'aller faire un dépistage de trisomie Bon, bah, lui, il ferait mieux de faire... De se taire un petit peu pour dire des conneries Cyrus, pour finir ? Bah, non, le dépistage peut pas être une maladie Dépose, dépose, dépose Merci Allez, faites la fête Gérard, la conclusion aussi Non, non, mais vous laissez Cyrus finir, s'il vous plaît, merci Allez, la grosse, là, dépose, espèce de fainéance Alors, petit kiss, tu dégages Allez, hop Tu viens dans le coup, hein Allez, hop, dans le coup Un coup de calpe Pas dans le cul, parce que je suis poli Quelqu'un a dit comment vous voulez, hein ? Non, moi, je veux m'appeler... Bon ! Et on n'a que une chaude pisse Et vous êtes vraiment des fils de putes, hein ? Vous êtes vraiment des fils de putes de faire chier les gens comme ça Oh, là, là, moi, je suis outrée, là Ouais, salut, c'est Blénoragie Je peux répondre, Gégé ? Vas-y Je voulais dire que le dépistage, ça peut pas être une maladie Vu que le dépistage, c'est fait pour, justement, déceler les maladies Voilà, et donc, je peux vous dire une chose Que le dépistage sert vraiment à quelque chose, surtout Chez les femmes et pour nous, les hommes Si on veut pas avoir certaines maladies Surtout, il y a les cancers du sein que je voulais pas aborder Parce que sinon, le débat aurait duré au moins jusqu'à 4 heures Ça, c'est une question que j'ai pas parlé J'ai pas voulu parler non plus du sida Parce que c'était un problème trop important Et ça, je ferais un débat dessus avec le cancer du sein Je ne sais pas quand Je vais voir ça avec le chef Mais sans fil d'art au standard Faut vraiment qu'on le travaille, ce débat C'est le débat 2012, le débat, hein ? Là, ça peut être joli Ça peut être votre dernier Non mais attends, c'est un point On va voir, mais je pense qu'on l'est pas du tout On le fait, on le rejette, on l'envoie à la CLT, à la CIA On l'envoie à la CSA, à tout le monde Ils valident Qui serait qui reste, là, maintenant ? Alors, on va demander à la cuvette 3h12, hein, Gérard On fait conclusion, hein ? Donc, conclusion, cuvette ? Ouais, bah, ton débat, il y a mieux Parce que, enfin bon, c'était un peu trop compliqué pour moi, je pense Non, bah, t'avais qu'à comprendre un peu T'avais qu'à comprendre, t'avais qu'à mieux dire T'avais qu'à mieux t'exprimer, surtout, en fait Ouais, non, mais vous avez qu'à vous adresser à Pildar Non, non, non, c'est tout Tu fais mal ton boulot Non, non, mais c'est Pildar qui a foutu sa merde C'est Pildar qui a foutu sa merde, cuvette, d'accord ? Alors, tu le remercieras en lui disant au revoir Suppos Ouais, bah, je voulais dire que j'entends que Max est revenu On l'appelle le star system Toi, Gérard, je pense que t'es le star cystite C'est-à-dire le roi des infections urinaires Alors, toi, mon pote, c'est la dernière fois que tu passeras dans mes débats, d'accord ? Ok Petit quiste Oui, bah, alors là, t'as fait fort, Gérard Moi, je me suis bien marré Donc, il faudrait que tu continues comme ça sans t'en prendre à ton équipe, quand même Bah, si, parce que c'est grâce à Pildar si c'est un merdé Non, mais non, mais non C'est la cause La cause, c'est Pildar Parce que, maintenant, Rigaud, avant que tu termines On va essayer d'avoir... On demandera le chiffre après Après, après Donc, pour toi, alors Ouais, faut pas que tu t'en prennes à tout le monde Il faut pas que tu passes ton temps à virer des gens, aussi Tu comprends ? Bah, ouais, mais dans ce cas-là Quand je vous pose des questions Si vous voulez pas répondre dans ce cas-là Ça sert à rien qu'on vous sélectionne pour faire les débats Si vous ne voulez pas répondre On veut répondre, mais bon, des fois On répond à côté de la plaque Mais c'est pas pour autant qu'il faut virer des gens Mais ouais, mais si vous répondez à côté des questions Ça sert à rien non plus de vous sélectionner pour faire les débats C'est tout Bon, d'accord, je suis d'accord avec toi Voilà Je te souhaite une bonne soirée Ok, bah, moi aussi Soutif Moi, je suis déçue parce que, bon Je suis quand même dans le milieu hospitalier Donc, j'aurais aimé participer à tout le débat Parce que j'avais des choses intéressantes à dire Néanmoins, bah, c'était nul Et j'ai Fildar Ouais, bah, c'est bien Tu peux retourner le voir, alors Voilà Donc, pas tête-fois pour toi Ouais, bah, comme d'habitude, tes débats C'était vraiment de la débilité grave, quoi Et néanmoins, faut pas t'en prendre à Fildar Si tu sais pas gérer toi-même ton équipe Ouais, bah, dans ce cas-là Fildar, il avait qu'à pas faire le con Parce que c'est grâce à lui Si, à un moment donné Sur l'IRC, on avait des petits problèmes Ouais, mais enfin, c'est quand même grâce à lui Que t'as des auditeurs, quoi Ouais, non, mais c'est grâce Quand je lui demande de virer certains auditeurs C'est pas la peine qu'il essaye de les reprendre après Pour leur dire Vous passez sous un autre nom Ouais, enfin, Gérard Si t'es pas capable de gérer C'est ton problème De toute manière, dans l'équipe Y'en a que deux qui font bien leur boulot Et c'est tout Les autres Ouais, bah, ouais T'as encore raison De toute façon, ton débat Ça a encore été de la merde Et puis, voilà, quoi Eh bah, si t'es pas content Tu as bouffé ton pâté de foie Ok, salut Oh, joli Cirrhose, pour finir Cirrhose T'es vraiment une tue, toi Mais c'est pas moi Mais c'est pas moi Mais c'est pas moi Je crois que, voilà Tu peux arrêter la sonnerie, finalement Voilà Attends, toi, je te jure C'est la dernière fois Donc, conclusion Ouais, conclusion Donc, sur l'IRC On était presque 2000 On est arrivé jusqu'à 1995 Jusqu'au moment où tu as insulté un auditeur Tu l'as traité deux fois de fils de pute Et y'a au moins 500 personnes qui sont parties Et y'a beaucoup de gens Qui ont été outrés par ton langage Et je te lis quelques conclusions Encore une fois Un débat sans queue ni tête Comme Gérard Le Viagra est au sec Ce que la connerie est à Gérard Le Viagra fait partie de l'acné Et le dépistage permet d'éviter les coups de soleil Non, mais pas du tout Pas du tout Mais bon, y'a quand même combien de connectés ? Y'en a eu On a fait 1995 Ah bah Bravo Gérard C'est l'exploit C'est le record Je crois que c'est un record mondial, alors même Bravo Non, non, mais toi Toi, tu m'en as fait virer quand même 200 Il a eu du mal à les récupérer Ouais, beaucoup de mal Mais t'avais perdu les numéros, aussi Ouais, mais En plus Quand tu as une personne Qui n'a pas fait sa conclusion Tu l'as carrément raccroché au nez Non, c'est elle qui a coupé Non, non, non Non, non, non Non, parce que je vais l'appeler Je vais demander Ah, tu la connais ? Bien sûr Ah bon C'est qui ? Non, à ton avis Ah, c'est Sandy Ouais, bah bravo Bravo Gérard Alors, fais-moi confiance C'était qui ? C'était Sandy Non, mais De quoi ? Personne n'a reconnu Mais qui ? C'était quoi son nom ? Cirrhose Oh T'as déguisé bien sa voix C'est pour ça qu'on entendait Vas-y, là Ah, non De quoi ? Je comprends mieux Non, mais je comprends mieux Je comprends mieux Ouais, ça m'étonne pas de Manu Bah, conclusion C'est dommage que Fildar Il a foutu sa merde Ah, oui, je sais C'est une belle conclusion Ouais, bah, de toute manière J'espère que la semaine prochaine Tu seras pas dans l'équipe Parce que je veux pas de toi C'est simple À moins qu'il travaille À moins qu'il travaille Non, non, bah, il va travailler Déjà, il va essayer Je vais essayer de rattraper des points Je vais faire un stage J'ai entendu ce soir Qu'il attendait 11h30 Pour trouver des auditeurs Bah, si c'est Manu Qui doit trouver des auditeurs Autant le mettre tout seul Avec une nana Et lui, on peut le virer Bah, on va le mettre Avec Bébé Rose, ouais Voilà Avec la catastrophe Donc, moi, je peux Comment ça, la catastrophe ? Moi, je peux dire quand même Merci à Manu Des deux débats Parce que c'est la première fois En je sais pas combien de temps Que tu me remercies, Gérard Donc, et puis, surtout Merci, Rigo D'avoir fait ton boulot Correctement De rien, Gérard Fildar, je te remercie pas Parce que tu m'as fait de la merde Je te sers pas la main Donc, voilà Donc, on s'écoute Ah, je sais pas Le disque Bah, moi, je sais plus Je sais pas Allez, file le dernier titre Je suis parti de l'équipe Mais moi, je te réintègre Allez, vas-y Non, non, c'est pas lui Qui commande Dans les débats Le jeudi, c'est moi Je crois que c'est Technolab avec Fusion Voilà Et demain Ben, le droit de l'impro Y'a pas de problème Là, vous allez retrouver Rigo pour la nuit sans pub Ouais, je vais faire La nuit sans pub, ouais Vous allez retrouver Rousseau pour la nuit sans pub Et dès demain matin 6h, Barthe Avec des scooters à gagner Et bien sûr, demain soir Dès 22h On se retrouve Le Star System Yes Et moi, je vous retrouverai Dans le courant de la semaine S'il y a des petites réactions Par le Par le guet Des auditeurs Par le guet Par les guets, ouais Voilà Il y en aura plein, t'inquiète pas Bonne nuit à tous Et à la semaine prochaine Ouais À la semaine prochaine == Le débat sur l'armée == === Contexte === === Les personnages === === Transcription === Et on est déjà 1664 ! Ah bah d'accord, on commence déjà fort ! 1664 ! On commence déjà fort, il est 0h19, on accueille Canif... Caniche... On fait quel débat là Gérard ? Sur l'armée ! Voilà, donc on accueille les auditeurs. Canis ! Canif ! On peut écouter FN Radio sur 94.5 Bonsoir Gérard ! Bonsoir, Tagada 21 ans, Paris 101.9 Salut ! Salut ! Ah, Tagada ! Andouille, 20 ans de chinois, on peut écouter FN Radio sur 100.2 Salut Gérard ! Salut ! Croupion, 22 ans, Verdun, 93.9, FN Radio Bonsoir Gérard ! Bonsoir, Tony ! Bonsoir Gérard, bonsoir toute l'équipe ! Bonsoir ! Paris, FN Radio 101.9 Yes ! Et... Prothèse, 21 ans, Royan, 99 FM Bonsoir Gérard, bonsoir à tous ! Bonsoir ! Donc, première... Comment ? Big up ! Merci pour Rigaud, donc... Merci pour Rigaud, c'est pas mal. Alors, bon, on commence. Celui qui a un téléphone portable ou pourri, là, qu'il dise tout de suite, parce que ça commence déjà mal. De toute façon, Darty s'est fermé à ce temps-là. Non, mais dans ce cas-là, s'il a un téléphone pourri, dans ce cas-là, il va avoir Manu au standard, ça ira plus vite tout de suite. Je vais le trouver. Donc, alors, première question, avez-vous fait déjà l'armée ? Si oui, dans quelle arme ? On va demander à... Andouille ! Bah, écoute, moi, je suis désolée, mais j'ai jamais fait l'armée. D'accord. Canis ? Bah, moi, écoute, Gérard, en tant que fille, j'ai jamais fait l'armée, mais j'aurais aimé, franchement. D'accord. De toute manière, ça, c'est des questions qu'on va aborder lors du sujet aussi, hein. Ouais, ouais, ok. Donc, Tagada ? Moi, oui. Dans quelle arme ? L'armée de terre. À 21 ans, t'as déjà fait l'armée, donc t'as devancé l'appel, alors ? Bah, non. Bah, si. Bah, non, ils sont venus me chercher. Non, non, non, non, non, attends. Commence pas à dire des conneries, toi, parce que... Je te dis tout de suite que... T'as eu des mises ? Ouais, ouais, non, non, mais Tagada... Oh, oh, Tagada, Tagada, Tagada. Oui. Soin de toi. On se calme, ok ? Donc, à mon avis, t'as devancé l'appel parce qu'à 21 ans, ils viennent pas te chercher comme ça, hein. Alors, me prends pas pour un con. Me prends pas pour un con, s'il te plaît. Ça dépend si vous voulez s'engager. Tu voulais t'engager, Tagada, ou pas ? Bah, oui. Non, mais attends, ça, les trucs sur l'engagement, c'est moi qui les pose, les questions, c'est pas toi, d'accord ? Non, mais tu dis que c'est pas possible. Non, mais tu as pas commencé déjà le premier débat comme ça. D'accord, je voulais poser une question, je suis désolé. Euh, Andouille, toi-même. Oui, bah moi, j'ai déjà répondu, j'ai déjà répondu. Ah, t'as déjà répondu, c'est vrai, je t'ai passé en premier. Croupion ? Ouais, alors moi, je suis totalement anti-militariste, donc il est hors de question que je mette les pieds dans une caserne avec des cons, quoi. Ouais, mais ça... Oh là, merci pour le Larsen. De toute manière, ça, je vais te dire une chose, que maintenant, ça va être bientôt obligatoire, alors donc, t'auras pas le choix. Euh... Tony ? Moi, je suis pro-militariste, mais je me suis fait réformer. D'accord. À 20 ans, t'en es sûr de ce que tu me dis, là ? Ah, sûr et certain, ouais. Ouais. Je pense pas à moi, à mon avis. Et je te jure, et puis je te raconterai même l'histoire, si tu veux. Ouais, non, non, mais j'ai pas besoin de savoir toute l'histoire complète. Prothèse ? Ouais, bah moi, je voulais m'engager, mais je me suis fait réformer parce que j'étais pas assez con pour faire l'armée, quoi. De toute manière, y a pas besoin d'être con pour faire l'armée, d'accord ? Parce que si tu... Non, mais attends, si tu veux dire ça pour moi, tu vois, je vais te dire une chose... Non, non, mais y a pas besoin d'être con pour faire l'armée, de toute manière, l'armée, c'est obligatoire et c'est tout. Tu m'as dit tout à fait, les cons, de toute façon, ils sont chefs. Ouais, bah, de toute manière, avec un con comme moi, on s'amuse, avec un con comme toi, on se fait chier, d'accord ? Sur IRC, y a Zioui qui te demande si tu aimes ramer. Je vois pas du tout le rapport avec le débat, hein. Bah, pourtant... Donc, moi, je peux vous dire que j'ai fait l'armée, dans quelle arme... Eh, en fait, personne m'a dit dans quelle arme... Ouais, dans quelle arme, Gérard, au fait ? Non, mais... Au fait, Gérard, dans quelle arme ? Prothèse, ouais, pour l'instant, c'est moi qui pose les questions. Ouais, mais dans quelle arme, au fait, Gérard ? C'est moi qui pose les questions, c'est pas vous. Oui, mais dans quelle arme ? C'est pas... C'est moi qui pose les questions, toi, Prothèse. Au fait, ouais. Dans quelle arme, toi ? Bah, j'ai été réformé, je t'ai dit. Eh, c'est le qui dit au fait, tout à l'heure, tu vas te calmer, toi. Je voulais m'engager dans les RIMA, Régiment d'Infanterie, Marie. Ouais, dans l'infanterie. Ouais, j'suis en ligne. Tony ? Bah, je te dis, je me suis fait réformer, mais moi, je voulais n'importe quoi, de la cuisine, de n'importe quoi, moi, j'aurais fait. Croupion ? Oui, tout sauf la Légion. Ouais. Andouille ? Moi, je serais plutôt partie dans l'arme blanche. C'est-à-dire, chasseur alpin ? C'est du ninja. Tu m'as outé les mots de la bouche. Bah, c'est chasseur alpin, hein, les plus blanches, ouais. Les samouraïs. Euh, Tagada ? C'est quoi, la question ? Non, mais je te demande dans quelle arme, abruti, parce que tout à l'heure, tu as dégagé, ça va aller vite. Abruti, toi, si tu commences. Dans quelle arme, quoi ? J'ai fait l'armée ? Ouais. Bah, je te l'ai dit tout à l'heure, dans l'armée de terre. Ah, non, tu ne l'as pas dit, nuance. Je l'ai dit, je l'ai dit, j'ai... Euh, Canis ? Bah, moi, j'ai rien fait. Canif ? Canif, ouais. Bah, j'ai rien fait, mais ouais, dans l'armée de terre, j'aurais aimé. Bah, moi, j'ai... Tu verras, il y a des mâles dans l'armée de terre. Ouais, bah, oh, tu te calmes, toi, parce que tout à l'heure, tu as fait comme la semaine dernière, Tony. Attends, Gérard, toi, tu l'as fait dans quelle armée, alors ? C'est... Moi, c'est... J'étais dans l'infanterie, dans le 110e R.I. en Allemagne. Et t'inventais quoi ? T'inventais quoi ? Non, mais c'est le 110e Régiment d'Infanterie, Abruti. Ah, Infanterie, j'ai compris. Et toi, dans quelle arme ? Tu ne l'as pas fait, tu ne l'as pas fait, parce que toi, t'es trop con, alors ? Déjà, lui, il est trop con, déjà, pour faire son stand-up, il attend 11h à nuit. Il y a un petit sondage qui nous a été communiqué, donc, à la question, pour ou contre l'armée, 20% des gens... Non, mais c'est important de savoir, Gérard. Ouais, mais ça, on n'en a rien à foutre des pour ou contre, parce que c'est pas... C'est un débat, on en parle, vas-y, Manu. Donc, 20% des gens sont pour Alain Prost, 30% des gens n'ont pas de permis, et 50% n'ont jamais été alarmés en un seul mot. Bon, alors, déjà, les deux premières questions, je ne vois pas ce que ça vient tout là-dedans. Les gens ont répondu ça, ils sont... Ouais, mais ceux qui répondent ça, c'est des cons, ce n'est pas de ma faute. Donc, deuxième question, à quoi l'armée sert-elle de nos jours ? Aujourd'hui, on va demander ça à, ben, Tony. Non, on va demander à Tagada. Pardon ? Tagada. À se faire des mecs ? Putain, mais, hé, hé, hé, non, mais t'es vraiment con, toi ! Il y a eu le sergent du mec, après, il y a eu l'infirmier, je m'en rappelle... À quoi sert l'armée de nos jours, aujourd'hui, Tagada ? Tu réponds comme rectement, ou sinon, tu gerbes. Bon. Euh... À former des hommes, des vrais, des mâles, hein. Bon, maintenant... Tu me prends Tagada, tu lui expliques comment que ça se passe, un débat. Ouais, mais peut-être que pour lui, justement, l'armée... C'est mon point de vue, hein. Ouais, non, mais... Non, mais explique-lui quand même comment que ça se passe, un débat, parce que... Toi, tu poses une question, il doit répondre. Ouais, ben, pour l'instant, s'il répond à côté de la plaque, c'est pas la peine de... Non, il répond ce qu'il veut. Il répond au mot de l'acteur. Euh, Rigaud, attendez, c'est vous, ok ? Rigaud, il y a une question, non ? Euh, ça va très vite, vu qu'on est en train de dépasser les 1800 connectés. Oh, lol, lol, lol, lol. Alors, l'armée sert à se mettre des cotons-tiges dans le cul ? Non, non, ça c'est bon, ça va trop vite, j'ai pas trop le temps. C'est qui qui s'amuse à dire ça ? Ben, c'était un certain Gérard que... Ah bon, d'accord, ouais, ok. Euh, Andouille ? Ouais, ben, l'armée, ça sert à se battre. Ah bon, pour toi, l'armée, on se bat ? Ouais, ouais, c'est une école de bagarre. Ah bon ? Ah, ok, attends, attends, on va... C'est excellent. Ah ouais, d'accord. Alors, tu crois que c'est l'armée qui fout le bordel dans les rues ? Non, non, non, mais je pense que là-bas, c'est une bonne école pour apprendre à se battre. Ça fait qu'après, quand tu rentres chez toi, tu peux te battre tranquille, quoi. Ah bon, c'est nouveau, ça ? Ouais, vive la guerre. Ah ouais, ouais, c'est nouveau, ça, ça vient de sortir. Tiens, il faudrait que je réfléchisse à cette question. Euh, Canip ? Ben, écoute, moi, Gérard, pour moi, je sais vraiment pas à quoi ça sert, parce que vu le peu de gens qui veulent y aller, ça doit pas servir à grand-chose. Ben, disons, ça sert pas à grand-chose dans l'ensemble. En fin de compte, tu perds carrément facilement un an de... Si t'es en stage ou au boulot, tu perds facilement une année pour rien. Ouais, mais maintenant... Non, non, mais attends, j'ai pas fini avec tout le monde, là, on va demander à tout le monde. Andouille, elle a répondu. Croupion ? Ouais ? Donc, toi ? L'armée, ça sert à faire chier les gens, à faire chier les Parisiens tous les 14 juillets pour voir défiler 5 000... Bon, ben, ça... Bon, là, merci pour le Larsen. Y a pas de quoi. Euh, Tony ? À se faire sodom. Ah, ouais, d'accord. Alors, Tony, tu me redis encore une connerie comme ça, je te préviens, tu fais comme la semaine dernière, je te gerbe au premier débat, OK ? Tu me poses une question, je te réponds. Non, non, mais je te demande, sois un peu moins con, hein, que tu l'aies. Tu réponds correctement aux questions, sinon tu gerbes. Je te le dis tout de suite, parce que j'ai pas l'intention de me faire chier ce soir. Je suis désolé. Gérard, sur IRC, il y a Le Chiant qui te demande s'il faut savoir faire du rouille. Du windsurf pour faire l'armée de l'air. Oh, non, c'est quoi, ça ? C'est quoi, du windsurf ? Si quelqu'un pouvait me le dire, c'est quand tu sautes en parachute avec ton tank. Ah, d'accord. Non, non, non, tu sautes, alors tu vois, t'as un petit string rose. Qui, qui, qui, qui, qui c'est ? Ah, c'est Tagada. T'as un petit string rose avec des petites dentelles sur le côté. Ensuite, t'as une jartière, voilà. T'es sur un surf et tu prends un gros code. Alors, le code, tu le décides. Non, non, c'est bon, Tagada, ça y est, ça y est, ça y est, c'est bon, on a compris. Prothèse pour finir le thème de... Ouais, bah, l'armée, je dirais que ça sert à apprécier le kaki et les corvées de chiotte. Bon, bah, ça, donc, moi, je... Comment ? Ouais. Non, mais rien. Qui c'est qui a voulu rajouter quelque chose ? Tagada. Tagada ? Non, c'est pas moi. C'est pas moi. Bon, alors... Non, mais c'est pas grave, vas-y. Donc, c'est pas... Donc, l'armée, à l'heure actuelle, sert à quoi ? Bon, bah, en fin de compte, comme j'ai dit tout à l'heure sur Andouille ou Croupion qui m'avaient parlé de ça, bon, bah, j'avais vaguement dit, donc, normalement, l'armée, c'est, en fin de compte, vous perdez un an de salaire, parce qu'en fin de compte, vous n'êtes pas sûr, quand vous ressortez de l'armée, de récupérer votre emploi. Normalement, si, vis-à-vis de la loi et selon les collections collectives de la société, normalement, ils sont obligés de vous reprendre, quand vous avez terminé l'armée, ils sont obligés de vous reprendre facilement, normalement, si je ne me trompe pas, et je pense que Manu ou Fildar ou Grégoire pourront me confirmer, je crois que, normalement, c'est un mois, un mois, normalement. Par contre, Gérard, c'est Manu, là. Ouais, l'armée, ça sert pas, tu peux pas passer ton permis gratuitement, tout ça, des trucs comme ça ? Mais, justement, mais attends... Mais, c'est pas les bonnes questions, Manu, que tu poses. Je savais pas, je savais pas. Justement, celle-là, celle-là, on va la poser, mais c'est la toute dernière. Je savais pas, je suis désolé, Gérard. Vu qu'on a commencé plus tôt... Et, Gérard, je vais te demander, ceux qui vont à l'armée et qui, avant, n'avaient pas de travail, est-ce qu'ils le récupèrent, après ? Ben, ça, s'ils en ont pas, ils pourront pas en retrouver derrière. Donc, c'est l'arnaque. S'ils en avaient pas au départ, ils en auront pas à la sortie. Ouais, mais ça, c'est regrettable. Non, non, sauf parce que, maintenant, il faut dire une chose. Quoi sert l'armée ? C'est qu'on peut très bien, aussi, trouver... Un job. Faire un job à l'armée, à la sortie, si vous avez été compétent pendant les 12 mois qu'on... 10 mois. Est-ce que tu peux avoir un petit pot ? Non, non, mais ça, les... Un dipôme. Est-ce qu'il peut avoir un dipôme à l'armée, ou pas ? Non, non, non. Non, c'est impossible. Déjà, c'est tout juste s'il y en a un qui arrive à récupérer leur permis de conduire, à la fin. Ils savent même pas lire. Mais s'ils ont pas son permis à l'armée, est-ce que c'est envisageable d'avoir dans le civil ? C'est qui, ça, qui me pose ça ? Oui, mais attends, Tony, c'est la 11e question. C'est la dernière question, Tony. Ah, pardon, excusez-moi. Donc, si vous voulez commencer par la 11e, on va le faire tout de suite, et... Non, ben non, on va... Non, mais si, on va... Ben si, comme t'en parles. Bon, ben allez, on fait la 11e, ça va. Donc, Tony, comme t'en parles, on fait la 11e. Après, je veux la 8 et la 6, si c'est possible. Bon, ça y est. A la bouche. Donc, alors, avez-vous eu l'occasion de percer votre permis de conduire, donc, à l'armée ? Non, qu'on m'a demandé la prothèse ? Non. Non. Je voulais, mais c'est justement pour ça que je voulais m'engager. C'est pour passer tous mes permis, puis après, tu verras quoi. Mais j'ai pas pu. Oh, non, mais attends, parce que de toute manière... Mais attends, si tu t'engages, faut bien préciser... Je vais préciser une chose, que si tu veux passer ton permis, de toute manière, même en t'engageant, t'es obligé de faire ton engagement jusqu'au bout. Ah ouais, justement. Et si tu t'engages, normalement, c'est pour 2 ou 3 ans, ça dépend du temps que tu veux faire. Ça dépend de l'armée aussi. Moi, on m'a dit que les épreuves de conduite, elles étaient, à l'armée, elles étaient redoutables. C'est vrai. C'est Tony, ça ? Oui. Ouais, non, mais ça, je vais te dire... Attends, Tony, je te prends tout de suite, oui ? Ouais, prends. Oui, tu me rends compte que t'en as de la chance. Merci, qui te demande si t'as été maître chien à l'armée, est-ce que c'est de là que vient ton histoire d'amour récente ? Euh, non, maître chien, je pense pas que... Et pourquoi t'as tué le chien aussi ? Euh, Tony ? Oui ? Je t'ai dit, tu arrêtes tes conneries, sinon tu vas dégager avant 1h du matin, toi. Mais ça, c'est pas envisageable. Ouais, c'est envisageable, alors fais bien gaffe. C'est inadmissible. Ouais, alors donc, tu disais, toi, tout à l'heure, comme t'avais une question à me poser, donc tu peux peut-être finir ta pensée. Hein ? Bon, d'accord, Tony, je crois que... Ah, non, non, non, c'est pas moi qui ai parlé, là. Non, mais... T'avais une question tout à l'heure, Tony, à poser, vas-y. T'avais une question. Ça se finissait par B, c'est ça ? Bon, d'accord. Tony, ça commence à bien faire pour toi. Non, mais c'est quoi, la question ? Croupion, Croupion. Non, non, ça y est, ça y est, ça y est, ça y est, ça y est, Tony. Ça y est, Tony. Croupion, Croupion. Ouais ? Donc, toi ? Ouais, bah, moi, de toute façon, j'ai pas fait l'armée, hein. Mais il est hors de question que je passe mon permis à l'armée. Mais ouais, non, mais c'est la condition sine qua non, si tu veux rentrer. Oh, là, là ! Hé, Croupion ! Oui ? Attendez, s'il vous plaît, Croupion ! Oui ? T'as pas un téléphone pourri ? Non, non. Ça, c'est... Ça fait drôle, hein. Mais il est possible. J'ai l'impression que c'est elle, hein. Je vais voir, je vais voir. Un portable, ça, hein. Andouille. Oui ? Bah, moi, comme je t'ai dit, donc, j'ai pas fait l'armée. Hum ? Mais, euh... Non, mais, de toute façon, moi, ça m'intéresse pas de passer mon permis. Je préfère profiter des gens, tu vois, profiter de leur voiture. Comme ça, je paye en réunion. Ouais, mais ça, c'est un peu dégueulasse, n'empêche. Ouais, mais enfin, chacun vit sa vie comme il veut. Ouais, c'est vrai. OK. Est-ce que tu le payes, le permis à l'armée, ou pas ? Non, mais attends, justement, je vais répondre après à la question. Ah, d'accord. Euh, Tagada. Eh, on m'a fait un au revoir. Oh, Tagada, tu réponds correctement, parce que tout à l'heure, ça m'a... La bouche pleine. Ça m'a gerbé, toi. Déjà, quand je te parle, t'évites de manger, t'évites de faire comme Fildar. Non, il mange pas, là. Deux secondes, je voulais juste dire, quand même, remercier les gens de l'IRC, parce qu'on est déjà plus de 2000, on est 2011. Oh là là ! Et je voulais saluer Yannick, qui nous écoute en direct du Canada. Ils sont beaucoup à nous écouter, on t'écoute à travers le monde. Ouais, bah, c'est bien. C'est pas mal, ouais. Et beaucoup de militaires, aussi. Je crois qu'on va battre les records, encore. Ah, c'est déjà fait. Euh, Canif. Ouais, bah, non, écoute, Ira. Moi, j'ai pas passé mon permis à l'armée, non. D'accord. Donc, alors, tu voulais me poser une question ? Ouais, tu t'en rappelles plus ? Non. Bah, maintenant, tu vas la répéter. Est-ce qu'on paye le permis de conduire à l'armée ? Non. Pourquoi ? Ça, c'est... Tu le payes pas, parce que c'est toi qui demandes à passer ton permis, donc c'est gratuit. Et combien coûte ? Zéro point, de toute manière. Ça dépend du contingent, dans quel contingent tu te situes pour passer ton permis. C'est quoi, un contingent, Gérard ? Par exemple, on est en combien, là ? C'est comme un compte en banque ? Novembre ? Non, non, non, c'est pas du tout pareil. Contingent, c'est par exemple du... C'est peut-être des naissances. Non, plus ! Arrête de dire des conneries, toi, quand je parle. Merci. Contingent, c'est par exemple... C'est tous les deux mois. Donc, tous les deux mois, t'as un contingent. Comme là, le mois prochain, ça sera la 98-12. Ah, d'accord. C'est ça qu'on appelle des contingents. Ouais, c'est l'année plus le mois. Voilà. 98-12, c'est quelle ville, ça ? Oh, t'as gueule, toi. Donc, voilà, comme ça, t'es servi. Et tu peux passer tous les permis ? Bateau, tout ça ? Non, non, non, tu passes uniquement que le permis B ou le gros, là, le 40 tonnes. Mais par contre, il faut bien dire une chose, que celui qui passe son permis à l'armée, ils ont un certain nombre de kilomètres à faire pendant leur armée pour qu'ils soient validés après dans le civil. Mais par contre, il y a un permis qui n'est pas validé et c'est dommage. Il est valable ou pas ? Disons non, il ne sert à rien. On a dans le civil, en fin de compte, ce permis-là, c'est le permis VAB véhicule d'avant-blindé. C'est les fameux trucs, là, tu vois, les sirous, comme les gendarmes mobiles qu'ils ont, là, en ce moment. Ah, comme dans la 7e compagnie ? Ouais, voilà, grosso modo. Non, mais ça, c'est avec des chenilles, c'est pas pareil. Ah, d'accord. Gérard ? Oui ? Il y a un autre petit sondage. À la question, êtes-vous déjà allé voir une armée ? 25% des gens, ils sont allés avec leur femme. 35%, ils sont allés avec leurs enfants. Et 40% ont demandé l'arme et qu'elle a. Qu'est-ce que t'en penses ? Non, mais attends, parce que là, il y a un truc. Avez-vous déjà été voir l'armée ? Je ne vois pas du tout le rapport. On peut visiter, non ? Ça ne se visite pas ? C'est pas un parc ? C'est pas comme la tour Eiffel ? Non, non, non. Il n'y a pas de... Je crois que c'est la garde républicaine, si je me souviens bien, qui s'amuse à faire des trucs porte ouverte pour... C'est con. Pour simplement voir des chevaux. C'est tout. Gérard, il y a vomi de porc sur l'IRC qui te demande si tu as fait la Deuxième Guerre mondiale. Non. Il te demande pourquoi. Et la Troisième ? Il n'y en a pas trois. Il y en a eu deux, donc je n'ai jamais fait ça. La Guerre du Golfe ? Non, mais ça, ça n'a rien à voir. Ça, c'est des questions... Il te demande pourquoi tu ne l'as pas faite. Je ne l'ai pas faite, c'est tout. Il n'était pas engagé, il n'a pas gagné. Tu étais réformé ? Non, non, j'ai fait mon armée normalement comme tout le monde. Donc, j'ai fait douze mois. Ils t'ont accepté, toi, là-bas ? Ben oui. Pourquoi ? Oui. Je voulais savoir, est-ce que tu avais participé au défilé du 14 juillet ? En Allemagne, oui. Mais pas sur Paris. Tu as défilé ? Ben, en Allemagne, oui, à moins 17 degrés. Où ça ? Et tu as défilé en quelle tenue ? En treillis, avec les chevaux. Non, non. Il avait un petit string à dentelles roses. Bon, ta gueule, tu t'écrases parce que tout à l'heure, tu as dégagé, toi. OK ? Donc, troisième question. Peut-on faire carrière en faisant l'armée ? On va s'écouter un petit disque. Un petit disque, et puis on se retrouve tout de suite après. Ouais, on est en train d'atteindre les 2300, là. Ça va arriver bientôt. Gérard, ce soir, tu cartonnes. Mais ça, c'était prévu qu'il fallait qu'on cartonne ce soir, donc... Allô ? Allô, Gérard ? Canis. Allô ? Allô ? Allô ? On n'entend plus rien. Et Gérard ? Ça y est, pile d'art. Tu n'as rien fait, Gérard. Ça y est, ça commence. Les auditeurs, vous entendez, là ? C'est imperceptible. On n'entend rien. Attends, je vais toucher un bouton. Je vais toucher un bouton. Allô ? Allô ? Allô, vous l'entendez, là ? Allô ? C'est mieux, là. C'est mieux. C'est pas 30 secondes, on l'entend pas. Canis ! Vous l'entendez, Gérard, là ? Oui, on l'entend. Vas-y, parle. Parle, Gérard, parle. Canis ! On t'entend, impeccable. C'est bon, c'est bon, c'est bon. On récupère Canis. Oh ! Merci, quand je parle. OK. Canis, le jour-là. Tagada. Oui. Andouille. Oui. Croupion. Je suis d'Andouille. Oh, tu t'écrases, toi. Tony. Bonsoir. Et prothèse pour terminer. Et donc, vous avez pu réfléchir à la question, donc je la répète. Peut-on faire carrière en faisant l'armée ? On va demander à Tony. Moi, je sais pas. Enfin, moi, si j'avais l'occasion de faire carrière en faisant l'armée, je la ferais. Mais ça me branche pas du tout, l'armée. Pas chaud. Mais la Légion, il parle. Il paraît qu'on peut faire carrière. De toute manière, quand tu fais l'armée dans la Légion, de toute manière, tu t'engages un peu. Ouais, ouais. Non, mais il y a des débouchés en tant que, je crois, on m'a dit, un gardien de chef dans l'Atlas. Ouais, c'est ça. Alors, Tony. Qu'est-ce qu'il y a ? Tony, tu réponds correctement à la question, parce que sinon, ça va mal se terminer pour toi. Tu vas retourner chez toi. Écoute, c'est ce qu'on m'a dit. Je sais pas, moi. Ouais, ouais, ouais. C'est ce qu'on t'a dit. Depuis tout à l'heure, tu m'assumes que moi, je reste imperturbable. Ouais, ouais, tu restes imperturbable, mais tu réponds la moitié à côté des questions. Bah non. Quand on te pose des questions, tu réponds les trois quarts à côté. OK ? Alors, si c'est pour répondre des conneries, c'est pas la peine qu'on t'appelle constamment pour faire les débats. OK ? Je me drogue. OK, bah si tu te drogues, tout à l'heure, tu vas retourner écouter la radio tranquillement. C'est tourné, Tony. Prothèse. Ouais, je pense que c'est possible, ouais. Ouais, mais dans quel sens ? Pour toi, ça peut être possible. Toi, ça m'étonnerait, parce que c'est lui que tu t'es fait réformer, donc... Bah ouais, justement, je m'étais renseigné au début à la caserne de chez moi. On m'avait dit que je pouvais faire carrière dans Maître Chien. D'accord, on verra ça après. Rigo, t'avais peut-être une question ? Non, il y a juste Davy One. Attends, je lis vite fait. Il demande si lorsque t'as fini de faire l'amour avec Sandy, tu l'as remis le couvert. Non, mais ça, c'est pas du tout le thème du débat. Donc, si c'est pour dire des conneries comme ça, comment qu'il s'appelle ? C'était Davy One, et on te demande aussi, c'est Oxyd qui te demande si quand t'as été parachuté, est-ce que ton débat est suite au fait que tu n'avais pas de parachute ? Ouais, ça, je vois pas du tout. C'est incompréhensible. Ouais, c'est incompréhensible. Prothèse, toi ? J'ai déjà répondu, genre. Donc, t'as répondu, croupion. Ouais. Donc, pour toi ? Bah, malheureusement, parce que malheureusement, on peut faire carrière. Donc, c'est chiant, il y a des gens qui font la guerre, ça, c'est chiant. Et heureusement pour certains. Parce que tous ceux qui ont échoué au concours de maître chien, au concours de la police, bah, ils vont dans l'armée, quoi. De toute manière, dans l'armée, tu peux très bien faire ton service militaire dans la gendarmerie ou dans la police. Faut pas l'oublier. Ouais, non, mais en général, ceux qui font carrière, ils font pas carrière dans la police. Non, mais ceux qui veulent passer, ceux qui veulent être gendarmes ou policiers, peuvent le faire en faisant leurs 12 mois. Ouais, c'est parce qu'ils ont raté leur concours. Non, non, non, non, non. Non, parce que... À l'armée, à l'armée, ils te demandent ce que tu veux faire, et tu peux préciser si tu veux être dans la gendarmerie ou dans la police, ou passer tes permis. Ou coiffeur. Ou même, ça, cuisinier. Ouais, t'as plusieurs trucs, t'as cuisinier, t'as un permis, coiffeur, on va passer, on va pas s'éterniser sur tout ça. Andouille. Parce que généralement, comme Tagada, les gens, si Tagada avait fait l'armée, il aurait fait coiffeur. Non, mais attends, on va demander à Andouille. Et pas le mitrailleur. Andouille. Oui, bah, écoute, moi, je pense qu'effectivement, c'est possible. Oh là là, mais qui c'est qui a un téléphone pourri, là ? C'est pas moi. C'est un portable. Donc, toi, alors ? C'est quelqu'un qui a un portable. Non, mais c'est tout à fait possible, à partir du moment, déjà, où on le veut vraiment, parce qu'il y en a qui y vont uniquement, ça leur fait chier. Ouais. Et puis, il y en a qui... Oh, on laisse parler les gens, s'il vous plaît, merci. Ouais, on me laisse parler, moi. Et d'autre part, il y en a qui aiment vraiment ça, donc ils finissent par s'engager. Et c'est particulièrement les gens qui aiment bien se faire boucher le cul, quoi. Ouais, mais... Non, mais ça... Bon, ça, Andouille, je vais te dire une chose, que la personne qui veut s'engager... Euh, Fildar, s'il te plaît, merci. Y a rien, Gérard. Ceux qui veulent s'engager, c'est leur problème, hein. Oh, t'arrêtes de s'y plaître, toi, quand je parle, s'il te plaît, merci. Donc, je réponds à la question d'Andouille. Donc, y a certaines personnes qui peuvent s'engager au bout de 6-7 mois, hein. Voilà. T'es gada ? T'es engagé à quoi ? Dans l'armée. Ah, d'accord. Et faire, en fait, leur métier de l'armée. Ouais, ils peuvent s'engager sur une... Sur une durée, je crois que c'est de 2 ou 3 ans, je sais plus exactement. Mais c'est quoi, le métier de l'armée ? Ça consiste en quoi, faire l'armée comme métier ? Ben, c'est obligatoire, hein. Maintenant, tu peux pas y échapper, hein. Sauf si t'es père de famille ou si t'es... Non, mais si, par exemple, toi, t'imagines, toi, tu t'es engagé à l'armée, à faire 3 ans d'armée. Qu'est-ce que tu fais à l'armée pendant 3 ans ? Ben, pendant 3 ans, tu peux monter de grade et tu peux commander ceux qui vont à l'heure actuelle. Mais faire quoi ? Ben, j'ai commandé à faire quoi ? Faire leur lieu au carré, à éplucher des patates ? Ben ouais, ça, éplucher des patates. Maintenant, à l'armée, faut dire une chose qu'ils ont... Non, non, il y a des mixeurs. Non, non, ils ont des trucs exprès. Tagada. Ah, non, attends. Oui, il y a INT qui te demande si t'as appris à lire à l'armée. De toute manière, t'as pas besoin d'apprendre à lire à l'armée, tu... Ça se saurait, sinon. T'as pas besoin de savoir lire pour faire l'armée ? Pas besoin, hein. Il suffit de savoir te torcher, c'est tout. Voilà. Tagada. Tang, T-A-N-K. Tagada ! Oui ? Alors, moi, je pense que... Franchement, non. Alors, tu peux préciser ? Euh... Non. Non ? Alors, Tagada, je te conseille une chose. Soit que tu réponds correctement aux questions quand on te les pose, et quand on te demande de préciser, tu le fais, ou sinon, tu gerbes. C'est bien précis. C'est admissible. C'est clair ? Ok. Ok ? C'est net. Alors, je te préviens, c'est le dernier avertissement que je te donne depuis tout à l'heure. Merci. Au prochain, tu dégages. Hein ? Ou sinon, tu vas passer voir Manu, il va te mettre les points sur les îles et barres sur l'été, comme je dis souvent. Tu sais qu'il va mettre les barres ? Ouais, ouais, tu vas voir. Alors, Tagada, tu vas voir Manu, s'il te plaît. Allez, hop. Euh... Canis... Canis... Moi, Gérard, si j'avais dû rentrer dans l'armée, ben, ouais, j'aurais bien voulu... J'aurais bien voulu, mais... Oui, on peut, je pense, ouais. Oh là là, elle est où, elle ? Elle est où, elle ? Elle est où ? Si tu t'amuses à faire des conneries, tout à l'heure, je vais me lever, je vais te massacrer. Ah ouais ? Ok. Tu vas pas commencer le premier débat ? Tu vas me faire des tortures indiennes et tout ? Ah ouais, tu vas voir. Pulgure au poing ! Ouais, t'as l'air pulgure au poing. Flak au gire ! Donc, Canif, pour terminer. Ben, je pense que Gérard, moi, je pense qu'on peut... Oui, on peut s'engager dedans, ouais. Non, mais est-ce qu'on peut faire carrière ? Ben oui, c'est ce que je te dis, on peut faire carrière dedans, ouais. D'accord. Gérard, t'es prothèse ? Ouais, prothèse. Je voulais savoir, parce que comme toi, t'as fait ton service, t'es un peu enseigné sur le tout, quoi. Je voulais savoir si on pouvait faire un animateur radio à leur maison. Non, pas du tout, tu vois. Tu peux inventer une radio, Radio Kaki, par exemple ? Non, parce qu'ils ont leur système de radio à eux, donc c'est pas... C'est de la Cibi qui font ça, Gérard ? Non, non, non, non, non, non. Ils font quoi ? Euh, oui. Il y a Cyber Ticket... Titi sur l'IRC qui dit que la fanfare de la caserne de Surenge ou Terremix pour motiver les troupes de Corvée de Chiotte, c'est vrai ? N'importe quoi, lui. Bon, t'arrêtes, Fildar, avec ça. Ça, on le sait, hein. Donc, quatrième question, ça, ça va intéresser Canif, Andouille et Croupion. Ah, c'est une question pour des meufs. Peut-il supprimer l'armée aux femmes de nos jours ? Alors, on va demander à Canif, parce qu'apparemment, vous êtes vachement bien réveillé, ça fait peur. Ben écoute, Gérard, on attend que tu nous cites, quand même. Mais non, mais, hé, au début, je vous pose la première question, je vous demande à tous de réagir. Maintenant, quand je demande, faut-il supprimer l'armée aux femmes, quand j'ai pas besoin de préciser, donc... Bah, tu vas pas te plaindre ! Bon, écoute, Gérard, on va pas te plaindre. Oh, tu te calmes, toi ! Comment elle parle, là ? C'est laquelle, là, qui s'énerve, là ? Oh, tu parles à Gérard, là, ou... C'est quoi, c'est quoi, cette bouffonne ? C'est laquelle, là, qui s'énerve ? Ben, mais j'ai lu une ! Andouille ! Oh, pisseuse, va ! Et Andouille ! Andouille ! Va m'emmener au standard, si j'y suis ! Allez ! Allez, Gérard ! Allez, Gérard ! Allez ! De voir ! Canip ! Bon, écoute... Moi, je veux ce numéro, parce que j'adore les dominants. Non, non, non, c'est bon, c'est bon ! Canip ! Oui, oui, bon, donc, ben non, je pense pas, parce que moi, j'aurais bien voulu, mais bon, la plupart des meufs, elles veulent pas la faire. Ouais, non, mais, je te demande, faut-il supprimer... Je te dis, je te dis, pour moi, moi, pour moi, non, je pense pas, parce que moi, j'aurais bien voulu la faire, l'armée, mais... Il y en a beaucoup qui veulent pas le faire, donc, je pense que, vu la majorité, ouais, je pense qu'il faut le supprimer, ouais. Ouais, mais, de toute manière, toi, à 19 ans, je pense que c'est un peu... C'est un peu jeune, encore, hein ? Ah, mais, de toute façon, je les ai fait tomber, hein, donc... Ouais, non, non, mais, même, de toute manière, faut que tu te fasses recenser d'être la majorité, hein, donc... Ouais, ils en parlent... Oh, là, qui c'est qui s'amuse, là ? Ça commence à bien faire ! Tagada ! Chier, hein ! Et je peux répondre à la question, Gérard ? Non, mais, à la minute, toi ! Vas-y, 5 minutes ! Tagada ! Oui, moi, j'étais avec Manu, tu peux me répéter la question ? Alors, faut-il supprimer l'armée aux femmes ? Ah, oui ! C'est pour toi, ça, Tagada ! Alors, moi, tu vois, je me l'ai pas fait écouter assez tôt, donc j'ai dû la faire. Ouais. J'étais dégoûté. Bon, maintenant, ça va mieux. C'est propre, hein, tu me diras. Non, mais, Tagada, tu prends ta voix normale, tu prends pas la voix d'un travelo, d'accord ? Parce que, tout à l'heure, tu as dégagé, ça va être le dernier... Ça va être vite fait pour toi, parce qu'il y a d'autres personnes qui veulent participer au débat. Ok ? Alors, soit que tu réponds correctement, soit que tu dégages. Alors, je viens de répondre correctement, et t'as vraiment aucun respect pour la dignité humaine, hein, parce que c'est, depuis l'opération, c'est ma nouvelle voix, tu vois ? Ça me plaît pas ? Hop, c'est bon, Manu, tu me mets quelqu'un d'autre, parce que là, je crois que c'est pas... Je vais pas continuer avec lui comme ça. Gérard, je voulais te demander, est-ce que les femmes, elles font la même chose que les hommes à l'armée, ou pas ? Euh, oui. C'est-à-dire ? Ben, ils sont obligés de faire... Elles font pipi debout, tout ça ? Non, non, mais... Non, mais ça, c'est... Non, c'est pas pareil. Mais elles sont obligées de faire comme les hommes, c'est-à-dire les corbets... Les pompes, tout ça ? Ouais, mais ça, c'est obligé. Attendez, s'il vous plaît, merci. Attendez, parce qu'il y a Sexe sur l'IRC qui te demande si, quand tu étais à l'armée, tu te mettais la mitraillette dans le cul quand on te privait de coton-tige. Bon, ça, je vais même pas y répondre. Je réponds pas aux conneries comme ça sur l'IRC. Est-ce que je peux répondre ? Euh, Andouille. C'est pas grave. Donc, je te mets à préciser que Manu m'a repris à l'antenne, et qu'il m'a calmée. Ouais, bah, t'as intérêt de te calmer, sinon tu vas faire comme ta gada, tu vas avoir... Pisseuse. Bah, tu te calmes, hein. Ouais, bah, c'est toi qui vas te calmer, parce que tout à l'heure, je vais passer à croupion tout de suite. Alors, fais gaffe. Ouais, passe à moi. Moi, je suis à ton numéro, parce que t'es une dominante, toi. C'est bon, je peux parler ? Vas-y, alors, dépêche-toi. Toi, tu m'excites. Oh, Tony, tu t'écrases, s'il te plaît. T'aurais été sergent-chef ? Alors, bah, moi, non, moi, je suis contre. Parce qu'en fait, si les ananas, elles ont envie de s'engager, bah, elles ont bien raison. Et moi, personnellement, j'irais quand je serais plus défait au mec. Mais pour l'instant, ça va, donc j'irais pas. Bah, de toute manière, tu serais obligé d'y aller, hein. Faut pas l'oublier. Gérard, à la place... Pardon, à la place de ta gada, on a que je m'en fous. Ouais, c'est léger. Je m'en fous. Moi, Génie, je voudrais répondre à la question sur l'armée, là. Parce que tu parlais des filles. Moi, j'ai un copain qui fait l'armée, et il m'a dit que les filles... Eh, tu peux préciser ton nom quand tu parles ? C'est Tony. C'est Tony, bonsoir. Ouais, bah, pour l'instant, je vais demander à Croupion, tu vois. Toi, t'es un peu trop pressé. Toi, tu m'aimes pas, je sais pas pourquoi tu m'aimes pas. Ouais, bah, tu vas te calmer, s'il te plaît. Moi, je t'aime bien, Tony. Ah, merci. En plus, toi, t'es une dominante. Moi, tu m'écoutes, y a de la meuf. Oh, ça supplie, là ! Allez, on revient au débat. Croupion. Oui. Bah, y a des femmes, oui, qui sont dans l'armée. Mais, en général, c'est des lesbiennes ou des mal baisées, donc... Non, mais... C'est pas gênant pour la société qu'elles soient là-dedans, quoi. Eh, Croupion ! Oui ? Croupion, t'évites un peu trop les vulgarités, quand même. Il est 0h54, on va pas commencer à jouer sur des saloperies, hein. Mais non, je dis pas des saloperies. Les femmes dans l'armée, c'est des saloperies. Oh, Tony, s'il te plaît, merci. Eh, Croupion, vous vous calmez. Rigo, pour l'IRC. Sur l'IRC, on me demande si, en fait, c'est l'armée du salut que t'as fait. Non. Euh, Tony, maintenant. Donc, ouais, tu parlais des femmes. Moi, j'ai un copain qui fait l'armée. Et il m'a dit que les femmes, fallait pas croire que c'était, enfin, des mimours, G.I. Jane, tout ça. T'as des copains, toi ? Parce que... Ouais, ouais, j'ai des copains et des copines, aussi. Oh, on se calme, là, derrière, quand y en a qui parlent. Parce que ça, tout à l'heure, ça m'a chauffé. Un petit peu de respect, quand même, merde. Tony ! Ouais, euh... Donc, ouais, c'est ce que je disais. Et, euh... Donc, ouais, les femmes, faut pas croire qu'elles ressemblent à... C'est des canons, quoi. Parce que, en fait, c'est des boudins. Bah, oui. Là, je vais te dire... C'est la plupart. Et puis, ouais, elles sont souvent à l'infirmerie. Et puis, euh... Enfin, les bidasses, elles font tout pour pas se blesser, en fait. Elles ont toujours leurs règles. Enfin, bon, c'est chiant. Oh, mais ça, euh... Ça, c'est... Ça, c'est leur problème. Oh ! On meurt, les meufs, là. Eh, oh, on se calme. Vas-y, je t'en prie. On se calme un peu, là, derrière, s'il vous plaît. Merci. Prothèse. Ouais, bah, moi, Gérard, je pense qu'il faudrait leur supprimer, parce que... Si les femmes se mettent à faire l'armée, après, il n'y aura plus personne pour faire la cuisine quand on regarde la télé, quoi. Non, mais attends, Prothèse, je vais te le dire, maintenant, ça va devenir... Ça devient obligatoire, hein. C'est inadmissible. Ouais, mais ça devient obligatoire, hein, maintenant. C'est obligatoire, maintenant, hein. Oh, mais ça y est, là ! Celui qui n'arrête pas de jacter, là, ça commence à bien faire. Euh, Rigo ? Ouais, c'est encore Cybertiti. Comme tu lui as dit que t'avais pas fait l'armée du salut, il te demande si t'as fait l'armée des douze singes. Mais lui, il a pas fait l'armée des cons, lui, ça vaudra mieux. Je m'en fous, maintenant, pour finir. Euh, bah, moi, personnellement, les meufs, elles font ce qu'elles veulent, quoi. C'est tout ce que tu peux préciser ? Bah, je suis pas une meuf, alors je m'en fous, quoi. Bah, ouais, mais je te demande, est-ce qu'il faut supprimer l'armée aux femmes, maintenant, oui ou non ? Bah, tu peux essayer de préciser ta pensée, quand même. Bah, franchement, je sais pas. Hé, hé, hé ! Hé, avant qu'on t'appelle, t'aurais pas fumé la moquette, toi ? Mais t'es pas le tabou, là ? Parce que, dis donc, apparemment, vous avez l'air de répondre la moitié des... à côté des questions, hein. Mais c'est toi qui mets pas le feu, Gérard. Non, mais attends, je mets pas le feu. Je disais mieux, les gars, vous répondez à côté. Franchement, hier, c'était plus... Enfin, je sais pas, ça pulsait, quoi. Là, c'est... T'as pas le droit, t'as pas le droit. C'est tout, tout je m'endors et tout. Non, je critique pas ton débat, GG1, je constate, simplement. Et alors, mais de toute manière, le premier débat, il se passe toujours... Ah, d'accord, excuse-moi, je vais attendre le deuxième. Non, non, mais de toute manière, au deuxième, c'est pas sûr qu'on reprenne les mêmes, hein, pour s'y déconner, hein. C'est la première fois que je passe à l'émission de Gérard. Stop ! Pour reprendre un peu le thème du débat et parler de l'armée un peu... Fais-nous un petit sondage. Voilà, c'est ce que je vais faire, un petit sondage. À la question, combien donneriez-vous à une armée ? 32% des gens ont dit qu'ils donneraient 2 euros. 28% donneraient leurs animaux. 40% donneraient leurs domestiques. 40% donneraient leur approbation. Et 1% ont déjà donné leurs dents et n'ont pas voulu donner leur moustache. Qu'est-ce que t'en penses ? N'importe quoi ! Rigo, sur IRC ? Sur IRC, il y a toujours du monde. Enfin, bon, je passe les questions, genre, GG est-il homo ? A-t-il eu des rapports agibles avec une femme depuis son adolescence ? Ça sert à rien, quoi. Non, mais ça, c'est pas du tout... Ah, on te demande si tu connais Rambo. Non. C'est ça. J'ai un peu, peut-être. Bon, on va continuer, là, parce que... Il est quand même déjà, j'ai erreur, 57, donc il faudrait peut-être qu'on accélère. Il reste encore 1, 2, 3, 4, 5, 6 questions. On a déjà fait l'armée. Oui, mais plus que 3 minutes, GG. Alors, quels sont les inconvénients de... Ça va suffire, Manu. Quels sont les inconvénients ou les avantages de l'armée ? On va demander ça, ben, je m'en fous. Franchement, tu vois, les inconvénients... Ben, je sais pas, quoi. Je l'ai pas fait, moi, l'armée. L'auditeur qui siffle, il faut qu'il arrête, hein. Ouais, franchement, ouais. Ouais, GG, je te dis, moi, j'ai pas fait l'armée, donc je connais pas les inconvénients ni les avantages, donc je m'en fous, quoi. D'accord, tu t'en fous complètement. Non, je te dis, je l'ai pas fait, donc je peux pas te répondre, quoi. Prothèse. C'est logique. Ok, prothèse. Ouais, je pense que les inconvénients, ça pourrait être qu'on peut pas se faire les meufs, comme on l'a précisé tout à l'heure. C'était des gros boudins. Elles sont où, les meufs ? Et les avantages, je sais pas, j'en vois pas trop. Tony ? Ouais, les inconvénients, c'est qu'on peut pas se baisser, et les avantages, c'est que... Enfin, y'en a pas, en fait. Alors, attends, tu peux préciser, là, parce que je vois pas du tout le... Tu veux que je précise ? Ton nom. Non, mais tu précises la pensée que t'as. C'est qu'on peut pas se baisser, mais je peux pas le dire, ça passe pas. Ouais, d'accord. Alors, Tony, ça commence à bien faire, hein, toi. Non, il faut analyser la chose. Groupion ! Groupion ! Les avantages, c'est que quand t'es illettré, bah, tu peux trouver du travail. Mais les inconvénients, bah, c'est que ça fait chier tout le monde, quoi. Tu peux préciser le... Les petits jeunes qui ont pas envie de le faire, et puis ils sont emmerdés pour donner dix mois de leur vie à ces connards, quoi. Non, mais attends, parce que... Oh, Tony, ça commence à bien faire, toi, là, maintenant. C'est pas moi, là, là. Ouais, bah, tu vas te calmer, parce que tout à l'heure, ça va être... Arrête de t'en prendre toujours à Tony. Oh, Andouille, tu te la permes ! Maintenant, tu vas répondre ! Oh, Andouille, je vais te parler à... Eh, ta gueule, Andouille ! Bon, alors... Tu sais pas, là, bordel ! Eh, eh, tu mets Tony et Andouille ensemble, là, qu'ils arrangent leur salade, quand ils auront terminé... Nous, dimanche aussi, on va se marier. Ouais, ça suffit ! Tu mets Tony et Groupion, là, en rentonne, ils vont faire leur petite popote ensemble, parce que c'est pas dans le débat qu'on fait leur popote. Euh, Canif ? Bah, écoute... Écoute, tu peux me répéter la question, s'il te plaît, Gégé ? Alors, quels sont les inconvénients ou les avantages de l'armée ? Bah, écoute, pour moi, les inconvénients, c'est l'uniforme. Ouais. Et puis, l'avantage, bah, je sais pas, il y a plein de gars, quoi. T'as le choix, au moins, hein. Là, t'es sûre de pas être toute seule, hein. Ouais, mais, euh... Comment ça, euh... Bah, je veux dire, si t'es infirmière, là-dedans, je veux dire... Bah, c'est un ken, quoi. Tu peux y aller, hein. Ouais, mais ça, de toute manière, tu peux très bien faire ton armée en étant infirmier ou infirmière, hein. Ça, c'est strictement pareil, hein. Ouais, non, mais pour moi, c'est ça, les avantages, hein. Ouais, mais ça revient à peut-on faire carrière en faisant l'armée, tu vois. C'est à peu près le même rapport que ce que tu me dis. C'est à peu près pareil que la troisième question qu'on avait posée, hein. Ouais, ouais, c'est vrai. Euh, Rigo ? Oui, il y a Davy1 sur IRC qui te demande si tu connais le... Enfin, si tu as connu le soldat inconnu. Non. Non, ok. Et Ryan, non, tu ne connais pas Ryan ? Bah, enfin, sur IRC, on m'a dit que Gérard, c'était le soldat Ryan qu'on n'a pas retrouvé. Euh, est-ce qu'on va le sauver, au moins ? Ça y est, ils ont... Bah, il n'a pas été sauvé, ouais. Toi, fais gaffe, parce que tout à l'heure, je vais te sauver ma main sur ta gueule, quand même. Oh, oui, c'est calme, là. Ouais, c'est bon, c'est bon, c'est bon. Alors, ennui, maintenant. Ouais, alors, l'inconvénient, c'est qu'on a l'impression de perdre son temps là-bas. Ouais. Et l'avantage, c'est que, justement, on ne perd pas son temps là-bas. Alors, tu peux préciser le fond ? Bah, oui, donc, l'inconvénient, c'est que tu perds ton temps quand tu es là-bas. Ouais. Et l'avantage, c'est que tu ne perds pas ton temps quand tu es là-bas. Ok. Ouais, d'accord, je vois à peu près. C'est logique. Ouais, c'est logique. Non, mais de toute manière, je pense qu'il n'y a pas beaucoup d'inconvénients ni d'avantages là-dedans, parce qu'en fin de compte, les avantages que tu as, c'est que... De toute façon, tu es obligé de la faire, donc... Voilà. Et en plus, t'es payé. Ouais, t'es payé. T'es payé combien, Gérard, à l'armée, justement ? Je crois que c'est 4 euros. Non, non, non, attends, normalement, si je me... Oh, on se... Bon, ça y est, oui. Je les ai coupés, je les ai coupés. Exprès. Normalement, je pense que ça ne te fait même pas la moitié de ton salaire. Tu dois toucher à peu près 1 500 balles... C'est le SMAC ou pas, la main ? Non, même pas. Même pas ? T'as le droit à une cartouche de cigarette par mois et tout. Gérard ? Oui ? Ouais, c'est prothèse. On a parlé ce soir, je voulais savoir si t'avais fait le parcours du con en te battant. Alors, quand tu dis des trucs comme ça, tu vois, au lieu de dire con et puis battant, parce que toi, t'as l'air d'être con quand tu poses une question, donc pour toi, tu ne l'auras pas fait, le parcours du combattant, et ça, c'est un truc qui est assez dangereux à faire. Ouais, bravo, Gégé. Bravo. Il y a de l'air, alors ? Donc, la sixième question... C'est plus fort. C'est la sixième question, là ? Ouais. Déjà ? Ouais ! Vous allez réfléchir et on va s'écouter un petit morceau, à moins qu'il y ait une question IRC... Non, il y avait juste Denis qui donne les avantages de l'armée. C'est le premier lieu où on a accepté Gégé sans faire d'histoire. Le désavantage, c'est qu'ils ne l'ont pas gardé. Bon, ça, je ne vois pas du tout le rapport. Gégé ? Ouais ? C'est qui ? Je m'en fous, là. Tu peux te mettre en antenne avec Andoï, là, il y a moyen de moyenner. Ben, rien. Vous allez aller tous en antenne, maintenant ? Je vais vous poser la sixième question. La sixième question, là ? Peut-on s'engager dans l'armée si on n'a pas de boulot ? Oui, on va s'écouter Thierry Big Hop avec Yo-Yo, Passe-moi la moutarde, pour mon old dog. On se retrouve tout de suite après. Donc, un petit point sur l'IRC, on a dépassé les 2500, on en est à 2684, moins 3. Pourquoi moins 3 ? Parce qu'il y en a 3 qui viennent de partir. Ah bon, alors donc, on récupère Canif. Oui, c'est vrai. Oui, c'est vrai, je suis toujours là. Bonsoir, Andoï, j'espère que tu t'es calmée depuis tout à l'heure. Non, pas vraiment. Pas vraiment, mais tu vas te calmer. Non, je suis déjà pisseuse. Croupion ? Oui. Croupion ? Oui, oui. Tony ? Oui. Prothèse ? Salut, les loulous. Eh, je m'en fous. Ouais, je m'en fous. Donc, t'as pu discuter avec Andoï ? Non, j'ai pas pu, personne me... Non, n'importe quoi, on m'a filé un disque, là. Elle est où, la fameuse ? La fameuse, ben, tu as... Comment il parle de... Tu vas la récupérer tout à l'heure en rentonne, vous allez gérer votre petite salade, à l'instant. Non, mais j'ai... C'est ma miche, moi, c'est ma miche. Oh, ça y est, vous, merci. Donc, alors, on va demander à Canif si elle a compris la question. Ben, écoute, je m'en rappelle plus, j'ai rien. Ah, non, mais faudrait peut-être écouter quand je pose des questions. Je peux la remonter après le disque ? Je pense aux auditeurs qui viennent seulement de nous rejoindre. Alors, peut-on s'engager dans l'armée si on n'a pas de boudreaux ? Donc, Canif ? Ben, ouais, je pense, ouais. Mais tu fais quoi ? Tu fais quoi, toi, au fait, comme boudreau ? Moi, je suis secrétaire. Secrétaire ? Secrétaire comptable. T'es en tailleur ? Oh, hé, vous me tchonnez derrière, là ! Et vos commentaires, moi, je vous emmerde. Voilà. Comme ça, c'est bien répondu, tout ça. Moi, j'aime les femmes qui ont du caractère. Oh, tu t'écrases, toi ! Ça, tout à l'heure, tu as dégagé, toi, maintenant. Je vous préviens que, là, à 1h10, je vais gerber, hein. Ça va gerber sec. Non, gerbe pas. Voilà, c'est pas mal. C'est qui ? Ah, c'est une... parce que... C'est, ouais, c'est Prothès, c'était une cabine, je vais le rappeler. D'habiter mystère. OK. Donc, Canif a répondu. Andouille ? Ouais, bah, moi, je pense qu'on peut s'engager, effectivement. Voilà. Et j'ai rien d'autre à rajouter, parce que sinon, tu vas encore me gerber, alors je préfère rien dire. Voilà. Bon, alors, Andouille, c'est la dernière, c'est simple. Soit que tu réponds correctement, soit que tu gerbes tout de suite. C'est pas simple. Tu choisis. Non, non, non, elle passe à moi, avant. Hein ? Alors, Croupion ? Ouais. Donc, pour toi ? Bah, ça sert justement, quand t'as pas de boulot, à t'engager, ouais. Ouais, mais ça, c'est... Je pense qu'il y a beaucoup de personnes qui vont me répondre ça. Et quand ils arrêtent l'école, aussi, les gamins, ils vont à l'armée, non ? Non, non, non, non, ça... Non, mais attends, parce que l'armée... Faut que tu te fasses recenser à 18 ans. C'est une poubelle, l'armée, on dirait. Bah non, mais... Oui, oui, oui, c'est qui, c'est qui, là ? Canif, on peut ajouter quelque chose ? Oui ? Moi, aussi, j'avais entendu parler que, quand on voulait s'engager dans l'armée, il fallait pas avoir plus de 25 ans, je crois. Euh, non, je pense pas, parce que ça, j'en ai pas entendu parler, à mon avis. Non, non, attends, Tony, il y a une question, hier. Oui, il y a un Réa qui te demande si tu as rencontré Sandy à l'armée. Non, pas du tout. Sandy, je l'ai déjà dit la semaine dernière, comment que je l'avais rencontrée sur un magazine. Non, mais Sandy, elle a fait l'armée, par contre. C'est pas le débat sur les pouces qu'il fait. Elle réparait les tanks. D'accord, Tony ? Quoi ? C'est toi qui viens de répondre les tanks ? Pas du tout, pas du tout. Non, c'est moi, c'est moi, j'ai dit. Non, elle bosse à la banque. Donc, Tony ? Ouais. Donc, pour toi ? Ouais, bah, c'est sur l'engagement, c'est ça ? Hein ? Ouais. Peut-on s'engager dans l'armée si on n'a pas de boulot ? Peut-on s'engager dans l'armée si on n'a pas de boulot ? Bah oui, parce qu'on fout rien, on peut y aller. Non, je dirais... Hé, Tony ! Non, mais non. Attends, attends, j'essaye de réfléchir, là. Non, non, mais tu réfléchis vite, puis... Non, mais non, Gérard, ils te prennent pas à l'armée si t'as pas de boulot ? Bah, de toute manière, tu peux t'engager si t'as pas de boulot, hein. Pourquoi tu t'engages pas, toi, Gérard ? Eh, qu'est-ce que ça... Pourquoi que... Je t'emmerde, toi. Oh, oh ! Oh, oh, oh ! Non, mais moi, par contre... Eh, Tony, tu réponds, s'il te plaît. Ouais, bah, ouais, mais je suis tout à fait d'accord avec ce qu'a dit Rigaud, là. Par contre, moi, j'ai un exemple. J'ai une amie qui s'appelle Mélanie, et qui avait son bac. Et, euh... Donc, elle voulait s'engager à l'armée parce qu'elle s'est dit, « Ouais, j'ai un bac, maintenant, j'aimerais bien faire l'armée. » Et ils l'ont pas accepté. Mais attends, t'as pas besoin d'avoir un bac pour aller à l'armée ? Non, non, mais... T'as pas le droit à l'armée d'avoir un bac. Faut complètement instarber. Euh, Tony ! Pourquoi ? Tu réponds ? J'ai répondu, j'ai répondu. Attends, c'est bizarre, j'ai pas entendu ta réponse. C'est pas grave. Ouais, bah, Tony, je pense que... Non, mais non, mais vas-y, continue, continue. Y a pas que moi, allez, vas-y. Non, non, mais tu réponds ! Non, mais... Ça y est, l'engagement, il faut se faire en sensé. D'accord, voilà. Eh ben, enfin, dis-donc, t'es lourd à la détente, toi. C'est clair. Gérard, par rapport à l'armée, y a des V1 qui disent « Les fusils servent à fusiller, et les tanks, ils servent à t'enculer. » Ouais, bah, ça, je l'emmerde, lui. Euh, Manu ? Encore un petit sondage. La seule dernière, j'espère. L'avant-dernière. À la question « Combien donneriez-vous à une armée ? » 32% ont dit qu'ils donneraient 2 euros. Mais ça y est, tu l'as déjà fait, alors... Excuse-moi, il y en a une autre, il y en a une autre, il y en a une autre. Qu'aimez-vous chez une armée ? 50% des gens aiment bien, 25% des gens aiment beaucoup, et 100% aiment le balcon avec les drapeaux fan radio, je comprends pas. Ça... Toi, toi, toi, toi, tu vois, Pildar, tes conneries, ça, c'est tes conneries, ça. Non, c'est pas mes conneries. C'est tes conneries. On va demander la prothèse. Si... Oui, je suis là, ouais. C'est quoi, ça ? C'est Noël ou quoi ? Pildar, tu m'éteins ça tout de suite ! Ça me l'a dit. Pildar, t'éteins ça tout de suite ! Ouais, Gérard, c'est prothèse. Prothèse ? Ouais. Je pense qu'il est préférable de s'engager contre... Bon, t'arrêtes, Pildar, ou quoi, là ? Allô ? Allô, Gérard ? Allô ? Gérard, souris... Allô ? Vous entendez, Gérard, là ? Allô ? Qu'est-ce qu'il se passe ? Il a failli balancer le disque d'origo, donc... Prothèse ! Ouais, donc, je pense qu'il est préférable de s'engager quand on n'a pas de boulot, vu qu'on est payé à rien froté par tes caquilles, et j'aime bien les trahis. D'accord. Et je m'en fous, pour finir ? Bah, franchement... Il s'en fout ? Bah non, ouais, je sais pas. Oh là là, Doc Gynéco. Toi, tu vas gerber, toi. Ah ouais ? Ils sont pas réveillés, les auditeurs ? Je m'en fous, tu te réveilles, s'il te plaît, ou tu dégages ! Bah, je sais pas, franchement, si j'ai pas de ta faute... Mais il sait jamais rien, lui, pourquoi il vient ! Fume trop, lui ! Eh, tu reprends, je m'en fous, au standard, là, ça va pas. Ça va pas, là. Fume trop, là, ce gars. Enfin, bref. Donc, je peux vous dire une chose, que pour ceux qui ont envie de s'engager, ils peuvent le faire s'ils ont pas de boulot, mais comme l'histoire du bac, ça existe pas. Il n'y a pas besoin d'avoir un bac pour aller à l'armée. Ça, c'est des conneries. Quoi ? Même pas. Non, plus. Ok, alors voilà. Et toi, Gérard, alors, qu'est-ce que t'en penses de cette question ? Bah, moi, je viens d'y répondre. Mais je t'écoute pas. Bah, t'écoutes pas, t'as qu'à te déboucher les oreilles au lieu de faire des conneries. Alors, septième question. Faut-il parler de l'armée en cours ou à la télé ? On va demander à... Je m'en fous si ça va mieux pour lui. Ça va mieux pour lui. Ouais, j'espère. Alors, je m'en fous. Bah, à la télé, ouais, on voit des émissions, quoi. Non, mais je pense qu'on t'a demandé de te réveiller, là. Apparemment... Je réponds à ta question, là. Bon, alors, vas-y. Je te dis, les pubs et tout, on les voit à la télé, à l'école, il y a des mecs qui passent et tout, ils te parlent de l'armée, ils sont engagés, c'est beau et tout, c'est un métier. Et voilà, quoi. Ok. Prothèse ? Ouais, ouais, je sais pas. Je pense qu'il faut pas trop en parler à l'école et à la télé parce que ça pourrait donner des idées aux gens, quoi. Mais non, mais de toute manière, c'est ce qu'ils font, là, avec les... En cours, je ne sais pas, parce qu'on n'a pas des... On n'a pas d'étudiants. On n'a pas d'étudiants, là, avec nous, c'est dommage. J'aurais bien voulu avoir un étudiant pour savoir... Eh, moi, je suis étudiant. Qui ? Moi. Qui ? Moi, je m'en fous. Eh, t'appelles d'où, toi ? Je fais une thèse sur le shit, de Nantes. De Nantes ? Ouais. Et donc, à ton avis, ils en parlent, là ? Mais t'es étudiant en armée, toi. Non, mais est-ce qu'ils en parlent, là ? Est-ce qu'ils en parlent, là ? Bah ouais, il y a plein de pubs partout. Ah bon ? Il fait une thèse sur le shit, là, sur les tableaux. Une thèse sur le shit. D'accord. Je pense qu'à mon avis, je crois que t'es en train de me dire des conneries. Tony ! Ouais, il y a trop de pubs. L'autre fois, j'entendais, même sur Fun Radio, j'entendais une pub... L'armée de terre. Ouais, l'armée de terre occulte un mec avec une clé de 13 pour réparer les tanks. Donc, je trouve ça inadmissible. Tony ! C'est de la propagande. Tony, t'es sûr de ce que t'inventes, là ? Non, mais je te jure que ça passait. Non, mais il y a une pub en ce moment qui veut... Parce qu'en fait, j'ai l'impression qu'il n'y a pas assez de gens à l'armée. Ouais. Ils ne veulent plus y aller, donc ils font des pubs. Le pire, c'est qu'ils te mettent ça entre deux tubes. Ah, d'accord, entre deux tubes, t'as raison. Croupion. Ouais ? Bien tenu. Moi, je dis que non, il ne faut surtout pas en parler. Ça pourrait inciter les gens à le faire. Non, mais ça va, là... Bon, Gérard, t'écoutes les auditeurs, non ? Je suis en train de régler un problème avec Manu, ça ne te dérange pas, non ? Bon, Croupion. Oui, je te dis qu'il ne faut surtout pas en parler. Ça pourrait inciter les gens à le faire. De toute manière, pourquoi... S'ils en parlent, c'est pour inciter les jeunes à y aller, hein ? Oui, ben justement. Ok. Andouille ? Ouais, ben je suis désolée, moi, Fildar vient de me prendre en rentaine, donc je n'ai pas entendu la question. Non, attends, Fildar vient de te prendre en rentaine. Non, mais attends, Fildar, il est à l'arrière. Attends, attends, attends, Gégé, deux secondes. Hé, Fildar, tu te calmes, là ? Non, mais attends, c'est qui qui parle, là ? Comment tu parles à Fildar ? Qui c'est qui parle, là ? C'est mon père, non ? Non, mais attends, pour l'instant, ce n'est pas Fildar qui commande, c'est moi, c'est Médéba. Non, non, c'est pas toi. Non, non, je suis d'accord, Gégé, mais voilà, quoi. C'est Fildar qui commande. Non, non, c'est pas Fildar, non, Médéba, c'est moi. Alors, Andouille ? Fildar, c'est un petit teigneux, mais je l'aime bien, quand même. Bon, je m'en fous, tu te calmes, toi. Hé, Andouille, t'es blonde ou brune, concrètement, là ? Bon, je m'en fous, t'arrêtes ou tu dégages ? Andouille, elle est pour moi. C'est un boulot de merde, Manu, ça, je suis d'accord avec toi. Non, non, non, c'est pas Manu. Je m'en fous, t'arrêtes pas de faire chier son monde. Alors, Andouille, pour la dernière fois. S'il te plaît ? Andouille ! Oui ? Non, mais je te demande poliment si tu pourrais me répéter la question, s'il te plaît. Alors, faut-il parler de l'armée en cours ou à la télé ? Moi, je trouve qu'il faut pas en parler parce qu'on fait pas de politique à l'école. Non, mais attends, on parle de l'armée, on parle pas de la politique. Ouais, mais c'est la même question que la politique, faut pas nous prendre pour des cons, aussi. T'as changé armée par politique. Tony, si t'es pas content, tu dégages, OK ? Non, non, mais je suis content. Non, mais bon, c'est pour le dire aux auditeurs que t'as 15 millions d'auditeurs, faut les respecter, quand même. Ouais, ben attends, pour l'instant, toi, t'as... Parce que depuis 10 ans, c'est les mêmes débats et tu ranges... Bon, alors, Tony, tu dégages, allez, hop, t'es ennumé ! Hop, au revoir, Tony ! Non, je pense pas que t'es ennumé, hein ! Toi, Andouille, c'est pareil, au revoir, Andouille ! Allez, dégage, Andouille, allez ! Bah, si Andouille part, je pars. Ouais, ben, c'est bien, aussi, je m'en fous. Allez, dégage, je m'en fous. C'est bien, récupère... On est dans la merde, on n'a plus qu'à... Tu récupères 3 éditeurs, Manu, s'il te plaît. J'y vais, j'y vais, je les récupère, je vais les chercher, là, devant l'avenue, là. Alors, Canip ? Bah, écoute, Gérard, je crois que, de toute façon, notre avis compte pas vraiment là-dedans, parce que s'ils ont envie d'en parler, ils en parlent quand même, hein. Non, mais donc, je reviens à ce que Tony, soi-disant, qui disait, que c'était pareil qu'on... la politique, non. Parce que si on en parle à la télé, c'est que ça insiste pas les jeunes à vouloir perdre de l'armée. Comme Andouille a voulu. Comme Andouille a voulu les dire. Mais, moi, je pense qu'ils ont tout à fait raison de nous parler de ce qui se passe à l'heure actuelle dans certains pays. Donc, ça va être... Bah, ça va m'intéresser certains, de toute façon. Ouais, mais ça, ça va être la dernière question qu'on va poser. C'est rare, moi. Oui ? Tes prothèses, je voulais savoir, si, quand tu te mettais au garde-à-vous devant le général, t'avais la gaule ? Pas obligatoirement, non. Pourquoi ? Parce que ça t'est déjà arrivé, toi ? Bah, non, mais je te posais la question. Incroupion ! Oui ? Si on te gêne, tu nous le dis, hein. Ah, non, mais je vous écoute. Non, mais tu peux quand même parler, hein, parce que, pour l'instant... Le problème, c'est que, quand je parle, tu me dis de me taire, donc... Non, non, non, attends, pour l'instant, je t'ai rien dit, donc je te demande de réagir. Oui, bah, c'est... Parce que vous êtes plus que 3 sur 7... 6, hein. D'accord. Donc, tout le monde a fait le tour de la question. Ouais, ouais. Alors, là, il y a une question qui va être bien, parce que je pense que c'est Canif qui a voulu en parler, ou même toi, Incroupion. C'est laquelle question, Gérard ? C'est la numéro combien ? C'est la 8. Encore ? 2, putain. Ouais, ouais. Non, mais, hé, si t'es pas content, tu vois, tu poses ton casque et tu dégages. OK, tu rentres chez toi. Aïe. Hé, Rigo, c'est pas à toi que je m'adresse. Putain, maintenant, je barre aussi. Alors, pourquoi faut-il faire 10 mois au lieu de 12, maintenant ? Alors, on m'a demandé à Canif. Bah, là, là, j'en ai vraiment aucune idée, Gégé. Non, mais, avant, c'était 12 mois, maintenant, c'est passé à 10, donc, le pourquoi ? Ah, mais, c'est ce que je te dis, je ne sais absolument pas. Hum, d'accord. Et toi, croupion ? Euh, c'est pour des questions de budget. Comment ça ? Bah, il gagne 2 mois, il gagne du fric en se vendant que 10 mois. Bah, non, euh... C'est parce que ça a trop gueulé, je pense. Non, mais, je pense... Non, mais, comme ça, il ne paye pas les mecs pendant 2 mois, il ne les paye plus, quoi. Ah, ouais, c'est une bonne idée, ça, je crois. Bah, non, mais, même, de toute manière, ils sont... Oh, vous arrêtez, là, derrière, là ? Vous revenez bosser, là, correctement ? Bon, attendez, je reviens. Ah, d'accord. OK, on est tous 3, là. Bon, bah, euh... OK, ça va ? Bon, on rigole, vous revenez, là. Donc, prochaine question. Alors, Prothès, tu peux répondre, s'il te plaît ? Ouais, ouais, donc, euh... Bah, tu peux me répéter, j'ai pas bien entendu. Donc, la question, euh... Pourquoi faut-il faire 10 mois au lieu de 12 ? Disons, avant, c'était de 12, et maintenant, c'est passé à 10. C'est moi qui me suis trompé dans ma question. C'est des problèmes de calendrier avec les années bisextiles, non ? Non, non, non, non, non, parce qu'avant, c'était 12 mois, comme c'est... Et puis, maintenant, ça passe à 10 mois. Donc, on se demande pourquoi ils s'amusent à changer... Oh, vous arrêtez avec la lumière et vous revenez bosser, là ! Parce que tout à l'heure, ça va chauffer pour vous 3, là, hein ! Tu fais des blancs, Gérard. Donc, euh... Prothès, toi, alors ? Ouais, donc, je te disais, je pense que c'était un problème de calendrier, non ? Bah, non, parce qu'en fin de compte, non, il n'y a pas d'histoire de calendrier, là-dedans, hein. Ah bon ? Parce que c'est... Au début, c'était passé de... C'était 12, maintenant, on est... Ils sont descendus à 10, on ne sait pas pourquoi. Ils ont raison, finalement, on se fait moins chier à 10 mois que 12 mois. Ils vont descendre à une semaine, là, ça va être une semaine, après. On récupère, ok ? Ouais, alors, on accueille 3 nouveaux auditeurs, on accueille Face de Paix, Petit Fion et Général Moncu. Bonsoir. Bonsoir à tous. On a un Général, ouais, qui vient d'un petit peu de corps d'armée. De l'armée de l'air. Général Moncu, ouais. Apparemment, c'est ce que... Et l'autre ? Il y a Petit Fion. Ouais, bah voilà, c'était Petit Fion, pour finir. Petit Fion, bonjour. J'ai avec moi le sergent Susmon Gould, si vous voulez. Ouais, non, mais ça y est, bon, alors, maintenant, on va demander à Face de Paix... Et Face de Paix, là. Bon, Face de Paix. Ouais, salut. Salut. Ça va ? Donc, toi ? Oui. Donc, la... Alors, tu vois, moi, alors, je t'explique. Moi, je pense que, ouais, bah, 10 mois, franchement, c'est plus cool que 12, quoi, parce que les mecs, déjà, ils y vont, c'est pas marrant, quoi, t'sais, ça les galère. 10 mois quoi ? Bah, 10 mois de l'armée, quoi, c'est mieux que 12, quoi. De l'armée ? De l'armée ! De l'armée. De l'armée. Bon, euh... Fildar ! Ouais. D'accord. T'écrases. D'accord. Donc, euh, vas-y, je t'écoute. Bah, c'était pas bien. Je vais t'écraser. Ouais, alors, moi, je disais que, voilà, quoi, quand tu fais 10 mois, c'est classe, parce que 12 mois, c'est relou. Non, franchement, concrètement, le mec qui part faire son service militaire... Ouais. On est d'accord, c'est relou, 10 mois, 12 mois. Alors, il vaut mieux qu'il en fasse 10, t'as compris ? Non, mais de toute manière, maintenant, au début, c'était 12, maintenant, c'est passé à 10, on se demande pourquoi. Mais de toute manière, que tu partes 10 mois ou 12 mois, de toute manière, tu perds quand même ton temps en faisant l'armée. Dans quel sens ? Oh là là ! Manu, ça suffit, toi. Je demande, parce que je comprends pas. La semaine dernière, t'as fait du bon boulot, si tu commences à foutre ta merde, ça va... De toute façon, vous parlez de 10 et 12 mois, mais c'est pas ça, l'armée, c'est une semaine, maintenant. Non, non, non, non, non, non, non. Toi, tu l'as même pas faite, alors tu t'écrases. Si, si, Fildar, il a fait l'armée, mais pour revenir au débat, sur IRC, on te demande, on te dit en même temps, que maintenant, l'armée, elle est plus obligatoire. Pourquoi ? Si, l'armée est toujours obligatoire, encore. Non, c'est pour devenir un métier. L'armée est obligatoire. L'armée est obligatoire. Non, c'est tout. Généralement, tu... En tant que général, je peux témoigner, quand même. Vas-y. Parce que, maintenant... Maintenant, on recrute, surtout dans le civil. C'est fini, tout ce recrutement administratif. D'accord. Petit pion. Alors, tout d'abord, bonsoir, Gérard. Bonsoir. Bonsoir. Bonsoir. Ouais, bah, dis-moi... Ça te dirait de faire l'amour avec un gradé ? Oh ! Merci. Bah, écoute, on se retrouvera en peine, alors ? Pas de problème. Hé, attends, attends, attends, moi, je suis plus grand des clés. Hé ! Oh ! On accouche. On accouche, maintenant, là, sur la question. On va pas s'éterniser, là-dedans, hein. Bah, dis-moi, ça fait... 12 mois, c'est trop long, quoi. Bah, 10 mois, c'est pareil, hein. Bah, non, c'est 2 mois de moins. Bah, il y a 2 mois de différence. Bah, ouais, mais si tu fais le con pendant tes 10 mois, tu refais un mois de plus, donc ça fait 11 mois. Ouais, mais Gérard... Si tu fais le con au bout de 12 mois, tu t'en retapes un de plus. Que si tu fais le con au bout de 10 mois, tu t'en retapes un de plus aussi, mais seulement, ça fait plus 13, mais ça fait 11. C'est cumulable. Ouais, OK. Bah, Gérard, c'est prothèse. Ouais, je crois que c'est clair. Tu fais 10 mois, tu pars la fleur au fusil, puis tu fais 12 mois, bon, tu pars la baïonnette dans le cul, alors... Ouais, bah, de toute manière, moi, j'ai fait 12 mois, et je vais te dire une chose, que quand tu reviens, c'est chiant. Que ça soit 12 mois ou 10 mois, de toute manière, c'est vraiment des conneries, je sais pas pourquoi. Et t'avais des permes, ou pas ? Ouais, mais, je vais te dire, les permes, c'est 48 heures, et t'as une PLD, une... PLD, c'est une période de longue durée, c'est 10 jours. Dis-moi, Gérard, je peux te poser une question ? Est-ce que ça t'a plu, l'armée ? Non, pas du tout, je me suis fait chier, je viens de le dire. Pourquoi ? Bah, c'est la question. Est-ce qu'on s'amuse en pesant l'armée ? Ce sera la dernière question, après, on fera une petite conclusion rapide. De nos jours. Non, il reste encore... Non, non, non, on va abréger, on va abréger. On peut pas. On n'a pas le temps. Non, je te dis que... Non, Max, Max, il est venu, il a dit que tu gérais pas le débat, c'est à chier, donc on va faire l'autre débat. C'est toi qui poudre ta merde, alors toi, tu vas commencer par la permer. Non, Gérard, continue ton débat, c'est pas du tout la faute de fil. Alors, est-ce qu'on s'amuse en pesant l'armée de nos jours ? On va demander ça à Canif. Bah, écoute, ouais, je pense qu'il y en a qui s'amusent et d'autres qui s'emmerdent. Donc, c'est pour toi, de toute manière, même en faisant l'armée, on peut s'amuser avec ses copains, hein ? Pendant la récré, ils font des jeux, non ? J'ai des copains qui ont fait l'armée, et puis ils m'ont dit que même si des fois, c'était un peu chiant, ils avaient quand même de bons souvenirs. Ouais, mais ça, de toute manière, tu gardes quand même à la fin, tu gardes quand même un bon souvenir aussi, non ? Attends, faut quand même faire quelque chose, parce que si tu passes 12 mois à t'emmerder, faut quand même faire quelque chose. D'accord. Ouais, donc moi, je dis que dans l'armée, tu t'amuses pas beaucoup, parce que c'est clair qu'à part que si t'as des G.I. Joe ou des Small Soldiers, tu peux t'amuser. D'accord, je vois pas du tout le... C'est un sujet, un sujet. Groubillon ? Ouais, non, tu te fais chier à l'armée. Ah bah d'accord, toi, c'est carrément ta réponse. Bah oui, ça les passionne pas, les naines à l'armée. Faut abréger, même, toi. Attends, toi, pour l'instant, tu vas la fermer ! Ok ? Tu vas fermer ta gueule, maintenant. Ça va être clair. Passe de paix. Bon, on va se polier. Passe de paix, s'il te plaît. Je suis dans la hanche, moi. Passe de paix. Oui, je suis là. Gérard, c'est Prothèse, je suis dans la hanche. Ouais, mais Prothèse, tu t'écrases, maintenant, s'il te plaît. Merci. Gérard, assieds-toi bien, parce que là, j'ai un peu de mal. Bon, allez, Prothèse, tu me dégages. Hop, terminé pour Prothèse, comme ça, il fera moins le con. Il fera le con chez lui, à Rouen. Je suis dans la hanche, Gérard. Passe de paix. Hop, on termine. Ouais, si, c'est cool, l'armée, tu fais le con, quoi. Ouais, bah, tu t'amuses ou pas ? Bah ouais, parce que t'as pas envie de faire la reconnerie, alors que tu fais le con, donc tu t'éclates. J'ai l'air qu'il va t'éclater, parce que tout le monde devait se foutre de ta gueule avec ta face de paix. Non, mais tu peux pas. Non, non, attends, attends, attends, oh ! Toi, Pildar, tu as... Ouais, mais tu vas t'écraser un peu, toi. Tu vas laisser finir les gens parler, OK ? Trois minutes, trois minutes. Face de paix, vite paix, vite paix, là, on accouche, là. Je peux finir, là ? On accouche. Bon, alors... Gérard, je suis dans la hanche. Ouais, mais je peux finir. Prothèse, tu dégages ! Je voudrais dire aussi que quand on a les oreilles... Quand on a les oreilles... Dégage-moi la prothèse, là. Aïe ! Est-ce que je peux finir ? Non. Non ? Oui ? Aïe ! Non, mais aïe ! Arrêtez ! Aïe ! Non, mais aïe ! Vous vous chalmez, là, ou je vous chale, moi, maintenant ? Oh ! Alors, face de paix, tu réponds correctement. Ben, moi, ça y est, j'ai répondu. D'accord, général de mon cul, là. Ouais, répétez, première classe. Général de mon cul. On accouche. Je suis dans la hanche, répétez. Ta gueule, prothèse ! Répétez la question, s'il vous plaît. Bon, allez, vous me faites chier, je répète plus la question. Allez, conclusion. Hop, basta. Conclusion. Janif. Fais passer les autres, j'ai l'air. D'accord, petit pion. Petit pion. Petit pion. Petit pion. Petit pion, une fois, petit pion, deux fois, petit pion. Je suis là, je suis là. Conclusion. Je suis là. Mais bouge pas ta hanche. Prothèse, ta gueule. Donc, tu veux ma conclusion ? Ouais. Ben, écoute. J'ai écouté ton débat parce qu'en fait, je viens d'arriver sur la chaîne, donc j'ai eu le temps d'écouter très attentivement. Et ben, moi, je trouve que l'armée, c'est... En concluant vraiment très, très brièvement, parce que je sais que t'as pas trop le temps, mais il paraît que l'armée, c'est aussi excitant que de te rencontrer dans les chiottes de la loco. Alors, moi, je t'emmerde, petit pion, dégage, bonne nuit, au revoir. Général, mon cul. Aïe. Alors, c'était un très bon débat. Oui. Je voulais le dire. Et j'aimerais dire aussi un petit message pour... Non, non, il n'y a pas de message. C'est un dénommé Philippe qui est dans le truc. Non, non, il n'y a pas de message. Salut. Phase de paix. Je voulais dire. Phase de paix. Phase de paix. Oui, c'est phase de paix. Général, mon cul, vous voulez dire. Allez, vous me faire foutre dans son oeuvre. C'est bon, c'est bon. Je vous respecte, je te mets au trou. D'accord, allez, phase de paix. Oui, phase de paix, là. Ben, moi, est-ce que ce serait possible d'avoir Troufion, là, en quarantaine ? Ben, pas de problème. Bon, alors, tu... C'est pas la conclusion, ça. Allez, Gérard. Conclusion du débat, phase de paix, dernière fois. La ramée, c'est de la merde. Bon, alors, ben, d'accord. Pour toi, c'est la conclusion. Croupion. Ouais ? Ben, débat pourri, et puis regardez la 6, il y a Maxou, quoi. Ah, ben, alors, c'est vrai. Alors, attends, Croupion. Moi, je vais te dire une chose. Si mon débat, c'est de la merde, et que tu regardes M6 à la place, dans ce cas-là, t'as le cas de ne pas participer au débat. OK ? Regarde le chien. Va bouffer tes croupions. Mais arrête de bouger de la hanche. Cani ? Euh, ben, j'ai pas vraiment de conclusion. Mais enfin, si, quand même, c'était pas mal. Mais, euh, bon, voilà, c'était spécial, mais pas mal. Eh, quand je vous demande des conclusions, quand vous me dites, faites passer les autres, je voudrais bien que, quand tout le monde passe, que vous ayez quelque chose à dire. Parce que si c'est pour me dire, ah, ben, pour mieux écouter, regarder M6, il y a Max qui passe. Eh, mais, Gérard, t'énerves pas sur moi, j'y suis pour rien. Non, mais, c'est pour Croupion que je m'adresse spécialement. Ben, ouais, c'est pas moi qu'il faut engueuler, hein. Donc, on le sait, on l'a aussi dans les studios, Max. Alors, donc, voilà. On en a parlé en début d'émission. Bon, ça y est, euh... Gérard, j'ai une conclusion sur l'IRC. Alors, Davy One, qui donne sa conclusion, il dit, eh bien, si la plus petite unité de temps, c'est la milliseconde, la plus petite unité de longueur, c'est le millimètre, la plus petite unité de l'intelligence, c'est le militaire. Ah, ben, d'accord, c'est pas mal sa conclusion. Moi, conclusion, c'est dommage que, ben, qu'on a été forcés d'abréger sur la neuvième, parce que sinon, ça s'était bien passé dans la deuxième. Moi, j'ai pas appris grand-chose, hein. Toi, t'as rien appris parce que t'es con, toi, c'est pas de ta faute. Donc, toi, de toute manière, tu resteras toujours content de ta vie, alors... T'attends onze heures et demie pour bosser au standard, donc ça sert à même pas... Donc, conclusion, c'est... Dans l'ensemble, ça s'était bien passé. Si t'es pas content, je t'emmerde. Tu prends une chose, tu prends tes clics et tes claques et tu te taches chez toi. Comme ça, ça nous prend des vacances. Donc, conclusion, sinon, c'était pas mal dans l'ensemble. Je pense qu'on a atteint combien, là ? On a perdu... On a perdu, suite à la fin du débat, où les gens, en partant, m'ont dit que c'était vraiment trop le bordel et trop con et trop nul. Donc là, apparemment, on est descendu sous la barre des 2000. On doit être 1000... Attends, je regarde... 1597. Ben, c'est dommage. C'est dommage que les trois derniers que tu m'as récupérés ont foutu la merde. Ils me disent pas que c'est à cause des auditeurs. Ils me disent que c'est à cause de toi, Gérard. Non, c'est pas moi qui ai foutu la merde, c'est eux qui n'ont pas voulu répondre aux questions. Donc, voilà. Alors, le disque qu'on va s'écouter, c'est Gérard, du côté, avec la boule de travers. Et donc, vous pouvez nous appeler pour le deuxième débat qui va porter sur la prostitution. Ah, enfin, le débat. Attends, toi, tu vas rester à l'arrière, tu vas fermer ta gueule. Ah, non, non. Si, si, parce que je te bats pas en standard. Je te bats pas en standard. Ah, si, si, si, moi j'en ai marre, ça fait depuis 22 que je suis là, Gérard. Ouais, ben, tant pis. Donc, on écoute le disque et vous pouvez appeler Manu, bien sûr, les numéros, Gérard, vas-y. C'est 0803 085000 et toujours le... www.funradio. Et on se retrouve tout de suite après. J'espère qu'il y aura des putes, quand même. Ben, toi, t'en fais partie. == Le débat sur la prostitution == === Contexte === === Les personnages === === Transcription === C'est le deuxième débat et on salue les gens qui sont sur IRC, on salue un peu tout le monde, on leur fait les coucous, on les remercie d'être là. On a redépassé les 2000, quand ils ont entendu qu'on changeait de débat, ils sont tous revenus et on est 2147 plus 3. Par contre, il y a un petit problème avec Andouillette, je suis désolé pour toi mais je ne vais pas pouvoir te prendre pour le débat. Pourquoi ? Non parce que 13 ans et demi, je ne veux pas. C'est tout ? Non, non, non, il est hors de question. Non mais moi je suis précoce moi. Non, non, je ne veux pas le savoir, 13 ans et demi, je n'en veux pas dans le débat. J'ai dit non. J'ai dit non. Bon ok, je le jare. Ce n'est pas croyable. Voilà, c'est tout, moi je ne prends pas des mineurs dans mes débats. Et donc le disque, oh ça suffit là. Le disque qu'on venait d'écouter, c'est Gérard Ducoté avec la boule de travers et donc on va accueillir pour ça Barakouda, 21 ans, de la mode Beuvron. Oui, mais reste du soir. On écoute Fun Radio sur 106.4. Et demi, et demi. 106.4, j'ai moi. Et demi, ou alors je suis en avant, on ne sait pas. Oui, ce n'est pas grave. Grosse Bertha, 22 ans, Bordeaux, 91.8. Salut. Salut Grosse Bertha. Sanisette, 19 ans, Bourricot, c'est la ville ça ? On appelle de Bourricot. On écoute Fun Radio 97.3. Eh oh, il faut peut-être vous réveiller. Quand je vous parle, vous allez me dire si c'est bien les fréquences. Je t'ai dit oui. Ok. On se réveille. Bourricot. Sanisette, on se réveille. Moi, je te dis réveille-toi, je t'ai déjà répondu. Ok. Alors Twingo, 21 ans, Paris, sur 101.9. Ouais. Et Petit Suisse, 19 ans, Brest, 98.9. Ouais, bonsoir Gérard. Bonsoir. Donc le débat, ça porte sur... Les putes. Comment ? Les putes. Les putes. Sur la prostitution. Ouais, c'est pareil. Je tiens à rappeler, Gérard, quand même, qu'on a une prostitue avec nous. Ouais, je sais, j'ai vu. Donc tu charges quelqu'un à la place d'Andouillette, s'il te plaît. Merci, tu fais ton boulot. Vite fait, bien fait. Sinon, gare à ton matricule pour toi. Alors, la première question, donc, avez-vous déjà été voir une pute ? Si oui, pourquoi on va demander ça à un petit Suisse ? Ouais, ouais, j'y vais deux fois par semaine pour me vider les couilles. Ouais. Ouais, je ferai un maximum de plaisir à faire ça. D'accord. C'est pas mal. Voilà. Et donc, Twingo ? Oui, alors moi, je suis prostituée de profession. Ouais. Donc j'ai l'occasion d'en voir pas mal. Ouais, je vois mes copines qui sont prostituées aussi, quoi. Uh-huh. Donc ouais, je vais les voir des fois, on se fait des bouches. Donc je vais voir des putes. Uh-huh. Voilà. D'accord. Sanisette ? Ouais, bah moi, j'exerce occasionnellement pour arrondir mes femmes, moi. D'accord. Bah c'est pas mal. C'est pas mal comme truc, grosse Bertha. Bah non. Non, mais tu peux préciser ? Bah non, parce que j'en suis une. Non, mais attends, t'as un mec, commence pas à dire des conneries. C'est un guignol. Un peu, ouais. Ouais, bah, et Fildar, quand je t'appellerai potchampe, tu le sortirais dessous le standard. D'accord, mais des prostituées, mec, ça s'appelle des guignols. Pour l'instant, tu vas éteindre ton micro et tu vas faire ton boulot comme je te le demande, ok ? Des guignolos. Alors, Barakouda ? Des guignolos, s'il vous plaît, je préfère. Oh, grosse Bertha, tu te tais, c'est le top, là, merci. Barakouda ? Ouais, bah moi, j'y vais comme tout le monde, pour l'hygiène, pour me vidanger, quoi. D'accord, il n'y a pas d'autre solution que d'aller en voir. Tu peux me dire, attends, grosse Bertha, Barakouda, tu peux me dire s'il y en a de ton côté, là-bas ? Bah ouais, c'est quand même assez blindé au niveau pute, ouais, il y a tout ce qu'il faut, quoi, ouais. C'est abominable. De quel côté qu'il y en a ? Parce que je connais un peu... Des gauches. Tu connais les coins putes ? Non, mais je connais la mode Beuvron parce que j'y étais, alors donc... Ouais, mais je ne voudrais pas trop, trop citer parce que je ne voudrais pas qu'on me répète. Après, du boulevard Jean Jaurès, quand même. D'accord, mais c'est pas mal, c'est bien précisé, quand même, le... T'as bien précisé, quand même, le nom de la rue. Il n'y a pas de problème. À la place d'Andouillette, on accueille M. Claude. Bonsoir, je suis Macron. Salut. Et je le revendique. Salut, Macron. Bonsoir. C'est Barakouda. Salut, Macron. Ouais, ça y est, ça y est, ça y est. Donc, pour toi, M. Claude ? Ouais, bah écoute, moi, je mets des putes sur le marché. Ouais. Et ce qui se passe, c'est que c'est sur le boulevard Baie. Alors, hé, encore une fois, je tiens à préciser que le prochain qui me donne un nom de boulevard gerbe, c'est clair, net, précis. C'est pas valable. C'est pas valable ? Attends, toi, tu risques de gerber vite fait, toi. Je vais pas chercher qui c'est, hein. C'est horrible. Ok. Horrible. Alors, euh... C'est trop susceptible. Oh ! On s'écrase. Inonible. On s'écrase. Donc, M. Claude, pour continuer... Ouais, donc, excuse-moi, j'étais un peu... Je voulais faire un peu de débordement. Ouais. Je voulais faire un peu de pub pour mon commerce, je suis désolé. Ouais. Donc, euh... Oui, tout à fait. Mais je respecte ces femmes à leur juste valeur. De traîner. D'accord. S'il vous plaît. Oui, oui, c'est qui, là ? Euh, c'est, euh, Twingo. Ouais. Je ne supporte pas... Pas de marque. Oh ! Pas de marque. Ouais. Eh oh ! Le prochain qui ouvre sa gueule ! Quand quelqu'un parle, gerbe ! Ok, ouais. Ok, ok. Ok. Ouais. Alors, Twingo. Oui, je vous demande juste d'avoir un langage. Un langage correct en parlant de nous. On n'est pas détraînés. Ouais, mais toi, t'es pas de série déposée, toi. Ok, salope. Oh ! Qui c'est qui s'amuse à dire des saloperies, là ? Allez, hein ! Barakouda. Barakouda, bonne nuit ! Salut ! Non, c'est pas Barakouda, Gérard. Gère un peu, je vais essayer de voir qui c'est, mais fais quelque chose, quoi. Ouais, mais attends. Toi, je t'ai dit d'éteindre ton micro. C'est pas moi. C'est un Gérard. Bon, Gérard. C'est une odibe. Gérard. Oh ! Gérard, pour reprendre le débat, on a un petit sondage, allez. Donc, à la question pour ou contre la prostitution, 20% des gens... Attends, hé, Manu ! Ouais. Les pour ou contre, ça commence à me casser les... Non, mais tu vas voir, il est bien, celui-là. Il est bien, il va avoir des réactions. 20% des gens sont pour Alain Prost, 30% n'ont pas le permis, et 50% n'ont jamais été routiers, donc ne connaissent pas les prostituées. Alors, hé, tu vois, Manu ? Voilà. Ta réaction, là. Ouais. Ça, c'est de la connerie, donc c'est pas la peine d'intervenir pour modérer... Donner des réactions, puis... Bah, je sais pas, ça aurait... Non, parce qu'Alain Prost n'a rien à voir dans le débat de la prostitution, OK ? Alors, c'est pas la peine de dire des conneries, d'accord ? OK, d'accord. Les routiers, ils ont quand même à voir, hein. Bon, toi, tu t'écrases pour l'instant, OK ? Non, mais attends, j'ai été routier, et je me suis arrêté voir des putes dans les camionnettes, je sais pas de quoi je parle. Ouais, bah, de toute manière, il y en a un peu partout, hein. Des camionnettes ou des routiers ? OK, bon, qui c'est qui veut rajouter quelque chose ? Il y a une nana qui voulait parler, c'est qui ? Bon, bien, c'est bien, quand je demande qui veut parler, il n'y a plus personne. C'est pas mal. Nous t'écoutons. Bon, alors... J'ai des bons de réduction sur les fellations, si ça intéresse quelqu'un. C'est qui, c'est qui, c'est qui, ça ? C'est M. Claude. Ouais. Les dix premiers, plus un invité, j'ai une réduction sur les fellations. D'accord, eh ben... Prisca et Zoubira. D'accord, OK, on a très bien compris le message, donc... J'ai pas les manques, j'en ai peur. J'ai le sucre, je suis trop heureux. Oh, on se calme un peu, là, ou quoi ? Donc, alors, moi, je vais répondre quand même à la question. Il faut. Je vais quand même répondre à la question, parce que... Avez-vous déjà été voir des putes, si oui, pourquoi ? Moi, je peux vous dire une chose, que je n'ai pas eu l'occasion d'y aller. C'est tout. Oh, Gérard. Tu peux nous le dire, tu peux nous le dire, on est entre nous. Non, non, non, non, mais ça y est, j'ai répondu, donc... Ils veulent pas de lui. C'est bon, c'est bon, c'est bon. C'est qui ? Ça s'est peut-être arrivé, ça, Gérard, de te faire recaler par une pute, non ? Non, non, pas du tout. Deuxième. Non, mais... Quand vous voulez jacter, vous donnez vos noms, parce que j'en ai marre d'entendre... Ouais, c'est Polo, c'est un menteur. C'est qui ? C'est Polo. Ouais, il n'y a pas de Polo dans le débat. C'est Polo, et c'est un menteur. Bon, attends, toi, tu vas commencer à t'écraser. Hein ? OK ? Oui, c'est Pepito, je vous l'ai dit. Écrase ! Oh, Fildar. Ah, on sonne à la porte. Fildar ! Fildar ! Putain, j'ai oublié ! Putain, j'ai oublié ! Oh, s'il vous plaît, vous vous tchalmez ! C'est Lolo Ferrari. Bon, Fildar ! Oh, quand je te parle, les oreilles, là ! Elle sonne avec son téton. Putain, c'est pas possible de travailler avec un con comme lui, hein ! Ah, Blinquillon ! Lolo Ferrari, elle est pas baisable. Elle est pas baisable, cette meuf. Non, mais quand vous aurez fini vos conneries, on pourra peut-être... Hé, Fildar, tu gères un peu, là, au lieu de faire le con ? Mais quoi, je gère ? Je dis rien. Non, tu gères en rien, pour l'instant. Tu dis que t'as l'air de t'appeler pour les caméras... Pour revenir au débat... Pour revenir au débat, il y a un réa sur IRC qui te demande si tu connais personnellement une prostituée. Non, pas du tout. C'est Sandy ? Euh, qui c'est qui vient de dire ça ? Je te préviens, Fildar ! Troisième édition. Si ça recommence à parler de Sandy, tu me vires où, où, où, Sanisa Toutingo, je cherche pas à qui savoir. Ok, d'accord. J'ai trop de respect pour cette profession. Ok, alors, je te signale, t'as intérêt de te réveiller quand je te parle, parce que tout à l'heure, tu as morflé. Que pensez-vous des tarifs selon ce que vous voulez faire ? On va demander à Barakouda. Allô ? Barakouda, vas-y, réponds. Barakouda ! Il dort. Il est là, il est là ! Il est où, Michel ? Il est où, pute ? Allô, Gérard ? Barakouda, tu réponds, s'il te plaît. Ouais, je te disais, moi, j'ai une carte d'abonnement. J'ai souscrit à la carte Tepu. J'ai droit à une fédération gratuite pour 3 sauts demi-achetés. D'accord. Ça vaut relativement le coup. Ça marche aussi à Paris, dans tous les coins. C'est intéressant. D'accord. Grosse Berthe ? Alors, moi, mes tarifs... Pardon. Bon, je sens que tout à l'heure, je vais m'énerver, ça va... Je vais en saquer, déjà, vite fait. Je pense que les tarifs varient entre 5 et 10 000 francs sur l'avenue Foch, de Paris. Alors, Grosse Berthe, au revoir. Ça t'apprendra de préciser. J'avais bien précisé de ne plus donner de nom. Grosse Berthe, terminé. Il n'y a plus de pute à l'avenue Foch. C'est terminé, ça, Gérard. Terminé pour Grosse Berthe. Sanisette. Oui, en fait, moi, je te disais, je pratique à l'occasion pour arrondir mes fins de mois. Et en général, les tarifs, ça dépend des putes. Ça dépend de ce qu'elles font aussi. Et moi, en général, je demande pas mal, quoi. Salope. Toi, le salaud, tu vas faire mettre ta gueule. Alors, je t'explique pourquoi je demande pas mal. Honnêtement, en toute franchise, moi, j'aime la bite. Donc, forcément, je me donne à fond. Et donc, forcément, on revient me voir très souvent. Et donc, forcément, j'augmente mes tarifs. D'accord. Gérard, il y a Yopi sur IRC qui te demande si tu connais la différence entre une pute et une pizza. Non, mais ça, c'est quoi ? La pizza, tu peux l'avoir sans champignon. D'accord. Twingo. Oui, c'est dégueulasse. Pas de marque. Twingo. Oui, oui, oui. Moi, je suis... Bon, je suis prostituée de profession. Mais je fais pas n'importe quoi non plus. Donc, la pipe à 100 balles, c'est même pas la peine à 10 ans de paie. Mes tarifs commencent à 10 000. Et en fait, je fais 5-6 passes dans le mois. D'accord. Petit Suisse. Ouais, moi, j'ai des tickets Sodo. Donc, j'ai des promotions sur les Sodo. Je rappelle que je ne prends pas les tickets de la vie. Non, mais attends. Petit Suisse, je crois qu'il n'a pas tellement compris la question, lui. Si, si, j'ai des tickets Sodo pour avoir des réductions sur les tarifs. Non, mais que pensez-vous des tarifs selon ce que vous voulez faire, abruti ? Ah, ben, je pense que c'est excellent, quoi. C'est bien, hein. D'accord. On n'a rien à voir des réductions comme ça. Non, mais je crois que pour l'instant, je pense que vous déconnez à ce temps-ci. Non. Non, presque pas. C'est pas le genre de la maison. Non, pas du tout. C'est pas le genre de la maison. Non, presque pas. Donc, tu as dit qu'on se marrait. Non, presque pas. Bon, Jérôme, tais-toi, écoute-moi. On accueille à la place de... Attends, tais-toi et tu fermes ta gueule, toi. On accueille à la place de M. Claude qui est parti se coucher queue de velours. Et à la place de... M. Claude. La grosse Bertha, je cherche encore. Attends, c'est pas évident à trouver. Qui ? C'est qui ? Queue de velours. Ok. Bonsoir. Bonsoir. Alors, petit Suisse, t'as répondu, toi. Alors, donc, queue de velours pour toi. Excuse-moi, je me faisais une queue. Ouais, salut. Ah, d'accord. Je pense que, tout à l'heure, tu as retourné d'où que tu deviens. Fais gaffe que je te sperme pas dessus, quand même. Ouais, ben, moi, je te dis fais gaffe parce que, tout à l'heure, tu as retourné d'où que tu viens. Bonsoir. Alors, Sanisette, c'est terminé pour toi. Au revoir. Hop. Voilà. Bonne nuit pour elle. Terminé, ça y apprendra de parler de Sanisette. Ok, je l'en remets. Une admissible. Je te dis de la gerber. Et tu fais ton boulot correctement avant que je t'éclate. Bon. Ok ? Queue de velours, là, pareil. Queue de velours pour toi. Pour moi, quoi ? Que pensez-vous des tarifs selon ce que vous voulez faire ? C'est la dernière fois que je répète la question parce que vous commencez à me les gonfler, là, sur le deuxième débat. Les tarifs sont variés en fonction de Paris ou la province. Moi, j'ai le souvenir d'une époque, je t'écoute depuis très longtemps, où, apparemment, pour 1200 francs, on pouvait avoir une sode de mie plus un breakfast. Oui. Tu vois, ça peut rire les autres abrutis derrière, mais tu veux dire ça pour qui ? Pour toi, je me souviens qu'à une époque, il y avait des tarifs, c'était 50 francs la pipe, et 1200 francs pour un breakfast. Donc, à mon avis, à mon avis, t'es... Non, mais, à mon avis, t'es vachement au courant de cette publicité, donc je me demande si c'est pas... Parce que t'en avais pas l'avantage, il y a deux ans, espèce de con. Espèce de con, je t'emmerde, alors tu dégages Queue de velours, merci. Voilà. J'aurais bien mis un coup de langue à Queue de velours. Bon, Gérard, on a des nouveaux, on a Kékéthos. Non, non, mais tu me remplis une fiche... À chaque fois que tu me fais le coup, tu sais pas écrire ou quoi ? Non, non, mais tu te démerdes, tu me... Bonjour, Guillaume, c'est Kékéthos. Alors... Il est où, Michel ? Je sens que Fildard, tout à l'heure, avant la troisième question, je vais te mettre une gaufre, mais tu as ton souvenir, toi. Chocolat chantilly, pour moi. Banane, banane, chocolat. Bon, une question IRC, non ? Oui, si tu veux. Alors, est-ce que la carte ImagineR peut servir pour les putes ? Non. Moi, j'ai une question pour les mecs de l'Internet. gringo tu peux me trouver un site sur jacques vapeur alors toi je vais dire une chose que si tu as un truc à demander à rigaud pour le site internet comme ça tu fais le 01 40 521 521 voilà comme ça tu seras tout de suite renseigné merci gérard et vous pouvez toujours bien sûr laisser des messages sur le répondeur j'ai ou j'avais oublié de préciser donc allô allô allô allô bon ça y est vous avez fini la bouconnerie alors croyez vous qu'il faut laisser ouvert les maisons closes on va demander ça à barakouda sont fermés fils d'art tu cherches des ans et tu fermes ta gueule pour la deuxième fois ok gérard sur rc on me dit que si une maison est close elle peut pas être ouverte mais il y en a qui seront ouvertes ou fermées mais je pense que les trois quarts maintenant sont fermés on va demander à barakouda ouais il a pris le goldorak en plastique et donc à la place de sa visite on accueille bermuda et je suis en train et à la place de queue de velours on accueille à nu sans sky alors salut tous ceux qui viennent de nous récuer que revenir alors barakouda pour toi pour revenir au débat à turpentine qui te demande gérard vu que tu parles de maisons closes est ce qu'il y a des immeubles clos non pas ma connaissance ouais ouais je voudrais encore mon jingle un coup là non tu es tu réponds à la question s'il te plaît bon d'accord que je te propose c'est un compromis en fait les maisons closes tu les laisses entre ouvertes à l'eau à l'eau à l'eau à l'eau à l'eau à l'eau et quand vous aurez fini vos conneries vous vous ne direz alors barakouda ouais tu m'écoutes je t'écoute alors je te disais à l'eau à l'eau à l'eau à l'eau à l'eau les auditeurs vous m'entendez un bon moment temps manu mais c'est pas moi j'ai rien fait ils sont là rien et moi vous m'entendez pas moi à kouda vous faites quoi là soir je sais pas mais là ça vient pas nous allons touche derrière ton micro voilà vous l'entendez là vous l'entendez gérard maintenant c'est bon barakouda troisième fois barakouda c'est la troisième fois que je pense de la caisse je te fais appeler donc c'est barakouda de l'agence touriste que je voulais dire c'est que ben je te propose un compromis donc les maisons closes et bien au lieu de les ouvrir tu les laisses juste entre ouvertes ça suffira à quoi je pense qu'ils vont s'offiler ouais d'accord quelques toss ouais bah moi les maisons closes je trouve ça abominable et je trouve qu'on devrait tous les faire mais c'est horrible d'accord abominable bienvenue à tous les abominables moi personnellement j'en ai rien à foutre qu'elle soit fermée ou ouverte j'en ai rien à foutre c'est pas mon problème à ce propos gérard y'a yopi derrière merci yopi sur rc qui demande s'il faut une clé pour rentrer dans les maisons non maintenant c'est les personnes qui l'utilisent ont avec l'info une passe fil d'art tout écran s'il te plaît merci on m'a dit que c'était plusieurs euros tout est une baule il me posait une question qui est bien oui j'aurais voulu savoir si je travaillais dans une maison close qui serait ce type de passer non parce que je vais j'ai déjà ce qu'il me faut j'ai trouvé même alors qui c'est qu'il vient d'être c'est pas moi c'est pas moi j'ai rien dit je crois que c'est un animal c'était moi j'ai pas la zik de m'animal et les obis de lépreux c'est moi je fais dans la bouche je vais essayer de trouver jean je sens que vous commencez déjà toute la merde troisième question je sens qu'on va changer les auditeurs j'ai pas répondu moi on va demander un twingo oui à deux marques oui bah moi j'ai commencé ma carrière dans ce genre de détachement il y avait c'est mignon il y avait des mains de jardin dans la cour et tout mais voilà elle a fermé et bon je me suis retrouvé à la rue donc il a fallu que je me brouille par mes propres moyens donc au début c'était un peu dur j'étais dans une petite chambre de bonne mais j'avais juste un petit lavabo de merde et puis bon bah là je me suis dit que ça s'emballe et puis je me suis dit mais attends si tu prennes ta vie en main faut que tu t'assures quoi d'accord twingo twingo oui twingo cinq minutes celui qui s'amuse à jacter alors que la personne parle va virer mais vite je vais pas chercher gérard pour revenir dans le thème du débat il y a davy one encore lui non s'il vous plaît il y a davy one sur l'IRC qui te demande s'il faut payer un supplément à la prostituée si on veut qu'elle nous mette un coton-tige qu'est-ce que t'as fait là oh là là il a tout cassé t'as même pas entendu ma question non parce que j'étais en train de regarder ce qu'il était en train de faire manu à l'arrêt en train de faire des conneries je répète si t'es pas content tu dégages toi il y a davy one qui te demande le prix d'un supplément pour une prostituée quand tu veux qu'elle te mette un coton-tige non j'ai répondrai pas du tout comme ça ça va aller clair et c'est j'essaie d'être répondu à sa question à celui-là ouais on va demander à anus rancelet rancel pardon ouais concernant les maisons closes ouais nous on a eu des problèmes c'est qu'on moi j'ai travaillé pour une maison close qui a bien marché dans les années 70 et le problème qu'on a eu c'est qu'on a eu effectivement une prostituée qui s'est échappée ouais alors non mais on la recherche aujourd'hui on croit qu'elle traîne du côté de suren alors anus en sky terminé pour toi au revoir terminé pour toi c'est fini elle s'appelait christine et bah tu dégages allez hop tu me le vire terminé pour lui il a pas dit qu'elle était grosse petit suisse pour finir ouais donc moi je trouve ça inadmissible carrément les maisons closes surtout que moi j'ai la pute que je fréquente elle s'appelle pupute et moi j'aimais bien quand tu avais des journées cuisses ouvertes d'accord c'est pas mal moi je pense que à mon avis comme vous allez comme vous êtes en train de vous les gens s'il te plaît tu me laisse parler s'il te plaît comment est un temps merde ma copine tu vois c'est clair net et précis ce coup là tu vois à temps merde et atchi dans la gueule non non non alors maintenant celui qui s'amuse à déconner avec ça n'a dégagé tout de suite c'est n'importe quoi alors parce que ça commence à bien faire alors filard tu vas faire ton boulot correctement et tu as fermé ton micro c'est pas évident de chier dans la gueule ouais ben toi tu gérard on a on a perdu environ 500 personnes quand tu as parlé de ce qu'il y a non c'est une honte non mais c'est dégueulasse mais gérard vient t'asseoir il a rien fait fil d'art lui t'a pas dessus tu as tu as le permis le micro je te préviens toi donc quatrième question celui que ça plaît pas il peut ranger peut raccrocher on prend d'autres personnes il ya du monde derrière t'attends allez-y pose la question gérard faut-il se produisait pas et où il va il va se faire lui là avec ses allô alors faut-il se prostituer pour avoir du boulot et on va s'écouter avec une scie pour se raser les boules donc on va récupérer pour sa barracuda en espérant que vous vous êtes calmés durant ce disque ouais je suis là j'aimerais bien un peu mon jingle manu c'est plus la peine de le passer quand il te le demande parce que sinon il va il va gerber lui commence à m'énerver à l'opinion qui est aussi tu t'écrases pour un sens je récupère tous ceux qui étaient là ok animal ok merci bon alors barakouda était toujours là toujours présent avec mes chiens l'honore qui est quête hausse j'ai la gaule toujours la bernuda ah oui ça chauffe oh tu te calmes bernuda s'il te plait merci bon fils d'art soit tu me les chagnes ou soit tu me prends d'autres personnes parce que ça commence à gonfler ça commence à me gonfler c'est pas dirigeable alors twingo toujours là gérard est-ce que tu peux répéter la question s'il te plaît mais on va finir tout une pointe go toujours là et petit suisse ouais salut à la place d'annus en sky on accueille fleur de lotus je te préviens n'essaye pas de les repasser sur d'autres non je t'ai dit non le fleur de lotus lotus et donc salut à toi alors faut-il se prostituer pour avoir du boulot voilà la question que l'on me demandait sur l'hier c'est donc on va demander à barakouda non non ils ont jamais demandé ça je répète la question comme tu me l'as demandé donc barakouda tu réponds s'il te plaît c'était sur l'armée tout à l'heure tu m'entends moi je t'écoute ok je te dis objectivement dans la vie tu as une sale gueule et que tu peux rien faire d'autre moi je crois que ouais vaut mieux ok donc pour toi pour mieux avoir une seule gueule et puis se prostituer écoute si tu n'as pas le choix et que tu es obligé de vivre à la sueur de tes fesses écoute faut assumer quoi je pense que d'autres sont passés par là avant n'est ce pas ok t'inquiète hausse non je pense pas que ce soit un vrai métier quand même mais c'est bien pratique d'accord n'est ce pas oui je t'écoute non j'ai dit n'est-ce pas d'accord question à toi l'encontre bernuda écoute moi plus ça chauffe entre mes fesses c'est mieux c'est quoi tu me files ton number ça commence à bien faire là vous allez vous calmer avec les avec les gens quand ils parlent ok mais c'est que des cochons pour toi moi c'est un vrai métier donc je peux pas me permettre de dire que que plus ça chauffe je chauffe c'est vrai j'adore le cul mais bon toi t'es plus trop fou les deux moi je fais pas très sérieusement très sérieusement d'accord toi tu déclares pas tout exactement je le fais payer en liquide gg tu fais du black moi je veux bien payer en nature et vous précisez vos noms quand vous voulez parler ouais je voulais savoir si c'est un vrai travail et il y a quoi il y a des acédiques pour les il y a une retraite pour les putes tout ça tu cotises sur tes putes les prostituées payent une retraite tout à fait c'est à quoi où c'est que tu cotises à la banque du sang en fait non tu as une assurance personnelle est-ce qu'on touche les sodomisations sociales c'est à 80% est-ce que t'as un compte épargne à la banque du sperme celui qui s'amuse je vais faire des dépôts et des retraits assez souvent alors petit suisse pour toi ouais bah moi j'en profite parce que en tant que client quoi mais bon si elles veulent faire ça quoi donc c'est tout ce que tu as à dire ouais ok fleur de lotus écoute moi je veux prostituer avec grand plaisir mais je trouve ça un peu dégradant et ça ne m'empêche pas du tout d'aller aux putes sans sans sans problème sans après qu'il n'y ait aucun on va chez les putes et au cul au cul ok d'accord et chez le coiffeur on fait quoi voilà ok alors moi je peux vous dire une chose que celui qui veut faire son boulot son boulot comme ça bah tant pis non personnellement dans un fil d'art puis là si ça ne dérange pas tu non mais il est parti chercher un truc c'est pas grave par contre moi j'ai un petit son un petit sondage qui est bien par contre là à la question n'en rigolez pas à la question êtes vous déjà allé voir une prostituée 25% des gens ils sont allés avec leurs femmes 35% ils sont avec aller avec leurs enfants et 40% ont demandé mais alain prostituée qui n'importe quoi ça y est là vous vous calmez un petit peu là on se calme l'ascar et en mire toi d'accord c'est à moi qui parlais vas-y jara alors cinquième question pourquoi que les jeunes se mettent à la prostitution on va demander à fleurs de lotus pourquoi que pourquoi les jeunes se mettent à la prostitution écoute de la prostitution c'est le chemin le plus facile pour pour gagner de l'argent quand tu vois que j'ai pas il ya des jeunes qui veulent être cadre c'est pas de +2 alors que tu te fais sur le trottoir des cartes les cuisses et c'est parti alors je vais dire une chose que plus d'euros et puis dans le but c'est plutôt bien bien comment je fais maintenant moi il ya sur irc il ya un réa qui te demande s'il ya des réductions pour les prostituées après 19h comme france télécom non je vois pas de réduction alors petit suisse à la minute vient de couper petit suisse tu prends quelqu'un d'autre et c'est tout on va demander à twingo oui pas de marques gérard faut arrêter la balade qu'elle a qu'à prendre un autre nom qu'une marque de voitures c'est tout un appel toi qu'ils ont rappelé quito je faisais je voulais dire oui moi j'ai choisi d'être de prostituées parce que je moi j'avais envie de travailler dans la rue donc c'était ça ou pervenche donc mettre des pvc pas trop mon truc donc j'ai choisi prostituées et tu préfères te faire la chance de faire revanche oui j'ai eu de la chance à l'été il y en a sont trop moches pour faire plus tant qu'ils font elles font pervenche bernuda ben moi j'ai commencé à faire ça l'âge de 18 ans j'en ai 21 et je m'aperçois en fait avec les années qui passent que plus j'en ai eu et plus j'en demande ça suffit derrière s'il vous plaît parce que là ça commence à bien perdre maintenant vous allez vous tenez vous allez éviter de dire des cochonneries comme ça ok sur les putes tu veux qu'on parle de poésie si ça te plaît pas toi tu peux tu peux raccrocher ton téléphone ça nous prend des vacances je voudrais te faire un bisou ma pute tu dégages sinon à la place de petit suisse on accueille plus pute bonsoir gérard salut salut salut ça va c'est ça peut te foutre des médecins à laquelle vulgarité on va demander à bâtir on va demander on va demander toi pourquoi que les jeunes se mettent à la prostitution pas que j'en sais moi en tout cas moi j'ai fait la pute un bon parce que je n'avais pas j'ai pas d'autres moyens de gagner de l'argent et j'adore les grosses textes excuse moi non je pense que les jeunes qui se mettent à la prostitution c'est pas vrai il y a beaucoup plus de vieilles mamies toutes pas belles qui prennent un fric fou et je comprends pas c'est faux mais si c'est vrai non pilar tu t'écrases pour l'instant je donnerai mes réactions moi même je connais jeanette qui est avenue bip et bah un coup d'oeil pour finir ok bon manu ça suffit j'aime bien ce zik ouais mais moi j'en ai ras le bol hé non mais vous avez vous avez les idées de gâcher les débats ou quoi là ce soir gérard j'ai un sondage qu'on m'a rapporté sur internet par kevin klein alors quels moyens de paiement utilisez-vous ouais mais non mais tu gueules tu dis tu gueules il fait ça il fout sa merde avec la cause de barracuda l'autre qui fait la moitié du boulot il y a pour l'instant il y a krigo et ouais avec moi c'est abominable oh vous vous fermez vos gueules maintenant donc j'ai un sondage vite fait quels sont les moyens de paiement que vous utilisez lorsque vous allez voir une prostituée 55% utilisent la carte bleue 12% la carte jeune et 15% la carte routière non bah ça normalement les cartes jeunes et cartons routières ça passe pas vous avez commencé par vous tchalmé maintenant maintenant sa barracuda de réagir ok alors moi je veux dire déjà que les putes moi je paye en liquide déjà c'est clair deuxièmement je suis tout à fait d'accord il ya beaucoup de vieilles qui se prostituent et je sais pas si tu t'es déjà fait attend attend excuse moi une seconde barracuda barracuda c'est la dernière fois que tu me met ça terminé pour lui c'est futé je sens que tout à l'heure je vais je vais rester avec le twin go et bernuda vous allez dégager le débat c'est sur les prostituées là j'aimerais bien qu'on suive un peu le débat et qu'on arrête de délirer ouais bah toi le premier tu fais ton boulot correctement temps je te défends merde bon non mais tu vas me chercher un autre une autre personne j'arrête pas vite fait tu te démerde ya ya des lignes qui sonne alors donc il ya comme un gars qui sait qu'elle a pas répondu tout le monde a répondu non j'ai pas répondu moi j'ai raté non tu as déjà répondu je te fais passer je t'étais passé d'ailleurs en premier première alors donc je peux vous dire une chose qu'il ya beaucoup de jeunes qui se mettent à la prostitution maintenant on sait pas pourquoi ça faudrait voir parce que c'est quand même inadmissible d'avoir des jeunes qui si qui s'y mettent aussi maintenant pas fait de recherches gérard sur ce sujet tu sais pas pourquoi toi mais c'est une petite idée ça vient d'où si ils ont envie de se prostituer c'est leur problème c'est pas de mien en personnellement moi là dessus j'irai pas me foutre à la prostitution comme ça c'est à dire voilà s'habiller comme ça toi que tu cherches les gens et tu fais vite fait toi alors les stars d'aujourd'hui ce prostitutel on va demander à quelques tous tu peux répéter parce que j'ai mal compris les stars d'aujourd'hui ce prostitutel mais n'importe quoi les stars propres à protéger à la prostitu pas alors tu peux préciser un max de pognon et voilà donc elles n'ont pas besoin d'argent ben ok mais ailleurs peuvent le faire gratuitement bon ça ça m'étonnerait moi c'est que la dernière fois je me suis tapé pamela henderson bon le seul truc qui m'a repoussé ses pieds mais sinon va pas demander d'argent j'ai pas l'air ça malibu comme si non mais manu tu arrêtes un peu tes conneries s'il te plaît la prochaine fois je m'appelle mitch ouais ben la prochaine fois tu vas t'appeler ferme ta gueule maintenant pas de problème ok bernuda ouais ben moi j'ai déjà eu des clients effectivement des stars et des politiciens également c'est jean-marie le pen bernuda pas de marque tu vas tu vas te calmer avec des conneries comme ça d'accord sinon tu vas dégager pas d'insultes je dis plus de non alors enfin je voulais quand même que tu saches que le monde des stars c'est quand même un monde très très vicieux et que en fait vous seriez bien surpris de des gens de personnalités qui vient vous voir et surtout ce qui vous demande quoi c'est exact moi je me suis déjà pris entre autres des coton-tiges mais j'ai pas eu que ça quoi je veux dire c'est quand même affolant les gens de la radio ou pas des gens de la radio on peut pas donner de nom moi j'ai pas de marque moi je suis sûr que tu t'es déjà tu as tu t'écrases excuse moi tu dis par exemple le prénom et le nom genre sable z alors quelque chose terminé pour toi au revoir c'est pas quelque chose je l'avais viré je vais gérer sinon la place de barracuda on accueille giclette bonsoir là je vais te dire une chose que si c'est les mêmes mais non garat j'ai pris 25 lignes et valide en ligne alors on va demander à pleurs de lotus nantes windows a pas répondu j'ai pas répondu je suis d'accord avec les stars sont des putes dans le sens où bah oui j'aime pas peut venir nous voir quoi c'est des gens qui payent et qui paye bien donné quelques exemples vont s'entretenir de nom mais j'ai dû fouetté un comique un petit comique sans cheveux tu vois qu'avec une drôle de tête je les fouette et pendant trois heures d'accord avec fleurs de lotus il me semble que certains stars de la télé se prostituent certains stars enfin de la télé des animatrices qui couche avec des producteurs et ça je dirais pas de nom et je le sais mais personne ne me le fera avouer ok c'est qu'il s'est dit c'est et personne ne me le fera avouer ok c'est qu'il s'est dit c'est qu'il y avait il ya des stars qui doivent se prostituer oui c'est possible pour se faire encore plus d'argent mais c'est tout ce que tu peux préciser toi maintenant je suis en train de pomper j'ai pas que ça sert non bon alors dans ce cas là tu as pas que ça paie va continuer à pomper en voir allez allez hop et giclette ouais déjà bonsoir j'ai un soir et je vais dire que déjà les stars ils vont pas voir des plus qui vont voir des gold girls comme on dit et je pense que des google girls on connaît tu peux préciser on va pas donner de nom gérard non mais tu peux préciser non mais on va pas parler des stars de cinéma voilà quand même c'est leur vie privée on va être pas parasites quoi moi je peux vous dire une chose que à ma connaissance personnellement j'ai jamais vu de stars qui se mettait à la prostitution donc non j'ai jamais vu ça encore ça m'étonnerait que yann haye qu'il fasse un homme et gérard il ya fait plus de films bien et où elle a pu de reconnaissance à des plus célèbres elle peut tomber dans la prostitution ça on sait pas oui donc sur irc on me demande à propos des stars est-ce que les stars du x on peut les considérer comme des prostituées ben t'en as certaines qui font tout en faisant des films x donc je pense que si ici ils choisissent de faire ce boulot là c'est que c'est vraiment eux qu'on choisit c'est pas la prostitution les films x les deux s'ils se mettent dans le hic s'ils font de la prostitution quand même donc c'est la même chose voilà donc justement 20 la sixième basse ailleurs on vient de la paire 7e avant avant je voudrais m'adresser aux gens du standard que c'est possible d'avoir une invitée mystère qu'aurait fait pute alors je préviens qui s'amuse à demander ça alors pleurs de lotus tu dégages voilà comme ça plus vite alors septième question il ya plus y at il plus de femmes que d'hommes qui se prostituent on va demander à bernudas honnêtement j'en sais rien parce que dans le quartier où je bosse ya que des nanas mais je suis persuadé qu'il ya autant de mecs que non mais je te demande de ce qu'il y en a plus ou moins d'accord twingo il y en a un peu moins quand il ya un peu moins de mecs au fait de moi dans mon secteur mais il arrive qu'on fasse des trucs ensemble pour un client c'est lui qui s'amuse à faire du bordel avec son téléphone est prié d'arrêter tout de suite inadmissible ok qui c'est qui nous reste quelque chose non je crois que quelque chose je t'avais dit de dégager pas loin si tu veux répondre ouais je pensais beaucoup plus de filles qui se protégent et qui se prostituent ouais mais s'il ya plus de femmes que d'hommes et il ya plus de femmes que d'hommes et ceux qui se marrent comme un boucle avant à se calmer des oreilles oh là là tu vas te calmer parce que tu as dégagé c'est pas moi allez gérard je peux répondre ouais c'est ma croix la moutarde non tu sors d'où toi j'ai remplacé pupitre temporairement non non on l'avait viré j'ai oublié de le dire excuse moi c'est ma croix là mais non mais attend fil d'art tu es prié de faire ton boulot correctement c'est la dernière semaine que tu paies les débats j'étais dans les 24 lignes je peux pas tout faire ça y est ça se calme derrière où je vire tout le monde pour revenir au débat voilà comme allait dire manuel il ya rocco sur irc qui te demande si le téléphone rose est considéré comme une forme de prostitution justement on va on va en parler tout à tout à l'heure par contre moi gérard j'ai un j'ai un petit sondage donc à la question combien donneriez-vous à une pute donc 32% donnerait 2 euros 28 28% dans leurs animaux domestiques et 40% donnera leur approbation et 1% déjà donné leurs dents et n'ont pas voulu donner leur moustache alors je vais dire une chose soit tu étais tu étais truc de merde la sondage c'est à peu près le même sondage que le premier c'est même plus la peine de la marque et non mais pour l'instant tu as moitié bouché aveugle dimanche tu vas te pliancer passé dix ans tu en train de foutre ta merde aujourd'hui la semaine dernière tu faisais du bon boulot cette semaine que tu m'aimes tu es comme fil d'art fermez vos gueules bon je sens que moi je pense qu'il ya autant de putes au féminin qu'au masculin mais des masculins il en faut mais c'est tout bah ouais j'y clette il ya quand même vachement plus de femmes que d'hommes qui tu tu as qu'à voir les deux gros salope on a là au téléphone ça explique pas mal de choses quand même je suis désolé je ne peux pas laisser passer ça gérard vous êtes comme des grosses chiennes les filles tu vois à l'effort des pierres ça y est vous avez fini le profession mais je ne suis pas une chienne à moi je suis une chaîne vous savez ce que vous allez faire vous allez régler votre merde en antenne non ça y est c'est fini on va on va s'écouter roger le peu le pipeau avec du saoul parce que c'est dur de péter et on se retrouve après en espérant que vous vous êtes calmé et on récupère quelques tosses en espérant que ça s'est calmé ce coup là pas de problème moi je suis très calme et je te kiffe et bah moi je t'en moi je te dis merde ça veut dire que je t'aime bien bah moi aussi mais moi alors ok bernuda dans le bermuda est parti on accueille laura ingalls et laura ingalls manu s'il te plaît laura ingalls je vous préviens vous allez vous calmer maintenant donc on a toujours twingo on récupère twingo à la main macro on l'a il est parti macro on a su son c'est un il a encore plus haut donc il voudra en parler et savoir à suivre pour le débat bonsoir puceau pardon s'ils sont excuse moi plus on est des puceaux et on l'athlète dans l'éclaté toujours là et on l'a toujours tu m'aimais tu m'aimes tu m'aimes il est plus haut et on l'athlète dans l'éclaté toujours là et à la place de fleurs de lotus qui est parti aussi on a pu le sort ok ouais ben c'est pas mal ok donc on va reprendre oui rigaud alors pour reprendre le thème du débat il ya access sur rc qui te demande comment on désigne une plutôt masculin un put ou une pute simplement il n'y a pas de mais quand tu t'en prends un fil d'art tu lui dis que c'est une pute c'est un rappeur toi toi je vais t'attraper celui qui s'amuse à dire ça parce qu'elle met tout de suite sinon il va il va retourner au standard et on va prendre quelqu'un d'autre ok alors je peux bien que celui qui redit des conneries dégage maintenant je peux pas je vais pas m'emmerder longtemps ouais ouais je vais dire aux clients est alors que pensez-vous de l'amour par téléphone donc on revient à la question qui avait été posée sur lire c'est donc voilà alors plus le sort le l'amour au téléphone je suis pas très je suis pas très friands de ça en fait mais que pensez-vous de l'amour par téléphone oui c'est ce que je dis l'amour par téléphone moi j'aime pas trop j'aime bien le contact de boîte une peau sur une peau et les effets les étrances ravageuses des chaussures ouais ok ok j'ai pas fini ouais bah vas-y non mais attends je vois pas du tout le rapport avec d'accord quelques tosses ouais bah moi je trouve ça là vous l'avoir par téléphone comme le mec avant le sort du sort faut du contact non mais non mais ça suffit toi l'horreur tous les jours il faut du contact mais non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur non mais ça suffit toi l'horreur ou tout le beau, vous allez vous calmer cigarette ? non mais ça y est là ? moi j'en ai plus moi il m'en reste 10 donc je te disais, il faut du contact sinon c'est pas bon je pense que t'es d'accord avec moi Gérard moi personnellement, j'irais pas m'amuser à faire ça par téléphone nuance, Laura écoute Gérard, moi je suis encore vierge et je veux faire ma virginité avec l'homme de ma vie donc pour moi, faire l'amour par téléphone c'est quelque chose de vachement important parce que ça me permet de m'extérioriser Manu, tu m'éteins ça s'il te plaît juste en fond tu m'éteins ça s'il te plaît Manu, sérieusement, c'est chiant on peut pas bosser Manu, tu m'éteins ça Manu Manu pour ta virginité, si tu veux, je peux te prendre ce service je voulais lui dire pour la mort du téléphone non mais pour l'instant, vous allez vous taire quand Manu on arrêtera ces conneries avant que je me lève oui, tu m'arrêtes ça s'il te plaît ok, ok, ok d'accord, alors Laura ouais, donc je te disais, en fait, moi je suis encore vierge et je voudrais faire ma virginité avec l'homme de ma vie je suis l'artiste, c'est bien oh, derrière, on se calme s'il vous plaît, merci je suis fière d'être encore vierge à 19 ans et en fait, j'aime bien faire l'amour par téléphone parce que vu que je ne l'ai jamais fait toi t'es chum, toi ça me permet en fait de voir un petit peu ce que ça fait et puis donc, j'aime bien, j'aime bien je préfère parce que je t'ai dit, je ne l'ai encore jamais fait et j'attends vraiment le bon moment donc pour moi, par téléphone, pour l'instant c'est ce qui me convient le mieux ok, question attends, 5 minutes, 5 minutes oh, s'il te plaît, on se calme oui, donc il y a Rocco qui te demande est-ce qu'il peut faire l'amour par téléphone même s'il a un téléphone bleu au lieu qu'il soit rose de toute manière la couleur n'a rien à voir alors pourquoi rose ? parce que c'est un truc il y a des téléphones téléphones roses, c'est des trucs c'est des magazines qui peuvent trouver un téléphone, c'est pas un magazine dans les magazines, t'as des numéros de téléphone et tu peux faire ça par téléphone mais pourquoi Gérard, on appelait ça des téléphones roses ? eh ben, tu demanderas à ceux qui s'amusent à en faire c'est pas les téléphones rouges ou verts non, il n'y en a pas Twingo Laura, tu voulais peut-être rajouter quelque chose avant ? non, ben non, c'est pas grave Manu, c'est la dernière pourquoi tu me mets ça ? tu mets ta ça, s'il te plaît, tout de suite Twingo oui, moi ça m'est arrivé de me prendre des téléphones dans des délires sadomaso mais c'est pas ce qu'il y a de plus agréable en fait c'est vrai que la chaleur moite c'est mieux que la froideur du plastique d'accord, Giclette ? ouais ben même en par téléphone, là je suis en plein dedans et je vais t'embêter plein la tronche bon, alors Giclette, tu dégages comme ça, t'es tranquille terminé pour Giclette non, non, non, c'est terminé pour toi c'est terminé terminé sussons ouais, ouais, donc moi vu que je suis puceau et que j'ai pas eu le cran d'aller aux putes, je suis assez friand de ça d'accord c'est assez cher, en plus je me suis fait couper la lime par ma mère, quoi, 223 francs la minute ça fait un peu cher c'est excessif, oui voilà voilà je pense que aujourd'hui vous avez décidé de foutre votre merde hein, Manu et Puldar vous avez l'intention de foutre la merde combien de temps, là, jusqu'à la fin du débat ? ben je sais pas, ouais, encore une demi-heure ouais, ben encore une demi-heure, ça se voit que dimanche tu vas passer au pli en sac parce que la semaine dernière, t'as fait un boulot correct cette semaine tu me foutes la merde parce que t'as Laura, tu t'amuses à me mettre des jingles pourris, t'as l'autre qu'on lui demande quelque chose, qu'il veut rien foutre moi je le fais, hein ouais, ben attends t'as intérêt de te réveiller vite fait, toi parce que ça va pas aller longtemps, toi alors, je peux vous dire que ça ceux qui s'amusent à faire ça par téléphone c'est vraiment qu'ils ont du fric à poutre en l'air à propos de téléphone, Gérard, sur IRC on me demande si avec un portable, c'est possible euh, mais ça coûte aussi cher qu'une communication normale c'est plus cher, en plus ça dépend des... et c'est accessible ? tu peux y avoir accès, facilement, oui pourquoi pas ? ok non mais ce qui est mieux, c'est d'avoir quand c'est comme ça quand tu veux faire du temps avec ton téléphone rose, avec ton portable c'est d'avoir un forfait ouais, mais de toute manière, le forfait tu le vides facilement avec ça non mais le forfait rose ouais, le forfait rose ouais, non mais ça, je sais pas si ça existe encore Gérard, c'est Lorraine Galf je peux juste rajouter quelque chose c'est que moi, en fait on paye pas 2,23 francs la minute c'est qu'on m'appelle directement chez moi sur ma ligne privée donc si ça intéresse quelqu'un tu verras ça après en rentonne avec Fildar ça va pas rester plus tellement non, non, non il y a moyen d'aller plus tard 30 minutes pour l'instant, on continue le débat et vous gérerez ça après, hors antenne alors, que pensez-vous des sex-shop dans toute la France ? on va demander à Pulsor c'est quoi cette question ? c'est pas sur la prostitution, ça ? non, les sex-shop, c'est pas sur la prostitution les sex-shop, non, c'est pas la prostitution non, ça n'a rien à voir c'est n'importe quoi si ça te plaît pas, tu plies le bagage tu vas voir ta copine ta copine, ok on va demander à Pulsor ouais, les sex-shop, je connais pas trop ce milieu mais, bon, enfin, j'ai pas trop d'avis, en fait sur les sex-shop mais j'aime bien le rap d'accord, Laura ? bah écoute, donc moi, comme je te disais, je suis vierge mais enfin, ça m'est déjà arrivé d'aller dans ce genre d'endroit mais enfin, je me déguise un petit peu pour pas qu'on me reconnaisse parce que je suis vraiment très physique tu te rases et donc, en fait, je prends certains objets, c'est vrai et je les donne à ma mère et je regarde un peu ce que mes parents font ok, Tungo ? oui bah moi, j'ai l'occasion, oui, souvent d'y aller soit pour m'alimenter en film ou en gadget d'hiver, quoi parce que mes clients sont demandeurs j'enfonce souvent des godes aux clients enfin, tu vois, des choses comme ça des menottes, des choses en cuir des cafés de porno d'accord ok, euh, Susson ? Susson ! oui ? tu te réveilles s'il te plaît parce que là, vous commencez à dormir, ça m'énerve ok, donc moi, j'étais routier avant donc j'allais dans les sex shops pour acheter des posters pour mettre dans mon camion mais sinon, j'y allais très rarement, quoi c'est difficile, là, c'est routier hé, je vais te dire une chose que pour l'instant, t'es en train de dire n'importe quoi de dire des conneries donc je pense que pour toi, ça va être terminé non, c'est vrai non, c'est des pervers donc je peux te dire une chose que c'est beau là, t'es en train de massacrer t'es en train de massacrer le boulot routier ouais, c'est vrai donc t'as intérêt de te calmer avant que je te vire c'est génial, c'est routier ok alors, ceux qui sont pas contents vous allez dégager parce que je vais pas chercher midi à 14h maintenant ok ? ok alors, tout le monde a répondu donc, des sex shops, si ça existe il y en a un peu partout en France et c'est dommage que ça existe t'en as plein sur Paris pourquoi c'est dommage ? non, parce que je trouve que c'est dégueulasse parce que c'est dégueulasse parce que les gens ouais, mais attends t'as les mecs qui sont là et dès qu'ils te voient y passer ils insistent pour que tu rentres mais n'importe quoi ça c'est pas de la prostitution, ça Gérard non, mais ils insistent pour aller voir ce que la nana est en train de faire et les trois quarts du temps c'est pas une prostituée, elle bosse tu l'es, ta mère va te faire chanter, toi, espèce de connard ta mère, c'est désordre putain tu vas te faire mettre la gueule, toi, quand je parle ou sinon tu gerbes, ok ? eh, debout, Sandi, debout, espèce de fainéant, toi viens avec l'où ? allez hop, dégage-moi celui-là pourquoi t'es tout mou, toi ? t'as rien fait, t'as rien fait ? c'est que... donc, euh... alors, on va... allez, paumez, Gérard, c'est plus bien non, parce qu'il y en a qui s'amusent à dire des conneries je sens que le débat, il va être terminé vite fait Gérard, on est... pourquoi t'es tout mou, putain ? depuis minuit, il se passe rien ? on est presque mille sur l'IRC, là oh la la, la catastrophe ! on en a perdu énormément ouais la catastrophe bah ouais, mais euh... tant pis, hein je veux dire, je suis désolé, on peut plus faire de débats, ça sert à rien, c'est tout eh bah, dans ce cas-là, on arrête, je pose même pas la dixième question, et puis c'est tout si, regarde, j'ai un petit sondage, peut-être, ça va t'aider bah oui donc, à la question : qu'aimez-vous chez une prostituée ? 58% des gens aiment bien 25% des gens aiment beaucoup et 100% aiment le balcon avec les drapeaux, fun radio, je comprends pas, non tu vois, c'est la dernière fois que tu t'amuses à balancer des conneries comme ça parce que sinon, je vais t'éclater ta gueule à bout c'est pas moi, c'est toi qui balance des saloperies mais non ! alors, je te préviens, c'est la dernière fois la semaine prochaine, tu vas dégager et je te le dis tout de suite la semaine prochaine, je veux pas de toi Maitre Olivier alors, y a-t-il autant de prostituées et d'homo dans les autres pays que la France ? on va demander un plus de sort pour terminer le débat euh... oui, bah, la France n'a pas le... comment dirais-je... le truc, comment... je trouve pas le mot l'ethnopole voilà, bah... en Allemagne, y avait le Titi récemment l'ethnopole... la France n'a pas l'ethnopole et les autres pays, pourquoi pas ? Manu, c'est la dernière fois que tu dis des conneries aussi, pourquoi ? c'est que le pote a gégé et il va en camion, il l'amène en Allemagne, alors un peu de respect, quand même alors, Laura ? ouais, bah, tu sais, moi, au départ, je suis originaire des Philippines et en fait, on m'a demandé... enfin, je me suis fait rapatrier en France parce qu'au début, on voulait me mettre sur le trottoir donc j'ai réussi à m'en sortir malgré tout de toute manière, la question, c'est... y a-t-il autant de prostituées et d'homo ? dans les autres pays que la France ? non, je pense pas je te parle des Philippines je pense pas au Philippines... Pildar, tu fermes ta gueule et c'est tout ouais, je t'écoute, Laura il faudrait que Pildar, il la ferme un peu, ça m'énerve non, mais on t'écoute, vas-y ouais, donc je te dis, aux Philippines, ça cartonne, mais quelque chose de grave parce que t'as tout, t'as même des gosses donc t'as des gosses, t'as des homos, t'as des vieilles, t'as des grosses t'as rien, t'as tout, quoi mais ça, de toute manière, faut dire que dans ces pays-là, c'est... en fin de compte, c'est des personnes qui viennent les chercher qui les pensent à se prostituer c'est des pays sous-développés, là-bas donc en fait, pour eux, y a que le cul c'est parce que c'est des pays pauvres, en fait voilà, c'est ça y a une question, IRC, Rigaud, non ? non, y a juste Arnett qui demande à Pildar de le rappeler non, non, c'est plus la peine le débat, il va être terminé, alors c'est pas la peine t'as tes mots alors, Twingo déjà, je vois pas le rapport avec les homos, excuse-moi mais y a aucun rapport avec les homos et les prostituées donc tu pourrais reformuler ta question ouais alors, y a-t-il autant de prostituées et d'homos dans les autres pays que la France ? oui, ben non, je te dis qu'il y a aucun rapport avec les homos, quoi ça me déplie ouais, on parle pas des homos, on parle de la prostitution, là voilà tu peux être homo sans être prostituée voilà donc, c'est ta réponse ? non, non, moi je te dis que c'est pareil, quoi y en a partout, hein et à ton avis, Gérard dans les pays, y a le plus de prostituées ? euh, c'est dans les pays étrangers, comme... mais ça, on en a parlé avec Laura tout à l'heure on l'a dit, c'est dans... c'est les... c'est les adultes qui vont chercher les mômes pour les prost... pour les mettre à la prostitution connard, on va te faire péter l'anus, du con ouais, ouais, ça c'est vrai aussi moi, dans la place Fildard, tu vas essayer de me choper tout de suite celui-là ? == Le débat sur les catastrophes naturelles == === Contexte === === Les personnages === === Transcription === Et pas d'insultes de Gérard ! Et voilà donc bonsoir à tous, 0h41 donc vous pouvez toujours nous appeler pour les débats du jeudi donc au 0800 308 5000 et 0870 5000 toujours l'IRC www.funradio.fr Oui tout à fait 1782,6 connectés quand même C'est bien Et donc n'essayez pas d'appeler sur le Minitel, il ne fonctionne pas Donc on va remercier Tony de l'IRC pour ce que j'avais demandé à Rigaud qui a été fait Donc je remercie Tony en passant Et moi Gérard, s'il te plaît, avant de commencer j'ai une dédicace à faire, dédicace à Sandy Et toi la grosse, debout espèce de peignasse là ! Tu vois pas que les autres s'amusent là ? Allez debout ! Viens avec nous ! C'est bon Magui, c'est bon ! C'est bon on va commencer, on va accueillir Gemma Lopez, 21 ans de Valence, 98.8 ! Ouais ! Bourdon, 20 ans Paris, 101.9 ! Ouais mais restez du soir Gérard ! Bonsoir ! Bonsoir ! Bonsoir ! Suisse la moi, 23 ans, Damien, on écoute Fun Radio, 91.8 ! Quand tu veux Gérard ! Astico, tu commences pas s'il te plaît, merci ! Astico, 18 ans, Pontiby, on écoute Fun Radio sur 94.1 ! Bonsoir Gérard ! Prout, 25 ans, Toulouse, 105.9 ! Bonsoir Gérard ! Et Tekel, d'Arcachon, 22 ans, on écoute Fun Radio sur 92... Salut Gégé ! Sur 92, voilà, terminé ! Donc on attaque sur les catastrophes naturelles Alors, la première question : comment se déclenche une tempête, on va demander à Astico Tant tu peux passer à quelqu'un d'autre parce que là je suis en train de mettre mon tampon et puis... D'accord, alors si ça commence comme ça, ça va pas aller, alors on va prendre Suisse moi là ! Oui, comment ça commence une tempête ? Ouais ! Comment se déclenche une tempête ? Je sais pas, t'appuies sur un interrupteur, ou je sais pas... Euh non ! Qui c'est qui veut répondre ? C'est Bourdon, c'est Bourdon ! Ouais bah vas-y ! Alors je fais des études de météorologie, et alors il faut savoir qu'il y a des nuages, alors t'as des cumulonimbus et des cumulohannus, ok, c'est deux types de nuages bien différents, et quand t'as le cumulopinus qui rentre dans le cumulohannus, ça fait une différence de température et ça fait un orage forcément, même une tempête ! D'accord, mais tu... Oh, Bourdon ! Oui ? Tu parles bien devant ton micro, tu t'éloignes pas quand tu parles, ok ? Ouais mais ça c'est à cause des elfes ! J'ai mal aux fesses ! Ouais bah en fait les tempêtes c'est à cause des courants d'air quoi, parce que parfois ça fait du vent, et quand il y a beaucoup de vent comme ça, et bah ça fait beaucoup de vent et ça peut faire des tempêtes quoi. D'accord ! Et parfois ça... Ouais mais dans ces cas-là tu fermes la fenêtre et puis c'est bon ! Ouais mais il faut le dire aux gens qu'ils ferment la fenêtre, mais si jamais il y a beaucoup de courants d'air dans le monde et ça fait des tempêtes quoi... Bah fermez les fenêtres alors, fermez les fenêtres ! Ouais il faut fermer les fenêtres en fait quoi ! Un sticot, un sticot c'est le top ! Ça peut être dangereux quoi ! Un sticot ! Ok donc j'ai fini de le mettre, donc la question c'est comment se déclenche une tempête c'est ça ? Ouais ! Parce que je ne vais pas m'amuser à les répéter alors vous écoutez bien quand je pose les questions hein ! D'accord Gérard ! Ouais bah je l'ai bien écouté hein la preuve ! Alors vas-y ! Alors bah une tempête c'est très simple, c'est dû à une différence de température, c'est-à-dire que quand il fait chaud chez toi tu ouvres la fenêtre pour que l'air rentre, et quand il fait froid tu la refermes, et quand il fait vraiment très très chaud tu ouvres les deux et là ça fait un courant d'air, et là il y a un choc thermique et la tempête arrive. Good ! Moi je crois que c'est par rapport à l'atmosphère quoi ! Eh celui qui s'amuse à faire des conneries derrière va se calmer parce qu'il va pas rester longtemps celui-là ! Ouais ! Alors Prout pour continuer ? Bah moi je pense que c'est l'atmosphère avec le vent tout ça quoi ! Bah voilà quoi sinon moi je sais pas trop donc je réponds ce que je sais quoi ! D'accord ! T'es quelle ? Bah moi je pense qu'au contraire une tempête est déclenchée par une voluote ! Oh tu te calmes derrière s'il te plaît merci ! Si tu m'as parlé vous avez déjà parlé donc c'est bon hein ! Eh j'ai mal au peintre, j'ai mal au peintre, j'ai mal au peintre ! Bourdon là vous allez vous calmer s'il vous plaît hein ! Au contraire c'est déclenché par une violente perturbation atmosphérique et le vent peut souffler à... ce que je veux savoir c'est que le vent il peut souffler de 1802 km/h ! Ok ! Moi j'ai pu voir à peu près sur un dictionnaire donc c'est une violente perturbation atmosphérique et le vent peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... Et le vent il peut souffler à... == Le débat sur les moyens de communication == === Contexte === === Les personnages === === Transcription === Et voilà, toujours la suite du débat de Gérard, 1h54 et on vient s'écouter, au début c'était les mouettes de Boulogne avec la chaise dans les chaussettes et là c'était... Je sais pas, c'est toi qui avais le titre Gérard ? Bah moi j'ai la mouette de Boulogne avec la chaise dans les chaussettes et là j'ai pas le deuxième. Mais ça c'est la suite, c'est les colons de Neuilly avec ce que tu veux autour... Avec du caca sur les ailes qui pue. Ok, donc vous pouvez toujours nous joindre au 0800 75 000 et 0800 308 5000, toujours Rigo sur l'IRC www.funradio. On va passer des petits bonjours, aujourd'hui assez, Compi Music, Big Up, Super Ouragan, Davy One, Jarvis Cooker, Torkane, The We, Oxide, Junkhead et compagnie. Et on va saluer aussi les gens de Belgique. Et Coton-Tige ! Il y en a un qui s'appelle Coton-Tige. Et on va saluer aussi quand même les gens de Belgique. Et Yanti ! Yanti, pardon. Qui nous écoutent. Donc on va attaquer le deuxième débat, les moyens de communication. Donc on va attendre que M. Fildar se réveille. C'est arrivé Gérard ! Parce que là pour l'instant j'ai pas de nom à vous annoncer. Donc si ça y est c'est fait. Ok, alors on va accueillir Karambar, 23 ans d'Angoulême. Bonsoir Paris, bonsoir Christophe Coutant. Comment ? Non, t'énerves pas Gérard. Non mais quand on dit bonsoir, tu dis bonsoir. D'accord ? Bonsoir, oui. Alors Bénur, 27 ans Paris, on écoute... Non, 21 ans, pas 27, excuse-moi, 21 ans. Oui, bonsoir Gégé, bonsoir Adé, bonsoir la France. Bonsoir. Bonsoir. On appelle un accueil... Pustule ! Pustule ! Pustule, 27 ans d'Onis, où qu'on peut écouter Fun Radio sur 107.2. Bonsoir Gérard, bonsoir les garçons. Bonsoir Pustule. Bonsoir. Bonsoir Adé. Je parie qu'elle est dans le coup elle aussi. Ah ouais ? Tourniquet ! Tourniquet, 26 ans Damien. Oui, bonsoir. Eh oh ! Ah merde, c'est de Tourniquet Gérard. Non, non, non. J'ai un Bourriquet et un Tourniquet. C'est Bourriquet, moi. Non, mais attends, pour l'instant, je ne t'ai pas appelé. Alors, on dit bonsoir Tourniquet. Bonsoir Tourniquet. Bonsoir Gérard. Bonsoir. Bonsoir. Bourriquet, maintenant. Oui, bonsoir Gérard, bonsoir... 19 ans d'Orléans. Salut, bonsoir Fildard, bonsoir Ego. Salut Bourriquet. Bonsoir à tous. Bonsoir Bourriquet. Oh, ça y est, ça y est. Bonsoir à Gaëlle, qui nous écoute aussi chez elle. Bonsoir à Gélie, s'il vous plaît. Comment ? Qui ? Gaëlle. Non, mais attends, c'est bien de dire des conneries comme ça. Ah, ok. Proute apparente de Versailles. Poutre. Salut Gérard, c'est dommage que vous ne m'ayez pas appelé le débat précédent. J'avais des choses marrantes, là, ça va être tourette, je vous le dis direct. C'est bon, tu peux te lâcher. C'est reconnu. Non, mais ça y est, vous vous calmez, merci. On connaît les voix. Non, c'est moi qui commande, pour l'instant, ce n'est pas vous. Non, c'est bon. Ok, alors, le débat, c'est moyen de communiquer. Donc, quel moyen de communication possédez-vous ? On va demander à Carmbar. Les hormones. Hein ? Les hormones, les papillons, tout ça, voilà. Ah, ça va pour toi, c'est un moyen de communication, les hormones ? Oui, avec les pets que je lâche, des fois, ça fait fuir mes copains et tout, et ils comprennent tout de suite que j'essaie de communiquer. D'accord. C'est quand tu veux qu'ils s'en aillent de chez toi, c'est ça ? Voilà. Bien sûr. Moi, j'ai la bouche, comme tout le monde, pour communiquer. D'accord. J'ai aussi un portable. D'ailleurs, j'ai ton numéro. Ouais. Benioir, tu fais gaffe, parce que tout à l'heure, tu as... C'est pas moi, c'est pas moi, c'est pas moi. C'est qui qui vient de dire qu'il y avait mon numéro ? Volo. Hein ? Jean-Luc. Jean-Luc ! Jean-Luc ! Jean-Luc ! Pussule. Oui ? Moi, je possède des phéromones, qui sont des hormones sexuelles, voilà. Et aussi un téléphone. Pas de marque. Comme moi, cochonne. Ton Ike ? Moi, j'ai un portable. Ouais, c'est tout ? Ouais, c'est tout, mais c'est déjà pas mal, tu sais. Ouais, bon, Ike ? Moi, j'ai un portable, j'ai un tatou. J'ai une Sibi. Hein ? Et voilà, j'ai du papier, du stylo, j'ai tout, quoi. D'accord. Question. Je vais laisser un petit sondage, vite fait. Par le biais de quel appareil préférez-vous communiquer ? 96% par la bite, 15% par la langue, 45% par portable, 25% par téléphone, 28% par Game Boy et les autres consoles de jeux vidéo. Et pour toute l'apparente ? Ouais, moi, j'ai un PC. C'est Jean Voyageur qui fait caca sur les balcons. Non, attends, je vois pas. Regarde bien, regarde bien. Regarde bien sur ta terrasse. Ouais, bah, fais gaffe, toi, parce que tu pourras peut-être dégager avant la fin du débat. C'est bien possible. On dégage jamais, lui. Ouais, non, mais c'est ce qu'on verra. Parce que c'est pas lui qui commande, ça sera moi. Donc, qu'est-ce que je voulais dire d'autre ? Quel moyen de communication posséder ? Moi, j'ai simplement un portable. Qu'est-ce que t'as, toi, Gérard ? Moi, j'ai simplement un tatou. Ça me suffit. Largement. Non, t'as un portable. Un tatou. Les hémorroïdes. Le portable et le tatou, voilà. C'est tout. Et quand même, Gérard, tous les gens de l'IRC reconnaissent qu'ils utilisent Internet pour communiquer. Ouais, mais ça, justement... Internet. Voilà. Donc, pensez-vous que l'Internet a beaucoup changé de nos jours ? On va demander à 40 bars. Comme dit Tony, pourquoi moi ? Alors, 40 bars... Ouais, mais ouais, Internet, bien sûr que ça m'a changé ma vie. Bien sûr que je fais mes courses par Internet. Plein de trucs par Internet, bien sûr, c'est génial. Internet par vous, Internet. Merci, Internet. Non, mais attends, parce que tu vois, là, ce que tu dis, de faire ses courses par Internet... Moi, je vais te dire une chose, hier, ils m'ont appelé pour ça, et justement, j'avais vu le reportage là-dessus, comme quoi tu pouvais acheter des vaches et tout ça par le site, par le moyen de l'Internet. Attends, toi, qui c'est qui vient de sortir ça ? Je sais pas, on va chercher. C'est bon, on gère. Continue, continue. Bénure. Non, mais continue, ce que t'es en train de dire, Gégésie, sur ce que t'avais à la télé. Non, parce que sur... Parce qu'on parle de l'Internet, donc c'est vrai que tu peux acheter beaucoup de choses. Qu'est-ce que tu peux acheter, par exemple, sur Internet ? Ben, tu peux faire tes courses, tu peux acheter des vaches, des bagnoles, un appartement, tout, tout ce que tu peux trouver. Avant tout, carrément ? Ben, ce que t'as besoin dessus. D'accord, donc si tu veux, tu passes une annonce, tu tapotes, là, ouais, je cherche une vache, des années 80, d'occasion. Même des CD, je pense que tu peux trouver ça par le bien de l'Internet, maintenant. Ah, carrément. Et puis, l'Edric et Martin ? Bénure. C'est Bénure, et je voulais dire que, comme on dit, ouais, ça a bien changé. C'était plus que c'était, à l'époque, au bon vieux temps, on faisait des Pac-Man, maintenant, c'est Internet, c'est autre chose. Ben non, mais pour toi, est-ce que... Et je pense que toi, t'en es resté quand même un peu à l'époque du Pac-Man, en général, quand même, non ? N'importe quoi, toi. Quand même, quand même. Pistule. Ouais, moi, j'ai pas Internet, je suis pas in, par contre, j'ai une console ségale. Et là, c'est pour le Larsen. Merci pour le son. Tournique. Ouais, ben, moi, j'ai Internet, et depuis le temps que je l'ai, ben, je bouge plus de chez moi. Et tu peux préciser ? Ben oui, je fais mes courses, au lieu d'aller au supermarché, je vais sur Internet. Je veux des cigarettes, et ben, je vais sur Internet. Je veux tout ce que je veux, je le prends sur Internet, et je bouge plus de chez moi. Une bille. Tu prends ton pied sur Internet, aussi, non ? Euh, ça dépend avec qui, ouais. En général, ouais, parce que je loue les services... Tu prends ton pied sur Internet ? De Rigaud, de Rigaud. Tu prends ton... Oh là ! Tu prends ton pied ? Oh, Rigaud, il s'en fait pas mal, hein, le Rigaud, là. Alors, euh, ça y est, bon, bourriqué. Ça crache cher. Oh ! On se calme. On reste, on reste tranquille. Oh ! On ne touche pas que des boutons, hein. Tu ne caches pas derrière ton écran. Bourriqué. Oui, bonsoir à tous. Oui, donc, c'est vrai, ça a bien changé, l'Internet. Moi, je me souviens encore du temps où ça s'appelait Intermarché. J'ai compliqué de faire mes courses, et puis, j'ai dragué la caissière. Bourriqué. Bourriqué. Attendez, hé, bourriqué. Ouais. Ouais. Ouais. T'as bien compris le sens de la question ? Ah, bah, ouais, aussi bien que toi. Non, mais je ne crois pas, hein. Ok. T'avais qu'à écouter ce que j'ai dit, déjà, tout à l'heure. D'accord. Prout apparente. Oh ! Putre ! Bon, alors, qui c'est qui a un portable et qui s'amuse avec de la flotte, là, depuis tout à l'heure ? Ouais, parce que ça me donne envie de pisser. C'est moi, je suis dans ma main, je veux faire un jardin secret. Hé, ça commence à bien faire, vos conneries, maintenant. Je vais venir me masser le dos, là. Ah, il y en a un qui a coupé. C'est pas moi. Manu. Donc, prout apparente. Je kiffe aussi les boom blasters qui ont... Quand tu baisses les basses, c'est un son pourri. Et quand tu montes, c'est carrément une discothèque. N'importe quoi. Oh, là, là, il y a des portes. Hé, qui c'est ? Oh, là, là, on t'appelle de partout, là. Oh, Manu ! C'est pas moi qui ai pris les auditeurs, c'est Fildar. Moi, je ne comprends rien à ce qui se passe. Pour en revenir au débat et à Internet, il y a Delight qui dit qu'Internet, ça a bien changé. Il y a même des blaireaux comme toi qui savent ce que c'est. Si je suis un blaireau, ben lui, pourquoi il s'amuse à tapoter pour avoir des notes astronomiques ? Parce qu'il n'y a pas que l'Internet qui fonctionne aussi de nos jours, qui peut changer. Il y a aussi le bien du Minitel, mais ça coûte plus cher que l'Internet, je crois. Donc, le Minitel, ça coûte cher et l'Internet, c'est pareil, ça doit coûter aussi cher parce que déjà, il faut que tu t'abannes là-dessus. C'est faux. Non ? C'est faux. Non, ça m'étonnerait. C'est faux. Ça m'étonnerait, moi, je te dis. T'as cherché dans le dico si ça voulait dire Internet ou pas ? Non. Pourquoi ? Non, parce que j'ai pas pensé à regarder et Internet, ça veut dire ce que ça veut dire. Et toi, celui qui me dit abrège, il va se calmer. Fildard, tu as commencé par te calmer parce que tu m'as trouvé des auditeurs qui sont nazes. Oui, c'est vrai. Attends, tu crois que c'est facile en 5 minutes de trouver des gens potables ? Gérard, d'ailleurs, il y a Bourriquet qui est parti et on accueille Je Pus de l'Arrêt. Oui, bonsoir. C'est l'invité mystère. Donc, c'est Je Pus de l'Arrêt à la place de Bourriquet. Appelle l'invité mystère. Bonsoir. Gérard, bonsoir à tous. Salut, à Tulipe. Salut. Donc, alors, je te répète la question. D'accord. Pensez-vous que l'Internet a changé beaucoup de nos jours ? Ouais, c'est vrai que ça a pas mal. Ça a pas mal. Oh, mais c'est pas un bordel, là ! Manu, tu vas te prendre une gaufre, hein ! À propos d'Internet, il y a Ouragan sur l'IRC qui dit que le meilleur moyen de communiquer maintenant, c'est le site gg-mois-le-cul.com. N'importe quoi. N'importe quoi, ce con. Alors, Je Pus de l'Arrêt, donc, pour toi... Ouais, ouais, ça a pas mal évolué. J'ai déjà cliqué sur Mulo hier soir. J'ai été d'ailleurs sur ton site de www.tantous-de-surenne.fr. Alors, Je Pus de l'Arrêt, tu dégages à ton mère, tu dégages. Voilà, comme ça, ça va être vite fait, Je Pus de l'Arrêt. C'est un nouveau, celui-là. Je me disais bien que tu Pus de l'Arrêt. C'est un nouveau, celui-là. C'est pas un habitué. Merci pour les Larsen, encore ! Eh ben, c'est pas la cateaube ! Possédez-vous un portable, un tatou pour votre travail ? On va demander à 40 barres. Non, ni l'un ni l'autre, et j'aimerais bien que tu m'en offres un jour. Non, ben, ça, tu vois, tu fais comme tu viens de faire. Tu demandes à ta pelle quand il y a la possibilité d'en gagner. Tu téléphones, tu fais 0875 000 et... Non, ben, tu n'as qu'à regarder Fun TV, il y en a gagné cette semaine. Voilà. Donc, pour toi... Voilà, cateaube ! Putain, il commence à me penser les couilles, ce espèce de petit con, là. C'est au standard, Ben Hur. Eh, connard ! Alors, Ben Hur. Voilà, cateaube ! C'est le gamin qui a l'habitué, là. Ben Hur ! Oui, je suis là. Non, mais il a raison, le gamin. Ben Hur, tu réponds correctement, tu dégages ! Ouais, ben, je voulais te dire que j'ai un portable, et si tu veux le numéro pour marceler, là, ce quart, tu peux toujours rêver. Ben, toi aussi, tu peux rêver. Mais je t'ai redemandé. Non, ben, alors, tant mieux. Mais tu peux me le filer, quand même. Non, ben, là, tu iras te faire sodomiser. Gérard, j'ai calmé, je pue de l'arrêt. Non, non, non, je t'ai dit de le dégager. Non, mais moi, je veux plus le savoir, moi. Quand je te dis de virer la personne, tu la vires. C'est pas la peine de le calmer, tu le vires. C'est tout, c'est tout. Ça va vite avec moi. Il est propre, il sent bon de l'arrêt, maintenant. Alors, Pissul. Ouais, moi, j'ai ni tatoune ni portable, et je veux bien le numéro de portable de Ben Hur. 0-1-42-3-1, là. Euh, hé, c'est... Oh ! 92-4-6-9. 92, c'est bien. Non, c'est bon, là, Manu. Tu peux me gérer, là ? Il y en a deux, là, qui sont en train de s'échanger des numéros. Oh, mince. À l'antenne, merde, Manu. C'est nul. C'est naze. 0-1-43. Oh, putain. Je suis là, hein. Euh, Tourniquet. Oui. Euh, oui, ben, moi, je m'en sers énormément parce qu'en fait, je suis commerciale. Et, euh, en fait, donc, je vends des portables. Ouais. Et je m'en sers énormément parce que j'ai des clés... J'ai de la clientèle qui m'appelle régulièrement pour, justement, acheter des portables. Bon, attends, parce que là, ça commence... C'est lui qui est dans sa baignoire, là. C'est qui, là, qui est dans sa baignoire ? C'est moi, c'est moi. C'est qui ? Moi, moi, c'est Poutre Apparente. Ah, mais attends, je voulais dire une chose, que peut-être que Poutre Apparente, il est dans sa baignoire, mais lui, au moins, il se lave, quoi. Attends, moi, je t'en viens, d'accord ? C'est qui ? C'était Pépito. Eh, putain, mais, eh. Manu. Manu, je sais pas par où il passe, je sais pas ce que Fildar a sélectionné. J'ai la proute. Proute Apparente. Proute Apparente qui répond à la question et je sens qu'on va poser une question, on va mettre un disque et on va changer d'auditeur. Ah, carrément. À la place de, je sais plus, je suis plus de l'arrêt, on accueille Viens dans mon trou. Non, mais t'as fait c'est quoi ? Bonsoir. Bonsoir. Bonsoir. Bonsoir. Bonsoir à tous. Salut. Bonsoir. Bonsoir. Bonsoir à tous les auditeurs de fun. Répète-la, s'il te plaît. Proute Apparente. Répète la question. Non, non, attends, tu me fous de ma gueule ou quoi ? Pour calmer le débat, Manu, sur IRC, il y a Arnaud qui te demande de le rappeler. Non, non. Dès que j'ai une ligne. Ouais, dès que tu viens, le nouveau qui vient d'arriver. Alors, Proute Apparente. Ouais, je te copie, c'est pas un habitué, lui. Ah, ouais, ouais. Non, mais répète-la moi parce que j'étais au standard, s'il te plaît, parce que j'ai du Larsen, c'est vrai en plus. Possédez-vous un portable ou un tatou pour votre travail ? Non, non, non, non. Je travaille pas, je suis au chômage. D'accord. J'ai des émergements, en fait. Eh, Viens dans mon trou. Faut pas trop le dire. Ouais, ouais, ouais. Faut pas trop le dire parce que je suis dans la balette. Pas tous en même temps, s'il vous plaît. Pas tous en même temps. Allô ? Pas tous en même temps, merci. Ouais, Viens dans mon trou. Ouais, moi, j'ai un portable, j'ai un tatou et j'ai deux pots de yaourt avec une ficelle. D'accord. Celui qui s'amuse à faire du mort s'arrête. Pourtant, c'est le débat. Attends. Celui qui fait du mort s'arrête. Attends, j'essaye de te rappeler, là. Grosse merde. Ta femme, elle pue, là. Bon, alors... Ça y est, ça y est. Le disque. Le disque. Le disque, ouais. Ben, pose la question, moi, Gérard. Non, non, mais de toute manière, on va changer, parce que là, ça va pas être... Tu peux poser... On va changer tout le monde. Tu peux poser la question pour les futurs auditeurs qui écoutent déjà la question de chez eux. Alors, pensez-vous que le phoque est un meilleur moyen de communication que le mort, c'est ça ? Ah, ben, tu vois, on y revient. Et on se retrouve juste après. Donc, vous pouvez toujours nous appeler au 0800 308 5000 et 0800 75 000. Et toujours, il y a Rigo qui vous attend sur l'IRC www.fanradio. Et on s'écoute... Un petit cadeau. C'est un petit remix. Donc, bonsoir à Rigo. Et voilà, donc, vous pouvez toujours nous appeler au 0... Qui c'est qui s'amuse avec ça, là, depuis tout à l'heure ? Manu, Manu ! Y a personne honneur au standard ? Si. C'est bizarre, parce que là, ça s'arrête, là, comme par hasard, Manu. Donc, qui c'est qui répond déjà, là ? Je dis, il était pour le remix. Alors, si t'es pas content, tu restes chez toi, toi. C'est Jean-Luc. Jean-Luc ! Alors, tu dégages, tu peux rester chez toi, ça me perd des vacances. Donc, vous pouvez toujours nous appeler au 0800-308-5000 et 0870-5000 et toujours www.funradio.fr ce .fr funradio sur l'IRC. Donc, Rigo, vous êtes... Roger ! Vous fermez vos gueules, là, ou quoi, quand on parle ? Gérard, à propos de ta question, il y a quelqu'un qui répondait tout à l'heure à ta question. Tu vas la reposer, peut-être, pour les gens qui n'ont pas entendu. Euh... Laquelle ? La dernière. Que pensez-vous que le FOC est un meilleur moyen de communication que le... le morse ? Celui qui s'amuse à ça, comment s'amuse... Justement, il y a un panel sur l'IRC qui me demande la différence entre l'invité mystère et un FOC. Il me dit que... Il me dit qu'il y en a un qui a des moustaches qui sent le poisson et qui est énorme et l'autre, c'est un mammifère marin. Non, ça, c'est les auditeurs, Gérard. Bon, Manu, t'essaies de me trouver qui c'est qui s'amuse à ça. Ça y est, j'ai trouvé. Je vais aller le kiquer en live, tout à l'heure. Il y a l'un des deux qui s'est jonglé avec un ballon, aussi. Alors, j'avais oublié. J'ai un petit truc à vous dire. Sur la première question, quel moyen d'économisation procédez-vous ? Donc, il y a 40% des Français qui n'en veulent pas chez eux. 20% de Français ne savent pas ce que c'est. 18% des Français n'ont pas compris la question. Et 15% des Français aiment le commus clinique. Alors, ça, je vois pas du tout ce que c'est. Le commus clinique. Le commus clinique. Le commus clinique. Alors, on récupère 40 barres. Ouais, bonsoir. Ouais, bonsoir. Moros. Bonsoir, monsieur. Non, non, c'est... Vous fermez vos gueules ! Et pas tous en même temps, s'il vous plaît. Merci. Ouros, il s'appelle. Ouais, c'est Ouros. Ouais. C'est Yougoslav. Moros. Moros. Oui, je suis là, bonsoir. Bonsoir. C'est un nom de pédé, ça. Tomate. Eh, je te permets pas. Oh, mais parlez plus fort devant les combinés quand je vous... Parlez pas tous en même temps, surtout, parce qu'on n'y comprend rien, sinon. Alors, Tomate. Salut, Gérard. Salut. Luciole. Salut, Gérard. Salut. Blanche, suis-moi la... La caverne. La caverne. Salut, Gérard. Salut. Et je pue la pisse. Ouais, je sais pas, ça, c'est moi. Non, c'est... Non, c'est toi. Je ne sais pas lire, pardon. Ouais, ouais. T'as compris, y'a que moi qui ai un nom normal, quoi. Ouais. À part des noms des autres qui prennent des noms de... Non, non. Vous êtes habitués, vous prenez vos noms, merde. Non, mais attends, Gérard. Ouais, je te copie. Roger. Ouais, bref, go, t'as taillé. Oh, tu t'es fait un peu, là, toi ! Bac de verre gras. Bac de verre gras à 300 mètres. S'il vous plaît, s'il vous plaît, vous gérez un peu, là. Manu, tu gères un petit peu, là. Pose ta... Pose ta question et on enchaîne, quoi. Eh, mais merde, tu vas... Je vais pas la répéter 50 fois, tu vas calmer tes... Demande aux gens, à part un, alors. Alors, 40 barres. Oui, au début, ouais, avant que je le quittais. D'accord. Tu sais ce qu'il aime bien ? Qu'est-ce que c'est que ce salope, là ? Tu sais ce qu'il aime bien ? Je te jure, je sais pas. Il faut qu'il y ait dans le porte-monnaie. Tu sais ce qu'il aime bien ? Non. Non, non, non, non, ça, non. 40 barres. Oui, tu peux répéter, parce qu'il y a quelque chose qu'il n'a pas entendu. Oh, non, non, non, mais vous commencez à me les casser à 2h14, là, hein ? Alors, pensez-vous que l'époque est un meilleur moyen de communication que le morse ? Ben, ouais. Et celui qui s'est mis à ça, arrête, eux ! Manu ! Je vois pas la lumière verte. Bon, Gérard, pour revenir au débat, il y a D-Light qui dit qu'on utilise le morse parce que le phoque est en voie de disparition et qu'on n'a plus le droit de l'utiliser. Moi, je pense, ouais. Moi, enfin... Ouais, je suis d'accord, ouais. 40 barres, toi ? Je vais dire ouais, encore. D'accord, ben, toi, 40 barres, ça va être... J'ai un manque d'inspiration, j'ai ce soir, je sais pas ce qu'il... Ouais, ben, dans ces cas-là, si t'es malade, tu dégages. Mais non, ça va bien. T'as qu'à te liser, comme moi, drogue-toi. Ouroz ! Ouais, c'est Ouroz. Ben, je voulais dire, tu parles des phoques, je crois qu'on devrait appeler Brigitte Bardot, y'a que ça à faire, parce que les phoques, comme on l'a déjà dit, c'est une espèce protégée. Et je pense que l'armée, parce que c'est l'armée qui utilise le morse et le phoque, devrait pas se servir de ce genre de choses et je voulais savoir si toi, c'est vrai que t'étais spécialiste non pas en phoque, mais en phoque. Non, pas du tout. D'accord. Une question IRC. Oui, sur IRC, y'a Superouragan qui m'explique qu'on utilise le morse parce que le TKL est trop lourd à porter. N'importe quoi, lui. Euh, Tomate. Ben, il est monté sur moi ! Fildar, fais gaffe à ce... Mais c'est pas moi ! Fais gaffe, Fildar. Fais gaffe à toi, Fildar. Fildar, la DAT, merde. Tomate ! Je sais pas, parce qu'il dit que c'est ses amis qu'à lui, il faut pas que je t'effraie avec ses amis, tout part. Au début, c'est... Eh, ça commence à bien faire ! Qu'est-ce qu'il aime bien ? Non ! J'ai coupé. Tomate ! Tomate, Tomate ! Voilà, je sens que la conclusion va se faire vite. Non, non, Tomate, Tomate. Gérard, parle bien dans ton micro, aussi. Tomate ! Oui, je te réponds, regarde. On utilise le morse parce qu'ils arrivent mieux à voler que les pigeons voyageurs. Non, mais ça, je vois... Non, mais le morse, c'était un moyen de communication avant. Oui, mais le pigeon voyageur aussi, les morses arrivent moins bien à voler que les pigeons, donc... Ouais, mais le morse, il est quand même long à... Il était quand même long à... à envoyer, hein. Ouais, il nage vite. Oh, je doute ! Non ? Luciole ! Ouais, ben, en fait, le phoque comme le morse c'est quand même assez dépassé comme moyen de communication, maintenant. Ben, maintenant, ça n'existe plus aussi. Non ? Je crois que ça n'existe plus. Si, si, ça existe encore dans certaines postes. Hum, hum. Et, non, mais maintenant, il y a des moyens beaucoup plus adaptés comme le courrier, par exemple. C'est toi qui mets les tampons ? Ouais. Bon, ça y est... C'est une technique et je les mets avec les dents. Blanche, suis-moi la caverne ! Ouais, ouais, ouais. Moi, je voulais dire que j'étais pédé comme un phoque et il y avait ma grosse bite qui s'amorce. Oh, là, là, là, là. Oh, ça, c'est pas mal, ça. Ouais. Et, je sais... Ça peut faire du genre au casse, ça. Ben, il s'est pour moi fêté ! Je ne sais pas lire ! Ben, ouais, euh... Il s'est pour moi fêté ! Non, le morse, je ne le maîtrise pas trop. Gérard ? Ouais ? Blanche, suis-moi la caverne, je veux savoir si... Je veux savoir si t'es... Ah, j'entends pas ce que tu parles. Toi, toi, t'es un rigolo, toi. Vas-y, vas-y. Justement, j'avais déjà utilisé les Toki Whiskey. Les Toki Walkie ? Les Toki Whiskey. Zéro, allez, viens-le, reprends. Ça, c'est raide, ça. Oh, mais vous fermez vos gueules un peu, maintenant ! On est en net, merde. Je ne sais pas lire. Ben, il montait sur moi. Ouais, ouais, non, non, non. Le morse, je t'ai dit que je ne maîtrisais pas. Je préférais le... Enfin, c'est tout, ouais, comme tu disais, là, je... Mais, puis l'art ! Mais, il me faut rire, les auditeurs, Gérard, j'y peux rien. Fais gaffe, parce que tu as pris une taille de commande de la télé, on en a besoin. Bon, eh, Manu ! Je te préviens ! Putain, c'est bon, c'est le connard, là, au deuxième débat. Parce que c'est pas possible de travailler comme ça. Ça marche. Et toi, t'arrêtes de balancer n'importe quoi ! Arrêtez, là, le débat, c'était bien, là. Eh, dégage ! On est pour le cul, Gérard ! Non, dégage ! Non, non ! C'est toi qui fais des conneries, tu sais, non ? C'est vraiment une merde. Toi, t'es un branleur fort possible, hein. Tiens, tout ça, de mes couilles ! C'est bon, c'est bon, c'est bon ! Eh, on parle de tes 4%, ça m'étonne pas que t'es aussi con ! Bon, Gérard... Bon, allez, vous fermez le global, maintenant ! Gérard, pour revenir au débat, on me demande si tu préfères le Morse ou le FistFox. Je vois pas... Je vois pas du tout le rapport. Vous n'y êtes pas. Ah ! Vous n'y êtes pas ! Ah, vas-y, vas-y ! Gérard, t'as arrêté le débat ! Attends, Gérard, il est debout ? Il a lancé quelque chose contre Fildar ? T'es gaffe ! T'es gaffe ! T'es gaffe ! Vas-y, droite, gauche, dans le ciguerie ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! T'es gaffe ! Mais qu'est-ce que je fais, moi, Gérard, là ? Rigo, faut que tu viennes m'aider, là ! Ouais, je vais au standard. Arrêtez le merde, tout le monde a la DAT, là ! Viens m'aider ! Bon, je veux juste dire aux gens de l'IRC que je vais au standard vu qu'il n'y a plus Fildar là-là, il faut que Manu y aille. Alors, donc, pour la question sur le morceau... Oh là là, ça commence à m'énerver, ce soir. Le con, le roi des cons ! Bon, Manu, tu vois, là, il y a des trucs qui vont pas, là. Bah, attends, je viens d'arriver, je regarde, je regarde. M'excuse, m'excuse ! Non, non, toi, tu vas dégager. Ouais, vas-y, hein ! Non, non, t'inquiète ! Non, non, tu vas là, tu vas là, tu vas là, je veux plus te voir ! Je veux plus te voir ! Je veux pas te voir à l'arrière, tu vas y, au standard ! Non, je te promets, Gérard ! Je te promets, Gérard, j'arrête. Non, c'est Gérard ! Je te promets, fais gaffe ! Non, j'arrête, promis. Fais gaffe ! Ouais, je fais gaffe. C'est Gérard, c'est lui qui décide, hein ! Fais gaffe. Alors, tu vas au standard ! Non, parce que je connais pas les auditeurs, j'aime pas. Ouais, bah, t'aimes pas, tu vas peut-être faire ton boulot correctement, parce que tu commences à faire chier ton monde, toi, aujourd'hui, hein ! Alors... Oh, non ! Bon, Manu, t'essayes... Bon, Manu, je vais essayer de gérer. C'est quand même... Non, non, non ! C'est toi qui fais des conneries. Moi, je fais mon possible, hein ! Ouais, mais il peut les calmer, quand même. Alors, bon... Pour la cinquième question, Jésus, J.S. Utilisait-il encore des pigeons voyageurs pour communiquer ? Jésus ? Putain ! Ils vont se calmer, ces bandes de cons ? Eh, oh ! Eh, tu te calmes, Goliens ? S'il te plaît, mon Goliens ! Reste poli, là ! Et si vous êtes pas contents, vous raccrochez vos téléphones, on prend d'autres personnes. Mais tu nous parles sur un autre ton ? Ouais, bah, si je veux, d'accord ! Il va se calmer, l'hydro-stéphane. Comment il est ? Le bulbeur achidien. Bon, euh... Décode le trisome. Alors, 40 bars. Oui, est-ce que tu peux répéter, s'il te plaît ? Alors, J.S. Utilisait-il encore... J.S. ? J.S. Non, non, c'est pas J.S. Oh, là, là, oh ! Non, mais vous êtes lourds, ce soir, hein ! J.S. utilisait-il quoi ? Des pigeons, des pigeons voyageurs pour communiquer. Bien sûr, et même, c'était dans la Bible et tout. Ah, c'était beau, c'était... Oui. D'accord. Euh, O.R.O.S. J.S. n'y est pas ! Oh, là, là, oh ! Tu sais qu'il s'amuse à personne, là ! Mais c'est la D.A.T., putain ! C'est ça ! Ouais, c'est O.R.O.S. Ouais ? Ouais, je voulais dire que J.S., le KGB, la CIA, tout le monde utilisait des pigeons voyageurs. C'était nul. D'accord. Tomate ? Ouais, euh... Il utilisait les pigeons voyageurs, et, en fait, quand il en recevait, il les bouffait. Hum ? Il m'a volé baldis, dans mon porte-monnaie. Euh... Si ça vous fait rire, moi, ça me fait pas rire, parce que celui qui s'amuse à ça, il m'a dégagé, je vais pas chercher qui c'est, maintenant. Oh, non, non, non, non, non. Le ciel ! Ouais, tu peux répéter la question, s'il te plaît ? Alors, J... Mais fais gaffe, toi, le connard, à ce que tu dis, toi. Ouais. Et O ? Alors, J.S., utilisait-il encore des pigeons voyageurs pour communiquer ? C'est qui, J.S. ? Oui, mais c'est qui, J.S. ? À votre avis ? Je sais pas, je te demande. C'est pas le gars d'Andalas ? Non. C'est pas le gars d'Andalas ? Oh, là, là, là, là, là, là, là. John Soros. Mais non, mais dis-leur, tu sais, parce qu'ils captent pas. J'ai écrit, on voulait pas le dire, espèce de con, ma nuit, aussi. Je commence à faire... Ouais, mais gagne-toi. Ils captent pas, les auditeurs, faut bien leur expliquer. Alors, voilà, Luciole, maintenant. Ouais, mais c'est pas le gars d'Andalas. Oh, là, là, là, là, là, là, là ! Oh, là, là ! Là, vous avez fait rire le gars, quand les gens y parlent, maintenant ! Tu vois, pour une fois que c'est pas moi. Luciole ! Ouais, ben, on fait pas de religion à la radio, Gérard. Là, c'est n'importe quoi. Là, je crois, de cette manière, ça va être la fin, j'arrête à la 5. Non, non, non, mais là, il faut remettre Manu. Ça y est, c'est bon ? Non, mais le standard... Non, non, mais attends, pour l'instant, que... Tu les calmes, hein. Ça y est. Ouais, ben, tu vas les calmer. Tu vas voir, t'écoutes, tu vas voir. Luciole ! J'ai dit, ben, te laver les feux, tu pues. Oh, là, là ! Non, mais, Gérard, Gérard, sur IRC, il trouve ton débat tellement nul qu'il se demande si t'es le vrai Gérard. Non, ben, attends, si ça leur plaît pas, dans ce cas-là, ils arrêtent, ils se demandent, ils empruntent après Manu et puis, là, ils font les cons. Alors, Luciole, tu veux... Tu es bon, maintenant ? J'ai dit, ben, te laver les feux, tu pues. Bon, alors... Dégagez, dégagez, dégagez. Bon, terminé pour celle-là, ça va vite, c'est moi, maintenant. Ça y est, ça y est. Alors, blanchis-moi, là, à la caverne. J'ai dit, ben, te laver les feux, tu pues. Attends, Manu, tu gères, là. J'ai pu, personne, merde ! Attends, c'est pas n'importe quoi, ce que tu dis, hein. Ouais, ouais. Blanchis-moi, à la caverne. Non, maintenant, j'ai pas le temps. Mais quoi, il est ouvert en bouquet ? Allô ? Ouais. Ouais. Donc, c'est pour toi ? Attends, j'entendais pas parce que je l'ai pas sur l'antenne. Putain, mais vous avez décidé de me faire crier ou quoi, aujourd'hui, là ? Tu peux me répéter, s'il te plaît ? Alors, Jésus-Christ utilisait-il encore les moyens des pigeons voyageurs pour communiquer pour un sixième point à la question que je répète ? Ouais, c'est fort possible. Ouais, je pense que, ouais, ça doit être écrit dans la Bible et puis, tout ça, c'est de la religion. Ouais, je pense que c'est possible. D'accord. Je ne sais pas lire. En fait, ces animaux-là, c'est un don de table parce que c'est pas comme les chiens, ils donnent pas de papade, tout ça. Tu leur dis d'aller porter un message à ta dulcinée et ce qu'ils font, c'est quitter les corps des grains de pain et ils t'écoutent pas, ces animaux-là. Non, mais attends, de toute manière, les pigeons, les pigeons... Bon, attends, n'importe quoi, les pigeons voyageurs, de toute manière, ça existait. On n'a jamais délivré les messages. Si. Non, non, non, attends, faut pas déconner. Non, non, c'est ce que je dis. J'ai essayé d'en dresser quelques-uns et j'ai jamais réussi. Si je leur attachais des trucs à la patte, des bagues, ouais, voilà, des bagues avec des messages, oui, j'ai envie de te baisser comme une chienne, tout ça. On m'avait coupé le portable, en fait, et j'envoyais le pigeon comme ça et jamais il n'y allait. D'accord. J'ai eu des problèmes, je me suis retrouvé... Non, mais ça y est, on a compris. Je me suis retrouvé avec une grosse force. Ça y est, on a compris. Oui, Gérard, sur IRC, il y a Super Ouragouin, il te demande comment tu fais pour envoyer les pigeons voyageurs assez loin. Eh ben... Avec une bague. Avec une bague ? T'arrives à lancer les pigeons avec une bague ? Non, mais... Les pigeons voyageurs, tu l'envoies à 2000 kilomètres, comment tu fais ? Non, mais... Ils s'envolent, ils prennent leurs ailes et puis ils volent. Oula, j'ai perdu 1000 personnes, là, d'un coup, ils m'ont dit que c'était à cause de Manu. Voilà, voilà, bravo. Non, c'est à cause de Christy, bravo Manu. Donc, c'est quoi comme... On va s'écouter un disque, tu poses la question, Gérard, le temps que je te donne la question. Non, je ne sais pas si tu puisses. Celui-là, tu me le vires. Tu le vires, mais... Je l'ai trouvé, je le viens. Non, non, mais tu vois, ça va aller vite, là. Alors, pour... Oui, Rigo ? Non, non, Rigo, pendant que... Pose une question Internet pendant que je note le disque. Alors, peut-on dire que Gégé est transgénique mi-pigeon, mi-phoque ? C'est quoi, ça ? Je ne sais pas. C'est Citrouille qui demande ça. Et il y a Jarvis Cooker qui demande si on peut attraper des maladies viagras ou autres en communiquant. Non, ça, c'est plus le débat sur les maladies. Qui c'est qui s'amuse avec cette musique de là ? Et sinon, il y a Yankee qui me dit qu'on utilise le morse maintenant parce que les phoques font de la radio. Non, mais je ne vois pas du tout le rapport. Donc, sixième question. Pour draguer, vous servez-vous de votre regard comme moyen de communication ? Et vous pouvez toujours nous appeler au 0875 000 0803 085 000 et toujours Rigo qui vous attend sur le site www... Je n'arrête pas d'attendre depuis... .funradio et on s'écoute Riri... Riri. Riri, Fifi, Loulou avec Moi, c'est mieux avec du couscous. Et on se retrouve tout de suite après pour la suite du débat et la fin. ''Musique'' Et voilà, donc vous êtes toujours sur PUN Radio, c'est la suite du débat sur les moyens de communication, et on vient de s'écouter Ricky, Fluffy, Loulou, avec ses... moi c'est mieux, avec du couscous. Donc en parlant de couscous, on va être bien servi, parce qu'il y a justement... Ah, il y en a quelqu'un qui a amené du couscous ? Non, non, mais on a un auditeur qui s'appelle Couscous, qu'on avait vu depuis longtemps, donc on récupère... Ah, il y a Couscous qui est là ? Carambar, bonsoir. Oui, bonsoir. Eh Gérard, est-ce que tu me permets pour une fois d'être gentil ? Je voudrais dire bonsoir à ma petite amie Jessica, bonsoir Paris, bonsoir Jessica. Voilà, ok. T'as pas de petite amie. Bon, ça y est, vous n'allez pas recommencer pour la pain ? Oui. Ok. Ou Rose ? Ouais, je suis dans la place, et je voudrais dire bonsoir à ma main droite. Ok, Tomate ? Bonsoir à tous, je suis Carrie, à la main droite. Carotte ? Salut. Salut. Couscous ? Oui, bonsoir. Ah, Couscous ! Ouais. Bonsoir à tous, bonsoir à ma main, et bonsoir à Abdel Wahid. Ok, c'est bon, Couscous. Vous n'avez pas remarqué que les autres habitués en voulaient pas, là ? Ce mec, là. Oh ! On se calme, s'il vous plaît, hein, maintenant. Et bonsoir à tous les terroristes qui m'aiment. Non, non, non, non, non. Eh, ta gueule toi-même, toi, connard. Oh là là. Eh, mon doigt. J'aime pas Couscous. Mon doigt sent le caca, là. Mon doigt sent le caca, pour terminer. Ouais, ouais, bah ouais. Alors. Bonsoir. Bonsoir, ça y est, là, oui. On va commencer, on va finir le débat, maintenant. Non, non, ils sont cools, hein, ils sont cools. Alors, pour draguer, vous servez-vous de votre regard comme moyen de communication ? On va demander à 40 barres. Ouais, pour comment, encore ? Bah, ouais, tout à fait, ouais. Énormément, ouais. La persuasion, et en plus... Attends, bouge pas, je change de côté la cassette. Non, non, mais attends, si t'enregistres en même temps... En plus, tout ça, c'est des trucs à moi, ça. Ouais, pour lui, après. En plus, je suis serveur, donc ça aide. D'accord. Et je me fais plein de nanas, mais là, depuis quelques temps, je me suis calmé, je suis avec une super fille, et je l'embrasse très fort. Ok, d'accord. Non, mais... Je t'aime. Attends, il passe ses messages persos, c'est quoi, ça ? Il est amoureux. Euh, 40 barres ! Alisabeth Guigou ? Non, 40 barres, c'est bon, c'est... J'ai été dit, ça nous écoute... Comment pour 40 barres, hein ? Tu m'as dévibré, Alisabeth. Ouros ! Ouais, bah, écoute, moi, j'ai un petit problème dans la vie, c'est que j'ai un regard de tueur, donc, bon, je suis un peu obligé de mettre des lunettes de soleil, parce que c'est... Désormais, les filles, j'ai fusé, j'ai regardé... Oh, vous arrêtez de vous marrer, là ? Ah, vas-y, vas-y, vas-y, vas-y... Oh, non, non, non, non, non ! Je sens que ça va se terminer vite fait, Manu, avec toi. C'est que ça vient de moi, je les ai presque... Vas-y, vas-y, vas-y, c'est bon. Tomate ! C'est quoi, la boîte mobilique, là, c'est quoi ? Tomate ! Moi, j'ai un petit appareil, dont je ferai le nom, qui, en fait, envoie des messages à quelqu'un qui a le même appareil. Donc, si j'ai envie de... Si je crois que quelqu'un est dans la rue et que j'appuie sur un bouton, ça sonne sur son appareil. Ouais, c'est le nouveau truc, Gérard. T'as vu à la télé ? C'est le truc pour les amoureux, là. On est des espèces de beepers. Ah, ouais, mais... Les fucklovers, là, les fucklovers. Ouais, ouais, ouais. J'avais vraiment vu ça, ouais. Carotte ? Bah, moi, j'ai des sales yeux, donc je m'en sers pas... Je me sers pas du regard pour draguer. C'est un du cul, toi. D'ailleurs, je ne drague pas et puis on ne drague jamais parce que je suis moche, on se compare toujours à Sandy, donc tu vois, ça n'arrange pas. Alors, Carotte, tu vois, tu viens de dire un nom qu'il ne fallait pas, donc tu peux retourner chez toi, c'est terminé pour toi. Au revoir. Ça y est. Salut. Couscous. Coucou. Coucou. Vous êtes un méchant chiant ou pas, là ? Couscous, on t'écoute. Pas de marque. Moi, on m'appelle la Clash, Couscous. Moi, quand je la regarde, c'est méchant, c'est terroriste. D'accord. Mais moi, je dois être dans le caca, là. Non, moi, je suis borgue. Non, mais tu peux quand même répondre à la question ou pas ? Je suis borgue, j'ai qu'un oeil, donc ça ne le fait pas, tu vois. Bon, d'accord. Sans manquer de respect, il ne faut pas se moquer des aveugles. Oui, entre parenthèses, voilà. Super Montagné, si tu nous regardes. Oh, c'est bon, on a pu, on se calme. Ouais, euh... Non, non, il n'y a personne à la place de Carotte. Il n'y a personne. Attends, je vais, je vais. Tu vas, tu vas, tu vas te manier, maintenant. Oh, merci, c'est Carotte. Alors, euh... Question IRC. Oh, oh, oh ! Appelle le TK de Mystère. On se calme, là ! Le TK de Mystère, il t'emmerde ! Le TK de Mystère ! Ok. Alors, Rigaud, une question IRC. Alors, question de Hatt. Les pigeons, ouais, mais voilà, ils parlent des pigeons voyageurs parce qu'il y a un délai avec Internet. Quand ils écoutent par Internet, ils écoutent ce qu'il y avait il y a 20 minutes. Donc, ils me parlent encore des pigeons voyageurs. Eh, Gérard, je voudrais demander à TK si c'est possible qu'elle me suce ma saucisse à quatre pattes. Va te faire foutre, t'abrouti ! C'est qui qui vient de dire ça ? C'est qui qui vient de s'amuser à dire ça ? Je vais le trouver, Gérard, continue. Et d'ailleurs, d'ailleurs, à la place de, je ne sais plus trop qui, on accueille Tom à la Catalane. À la place de Carotte, alors. Voilà, exactement. Alors, vas-y, Tom. Oui, bonsoir, Gérard. Bonsoir. C'est Griselda. C'est encore la même. Bon, tu as compris la... Pour draguer, servez-vous de votre regard comme moyen de communication pour toi, la question. Oui, ben en fait, je louche, alors tu vois, c'est pas très évident pour moi. Non, c'est sûrement, c'est tout. Oh non. Oh, ça commence à... Vous laissez parler les gens ou pas ? C'est Groton qui vient de dire ça. Il n'arriverait pas à me faire jouiller. Non, je vous ai pas sympa parce que je louche et j'ai un grave problème. Eh, je sens que le prochain qui s'amuse à dire ça... Ça va dégager ! Il jouait pas, c'est tout. Il jouait pas. Il jouait pas. Si je jouais, je suis juste resté avec lui. Euh, Manu, quand tu vas... Ouais, je vais, je suis en train de les chercher. Ouais, alors... Je suis en train de les chercher dans mon porte-pone. Donc, euh... Gérard ? Donc, ouais, oui ? Il y a Ertonio sur l'IRC qui te demande si on peut draguer avec leur regard aussi bien que... Parce qu'il a des lunettes, en fait. Il voulait savoir si c'est pareil que quand on n'a pas de lunettes. Ben, je pense, oui. Ben, il est monté sur moi, c'est tout. C'est tout, hein ? Et il manque plus que les doubles sons, maintenant. Ben, quand vous aurez fini... Quand vous aurez fini vos conneries... Ouais, j'en ai... On pourra demander à Ton qui va répondre. Je passe le bonjour à tous les égords d'Israël. Hé, Couscous ! Couscous, ça suffit ! C'est abusé, ça ! C'est abusé, là. Elle est tensionnée, là. Oh là là ! Mais c'est quoi, là, ce bordel, là, Manu, là ? Tu me l'as... Tu peux peut-être les calmer, mais je peux les calmer, tu vois, un par un, donc... Couscous, il a abusé, là. Alors, Ton... Ouais, alors, moi, je te disais, je louche. C'est un gros problème. J'ai des doubles foyers, donc tu vois, ça m'arrange pas, alors je vous demanderais un petit peu de pitié pour moi, quand même. Euh, je te calme, moi. En plus de ça, donc, j'ai une sale gueule, donc il y a rien qui m'arrange. C'est clair. Et, ben, du coup, je sais pas quoi faire. D'accord. Et en plus, ton pote, il s'est fait virer de la sécu, alors c'est la top. Je sens que ça va... Ça va jarcler, ça va jarcler. Ça y est, ça y est. Ça va... Alors, quel mot... Quel est le moyen de communication... Quel est le moyen de con... Quel est le moyen de communication quand on a n'a pas... Donc, on va demander... Le meilleur moyen, quel est le meilleur moyen... Voilà, de communication quand on a n'a pas. On va demander à Karnevar. Euh, le P, le... Non, la lettre ou la parole, je sais pas, moi. Hum. Voilà, Gérard. Euh, Ouros ? Bah, je sais pas, je dirais un français correct. Ouais. Euh, Thomas ? Il faut crier très fort. Comment ? Dans quel sens ? Bah, il faut crier très fort. Bah, si t'es autiste, hein, j'en sais pas. Hum-hum. Ok. Euh... Thomas ? Tu veux que tu viennes répondre ? Ton, euh... Je sais pas, à quoi, là ? À la Catalane. Ton, à la Catalane ? Ouais, bah, moi, je me sers du téléphone. Au moins, on me voit pas. Et puis, on peut pas imaginer le monstre que je suis. D'accord. J'aime bien ta voix, moi, gros boudin, là. Oh, vous fermez vos gueules, s'il vous plaît, derrière. Merci. Elle est moche, elle est moche. Ouais, euh... Sur IRC, il y a Arnette qui dit que quand on n'a pas de moyen de communication, elle ferme sa gueule. Bah, voilà. Eh, couscous ? Le téléphone à arme. On raconte pas n'importe quoi. Sinon, on leur coupe les cordes vocales à coups de rachois. Ouais, ouais, ouais, mais... Couscous, tu réponds comme il faut à la question. Bah, je te dis que le téléphone à arme. Moi, je te dis le téléphone à arme. D'accord. Euh... Mets-moi le doigt... Oh, putain, non ! Ouais, Gérard. Mets-moi le... Embrasse-moi. Mets-moi le doigt dans le caca. Ouais, viens, t'assures que sur mon sexe, on est réactifs. Bon, allez, allez. Hop. Terminé pour lui, il répondra même pas. Allez, hop, c'est fini. Il dégage. Voilà. Allez, hop. Alors, euh, donc, euh... Alors, il y a un petit sondage, là, pour ou contre les moyens de... Bon, couscous, s'il te plaît, tu me laisses finir ? Ouais, d'accord, mais je t'emmerde. D'accord, mais je t'emmerde. Euh, là, je crois que... C'est pas moi, Gérard. C'est un mec qui s'est émimité. C'est qui ? C'est pas moi. C'est ce moule. Ouais, mais restez quand même polis, s'il vous plaît, avec les gens qui vous emmerdent. Merci. S'il vous plaît. C'est pas gênant. Faut pas être tentaculé en cul de tâcheur. Euh, donc, pour ou contre les moyens de communication, il y a 60% qui n'ont pas le temps de répondre à la question. Hum. Il y a 30% des Français pensent pouvoir le faire eux-mêmes. Hum. Et 10% des Français qui estiment que ce n'est pas le thème du débat. Ben, je vois pas pourquoi que 10% disent que c'est pas le thème du débat, alors que c'est le thème du débat. Ben, ouais. Mais j'étais sur moi, c'est tout. Oh, là, là ! C'est pas moi. C'est à toi, Gérard. Moi, euh... Alors, euh... Excuse-moi, Gérard. Quand même, à la place de mon doigt, sans le caca, machin, on accueille Gilles Comoisy. Bonsoir. Bonsoir. Salut, Gilles Comoisy. Salut. Bonsoir, tu vas bien ? Salut. A tous. Salut, chat de pourri. Alors, donc, la question, donc, Carambar, tu réponds, s'il te plaît ? Tu peux répéter, s'il te plaît. Alors, quel est le meilleur moyen de communication quand on n'en a pas ? J'ai déjà répondu, j'ai dit la lettre ou la parole. C'est vrai, il avait déjà répondu. Ah, ok. Où, Rose ? Ben, j'ai déjà répondu, tu ne suis rien à ton débat ou quoi ? Mais attends, tu restes poli, toi, parce que tu n'avais même pas répondu. Mais si je te dis un français correct, alors tu es un peu ce qui se passe, quand même, putain. Le roi des cons, ouais. Thomas ? J'ai aussi répondu, Gérard. Ben, ton... ton, elle a... Je t'ai déjà répondu aussi, Gérard. Alors, pousse, pousse. Je t'ai déjà dit, téléphone arabe, putain, t'es sourd. Elle t'a peut-être posé cette question-là, déjà, Gérard. Non, mais il y en a un, il y a le Comoisy, là. Si, j'ai le Comoisy. Ben, alors ? Tu devrais le savoir. Non, non, non, pas de moyen de communication. D'accord. Je vis dans une grotte. Ok. Alors, huitième question. Les hommes utilisent-ils les animaux pour communiquer ? Les hommes utilisent-ils... Les hommes utilisent-ils les animaux pour communiquer ? Ah, ben, t'es bien placé pour en répondre. Oui, tout à fait, ouais. Attends, tu sais qu'ils viennent parler, comme ça, là ? Ils sont à la Catalane. Ah, ben, répond à la Catalane, tu peux. Tu me viens répondre à la Catalane, ça y apprendra de répondre des conneries. Je mets pas à mine à l'huile, à la place. Bienvenue chez les pizzas, avec la pépère au lait. Alors, 40 bars. On va t'en faire de la colisse de bras. 40 bars, s'il te plaît, tu réponds comme il faut. Ah, mais vous vous salmez un peu, là, maintenant ? La pépère au lait, là. Ouais, Christine en est l'exemple. 40 bars, quand même. Oui. Pour toi ? Euh, je suis d'accord. Ouais, je pense que oui, oui, tout à fait, ouais. Je tiens, ouais. Ouais ? Ouais. Euh, Ouros ? Ah, pardon, il est parti. C'était lui, les conneries. Ouais, ben, c'est bien, alors. Ouais, ben, t'as bien fait ton boulot, une fois, Manu. Ouais. Gérard, sur l'IRC, il y a D-Light qui dit, oui, on peut utiliser des animaux pour communiquer. La preuve, les dirigeants de Fun Radio utilisent bien Gérard pour communiquer avec les animaux. Oh, n'importe quoi, lui. Tomate ? Ouais. Euh, ben, j'ai connu un mec qui utilisait des puces savantes et des morpions. D'accord. Ouais, à la place de ton à la Catana, Catalane, pardon, on accueille Oasis. S'il n'y a pas de bulles, là. Oasis, OK. Bonsoir, Oasis. Elle veut te planter, c'est pas le gars. Ah ! Oasis, c'est pas le gars. Elle veut te planter, c'est pas le gars. Oasis, c'est pas le gars. Il n'y a personne qui va oser s'appeler Fildar, là, pour les chaussettes. Je sens qu'on va conclure le débat ici. 4%, il ne faut pas déconner. Oui. Donc, Oasis. Moi, si tu pourrais me répéter la question, je viens d'arriver, donc... Les hommes utilisent... Qu'utilisent-ils les animaux pour communiquer ? Euh... Ouais, ouais, ouais, c'est... C'est un excellent moyen de communication, de... De prendre, par exemple, un chien avec soi. Oui. Ça permet, franchement, de développer... J'aimerais te dire que je t'aime avec un tatou. T'as le cœur de l'oreille. Je voudrais te dire que je t'aime, mais tu ne me réponds pas. C'est où ? C'est les feuilles, c'est ce qui s'allume en vert, Manu. Je voudrais te dire que je t'aime, mais tu ne me réponds pas. Bon. C'est vrai, Manu, il est nu, ce soir. Alors, je sens que c'est... Non, mais ce qu'il faut faire... Gérard, Gérard, Gérard, Gérard. Tu fous un coup de fouet à Manu, là, hein ? Non, non, mais ça va aller vite, c'est la... Ça va être la dernière question. Je ne sais pas si... Parce que ça y est, j'ai retrouvé quelqu'un. C'est pour ça que j'ai galéré. Ah, ouais, d'accord. À la place de Ouros, on accueille Préparation H. Bonsoir, c'est Préparation H, Fably. Préparation H. Oui, bonsoir. A tous. Oui, alors... Aïe, aïe, aïe, aïe, aïe, aïe, aïe. Oui, tout à fait, oui. On se calme. Vous ne l'avez pas, celui-là ? Aïe, aïe, aïe, aïe, aïe, c'est pas mal. Avec qui, la chaise, là ? Le tabouret. Et puis le trou du cul qui saigne. Voilà. Non, mais quand vous aurez fini vos conneries, les gens, ils pourront peut-être répondre. Oui, c'est vrai. Il y en a qui veulent répondre et faire un débat sérieux. Alors, euh... Est-ce que vous l'avez, ce capsule ? Euh... C'est qui qui demande ça ? C'est Finger. Je sens que tout à l'heure, on va conclure, hein ? Oui. Alors, préparation H. Oui, ben, je viens d'arriver, j'ai pas entendu la question. Alors, les hommes utilisent-ils des animaux pour communiquer ? Les hommes, ben non, je crois que c'est interdit par la loi d'utiliser les animaux pour niquer, donc... Pour communiquer ! Ben, que ce soit en communauté ou pas, c'est pareil, c'est interdit, c'est tout. Non, mais je crois que... Non, mais discute pas, c'est tout, c'est la loi. La loi, elle est appliquée, il faut se plier, c'est tout. Moi, je suis d'accord. Ben, couscous. Non, non, moi, je suis d'accord. Non, non, moi, je suis pas d'accord. C'est impossible, on peut pas niquer dans la commune avec un dromadaire. Fais pas les animaux ! Fais pas les animaux, t'écorches les moutons, salauds ! Putain, t'en as qui sautent des phacochères... Vous allez énerver, couscous, arrêtez ! Intégriste ! Hé, Gérard, c'est pas parce que tu niques un phacochère que tout le monde a le droit, hein ? Ça y est. C'est le combat. Non, mais... C'est pour l'eau, c'est pour l'eau, c'est pour l'eau, pardon, Gérard. J'ai le cou moisi, là. Ouais, moi, je veux bien me sacrifier et m'appeler Fildar, t'as qu'à faire. Non, non, c'est bon, c'est bon, ça va aller. Pour passer la pub des chaussettes qui te puent. Non, ça va. Alors, moi, je peux vous dire une chose, comme vous êtes en train de déconner, le débat, il s'arrête là. Non, non, Gérard. Encore une question. Non, non, non, non. Encore une, là. Il était bien, il est bien, le débat. Non, non, ils sont tous gentils, n'est-ce pas, les auditeurs, vous êtes gentils ? C'est là pour comprendre les gens qu'on est cons. Ouais, c'est vrai. Non, Manu ? Alors, les transmissions de pensées, est-il un moyen de communication en faisant l'amour ? Et ça sera la dernière question. Est-ce que tu peux la répéter, s'il te plaît ? Alors, les transmissions de pensées, est-il un moyen de communication en faisant l'amour ? Manu ? Quoi ? Tu fais chier. Alors, 40 bars. Est-ce que, à ton avis, tu sais à quoi je pense, là ? Non, eh bien, tu vas le dire. Ben, contenté, Jean. D'accord, eh ben, bonne nuit pour toi, 40 bars. Faisons-te... Non, non, c'est bon, c'est terminé. Est-ce que t'as une réponse à donner ? Qu'est-ce que t'as à donner sur la question, 40 bars ? Les transmissions de pensées. Moi, je sais qu'avec ma copine, sans faire exprès, on dit beaucoup de choses semblables ensemble. C'est-à-dire ? Eh ben, c'est-à-dire, oui, avec nos meilleurs potes, c'est ça. On a la même expression, des fois, ou des trucs comme ça, quoi, en faisant l'amour, et tout, c'est bien. Vous faites quoi ? Hein ? C'est... Ah, vas-y, c'est bon, c'est bon, c'est bon. C'est très bon. Préparation H. Je ne vais pas le dire, celui-là. Oui, ben, moi, je suis sûr qu'après l'amour, comme tu disais, toi et ta copine, vous avez de la transmission de pensée, que vous avez envie d'une gamelle de fresquises au même moment. Toi, tu ferais mieux de faire des préparations pour cons. Fildar, mets-nous un double son, là. Ah, j'ai pas, j'ai pas envie. Non, arrête, arrête, arrête. Fildar, il t'a un peu le faux cul, là, ce soir. Ouais. J'ai pas besoin d'utiliser la pensée, parce que je crie très fort, donc je pense qu'il entend assez. Fildar, mets les auditeurs en double son. Tu jouis ? Je jouis, je jouis, je jouis très fort. Tu jouis très fort ? Je jouis et pas. Lui, je jouis, ça dépend. Oh, Aziz ! Fildar, mets les auditeurs en double son. Ben, moi, sexuellement, avec mon copain, ça se passe très bien. Ah, t'es un copain, toi ? Ouais, ouais, ouais. Tant pis, Tony. Je crois que c'est un dommage. On est au top au niveau transmission de pensée, et puis tout va bien, quoi. On est exactement sur la même longueur d'onde. Moi, je vais te transmettre, moi, salope. Tu viens de trouver quand tu veux. Ton tampon, il vient de tomber, là. Ça arrive. Là, quel équerre on va faire ? Vous êtes perpés, vous. Vas-y, Gérard, on enchaîne. Non, non, mais on prendra peut-être qu'il se calme. Donc, Aziz. J'ai absolument pas envie de faire ça. Couscous. Ouais, Gérard, c'est vrai que depuis que tu t'es fait enculer par une lampe torche, on t'appelle la luciole. Couscous, tu restes poli, parce que sinon, ça va mal finir pour toi. Ouais, tu vas gerber, hein. Moi, je suis d'accord avec Aziz. Gérard, je te... Sous la console, là. Je le coumoisille. La transmission de pensée, pourquoi pas. D'accord. Alors, moi, je peux vous dire une chose. Il y avait un truc que je voulais dire. C'est que pour les aveugles, le moyen de communication... Le moyen de communication... Bon, tu es calme, s'il te plaît, Manu. Merci. Et après, on fait la conclusion, comme ça, ça va être terminé. Donc, pour les aveugles, c'est sûr que c'est pas évident pour eux de pouvoir communiquer. Et c'est... Maintenant, je crois qu'il y a des nouveaux trucs qu'ils font. Donc, on va demander la conclusion du débat à 40 bars. À moins qu'il y avait une question hier, c'est non ? Oui, il y a Sandi, la pute, qui demande qui veut lui bouffer le cul. Mais bon, c'était pas le thème du débat. Voilà, bon, donc, 40 bars, conclusion. Deux choses à dire. Déjà, tu t'es fait griller parce que 40 bars, en fait, c'était 40 bars. Et deuxièmement, toutes les expressions de Christine, c'était moi. Donc, j'ai pris le plaisir. OK, ben... À la semaine prochaine, Gérard. C'est ça, ben, tu repasseras pas la semaine prochaine pour toi. Et ils vont être sur moi. C'est ça. OK, ben, tu repasseras pas la semaine prochaine pour toi. Préparation, préparation H. Ouais, alors, deux choses aussi. La première, c'est que je te mets un fulgurant pour où je pense. Et la deuxième, c'est que tu t'es trompé. Tu l'as appelé j'ai le coup moisi au lieu de j'ai le con moisi. Et on savait déjà que t'avais le coup moisi, c'est clair. D'accord, ouais, tu l'as dit, Thomas. Enculpant qui ? Ouais, ben ouais, c'est comme d'habitude. Toujours aussi nul, toujours aussi à chier, toujours aussi... Toujours aussi Gérard, quoi. Eh ben, dans ces cas-là, Thomas, c'est simple. Tu allais bouffer tes tomates, comme ça, tu nous emmerderas plus qu'on nous fait des conneries. Bravo Gérard, ouazis, t'es bien calmé. Ouais, eh ben, moi j'ai trouvé que le thème du débat, il était franchement très très intéressant. Ouais. Il était vraiment bien, mais c'est dommage que ce soit toi qui l'a présenté. Ah mince. Pourquoi ? Ça parlait bien. Pourquoi ? Ben, parce que t'es toujours aussi catastrophique et rien ne change, quoi. Ben, dans ces cas-là, tu fais pareil, tu la gardes ton ouazis. Ouais. Gossos. Gossos. Ouais, ouais, ben, le débat, il était pas trop mal. Bon, il y avait un petit peu de bordel dans la maison, mais sinon, c'est toujours de la merde. Ouais, mais de toute manière, eh, Gossos, non, n'empêche, on aime bien t'avoir dans... J'aime bien t'avoir quand même dans les débats. Tu le sais bien, on rigole bien avec toi. Ah, d'accord, je te réserverai une petite égorgerie de... C'est ça. Ok, allez, bonne soirée à toi, Gossos. J'ai le coup moisi pour finir. Ah, mais je rouillais pas. Bah oui, je sais, on fait tous ça. Ouais, moi, je voulais seulement dire, enfin, je voulais seulement te demander si je pouvais avoir la grosse vilaine au standard, après. La grosse vilaine, c'est qui ? C'est laquelle ? C'est quel mystère ? Euh, non, tu vois, tu l'auras pas. Donc, voilà, donc, c'est tout, c'était ta conclusion ? Ah, bah ouais. Eh ben, c'est bien. Je te souhaite une bonne nuit aussi. Eh ben, moi aussi. Je te kiffe, l'ascar. Eh ben, moi, je veux pas moi, ok ? Donc, c'est dommage qu'il y ait eu des petits... Petite conclusion de l'IRC, quand même, avant de finir, de Yankee. Quand on se balade avec un tekelborg et qu'on n'a pas d'amis, on fait pas des débats sur la communication. Euh, Gérard, c'est une pute. Non, on va pas dire ça, quand même, c'est pas gentil. Et, euh, bah, c'est... Apparemment, il y a que des trucs méchants. Eh, on était combien, quand même, là ? On est remontés à combien ? Là, on est quand même remontés à 3867. Combien ? 3867. C'est le record, non ? Je sais pas. Bah, si, c'est le record, 3867, je crois. Je crois qu'à la dernière fois, on avait fait 3400, là. Donc, là, à mon avis, on a battu le record, ouais. Eh ben, on aura les sondages, les mecs, ça va faire plaisir, hein. Bravo. Bravo, bravo. On aurait peut-être été un peu plus s'il n'y avait pas eu le problème avec Manu, en ce temps-là. Ouais. Ouais, ça, c'est vrai que Manu, cette semaine, t'as fait chier le monde. Ouais, mais toi aussi, t'as quand même fait un peu ta merde. Non, je t'ai... C'est ça, ça fait quand même un peu ta merde aussi, toi. Faut pas l'oublier. Donc, voilà. Oui, Rigo, pour finir ? Non, rien, j'attendais une félicitation de papa. Non, mais c'est bien, de toute manière, il a bien bossé, Rigo. Il y a que lui. Il y a que lui qui bosse bien, en ce moment, alors. C'est bizarre, quand même. Ouais, non, mais il y a que lui. Ça cache quelque chose. Non, non, mais il y a que lui. Il y a que lui qui bosse comme il faut. J'ai remarqué aussi. Parce que lui, on ne l'entend pas. Quel plaisir de te retrouver, en tout cas. Donc, pour moi, la conclusion des moyens de communication, dommage que ça foirait, mais sinon, je pense que dans l'ensemble, c'était pas... Bon, écoute, je crois que tous les records ont été battus. Bravo. Un fil d'art, tu continues, ça se voit que c'est terminé. C'est terminé pour toi, un fil d'art. Tout ça, la semaine prochaine, on trouvera peut-être quelqu'un d'autre. Ouais, j'ai l'impression, parce que là, le double son, j'aime pas trop. Par contre, je voulais signaler que celui qui s'amusa à envoyer un truc bidon sur l'IRC en mettant avec 10 poules... Oui, donc c'est faux. Voilà. Donc, je vous souhaite une bonne nuit. Vous allez retrouver Rousseau pour la nuit sans pub. Et demain, 6h-9h, Barthes. Et puis, Max à partir de 22h. Arrête. Tu vas prendre une gaufre avant la fin, toi. Et vous allez retrouver Max à partir de 22h. Il y aura des surprises, d'ailleurs. Il y aura des surprises. Déjà, il y aura Jean-Denis Debert, puis il y aura plein de petites surprises, peut-être. Non, mais pas par rapport à toi, mais des trucs nouveaux. Et moi, je vous retrouverai la semaine prochaine, si tout va bien. Bon, à la bonne nuit à tous. Et je voulais faire un petit cadeau, je voulais me faire plaisir, parce que tu as 10 minutes avant, avant de reprendre le programme officiel de l'antenne, où il y a une compilation qui s'appelle F-Communication, la belle français. Ils ont sorti des compilations Musique pour Plante Verte. Ils avaient également sorti déjà une compilation Megasoft Office 97. Ils viennent de sortir la compile 98, avec dedans Nova Nova, LJIA, Frédéric Galliano, Readymade. Que les artistes français ont fait un compte avec des noms un peu étrangers. Et là, sauf un ou deux, et là on va écouter Aquabassino qui s'appelle The Melokey Voilà. == Le débat sur New York == === Contexte === === Les personnages === === Transcription === Les débats pas de radio et pas d'insultes de Gérard Et voilà, donc bienvenue pour, donc Gérard 35, donc bienvenue pour le premier débat Alors ça, ça, une fille d'art, tu vas te prendre une claque Tu vas te prendre une gaufre, mais méchante tout à l'heure Pourquoi ? Tu me refais ça Mais attends c'est propre Non mais je lui avais dit qu'elle avait un surnom Elle ne me l'a pas dit donc je ne peux pas le démerder C'est moi qui vais me démerder, c'est pas grave Donc premier débat qui va porter sur New York Donc vous pouvez toujours nous appeler au 0875 000 0803 08 5000 et toujours IRC, donc www.fr, jeune radio Et ça n'arrête pas de monter, on est déjà à 2413,8 connectés Eh ben c'est joli Gérard Alors on va accueillir Cutepool, 24 ans, qu'on écoute Fun Radio à New York sur 93.4 Bonjour Cutepool Salut Gérard On va accueillir Saucisson à l'ail, 101.9 Paris Allo Allez y'a toi, c'est bon Allo Salut Gégé Salut Non mais c'est parce que je t'entendais pas, donc c'est pour ça Allo Allo Allo Allo Allo Allo Ça commence C'est quoi ça ? C'est à côté, là, ils font des essais, là C'est ce truc, là Non Ça y est, merci Euh, Sufboun, 21 ans, 103 points, 100.3 à Le Mans Bonsoir Bill Big Bill Big Bill Euh, tu dis bonsoir correctement et tu l'as pas commencé Parce que sinon tu vas pas faire la première question, je te le dis tout de suite, ok ? Bah tu viens de dire que c'était toi qui faisais Bill dans le Big Bill Bon, je t'ai pas demandé si... Je t'ai pas demandé à quelle heure elle était, si ta sœur faisait du vélo Ok Alors euh... T'as l'air prêt ou pas ? Ouais, toi, je te signale que tu es allé voir Pildar tout de suite au standard Jérard, t'accueille les gens, s'il te plaît Hé, Gérard, Gérard, Gérard, le... Non, non, non, j'ai rien J'ai rien J'ai rien J'ai rien Ah bon ? Donc euh... Non, j'ai rien dans le froc J'ai rien dans le froc Donc 22 ans, une écoute 94.6 à Salo Allo Exactement, bonsoir Salut, Tony, ça t'apprendra ce qu'on t'avait vachement reconnu C'est pas grave, c'est pas grave Ah mais j'ai rien dans le froc, Tony, tu vois Voilà, donc euh... Non, mais on va mettre Tony C'est mon nom de famille Tony, c'est Arnett Ouais, c'est ça, t'as raison Avec cuisses de blours Salut, Gérard On écoute à hausse 98.7, hein Et peau de chambre à dinant 103.5 Ouais, salut, Gérard, ça va ? Salut Donc, alors, première question qui porte sur New York Alors, êtes-vous allé à New York ? Bon, celui qui commence à rôter déjà, il va commencer à fermer sa gueule Parce que ça va aller vite avec lui D'accord ? C'est du calme, Gérard Ok, ben celui qui rote aussi Alors, première question : êtes-vous allé à New York ? Si oui, quel type de transport avez-vous pris ? On va demander à Saucisson à l'ail Ouais, j'y suis déjà allée Et donc, le transport que j'ai pris, c'est bien sûr l'avion Et quand j'ai pris l'avion, j'ai énormément faim D'accord Question de Gérard, je suis en train de parler Il y a Davey1 sur l'IRC qui te demande : c'est quoi la fréquence de fun à New York ? Alors là, je ne sais pas Et il faudra demander ça à Pildar Attends, je vais vous donner ça dans deux minutes Alors, cul de poule Oui, moi j'y suis allée J'ai pris des gros taxis jaunes D'accord Sous ce boule Moi, je n'y ai jamais été, mais ça me dirait bien Tony ? Non, je ne suis jamais allé à New York D'ailleurs, j'ai été un petit peu vexé que tu ne m'aies pas invité à aller en avant-première Attends, ce n'est pas moi qui ai décidé, c'est la radio, d'accord ? Désolé Cuisse de blour Oui, moi j'ai décidé d'aller et j'ai pris l'avion D'accord J'ai la fréquence, Gérard Oui A hundred four four five Six point five seven Non, mais tu parles français, s'il te plaît You got a man in the film Oh, derrière vous, vous vous calmez, s'il vous plaît, merci Non, non, non La fréquence A hundred five four point seven Bon, alors quand tu parleras en français, je te répondrai Cent quatre point sept Cent quatre point sept, ça m'étonnerait Il parlait pour les New Yorkais chambre oui oui non pas de chambre tu apprends la question qui m'a dégagé bon j'étais en état plein avec le micro d'accord je crois que t'as pas tellement compris d'aller la question je crois que non mais je crois que t'as pas tellement compris êtes-vous allé à new york si oui quel type de transport avez-vous pris tu lui expliques comment ça se passe en débat il comprend mais je lui dis tu y expliques tu y expliques tu y expliques parce à mon avis il n'a pas tellement compris le truc donc alors moi tu utilises à brèze d'un gérard pose des conditions et d'abord c'est n'importe quoi avant la fin de l'émission tu pourras peut-être recevoir le restant du café surtout sur ta gueule ok donc qu'est ce que je voulais dire ouais je voulais dire que donc bon ben j'ai été à new york on était j'ai été avec samedi donc on a pris l'avion c'était super bien alors les habitants de new york paye-t-il moins d'impôts qu'à paris on va demander à peau de chambre bon alors et peau de chambre on t'a sélectionné c'est pour quoi faire seulement on t'a sélectionné c'était pourquoi faire pour participer au débat ou pour te foutre de ma gueule je peux vous pas de ta gueule je réponds même pas new yorkien je suis à paris moi non mais moi je te demande à paris c'est pour ça que j'ai 103.5 dix noms ah oui ah ouais dix noms tu prendrais pas les gens pour des cons celui qui s'amuse à seul qui s'amuse à dire que je suis dehors tout à l'heure avait dégagé et je veux pas chercher je vous préviens soit vous répondez correctement question soit vous vous foutez de ma gueule et vous n'avez pas envie de participer au débat ça sert à rien qu'on vous sélectionne ok c'est clair et net oui il y a encore des v1 qui 2 qui te demandent si les nouilles york c'est un plat surrénien à la fin pour l'instant on n'est pas arrivé à la question qu'est-ce qu'on mange là bas alors on va demander un peu de chambre s'il est réveillé alors tu as commencé à tout de ma gueule là ou quoi je n'ai pas entendu la question alors que j'ai demandé la première fois apparemment il a dit j'ai pas envie d'y répondre alors s'il a pas envie d'y répondre du parti c'est pas au débat ça sert à rien de se laisser s'il vous plaît c'est moi qui commande je vous préviens si on vous sélectionne on se calme si on vous sélectionne c'est pour participer au débat si vous voulez pas participer ça sert à rien qu'on vous sélectionne c'est clair et net alors pas de chambres les habitants de new york fait une moins d'impôts qu'à paris d'accord pourquoi aussi il faut peut-être expliquer un peu alors tu peux expliquer non mais attends non mais là je crois que tu as compris ta question mais je ne sais pas y répondre j'habite pas à new york et voilà je crois pas trop mieux maroc et cuisses de blour tu peux répéter la question elle vous commence à me les gonfler là mais non mais j'ai pas entendu mais les oreilles c'est comme le cul ça ça vous avez très bien compris la question maintenant j'arrête et tu me suis pas avec une semaine alors si j'ai si tu n'as pas compris la question je passe à tony merci je crois qu'il comprenne pas le sens de tes questions mon gg alors tony moi je voulais dire que les habitants de new york ils doivent payer un petit peu plus d'impôts parce qu'il me semble que le dollar c'est plus fort en amérique qu'en france en fait ouais mais d'ailleurs tu pourrais témoigner même toi parce que tu as vu que mon c'est qu'ils ont payé plus plus d'impôts parce qu'il paraît qu'il ya un gros monstre qui a tout détruit dans la ville ça fait qu'en fait ils ont payé plus d'impôts mais attendez il ya une question il ya booster qui te demande enfin il te demande pas il explique que les habitants de new york ne paye pas souvent de pot c'est pour ça que les bistrots sont vides non mais non mais je vois pas du tout le rapport gérard thiel et dans les histoires la bataille qui peut nous en parler non non pour l'instant on n'est pas en train de parler des cafés d'accord si je boule je pense que le gros monstre de payer beaucoup d'impôts parce que les gens vont fuir l'art tu me cherches celui qui fait le con était un ton micro parce que tout à l'heure je vais ça va même se terminer pour ton matricule alors si vous pour toi moi je pense que il fait beaucoup d'impôts parce que le gros monstre à l'oeuvre de new york il doit avoir une grosse maison quand même ok saucisse en l'aïe sérieusement moi je pense qu'à new york que les gens ont plus d'avantages que la france parce que notamment les problèmes des impôts comme on parle non mais tu peux préciser le fond de ta mais pourquoi pourquoi parce que il faut qu'il paye des impôts et c'est comme ça d'accord c'est en dollars gérard non sans de son dollar pour l'instant c'est lui de chercher qui c'est qu'on est en train de faire le compte de l'euro pour l'instant c'est lui de chercher qui c'est qu'en train de faire le compte de l'euro pour l'instant c'est lui de chercher qui c'est qu'en train de faire le compte c'est pas demandé de filard ce signal au lieu d'allumer ta club tu essaies de savoir qui fait le con parce que sinon c'est toi qui déroule je te préviens tu la cherches tu de suite jamais toi ce qui fait un l'aïe mystère permet ça suffit d'accord alors tu poules oui ça dépend de ta vie dans new york et à côté du tower bridge tu payes tu peux répéter la piste et j'ai pas compris le tu peux répéter la piste et j'ai pas compris le je peux pas vous dire parce que comme nous on a été on a été dans new york tout ça va être à new york trois jours tu peux pas dire tu connais le york non maintenant en trois jours tu peux visiter new york je suis désolé gérard tu as été dans le groupe quoi tu as été dans le groupe c'est où ça c'est à côté de harlem normal à temps il ya des grands négros avec des couteaux de châssis c'est tout ce signal qu'on a on a visité certains quartiers et je peux vous dire une chose que c'est quand même pas évident de se balader là dedans pour vous dire ça tu dis au fil d'art oui mais je peux pas deviner je n'avais tu peux pas dire c'est ton boulot tu veux faire le sondage maintenant tu fais ton boulot correctement pas du tout d'accord ok gérard en attendant à propos du bronx sur hier c'est on me demande si tu as coulé un bon non non donc j'ai pas vous dire s'il paye plus d'impôts que nous à paris ça je peux pas vous le dire parce qu'on n'a pas eu à faire des recherches non on n'a pas eu l'occasion de trop discuter avec les gens et tout donc en porte que on ta gueule à toi je t'emmerde et est-ce que tu as rencontré à bittelborg de quoi tu as rencontré à bittelborg n'importe quoi toi tu es en train de planer à 24 alors j'ai un tel et à new york pour voir un film c'est ça bah oui c'était quoi le film de cul à zobzila contre les présences n'a rien fait gaffe à toi tony parce que tu as l'heure tu as dégagé je te signale tentera de rester à carreau si tu veux finir les dix questions non mais moi je te dis t'as intérêt à te calmer ok pas de problème mais pour l'instant on n'en est pas arrivé là d'accord d'accord alors on commence quand on est à new york leur spécialité d'abord pour vous donc on va demander à un mec en moto toi tu cherches d'une sorte un trou bleu il est un portable en plus c'est sûr allez-y continuer et attend parce que lui veut pas faire son boulot au c'est bon apparement apparemment il s'est arrêté apparemment il s'est arrêté basique à tout à l'heure je vais me lever j'ai tant que les mines ça va faire tout drôle à vendre avant la fin toi je te le dis merci alors pour calmer le débat oxy qui dit qu'un jour il ira à new york avec toi on y jouera tu verras non mais ça c'est une chanson donc je m'en fous alors que le mensonge c'est pas gentil de ta part m'a ainsi votre manière j'irai pas à new york avec lui j'irai plutôt avec ma femme non personnellement j'ai pas trop on comprend pas trop bien ce qu'ils nous disent à part excuse me excuse me ou qu'un tueur et ça c'est ça là donc on revient sur la 6 à l'aïe il n'a rien fait gérard il ya jupilère qui te demande si à new york a vu starsky hutch non alors on revient à la troisième question que m'en sont quand on est à new york leur spécialité on va demander ça à peau de chambre vous commencez vous commencez à me casser les couilles sérieusement on est déjà la troisième question vous commencez à foutre un foot boîte merde c'est pas bon une amie si ça va pas être bon pour le deuxième débat je le sens alors peau de chambre tu crois qu'ils mangent des frites à bas tous en même temps s'il vous plaît cuisse de velours je viens de répondre à la question non mais je demande à peau de chambre c'est pas qui répond c'est pas mal tony il me semble aussi que c'est beaucoup d'aval de sauvetage de viande rouge et de frites d'accord ce boulot moi j'étais dans un fast food et j'ai pris un menu mcgaver anthony tony tony tony laisse le parler donc j'ai pris un menu mcgaver un couteau suisse d'accord tu vois mon pote à temps qu'il y a un couteau suisse une boussole et un sandwich au paté d'accord tu vois mon pote attendez j'ai un couteau suisse j'ai un couteau suisse et un sandwich au pâté d'accord tu vois mon pote attendez j'ai un couteau suisse et un sandwich au pâté ça c'est pas comestible dans ce cas tu sais ce que tu vas faire tu vas aller voir fildar tu vas aller voir fildar au standard maintenant ça va être terminé pour toi je peux pas l'aider hein non non mais c'est bon tu prends quelqu'un d'autre parce que j'aime pas les cons qui s'amusent à dire des conneries donc on n'a pas le droit d'être drôle saucisson à l'ail alors la nourriture la plus répandue je dirais les hamburgers les hot dogs les frites et les oeufs brouillés et comme c'est ça je prendrais une pomme d'accord cuttool bah moi j'ai entendu dire qu'ils faisaient des hot dogs avec des chiens écrasés mais bon alors cuttool cuttool oui je crois que t'as pas tellement bien compris la question bah si arrête pas vas-y non mais attends tu crois que je m'amuse à faire que ça toute la soirée je vous demande ce qu'ils mangent je t'ai dit ils mangent des hamburgers faits avec des chiens écrasés ouais bah ça ça rend signe qu'on mange des bêtes non mais pas du tout j'ai l'impression que moi j'ai l'impression que tu saurais ce qu'ils font des hot dogs avec des chiens écrasés d'accord alors moi je peux te dire une chose que c'est beau donc le les plats le plus qu'il y ait demandé attends c'est le qui s'amuse à à rnipler comme un comme un un bœuf c'est Sandy alors Sandy à ton merde toi d'accord pétasse ça ça va aller vite maintenant je vous préviens je modère pas mes mots alors ah bon on a vu là gare au gorille donc donc qu'est-ce que je disais donc ouais je voulais répondre donc bah c'est sûr que la spécialité d'avoir c'est hamburger brouillé voire même café du café souvent c'est hamburger café là-bas en règle générale donc ouais non mais c'est vrai qu'ils mangent aussi des glaces mais je pense que merci pour le larsen quand je parle c'est sympa donc je peux dire que c'est vrai qu'il y a aussi il y a des glaces mais quand il fait froid ça m'étonnerait c'est vrai qu'il y a beaucoup Gérard c'est vrai qu'il y a beaucoup d'obèses aux états unis non non mais je peux je peux dire que en règle générale là dans dans dans les quartiers attendez s'il vous plaît merci déjà je vais couper je vais te répondre Tony après mais il y a une question hier c'est que peut-être important oui il y a Jardis Couture qui te demande quand tu es allé à New York est-ce qu'il y avait encore le vaisseau d'indépendance B au-dessus de l'Empire State Building non qu'est-ce que je voulais dire merci c'est pas à Manu qu'il faut les envoyer c'est à moi d'accord alors pour la première question êtes-vous déjà allé à New York alors il y a 50% des gens qui ne connaissent pas New York dans la Manche alors ça la Manche c'est dans le département 50 donc je vois pas du tout l'Europe il y a New York là-bas non mais il faut passer par la Manche pour la New York c'est la mer la mer tu connais pas la Manche non mais attends tu me dirais il faut traverser la Seine pour aller à Suresnes c'est pareil à Broutille 32% des gens répondent ne répondent pas aux mondiaux donc je vois pas du tout le rapport avec êtes-vous déjà allé à New York qu'est-ce qu'il y a encore 18% sont allés à Euro Disney alors je sais pas si Euro Disney ils veulent parler d'Euro Disney celui qu'il y a à Paris mais à New York ça s'appelle pas Euro Disney c'est même pas Disneyland c'est Disney World c'est Disney World je crois que le parc d'attractions là il est en il est en voie de disparition oui Rigo il y a Raptor qui te demande vu qu'il n'y avait pas le vaisseau d'indépendance D est-ce qu'il y avait King Kong sur l'Empire State Building non plus donc je répondais à qui c'était donc Tony tu peux me je répète pas la question donc tu voulais me parler s'il y avait des obèses voilà j'ai très bien compris je répète pas la question si ça te plaît pas mon pote tout à l'heure tu vas dégager et puis je vais pas te répondre tout de suite vas-y on te réponds quand même alors donc pour te dire s'il y avait des obèses là-bas je sais qu'on en a vu pas mal et c'est vrai qu'il faut voir aussi ce qu'ils mangent parce que quand tu vois le nombre de restaurants qui sont les uns à côté des autres ça fait un restaurant tous les 20 mètres à peine grosso modo et je peux te dire une chose grosso modo il y avait un restaurant tous les 20 mètres oui Rigaud avant qu'on fasse une pause non il me demande si attends c'est méchant il parle de Sandy bon alors c'est pas la peine donc alors j'ai une question est-ce qu'ils ont toujours le syndrome de la vache folle au McDo non mais attends je vois pas du tout le rapport avec New York là dans les hamburgers non mais attends je vois pas du tout le rapport parce que le temps c'est pas le temps je vois pas du tout le rapport parce que le temps c'est pas le temps je vois pas du tout le rapport parce que le temps c'est pas le temps je vois pas du tout le rapport parce que le temps c'est pas le temps le truc sur la vache folle ça vient pas de New York ça vient d'Angleterre donc vas-y toi parle plus fort comme ça on comprendra bien donc oui moi j'aimerais te poser une question est-ce que tu crois que la viande qu'ils mettent dans les hamburgers est-ce que c'est la même viande qu'on prend attends 5 minutes tu parles encore plus fort je comprends pas c'est de la viande de riz c'est de la viande de riz dans les hamburgers attends mais je pense à les 24 lignes je suis en train de me faire une question je suis méchant attends 5 minutes je vais bouffer ton saucisson en lait attends tu fermes ta gueule toi connard ok connard écoute je fais les 24 lignes ouais tu fais les 24 lignes et tu parles moins fort quand les gens ils parlent ok allô non Gérard arrête arrête arrête de le frapper Gérard arrête il continue ton débat bon alors saucisson en lait vas-y je t'écoute vas-y avant qu'on fasse ta pause oui donc je voulais te poser la question suivante est-ce que tu crois que la viande qu'ils mettent dans les hamburgers est-ce que tu crois que c'est la même viande qu'en France ? si je pense si parce que c'est faut dire une chose que les hamburgers donc c'est des trucs qui sont apportés d'un peu partout dans le monde donc c'est de la viande hachée donc je pense que ça peut être de la viande fabriquée aussi ouais mais je pense bon on arrête pour cette question maintenant tout le monde a répondu alors que représente New York pour vous et on va s'écouter on va s'écouter quoi ? la croûte des pieds de ma femme sont bonnes avec du caviar et on se retrouve tout de suite après au 0800 308 5000 et 0870 5000 et toujours www.inter.radio sur le site internet que Rigo vous attend à tout de suite à tout de suite à tout de suite au revoir bonne radio et donc il y a toujours Rigo qui vous attend sur le site internet www.fr j'ai une grande nouvelle on a déjà dépassé les 3000 personnes alors qu'il est qu'une heure du matin on est en train de voir tout l'heure ce qu'on a 3104,3 ouais mais j'espère qu'il y en a pas qui vont s'en aller à cause de fil d'arbre on vient de s'écouter quoi Gigi ? on vient de s'écouter les croûtes de pieds de ma femme sont bonnes avec du caviar vous pouvez toujours nous appeler au 0800 308 5000 il y a toujours monsieur fil d'arbre quand il sera décidé à faire son boulot correctement parce que les 24 lignes sautent mais il prend personne au standard donc ceux qui essayent d'appeler n'ayez crainte c'est fil d'arbre qui déconne allô ? hein ? on retient les lignes qui sautent alors donc on récupère cul de poule c'est bien si Manu ? oui je peux avoir les gens ? ah bah excuse-moi merci donc on récupère cul de poule oui je suis là rebonsoir rebonsoir saucisson à l'ail salut salut euh sudboule toi tu viens d'arriver bonsoir euh Tony salut ma couille salut cuisse de poule cuisse de blour pardon moi je suis là euh pot de chambre pour terminer allô Gérard ok alors donc la question c'est que représente New York pour vous ? alors on va demander ça bah on va demander ça bah bah bah cuisse de blour tiens bah pour moi ça représente un lieu historique enfin je parle de la société de liberté ouais et et voilà c'est tout ça euh pour toi euh ah ouais mais toi tu y as jamais été ouais ouais je parle de ouais ouais donc euh avec les boutiques en fait hum d'accord mais euh t'as pas eu l'occasion de d'aller dans dans dans le centre de dans le centre ? non non d'accord euh pot de chambre ? ouais bah moi ça me fait penser aussi à ce qu'il y a de la liberté et puis au cinéma mais attends mais pourquoi le cinéma ? euh je sais pas si t'as vu Dimorphi dans la presse à New York ? mais non mais mais attends mais mais attends pot de chambre non mais je vois pas du tout le rapport que représente New York pour vous toi tu me dis la statue de la liberté et les cinémas mais attends mais je vois pas du tout le il a raison moi j'ai vu aussi euh perversion non mais attends Tony pour l'instant je demande à pot de chambre oui oui bon alors vas-y Tony si tu... bon toi pour toi c'est le cinéma et la statue de la liberté c'est ça pot de chambre ? hum hein euh Tony non mais je voulais dire qu'il avait raison parce que moi j'avais vu perversion anal à New York aussi et ça parlait de New York et puis il y avait Antoine Lefond de New York ah Delphine excuse moi allô ? ouais salut chérie ça va ? ça va ? ouais non mais euh Tony ouais Tony tu arrêtes s'il te plaît ? je te rappelle plus tard là je parle à Jean-Loup non Tony s'il te plaît je parle au bouffe de l'antenne ok ok Tony ! euh ouais et puis aussi ce que ça m'inspire aussi New York c'est des filles blondes qui vont se baigner à moitié à poil en baillot de bain rouge dans la tamise non mais attends parce que là je vois pas le rapport tu veux dire la série ? euh Suzeboule ouais ça me fait penser à King Kong et Godzilla d'accord ouais tu vois tu peux... je vais répéter la première question du débat je vais y répondre non non je répète plus les questions euh saucisson à l'ail alors ce que ça représente bah la statue de la liberté les vacances et évidemment les beaux garçons d'accord ah ben donc voilà cul de poule ouais moi ça représente 6 mois de ma vie je suis partie 6 mois là-bas j'ai fait la fête pendant 6 mois quoi ouais mais alors pas con alors comme toi tu y as été pendant 6 mois ouais donc tu peux me dire qu'est-ce que t'as visité ? j'ai visité plein de trucs mais j'ai surtout fait la fête en fait j'étais dans les boîtes j'étais pas là-bas pour visiter vraiment quoi j'allais à la statue de la liberté dans l'Empire State Building pourrais-tu nous inviter quand même ? voilà pourrais-tu nous inviter ? mais attend non mais la prochaine fois j'y retourne bientôt y'a une question hier c'est Rigaud non ? ouais y'a Davy Wan laisse tomber Rigaud laisse tomber non mais attends euh Rigaud impose-toi Rigaud assieds-toi Gérard toi fais gaffe parce que tout à l'heure j'étais éclaté toi Gérard y'a juste Davy Wan qui te demandait si New York c'était la capitale des Etats-Unis euh je... non c'est Washington pour le remettre à sa place voilà alors euh donc tout le monde a répondu donc euh pour moi que représente New York ? donc bah bien sûr y'a la statue de la liberté y'a le stadium building y'a le central park y'a la cinquième avenue qui est super belle à visiter avec euh Manhattan hein ? Manhattan c'est où ça ? c'est New York ouais mais euh attends tu peux préciser le fond de... Manhattan bah euh Manhattan ? ouais ouais bien sûr on a visité tous ces coins là on a même visité le Wood Boulevard ? mais on a même visité le... les quartiers euh chinois, italiens et... et autres t'as visité le Wood Boulevard Gérard ? hum ? t'as visité le Wood Boulevard ? bah bien sûr on... je t'ai... qu'est-ce que je viens de dire ? on a fait la cinquième avenue on a... on a fait qu'une marché de... durant les... les trois jours mais qu'est-ce que t'as dit en le... attendez attendez tout le... tout le monde... bah pas tous en même temps ouais mais Tony je voulais te demander si t'étais allé dans le quartier euh Black à Amsterdam bah je viens de... eh qu'est-ce que je viens de dire dans les quartiers noirs espèce de... d'abruti ? ah excuse-moi j'ai pas entendu un pralem donc c'est un pralem ? bon euh celui qui... celui qui reçoit du monde là c'est plus la peine qu'il... qu'il participe au débat parce que ça commence à m'énerver eh dégage de chez toi tu les fais pas rentrer ok ok on veut pas... on veut pas... on veut personne arrêtez de rigoler là tu gères un peu ? eh tu fais quoi ? oh non je fais... tu fous ta merde mais non mais j'ai pas que j'ai une émission à faire avec le boeuf de soin de... oh non mais t'es en train de foutre ta merde ou quoi toi ? oh là là c'est nous New York euh donc qu'est-ce que je voulais dire moi c'est tout Gérard ? oui il y a Ethan sur IRC qui te demande si t'as rencontré des stars à New York euh alors qu'on... non on a pas eu l'occasion d'en voir à part que ils puissent... ceux-ci sont à l'aïe il y en a dû voir euh... euh moi j'ai vu Al Pacino et... et Jean Reno bon alors celui-là c'est plus la peine maintenant Fildar tu fais ton boulot correctement président de la république des Etats-Unis Bill Clinton d'accord euh Fildar écoute ton micro et tu me gères celui qui est en train de recevoir du monde parce que ça m'énerve je voulais te poser une question Gérard je voulais te poser une question est-ce que t'as été dans la... dans la rue tu sais où ils font leurs... ils laissent des empreintes de pieds là c'est avec leur nom ? euh ouais on l'a visité aussi ça on y est passé c'est Hollywood ? ouais c'est dans Hollywood boulevard bon Fildar tu gères maintenant ça commence à bien faire je vais ouvrir alors d'ailleurs je vais t'ouvrir mon poing dans ta gueule toi t'es allé à South Fork ? non euh les touristes vont tu le puces ? je vais plus facilement à New York qu'à Roubaix c'est pas la même ambiance ouais ouais c'est sûr c'est pas pareil elle est bien elle est bien la question donc euh on va demander à Tupoul ouais bah ouais moi je vais plus facilement à New York ouais je suis désolée pour les gens qui habitent Roubaix mais euh non non je peux pas là d'accord euh... ceux-ci sont à l'aïe ? non moi je pense que les touristes peuvent se rendre plutôt à Roubaix plus facilement ouais non mais attends parce que y'en a un qui est en train de faire le con tout à l'heure si je me lève il va s'en prendre une il va dégager des studios vite fait lui ouais donc je te disais je pense que les touristes peuvent se rendre plus facilement à Roubaix je vais t'expliquer pourquoi parce qu'à Roubaix ils peuvent s'y rendre en voiture ou en train et que c'est moins cher que l'avion c'est à quoi avoir à Roubaix ? à l'avion quand tu payes ton billet de train déjà que ça te fait cher en plus tu fais la queue pour avoir ton billet de train donc euh... mais t'as pas la statut de la liberté à Roubaix mais y'a des "bouldings" à Roubaix ? y'a pas de "bouldings" là-bas non mais vous la laissez parler c'est tout ok, bon merci euh... Susboul ? bah moi je pense que c'est quand même plus facile d'aller à Trifouille et Jours parce que c'est en France et c'est plus près n'importe quoi toi Tony ? ouais moi tant qu'à faire je préférerais aller à New York avec plus de poules qu'aller à Roubaix ouais ouais ouais ouais euh... Cuisse de Blour ? bon bah je préfère aller à New York c'est clair on t'emmènera on fera des trucs à Troyes attends attends y'a D-Light sur IRC ils demandent quelle langue on parle à Roubaix bah à Roubaix on... Roubaix quoi ? euh... non on parle le ch'ti-mi donc comme Roubaix c'est dans le nord donc on parle le ch'ti-mi voilà euh... Potcham pour terminer ouais mais on s'intéresse plus facilement à New York aussi ouais on part tous les 5 là d'accord, bah moi je peux vous dire je préfère aller à New York qu'à Roubaix parce que à New York au moins c'est... on t'en met un peu comme moi alors ? moi je préfère aller à New York parce qu'il y a plus de trucs à visiter que dans le nord de la France voilà voilà voilà donc alors y'a peut-être un... un petit sondage là mais je pense que ça m'étonnerait que ça fasse plaisir aux gens non monsieur Edou... Edou New-Yorkais de naissance 60% ont répondu euh... euh... 60% des gens le sont depuis le 1er janvier je vois pas du tout le rapport ça ça a rien à voir euh... après j'ai 30% des gens sont... des gens le sont depuis que Dieu est là alors là je vois pas du tout le rapport 10% des gens se... se sont fait vacciner contre New York cet après-midi n'importe quoi ça c'est des conneries au PD de... au PD de Fildar donc ça a rien à voir avec les questions donc je sais même pas pourquoi qu'on me donne des sondages comme ça, ça sert à rien du tout la sixième question celui qui s'amuse à vouloir répondre qui est pas sur l'antenne il va s'écraser merci bonjour Gérard alors qu'est-ce qui vous fait le... qu'est-ce qui vous a fait rêver à New York bonjour Gérard hé ça y est t'as fini ça y est t'as fini toi de dire allô Gérard là le connard putain c'est bizarre on l'entend plus alors euh... bonjour Gérard bah moi je sais pas aller à New York alors euh... je peux pas savoir ce qui peut me faire rêver le plus quoi non mais attends tu peux imaginer parce que t'as... ils en parlent quand même... non mais tu peux imaginer ils en parlent quand même à la télé non mais tu peux imaginer ils en parlent quand même à la télé non mais tu peux imaginer ils en parlent quand même à la télé ouais d'accord je crois que euh... il est blasé il est blasé non non pas du tout mais euh... j'ai une idée je crois que je vais le dégager ouais je pense plus de blours bah les beaux garçons le soleil t'as pas besoin d'aller à New York ma petite t'as pas besoin d'aller à New York ma petite tu viens à Paris bon Tony s'il te plaît tu te calmes non mais Tony tu te calmes ou sinon tu vas faire comme pas de chambre non mais Tony tu te calmes ou sinon tu vas faire comme pas de chambre non mais pourquoi aller si loin on la laisse parler ok vous la laissez vous la laissez Tony s'il te plaît tu laisses parler les gens après on te laissera parler d'accord alors tu laisses parler un peu les gens aussi ok merci donc cuisse de blours c'est bien ce que je dis mais je suis allée que 3 jours donc euh... tu y as été 3 jours ? ouais et de quand à quand ? bah j'en sais rien moi il y a 2 ans au moins d'accord Tony donc maintenant ouais mais New York j'ai eu l'occasion de connaître ouais mais New York j'ai eu l'occasion de connaître mais en fait que par la télé et puis ça me dit rien en fait je viens à Paris oui oui donc New York pour toi personnellement ça ça me dit rien franchement d'accord euh... suisse boule ? bah moi j'aurais voulu rencontrer Jock Ewing mais il est mort non mais attends qu'est ce qui vous a fait rêver à New York ? bah c'est Jock Ewing dans son orange non mais attends je vois pas du tout le rapport avec la question Tony s'il te plaît merci bon alors suisse boule ? et bah c'est Jock Ewing parce que... bah vous vous réveillez un peu parce que là c'est mort quoi oh punaise bon allez au revoir pour les saucissons à l'ail oui alors moi je vais te dire franchement ce qui me fait vraiment rêver c'est d'habiter dans un grand building et de voir les habitants de haut n'importe quoi non mais ça euh... même si on monte au 40ème étage on te voit non là je vais te dire une chose que ça m'étonnerait Tony non non Tony je vais te dire une chose Tony non mais moi j'ai pas d'odeur Tony s'il te plaît merci tu te poules bah moi en fait j'ai rêvé de tout et puis en fait si tu claques un peu de frites tu peux assouvir tous tes fantasmes là bas quoi d'accord je répondrai après oui Rigo sur l'IRC qui te demande si tu t'es bien bourré la gueule à New York là je vais te dire une chose tu vois là c'est que le plus gros problème à New York c'est que si tu te fais piquer avec de l'alcool tu vas directement en cabane donc il faut mais il n'y a pas beaucoup de cafés à New York euh non c'est plus des c'est plus au nord hein on va préciser même avec saucisson à l'ail comme on y a été donc on peut préciser c'est que là bas c'est rare que tu as le droit de boire de l'alcool ou sinon faut que tu la planque dans un espace moi je crois pas y avoir été avec toi c'est moi qui y suis allée c'est pour ça que là tu dois faire arrête arrête c'était avec toi vous êtes allé voir Zodzilla ? saucisson à l'ail ? tu te fous de moi là ? bah oui je me fous de toi attends toi je te jure t'as intérêt de répondre aux prochaines questions correctes il y a Rennes sur l'IRC qui te demande si tu te fais piquer avec de l'Adidas tu vas en prison aussi parce que le parfum tu as le droit d'en acheter mais pour revenir à la question d'Ethan donc pour l'alcool il faut que ça soit planqué et ça je pense que personne pourra me le contredire c'est qu'ils mettent ça dans des dans des poches dans des trucs qu'on fasse pas les gars ah mais quand tu vas dans les cafés c'est pas dans les cafés arrête arrête de lui mettre des coups de pied arrête de lui mettre des coups de pied tu vas te prendre le poing dans ta gueule dans peu de temps allez enchaîne le alors donc moi qu'est-ce qu'il m'a fait qu'est-ce qu'il me fait rêver oh vous fermez votre gueule ou quoi là maintenant ah ouais Gérard ce que tu aurais dû faire c'est mettre de l'eau de vie dans une bouteille d'évian comme ça tu aurais eu ta douce quotidienne d'alcool oh Gérard ah oui j'ai fait un like et il m'écrit pas du tout il est parti ? non d'accord vous allez arrêter de punir votre connerie maintenant vous allez peut-être reprendre le débat correctement I'm leaving today branche ta gueule toi connard un jour Gérard sera à New York avec toi Gérard Gérard Gérard Gérard Gérard Gérard Gérard Gérard Gérard ton débat toi Gérard assieds-toi Gérard assieds-toi et reprends dans le calme avec les auditeurs c'est bon un jour Gérard sera à New York avec lui allez allez allez ouais marque toi bien toi espèce de connard va c'est une question bon les auditeurs oui la question de Gérard on écoute alors pensez-vous qu'il fait jour et qu'il bouge salope bon et ben c'est simple on va s'envoyer un livre non mais on peut pas non non tu peux pas je veux pas le savoir moi Fildar il fait pas son boulot on va reprendre le calme Gérard on arrête on arrête il y a un petit débat calmement il y a D-Light sur l'IRC qui te demande si tu étais en première classe dans l'avion et où étaient la piscine et les cours de tennis dans l'avion déjà pour lui dire il n'y a pas de piscine et il n'y a pas de cours de tennis en première classe c'est réservé aux hôtesses de l'air donc on n'a pas eu l'occasion d'être en première classe il n'y a pas de première classe dans les avions il y a un écran Gégé comment ? il y a un écran ouais il y a un écran télé donc qu'est-ce que je voulais dire du béton et du macadam la plus belle piscine c'est la plage tu sais ce qu'on va faire si tu veux poser la question on va mettre un petit disque je crois que c'est mieux toi tu vas me gérer ça parce que tout à l'heure je vais t'éclater je le sens combien on est ? on est toujours plus de 3500 ça va alors je peux faire le con je crois que tu vas faire le con on va le faire avec mon pied dans le cul pose la question Gérard alors pensez-vous qu'il fait jour à New-York quand il est 18h à Paris et qu'il pleut et on s'écoute les petits pousseaux en Paname avec les chiens d'Henri en break je te signale et voilà donc on vient de s'écouter les petits pousseaux de Paname avec les chiens d'Henri en break il est toujours 1h22 exactement donc vous êtes toujours sur Fun Radio donc vous pouvez toujours nous appeler au 0803 085 ou au 0875 où il y a Fildar qui vous y accueille qui ne veut pas vous répondre c'est pas de notre faute et puis Rigo toujours toujours l'internet lui il bosse bien donc www.fairfunradio.fr et ouais ? donc tu me disais ? il y a rien là maintenant ? on est un peu moins de 4000 3856 moins 3 parce qu'il y en a 3 qui viennent de partir bah ouais à cause de Fildar bravo ils allaient se coucher ils connaissent New-York et ils s'en foutent de ton débat tant pis pour eux donc on est quand même à 3800 c'est quand même pas mal à 1h23 du matin donc c'est bien donc on récupère Cutpool bonsoir Gérard, bonsoir Manu, bonsoir Fildar bonsoir bonsoir à tous je te prends par devant et par derrière y'a pas de problème t'es salope t'es salope à ton merde toi pétasse c'est quand tu veux hein oh ceci soit à l'aïe attend je réponds à celle qui vient de dire y'a pas de problème Gégé non mais moi je t'emmerde salope au pied c'est gentil hein d'accord ? alors celle qui s'amuse à dire des conneries va dire tout de suite d'accord ? c'est clair et net plus de blour j'ai le boule j'ai les boules j'ai les boules attends j'ai les boules c'est pas moi c'est bien c'est bien pour en venir au débat pour en venir au débat tu le dois 1h24 on recommence juste après la pause toi tu fous ta merde tu les laisse dire les auditeurs c'est bien ils ont raison continue à cause de toi ça va descendre celui qui s'amuse à recevoir du monde c'est pareil donc j'accueille le dernier auditeur c'est Géléboule qui gratte bonsoir dis donc tu pourrais mieux écrire on t'a pas appris à écrire bonsoir à tous bonsoir bonsoir bonsoir bonjour bonjour enchaîne Gérard alors 7ème question le menu il est vélaire aujourd'hui bon toi tu le teues s'il te plait pensez vous qu'il fasse pensez vous qu'il fesse oh tu la viens une salope ok quitte poule ou puce de blour là je vous préviens vous allez vous calmer les deux salopes qui nous restent Gérard pour en revenir au débat il y a Yankee sur l'IRC qui te demande si on peut payer les putes de New York en euros alors là pour l'instant je peux pas répondre parce que l'euro c'est pas avant janvier 99 et les billets sont pas avant ça sera que les pièces qui seront sorties maintenant toi je t'emmerde ok bonsoir lui bonsoir allez pour Tony c'est terminé Tony c'est terminé pour lui allez hop tu le bires tu prends quelqu'un d'autre allez hop terminé comme ça on entendra pas le téléphone sans arrêt Gérard c'était pas la même sonnerie que le téléphone de Tony c'était chez moi mais j'ai décroché ça commence à bien faire ça y est j'ai décroché le téléphone Manu tu m'éteins le double son j'ai rien mis Gérard mais j'ai rien mis je m'en fous je pense pas à la 7ème question vas-y vas-y bon alors fil d'art tu gères ou sinon je t'éclate écoute je cherche des auditeurs je peux pas tout faire autrement je fais la vaisselle aussi pensez-vous qu'il fasse jour à New York quand il est 18h à Paris et qu'il pleut on va demander à ça à cul de poule ça dépend ça dépend ça dépend qu'il soit laissé lever ou pas non mais tu m'as arrêté de dire allo constamment parce que ça commence à me faire chier là d'accord bon alors tu t'écrases toi pour l'instant quand je t'appellerai poitrine tu sortiras de sous le lit toi excuse moi à la place de Tony j'ai trouvé un auditeur très sympa au demeurant qui s'appelle mon chéri. Salut ! Salut mon chéri ! Tu peux foutre où tu veux, tu le sais. Salut ! Salut ! Je te signale, Fildar, fais gaffe à ce que tu me prends comme auditeur parce que c'est toi qui es responsable si tu ne me prends pas au-dessus des 24 lignes. D'accord ? On verra toi. Alors saucisson à l'ail. Alors te dire qu'il pleut quand il est 18 heures, je ne crois pas. Pensez-vous qu'il fasse jour à New-York quand il est 18 heures ? Et qu'il pleut ? Je n'ai pas compris la question. Alors je te dire qu'il pleut là-bas, je ne crois pas. D'accord. Je ne pense pas non plus. Attends, saucisson à l'ail, je te préviens, tu es de poule ou tu es de mort, vous avez vu ce que j'ai fait ? Vous avez vu ce que j'ai fait ? Je te préviens, tu es de poule ou tu es de mort, vous avez vu ce que j'ai fait ? Je te préviens, tu es de poule ou tu es de mort, vous avez vu ce que j'ai fait ? Vous fermez-vous sur vos gueules, vous fermez-vous sur vos gueules, les deux pétasses. Ce n'est pas moi. Tu ne nous insultes pas comme ça, alors ce n'est pas moi. Alors vous fermez vos gueules. Ce n'est pas nous. Mais effectivement, je crois qu'il peut faire jour quand il est 18 heures à Paris, voilà. Et quand vous avez fini de prendre de la poudre de ma gueule, là. Je sens qu'il va prendre mon poing dans ta gueule. Tu n'écoutes même pas ce que je te dis, là. Pour l'instant, il y a des connards. Moi, tu n'écoutes même pas les questions qu'on te pose. Gérard, t'as payé combien pour faire la big pile ? Et ta soeur, elle a payé combien pour faire une pipe ? Bon, Gérard, tu continues ton débat, là ? Tu sues, franchement ? Bon, s'il vous plaît, s'il vous plaît, les auditeurs, on se répond à la question. Alors, on continue, je repose la question. Saucisson à l'ail, pensez-vous qu'il passe jour à New York quand il est 18 heures à Paris et qu'il pleut ? Je viens de te répondre, je viens de te dire qu'il ne pleut pas et que là-bas, effectivement, il peut faire 18 heures quand il fait jour, là-bas. D'accord, je te prends. Moi aussi. Bon, alors, toi, tu dégages comme ça, t'as tout de suite répondu. Mais il n'a pas répondu, Gérard, laisse-le répondre. Mais attends, pour l'instant, il est en train de me prendre pour un con. J'ai dit que tu voulais que je te prenne, c'est pour ça. Toi, Manu, tu fermes ta gueule et tu fais ton boulot correctement. Je n'ai rien dit. Quand je te prends, tu réponds à la question pour la dernière fois. Mais bon, moi, je pense qu'il fait nuit à New York. Quand il fait jour, à Paris, du Luxembourg. Bon, alors toi, tu n'as pas compris la question, tu dégages ça. Réexplique-lui, Gérard, plutôt. Pensez-vous qu'il passe jour à New York quand il est 18 heures à Paris et qu'il pleut ? C'est clair, net, précis. Non, moi, je pense qu'il fait nuit à New York et qu'il neige à 18 heures à Paris. A 18 heures, il fait déjà jour à New York et à Paris, il fait nuit. Je te signale. Oui, mais ça, c'est pas vrai. Parce qu'il y a un décalage d'horaire de 6 heures. Pourquoi tu ne l'expliques pas, ça, au lieu de leur poser une question ? Toi, tu fais ton boulot, tu la perds. Ce n'est pas au Big Bill, là. Ce n'est pas à toi que je m'adresse. Ce n'est pas au Big Bill, tu ne poses pas des questions pour gagner des cadeaux. Ce n'est pas à toi que je m'adresse. Gérard. Oui ? Ça dépasse, ça dépasse, quoi. C'est qui ? C'est les saucissons à l'ail. Oui ? Gérard, pour revenir au débat, il y a un VNS sur l'IRC qui te demande si les New Yorkais dorment sous la pluie le jour à cause du décalage d'horaire. Ça, je ne peux pas dire parce que le décalage d'horaire, je ne sais pas s'ils le font aussi ou pas. Donc, je ne peux pas lui dire. Est-ce que toi, tu en as vu qui dormait le jour sous la pluie ? Là-bas, on n'a pas eu l'occasion d'avoir de pluie, donc je ne peux pas le dire. On n'a pas eu l'occasion d'avoir de pluie. OK. Alors, tu es en série ? Oui. Moi, je pense qu'à New York, déjà, il pleut tout le temps. Ah oui ? C'est un phénomène qu'on peut se trouver. Et en fait, à cette heure-ci, à New York, il doit faire jour. Il est quelle heure ? Une heure plus ? Il est 18h17 à New York, exactement. Oui, il y a... Oui, oui, oui, 18h17. OK. Cuisse de blour ? Je n'en sais rien du tout. Attends. Tu n'en sais rien ? Oui, c'est vrai. Non, mais ça va, tu ne veux pas que Sam t'achète un lit non plus, non ? Oui. Tu fais bien ton boulot, là ? Bah ouais. Oui. Ah bah, dis donc. Tu ne me dirais pas. Bonne nuit à toi. Ouais, bah, l'autre, il est vautré sur les deux sièges. Monsieur, il n'est même pas capable de prendre les gens au standard. Alors, les 24 lignes sonnent. Les gens, ils s'amusent à appeler. Monsieur ne veut rien prendre. Monsieur, il est fatigué, il faut le comprendre. Non, mais il est fatigué pour rien de la journée. Bon, Gérard, pour en revenir au débat, il y a Ethan sur IRC qui demande si tu as visité une radio à New York, genre Fun Radio. Non, là-bas, on n'a pas eu l'occasion de visiter. Tu as visité des radios. Si, à ce qui paraît, tu as été invité pour l'émission de World Siam. C'est ça, tu as raison, toi. J'ai les boules qui grattent. Il y a des champagnes pour ça. Oui, Gérard. Moi, je suis, je suis d'origine New Yorker. OK. Et je pense que, enfin, je pense que, enfin, le temps, le temps, oui. Oui, oui. OK. D'accord. D'accord. Tu as vu Big Bill ? J'ai les boules qui grattent. Tu dégages. Au revoir. Au revoir. Au revoir. Tu ne veux pas dégager. Il vient de New York. Non, je ne le dégagerai pas. Au revoir. Au revoir. Je ne le dégagerai pas. Il est de New York. C'est intéressant. Il prend son boulot comme il faut. J'ai vu la Big Bill Tower. OK. Bon, ben, moi, quand Pilar prend son boulot, je continuerai le débat. Attends, j'essaye d'avoir des New Yorkais parce que tu fais un débat sur New York. Je me suis fait chasser ta journée. Le New York. Quand ? Quand ? Quand ? Quand ? Tu n'as rien foutu. Tu n'as rien foutu. Tu n'as rien foutu. Alors, on le dégage. Non, on le garde. Non, non, non, non. Gérard, il y a Turpentine sur l'IRC qui te demande si tu es monté sur la statue de la liberté. Est-ce que d'en haut, tu as vu la tour Eiffel ? Non. La statue de la liberté, de toute manière, elle était trop loin et on n'a pas pu monter dessus. Elle était partie ? Non, elle est trop loin par rapport à là où on était du 102ème étage du… je ne sais plus où. Vous étiez au 102ème étage ? Je ne sais pas si il n'y a que 100. Il n'y a que 50 étages. Alors, Tony, je te signale que je viens de te faire connaître encore. Non, Tony n'est pas là. Il n'est pas là. Tony, il s'est couché. Oui, oui. Enfin, bref. Fildar, il fait vachement bien son boulot. Ça se voit qu'il va vite dégager de ce qu'on a. Il fait bien son boulot comparé à certains. Oui, il ferait mieux son boulot. Ça irait peut-être mieux pour gérer le débat. Pour l'instant, il fait que de la merde. Oui, c'est ça. C'est ça. Bon, Gérard, c'est mieux ton boulot. Il pose ta question, là. Enchaîne. Attends. Toi, si tu n'es pas content, tu vas dégager. Ok, super. Ok ? Ok, super. Bon. Alors, huitième question. New York est-elle une ville plus dangereuse que Paris ? Si oui, pourquoi ? On va demander à Saucisson à l'ail. Oui, absolument. Parce que New York, je pense qu'il y a plus de problèmes avec la police. Oui. Et on entend que c'est plus dangereux que Paris. Oui, oui. Parce que New York, c'est moins dangereux que Paris. Et New York, c'est moins dangereux que Paris. Et on entend souvent les sirènes. Les sirènes des polices, si tu veux. Oui, il y a la police et les ambulances. Et il y a souvent des meurtres aussi. Mais ce qu'il y a, c'est que, comme on y avait été, c'est bête qu'on n'a pas pu voir les… Oui, mais voilà. C'est un genre de sirène comme ça. Voilà. Non, non, non. Pour l'instant, c'est un genre de sirène. pour l'instant celui-là c'en est un qui s'amuse donc ok c'est bien comme réponse mais parle un peu plus fort devant ton combiné s'il te plaît s'il s'en aille parce que c'est ce que je fais mais je peux pas faire autrement ok, cute poule non non c'est pas plus dangereux New York, il suffit de pas sortir la nuit bah de toute manière il y a des gens qui sortent quand même la nuit tu sors dans la journée, tu crains rien même dans la journée je peux te dire on peut te confirmer avec saucisson à l'ail on pourra te... je t'ai dit Gérard que je ne te connaissais pas donc pourquoi tu crois que je te connais moi je te connais pas ouais ouais, friconne ma gueule toi je me fous pas, tu dis ça pas mal que je ne te connais pas c'est ça, t'as raison je te prends quand tu veux y'a pas de problème non tu réponds bon d'accord, c'est terminé pour lui je te prends, t'es là tu réponds allô on entend très mal ouais, c'est vrai ça c'est bon, je me prends je te prends, tu réponds à la question, s'il te plaît je me prends par la barbichette le premier de nous deux qui... ne me fais pas comme Fildar, d'accord ? je me prends contre lui sinon tu seras pas celle du standard, toi ah merde DG ? je te prends par la bistouquette moi je t'emmerde t'emmerde parce qu'ils sont à l'ail, c'est bien ? t'emmerde ? je te prends, tu m'emmerdes ? bravo, bravo j'ai le débat ok connard bon allez hop, terminé, moi je fais conclusion, je retourne à la septième terminé, grâce à Fildar, on arrête ici mais non, c'est pas de ma faute attends, tu traites saucisson à l'ail et c'est de ma faute ? t'es égal, tu fais même pas ton boulot mais je le fais mon boulot, il est fait non, attends, il est mal fait t'es même pas capable de dire à l'autre t'es à l'antenne, tu réponds à la question mais si, t'attendais non, même pas, même pas attends, t'es pas capable de répondre si tu réponds à la statue de la liberté tu sais même pas répondre ta gueule ferme ta gueule et c'est tout alors je te prends pour la dernière fois ah la derbichette ok ok ok ah Gérard, j'ai perdu 200 personnes sur l'IRC parce que t'as dit trop de gros mots non mais c'est bien, merci Fildar aussi non mais c'est toi qui les a dit les gros mots Gérard ouais mais Fildar il fait même pas son boulot, il est même pas capable de gérer un stand-up bon je te prends bon je te prends à part travailler pour Max à partir de 11h30 lui trouver des auditeurs potables le débat c'est sur New York il y a que Manu qui est capable de bosser en plus ça continue c'est Manu qui va prendre le standard ça commence à bien faire alors je t'en prends pour la troisième fois tu réponds à la question ou tu dors je t'en prends pour la troisième fois mais faut que tu me prennes moi mais c'est qui celui qui dit allo ? putain mais tu commences à me cacher toi allo allo je t'écoute Gérard je t'écoute Gérard 2276 ça va ? bon allez les gars vous me faites chier j'arrête mais non mais non je te prends tu es tout seul à l'antenne comme ça Gérard t'entendra vas-y je t'écoute Gérard non tu réponds à la question je ne la répète plus peux-tu la répéter s'il te plait putain mais Fildar tu commences à me cacher les couilles sérieusement tu commences à me cacher les couilles sérieusement c'est pas de la faute de Fildar sérieusement tu commences à me cacher les couilles allo ? il y a tellement de boxons que j'ai pas entendu la question alors New York est-il une ville plus dangereuse que Paris si oui pourquoi ? alors New York est-il une ville plus dangereuse que Paris si oui pourquoi ? bah oui parce que je pense qu'il peut y avoir des criminels à New York comme à Paris bah oui parce que je pense qu'il peut y avoir des criminels à New York comme à Paris d'accord alors mon chéri maintenant ouais bah moi je pense que New York c'est bien plus dangereux que Paris une question IRC une question IRC est-ce que tu t'es fait arrêter à la douane pour transport de substances illicites dans ton froc ? est-ce que tu t'es fait arrêter à la douane pour transport de substances illicites dans ton froc ? non parce que à la douane donc pour répondre à cette personne donc à la douane on est passé ils nous ont simplement souhaité un bon séjour ils nous ont simplement souhaité un bon séjour donc c'est tout voilà ce que je pouvais dire ouais bah toi détecteur détecteur de bagages détecteur de bagages je voudrais bien savoir qui c'est qui vient de me sortir ça encore comme connerie Gérard il y a Turpentine qui te demande est-ce que c'est vrai qu'à côté de la statue de la liberté ils ont mis le gargantua de Mirapolis ? non non pas du tout alors cuisse de blour c'est bon cuisse de blour bah je viens de répondre là ok donc qui c'est qui nous reste l'autre joli boutique moi je pense que c'est plus dangereux parce qu'il y a plus de circulation dans la ville parce qu'il y a plus de circulation dans la ville j'ai vécu à New York j'ai vécu à New York j'ai vécu à New York et je pense que c'est plus dangereux et je pense que c'est plus dangereux et j'ajoute et j'apprécie beaucoup ok donc celui qui recommence à faire ça va dégager celui qui recommence à faire ça va dégager si vous pouvez arrêter de jouiller merci Ça commence à me gonfler, là. Déjà, le premier débat, ça va aller vite. Je fais la dernière question, là. Il est 1h40. Je fais la dernière question. Alors, à votre avis, quelle est la différence entre Paris et New York ? Oui, c'est bon. Vas-y, vas-y. C'est qu'est-ce que j'aime bien ? Non ? Mais t'as contenté, j'en sens plus. Oh là là ! C'est énorme, je le dirais. C'est énorme, mais c'est bon. Alors, je répète. On a compris Paris et New York. Je n'y voyais pas. Donc, quelle est la différence entre Paris et New York ? Voilà. Donc, je peux répondre, c'est saucisson à l'ail. Vas-y. Donc, là-bas, à New York, l'avantage, c'est que les gens, en particulier en été, sont plus habillés cool que les Français à Paris. Et l'inconvénient, c'est qu'il n'y a pas de papier par terre, évidemment. Tu as une amende, quoi. D'accord. Et en plus, tu te fais arrêter par la police. C'est dangereux. Vas-y, c'est bon, c'est bon. Alors, vous arrêtez quand je parle. OK, super. Celui qui s'amuse à faire des conneries quand les gens parlent, tout à l'heure va gerber. Je ne vais pas le chercher. Alors, cul de poule. Oui. Il y a 6 000 bornes entre Paris et New York. Non, mais attends. Allô ? Allô ? Bonjour. Allô ? Allô ? Ah là là, on n'entend rien. TF1, bonsoir. A votre avis, quelle est la différence entre Paris et New York ? Cul de poule. S'il te plaît, tu réponds. Oui, je viens de te répondre. Vas-y, vas-y, vas-y. Oui, il y a 6 000 kilomètres. Alors, je te prends. Non, mais non, je ne veux pas que tu me prennes. Tu réponds à la question ou tu dégages ? Bonne nuit pour lui. Alors, ce coup-là, c'est terminé. Le fil d'air, c'est fait. Mon chéri. Fais gaffe parce que toi aussi, tu vas faire comme lui. OK. Alors, la différence entre Paris et New York, je pense qu'il n'y en a pas beaucoup. Alors, tu peux expliquer pourquoi ? Parce que la Tour Eiffel, la Statue de la Liberté, déjà, ce n'est pas pareil. Non, attendez. Tu n'as jamais vu la Statue de la Liberté à Paris, toi ? Non. Il y a une mini-Statue de la Liberté à Paris. Tu l'as déjà vue, Gérard, quand même, près de la Seine. Non, mais je ne vois pas du tout le rapport. Je te demande, à votre avis, quelle est la différence. C'est cassé, c'est tout. Voilà. D'accord. Regarde, Gérard, il y a Choc Norris à la télé. Fils de bleu, toi, tu fais ton boulot et tu fermes ta gueule. Quel chêne, quel chêne ? Non, mais l'autre, il est complètement charbé. Il est à moitié fou, lui. Fils de bleu. Oui, je pense qu'à New York, c'est toujours beau. Et à Paris, je ne peux pas. Vous vous tenez derrière. Sans déconner, vous êtes trop lourds. Oui, on est comme nous. Oh là là, je sens. Fils de bleu, tu réponds et c'est terminé, on fait conclusion. Non, non, non. Le premier, c'est de la merde. Grâce à lui, le deuxième, ça va être encore pire. Alors, je crois qu'autant conclure sur la neuvième et terminer. On attaque le deuxième. Excuse-moi, Gérard, avant qu'on fasse ta conclusion, à la place de Je te prends, on accueille Chias de Noël. Bien sûr. C'est encore des mecs. C'est encore des mecs. Ça fait une heure que j'appelle au standard. J'ai galéré, arrête. Je veux bien croire. On verra. Gérard, il y a René sur IRC qui te demande si à New York, les gens qui crient sont considérés comme des criminels. Alors, les gens qui crient sont-ils considérés comme des criminels ? Je ne pense pas. Tu n'entends pas condamnément crier dans New York, à mon avis. Gérard ? Oui ? Ces soucis sont là et j'aimerais te poser une question. Oui ? Gérard ? Oui ? Do you speak English ? C'est bon, vas-y, c'est bon, vas-y. Non, mais ça suffit. Vous arrêtez maintenant. Moi aussi, je vous parle. D'accord ? Donc, je vous pose une question à Gérard. Do you speak English ? Yes. Donc, yes, tu parles anglais. Voilà. Voilà, c'est tout ce que je voulais savoir. Tu es de l'homme lourd. Pour finir. Je disais qu'à Paris, c'est jamais beau. Pas le temps de merde. Et à New York, c'est bien. D'accord. Donc, je tiens sur... Hello ? I don't know if I have a question. If you speak English, I don't have a question. Just to answer the question, please. Vas-y, Rick. Yes, I think the difference between New York and Paris is because there are more circulation in New York. And that is between the person dancing. Non, mais attends, mais lui, de toute manière, c'est même plus la peine que tu le dis. Regarde dans l'équipe. Bon, euh... Gérard, t'as dit que tu parlais anglais. Tu peux traduire, s'il te plaît ? Non, va pire tout, toi. Tu vas te faire enculer. Chiasse de... Je sais pas quoi, là. De Noël. Chiasse de Noël, ça va arriver bientôt. Vas-y, toi. Écoute, c'est dommage, parce que moi, j'arrive à la fin du débat et, en fait, j'aurais pu te faire plein de trucs parce que mes parents sont américains. Donc, voilà, c'est dommage que j'arrive à la fin. Ben, je suis désolé. Voilà, ben, écoute... C'est pas de ma faute, parce que... Non, non, non, attends, je vais te dire chiasse de Noël. C'est pas de ma faute. Ah, bien sûr, bien sûr. Non, non, c'est pas moi. C'est pas moi qui... C'est jamais, jamais, jamais. C'est vous, pas les auditeurs. Moi, je peux soumettre une idée, c'est qu'étant donné qu'il vient d'arriver, Gérard, on peut le garder pour le deuxième débat. Non, c'est pas toi qui commandes. C'est moi. Je te demande. C'est moi qui commande. Je te demande. Tu me donnes l'air au deuxième débat, t'es pas là, tu te casses. Non, non, t'es plus là. T'es plus là. T'es plus là, toi. C'est ton chéri. Vu que je suis à l'arrivée, je peux rester aussi. Non. Ben, ouais, je peux rester. Non, pas de rien. S'il te plaît. Bon, vous, je vais répondre à votre avis. Quelle est la différence entre Paris et New York ? C'est que, comme Saucisson a dit, là-bas, les gens sont plus cools, sont mieux habillés que dans Paris et que là-bas, c'est plus propre parce que dès que tu jettes un papier par terre, de toute manière, t'es tout de suite sanctionné. Tandis qu'à Paris, c'est dé-gueu-lasse. C'est quoi, c'est la ville la plus dégueulasse que d'autres villes. Moi, je peux vous dire que New York, par rapport à Paris, c'est vachement plus propre et les gens sont vachement plus cools que Paris. C'est pas que tu y es resté moins longtemps qu'en France, non ? Non, non, mais même, les gens sont vachement plus cools. Deux petites bouscules. Attends, tu permets que je réponde à Manu, OK ? Les gens sont vachement plus cools parce que dès qu'ils te bousculent, ils te disent excuse-moi. Tandis qu'à Paris, dès qu'ils te bousculent ici, ils n'en ont rien à foutre. J'en ai eu l'expérience, je ne sais plus quand, avec Saucisson à l'ail. Elle a été bousculée. On n'y a même pas dit pardon. Elle a été bousculée complètement. Elle n'est pas tombée enceinte, quand même. Non. Donc, voilà. Je le demandais par rapport à New York. Tu dis que c'est différent de Paris. C'est quoi les sanctions que tu peux avoir à New York si, par exemple, tu jettes un papier par terre ? Là-bas, tu te chopes une amende et tu peux te retrouver au commissariat de police. Carrément. Tu peux faire de la prison ou pas ? Ça dépend. Si tu es pris pour la première fois, tu te chopes une amende. Si tu es pris pour la deuxième fois, tu te prends une deuxième amende et puis tu es en garde à vue pendant 48 heures. Mais il n'y a pas des noirs ? Et si les amendes peuvent aller, très loin, plus cher que Paris par rapport aux voitures. Si tu es pris pour la troisième fois, tu te chopes une amende et puis là, tu passes au tribunal et tu te retrouves en taule. Gérard, tu parles de la propreté dans les rues. Moi, je voulais savoir, vu que tu as été à New York avec ton chien, qu'est-ce qui se passe si ton chien fait caca sur le trottoir ? C'est pareil. Sauf que, bon, à Paris, maintenant, tu as des... C'est quoi, la de chute of the dog ? Donc, je réponds à celui... Tu aurais pu préciser ce mot. Donc, je te réponds. Donc, là-bas, bon, c'est pareil à peu près qu'à Paris. Je pense que tu as des petites poches pour te ramasser et puis tu prends ça dans une poubelle. Donc, voilà. Donc, conclusion de ce débat. On n'ira pas plus loin. On pourrait la faire, notre conclusion, quand même. C'est un peu le solitaire. Vous allez attendre. Il y a encore... Qui c'est qui veut poser une question ? J'ai un sondage sur l'IRC, Gérard. Oui. Alors, un sondage effectué auprès des habitants de New York. A la question. Quelles souvenirs gardez-vous du passage de Gérard ? 2% réclament l'annulation de la dette que la ville avait... Alors, attends. ...que la ville avait envers les autres pays pour cause de catastrophes naturelles. 5% déclarent être opposés à son éventuel retour. Et 100% du personnel de son hôtel durant son séjour lui rappellent que c'est inadmissible non seulement de venir avec un chien... Oh là là ! Non, je continuerai pas. D'accord. Mais de manière... Moi, je vais... Avant que vous fassiez la conclusion, donc, je vais marquer à la question. MFV ou New York ? Il y a 70% des gens... ...répondent qu'ils ne trompaient jamais leur conjoint. Donc, je vois pas du tout le rapport. 20% des gens qui préfèrent les pizzas au... au pépéronis. Alors là, je vois... Ça, c'est même pas la peine que je continue. Et 55% des gens n'aiment rien. Et 55% des gens, j'ai dit qu'on terminait pas. D'accord. C'est toi qui fais des... des trucs de con. Alors, cul de poule, conclusion du débat. Alors, cul de poule, je te dis une chose. Si t'es pas contente, le prochain coup, tu restes chez toi. Donc, je vais parler de New York comme on l'a vécu, et c'est tout. D'accord ? D'accord ? Oui, oui, non, mais c'est n'importe quoi. Alors, euh... J'ai les boules qui grattent. Volga, derrière ! Allô ? Je pense que ce soir, c'était un débat très intéressant. Et d'autant plus que ce soir, avec ta coupe de cheveux, tu serais plutôt le... le... comment dire ? Le Ducon Blero du Tétanos. Et je pense que c'est toujours aussi un peu de la chute, le débat. D'accord. Eh ben, si c'est un chien, le prochain coup, tu restes chez toi. Tu se dobes lourd pour continuer. Ouais, ben, tout le monde devrait y aller pour voir la Statue de la Liberté, parce que c'est assez important, quand même. Bah oui, mais ça, de toute manière, la Statue de la Liberté, de toute manière, il faut prendre les bateaux, la cervelle en hélicoptère, mais je ne sais pas... C'est faux. Quoi, c'est faux ? Tu sais même pas ce que tu dis, toi. Alors, écrase, occupe-toi de ton standard. Occupe-toi de prendre des gens pour le deuxième débat, espèce d'abruti. Non, mais tu m'as dit... Tu peux répéter la première question du débat ? Je voulais répondre. Non, non, je ne répète plus. Tu se dobes lourd, donc pourquoi ? Ben voilà, donc, j'ai dit. Mon chéri, pour conclure... J'aime quand tu me parles comme ça. Ouais, ben, moi, j'aime pas. Alors, tu fais la conclusion et tu t'écrases. Tu m'appelles comme ça. Bon, ben, ton débat, je dirais, franchement, tu fais mal ton boulot, Gérard. Et puis, voilà, quoi, tu devrais être plus sympa avec ton équipe. C'est ça, c'est ça, c'est ça. Chiasse de Noël. Ouais, alors, ben, écoute, c'est chiasse de Noël. Alors, ce que je voulais te dire, c'est que, je sais pas si tu sais, mais New York, on appelle ça The Big Apple. Toi, je trouve que ça tombe bien parce que t'es quand même The Big Poirot. Et deuxièmement, est-ce que c'est vrai que tu vas servir de modèle pour la Statue de la Propreté ? Et toi, est-ce que c'est vrai que tu sers comme un... que t'es un con quand on te demande une conclusion ? Ben, c'est une conclusion. Ben, moi, je te dis que t'es un con. Voilà. Ceux-ci sont là, ils peuvent finir. Alors, moi, je veux te dire que c'est un excellent débat, mais le problème, c'est que t'as pas posé la deuxième question. Et je voulais te poser une question. Est-ce que tu veux partir à New York avec... Arrête ! Gérard, Gérard, Gérard ! Mais t'es fou ! Gérard, arrête ! Arrête ! Arrête ! Arrête ! Arrête ! Oh, fils de pute ! Oh, l'enculé ! Oh, l'enculé ! Qu'est-ce qui s'est passé ? Qu'est-ce qui s'est passé, Gérard ? On a rien vu ici. Qu'est-ce que t'as fait, Phil ? Oh, l'enculé ! Elle a fait quoi, là ? Gérard, reste dans le studio. Qu'est-ce qui se passe ? Je veux plus de vie, là. Qu'est-ce qui se passe ? Tu me dégages de l'équipe pour tout le temps. Tu me dégages ! Allez, sors, Phil, là. Ah, là, toi, tu dégages ! Là, t'es vraiment un enculé ! Alors, tu dégages, je vais te faire râper. C'est bon, on va la râper, Bernard. Ah, l'enculé, les barres ! Bon, Gérard, reprends, là. Non, mais de toute manière, il a coupé une saucisson à l'ail. Donc, moi, conclusion. Il s'est coupé une tranche ? Attends, il va y avoir des auditeurs, encore. Hugo, va voir s'il y a des auditeurs. Ils ont fait tous leurs conclusions. Donc, sur l'IRC, une petite conclusion. On est combien, là ? Alors, attends, je vais demander combien on est, parce que j'ai pas trop le temps de regarder. Donc, s'il vous plaît, les gens, est-ce que vous pouvez me dire combien ? Nous sommes 3 654. Ouais, on a perdu un peu, parce que tu t'es énervé, t'as pas arrêté de gueuler. Et... Est-ce que t'es allé au... aux Etats-Unis à deux de baleine sur Sandy ? Je sais pas, je comprends pas. Ah, Gérard, il y a quelqu'un. Non, mais c'est bon, la conclusion, ils l'ont toute faite. Donc, tu peux me donner ton air. Attends, parle-lui, Gérard. Ouais, je t'écoute. C'est qui ? Bah, réponds, maintenant ! Allô ? Non, tu réponds ! Bon, allez, c'est bon, on va pas faire de blague. Il est là, pourtant, il est là. Non, mais il répond pas, alors. Attends, je suis au standard, je vais essayer de le trouver. Non, c'est qui, là ? Tu donnes ton mot ? Je précise ton nom. Donne ton nom. Non, mais attends, pour l'instant, il veut pas, donc c'est pas grave, c'est pas grave. Allez, hop, c'est terminé. Moi, pour conclusion, c'est... Ce combat, c'est d'habitude... Allô ? C'était quoi, ça ? Je sais pas. Non, ça doit être toi, Rigo, sans le faire exprès. Donc, conclusion, c'est dommage, parce que le premier débat, d'habitude, toutes les semaines, il se passe bien. Là, ça foirait complètement grâce à Pildar. Bon, il y en a que deux qui ont bien fait leur boulot, c'est Rigo... Non, non, Pildar, tu dégages. Ouais, ouais, bah, tu dégages, parce que je veux plus de toi ici. Non, mais c'est sûr. Non, non, mais tu prends ton casque et tu t'en vas. Allô ? Il reste quelqu'un, il reste quelqu'un, Gérard. Ouais, mais on n'arrive pas à voir son nom. C'est qui, Pildar ? Allô ? Allô ? Allô ? Allô ? Bon, et hop, c'est ce qu'il fait. Allô ? Ah, ouais, bah... Donc, alors... Précise, qu'est-ce que c'est que le deuxième débat, quand même ? Donc, le deuxième débat, ça sera sur les grappes. Bon, je vais pas continuer la conclusion du premier. Donc, grâce à Pildar, ça a foiré, le premier, et j'aime pas trop que... Le premier débat a foiré. Donc, il y en a que deux qui ont bien bossé, c'est Manu et Rigo, pour... Comme d'habitude. On est arrivé à 3600. Donc... J'espère qu'on ira plus loin sur le deuxième. Donc... Il reste quelqu'un, Gérard, hein ? Mais non, mais on n'arrive pas à l'avoir, il répond pas. Donc, alors, on va se retrouver pour le deuxième débat qui va partir sur les grèves. Donc, vous pouvez nous appeler au 0800 308 5000 et 0875 000, et toujours lire, c'est www.funradio. Plus grosse poitrine de Suren, avec des... des gars, des os. Et on se retrouve tout de suite après pour le deuxième débat. A tout de suite ! == Le débat sur les grèves == === Contexte === === Les personnages === === Transcription === Oh, minuit, 2h Tu dégages, tu dégages Pourquoi, connard ? Allez, hop dehors Les débats de Gérard Et voilà, 2h du matin, donc vous pouvez toujours nous appeler au 0800 08 5000 et 0800 308 5000 C'est Manu qui va vous accueillir au standard, les bras ouverts Oui, je suis là Et donc, je pense que ça sera mieux qu'au premier débat, je l'espère Espérons, c'est pas gagné Et donc, on venait de s'écouter la plus grosse poitrine de Suren avec un dégât des eaux Et il y a toujours Rigaud qui est sur l'IRC, donc www.funradio Et là, c'était un de tes remixes, Gérard, c'était pas la plus grosse poitrine de Suren Oui, non, mais c'était le premier parce que le deuxième, je l'ai pas eu, d'accord ? Merci Le deuxième, c'est un remix de toi, donc Donc voilà, et donc, on a toujours Rigaud qui est sur l'IRC Salut Rigaud Salut à tous Ça va, ouesh, ouesh Salut, ça va, tranquille, pépère Je voulais passer quelques bonjours quand même à tous Bonjour qui sont là, quand même Si, si, on peut saluer les gens de l'IRC On va saluer Yankee, Arnett, Philippe Détoubifry quand même C'est quel honneur Jarvis Cooker, Oxyd, Prez, Youpla, Booba Fett, Olaf Kool, Turpentine Pff, j'en oublie, Terry, Spiral, Tony, Tachat, Cyril, Terry, etc Ok, et donc McFisto D'accord, ok, donc Et Ethan Ok, c'est bon Il y en a fait d'autres ? Cybersep, bah tu sais, on est quand même 4822, donc si je le cite tous Bah balance tous les noms, Rigaud Non, non, mais c'est bon, combien ? Alors on a Workboss, on a Oxyd, on a Delight C'est bon, on salue tous ceux qui sont, tous les gens qui sont sur IRC, c'est-à-dire les Une bulle de bonbons, choupa choups, choupa choups Alors, Fildar Non, c'est pas moi Non, tu commences pas s'il te plaît, d'accord ? Donc, on va saluer tous ceux qui sont dessus, donc les 4822 personnes Et on va saluer tous ceux de la Belgique aussi, s'ils pouvaient nous appeler Au 0033147 Euh... 7995000 7995000, donc... On salue aussi tous les Belges qui sont sur l'IRC Alors, il y a Davy, il y a Ethan aussi, qui est Belge apparemment Et bah, il y en a plein, quoi Il y a Perfouras aussi, d'ailleurs, il m'a dit qu'il t'invitait à Fort-Bayard D'accord, d'ailleurs, Gérard, il va falloir que tu fasses une dédicace pour tous les internautes Non, bah, on verra ça plus tard, d'accord ? Donc, on va accueillir Josson Loirent Allô ? Oui, salut Allô ? Putain, mais il sort... Il recommence celui-là ou quoi, là ? Oui, il sort... Là, ça doit venir de nous Allô ? On t'entend peut-être pas, je sais pas Allô ? Allô ? Josson Loirent Allô ? Salut Salut Allô ? Comme toi Salut Salut Coca de Pâques Non, caca de Pâques Caca de Pâques, pardon Oui, salut à toi, camarade Trou du cul Je t'emmerde Je t'emmerde, moi aussi, connard Non, je te remercie, je te remercie, ouais Je te remercie, putain, lave-toi les oreilles Bon, tu partes sur un autre tourne, d'accord ? Bonsoir à toi Là, je t'attends un peu Ouais, c'est vrai, ouais Eh, la chagatte Là, je t'attends un peu Je suis là Eh, ping-pong pour terminer Salut Gérard, salut Manu, salut Fida, salut Gigi Goré Salut Gigi Goré, le pauvre, comment tu t'appelles ? Ça te fait marrer ? Non, mais moi, ça me fait pas rire, c'est con Eh, Rigo, t'as oublié D-Light, Grindr aussi Non, mais ça y est, ça y est, ça y est, ça y est Ça y est, on se calme un peu, là Putain, mais vous allez vous calmer ou quoi, là ? Eh, bonjour, hein, bâton Bon, alors, le thème du deuxième débat porte sur les grèves Allô ? Merde à toi, celui qui dit allô Faut faire la grève, moi, je dis Alors, tu as pensé... Tu en veux de la bonne grève ? Moi, j'en veux Tu en veux de la bonne grève ? S'il vous plaît, les auditeurs, j'aimerais bien qu'on se calme Parce que le premier débat était de la merde Ouais, grâce à toi Le deuxième, ça sera peut-être de la chasse Ouais, ben, j'espère pas, parce que c'est Manu qui est au standard Et avec Manu, vous allez pas rigoler longtemps C'est moi qui vous le dis Salut, c'est moi Salut Salut Donc, la première question Que pensez-vous des... Ah, il est pas possible Putain, mais il nous fait chier, ce mec Je vais le trouver Enchaîne ta question, je vais le trouver Alors, que pensez-vous des grèves de nos jours ou de nos nuits ? À quoi cela sert-il ? On va demander à... C'est tout ce que tu dis Je sens le haron Alors, moi, je vais te dire que je pense que De nos jours ou de nos nuits, les grèves Je pense que ça sert tout simplement à rien Parce que, tu vois, ils bloquent les passagers Sur les quais de métro ou même de bus Et quand ils veulent se rendre à leur travail C'est quand même assez difficile C'est pas le haron qu'elles sont, elles Et de plus, la nuit, c'est difficile Parce qu'il y a moins de monde D'accord Comme toi Donc, c'est pas sa grève D'accord, ok, ok, ok C'est... Attends, je m'excuse parce que je t'ai coupé Parce qu'il y en a un qui s'amuse à parler sur toi Celui qui... Celui qui... Tu penses aussi quand tu fais caca ? Celui qui s'amuse à reparler quand les gens parlent Je vais pas chercher midi à 14h C'est clair, net, précis Le premier qui... Le premier qui déconne va dégager Je vais pas chercher Comme toi Hé, Gérard Tu penses aussi quand tu fais caca ? Comme toi Tu réponds ? Oui, ben je te réponds Ils font la grève parce qu'ils ont que ça à foutre Ils sont payés à rien foutre Non mais que pensez-vous des grèves de nos jours ? Ou de nos nuits ? Oh là là là Un peu mal Bon, oh Celui... Eh, ça y est, vous arrêtez quand les gens y parlent S'il vous plaît Bon, ça y est ? Bon, alors... Caca de Pike Ouais, c'est caca de Pike Ben écoute, je pense que tous les camarades ont droit à la grève Je pense que c'est un droit auquel Tous les camarades ont droit C'est le cas de le dire Et faites la grève, moi je dis un maximum Faut pas emmerder le monde, faut faire chier les gens Faut que ça bouge Mais ouais, c'est ça, tu crois qu'on est pas assez emmerdés ? Mais attends, les routiers sont les premiers à faire la grève Ah ouais, non mais attends, pour l'instant C'est peut-être les routiers qui ont commencé les premiers Je suis d'accord avec toi Mais faut dire une chose, c'est que maintenant Les routiers, ils ont obtenu satisfaction C'est pas eux qui commencent, maintenant c'est les RATP et la SNCF Et alors, ils ont le droit de faire la grève aussi D'ailleurs, c'est aujourd'hui, Gérard Tu te rappelles l'article qu'on a vu dans l'aujourd'hui ? C'est aujourd'hui la grève C'est depuis 20h ce soir Donc je pourrais vous dire à peu près Pour ceux qui auront l'occasion de se déplacer Je pourrais vous donner des... Oui, faut pas aller Non, je pourrais vous donner à peu près Les... Les trains, combien il y aura de trains qui circulera Et autres, mais... Un peu plus tard, pas lors de la première question Gérard ? Attendez, s'il vous plaît, on se calme S'il vous plaît, sur IRC, il y a Turpentine Qui te demande si ton école, elle était en grève Pendant toute ta scolarité De toute manière, il y a... Je vois pas du tout le rapport avec la question Mais Gérard, c'est trop du cul aussi Non mais attends, tu permets ? Attends, c'est quelque part que j'avais pas fini Ce que je voulais dire, c'est que j'encourage tous les gens À aller voir les camarades Pour les piquer de grève, pour leur amener des merguez Et des cronambours, parce qu'on se les gêne Et on se fait chier, quoi, quand même Non mais attends, là, je crois que tu... Je crois que tu vas un peu loin, toi, quand tu réponds Moi, j'appelle tous les gens à aller bloquer Les voies de métro et de RER, demain D'accord, eh ben... Fais comme tu veux, toi, mais... Mais oui, c'est ça, c'est ça Et je pense que tu devras les toucher à travers de la voie Ça fera un bon débat Ouais, bah, moi, je pense que la grève, c'est très très bien Et on devrait la faire plus souvent Parce que ça emmerde bien le monde et c'est... C'est bien sympa, voilà Et d'ailleurs, en parlant de grève, il y a Yankee sur IRC Qui me demande... Ce qui est dommage avec Gégé C'est que chez lui, c'est le cerveau qui est en grève Je dois savoir ce que t'en penses Alors, trou du cul, si tu réponds aux questions De l'IRC, tu restes chez toi, d'accord ? Bah non, mais... C'est pas la première question que tu vas commencer à foutre ta merde Parce que tu as dégagé, là, maintenant Je te le dis tout de suite, lâche ton feu Bah, en fait, ouais La grève, ça sert un peu à rien Si on la fait pendant un mois, ça peut marcher Mais sinon... Non, mais là, je peux te dire que pour l'instant Ils parlent de l'affaire Jusqu'à vendredi soir Mais ça peut aller plus loin Ça peut... Tu sais qui vient de dire ça ? Qui vient de dire ça ? Je sais pas, j'ai pas vu, moi C'est pas moi, quoi Y'a la grosse qui a parlé, mais... Attends, la grosse, ça t'emmerde, connard Voilà, alors, ping-pong Ouais, ouais, moi, je dis que la grève, c'est excellent Faut foutre le bordel, on descend dans la rue Et tout de suite, on devrait faire le blocus général Non, mais c'est bien, la grève Faut descendre avec les pancartes, les pochettes bouchées Faut les emballer, tous ces mecs Non, mais c'est clair, faut foutre le souk, quoi Non, mais foutons le bordel ! Ouais ! Demain, je vais aller faire une grève Je vais me mettre sur les voies du RER Et puis, ça va être bien Tu fais ça, puis tu penses que j'y arriverai, moi, tout seul Allons-y, camarade Révolution ! Unissons-nous, quoi J'ai rien à dire ? Donc, moi, je pense que ceux qui s'amusent à faire grève C'est qu'ils se rendent pas compte Hey, Dark Vador Oui, vas-y, parle, on t'écoute Fildar, fais gaffe, parce que tout à l'heure, tu vas dégager, toi J'ai rien fait, j'ai rien fait Donc, je disais que les grèves, ça sert à rien Parce que ça fait chier le monde Alors, je peux vous dire Qu'à l'heure actuelle, depuis ce soir, 20h Et c'est jusqu'à samedi, 8h du matin Donc, voici les premières prévisions des trafics Donc, TGV Sud-Est et Atlantique 1 train sur 3 TGV Provence sur... À quelle heure, aussi ? Oui, tu dis pas... Oui, bonjour, je voudrais... Bonjour, je voudrais un billet pour Valence, s'il vous plaît C'est bien ou pas, Gérard ? Le petit Gérard, attention Gérard, tu continues ? Ça commence à être relou, celui qui parle sur moi Donc, TGV Provence-Provence 1 train sur 3 TGV Paris-Lille, légère perturbation Thalys-Paris-Bruxelles Amsterdam-Cologne Trafic normal Eurostar-Paris-London Trafic normal Eurostar-Lille-Bruxelles Eurostar-Paris-Bruxelles Trafic normal Et... Traf... Pardon Le petit Gérard, s'il te plaît, tu vas... Et moi, je t'emmerde, espèce de fils de con ! Non, non, non ! Hop, hop, hop, hop, hop, hop Ok Et... Très grande ligne 1 train sur 3 En moyenne Transport express régionaux TER Trafic très perturbé Avec en moyenne un train... RER, répète, RER ? Non, trafic... Non, TER Et le RER, il s'est pas écrit ? Si, mais... Il y a Tony sur ERC qui me demande le RER RER A Et moi, je voulais savoir... Trafic normal Et le B ? Le B, 1 train sur 4 Sur la branche nord Entre Gare du Nord et Roissy Et le F, merde ! Et le F Y'a pas de F, espèce de con ! Ah, pardon Mais toi, si tu veux prendre le F, toi, t'en as pas besoin Et si sur la ligne 15, y'a des... Gérard, Gérard, Gérard C'est qui ? C'est K4PAC, oui, j'ai une question Je suis à Denfert-Rochemont Et je vais aller me faire sucer par une pute à Pigalle C'est où, le changement ? Tu te démerdes ! Trop du cul ! Bon, ça y est, je peux... L'heure des grèves, payez-vous votre titre de transport Putain ! Fil d'art, fil d'art Manu ? Ouais, bah, j'essaye, hein T'essayes de gérer, s'il te plaît J'ai une question à deux balles C'est clair Allô ? Qui c'est qui a le téléphone, les mecs ? Ça se fait pas Bonsoir, je voudrais avoir un renseignement, s'il vous plaît Je voulais savoir si la gare Montparnasse était ouverte Ah, il se renseigne Alors, pas du tout, monsieur Pas du tout pour ce soir Très bien, je vous emmerde, au revoir Alors, la deuxième question L'heure des grèves, payez-vous... Rigaud, une question IRC avant Oui, il y a Turpentine qui te demande Est-ce que c'est plus facile d'avoir la grève l'hiver ? Bah, ça fait chier plutôt les gens Pour mieux qu'ils se mettent en grève l'été, ça serait... Ou sinon, ils mettent une écharpe Non, mais en hiver, c'est plutôt chiant que de la faire en été Donc, l'heure des grèves, payez-vous votre titre de transport On va demander à Ping Pong Bah non Bah non, puisqu'on fait la grève, donc Non, mais tu peux préciser ? Bah non On fait pas... Punaise, vous allez... Vu qu'on fait grève, on risque pas de payer le titre de transport à Bruxelles Alors, abruti, t'emmerdes, tu dégages C'est bon, tu dégages, ça t'apprendra Au revoir, Ping Pong Au revoir, Ping Pong Non, mais attends, hey Si on répond ce con, hein Il était poli, ouais Tu fais des questions à deux balles T'as tendance à dire C'est terminé pour lui Attends, il a dit abruti, il aurait pu dire ça En plus, il est en train de jouer, c'est une honte Non, non, mais c'est bon, il peut dégager Il peut dégager Celui qui joue au Ping Pong, là Il aurait pu dire enculé aussi, je veux dire Ouais, c'est vrai Il aurait pu dire bien d'autres choses encore Bon, Gérard, qu'est-ce que tu fais, là ? Non, non, mais attends, mais moi Pour l'instant, quand ils se calmeront On continuera le débat Alors, la chatte en feu Ouais Donc, pourquoi ? Oui, je suis d'accord Tu peux préciser ? Ben... Non, mais si tu dors Tu le dis tout de suite, tu vas... On va te laisser dormir, hein Gérard, je vais te choper à la sortie de la radio T'as l'air ta gueule On va te niquer, on va te niquer Manu, s'il te plaît, tu me gères un peu Pour l'instant, on accueille à la place de Ping Pong On accueille Badminton Ouais, non, mais attends Manu, tu me prends d'autres personnes que les mêmes Ben non, non, c'est pas le même C'est Badminton, c'est pas Ping Pong Bonsoir à tous Bonsoir Alors, trou du cul Ouais, trou du cul Bon, ben, tu disais Ouais, non, moi, je paye jamais Le métro, je paye jamais Non, tu peux préciser Tu fraudes ? Je fraude, je suis un sale fraudeur Je suis un enfoiré, mais je m'en fous, je paye pas Je vais pas payer le métro, faut pas déconner C'était que là S'il y a du monde, ils font chier On voit des gens comme toi Non, c'est pas possible, le métro, franchement Alors, je préviens que celui qui recommence Ça va être clair, il est 2h13 Soit que vous vous calmez Non, non, non, non, non Soit que vous vous calmez Que vous répondez correctement aux questions Ou soit j'en arrête là Et je rentre chez moi Vous choisissez Ok ? Alors, on va demander à K4Pack Ouais, c'est comme mon camarade Déjà, je paye pas en temps normal Tu crois pas que je vais raquer les jours Il y a grève, en plus Tu sais qui s'amuse à faire des conneries comme ça ? Bah, c'est toi Non, c'est pas moi qui s'amuse à faire des bisous, d'accord ? Ah, ok GG, c'est K4Pack J'ai un plan pour toi, si tu veux Si t'as des PV et des contraventions à faire sauter Par les contrôleurs Je peux t'arranger le coup, si tu veux Non, mais j'ai pas besoin de toi, merci Comme toi Ah, vas-y, vas-y, c'est bon Moi, je paye pas le bus, c'est un agresse de bus Parce qu'il y a pas de bus, donc j'ai pas à payer C'est tout ce que t'as à dire ? Bah oui, il y a pas de bus, donc j'ai pas à payer un ticket de bus J'ai des sous dans mon porte-monnaie Manu, je sais pas ce que tu fous Mais c'est pourri, le standard Bon, allez, on enchaîne Non, mais attends, il est moins pourri qu'avec toi Attends, attends, attends J'ai un gros problème Ils ont tous fait grève Je suis tout seul Ils font grève sur Internet ? Bien joué Je sens le harangue, pour finir Gérard, j'ai un problème Ils ont tous fait grève au standard Bon, alors moi, j'en répète J'arrête, comment je fais ? Gérard, t'as l'air, s'il te plaît ? J'arrête Il en reste un, apparemment Ouais, mais je sais pas où il est Non, non, mais t'as gerbé tout le monde, donc j'arrête, c'est terminé Allô ? Allô ? Allô, trou du cul ? Non, mais ils sont là, ils sont là Allô ? Allô ? VOLGAIL ! Trou du cul Allô ? Allô, connard ? On entend plus le connard, là Connard ? Gérard, il fait grève ? Non, mais moi, là, j'arrête, là C'est plus la peine C'est pas la peine, là Non, non, mais j'arrête, parce qu'il y en a l'autre C'est pas moi, là, non, j'ai rien fait, moi Ah, ils sont tous revenus, c'était une grève d'une minute Alors, je sens le harang pour... Juste une minute Comment il y a de connectés ? Là, on est à 4028 Quand même, hein ? On a perdu un peu, mais c'est déjà beaucoup Donc, je sens le harang pour toi Eh, tu viens chez moi, après, Gérard ? Je sens le harang Je sens le harang Tu réponds ? Mais elle est conne, celle-là, elle répond jamais aux questions, putain Non, mais tu vas voir ailleurs si j'y suis, si t'es pas content Bah, réponds, réponds Justement, je réponds, mais tu me laisses pas parler Maintenant, vous fermez vos gueules, vous laissez parler, les gens Eh, tu viens chez moi, après, Gérard ? Moi, je t'emmerde Alors, je sens le harang Donc, pour la troisième fois, je réponds à ta question Donc, non, je mets jamais de ticket Parce que, déjà, le ticket, ça coûte énormément cher Ça coûte 8 francs Et moi, j'ai pas 8 francs à mettre pour un ticket Et, de toute façon, j'aime pas les fonctionnaires D'accord C'est bien, parce que, moi, je... Moi, non plus, c'est que je suis pareil Moi, les fonctionnaires, je dirais un seul mot, mais je peux pas le dire Ouais, je sais qu'on les emmerde Eh ben, moi, je le dis pour toi Bravo Donc, moi, tous ceux qui sont fonctionnaires de la RATP Eh ben, n'ayez crainte que vous nous faites chier Et je sais même pas pourquoi qu'on paye un titre de transport avec vous Parce que, là, vous nous faites chier en fin de mois Et en début de mois, vous allez nous coller des amendes Alors que c'est vous qui nous faites chier Alors, ça sert à rien Eh, Gégé, Gégé, Gérard Gérard, je te laisse parler Je voudrais savoir un truc Si, si, comment, tu sens le harant, c'est ça ? Elle paye pas dans le métro, c'est bien ça ? Non, mais elle paye au carré Alors, comment tu fais pour rentrer dedans ? Elle paye pas dans les portillons Je tape sur le nec et puis, voilà, je l'avais déjà Non, mais comment elle fait pour rentrer dans le métro si elle paye pas le ticket ? Bah, il monte Non, mais, de toute manière Tu vas pas me dire qu'elle escalade Attendez, attendez, attendez, là Qui c'est qui demande ça, là ? Je sens le harant Mon Dieu, tu peux préciser ton nom, s'il te plaît, merci Non, mais même De toute manière, maintenant, il y a des portillons Tu peux essayer de... Trou du cul Calme, calme, calmez-vous Tu disais, Gérard, donc, des portillons Non, il y a des portillons Tu peux essayer de passer Dès qu'il y a des gens qui sortent, maintenant Gérard, c'est badminton J'ai pas répondu, je peux répondre Ouais, bah, vas-y Ouais, moi, donc, je paie pas mes billets de transport, j'en fais en papier Hum, attends J'ai mal compris la question, parce qu'il y en a un qui s'amuse Je paie pas mes tickets de transport Je prends un paquet de clapes, et puis je découpe Et puis je passe direct Un coup de feutre, et puis c'est bon Gérard, si t'as des amendes, je peux te les faire sauter Si tu me laisses te faire sauter le cul Ouais, bah, là, tu vas te faire foutre, toi, abrouti C'est gentil ce qu'il te dit Si t'as des amendes, c'est pour toi, moi, je m'en fiche C'est dans ton intérêt Les oreilles, c'est comme le cul, ça se lave Ouais, vous restez polis, parce que sinon Je vais virer tout le monde et je vais en garder qu'une De tout à l'heure Gérard, c'est moi, Fildar, tu veux un Un bubblegum, gros et tout mou Non ? Non, mais je crois que toi, la semaine prochaine, tu vas plus être là Donc, il y a une question hier C'est pour là Une réponse Peut-être des informations là-dessus Oui, non, peut-être pas là-dessus Mais, est-ce que quand tu pointais A la NPE, ils étaient en grève ? Ouais, mais ça, la question va y venir aussi Alors, donc, je vois pas du tout Tu peux pas répondre On va y venir On va y venir sur cette question-là Donc, ça sera que la neuvième J'en ai le temps, Manu Il y a D-Light qui te dit que tu dois pas t'inquiéter Si tu reçois une amende de la RATP Parce qu'il a filé ton nom et ton adresse quand il s'est fait attraper Mais c'est ça, c'est bien Alors, troisième question Avec quel... Ça y est, celui qui s'amuse Ça y est, celui qui s'amuse Allo Il y a un mec qui a une double ligne Je m'excuse de vous déranger, pourrais-je pas ? J'appelle des gens, là, Gérard Donc, je vais gérer après la double ligne Non, non, mais faut quand même gérer en même temps Ouais, quand même que t'accouches, Manu Alors, avec quels moyens de transport vous déplacez-vous lors des grèves ? On va demander ça Oh, ils suivent Parfait, gars Récupère ton briquet Et leur lance plus comme ça Toi, la semaine prochaine, c'est plus toi ici Non, ça, c'est terminé C'est terminé pour toi Je suis pas un putois, hein Ouais, bah, c'est terminé C'est terminé pour ta gueule, je vois plus de quoi dans mes débats C'est tout Manu ? Ouais, à la place de trou du cul, on accueille fromage de cul Allo Ça tourne autour du cul, hein, le débat, là Beaucoup, beaucoup, bonsoir, Gérard Bonsoir, c'est le même défi Salut Salut à toi Salut, Paco Alors, donc, la troisième question Avec quels moyens de transport vous déplacez-vous ? Avec mon vélo à 4 roues Alors, on va demander à Babington Ouais, Babington, je te prie Hum ? Je me déplace en patinette Ouais, mais non, mais tu peux préciser Euh, à 2 roues Hum ? Voilà Ok Euh, l'achat en feu ? Avec mes rollers D'accord, bah, c'est bien, mais... Ouais, je pense que vous vous creusez pas trop la tête pour répondre aux questions, hein Bon, merci pour le Larsen, là Je pense que vous avez pas l'intention de répondre aux questions, hein, donc... Mais si, mais si Bah non, euh... Mais si, je t'ai dit Bah, mais ça y est, le Larsen, là Alors, euh... Fromage du cul Ouais Fromage de cul, je sais pas quoi, là Oh là là, de Larsen, oh ! Oh, le... Arrêtez de Larsen, là, c'est... C'est pas un petit peu de sérieux, là T'es un hélicoptère privé Oh là là ! Bon, allez, répondez ! Oh, fromage, là ! Ouais, ouais, je me déplace à pied, moi D'accord J'ai pas de voiture, j'ai rien Ok, caca de Pâques Ouais, caca de Pâques, bah, avec des chaussures du genre, bon, sans citer de marque, hein, sans citer de marque Des Nike, des Adidas Des 4R Ou des Reeboks Euh... Comme toi Comme toi Moi, j'ai une Mégane coupée, donc j'ai pas besoin de prendre les... Les transports en commun Ça, c'est pas bien, ça Non, mais... Moi, je peux... Moi, je vais... Je sens... Pas de marque ? Ouais, mais elle est un peu politique Mégane coupée, c'est un peu... C'est un peu merdique, comme voiture, ça Non, non, c'est vachement bien, t'es fou Grigo, ou non ? Euh... Y'a Oxide qui demande à combien on peut faire une grève Bon, euh... À plusieurs À plusieurs ? C'est combien, à plusieurs ? Bon, à plusieurs, c'est... C'est tous ceux qui... Qui sont... Vous pouvez être une vingtaine, cinquantaine, centaine, mille, voire deux mille, vingt mille ou autres Et plus à la rigueur Et y'a des... Y'a des V1 qui te demandent, quand on fait grève, qui c'est qui fait le rôle du piquet ? Bah, tout le monde C'est tout le monde qui se met sur le devant et qui empêche les bus de sortir ou autre C'est comme un ski, alors ? Non, pas spécialement, non Et y'a Ethan qui te demande si on peut faire grève tout seul Euh... Ça, c'est dur Parce que si tu fais grève tout seul... Tu y arrives, toi ? Non Ouais, mais regarde, la grève de la fin, c'est des gens... Les gens, ils font grève tout seuls Ouais, non, mais ils se mettent... Après, ils se retrouvent à plusieurs quand même, ils se... Ils se font une bouffe ? Non, mais ils se rejoignent Ils se rejoignent Donc, voilà Donc, je sens le harang pour conclure sur le thème de la troisième question Oui, alors moi, je me déplace souvent avec mon cheval Tupu Quoi ? Je me déplace souvent avec mon cheval Tupu Avec ton cheval qui pue ? Tupu Qui s'appelle Tupu C'est quoi, c'est quoi ? C'est une oise C'est son nom, mon cheval, non ? C'est le nom de ton cheval ? C'est le nom de ton cheval ? Bah ouais, c'est le nom de mon cheval Non, mais attends, mais... Mais elle est drôle ou pas, elle ? Non, mais attends, mais c'est quoi, là ? C'est la réponse à la question ? Bah bien sûr que c'est la réponse à la question Gérard, tu devrais la dégager, parce qu'elle répond pas à la question Oh, toi, je sens qu'il va t'arriver... Tu vas finir sans culotte, toi On peut dépasser un cheval dans les rues de Paris Ouais, bah toi, je crois que tu vas finir sans culotte ce soir Ouais Alors ça, ça m'étonnerait Ouais, bah... T'inquiète entre les dents C'est ce qu'on verra Attends, j'ai pas besoin de t'attraper pour t'avoir Bah toi, on a pas besoin de te trouver, on sait où t'es Alors, donc, avec quels moyens vous vous déplacez-vous pour leur dégrève ? Bon, il y en a qui ont dit en roller, ça c'est vrai Mais je pensais qu'on allait dire souvent en vélo Ou même voire en covoiturage C'est quoi ça, Gérard ? Le covoiturage, donc, c'est des gens qui habitent pas loin Qui sont à peu près dans la même société Qui s'appellent le soir, comme là, en ce moment Là, je pense qu'on peut dire que c'est un peu comme ça On va parler, ça va en parler beaucoup, du covoiturage Donc, ils s'appellent entre eux le soir Et ils disent, bon, bah, tu viens me chercher à telle heure le matin Pour m'emmener au boulot Mais tu peux faire du co-vélonnage Ou du co-camionnage Ou un truc comme ça ? Du co-vélonnage, je pense pas Du co-camionnage, c'est à peu près comme le covoiturage C'est à peu près pareil Donc, pour répondre à ça Je pense que Le plus gros, c'est ou le vélo Ou le covoiturage Qui se fait Régulièrement lors des grèves Alors, donc, je vais vous donner quand même Encore des chiffres pour ceux qui ont Un petit sondage, non ? Pour ceux qui vont se déplacer Tout à l'heure pour aller à leur travail Alors, en Ile-de-France, réseau banlieue Intens sur 30 devrait circuler Sur les lignes de Paris-Montparnasse Paris-Saint-Lazare et Paris-Est 1 sur 4 sur Paris-Nord Question RER Donc, trafic RER à trafic normal RER en mer de crédit C'est France Info, là ? RER-B 1 train sur 4 sur la branche RER-B, ça m'intéresse Tu peux répéter, j'ai pas entendu 1 train sur 4 sur la branche Nord, entre Gare du Nord et Roissy Et Mitry Interconnexion suspendue En Gare du Nord Il y a le Roissybus, quand même, qui passe Attention, le mouvement de grève Engagé hier matin sur la branche De l'Arme Sur la branche Gare du Nord Mitry pourrait se poursuivre Ce matin Question RER-C Pour ceux que ça intéresse toujours 1 train sur 3 RER-D 1 train sur 3 Voilà ce que je pouvais vous dire Je crois qu'il y a Corsair Tu peux donner les horoscopes du TGV Atlantique ? Alors, TGV Atlantique Pour les béliers seulement Non, je parle pas TGV Atlantique, je sais même pas Je pense qu'ils en parlent pas dessus Si, c'est en bas, vers la Corse N'importe quoi, toi Donc, on va récupérer Je sens le harang Tu viens chez moi, après, Gérard ? Putain, lui, il commence à me gonfler Je sens le harang Est-ce qu'elle est toujours là ? Salut Re-salut Comme toi Re-salut Re-salut, caca de Pâques Ouais, salut à toi, Lascar Fromage de... De cul De cul Ouais, bonsoir Je voudrais parler à... À la fille qui était chatte en feu tout à l'heure Allô ? Chatte en feu Oui Allô ? Et Babinton Allô ? Ouais, salut à toi, poète de l'an 2000 Allô ? Donc, la question... Allô ? Putain, mais il est chiant, celui-là Allô ? Alors, donc, la quatrième question Vous avez eu le temps d'y réfléchir ? Non, non, non Alors, pensez-vous... Vous voulez parler à la chatte en feu, on n'a pas pu la voir Alors, je répète la question et on se calme Là, il est 2h32 même Donc, pensez-vous normal que les jeunes Ne laissent pas leur place aux personnes âgées Ou autres, lors des grèves ? On va demander ça Gérard, je vais te choper à la sortie de la radio T'as l'air ta gueule On va te niquer, on va te niquer On va demander à Babinton C'est relou Ouais, ouais, ouais C'est de la merde On va te marrer, on va te marrer Ouais, ouais Babinton Ouais, ouais, ils ont raison, les jeunes Mais faut les virer, les vieux crotins de mammouth Faut les têches Ouais Babinton Faut les têches, faut prendre leur place Ouais, mais tu m'écoutes, là ? Ouais Il a marre des gros, ça, là Alors ? Ouais, ben c'est bon, je t'ai dit Faut les virer, tous les dieux Bon, donc, apparemment, t'as pas envie de répondre correctement à la question, toi Ben, c'est son avis, hein Je t'ai dit que j'étais d'accord La chatte en feu ? Non, elle est chaude T'es en train d'énerver, est-ce que tu peux répéter la question ? Oh non, non, elle va s'énerver, non Pensez-vous normal que les jeunes ne laissent pas leur place aux personnes âgées ou autres lors des grèves ? Ben ouais, c'est normal C'est normal, toi ? Ouais Alors donc, toi, tu laisserais pas ta place à une personne âgée pour qu'elle s'assoie avec ? Ben non Ben non Ben non, faut les virer Ouais, ben d'accord Elle paye quand même leur transport comme nous Non, mais c'est égal, c'est égal Non, ils ont une carte vermeille Fromage de cul Ouais, euh, non En fait, moi, sérieusement, je laisse ma place aux personnes âgées, c'est normal Ben oui, c'est normal Parce que moi, j'aimerais que quand je sois un petit peu plus vieux, qu'on fasse la même chose pour moi Non, mais ça, je pense que c'est tout le monde, tout le monde a envie de faire pareil que toi Ouais, mais là, j'entends des témoignages qui me laissent pas trop Non, non, pas du tout Je suis désolé, je suis désolé Mais pourquoi ? Non, non, mais attendez Non, non, moi, je suis pas d'accord avec ça Que quand une jeune te laisse la place Faut pas, faut pas t'en amuser quand même C'est quoi, t'es pas d'accord avec ça ? Alors, c'est la consommation à tout prix, c'est ça ? Alors, c'est pour rendre un service, voilà ? On a un coup de dévié qui pue le roquefort de 5 mètres Non, mais elle pue l'eau de Cologne Excusez-moi les auditeurs, excusez-moi les auditeurs Ça y est, vous avez... Ah non, mais là, je peux pas laisser à dire ça À la rigueur, on lui pique On les coupe ou quoi, Manu ? Tu joues à quoi, là ? Bah, ça y est, j'ai trouvé celui qui foutait le bordel Tu te paluches, là ? Alors, comme toi Oui Donc, pour toi Ah non, moi, je laisse jamais ma place aux vieux dans les bus Moi, je trouve que les vieux, il faut les tuer à la naissance, donc... Non, mais attends, je vois... Toi, t'es vraiment dégueulasse, alors Bah ouais, je suis pas dégueulasse Mon avis, c'est le chien, bien sûr Ils prennent toujours le bus quand il y a du monde dans le bus T'as un petit peu de respect pour les vieux, quand même, merde Mais non On se calme, vous laissez les gens répondre, s'il vous plaît, merci Ils ont qu'à prendre des taxis, puis ils puent la mort, quoi, c'est horrible Non, en plus, on peut pas laisser dire ça, Gérard Bon, je sens le harang Ouais, non, moi, je pense que c'est pas normal Parce qu'il y a aussi des personnes de 30 ans En plus, aussi, qui laissent pas Qui laissent pas leur place aux personnes âgées Et il y a également aussi les femmes enceintes Les femmes enceintes, tu leur laisses pas la place Ah, si, parce que de toute manière La personne qui est enceinte, moi, je peux te... Oui, mais les personnes qui veulent s'asseoir Les gens, ils se laissent pas Pour laisser la place à une femme enceinte Mais moi, je peux te dire une chose, que la personne âgée Va voir carrément le machiniste Et demande à ce qu'elle s'assoie Et fais-moi confiance que le machiniste Il a le droit de faire dégager une personne Pour laisser la place Si, si, si, si Si, si, si, si, c'est vrai Si, si, non, non, mais moi, je peux... Oh, vous me laissez répondre Donc, moi, je peux... Il y en a qui se marrent, Manu Non, mais je sens que... Et ça recommence Tony Comme ça, Manu, putain Je sens qu'il y a du Tony là-dedans Ça, c'est encore lui Donc, moi, je peux... Je réponds à... Attends, j'ai pas répondu Non, mais attends, si, t'as déjà répondu, toi Non, c'est qu'à 4 packs, c'est qu'à 4 packs, j'ai répondu J'ai pas répondu Non, mais attends, toi, t'es en train de jacquer Pendant que tout le monde répondait, alors Pas du tout Alors, tu réponds Bah, je voulais te dire qu'effectivement Il faut éliminer les cartes vermeilles, c'est clair Y'a pas besoin de laisser des places Dans les transports en commun pour les vieux croutons Elle disait, il faut les tuer à la naissance Moi, je dirais même, il faut les empêcher de se reproduire Passer 80 ans Tony, tu t'écrases On parlait de l'odeur, c'est vrai que ça fouette Mais y'a pas que chez les vœux Y'a aussi des gens de 38 ans qui sentent à 5 mètres Ouais, y'en a qui puent la mort aussi à 38 Voilà, ça sent la mort Il peut rien si ça sent le cercueil Tu crois qu'il sent ? Alors, moi, je réponds Maintenant, ça y est, vous avez assez répondu Maintenant, c'est à moi Donc, moi, je peux vous dire une chose Y'a les personnes âgées Putain, il commence à me casser les couilles, ce mec Donc, je peux vous dire une chose Y'a certaines personnes qui laissent pas les places Je trouve ça dégueulasse de leur part Et pour les femmes enceintes Ils vont s'adresser au machiniste Le machiniste lui demande à se convaincre On lui laisse la place Et y'a d'autres personnes qui ont le droit Tout comme toutes les personnes âgées de s'asseoir Et les femmes enceintes, c'est les aveugles Bon, écrase-toi Rigaud, une question Oui, y'a Davy One Qui te demande combien ça coûte Une grève en euros Et est-ce qu'il y a des réductions pour les cartes vermeilles Et les militaires ? Non, y'a aucune réduction pour tout ça Et combien ça coûte alors ? Je n'en sais rien On est pas encore au moment de l'euro Alors, les gens Lors des grèves Il y avait un petit Larsen J'ai Manu Non, non, non Ouais, ouais, Pildar, fais le malin Fais le malin Fais bien le malin, toi Lors des grèves T'es un pauvre type Ça vient d'où ? Moi, ça le fait pas Si ça le fait, regarde Mais qu'est-ce que c'est que tu fais ? Mais c'est quoi ce bordel ? Qu'est-ce que tu fais ? Non, mais Pildar Pildar, quand t'auras fini, tu vois ? Non, non, non, non, non Il ouvre la boîte, ça marche Connard, dès qu'il arrive, tu l'arrêtes Alors, fais pas chier ton monde, toi J'ai rien fait, moi Pauvre con, va Là ? Non, mais là, c'est bon Mais non, c'est Pildar qui s'amuse, alors T'inquiète pas, il s'amuse Il s'amuse depuis tout à l'heure Non, là, j'ai plus rien Non, non, il s'amuse, là Il s'amuse Ah, c'est ça Ouais, ouais Péga, parce que tout à l'heure, je vais t'éclater, toi Tu m'énerves Dans les deux débats, c'était le bordel Ouais Non, mais on peut remercier Pildar L'audience Et lui, là, au standard, t'as mis le bordel, toi Attends, je suis en train Et lui, c'est Manu Je peux pas me concentrer avec tous tes pauvres sons, là Non, ouais, c'est lui qui s'amuse aussi Tu mets ça sur le doigt à Manu, tu vois, mon cul Ouais, ouais Tu vas te choper à la sortie de la radio, t'as l'air ta gueule On va te niquer, on va te niquer Bon, ces bandes de petits cons, là, je les emmerde Alors, lors des grèves, tripotez-vous, les gens Les jeunes femmes ou des siens C'est n'importe quoi, le standard, ce soir Je suis dégoûté Non, mais moi, je suis plus dégoûté parce que c'est toi qui fous le plus ta merde Non Nuance Alors, lors des grèves, tripotez-vous, les jeunes femmes ou des siens Quand il y a les trains qui sont complets On va demander à Babington Eh, tu viens chez moi, après, Gérard ? Babington Ouais, ouais, ouais Ouais, ouais, moi, je pense que ouais Tu peux préciser ? Parce que c'est toujours le mercredi, c'est comme ça C'est toujours comme ça Donc, c'est tout, c'est toute la précision Voilà, voilà, mais c'est toujours complet, comme ça D'accord, lâche ça, t'en veux Oh, je te baisse Lâche ça, t'en veux, s'il te plaît Je ne réponds pas à cette question Alors, dans ce cas-là, tu réponds pas à cette question C'est terminé pour toi, le débat Au revoir Au revoir pour elle Alors, fromage de cul Ouais, moi, je fais Qu'un intérêt de De faire des grèves si on peut pas tripoter Des nanas, je veux dire C'est normal, c'est tout à fait Je suis sûr que toi, petit vicieux, tu l'as fait aussi quand t'étais jeune Non, ça m'est arrivé, ouais Oh, raconte ! Allez, raconte Les premières expériences sexuelles dans le RER Qu'est-ce qu'elle raconte ? Vas-y, raconte avant Non, si je laisse parler, toi, tu t'écrases Les auditeurs voulaient qu'ils racontent Bien sûr, bien sûr Pour l'instant, je demande aux auditeurs Leur truc Qu'est-ce qu'elle raconte ? Ouais, raconte quand tu mettais des oeufs dans le cul au chien, vas-y Qu'est-ce qu'elle raconte ? Ouais, bah, je vais te dire que moi, ça m'est déjà arrivé Je vais te raconter une petite anecdote L'autre fois, c'était genre dans l'ouest parisien Et j'ai touché une espèce de grosse vache Avec des tresses qui sentaient pas très bon Alors, caca de Pâques, c'est même plus la peine Caca de Pâques, c'est plus la peine Terminé ! Attends, j'ai le droit de toucher des grosses qui sentent mauvais Je me suis tapé des mycoses, des champignons sur les doigts C'est pas ma faute, mais j'ai le droit Non, non, mais c'est terminé pour toi, tu peux... C'est terminé, ça t'apprendra Comme toi... T'as pas le monopole des grosses, je te signale T'as pas le monopole des grosses Comme toi... Ouais, moi, je touche pas les femmes ni les chiens Ça me dégoûte un peu, mais bon, je touche d'autres trucs D'accord Ça te dirait de me tripoter C'est bien, parce que fromage de cul, c'était Tony Et Tony, il fait les deux débats N'importe quoi, c'est pas grave, c'est pas grave, enchaîne Donc, comme toi, c'était ta réponse ? Oui, c'était ma réponse Ok Je sens le harangue, ou à moins qu'il y ait une question IRC Non, on voulait juste dire que même s'il n'y a pas de grève, on peut tripoter les filles dans le train, et pas que dans le train Bah ouais Ok, donc, je sens le harangue Je viens droguer Je me drogue à la frite Je ne peux pas me passer de frites, c'est plus fort que moi, ça me rend fou Je ne pense qu'à ça, manger des frites Non, mais tu crois que c'est Manu, alors que c'est toi qui viens d'allumer le truc Pff, n'importe quoi, ça c'est pour régler le son du CDR Mais oui, le CDR, on me fout de con, on va Je te disais que je tripote les fesses des hommes, parce que c'est ce que je regarde en premier chez un mec Et après... T'as vraiment des goûts de merde ? Non, mais il s'amuse Attends, je sens le harangue, parce que là, Max, il vient d'arriver Donc, c'était pour préciser que ce n'était pas pour régler le CDR qui s'amusait C'est qu'il est en train de s'amuser à mettre une connerie là-haut Salut Max Donc, je sens le harangue Tu viens chez moi après, Gérard ? Je sens le harangue Non, mais je te réponds, là Donc, je te disais que je tripote souvent les fesses des hommes Ah, vas-y, j'en dis, vas-y encore Dans le tramway ou dans le métro Et donc, je regarde ce que je regarde en premier Vous laissez parler les gens ou quoi ? Donc, voilà, je t'ai répondu D'accord Si t'as pas entendu, sens le harangue J'ai compris quand même ce que tu m'avais dit Alors, pendant les grèves SNCF ou autres, les trimpes ont-ils l'amour ? On va demander à Babinton Chérin Babinton Oui, tu peux répéter la question, s'il te plaît ? J'ai pas bien entendu avec le bruit Alors, pendant les grèves SNCF ou autres, les trimpes ont-ils l'amour ? Euh, ouais, je pense que c'est possible Comment on peut répondre ? C'est possible techniquement Techniquement Par contre, je pense que ça arrive que sur certaines voies ferrées Pas partout en France D'accord Que dans les grandes gares Tony ? Quand je suis contre tes pieds Les trains, ils ont pas d'appareil génital Non, mais, généto Merci Tony pour... Généto, si tu veux C'est des bateaux, généto Parce que c'est transitif, c'est ça ? Non, c'est transpirif Ah, ok Donc, alors Gérard ? Oui, Manu ? Donc, on accueille Je t'écoute à la place de Caca de Pâques Oui, allô ? Et on accueille Slogan à la place de J'ai la chatte en feu Les routiers, c'est tous des enfoirés La CGT au pouvoir Enfoiré C'est Slogan, ça, c'est Slogan Il est dans le débat de la grève, grave Non, non, non, mais je crois que tu lui dis qu'il se calme Non, mais il va t'écouter, y'a pas de soucis Donc, Tony ? Ouais, ça y est, j'ai répondu, j'ai répondu, ils ont pas d'appareil génital Ok, alors, je t'écoute ? Ouais, je t'écoute Vas-y, je t'écoute, GG Non, mais tu réponds à la question Bah, écoute, des trains qui coculent, non, pas des masses Mais il y a quand même Eh, eh, eh, on me laisse parler Il y a quand même un maximum de gens Qui sont enculés dans les chiottes de la loi Je t'écoute Alors, je t'écoute, tu vois On t'a très bien entendu Maintenant, tu dégages, au revoir Moi, j'ai une aventure Voilà, c'est très bien Alors, comme toi Bah non, les trains peuvent pas faire l'amour Par contre, ça baisse le sexe dans les trains Quand il y a grève Ouais, bah ça, ça revient presque à la Sur quelle ligne ? Bah, ça revient presque à la cinquième Tu viens chez moi, c'est ça, Gérard ? Ça revient presque à la cinquième question Ce que tu veux dire C'est quoi la cinquième ? Bah, la cinquième, c'était lors des grèves Tripotez-vous les jambes en arté Il y a une différence entre tripoter et faire l'amour D'accord Tu fais l'amour sur quelle ligne, toi ? Slogan, toi, tu veux répondre, là ? RRB Slogan, tu réponds à la question ou pas ? Bah, j'ai vu que j'étais au standard J'ai pas tout entendu Alors, pendant les grèves SNCF ou autre, les trains font-ils l'amour ? Ouais, Gérard, tu peux répéter la première question du débat ? Je voulais répondre Attends, tu me laisses parler, s'il te plaît Les trains font-ils l'amour ? Tu me prends pour un con ou quoi ? Non, je t'y prends pas Stylès Ouais, mais c'est pas moi qui l'ai dit, alors Pauvre chave C'est pas moi qui l'ai dit, slogan C'est vraiment un bacard, hein Abrouti, va Espèce de doigt en douille, va Tu travailles, hein ? Non Alors, c'était un... Il y a un autre Gérard, il y a un autre Gérard Ouais, il y a un autre Gérard à l'antenne, là Slogan ! Ouais, bah, je viens de répondre Ok, alors, je sens le marrant Alors, effectivement, je pense que les trains ont une vie sexuelle plus épanouie Oh, la folle Parce qu'ils peuvent faire ça à une vitesse plus rapide Non, non, c'est toi, Fildor Ils vont plus vite, quoi, si tu veux N'importe quoi Ils peuvent avoir une vie sexuelle plus épanouie Vu qu'ils vont plus vite J'aimerais te dire je t'aime à la loco J'aimerais te dire je t'aime quand je fais un travlo Celui qui s'amuse à dire ça va se calmer T'as compris ce que je t'ai dit, Gérard ? Ouais, ouais, j'ai entendu Donc, y'a pas de problème Ok, alors, sixième, septième question Pourquoi faire grève lorsqu'on est bien payé ? Gérard ? Oui Juste avant que tout le monde réponde Donc, on accueille J'ai des poux Sous les bras, j'ai des poux Pardon, excuse-moi, c'est un peu compliqué Oui, allô, bonsoir Et on accueille, donc, Couscous À la place de Badminton Salut Couscous Couscous Couscous Couscous Couscous Allô, couscous Couscous Allô, vrai bonnet Je passe le bonjour à Abdel Wahed Salut Tu m'éteins ça, toi ? Tu m'éteins ça, là-bas ? Couscous, c'est une dédicace, hein, ce soir Alors, donc, euh... Bon, vous fermez votre gueule un peu, maintenant On salue, on salue Sous les bras, j'ai des poux Bonsoir à toi Oui, bonsoir Eh, Couscous, bonsoir à toi Bonsoir, tout le monde Eh bien, bien revenu dans les débats du jeudi, toi Bonsoir à tous les bouddhistes Alors, donc, pourquoi faire... Bon, maintenant, vous allez vous calmer Parce qu'il est 2h45 Et je voudrais terminer le débat correctement On peut se... Allô ? Allô ? Ne quittez pas, ne quittez pas Allô, bébé ? Oui, ça va, tranquille Ça va, ça va On peut savoir le nombre de personnes qu'il y a sur internet Puis le darpega, parce que tout à l'heure, ça va mal se finir pour toi Sur... Alors, allô ? Oui, on t'écoute Allô ? Allô ? Allô ? Ok, non, c'était pour... FILDAR ! Oui, Fede, bonsoir, c'est au standard Oui, Fede, bonsoir, c'est au standard Euh, s'arrêtez de bouger Bon, Fildar, tu dégages Non, non, mais là, ça commence à bien faire, lui Oui, Fede, bonsoir, c'est au standard, tu veux parler de quoi ? Ouais, salut Fede, c'est à l'antenne, c'est pour... Bon, ça y est, c'est Manu, là, t'as vu ? Gérard, on est 4131 FILDAR, TU LÊTES PAS LES RIGAUX, QUOI ? Fais ce con ! 4131 Bon, moi, j'arrête le débat On est 4131 Arrête Non, mais là, c'est pas Manu C'est Fildar qui déconne Bon, c'est Fildar, t'arrêtes maintenant D'accord, j'arrête Qu'est-ce qu'il se passe ? Donc, on est... Ça va ou pas ? Non, mais qu'est-ce que c'est que ce bordel, là ? Non, mais je crois qu'il y a un problème Non, il n'a rien allumé Fildar, ça commence à bien faire Il n'a rien allumé ! Regarde ! Il n'y a pas de problème Non, mais il s'amuse, là-bas Non, mais c'est pas grave Manu, c'est la dernière semaine que tu peux les débattre, toi Ça, la semaine prochaine, c'est terminé pour toi On verra Non, non, il n'y a plus de... On verra maintenant, c'est fini Deux semaines qui me foutent la merde, c'est pas la peine Donc, on est 4000... 4000... 4000... Arrêtez, derrière... C'est quoi ce bruit qu'on entend ? Je ne sais pas, je... C'est dingue Bon, on est 4321, c'est en train de remonter un petit peu Mais on n'atteindra pas... Je vais m'accrocher, Gérard On n'atteindra pas les 3000 ce soir Non, les 5000 Les 5000 ce soir, excuse-moi, je suis fatigué Alors, septième question Je vais m'accrocher, Gérard Pourquoi faire grève lorsqu'on est bien payé ? On va demander à Couscous Moi, je ne sais pas Je ne vois pas le problème dans la... Est-ce que tu fais des grèves, toi, Couscous, des fois ? Oui, ça m'arrive Tu fais des grèves de la faim, non ? Oui, j'ai déjà fait le ramadan J'ai déjà fait le ramadan Mais je me suis déjà fait aussi des grèves des poumons Des grèves du cœur, des grèves du foie D'accord Sous les bras, j'ai des poux Je suis en point Tu réponds ? Mais tu es en point, Gérard Tu réponds ou tu ne réponds pas ? Tu réponds, c'est bien Si tu ne réponds pas, attends Manu, tu le prends... Tu réponds ou tu réponds fort ? Manu, tu le récupères On va passer à Slogan La question, j'attends un peu trop On va s'écouter un petit morceau Vos gueules ! Moi, je ne réponds pas aux questions Je ne réponds pas à la question dans ces conditions Il faudrait que tu mènes un peu mieux ton débat Alors, Slogan Répète-la, répète-la Répète la question N'échouiez pas ! Pauvre con, va Arrête tes conneries, tu veux ? Arrête tes conneries depuis tout à l'heure Arrête ! Arrête ! Ce que tu m'énerves ! De poisson ! Lorsque Slogan ! Ouais ! Il y a de l'écho dans la maison C'est Notre-Dame de Paris, là Arrête ! Arrête, Gérard ! Gérard, arrête ! Arrête, arrête, arrête ! Bonne heure, Gérard ! Bonsoir à tous les égorgeurs de France ! Bon, allez, hop, terminé Ce n'est même plus la peine de continuer le débat J'arrête, hop, terminé Fildar, tu dégages, c'est fini pour toi Moi, j'arrête, je continue pour le débat Bonsoir à tous, vous faites les conclusions Couscous pour la conclusion du débat Non, ils sont tous là, Gérard Non, non, non, tu dégages Je ne vois pas le savoir Ces conclusions, c'est tout Tu as bien foutu ta mère lors des deux débats Mais non ! Tu as foutu ta mère pour lors des deux débats Le report a été battu partout On fait ça pour Internet, alors Fais-le pour Internet Il y a encore plus de 4000 personnes On peut peut-être continuer pour eux Toi, tu... Tu vires Non, mais je ne fais plus rien Tu vires, tu vires, c'est des roms Je ne bouge plus Alors, Slogan, si tu veux répondre correctement à la question Ben oui, mais il y avait tellement de brouhaha que je n'ai pas entendu Alors, il faudrait que tu répètes Ce n'est pas possible Tu peux répéter, s'il te plaît ? Pourquoi faire grève lorsqu'on est bien payé ? Alors là, c'est une question bien difficile C'est une bonne question, ça C'est une bonne question Je ne sais pas ce qui t'arrive en ce moment Gérard, sur l'IRC, on me demande que tu répètes cette question, justement Alors, pourquoi faire grève lorsqu'on est bien payé ? Gérard, au standard, on me demande aussi que tu la répètes encore une fois Non, non, mais ils me font chier, au standard Ben ouais, mais bon Gérard, sur Minitel, moi, ils me demandent que tu fermes ta gueule Non, ben toi, tu vas fermer ta grande gueule de con C'est Minitel C'est Minitel C'est Minitel Oh là là Eh Gérard, tu penses aussi quand tu fais caca ? Voilà, pour le Minitel, il ne fonctionnera plus Ah, bien joué Alors, slogan, si tu veux répondre correctement à la question, maintenant Ben, je la trouve tellement compliquée Ben, non, je pense que ce n'est pas utile de faire grève quand on est bien payé D'accord Donc, Tony Ouais, non, en fait, ce n'est pas les riches qui font grève C'est les pauvres comme nous Ben ouais, mais... Non, mais Tony Oui Est-ce que... Pourquoi faire grève lorsqu'on est bien payé ? Non, mais tu ne comprends pas que c'est les pauvres, les pauvres qui font grève Ce n'est pas les riches Les riches, ils n'ont pas besoin de faire grève puisqu'ils ont déjà tout ce qu'il faut Mais n'essaye pas de l'inscrire Ils font des émissions sur M6, ils ont la radio et tout ça Tony, tu évites de dire des noms Eh Gérard, tu penses aussi quand tu fais caca ? On est pauvres, on est pauvres, on est pauvres Donc, la semaine prochaine, pas de Tony Alors, comme toi Ouais De toute manière, c'est la fin du débat, il est 2h51, j'arrête un peu Mais Gérard, mais t'es où ? Comme toi Ouais Bah non, c'est pas utile, moi je suis le même avis que Tony D'accord, et je sens le harangue pour finir Alors, quoi te dire ? Je pense que c'est pour emmerder les gens Tu ne crois pas ? Elle est con Non, mais ce n'est pas la question, ça Ça n'a rien à voir avec la question Elle n'a rien dans la tête Viens là, viens là, viens là, la cinglée Elle est con Allez hop Alors, je vous préviens Elle est priso Elle est moins con que vous parce qu'elle sait répondre aux questions que vous, vous ne savez pas répondre Alors, moi, pour vous dire Oh, vous fermez vos jeunes maintenant Merci Alors, moi, pour vous répondre, je ne sais pas Pourquoi ça sert de faire grève lorsqu'on est bien payé Vu qu'il y en a qui se touchent des briques par mois Combien ? Des millions par mois, je me demande pourquoi ils font grève Ça ne sert strictement à rien Tu peux toujours réclamer 200 balles de titres qui restent en plus Et alors ? Ça dépense Mais ouais, c'est pas possible Conclusion Je sens le harangue et que tu suces la bite, ça y est Non, non, non, mais il ne faut pas déconner J'ai un problème au standard Donc, c'est terminé C'est rien terminé du tout, tu continues Allez, je ne sais pas, fais pas la pute Il y a un problème au standard C'est un problème d'insert, quand même Si quelqu'un m'entend dans le CD-ROM Allô, je suis perdu, là C'est mieux, déjà Conclusion Gérard, avant de finir, quand même, il y a Davy1 qui te pose une question Est-ce qu'il y a des universités où on apprend à faire grève ? Arrête, Gérard, il ne sait pas ce que c'est, une université Ça a merdé encore Personnellement, non, je ne pense pas De toute manière, même les lycéens font grève Mais comment on sait comment il faut faire la grève, alors ? Ça, c'est eux qui savent S'ils sont mal payés, ils font grève Non, non, mais ce n'est pas que ça Je vais t'expliquer, par exemple, tu es étudiant, tu n'as jamais fait de grève Il y a quelqu'un qui dit, bon, on va faire la grève Si tu ne sais pas comment on fait, qu'est-ce que tu fais ? Tu l'essuies, c'est tout Tu l'essuies, tu fais quoi ? Tu l'essuies comme un mouton ? Tu rentres dans le truc, et puis c'est tout Tu l'essuies avec un chiffon, non ? Mais non, tu fais comme ils font, et c'est tout Donc, conclusion du débat, on va demander à Couscous C'est bâclé, ton débat Tu n'avais qu'à moi faire le compte, ça ne serait peut-être pas arrivé Ça n'a rien à voir Je les coupe, ils rigolent Couscous Continue, continue, Gérard Non, non, c'est terminé C'est terminé Allez, une question Continue ton débat Combien coûte une grève en général ? Bon, laisse tomber, on conclut Bon, alors, conclusion, Tony, conclusion Allez, hop Merci, Tony C'était bien, bravo C'était bien marré C'était bien, bravo C'est un peu trop le bordel, quand même Et qui est-ce qui paye ? C'est les auditeurs Donc, j'aimerais que la prochaine fois, on fasse ça mieux que ça Voilà, comme d'habitude Et puis, c'est tout Ok C'est qui ? C'est Goldo Qu'est-ce qu'il vient faire ? Non, je te jure Slogan Slogan Sérieusement, pour une fois Plus t'avances dans le temps, plus c'est de la merde ce que tu fais Et faudra que tu... C'est faux C'est faux C'est faux C'est faux Franchement, on te prendra pas Toi, tu resteras chez toi Alors, sous les bras, j'ai des poux Non, mais j'ai pas fini Non, non, mais ça y est Si, t'as fini Sous les bras, j'ai des poux Ouais, bah, donc, je continue avec ma soucoupe volante Je voulais dire que tu mets tout sur le dos de Fildar Mais faudrait quand même un petit peu que tu te calmes, quand même Non, mais attends, qui c'est qui a foutu sa merde au premier débat ? T'as quand même déjà la grosse qui n'aide pas du tout le débat, quand même Non, Manu n'est pas grosse Non, mais je parle pas de Manu Elle apporte pas des réponses très constructives Et déjà, tes questions ne volent pas très haut Après, si tu mets ça sur le dos de Fildar, ça le fait pas Mais attends, les questions de la grève Fildar, il travaille, regarde-le, il travaille, il s'acharne et tout Et toi, tu le tapes Les questions de la grève, on les a revues et corrigées avec Rigaud et Manu Donc, je vois pas du tout pourquoi c'est de la merde Et c'est pas une raison pour faire du kickboxing avec Fildar C'est terminé Ok, couscous Ouais, bah, le débat, il aurait été plus intéressant Si t'avais pas trop gueulé sur tes standardistes Non, mais j'ai pas gueulé sur mes standardistes Manu, il a bien fait son boulot au deuxième débat Rigaud, il bosse toujours bien sur l'IRC Donc, je vois pas, au deuxième débat, je vois pas sur qui j'allais gueuler À part Fildar qui s'amusait à passer des doubles sons Ça, c'est tout T'es d'accord, couscous ? Y'a pas de problème Bon, Gérard Y'a quand même quelques conclusions sur l'IRC On va pas lire les 4000, quand même Alors, y'a Turpentine qui dit que ton débat avait ni queue ni tête comme toi Comme d'habitude Y'a, je sais plus qui, qui disait qu'ils ont apprécié la grève de ton cerveau Qu'est-ce qu'il se passe ? Euh, voilà, donc, ça sert à rien de faire la grève Mieux vaut tenter sa chance au Big Bill si on veut plus d'argent Ouais Si c'est pour insulter ses assistants et passer son temps à gueuler en bâclant les débats GG devrait faire grève C'est vrai, ça ferait du bien que tu nous fasses une grève de débat C'est ce qui pourrait peut-être se produire Ouais Ok Et je voulais juste finir pour dire que le 13 décembre Y'a une grève planétaire des internautes contre France Télécom Ouais J'en reparlerai dans la semaine Ouais, ouais, c'est 9h Comme toi Ouais Donc pour toi, conclusion Déjà, je vous fais tous des gros bisous Et puis, je voulais dire que tu pues la moule Faudrait mieux qu'elle reste chez elle Parce qu'elle a déjà les questions à l'avance Elle répond n'importe quoi Elle sait pas du tout avancer le débat Ça commence vraiment à puer la moule Tu pues la moule, reste chez toi Ben, c'est simple parce que j'ai pas de personne Mais si, c'est le poisson là C'est le thon C'est le thon Le harangue pourri C'est le thon Ah non, le harangue, pardon Gérard C'est qui ? C'est Pierre Fulain Non, mais c'est bien C'est de la merde, peut-être Je sens le harangue pour conclure Je sens le harangue Allô, je sens le harangue Elle est là Allô Pas elle là, pas elle là, son piquet Si, il est là, son piquet Pas elle là, pas elle là, son piquet Oui, il est là Hein ? Ouais Tu as pas entendu ce que j'ai dit ? Non Non Gérard, je t'attends à la sortie de la radio Donc, je te répète, c'est comme t'as pas entendu Ouais Donc, j'ai un truc au départ Gérard, je t'attends à la sortie de la radio Bon, celui qui s'amuse à dire des conneries, vous laissez parler des gens, merci Gérard, je t'attends à la sortie de la radio Donc, ouais, je t'écoute Et j'écoute pas trop souvent quand même D'accord Bon, bah, c'est pas grave, j'ai vaguement entendu ce que tu me disais parce que c'est coupé à moitié Fildar, tu recommences ? Non, non, mais tu recommences, c'est bien, mais ça c'est terminé pour toi Est-ce que tu fais des bêtises, celui-là ? Alors, on va s'écouter, pour moi, la conclusion, c'était de la merde Le débat, c'était comme le premier, j'ai pas pensé que ça allait se terminer comme ça, c'est grâce à Fildar quand même Parce que celui qui a foutu sa merde, on termine avec combien de personnes sur l'IRC quand même, Rigo ? Allô, Gérard ? Non, mais... Allô, Gérard ? Manu, là, fait quelque chose Allô, Gérard ? Non, mais je peux pas parler si... Donc c'est bon Alors, on a fini à 4563 personnes, ce qui est vraiment excellent C'est pas mal Franchement, Gérard, y'a aucune radio qui va faire un... Non, mais je pense que d'ici... On aurait pu faire mieux s'il y avait moins eu de bordel avec Fildar Oh non ! Tu te rends compte, Gérard, qu'il fait de la merde et t'as 4000... Non, non, mais c'est toi qui a foutu ta merde, t'as foutu ta merde sur les deux débats Allô, Gérard ? Y'en a que deux qui ont bien bossé, c'est Manu et Rigo, c'est tout Y'a que eux qui bossent bien lors des deux débats Alors, on va s'écouter... Ah, c'est clair, y'a même pas toi, toi tu bosses pas non plus bien Allô, Gérard ? Pour terminer, 256, on va laisser Rousseau pour la nuit sans pub Allô, Gérard ? Demain matin, 6h, vous allez retrouver Bart Allô, Gérard ? Et demain soir, 22h, vous allez retrouver le Star System Et surtout, y'a des places à la loco et... Y'a Jean-Denis Berre demain, c'est... Jean-Denis Berre, pour en offrir, là ? On peut en offrir Eh ben, pour demain soir, ceux qui veulent venir à la loco avec le DJ Regueuillat, je serai là Et puis, y'aura également DJ Sinclair, c'est maintenant qu'ils appellent au standard On va prendre les 3, 4, 5, 6 premiers Avec la personne de leur choix, ils viennent gratos Grâce à Gégé, quand même Et donc, samedi, t'es où, tu peux préciser ? Samedi à Vannes, on est à... Malverne Malverne Voilà, donc, je vous souhaite une bonne nuit Je vous retrouve la semaine prochaine Et on s'écoute les poules du Cirque Pain d'Air Avec du saucisson Bonne nuit à tous et à la semaine prochaine == Le débat sur les jeux télé == === Le contexte === === Les personnages === === Transcription === Nous avons une parodie de Gérard, sympathique paraît-il, bonsoir faux Gérard. Allo ? Oh putain, tu es réveillé, c'est grave. Il est dans une cabine, ça va Gérard ? Bonsoir à tous, donc bon ben, petite parodie des débats je crois. D'accord, ben le vrai Gérard t'écoute, on y va. Donc balance le jingle et c'est bon. Ah faut que je mette le jingle, pardon, alors excuse-moi, vous l'avez calé, attention on y va, prêt, 3, 2, 1, top. Et voilà, donc bonsoir à tous et bonjour, c'est les débats de Gérard, donc on va saluer Rigaud à l'internet www.funradio.fr. Oui, bonsoir, big big up. Ok, donc Manu au standard 0870 5000. Ouais, en gros, salut. Et Fildar à la pro. Ok, donc on va accueillir Couille de loup. Bonsoir Gérard. Couille de loup, bonsoir. Bonsoir Gérard. Bonsoir. Bouledogue mystère. Oui, bonsoir Gérard, t'aurais pu m'imiter aussi, je suis quand même une star, merde. Ouais, salut. Donc le débat, je pense, va porter sur la poésie. Donc première question, que pensez-vous de la poésie, si oui, pourquoi ? Donc on va demander à Bouledogue mystère. C'est bien tu Gérard. La poésie. Non mais tu travailles. Est-ce que tu peux me répéter la question ? Non mais tu te fous de ma gueule, alors bonne nuit, dégage. Hop, tu me gères ça, d'accord ? Ouais, Gérard, c'est Manu. En gros, à la place de Bouledogue mystère, on accueille Saucisson à l'ail. Ok, donc Saucisson à l'ail, bonsoir. Bonsoir. Allo. Bonsoir. Saucisson à l'ail une fois, Saucisson à l'ail deux fois. Je suis là, je suis là. Bon, alors t'as écouté la question ? Ouais. Donc pour toi ? Ouais, bah moi j'aime bien la poésie, je trouve que ça ouvre l'intellect sur... Non mais attends, Saucisson à l'ail, on va pas aller voir l'intellect ou autre, hein. On va pas chercher Midi à 14h, d'accord ? Que penses-tu de la poésie ? Bah en fait, j'aime bien. Donc couche de loup pour toi ? Ouais, bah moi j'aime pas ça. Je trouve que ça sert à rien, on nous fait chier à l'école, là, toujours, apprendre des poésies, on s'en fout. Mais bon, c'est bien parce que t'apprends à lire quand même. Non mais attends. Quoi ? Attends, à l'école, déjà d'une. Quoi ? Déjà, à l'école, la poésie, ça m'étonnerait qu'on en apprenne, je suis désolé. Ah bon ? Non mais attends, moi je veux te dire une chose que... T'es à quelle école, toi ? Non mais attends, déjà, moi je veux te dire une chose que l'école, bon bah, je sais pas que j'ai pas été, mais j'ai pas trop pratiqué de ce métier. Mais je veux te dire une chose, tu vois, ça m'étonnerait, hein. Donc... Tu changes d'école, hein. Ah ok. Donc moi, en ce qui me concerne, c'est dommage parce que, bon bah, moi, la poésie, c'est un truc que j'aime bien. C'est pas un truc qui me déteste. Donc, moi, je veux te dire une chose que, d'ailleurs, ce chisson-là, il pourra confirmer. Ouais, tout à fait. Tout à fait. Déjà, ce soir, toi, je vais te bouffer ta petite chatte. Je veux te dire une chose que, tu vois, la poésie, c'est un truc que, moi, pour faire craquer les filles, c'est ok, quoi. Voilà, donc, bon bah, on va... On s'écoute un petit disque ou pas, là ? On fait quoi ? Non, conclusion, d'accord. Donc, conclusion, c'est pas mal. C'est dommage que, bon, les auditeurs, c'est un peu des habituels, j'ai l'impression. C'est Tony, on t'a reconnu. Donc, tu pourras pas dire que c'est le contraire. Et toi, ce chisson-là, je t'attends, je sais pas. Dans mon lit, on va faire la fête. Rigaud, sans indiscrétion, on a combien de monde, là, sur Internet ? Oui, énormément de monde sur Internet. On est deux. Il y a moi et un mec de France Télécom à qui, d'ailleurs, je fais une petite casse-déli. Ok. Donc, là, je crois que le record mondial d'Internet est pas prêt d'être battu, parce que, là, c'est bizarre. La semaine dernière, on avait atteint les plus de 3000. Et maintenant, on est que deux. Donc, là, je crois qu'on touche le fond du rouleau. Donc, bon, bah, on va s'écouter un petit disque, quand même. On va s'écouter des annus sans feu avec Bouffe-moi la chatte le week-end, mais pas la semaine, je travaille. Voilà, donc, dans un instant, vous allez retrouver Blondo pour les nuits sans pub. Et bonne nuit à tous. Bravo, t'es bien assuré. Excellent. Bravo. Il faut l'embaucher, il faut l'embaucher. Ah, là, franchement... Big up, big up. Ah, ouais, big up à toi, parce que, franchement, bravo. Bravo. Dommage, tu peux me refaire un petit coup de fil d'art ? C'est dommage qu'on n'ait pas entendu assez fil d'art. C'est hallucinant, c'est hallucinant. C'est hallucinant, hein, Tony ? On connaît bien la voie du fil d'art. Putain. Tony, entre Tony, Manu et fil d'art, et Rigo, putain, mais c'est hallucinant. qui n'a pas trop apprécié qu'on se foute de sa gueule, il s'est vexé. Alors que je lui ai expliqué que c'est un peu comme les guignols, c'est la consécration que quand on est une star, on est imité. Gérard fait une parodie. Gérard est en train de fumer sa cigarette dans le couloir, il n'est pas content, il fait la gueule. C'est dommage, mais en tout cas, vraiment félicitations. Il n'y a rien à dire, c'est du top top de chez Top Top. Quand tu as l'occasion de nous en refaire d'autres, n'hésite pas. J'avais prévu de faire ça toutes les semaines, mais je ne sais pas si... Ah si ? Je ne sais pas. Avec grand plaisir. Avec grand plaisir. Merci encore. N'hésite pas quand de temps en temps, Pierre Fula, tu peux également nous faire des petites engueulades entre Gérard et Fildar. Si tu avais à inclure ça dans tes débats, je sais que ce n'est pas facile. Petit à petit. Merci. Qu'est-ce qu'il y a, Gérard ? On l'a repris en antenne. Qu'est-ce qu'il y a ? Bah non, fais pas la gueule, merde ! Il est vraiment... Il est vraiment... Il est vraiment phénomène ! Il est vraiment... Il rigole, vas-y ! Il est vraiment phénomène ! Allez, Gérard ! Bon, allez ! Dans moins de 5 minutes, sur Fun Radio, les débats de Gérard vont démarrer. La pression est mise à son maximum, que les radios d'en face s'accrochent, car le bulldozer de la bande FM va arriver. Le monstre, par définition. C'est Alain Delon au cinéma. On a connu Spielberg en tant que metteur en scène. Et il y a sur la bande FM l'animateur qui, sans nul doute, va marquer ses 5 dernières années. Et à mon avis, c'est loin d'être terminé. On est au début d'une grande aventure. Encore 15 ans de signature pour un débat de Gérard, comme chaque jeudi. Un sur la posie et un sur les séries télévisées. TF1, entre autres, qui sont remis bien largement en avant grâce au Big Bill. Les débats de Gérard, si vous voulez y participer. 75 000, Internet également à votre disposition. irc.funradio.fr Et dans l'immédiat, Lenny Kravitz pour foutre la pression, les enfants. Toute la bande FM, ce soir encore, va cramer dans tous les sens. Prévenez-les, Sky, Energy, RFM, Chérie FM, Nostalgie, RNC. Ils sont morts, eux. Europe 1, RTL. Gérard de Suren déboule sur la bande FM. Les débats, pas de radio et pas d'insultes de Gérard. Qui vous attend sur l'Internet. www.frfunradio.fr On est combien, là, pour l'instant, Rigo ? On est déjà 1280. Et ça arrive, ça n'arrête pas d'arriver. Et tu vois, plus ça va, plus ça monte. Donc, le premier débat va porter sur les jeux télé. Donc, on va accueillir pour ça Je Pue, Je Pue la Crotte, Je Pue la Crotte, Yetto, On peut écouter Fun Radio sur... Ifto, Gérard, excuse-moi. Ifto. Ah, Ifto. D'accord. T'écriras mieux, d'accord ? Non, non, mais t'écriras mieux. C'est Manu qui a écrit. Gérard, c'est mon écriture, tout ce qui est ville et fréquence. Ok, je te remercie, Manu, de préciser. Donc, on peut écouter Fun Radio sur 97.9. Oui, bonsoir, Gérard. Bonsoir à tous. Oui, bonsoir, Tony. Mais non, Tony, il est là. Écoute, Tony, allô. Oui, bonsoir, Gérard. Bonsoir à tous. C'est pas moi. Bien sûr, Tony à Brest. C'est ça. Alors, Tony, c'est Paris. Il a le droit de voyager ? Dans Vacances à Brest. Enfin, bref. Pipouin. Pipion. Pipion. Albi. 97.1. Ouais, c'est ça. Non, mais répondez pas quand je parle. Bon, Pipouin, là. Pipion. Pipion, tu réponds ou quoi ? Il est là, merde. Oh, quoi, merde ? Je vais pas te faire foutre, ok ? Oh, Gérard, doucement, quand même. C'est le début. Pute de nuit. Pute de nuit, Aras. C'est ça. Bon, bien sûr. Allez, foutez-vous de ma gueule. Foutez-vous de ma gueule. Allez, hop. On attaque. Comme ça. Non, mais présente quand même tout le monde, Gégé. Attends. Pour un instant, c'est quoi ce bordel que tu me fais ? Tu commences. Gérard. Tu commences. Tu commences. C'est juste le nom. Attendez, attendez. Merde ! Putain, mais c'est quoi ce bordel ? Moi, je fais le standard. Mais quoi ? J'ai rien fait. Mais t'es dans ce bordel. Putain, mais c'est quoi ? Putain, rigole pas. On va avoir trois auditeurs. Oh, non, non, non, non. Mais attends. C'est quoi ce bordel qu'il nous fait ? Quoi ? Il y a je pue la crotte. Non, non, non. Allez, hop. Allez, hop. Allez, hop. Mais calme-toi. T'es énervé pour rien. Putain, mais merde. Qu'est-ce qu'il me fait, là ? Qu'est-ce que c'est que ce nom ? C'est surnom. J'y peux rien. Attends. Je te jure. Dégage. Dégage. Je veux plus te voir ici. Dégage. Casse-toi. Casse-toi. Casse-toi. Mais qu'est-ce qu'il va faire, le standard ? Comment on fait, Gérard ? Attends, putain. Non, mais Gérard, ça va. Moi, j'en ai ras-le-bol. J'en ai ras-le-bol. Toutes les semaines, c'est le bordel. Mais non. Mais si, ce soir, ça va être le bordel. Mais non. Mais si. Je vois le coup arriver. Mais arrête des bêtises. C'est toi qui es énervé, ce soir. Attends. Moi, je vois le coup. Non, t'es énervé d'office. Alors, Tony. Ça va bien se passer. Ça va bien se passer. Bien sûr. C'est le bordel. T'as décidé. Donc, c'est ta faute. Oui, pourquoi ? Parce qu'il est là. Il n'a pas été... Je ne voulais pas ce soir. Mais qui est à ta place ? C'est bon. Je ne veux pas. D'accord. Tu choisis quelqu'un. Alors, il n'y a personne au standard. Comment on fait ? Non, mais là, il voulait quelqu'un. C'est lui qui remplace. C'est lui le chef. J'en ai parlé hier. Bon. C'est Gérard au standard. Il fait tout, Gérard. Françoise. Oui ? Bonsoir. Bonsoir, Gérard. Ah, Françoise, salut. Oh, on se calme. Bah, écoute, j'ai le droit de dire bonjour, quand même. Elle est quand même Gérard, la star. Ouais. C'est clair. Vas-y, Gérard. Allez. Ça commence à... Allez, boum. Première question. Allez. Génial. Voilà. C'est bien. Fais voir. Non, non, non. Attends. C'est quoi, les noms que tu me cherches ? J'en ai rien à foutre. J'en ai rien à foutre. Vas-y, j'en ai rien à foutre. Salut, Gérard. Ça va ? Salut. Hé, Gérard, est-ce que tu pourrais me prendre au standard, là ? J'ai quelque chose à te dire, s'il te plaît. Non, non, non, non, non, non. C'est qui ? C'est qui qui veut me parler ? Rodrigo. Hein ? Rodrigo. Bon, Gérard, allez, on y va. On y va, on y va. Parce qu'il n'y a personne au standard, c'est la merde. Alors, vas-y, Gérard. Première question. Dans le débat, dans le débat. Première question, c'est sur les jeux télé. Quel est votre jeu télévisé préféré ? On va demander ça à Je Pus La Crotte. Je Pus La Crotte, bonsoir. Moi, mes jeux télévisés préférés ? Alors, mon jeu télévisé préféré, c'est quand même le Big Bill. Il faut le dire, c'est un jeu passionnant et j'adore. J'adore la gaffe. Oui. Voilà. C'est tout ? Ouais. Alors, Pipion ? Moi, c'est sans aucun doute le juste prix. Ouais. C'est vraiment bien, quoi. C'est intéressant et c'est culturel. Enfin, c'est tout, quoi. Ouais, d'accord. Vous cherchez pas trop à... Bah, c'est vrai. Non, mais vous cherchez pas trop à répondre aux questions. Bah, pourquoi ? Bah, tu me dis... Alors, Pute de Nuit ? Ouais, moi, c'est 100% question sur Arte. Comment ? Moi, c'est 100% question sur Arte. Non, sur Arte... Non, non, non, non. Sur Arte, y'a rien. Si, si, y'a Formos sur... Il y a assez Formos qui me précise. Le mieux, c'est 100% question. Pas d'animateur, pas de décor, pas de candidat. Non, non, non. Sur Arte, y'a aucun jeu télévisé. Je suis désolé. C'est pas Arte, c'est la cinquième. C'est la cinquième. Arte, ça fait un peu plus... Artoni ? Ouais, non, moi, en fait, j'aime pas trop les jeux sur TF1. Je trouve que c'est un peu débile, quoi. J'ai l'impression que c'est un peu pour les beaufs. Moi, ce que j'aime bien, c'est les jeux sur France 3, question pour un champion. Et puis, aussi, 100% question. Le Cadoc ? Pardon ? Le Cadoc ? Le Cadoc, non, j'aime pas trop, parce que ça me fait trop penser à la 4-10-9. La famille en or ? Non, non plus, parce que c'est sur TF1. Et alors ? Ouais, ben, j'aime pas, non, en fait, non. Dans ce cas-là, si ça te plaît pas, tu changes de chaîne, c'est tout. Voilà, il a le droit de pas aimer. Il a le droit de pas aimer. Il regarde les autres chaînes. Ben ouais, c'est ce que je fais, c'est ce que je t'ai dit. Françoise ? La gaffe. La gaffe, le juste prix, et puis... Là-haut de la fortune ? Oui, avec Philippe, ouais. Philippe, tu le connais ? Ben, bien sûr, ouais. Ah bon ? Ouais, ouais. T'as déjà couché avec lui, Françoise, non ? Oh, Manu, ça suffit. Oh, je demande, je me renseigne. Et Françoise, tu regardes Cascado ou pas ? Non. Et j'en ai rien à foutre pour terminer ? Moi, c'est le Big Bill, mon préféré, et j'ai pas tribu une fois. Et, en fait, derrière Zeno, j'ai une botte de coton-tige. Alors, toi, j'en ai rien à foutre. J'en ai rien à foutre, c'est terminé pour toi. Non, mais je l'ai vu, je l'ai vu, cette émission, c'est vrai. Ben oui, c'est vrai. Bon, alors, si vous commencez à me casser les bureaux... Mais je te casse pas les bureaux, Gérard. C'est vrai, j'ai participé. Tu réponds comme il faut à la question, et tu la fermes. Bon, alors, c'est le Big Bill, voilà. Parce que, pour l'instant, vous avez... Là, pour l'instant, vous êtes en train de me casser les couilles, et j'aime pas ça. C'est bon signe, alors. Allez, Gérard. Allez, continuez. Continuez comme ça, vous allez... Allez, enchaîne un peu, là. Quoi ? Qu'est-ce que t'as, toi ? Ben quoi ? T'es animateur radio ou t'es un branquin ? Qu'est-ce que t'as ? Qu'est-ce que t'as, là ? Ben quoi ? Tu me cherches, là ? Vas-y, j'ai quatre palmanouches qui s'éveillent en moi. Eh, si t'es pas content, tu te casses. Ok ? Allez, Gérard, arrête d'être agressif. Allez, enchaîne, enchaîne. Alors, lors des émissions des jeux, jouez-vous à deux, ou à plus, ou à autres ? On va demander à Françoise. À plusieurs. Tu peux préciser ? C'est-à-dire que je joue moi, mon fils, et puis mon partenaire. Ouais, mais tu peux préciser sur quels jeux, à peu près, Françoise ? La plupart, c'est Laïga. C'est un cycle juste pris. D'accord. J'en ai rien à foutre. Ben moi, disons que je joue tout seul, parce que j'ai qu'un chat, donc je joue tout seul. D'accord. Je crois que toi, pour l'instant, t'as pas l'air de comprendre ce qu'on pose comme question. Rico ? Oui, sur IRC, il y a Davy1 qui te demande si il serait intéressé... Est-ce que tu serais intéressé de présenter un jeu télé sur Fun Radio ? Non. Présenter un jeu télé sur Fun Radio, ça m'étonnerait. Bon, alors celui qui s'est mis à rôter va arrêter. Ça pourrait s'appeler le Fun Big Bill. Allô ? Allô ? Non, mais c'est... Vous allez pas commencer le premier débat comme ça ! Bon, allez, tu poses ta question. Un jeu comme le pauvre Blaireau, ça t'intéresserait pas ? Alors, Tony ? Oui ? Le Blaireau, il t'emmerde ! Non, mais c'est un jeu sur Fun Radio, c'est un pauvre Blaireau, là. Bingo ! Bon, Gérard, je sais pas, fais quelque chose. Non, non, mais attends, pour l'instant... Non, non, mais attends, pour l'instant, personne n'est capable de gérer l'autre. L'autre, Pildar, il prend des cons. Personne au standard, tu l'as viré, c'est pour ça que c'est la merde. Tu vas là. C'est un Gérard. Olivier ! Olivier ! Olivier, c'est quoi, là ? Allez, vos dialles derrière, s'il vous plaît, merci. C'est un Gérard. Olivier ! Olivier, merde ! Olivier, tu peux laisser en l'air. Non, non, tu laisses ouvert. Non, non, tu peux laisser en l'air, tu me calmes tout le monde déjà pour commencer. Bon, vous vous calmez un peu. Non, non, mais... Prends-moi, prends-moi. Il y a Tony qui veut te parler, donc tu te débrouilles avec lui. Donc... Allez ! J'en ai rien à foutre. Tu peux reposer les questions, s'il te plaît ? Non, non, non, non, non, non, non. Je repose plus les questions. Même les gens de l'IRC, ils l'ont pas compris, la question. Alors, à l'heure des émissions de G, jouez-vous à deux ou... ou autres ? Bon, alors... Bon... Alors, quand vous avez fini de me faire chier comme ça, ben, vous me le dites. Tu peux répondre, Gérard ? C'est qui ? Ben, vas-y. Ben, moi, je suis un peu comme l'autre garçon, j'ai aussi qu'un chat, donc, ben, je joue toute seule, mais... Ben, oui. J'ai joué avec lui, je veux bien, hein. Ben, Gérard, tu gueules, mais si on n'a qu'un chat, comment tu veux qu'on fasse ? Ben, attends, pour l'instant, je t'ai pas sonné, toi. Ben, si, tu m'as engueulé tout à l'heure. Non, mais pour l'instant, moi, je t'ai dit que je t'ai pas sonné. Donc, tu laisses parler les gens. Donc, pute de nuit. Ouais. Pourquoi ? Ben, je t'ai dit, je joue avec mon chat aussi, donc, jouer à deux, c'est plus sympa. Donc, si le garçon veut que j'aille jouer avec lui, il n'y a pas de problème. OK. Pipion ? Ben, moi, je regarde comme ça. Je regarde la télé, je joue pas, ça m'intéresse pas. J'avais les fesses. Voilà. OK. Euh... Je pue la crotte ? Ouais, ouais, je tue la crotte, bonsoir. Moi, je joue avec mon chat aussi. D'accord. Euh... Tony ? Il est au standard avec Olivier, Tony. Ouais, ouais, je suis là, je suis là. Donc, moi, GG, moi, je joue en famille. Question pour un champion, mais comme c'est... J'ai une famille d'immigrés, c'est... Enfin, ils arrivent pas à répondre aux questions, donc c'est moi qui gagne tout le temps. Bon, Tony, tu vas te calmer. Non, mais c'est vrai, écoute, c'était... Tu vas te calmer parce que tu passes sous le test pendant les débats. Écoute, ben, je te kiffe, c'est pour tes 100% FN. Ben, moi, je te kiffe, je t'emmerde, OK ? Mais Gérard, il a rien dit, là. Ben, t'es pas insulté, là. Et pour le même prix, je t'insulte, je te le dis direct. De dos, quoi, Gérard. Comprends-le. Bon, allez, Gérard, on enchaîne. Allez, allez. Alors, troisième question. Et je répondrai après aux questions. On y abrège. Attends, si t'es pas content, toi, tu dégages, OK ? Allô ? Allô ? Allô ? Allô ? Allô ? Allô ? Allô ? Ben, Gérard, allez ! Non, mais attends ! Celui qui s'amuse à dire que j'insulte ton cul, je l'emmerde ! Allez, Gérard. Pas d'insulte. Parce que là, ça va pas commencer comme ça. C'est pas forcément à toi qu'il parle. Vas-y, enchaîne, enchaîne. Trouvez... Qu'est-ce que t'as, Tony ? Je t'ai dit de dégager. Mais il sait pas, Tony. Allez, Gérard ! Je sens la crotte, c'est bon. Allez, enchaîne. Allez, allez. Eh, putain, vous savez pas comment ça me casse les couilles au premier ! Gérard, on dit rien, alors fais ton débat. Alors, trouvez-vous qu'il y a trop de pubs entre deux ? Entre deux quoi ? Entre deux quoi ? Entre deux cul. De toute manière, vous allez réfléchir, on va s'écouter. Les six sont... Attends, attends, repose la question. Calmement. Alors, trouvez-vous qu'il y a trop de pubs entre deux ? Et on va s'écouter. Voilà, attends, où est-ce que les gens peuvent nous appeler ? Aux heures 875 000, c'est Olivier qui vous attend. Et sur l'IRC, il y a toujours Rigaud. Ouais ! Donc, vous pouvez toujours essayer de nous appeler sur l'IRC. Donc, www.fr, Fun Radio. Voilà, tout à fait. Et on a dépassé les 2500, on est à 2782. Ouais, c'est bien. Ça monte bien, quoi. Donc, Gérard, j'aimerais bien que ton débat se passe bien pour ces gens-là qu'on essaye encore de battre. Moi aussi, je voudrais bien que ça se passe bien. Donc, on va s'écouter les soupçons de ma grosse. Elles sont les meilleures avec des portes gertelles. Et on se retrouve tout de suite après. Les débats. Pas de radio et pas d'insultes. De Gérard. Et voilà, donc, on se retrouve. Il est 0h45. Donc, c'est toujours Olivier qui est au standard, qui vous attend aux heures 8. 0800. 0800 08 5000 et 0800 3. 0800 70 5000. 0800 70 5000 et 0800 3 08 5000. Et toujours Rigaud qui est sur l'Internet. Donc, vous pouvez toujours nous laisser des petits messages sur l'Internet. www.fr. Tout à fait. Oui, Rigaud. Oui, tout à fait. Non, mais je te laisse finir. T'allais dire quoi ? On va saluer quand même les Belges parce qu'on n'a pas beaucoup de Belges. Si, si. Contrairement à ce que tu crois, il y en a beaucoup sur l'IRC, justement, vu qu'il y a des gens de partout à travers le monde. Et voilà, les Belges, ils sont en train de s'exciter parce que je parle d'eux. Et il y a même des gens de très, très loin. Et malheureusement, il y a des gens qui ne captent pas TF1. Ils écoutent quand même le débat via Internet. Donc, on va réécouter. On récupère. Je pue la crotte. Pardon, c'est moi. Merci, Manu. Donc, je pue la crotte. Donc, j'espère que vous avez compris ce qu'Olivier vous a dit. Donc, Pipion. Oui, bonsoir. 18 ans. Pute de nuit. Bonsoir, Gérard. Donc, Tony. Bonsoir. Françoise. Bonsoir, Gérard. Et j'en ai rien à foutre. Bonsoir. Alors, donc, maintenant, je vais quand même répondre aux deux questions. Non, mais vous commencez pas. D'accord ? Parce qu'Olivier vous a calmé. Si vous continuez, de toute manière, on va changer les noms. Non, mais de toute manière, on va reprendre d'autres personnes à la place. Parce qu'il y a quand même 24 lignes qui sonnent. Donc, je voudrais bien que vous répondiez, qu'on fasse des débats corrects. Je voudrais bien qu'on arrive à faire au moins les deux débats potables. Pas comme toutes les semaines que ça foire. D'accord. Donc, alors, la première question. Quel est votre jeu télévisé préféré ? Donc, j'ai pas répondu. Maintenant, je vais vous répondre. Donc, comme Françoise a l'écoute et puis tout le monde, je pense, regarde TF1. Donc, il y a le Big Bill. Il y a le Juste Prix. Il y a le Millionnaire. Il y a Drôle de Jeux. Et il y a plusieurs jeux qu'on peut regarder. Bon, bien sûr, ceux qui adorent le Big Bill. Donc, c'est sûr qu'ils regardent tous TF1. Bon, sur la deuxième question. Lors des émissions de jeux, jouez-vous à deux ou autres ? Bon, là-dessus, je pense que là, c'est un peu dur de répondre. Parce qu'en fin de compte, on peut regarder le Big Bill ou autre. Même le Juste Prix. Bon, c'est sûr que c'est pas évident à trouver sur des chansons. Parce que là, ce soir, j'ai écouté. Les chansons, elles étaient faciles. D'habitude, c'est un un un Gigi qui le fait. Et donc, c'est pas évident à trouver les chansons. Donc, la troisième question. Trouvez-vous qu'il y a trop de pubs entre deux ? Alors, que je m'explique bien, les pubs, dès que le début de l'émission commence, au bout d'une demi-heure, à peu près, vous avez une pub. Est-ce que vous trouvez ça normal ou pas ? Donc, on m'a demandé à... À la française. J'en ai rien à foutre. Non, je trouve pas que c'est normal du tout. Ils mettent beaucoup trop de pubs. Ouais, mais tu peux te l'expliquer ? Bah... Disons qu'ils mettent une à deux pubs pendant une émission qui est une demi-heure. Ça fait beaucoup trop. Ouais, mais... Bon, d'accord. Non, ok. T'inquiète pas. De toute manière, je vais avoir une réponse aussi là-dessus. Rigo ? Non, Gérard, j'ai un sondage. Vite fait, sur Internet. Alors, sondage sur Internet. 32% des internautes se cuisent des choux de Bruxelles en regardant le Big Bill. 23% des auditeurs voudraient savoir ce qu'ils peuvent gagner en répondant au sondage. 20% des auditeurs ne trouvent plus leur télécommande. 15% des auditeurs ne savent pas suivre les jeux TV car ils n'ont pas Arte. Et 7% des auditeurs préfèrent regarder Santa Belgica. Ok. Bah, de toute manière, sur Arte, il n'y a pas beaucoup de pubs. Il n'y a pas beaucoup de jeux sur Arte. Tu regardes souvent, Arte ? Non. Non ? Bah, comment tu peux savoir, alors ? Non, parce que je regarde plus la première, comme Françoise. Donc, bah, Françoise ? Bah, moi, tout ce que je peux te répondre, moi, je trouve un peu dommage qu'ils mettent trop de pubs, mais d'un sens, comme tu regardes la gaffe, ça permet aux candidats qui sont au téléphone en direct de chercher dans leur dictionnaire. Non, non, attends. Tony, Tony, Tony, Tony. Non, non, non, non, c'est pas truqué. Parce que moi, je vais te dire une chose, que ce soir, la question a été, qu'est-ce que c'est un palindrome ? C'est une... C'est un mot qu'on peut prononcer d'un sens à un autre. Et tu le savais, ça ? T'as un exemple ? C'est-à-dire, ouais, un exemple, ouais, parce que moi, je ne capte pas. Palindrome, par exemple, tu prends en cassette. Tu fais... Tu prends à l'envers. Ça fait... 7K. 7K, mais c'est du... C'est du verlan, ça. Wesh, wesh. Bah, ouais. Ouais, wesh, wesh. Big up. Bah, ouais. Tu connais quoi, en verlan ? Comment ? Non, j'ai rien dit. Non, tu connais quoi, en verlan, toi, Gérard ? Non, non, mais moi, en verlan, je connais rien du tout. Comment on dit, Gérard ? En verlan, comment tu dirais ? Je sais pas, moi. Bonjour à tous, en verlan. Coton-tige. Olivier ? Non, pardon. Gérard, en verlan, c'est feu beau, feu beau. Bon, on va demander à Tony, maintenant. Ouais, je trouve qu'il y a trop de pubs à la télé, c'est vrai, mais c'est surtout sur TF1. C'est clair. Ouais, parce que France 2, ils n'en ont pas trop, de pubs, en fait. De toute manière, ils n'en mettent quasiment pas du tout. Ouais, c'est vrai. France 2, tu rigoles ? Non, non, non, non, non, non. Non, attendez, attendez, attendez, attendez. Attends, Tony. Tony, Tony, Tony, Tony. Oui, ouais. Tony, laisse parler... Laisse la finir. C'est qui qui... vient de dire ? C'est Pute de Nuit. Ouais, ben, maintenant, ça va être à ton tour. Après, je vais vous répondre. Je te disais qu'il y avait autant de pubs, en fait, sur la 2, sauf que eux, ils ne coupent pas les émissions, donc il y en a encore plus entre les émissions. Ah, d'accord. OK. Gérard, je sens l'accroche, tu peux répondre. Non, non, attends, t'as déjà... Non, j'ai pas répondu. Non, non, mais attends, on va demander à Pipion. Tu peux répondre à ta question, quand même ? Mais qui c'est qui a coupé, là ? Qui c'est qui a coupé ? Non, non, c'était Pierre Fulain, mais j'ai rappelé. Bon, c'est Pipion, je peux répondre ? Attends... Eh, Olivier ! Je sens l'accroche, bonsoir. Quoi ? Non, mais c'était pour moi, je veux dire, il m'a appelé pour moi, pour demain. Non, non, mais Olivier, ça va pas aller, hein. Quand quelqu'un coupe, tu me prends d'autres personnes, hein. Ah, d'accord. Ben, je prends des appels. Ouais, bon, moi, je trouve qu'il y a beaucoup trop de pubs. Il faut pas trop se plaindre, parce qu'en Amérique, il y en a encore beaucoup plus. Donc, voilà. Bon, d'accord. Toi, je crois que t'es carrément à côté de la plaque. Ah, ouais, comme ça. Je sens la crotte. C'est pas je sens la crotte, c'est je pue la crotte qu'on m'a marqué. Donc moi je trouve ça normal qu'il y ait de la pub sur TF1 vu que c'est TF1. TF1 c'est 100% pub, c'est pas 100% tube comme fan, c'est 100% pub. Donc c'est normal. Mais sur France 2, je confirme, il y en a bien. Il y en a trop. Avant de regarder l'épisode de Friends, il y a un quart d'heure. Non, non, non, attendez, attendez. Attendez, attendez. C'est qui, c'est qui là qui veut répondre avant moi ? Elle est chaude elle. Non mais tu réponds comme il faut s'il te plaît. Oui, non mais je te réponds. C'est vrai, avant Friends, il y a un quart d'heure de pub. Non, moi je peux te confirmer. Moi je te confirme que de moins 25 jusqu'à 50, il y a de la pub. Bon, moi je peux confirmer. Et ça je reviens. Oh ça y est, derrière. Le seul pub que j'apprécie c'est quand on voit Jennifer Niston. Ouais, à la fin. Bon, vous me laissez parler ou pas ? Moi Ross, je trouve qu'il a un peu une tête de chien battue quand même. Tony ! Ouais, ouais. Tu te calmes. D'accord. Donc je vais répondre à Françoise. Oui. Donc de toute manière, tu m'as appelé. Ouais. Donc on a regardé vaguement et t'as vu comme moi, c'est qu'ils ont passé des pubs. Donc moi je trouve une chose. Et ça, je pense que personne ne me le contredira. C'est que sur TF1, c'est malheureux à dire, c'est que sur TF1... Oh, vous arrêtez derrière de remplir comme des putes ! C'était un bruit de mobilette. Ouais, mais les bruits de mobilette, ils vont se classer. Je vais les calmer. Je vais calmer les mobilettes. Hein ? Continuez à ce que vous disiez. Ça commence à bien faire. Allez, Gérard, vas-y. Continue sur TF1. Donc, tout à l'heure, la question c'était qu'est-ce qu'est un palindrome ? Ouais. Donc, ils ont passé la pub. Il y a eu 4 minutes de pub. Pendant ces 4 minutes-là, t'as rien pu comprendre. Parce que t'as eu la pub et après tu l'as eue. Et ça, c'est un truc que je trouve dégueulasse. 4 minutes ? Il y a eu 4 minutes. Gérard, s'il y a de la pub dans une émission, ça veut dire que ça marche ? Donc c'est plutôt bien, quoi. Non, mais même, moi je trouve pas... Non, non. Moi je trouve que lors des jeux... Moi je suis d'accord avec Gérard. Moi, lors des jeux, tu mets pas de pub. C'est fou. Mais non, mais attends, dans ces cas-là, t'es lancé dans un jeu... Bon, c'est bon ! Laissez Gérard parler. Lors d'un jeu, de toute manière, on peut pas se concentrer pour trouver quelque chose. Par exemple, sur la 2, il n'y a pas de pub. Il n'y a aucune pub. D'ailleurs, il y a plus de gens qui gagnent sur la 2 que sur la 1. Ouais. Parce qu'il n'y a pas de pub. Parce que, que ce soit le millionnaire ou juste le prix, de toute manière, il y a des pubs dans partout. Mais faut pas non plus se concentrer pour jouer au juste prix. Faut arrêter d'halluciner, quoi. Ouais, mais attends, au juste prix, de toute manière, t'es sélectionné, faut bien te concentrer pour trouver le cadeau, pour trouver le rideau. Gérard, sur IRC, il y a Alf qui dit qu'en fait, la pub, ça sert à réfléchir pour trouver les bonnes réponses. Non, non, non, non, non. Et Gérard, est-ce que tu regardes le jeu, là, après Friends, là, c'est Kiki, c'est avec Marie-Ange Nardino. Euh, qui est qui ? Non. Kiki, c'est avec Marie-Ange Nardino. Non, je le regarde pas. Non, non, mais même... Bon, Tony ? C'est pas lui, c'est pas lui. C'est qui ? C'est le but du jeu, hein, qui est qui, faut retrouver qui c'est, quoi. Ouais, mais même, de toute manière, moi, je trouve que c'est un peu con, parce que... Non, mais même, de toute manière, tu peux pas regarder dans un dico... Non, mais c'est clair, moi, j'ai du mal à me concentrer quand je vois le millionnaire, il met une pub, j'arrive pas à tourner la roue de mon VTT, c'est clair. Bon, alors toi, tu vas tourner, la roue de ton VTT avec Olivier au standard. Salut à toi, salut à toi, tu vas tourner la roue de ton VTT. Je dégage, je dégage. Ouais, ouais, ouais. Pour calmer le débat, il y a Oxip qui te demande comment on fait pour gagner Marie-Ange Nardi, comment on fait pour la gagner. Euh... Comment ? C'est Marie-Ange Nardi Namoc. Euh, Tony, tu te calmes. D'accord ? Parce que toi aussi, tu vas faire comme les autres. Non, mais c'est son vrai nom, mais c'est un nom d'artiste, elle l'a coupé en deux. Elle est gentille, cette Marie-Ange. On se calme. Ouais, mais elle a un petit peu grossi, hein. Je sais pas, depuis qu'elle s'est fait griffer par le tigre, là. C'était un lion. C'est bizarre, hein. On se calme. Ah, c'était un lion, excuse-moi. Alors, avez-vous déjà participé à un jeu télé ? Si oui, lequel ? On va demander ça à Je Pus La Crotte. C'est parce qu'elle avait ses règles. Je Pus La Crotte ! Non, non, tu l'as viré. Je viens de le virer, là. C'est celui que t'as viré tout à l'heure. Ah bon, euh... Celui ? Je suis en train d'appeler quelqu'un d'autre. Ok. Euh, mais, euh... Olivier ? Pas... Pas sur le même nom ? Hein ? Non, d'accord, non, non. Tu me prends sur les... Non, mais j'ai appelé quelqu'un d'autre, là. Voilà. Euh, donc, on va demander à Pipion. Non, j'ai assisté à aucune émission télé. Non, non, non, non, Pildar ! Non, non, Pildar ! Attends, Pipion, avant que je te parle... Non, non, c'est pas la peine d'essayer de donner des numéros à Olivier. Olivier, il prend le standard et c'est tout. Ouais, sur les marketing. Non, c'est moi qui l'ai pris, Gérard. C'est une vraie auditrice qui a participé au Big Bill. Voilà, elle vient de m'appeler. Elle vient de me rappeler. Elle voudrait participer au débat. Elle a 40 ans, elle est amoureuse de toi, elle est folle de toi. Non, non, non, non, mais... Mais si ! Il faut qu'on la rappelle, Gérard. Elle a participé à un jeu télé, c'est la question. Vas-y, vas-y, vas-y. Vas-y, tu l'appelles, donc. On va demander à Pipion. Gérard, pour revenir au débat, il y a Le Chiant sur IRC qui te demande si les jeux télé sont tous en direct. Euh, oui. Oui. Mais en direct d'où ? Non, non, ils sont en direct dans les studios comme là où on est. C'est bien fait en direct, c'est pas truqué. Non, non, je crois pour Gérard. Est-ce que tu crois que c'est le même public qui fait toutes les émissions toute la journée ? Le public change. Mais de toute manière, je peux le certifier. Et ça, Françoise pourra le confirmer parce que Françoise, elle va... Elle me l'a dit tout à l'heure au téléphone quand elle m'a appelé chez moi. Elle va participer dans... Oh ! On a un scoop. On se tait. Le scoop, c'est que Françoise va être dans le public le 18 janvier. De quel jeu ? Lors du Big Bill ! Ouais ! Et Françoise, fais-nous un coucou. Si la caméra, elle est sur moi, oui, bien sûr. Tu fais une bonne rôle, Max par système. Voilà, tu fais un peu de pub pour Fun Radio. Ne vous inquiétez pas pour ça. Donc, on va demander à Pipion. Attends, Gérard. Autretemps, Gérard. C'est là-bas, ça se passe là-bas. Autretemps, on accueille On Se Calme avant d'accueillir Béatrice aussi. Mais d'abord, On Se Calme. C'est un auditeur. Donc, je t'écoute. On Se Calme. Oui. Bonsoir à toi. Bonsoir. Allô ? Oui, je t'écoute. Ouais. Je viens d'arriver. Tu peux me poser la question ? Donc, avez-vous déjà participé à un jeu télé ? Si oui, lequel ? Donc, je demande à Pipion. Non, non, j'ai off. Je n'ai pas assisté à vos émissions. Donc, toi, pour toi, tu n'as jamais été sur un plateau télé ? Non, mais ça ne m'intéresse pas trop. Mais pourquoi ? Parce que je n'ai pas envie qu'on me voit à la télé. Tu es moche, toi. Non, non, attends. Tony, s'il te plaît. On Se Calme, là, parce que c'est moi. C'est moi qui pose les questions, d'accord ? Donc, je voudrais avoir plus de renseignements. Non, je n'ai pas envie de passer à la télé. Donc, toi, pour toi, si un jour, on t'appelle chez toi, tu ne voudras jamais participer à un jeu télé ? Non, non, je ne veux pas. Parce que tu ne veux pas qu'on voie avec ta tête ? Non, ce n'est pas ça. Mais je n'ai pas envie. Ça ne m'intéresse pas. Ouais, mais précise. Je ne sais pas comment dire. Précise ton nom. Non, non. Tony, s'il te plaît. Non, ce n'est pas lui. Non, mais tu m'en veux, là, ou quoi ? Ou j'en ai rien à foutre, là. Tu te calmes. Hein ? Bon, ok. Je n'ai pas du genre à crier sur un plateau. Voilà, c'est tout. Mais non, de toute manière, tu n'as pas à crier. Tu as simplement à applaudir. Et toi, tu as envie de le faire, Gérard ? Personnellement, non. Tu n'as pas envie d'aller gagner des trucs à la télé ? Non, non, non, non. Tu n'as pas envie d'aller gagner une bagnole ? Une bagnole ou un petit million, Gérard ? Tu ne dirais pas non, quand même ? Une bagnole, à la rigueur, je ne dirais pas non. Bon, on va demander à plus de deux nuits. C'est 7 ans. C'est à Paris. Je ne sais plus du tout comment ça s'appelle, mais je sais qu'il y avait Rika Zaraï. Parce que c'était à fond dans le studio. Elle est moche, elle. Non, mais attends. À 7 ans, tu peux participer à un jeu télé ? Oui, c'est vrai. C'est vrai que, là, ce soir, j'ai regardé, il y avait des enfants qui avaient 5, 6 ans à peu près. Je confirme, il y avait un bébé de 2 semaines aussi. Non, non, non. Il y avait un bébé pas né aussi dans le public, ici. Il y avait même des femmes enceintes. Non, non, non. Tony ? Moi, j'ai participé à Fort Boyard, mais j'ai failli me noyer, en fait. D'accord. Toi, quand tu répondras correctement aux questions, avant de demander à Françoise, Rigaud, oui ? Oui. Est-ce que... Non, mais parce qu'ils sont en train de se parler entre eux. Ils sont en train de tous... Ils s'en foutent. ...de se raconter leur jeu télé. Pour l'instant, ils ne t'écoutent pas vraiment, mais depuis que j'en parle, ils n'arrêtent pas. Turpentine te demande si tu as déjà joué à Top Santé. Non. Top Santé, c'est quoi ? Ça n'a jamais été un jeu. Tu peux gagner des rasages gratuits, je crois. Non. Si, je te jure. Tu peux te faire opérer du kiss gratuitement, je crois. Tony, tu te calmes, s'il te plaît. Bon, Tony, tu retournes voir Olivier au standard. C'est le jeu, c'est comme ça. Tu retournes voir Olivier au standard, s'il te plaît, merci. Olivier. Tu gagnes un an de kiss gratuit. Oui, je gère, je gère. Olivier, tu prends Tony, tu lui dis qu'il se calme, sinon il s'en va. Terminé. Françoise. Oui ? Donc, toi. Moi, ça y est, j'ai déjà répondu. Ça ne va pas, là. Tu fais du bordel, tu vois. Tu ne peux pas aller. Ouais. Tu te calmes. Bonjour. Bonsoir. Ton cul, ton cul. Donc, toi, Françoise, pour l'instant, tu n'as jamais participé, donc tu as participé pour la première poêle. Je n'ai pas participé. Tu vas faire... Je vais être seulement spectateur. Donc, tu vas y être à partir du 18 janvier. 18 janvier. Lundi 18 janvier. Ok. J'en ai rien à foutre. Moi, j'ai participé à l'école des fans, là, avec le gros porc. Le gros porc, le gros porc, tu restes poli, s'il te plaît. Avec Jacques Vartin, et j'ai gagné un circuit électrique et deux patins de... Deux paires de patins à roulettes. Ouais, c'est ça. Alors, j'en ai rien... J'en ai rien à foutre. Tu retournes voir Olivier Austandard, c'est Paris pour toi. Je ne peux plus, là. Je ne peux plus. On se calme, je peux répondre. Bien fait. Alors, on se calme maintenant pour toi. Ouais, donc, moi, j'ai participé à un jeu, ça s'appelait Les grosses têtes, avec Philippe Bouvard sur RTL. Et ouais, c'était assez sympa, quoi. J'ai pu avoir un autographe de Castelli et puis le cheveu sur la langue d'Isabelle Mergot. Non, mais attends. Un jeu de télé. Un jeu de télé. Il ne faut pas confondre. Tu avais fait un abruti. Un abruti, va te faire sauter, toi, connard. Oui. Ok ? Oui. Alors, tu dégages, on se calme. Allez, hop. Mais non, mais non. Terminé pour toi. Tu dégages tout le monde aujourd'hui, Gérard. Ça ne rigole pas, hein. Allez. On tue ton cul. Tiens, on accueille tout de suite. Tu dégages à l'antenne. Non, non, non. Non, non, tu dégages. Je l'ai déjà eu la semaine dernière. J'en vois plus. Hop. Oui, mais il va être sage. Il va être sage. Il va être sage. Il a plein de choses à dire sur le téléphone, Canal+, tout ça. Non, non, non, non, non, non, non. Mais Gérard, allez, fais pas le con. Non, non, non, non. Allez, fais pas la pute. Oui, bonsoir. Donc, aujourd'hui, les jeux de 21 avec Gérard Dessuren, le plus beauf des plus beaufs. Bon, alors, Gérard. Enfin, alors, donc, on reste avec Pipion. Gérard, sur IRC, il y a Kenji qui te demande si tu as déjà joué par téléphone à Hugo Délire. Non. Non, je ne pense pas que ça existe. Parce qu'il a eu une cassette et il a enregistré et il me dit que c'est ta voix que Karine Chéril. Alors, donc, vous allez... Gérard, j'aimerais savoir si c'est vrai que Sandy, elle a couru dans Interville et pourquoi est-ce que... Alors, Tony, tu dégages. Alors, Tony, tu dégages. Tony, c'est terminé. Terminé pour Tony. Terminé. C'est terminé pour lui. Ah, non, pas Tony. Non, non, terminé, terminé, terminé, terminé. Alors, Tony, j'en ai rien à... J'en ai rien à foutre et on se calme. Attends, attends, attends. J'ai pas suivi. J'en ai rien à foutre aussi. Il est parti. Il était méchant. Alors, j'en ai rien à foutre. On se calme. Et Tony, ils s'en vont. Et tu me récupères d'autres personnes sur les 24 lignes qui sonnent. Connard. Connard va te faire enculer, toi, bâtard. Gérard, pas de... Alors, le Big Bill était vraiment un extraterrestre et on se retrouve tout de suite après. Et vous pouvez toujours appeler Olivier au standard. Gérard, vous pouvez toujours appeler Olivier au standard au 0875 000 et 0803 08 5000. Et toujours sur l'IRC, il y a toujours Rigaud qui vous attend. On est combien ? On a dépassé les 3000. On est à 3280,8. Donc, ça booste, ça booste. Voilà. Donc... Big Big Up. Heureusement que t'es là pour faire du boulot. T'inquiète. T'inquiète. Donc, on va s'écouter Bouffe du couscous avec des petits beurres. S'il te plaît. Merde. Ah ben, c'est bien, ça. C'est bien, hein. Et on se retrouve tout de suite après. Et voilà, vous venez de vous écouter Bouffe du couscous avec des petits beurres. S'il te plaît. Merde. Donc, c'est ce que Manu m'a donné comme disque. C'est bien, hein. À mon avis, c'est un truc techno. C'est de la techno. C'est techno. C'est techno grave. Grave, grave. Bon, alors, donc, la question. François, c'était toujours. Ah oui, je suis là. Ah oui, je t'avais oublié. Non, non, mais tu m'as cité. Tu m'as cité, hein. Ah, OK. OK, OK. Je croyais que je t'avais... J'avais pas... Non, non, tu m'as cité. OK. Donc, alors, la question, c'est que le Big Bill est-il vraiment un extraterrestre ? Eh ben, on va demander à Pipion. Pipion. Pipion. Pipion. Ouais, donc, non, Big Bill n'est pas un extraterrestre, évidemment. Et, c'est juste un... C'est virtuel, quoi. C'est en 3D. C'est un truc... Une image de synthèse. Ouais, une image de synthèse, ouais. Qui c'est qui répond, là ? C'est Chang. Heureusement qu'il m'a aidé parce que je cherchais le mot, en fait. C'est le terme technique. Ouais. Alors, on va demander à... à Pute de Nuit. Ouais. Ben, Big Bill, c'est un vrai extraterrestre. D'ailleurs, t'as sa famille aussi. Donc, c'est la preuve. Ouais, non, mais dans la famille, bon, c'est sûr, ça, c'est pour faire voir aux candidats ce qu'ils veulent comme cadeau. T'as le frère, t'as... T'as la soeur. T'as la soeur et t'as la mère. Ouais, mais c'est vrai. C'est sa vraie famille. Non, mais ça, on le sait pas. Ben, si, ils le disent. Non, non, non, non, non, non. Ils ont la même tête. Non, non, non, non, non, mais... Non, non, non. Moi, je peux te confirmer qu'à mon avis, je pense pas. Donc, qui c'est qui a un... Il y a un double son, là. Il y a... Il y a un double son. On va régler ça. Donc, Françoise ? Oui ? Moi, je te dis non. Pour la bonne raison, c'est qu'on l'a déjà vu une fois, en vrai, sur Drôle de Jeu. Ouais, ouais. Ouais, je pense que... Ouais, j'ai... Non ! Manu, s'il te plaît ! Je te jure que je touche à rien ! Mais si ! Mais non ! Manu ! Tu faisais du bon travail ! Mais attends ! Micro ! Mais attends, tu joues à quoi, là ? Ah non, regarde, tu vas voir. Françoise a bien de le confirmer. Il y a... Elle vient de le confirmer. Bon, reprends, Gérard. Reprends le débat. Donc, Françoise. Oui ? Ah ouais, ouais, ouais. Toi, tu m'as dit qu'on l'avait vu à Drôle de Jeu. Bon, toi, tu dégages. Avant que je t'éclate. Avec ta caméra, là. Toi, tu as dégagé ! Avec ta caméra. C'est dangereux, Gérard. Euh, Shang. Oui, donc... C'est une image de synthèse. C'est obligé. Et... Je ne l'ai jamais vue en 20 ans. Non, mais tu peux préciser si ça ne te dérange pas ? Shang. Tu peux préciser ? Oui, c'est une image de synthèse. C'est-à-dire que c'est fait par ordinateur. On te demande si c'est... La question est... Le Big Bill est-il vraiment un extraterrestre ? Est-ce que tu peux préciser ta pensée ? C'est pas un extraterrestre. C'est une image de synthèse. C'est fait par ordinateur. Donc, un extraterrestre, c'est... Oh là là ! Mais attends, mais toi, t'as... Mais c'est pas vrai ! C'est toi qui comprends pas. Là, tu comprends rien du tout, Shang. Mais si il a tout compris, c'est toi qui comprends pas. Non, mais attends ! Moi, je demande si le Big Bill est vraiment un extraterrestre. Mais il l'a jamais vu ! Mais attends, il me dit que c'est une image de synthèse. Non, c'est pas une... Non, non, non, non, non, non ! Il travaille sur Nintendo et sur Sony. Je peux te dire que c'est une image de synthèse. Je suis programmeur. Ça vient d'où, ça ? Le Big Bill est une image de synthèse, c'est tout. Mais qu'est-ce que tu fais ? Attendez, il y a Gérard qui se lève. J'ai besoin de toi, Gérard. Non, non, mais ça, tu... Mais j'ai quelque chose d'autre, là ! Non, non, mais non, non ! J'en ai besoin ! Ouais, non, mais... C'est pas tout ! Ouais, non, mais t'amuses pas à faire ça. Bon, Gérard, reprends le débat, là, parce que là, tu parles. Bon, alors, qui c'est qu'il nous reste à répondre ? Il y a moi. Il y a Fleur d'Anus aussi, t'as pas accueilli. Fleur d'Anus. Qu'on accueille. Bonsoir. Salut. Salut, Fleur d'Anus. Ça sent bon, hein ? Ça sent bon, le sperme, là. Quelle bonne odeur de merde. Vous fermez vos gueules ou quoi, là ? J'aime. Eh, putain, mais... Allô ? Gérard, je peux répondre ? Pour calmer le débat. Dégage ! Avec ta caméra. Dégage, Gérard ! Arrête, arrête ! Gérard, assieds-toi. Gérard, donc, il y a Paradox sur IRC qui te demande si tu serais au courant que Bill serait le cousin de E.T. Non. Non, mais ça, tu vois, j'ai vu des truculations, des sondages, j'en parle même pas parce que c'est des conneries. C'est des conneries, ouais. Tony, c'est bien. Gérard, c'est Fleur d'Anus, je peux répondre ? Ouais, bah, réponds. Donc, moi, je pense que le Big Bill n'est pas un extraterrestre. C'est comme disait Chang, c'est un personnage inventé qui a été dessiné sur un ordinateur et qui a été envoyé sur l'écran. Non, mais... Non, mais je pense... Gérard, tu veux dire que c'est un mec qui est dans un gros truc bleu ? Voilà, un mec qui est dans une boîte. Tu veux dire que c'est un costume qu'il porte ? Voilà, c'est ça, en fait. Ah, d'accord. Voilà, avec des ampoules pour... Attends, Casimir, qui c'est qui parle de Casimir, là ? C'est moi, c'est Françoise à l'appareil. Ah, c'est Françoise qui parle de Casimir. C'est le cousin de Casimir. Toi, je te dis que tu... Dégage tes caméras, Fildar ! Fildar, tu as dégagé mes bits ! Allez, hop, pile d'art ! Alors, donc... Moi, est-ce que je peux parler, là ? Mais c'est qui ? Tenez d'art. Ouais, le Big Bill, c'est pas un extraterrestre. C'est le nom de l'émission, c'est Bill qui est l'extraterrestre. Comment ? C'est Bill qui est l'extraterrestre. Le Big Bill, c'est le nom de l'émission. Ah, voilà quelqu'un qui répond à la question. Hé, attends, le Big Bill, c'est quoi pour toi ? Le Big Bill, c'est le nom de l'émission. Big Bill. Big Bill. Big Bill. Bon, enfin, bref. Apparemment, je pense que... Il a pas compris la question, il répond à côté. Non, mais... Non, c'est le seul qui répond à côté. Ah, non, Bill, c'est un extraterrestre, d'accord. Non, mais t'es le seul qui répond à côté. Ah, vas-y, elle a pas... Tony, d'accord ? Il est pas là, Tony. Non, presque pas. À partir de quel âge peut-on jouer ? Attends, moi, j'ai un petit sondage, moi, avant la question. On a un petit sondage, quand même. À la question pour ou contre les jeux télé, il y a 52% des gens qui sont pour. Non, non, non, mais attends. 36% des gens qui sont contre. Péter la nuit. Hop. Alors, moi, si ça commence comme ça, c'est simple. Le premier débat. Va ça. Oh, non. Il jouillait pas. Va te laver les fesses, tu pues. Arrête, tu vas faire bander. Bah, Gérard, t'envoies le bois, là, un peu. Ça y est, vous avez fini vos conneries ? Oh, les blancs. Ouais, bah, les blancs, celui qui s'amuse à mettre des conneries. Maintenant, ça commence à me faire chier. Je sens que tout à l'heure, on va garder que Françoise et on va reprendre d'autres personnes au standard. Ça va aller vite fait. Pipillon et Pute de Nuit aussi, elles ont été sages. Ah, ouais. Moi aussi. À partir de quel âge peut-on participer à un jeu télé ? On va demander à Fleur Danus. Moi, je pense qu'on peut participer dès l'âge qu'on peut participer. C'est-à-dire à partir de 10 ans. Voilà. Pute de Nuit. Bah, moi, je pense qu'il faut être majeur. Non, non. Parce que quand même, tu gagnes des jeux. Gérard, Gérard, arrête. Qu'est-ce que tu fais ? Gérard, assieds-toi. Arrête. Il veut taper Fildar. Laisse Fildar. Avec la cam. Non. Pute de Nuit. Gérard, t'occupes pas de la caméra. Continue. Moi, je te disais, je pense qu'il faut avoir 18 ans parce que j'imagine que tu joues au beat-beat. Bien le standard, Olive. Tu sais pas d'où ça vient. Je comprends. Non, mais là... Là, je pense que... Olivier, ça commence à bien faire. Je sens que dans deux minutes, j'arrête. Ouais, bah, si t'es pas content, tu dégages. Et Manu, tu me coupes le double son. Ouais. C'est Big Bill qui nous parlait. C'est un auditeur qui fait ça. Je sais pas. Max, il a dit que ça venait peut-être du standard. Bah oui, ça vient du standard. C'est ça. J'ai l'impression que vous avez l'intention de me faire chier sur les débats jusqu'à la fin de l'année. Pas du tout. Parce que pas. Non, c'est toi qui te fais chier tout seul. Attends. Comment ? Bon, allez, allez, allez. Hop. Alors... Plus de deux nuits. Oui. Ça fait cinq minutes que je te réponds, mais tu m'écoutes pas, Gérard. Je te disais qu'à mon avis, il faut être majeur. Parce que si tu participes au Big Bill et t'as 10 ans et que tu gagnes une voiture, t'as pas l'air con. Au moins, c'est ton permis. Non, mais attends. T'as pas ton permis, tu peux pas participer. Ça dépend, il faut gagner des voitures à pédales aussi. Tony, tu fermes ta gueule ! C'est pas Tony. Barnette ! Alors, celui qui a... Putain, Olivier ! Olivier, tu me calmes ça ! Tu calmes ! Oui, je calme, je calme. Magne ! Oh ! On se calme ! C'est bon, c'est bon. On se calme. Alors, Pipion ? Je suis d'accord avec Tony. Il faut être quand même mineur ou majeur. Ah, le blanc. Non, non, mais attendez, parce que là, je suis en train de... Non, parce que Gérard, Gérard, tu suis pas ton débat, c'est tout, et c'est pour ça qu'il y a des blancs, quoi. Fais attention à ce que les gens disent plutôt que ce qui se passe en studio. Alors, euh... Il me manque de la maturité, en fait. Et on a 2 francs en égo, s'il te plaît. T'as 2 francs ? Prenez-la. T'as 2 francs en égo, s'il te plaît. Non, mais vous jouez à quoi, là ? Ça dit le gras, ça. Oh ! Mais j'ai dit quoi ? Gérard ! Gérard ! Gérard, tu t'appelles... Dégage ! Dégage du studio, toi ! Dégage ! Dégage ! Dégage ! Dégage ! Dégage ! Reprenez-le. Dégage ! Non, mais sors de là, si tu veux qu'il dégage. Dégage ! Va t'asseoir, va t'asseoir. Je vous explique, il est en train... Gérard est en train de courser, fil d'art, dans le studio. Dégage ! Oui, oui, il dégage, il dégage, il s'en va. Vas-y, je te couvre. Il s'en va, il s'en va. Allez ! Voilà. Gérard, pour calmer le débat, il y a Izen sur l'Internet qui te demande si, toi, dans la radio, là, tu te sens pas un peu comme Big Bill dans sa télé. Non. Pas du tout. Et on n'a qu'avec Pot de Couille. Non, euh... Bah si, on n'a qu'avec Pot de Couille, à la place de Canada qui est raccroché. Bonjour, Gérard. Pot de Couille. Bonjour, Gérard. J'ai pas entendu la question, hein. Salut, Pot de Couille. À partir de quel âge peut-on jouer aux jeux de télé ? À partir de quel âge ? Bah, pour le Big Bill, le truc pas fut-fut, là, je sais pas, 8 ans ? Bill. Big Bill, ouais. Non, mais... Non, mais je t'écoute ! Bah oui, j'ai dit 8 ans. 8 ans, d'accord. Shang ? Bah, je crois qu'il faut avoir la majorité pour participer à un jeu de télé. Majorité absolue ? Ouais. Non, mais tu... Vous pouvez préciser ou pas, là ? Bah oui, il faut avoir la majorité, c'est-à-dire 18 ans... 18 ans, c'est-à-dire un peu plus de 7, 17 ans. Bon, d'accord. Et toi, quand t'auras fini de te foutre de ma gueule, tu me préviendras. Ok. Françoise ? Ouais, bah moi, je réponds à partir de la majorité. Attends, Françoise. 5 minutes. Olivier ? Qu'est-ce qu'il y a ? Le Shang, sinon, parce que ça va pas aller long. Ça va pas durer. Maintenant, on répond au début. Non, non, mais ça va pas durer longtemps, hein. Je sens que... Non, mais je le calme, je le calme. Réponds à Françoise. Il y aura pas... Je vais pas faire 11 questions. Mais toi, à la question, tu penses quoi, d'ailleurs ? Enfin, quel âge a-t-on vu ? Donc, toi, Françoise ? À partir de la majorité. Ouais, mais je pense, là, ce soir, t'as regardé comme moi ? Bah oui. Bon, donc, t'as vu qu'il y avait des personnes avec leurs enfants, donc... Oui, mais ils ont pas le droit de participer, hein. Bah oui, mais ça, je suis d'accord avec toi. Mais je pense que t'as plusieurs personnes qui ont... Il y a des enfants qui se mettent de la peinture sous les pieds. Ils sauraient pas répondre aux questions, aussi. Comment ? Quand on est trop petit, on peut pas répondre aux questions. Ouais, mais attends, faut quand même dire, c'est que y a le mari, y a les enfants qui sont là pour essayer de conseiller. Gérard, depuis tout à l'heure, tu demandes est-ce qu'il faut avoir la majorité à partir de quel âge, mais est-ce qu'il y a... Un âge limite ? Est-ce qu'on peut être trop vieux pour participer à un jeu ? Non ! Voilà, exactement, parce qu'il y a Yanki sur l'IRC, il te demande jusqu'à quel âge on peut jouer au Monopoly. Par exemple. Non, mais ça, le Monopoly, t'as pas d'âge, c'est comme le Scrabble, t'as pas d'âge pour jouer là-dessus. Là, c'est autorisé à toute personne. C'est pas possible qu'il y ait une dame de 94 ans qui joue au Big Bill ? Bah si, si, j'espère, parce que... T'as déjà vu, toi, qui regardes tous les soirs ? Non, mais tu peux demander à Françoise, on a vu des personnes qui étaient assez vieilles, donc, qui ont joué. Bon, c'est sûr... Elles ont pas gagné, alors ? Bah si, tu peux gagner. Ouais, mais c'est pas toujours évident, parce que c'est pas facile. T'as déjà vu à Fort Boyard une mémé faire un soir à l'élastique, toi ? Non, non, attends, là, Fort Boyard... Mais faut pas comparer Fort Boyard avec Big Bill. Non, parce que là... Yann Or, c'est pareil, les trucs comme ça. Non, mais... Françoise, sur IRC, on me dit que c'est aussi dangereux. Bah oui, c'est dangereux. Imagine, ils font une crise cartel, ils gagnent une bagnole. Non, non, mais attendez, attendez, attendez, attendez, attendez, là, on va éclaircir un peu les jeux. Tiens, mets de la lumière pour éclaircir au lit, s'il te plaît. On va éclaircir un peu le système des jeux. Là, faut dire une chose, qu'aujourd'hui, dans la famille Yann Or, il y avait une qui s'est... Dans les... Les imitatrices. Je pense que, Françoise, tu l'as regardée comme moi. Dans quoi ? Dans la famille Yann Or. Non, je regarde pas la famille Yann Or. Bon, donc, y'en avait une qui se faisait passer pour Madonna. Ouais, bah ça, j'ai vu le passage. Y'a Colombo et tout ça, mais disons que je ne regarde pas, c'est... Je ne regarde plus la famille Yann Or pour la bonne raison, c'est que depuis qu'il y a Pascal, ça n'est plus pareil. Ouais, ouais, mais... Non, non, non, non, non, non, non. C'est plus qu'à brûler. Attendez, attendez ! Bouge ton cul, toi, va te faire enculer, toi, connard ! C'est pas Patrick Roy ? Non, bah non, il faut pas parler de Patrick Roy. Attendez, attendez ! On accueille Benjamin. Allô ? Benjamin, bonsoir. Bonsoir, bonsoir. Donc, une question IRC avant que Benjamin réponde. Oui, on me demandait si on peut jouer à la famille Yann Or tout seul. Euh, non, pour être 5... Ah, mais si on n'a pas de famille, et qu'on peut être la famille... Non, mais tu peux très bien trouver des gens que tu connais, et tu les inscris avec toi, c'est tout. Mais s'ils ne sont pas de ta famille... Mais même... C'est plus une famille en or. Comment tu fais ? C'est des copains en plomb. Non, non, non, même si c'est pas de ta famille, tu peux... Mais non, c'est pas possible. C'est pas possible s'ils ne sont pas de ta famille, si c'est une famille en or. J'ai coupé les auditeurs pour pas qu'ils te... Gérard, mais comment on fait ? Et quand on n'a pas d'amis... Et quand on n'a pas d'amis... Attendez, attendez, attendez ! Pas les trois d'un seul coup, donc Rigaud. Rigaud en priorité. Quand t'as pas de famille et pas d'amis, et que t'es tout seul, comment tu fais pour gérer une famille en or ? C'est discriminatoire. De toute manière, tu peux prendre quelqu'un que tu connais bien. C'est plus une famille. Donc le titre du jeu, il a plus rien à voir. Non, je m'inscris en faux, je suis désolé, c'est pas possible. C'est discriminatoire. Toi, tu fais la réa, tu te tais. Ouais, mais c'est pas possible, ça ! Non, c'est pas possible ! C'est pas possible ! On me dit aussi que si on est tout seul, on peut peut-être amener des animaux avec soi, non ? Pour faire une famille. Là, dans une famille en or, il y avait le faux Colombo qui est venu avec son chien. C'était quoi ? Un chien, c'est... Un boule-boule ? Non, c'était pas un pic-boule. Donc, Benjamin ! Allô ? Ouais, excuse-moi, Gérard, je suis en train de regarder le Big Bill, en même temps. Non, mais Benjamin ! Benjamin ! Ouais ? Tu dégages ! Bah attends ! Oh non, non, Gérard ! Je sais pas où il est ! Je sais pas où il est ! Non, non, non, Benjamin, c'est terminé. Ouais, non, donc je disais, tu... Donc, par rapport à la question, moi, j'aime bien les jeux de télé, quand même. Non, mais je te demande, à partir de quel âge peut-on jouer ? Bah, je pense que ça dépend des jeux, hein. Parce qu'il y a des jeux qui sont faits pour les enfants, et des jeux qui sont faits pour les adultes, il y en a qui sont faits pour les vieux, il y en a qui sont faits pour les ados... Il y en a qui sont faits pour les adultes... Comment ? Il y en a qui ont dit un truc pas cool, là. Non, mais... J'ai l'impression que tout à l'heure, je vais tous vous zapper, et on va rencontrer d'autres personnes. C'est clair, comme ça, ça vous matra, bande de connards. Oui. Ça, je pense que ça va aller vite fait, tout à l'heure. Ouais. Je le sens. T'as raison, Gérard. Je le sens. Donc, Rigo, oui, une question hier, c'est avant... Maintenant, ça parle de questions pour un champion. Gérard, t'es un mec cool. Merci, Benjamin. On me dit, est-ce que c'est pas discriminatoire, aussi, quoi ? Parce que les questions qu'il pose, il y a plein de gens. Toi, si tu regardes questions pour un champion, tu peux répondre à combien de questions ? Vraiment. Moi, deux. Manu, pour l'instant, tu... Gérard, aucune visite, juste un bonjour. Sur toutes les questions de Julien Boubert. Non, là, sur questions sur un champion, il faut vraiment avoir les trucs en tête. Donc, c'est discriminatoire. Attendez, s'il vous plaît, derrière, on se calme, je réponds à Rigo. T'es un mec cool, Gérard. Benjamin, tu te tais, s'il te plaît. Il dit que t'es cool. Il dit un truc gentil, et toi, tu te tais. Non, non, mais pour l'instant, je réponds. Je voudrais répondre à Rigo. Mais laissez-le répondre, merde. Gérard, lui, c'est plus histoire naturelle, ces jeux, quoi. Olivier, pour l'instant, tu es à ton micro. Merci. Donc, alors, la question. Ta question, donc, c'était... Est-ce que t'arrives à répondre à combien de questions de Julien Boubert dans Questions pour un champion ? Sur Julien Le Perse, pour questions sur un champion, fais-moi confiance que c'est pas évident. Déjà, pour que tu puisses savoir toutes les questions, il faudrait que tu regardes sur l'audito, mais t'as pas le temps. Vraiment, t'as... C'est ça, le jeu. Surtout sur le plateau, quoi. T'as vu quelqu'un avec un dico ? Non, mais attends, mais même... Vas-y, t'as moins de 20 secondes pour répondre. La question pour un poupon, parce que j'ai jamais vu ce truc. Quand tu connais le champion... T'as une question, Gérard ? Non, mais ce que je voulais dire, c'est que quand tu connais le champion, tu peux répondre aux questions sur le champion. Ouais, non, mais c'est pas évident. Parce que, par exemple, je vais poser une question à Manu. Quelle est la capitale de... Quelle est la plus grande ville... Quelle est la... La capitale de New York ? Bangkok. Non. Ah, je sais pas. De quoi ? La capitale de New York. La capitale de New York. Attends, merde, je sais pas. Le Bronx ? Non. La capitale de New York. C'est un grand pays, en plus. C'est simple. Washington. Eh ouais, la capitale de New York. Non, Washington, non. C'est Washington. Non, si, c'est ça. Non, c'est ça, c'est Washington, la capitale de New York. Donc, par exemple, quelle est... T'as une autre question ? Quelle est la plus grande pute de Paris ? Ça, je sais, mais je vais pas le dire. Ça va avec, c'est ta femme. Ça va avec, c'est ta femme, donc je... Moi, je sais pas. T'es vraiment accueillé, toi. C'est la Tour Eiffel, parce qu'elle écarte les jambes. Allez, allez, allez. On récupère Flore Danus. Flore Danus. Oui. Attends, qui c'est qui vient de parler de Sandy, là ? T'as un mec cool, Gérard. Non, mais attends, Benjamin, pour l'instant, je veux savoir qui c'est qui s'amuse à parler de Sandy. Moi, c'est une conne. Laisse tomber. Attends, c'est une conne. Attends, merde, toi, d'accord ? Mais non, mais pas Sandy. Pas Sandy, c'est le qui a dit ça. Grillez. Les boules d'encre sont de nos jamais. Et il faut les aimer, aussi. Ouais, calmez-vous, les mecs. Ouais, calmez-vous, les mecs. Flore Danus. Oui, Gérard. T'es cool, Gérard. Toujours là. Pipion. Ouais. Pute de nuit. Ouais, je suis là. Françoise. Oui, je suis là. Pot de couille. Ouais, je suis là. Et Benjamin. Ouais, je suis là, et je veux dire que t'es un mec cool. Alors, être animateur... Oh, vous vous calmez, s'il vous plaît. Bonjour. Bonjour. Bonjour. Non, mais quand vous aurez fini, je pourrais peut-être poser ma septième question. Vas-y, vas-y, vas-y. Et très... Ah, vas-y, vas-y. Eh, je t'en tue, je t'en tue, tu vas pas en tuer, toi, sale pédé ! Oh ! OK. C'est bon, c'est bon, c'est bon. T'es un mec cool. Alors, être animateur d'un jeu... Bon. Eh, Olivier, tu fais quoi, là ? Ben, de toute manière, c'est tous les jeudis, c'est comme ça. Eh, Gérard ! Gérard ! Il te parle, Benjamin. Ouais, Benjamin, je t'écoute. J'aimerais bien qu'on fasse un peu le débat, parce que moi, tu sais... Il a raison. J'ai des trucs à faire, j'ai pas que ça à foutre. Ouais, mais pour l'instant, je voudrais bien savoir qui c'est qui s'amuse à dire des conneries. Ben, je vais essayer de le trouver, t'inquiète pas. Alors, donc, être animateur d'un jeu, vous tente-t-il ? Ouais, Benjamin, je veux répondre. Ouais. Ouais, parce qu'en fait, voilà, je vais te le dire tout net, en fait, j'écoute tes débats depuis longtemps, je m'appelle, je vais le dire, je m'en fous, je m'appelle Benjamin Rizzoli. Oh, non ! Et en fait, mon père, c'est Philippe Rizzoli, quoi. C'est pas vrai. C'est l'une des deux. Non, non, non, sans déconner, c'est sérieux, et donc, moi, je suis bien passé pour en parler, parce que, étant donné que mon père, il fait le millionnaire, ainsi que la roue de la fortune, euh, non, merde, j'ai un trou. Le juste prix, excusez-moi. Donc, moi, je peux vous dire que c'est un métier qui en vaut, quoi. Ah, ouais. Parce que, moi, je sais qu'on a pas mal de thunes, qu'on en profite grave, et, euh, moi, je conseille à tout le monde de devenir un animateur télé, hein. Bon, ok. On va demander un pot de couille. Gérard ? C'est qui ? C'est Benjamin, encore. Non, mais attends, Benjamin, attends. Non, je veux seulement dire que t'étais cool. Bon, ok, ça y est, j'ai compris. Pot de couille. Ouais. Ouais. Bon, tu réponds ? Bah, je sais pas. Non, bon, alors, vas-y, hop. Bah, non, vas-y, attends, vas-y, répète. Hé, non, non, non, retends, moi. Bah, répète. Bah, non, non, je répète plus. Moi, t'as dit que t'étais cool. Moi, t'as dit que t'étais cool. Attends, dégage. Allez, allez, dégage, dégage, dégage. Allez, hop. Je te dégage. Dégage-le, dégage-le, dégage-le, dégage-le. Hop, hop, hop. Allez, dégage-le. Euh, Françoise. Toi aussi, je vais te dégager. Je suis là, je suis là, je suis là. Françoise. Disons que, euh, disons que, non, moi, ça m'intéresserait pas de... de remplacer quelqu'un, euh... C'est quoi, cette colonne-là ? Non, ça, c'est Olivier. Olivier, je te dis de me dégager, l'autre. Et c'est ça qui nous fait des jingles, putain. Putain. Il fait des jingles et il est même pas capable de faire un standard. Pour l'instant, vous êtes en... C'est la septième question et c'est de la merde. Il est déjà 1h33... Euh... 1h34. On est à la septième. Et pour l'instant, c'est de la merde que vous me faites. Pour revenir au débat, super, les auditeurs. Il y a Formos qui te demande si tu animerais... si tu aimerais animer un jeu télé et si oui, lequel ? Alors, tu peux répéter la question. Alors, Formos sur l'IRC te demande si tu... si tu voulais animer un jeu télévisé, est-ce que ça t'intéresserait et si oui, lequel ? Non, ça m'intéresserait... Ça m'intéresserait pas de... Ça m'intéresse pas. Manu, s'il te plaît, quand je te demande de me couper tout le monde, tu le fais et tu te tais, maintenant. D'accord. Donc, pour très... Bon, Manu, ça commence à bien faire ! J'ai rien fait ? Oh là là là là ! Mais je touche à rien ! C'est mon micro ! Viens, mais t'es chiant, hein ! On n'a qu'à effacer. Ouais, non, mais attends, attends, attends, pour l'instant... Non, j'ai bien l'antenne, ça. Donc, pour te répondre, je prendrais... Je ne ferais même pas de débat télé ni rien du tout. Non, un jeu, pas un débat, un jeu. Non, mais même un jeu télé, je ne le ferais pas. Allez, pourquoi ? Tu serais bon, en plus. Non, non, je ne le ferais pas. De remplacer la gaffe. Non, non, non. Oh, Gérard... On peut t'inscrire à des jeux, ici. Non, non, non, non. De toute manière, rien qu'à voir les emmerdeurs, c'est bon. Sinon, il y a Philou... Attends deux secondes, il y a Philou qui te demande si tu comprends le principe des chiffres et des lettres. Oui. Le principe. Le principe, c'est de trouver le compte est bon et de chercher des mots. Il ne faudrait pas quand même qu'il me prenne pour un con, lui, sur lire, c'est... Donc, passé. T'as compris, Philou ? Oui, je réponds à la question ? Oui. Moi, je ne voudrais pas être animateur télé, non. Je ne sais pas, je ferais plutôt de la radio comme toi, à rien foutre, à faire des émissions à la con. C'est qui qui s'amuse avec son téléphone ? Ça va gerber ? Qui c'est qui s'amuse ? Ça va casser, sinon. Ton cul, ton cul ! Bon, là, c'est Benjamin. Arrêtez avec le téléphone, c'est chiant. Bon, Benjamin, pour l'instant, ce n'est pas toi que je m'adresse. On va demander à Françoise. Gérard, c'est trop cool. Je t'ai répondu, Gérard. Oui, aussi, c'est bon, c'est bon. Plus de deux nuits. Moi, je ne voudrais pas être animatrice parce que je ne pourrais pas gagner les cadeaux. Non, mais de toute manière, tu n'as pas besoin d'être animatrice. Non, mais quand tu es animatrice, tu ne peux pas gagner les cadeaux. Rigo ! Moi, j'aimerais bien gagner des cadeaux. Rigo, c'est Benjamin. Est-ce que Fleur d'Anus, elle est sur l'Internet, là ? Non. Parce que je suis en train de faire de l'Internet en même temps. Et tu ne la trouves pas ? Ben non. Va voir sur Dièse Fleur d'Anus. Ou Dièse en couleur de GG. Merci. Qu'est-ce que tu viens de dire ? C'est rien, c'est rien. C'est les noms des serveurs. Et le débat ? Benjamin ! Benjamin ! Excuse-moi, GG. Benjamin ! Ouais ? Si tu paies de l'Internet en faisant les débats, ce n'est pas la peine. Ok, super. Gérard, c'est Fleur d'Anus. Je peux répondre ? Oui, je t'écoute. Justement, ils te cherchent, Benjamin. Ouais. Non, mais ce n'est pas le même. Oui, ce n'est pas le même. Je ne suis pas au mot. C'est mon frère jumeau. Donc, oui, moi, je n'ai pas l'intention de devenir animateur de jeux télévisés parce que c'est complètement débile. D'accord. Pipion ? Je ne veux pas être animatrice. D'accord. C'est bien, toi, tu réponds. Comme pute de nuit. Pute de nuit, c'est pareil. Oui, d'accord. Tu sais, tu as des questions des villes. Alors, nous aussi, on répond des villes. De toute manière, si ça ne vous plaît pas, les débats dans ces cas-là, pourquoi qu'on vous sélectionne ? Si, c'est génial. Tu es trop cool. Non, mais là, pour l'instant, on n'est même pas arrivé à... On s'endort, surtout, quoi. Parce que tu n'es plus dans ton débat. Donc, reprends-le. Non, mais toi, pour l'instant, quand tu me prends du boulot correctement... Je ne fais pas le boulot correctement, là. Non, mais pour l'instant... Reprends, reprends. Comment ? Qui c'est qui n'est pas contente, là ? C'est qui qui n'est pas contente, là ? C'est laquelle qui vient de dire Jabrej ? C'est laquelle, pauvre meuf, qui a dit ça, là ? Benjamin, tu dégages. Entre pute de nuit et pipion, là, c'est laquelle des deux ? C'est Benjamin. C'est Benjamin. C'est Benjamin, il a mis... C'est Benjamin, il faut le gerber. C'est Benjamin. Mais, Gérard, ils veulent me gerber, ça va ? Alors, que doit-on supprimer comme jeu télé ? On va demander ça à pute de nuit ? Ben, je ne te dirai pas le fond de ma pensée, mais... Je voudrais changer un peu le concept de ces jeux. Non, c'est faux. Ben, Benjamin, s'il te plaît, tu te calmes. Ben, attends, si jamais ils arrêtent tous les jeux, moi, mon père, il n'a plus de taf, j'ai plus de thune. Benjamin, tu te tais ! Il va sur une autre chaîne, ton père. C'est connu. Bon, pute de nuit, tu réponds correctement à la question, parce que ça commence à être lourd. C'est vrai, tu dis que des conneries. Gérard ? Les jeux de TF1, pour moi, c'est bidon, c'est rien, quoi. T'apprends rien. Ouais, elle a raison, cette fille. À propos des jeux de TF1, il y a... Alors, ce qui s'était, c'est Chocobo sur l'IRC qui a dit à tourner Manège. Non, mais justement... Non, c'était dans 30 millions d'amis. Qui c'est qui vient de dire ça ? C'est Benjamin. Alors, Benjamin, tu dégages. Benjamin, tu dégages ! Et pourtant, t'es un mec. Tant pis pour toi ! Mais non, t'es trop cool, Gérard, tu peux pas me virer, t'es trop cool comme mec. Je sais pas où il est. Je te suis depuis 10 ans. Ah, c'est bon, je crois que j'ai trouvé. Je suis dans la rue depuis 10 ans, Gérard. Il est super cool, Benjamin. Et c'est lui qui t'amène des lettres. Ça y est, vous avez fini, quoi, connerie ! Bon, Benjamin, je suis désolé. Je dégage. Alors, Françoise. Oui. Moi, en supprimer un, je supprime la famille en or. Pourquoi ? Parce que j'aime pas Pascal du tout. Non, mais c'est sûr... Non, non, non, non, attends... C'est plus Cabroule, là, je sais plus trop quoi. Cabroule, non. C'est qui, maintenant ? C'est Pascal Bonner. Parce qu'il a chanté sur la 3. Un tout naze, lui. Attends, attends, attends, Françoise. Il y a une question IRC. Non. Il te demande... Enfin, ça change de jeu encore, mais c'est Oxide qui te demande comment on reconnaît les billets gagnants du millionnaire. Comment on fait ? Alors, pour le millionnaire, tu grattes et si t'as 3 télés, tu passes à la télé. C'est 4. C'est 4. Non, 3. Non, c'est les morpions. Non, c'est 3 télés. C'est 3 télés pour passer directement à la télé. Eh, eh, eh ! Directement ? Eh ! Eh, sans déconner ! Sans déconner ! D'accord, Françoise ? D'accord, Gérard. Sans déconner ! Sans déconner ! Donc, c'est vrai qu'avant, on avait... Cabroule. Vincent Cabroule. Et Patrick Roy, avant. Non, non, non, non, non, non. Non, mais Patrick Roy... Non, non, non, attendez, attendez, attendez. Celui qui a créé le premier jeu télé, ça a été... Patrick Roy, ça, je suis d'accord avec Françoise. C'est lui qui a... qui a rentré là-dedans lors du... juste prix. Après, il y a eu Vincent Cabroule, qui a capé... Il a fait quoi, lui ? Capé... Merde, comment qu'on appelle... Les marches des héros. La famille en or. Après, ça a été repris par... Maintenant, c'est repris par Pascal Bruner, donc maintenant, il faut dire que c'est vrai que... Il y a pas eu l'autre pédale de Montiel, aussi, là ? Bernard Montiel, oui. Gérard, en parlant de Rizzoli, en parlant de Rizzoli, il y a Davy One sur l'IRC qui a une question pour Benjamin. Et on a qu'avec Pipo, en même temps, tiens. Bon, c'est dommage que Benjamin n'est plus là. Mais il se demandait comment Philippe Rizzoli fait pour présenter le juste prix à une millionnaire. Est-ce qu'à chaque fois, tous les jours, il doit gratter pour trouver trois télés ? Non, non, non, non, non. Allô ? Ouais, Pipo. Ah, quand même ? Ouais, ben attends, cinq minutes, je réponds quand même au question Internet. Ben attends, c'est bon, ça fait déjà un quart d'heure que je suis en attente. Ouais, ben attends, pour l'instant, si t'es pas content, pour l'instant, je réponds aux questions Internet avant vous, d'accord ? Mais putain, c'est quoi cette organisation à deux francs, là ? Eh, si t'es pas content, tu restes chez toi, d'accord ? C'est chez moi, hein. Connard. Vas-y, reste poli. Donc, je réponds à la question. Donc, la question, c'était... C'était comment Rizzoli fait pour trouver trois télés tous les jours pour aller au millionnaire. Non, non, mais attends. Mais ben, d'artiller, hein. Oh, mais ça y est, Pipo, tu la fermes un peu ! C'est bon, Pipo, t'es cool. Ouais, putain, mets-moi tout le monde en attente. Hop. Donc, pour te répondre à ta question, donc, il gratte pas trois télés, c'est lui qui anime deux jeux à l'heure actuelle. Et c'est sûr que je voudrais bien savoir comment qu'il fait pour animer le millionnaire le samedi... Ben, il court vite. Non, mais... C'est presque dans les mêmes... Dans les mêmes locaux que là où il fait le juste prix. Donc, il a juste le temps de changer et il reprend tout de suite le millionnaire, le juste prix. Tu crois qu'il change même de slip ou... Il fait comme Superman, il passe par une cabine. Voilà. Combien qu'on est sur IRC, Rigo, quand même ? On flotte autour de 3400, 3500. En plus ? Ouais, on n'arrête pas de flotter, là, parce que... C'est nul, par rapport à l'Europe. Ouais. Il y a des gens, ils viennent, ils écoutent par l'Internet et ils s'en vont parce qu'ils trouvent que tu gueules. Alors, Flore Danus. Ouais, mais moi, j'ai tout zappé, là. Ah ben... Dans ces cas-là, c'est pas grave. On va s'écouter... Attends, finis ta question. Allô ? Alors, Flore Danus. Ouais ? Tu réponds ? Ça n'avance pas, hein. Bon, tu réponds. Allô ? Flore Danus, tu réponds. Ouais, donc, moi, je pense que les jeux de téléphone, c'est de la merde et c'est bien normal, quoi. D'accord. Ah ben, dans ces cas-là, tu changes de chaîne, ça ira plus vite. Pipion. Ouais ? Donc, pour toi. Non, c'est Pipo, moi. Pipion ! Je ne me souviens plus de la question. Putain, t'es lourde, toi. Tu commences à me casser les couilles. Allez, hop, dégage. Je t'emmerde, d'accord ? Je t'emmerde, moi, je te pisse au cul, toi, salope ! Allez, hop, dégage ! Hop, Pipion, tu me la dégages. Qu'est-ce que je fais ? Je la dégage, je la garde ? Non, non, tu me la gardes. C'est dommage, elle était cool. Non, non, je n'aime pas les connes. On aime ton cul, Gérard. T'as un problème de voix, Gérard. Ah, Manu ! Ouais, Manu ? On travaille bien ! On travaille bien ! Ah, Manu ! Ah, Manu ! Allez, hop, terminé ! Conclusion du débat ! Allez ! Conclusion ! Maintenant, je prends ce soir. Comment ? Or, toi, tu dégages. Gérard, calme-toi. Calme-toi, Gérard. Hop, terminé. Hop, terminé. Donc, on va s'écouter. Je me mets une pisse sale dans l'arrière avec des punaises et des clous. Conclusion ! Mais Gérard, putain ! Mais conclusion ! Mais quoi ? Mais arrête ! Dégage ! Dégage ! Dégage de là toi ! Qu'est-ce que tu fais ? Arrête, tu vas faire un blanc Gérard. Qu'est-ce qui se passe ? Ça marche bien là ! Qu'est-ce que tu fais ? Tu vas tout couper, arrête Gérard. Dégage ! Fais de la merde ! T'es aussi con que Pildor ! Toi c'est pareil ! Dégage ! Dégage ! Dégage ! Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? Qu'est-ce qui se passe ? J'arrête ! Parce que là tu viens de firer Olivier, Manu et Pildor. Il ne reste plus que Rigaud. Moi je ne sais rien faire. Moi je ne sais pas faire le standard, je ne sais pas faire l'arrêtage, je ne sais rien faire. Alors qu'est-ce qu'on fait ? Non mais on va s'écouter, je me mets une ficelle dans l'arrêt avec des punaises et des clous. Mais ce n'est pas une solution ça Gérard. Non mais on met ça comme disque et je vais essayer de voir si je trouve des gens au standard. C'est impossible. C'est impossible de travailler comme ça. C'est impossible de faire des débats que je dis comme ça. Non mais là d'accord, mais attends. Là c'est impossible. Manu, il fait le coup, il s'amuse là. On met des doubles sons. L'autre qui lui demande de virer des gens, il ne les vire pas. Pour l'instant il y a Rigaud qui bosse. Moi je commence à avoir mal bol. Moi je vais finir par ne plus faire de débats. Mais là il faut faire super gaffe parce que... Attends, regarde. Tu as 24 lignes qui sonnent. Là je ne suis pas d'accord. Alors qu'on soit allé où ? Tu peux revenir Gérard ? Attends Gérard, tu parleras avec eux. Qu'est-ce qu'on fait ? Pour l'instant tu mets 2 10. Non, non, non, non. Toi tu dégages. Toi tu dégages. On n'a rien fait. Allez Gérard. Allez Olivier, c'est bien. Non mais claque pas la porte comme ça, tu vas tout casser putain. Toi Manu. Ah non les gars. Manu ça commence à bien faire. Je peux revenir Gégé ou pas ? Attends, vous me prenez déjà au standard moi. Il y a le 10 que là tout tourne. Alors François ça allait où ? Non mais attends, on s'en fout de François. Qu'est-ce qu'on fait ? Non mais moi pour l'instant tu mets 2 disques. Ah non, non, non. Si, si, si, si. Pour prendre le débat là Gérard. Non, non, là c'est même plus possible. Gérard, Gérard, je vais perdre des gens. Je vais perdre des gens sur l'IRC. Je vais perdre des gens sur l'IRC. Mais même, on est à 3500, moi je ne suis pas d'accord. Je ne suis pas d'accord qu'on soit à 3500 à 1h46. C'est bien. C'est vachement bien. Non mais attends. Nous la semaine on est à 100. On est à 100 pendant toutes les 10. Non mais là il faut pas déconner. Il faut pas déconner. Attends. Les mecs ils ne veulent même pas répondre aux questions. Qu'est-ce qu'il s'est passé ? C'est terminé. Maintenant tu ne me prends plus de personne avant. Tu ne me prends plus personne avant les débats. Tu attends que j'arrive et je sélectionne les gens. Parce que Tony j'en veux plus. Arnett aussi, Goldo, tout ça. Qu'est-ce qu'il s'est passé ? Là je n'écoutais pas. Qu'est-ce qu'il s'est passé ? Attends, l'autre il me met du double son. Mais non. J'ai rien fait. J'ai rien fait. Je suis innocent. Olivier, elle est un sable. On va reprendre l'antenne. Olivier, qu'est-ce qu'il se passe ? Olivier, c'est pareil. Tu me demandes de dégager quelqu'un. Il ne va pas. On ne peut pas déconner. Moi je ne continue pas les débats comme ça. Non mais c'est clair. Je suis d'accord. C'est pas vrai. Tu n'as rien fait. Non, tu n'as rien fait. C'est pas vrai. Tu n'as rien fait. Attends. Tu n'as rien fait. Je te demande 150 fois de me virer des mecs. Tu me les reprends. Tu les remets sous le dos de ton nom. Alors qu'il y a 24 lignes qui sonnent. Arrête tes conneries. Dégage. Va faire ton truc à la pointe. Attends, ça va. Il a fait du bon boulot. Alors qui c'est qui fait le truc ? Attends, l'autre s'il se calme. Il revient au standard. Je suis hyper calmé. Il faut que je m'accroche. C'est tout. Alors qu'est-ce qu'on fait ? Qui fait quoi ? Qu'est-ce qu'on fait ? Non, je n'ai pas raccroché aux gens. Qu'est-ce qu'on fait ? Pour l'instant, il reste combien de temps sur le disque ? Il reste 40 secondes. Même pas. Plus tard, il revient au standard. Il me laisse François Zéon. Il me reprend l'autre genre. Bon, alors OK. Allez, on se remet à l'antenne. On reprend dans 40 secondes. Allez, on reprend dans 40 secondes. Et voilà, vous venez d'écouter. Je mets une picelle dans l'arrêt avec des punaises et des clous. Ça, c'est ce que tu m'as donné comme papier. C'est ça. Excuse-moi, Gérard. Je vais chercher un stylo. Je n'en ai pas. Oh non. Tiens, un fil d'arbre. Attends. Olivier est là. Il a volé le stylo, Olivier. Olivier ! Non, non, dégage, quoi. Quoi ? Fil d'arbre, fil d'arbre, fil d'arbre. Fil d'arbre ! Fil d'arbre ! Bon, ça y est. Alors, tu me récupères les gens, là, vite fait. Allez. Alors, donc, maintenant, c'est fil d'arbre que vous avez au standard. Bonsoir à tous. J'espère qu'il va prendre des gens sur les 24 lignes. Tu es trop cool. Tu es cool, Phil. Tu te dépêches ? Hé, Phil, t'es cool. Alors, donc, il nous reste qui, normalement ? On devrait avoir Françoise. Françoise, ouais. Françoise ? Ouais, je suis là. Qui c'est qu'il nous reste ? Bah, c'est tout. Non, père. Bien joué, bien joué. T'as plus que toute seule. Je sais pas. Si tu veux garder qui, tu m'as dit de virer tout le monde. Bah, tu remets plus de deux nuits. Plus de deux nuits. Allez, là, ouais. Plus de deux nuits. Ouais, je suis là. Salut. T'as au boulot, toi ? Ouais, non, non. Non, non, mais après, tu me prends d'autres personnes, là. T'as mes règles. Ouais, t'as tes règles. T'as l'air que tu vas avoir tes règles. Tu vas aller voir Phil Dard. Il va t'arranger ça. T'aimes changer mon tampon ? Ouais, il va... Avec les noms. Il va te les retirer, tes tampons, tu vas voir. Bon, alors, qu'est-ce que... Hé, Dard. Oui ? Il y a une personne qui voudrait participer au débat. C'est possible de l'appeler ? C'est qui ? C'est qui ? C'est un certain Guillaume. Pas de favoritisme. Ouais. Ouais, mais là, je sais pas. T'aurais dû demander ça. À Phil Dard. Bah oui, mais disons que... Bon, je veux pas être toute seule sur le... Sur le débat. Bah, je suis là. Bah oui, mais t'es toute seule. On est que deux, là. Bah, on est deux. Non, mais attends. Pour l'instant, qui c'est qui me reprend, Phil Dard ? C'est Max. Juste deux secondes, Gérard. Juste qu'il est 1h50 et qu'après, il y a ton deuxième débat qui est intéressant. Donc, dans 10 minutes, il faut passer au deuxième. Ouais, bah, dans ces cas-là, on fait conclusion sur celui-là, puis c'est tout. C'est qu'on... Conclusion, et on met un disque, cette fois-ci. Ouais. On met deux disques. On vient d'en mettre un. Jouge. Jouge. D'habitude, entre deux débats, on met Jouge. J'ai t'expliqué. On vient de mettre un disque et à l'époque, il y avait trois heures de débat. Maintenant, ça dure deux heures et demie. Donc, on met plus qu'un disque. On attaque à minuit et demi, on arrête à trois heures. T'es d'accord ? Et les gens, ils demandent. Il y a combien de connectés, Rigo ? 3008, 3009 ? Non, on est redescendus suite à l'engueulade avec Olive. Et ouais, putain ! Et on est sous les 3000, mais c'est en train de remonter parce qu'ils sentent que le débat est plus calme. Ah, et puis, Fildar est revenu. Ils sont peut-être contents aussi. Ils sont contents. Ils le trouvent super cool. Dommage, on ne va pas pouvoir continuer la fin du premier débat parce que c'est bête, parce qu'il y avait quand même des questions qui étaient intéressantes. On l'a fait. Pourquoi les jeux télévision existent-ils ? C'est nul. C'est nul si t'es pas contente, c'est le même prix. Peut-on tomber amoureux d'un jeu télé ? C'est nul. C'est nul si t'es pas contente, tu vas te coucher. Et d'après vous, les jeux télé sont-ils truqués ? C'est nul. Dans ce cas-là, tu vas te faire foutre. Tu vas aller retirer tes tampons. Comme ça, t'auras plus tes règles. Donc, la conclusion du premier débat... Non, c'était pas mal. Non, c'était pas mal. C'était bien. Bien sûr, on a fait que cette question, ça a été le bordel. Donc, le deuxième débat va porter sur les poèmes. Et je peux vous dire que je suis venu avec 4 poèmes. Mais toi, tu vas faire le standard. Et tu vas la fermer. Tu vas la fermer. Tu vas pas t'amuser à ouvrir le micro. Ça sert à quoi que je revienne, moi, pour faire 2 minutes, là-haut ? Tu crois que je suis payé à ça, moi ? Attends, toi, pour l'instant, on est en train de chercher quelqu'un pour te remplacer. Alors, tu vas pas nous les gonfler ? Sans déconner. Sans déconner ! Donc, pour l'instant, il y en a qu'un qui travaille le mieux, c'est Régo à l'Internet. Oui ? Bip bip. Comment ? Bip bip. C'est qui, ça ? Bip bip. Bip bip. Ah, bip bip. Ouais, OK, d'accord. Je vois pas ce que tu veux me dire, mais c'est pas grave. Bip bip. L'autre a dit bip bip. Mais non, la gaffe, quand il arrive, il fait bip bip. Mais non. Tu sais même pas ce que c'est, le bip bip. Tais-toi, tais-toi, tais-toi. Écrase, écrase, écrase. T'es un faux fan du bip bip, en fait. Écrase. T'es un faux. Un faux fan. Ce soir, je l'ai regardé. Fais-moi confiance. Je me suis bien marré. C'est quoi qui t'a fait marrer, ça ? Ouais. Hein, Françoise ? Ouais, ouais, ouais. L'autre que t'aimes pas, là, comment tu l'appelles ? Vous l'avez regardé ensemble ? Non, non, ben... Non, on l'a pas regardé ensemble. Non, mais... On était au téléphone ensemble. Et quand on a arrêté de se parler au téléphone, il y avait Ramucho qui... Ouais, avec une... Avec carrément la maison sur la tête. Ramucho ! T'as cru que c'était la gueule ! Ah, t'es trop cool ! Ah ouais, c'est cool ! Elle est cool, Ramucho. Non, mais attends. T'inquiète pas, Françoise. C'est Manu et Fildar. Ils pètent les plombs, là. Je crois qu'ils ont fumé la moquette. L'autre, il doit faire du 90B, maintenant. Rigaud ! Il est trop rigolo. Rigaud ! T'es marre pas, Rigaud, c'est pas drôle. Rigaud, il y a... Oui, qui y a-t-il, Gérard ? Rigaud, il y a que toi qui bosses bien dans... Fais pas le con ! Fais pas le con ! Moi, je bosse bien parce que les gens de l'IRC sont bien. Fais pas le con, Rigaud ! Bon, conclusion ! Qu'est-ce qu'on se marre ! Alors, conclusion, donc, on... Ben... Il n'y a plus personne pour la conc... Ah, si, il y a Françoise. Ouais. Ben, je veux pas te... te vexer, mais j'ai trouvé ça nul. Eh ouais, mais... Tu sais à qui t'en prendre ? Ben oui, je sais à qui m'en prendre. C'est dommage parce que c'est rare que je participe à tes débats, mais là, je l'avoue, c'est franchement nul. Ben ouais, mais ça, tu sais à qui t'en prendre, hein. Tu t'en prends après Manu et Olivier de la... Voilà. Gérard, conclusion, si toi... Et toi, qu'est-ce que t'en prends ? Ben, moi, je suis comme toi. Comme toi. C'est de la merde complète. Et j'aime pas ça. Donc, j'espère que le deuxième... J'espère que le deuxième, il sera aussi bien, mais disons que moi, je participe pas. Pourquoi ? Parce que t'as vu qu'il a retenu, il est 2h05, et puis, bon, il est temps que t'avais une couche. Ok. Pute de nuit. Ouais. Ben, c'était à chier, ouais, la raison, Françoise. Et tes fins, ben, c'est chaîne de beau. De toute façon, on te l'a dit, hein. Si tu m'aimes pas, tu changes de chaîne, hein. Ben, justement, moi, je regarde RC, donc... Eh ben, dans ces cas-là, tu nous emmerdes pas, puis c'est tout. Gérard, sur IRC, il y a la conclusion de Turpentine qui dit que ton débat, il avait ni queue ni tête comme toi. Non, mais ça, de toute manière, à chaque fois, moi, je commence à en avoir ras-le-bol. Putain, celui qui a un micro derrière, il va se prendre mon poing dans la gueule. Hein, Manu ? Quoi ? C'est bien de parler derrière moi. Hein ? Bon, les conclusions, de toute manière, je pense qu'on va perdre plus qu'un débat par semaine, et ça sera terminé. Allez, on se retrouve pour le deuxième, pour les poèmes, et à tout de suite. == Le débat sur les poèmes == === Contexte === === Les personnages === === Transcription === Les débats, pas de radio et pas d'insultes de Gérard Eh bah lui tu peux annoncer le disque Le disque c'était je sens pas bon entre les cuisses avec mais je me soigne Et bah voilà, donc alors on va écouter, on accueille Verlaine de Montigny le Bretonneux On écoute Fun Radio sur 101.9 Oui bonsoir c'est Montigny le Bretonneux Ouais bah je le sais D'accord Puis celle du sud Salut Gérard Bonsoir Petit Nénuphar Salut Gérard Bonsoir à toi Et String en fleurs String à fleurs oui, Ami Poète du soir, bonsoir De Montluçon De Montluçon oui On écoute Fun Radio sur 87.8 Exactement Et puis celle du sud c'est 98.9 c'est ça ? Exact Excuse moi Gérard on a un nouveau là j'ai eu le temps d'en faire Enfin une nouvelle c'est la chaude Salut Gérard Salut la chaude Salut la chaude Salut la chaude Salut ça va ? Ça va la chaude ? Je suis grave excité le soir avec Gérard Tu fermes ta gueule toi Non mais calme toi la chaude Gérard tu m'excites putain Mais calme toi la chaude quand même Ok D'accord ? Oui Donc tu as 19 ans c'est ça ? C'est ça Et tu appelles de ? J'appelle de la chambre Ouais mais de quelle ville ? Ouais ta chambre Ok j'appelle Versailles Versailles voilà 101.9 Fm Je sais que tu es chaude Oui je suis chaude je sais que tu es chaude Oui je suis chaude j'ai un doigt dans la chaude Non non attends T'as reconnu que t'étais en vie là T'as l'air tu vas être vachement chaude Que tu as dégagé C'est un débat sur la poésie donc tu dis que tu mets un doigt dans ton sexe féminin D'accord Voilà Ouais ben toi Pildor tu commences à t'écraser d'accord ? Alors le deuxième débat se portera sur les poésies Les poèmes Et n'ayez crainte Y'en a quand même 4 après Oh non Qui seront à lire Oh non On fera des poèmes après Moi je raccroche pas Euh ce que ça plaît pas Ça sera le même prix Moi je raccroche Si t'es pas contente que tu vas te faire foutre D'accord ? Tu vas pas commencer à me casser les couilles Ok ? C'est bien compris ? Oui C'est bien compris Hein ? Alors comment doit être réalisé un poème ? On m'a demandé ça à la chaude là comme elle a un doigt dans la chaude Alors comment doit être réalisé un poème ? On m'a demandé ça à la chaude là comme elle a un doigt dans la chaude Comment je l'ai retiré ? Oui c'est quoi la question ? Comment est-ce qu'on doit réaliser un poème ? Oui c'est quoi la question ? Comment est-ce qu'on doit réaliser un poème ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Non c'est comment qu'on encule ta sœur ? Bravo là Bravo là C'est à l'heure Oui donc répète ta question s'il te plaît Bon elle tu me la prends au centre Attends j'ai envie de répondre Alors tu réponds tout de suite Alors c'est quoi la question ? Non bah allez hop on va demander à Verlaine Comment doit-on réaliser un poème ? Moi je pense le plus simplement du monde Avec des phrases, des mots, des virgules, des points à la ligne Et surtout un point final Voilà un point final à la ligne c'est ça ? Un point final et tout à fait Ok Je pense Puis celle du sud Ouais il faut compter les pieds pour faire des vers Donc c'est soit douce, tu fais des alexandrins Soit moins, soit plus Mais ouais tu fais des rimes, tu fais des jolis mots Des jolies phrases qui vont ensemble Ok Voilà Petit nénuphar Bah oui donc tu dois faire des tercets, des vers Faut que ça rime etc Faut que ça ait du son, de la tonalité Bon c'est quoi là ce bordel là ? C'est que tu m'as écouté j'espère Parce que je répète pas On va pisser Manu il n'y a pas de problème Non mais c'est bon là Régo On travaille Gérard j'ai un super service à te demander Ça va te faire chier mais il faut que j'aille faire pipi Bah tu es sûr ? Non mais attends Manu Avant de sortir je te demande l'autorisation Mais Manu tu veux pas que j'aille te la tenir ? Non ça va mais je te demande si je peux y aller quoi Bah tu te démerdes tu te mailles Bah merci Gérard je reviens Je te lave les mains Alors petit nénuphar Bah je t'ai répondu tu vois tu m'as pas écouté comme d'hab Non mais c'est pas de ma faute Donc vas-y Donc il faut que les phrases aient de la tonalité De l'expression etc D'accord string en fleur ? Bah écoute moi je dis qu'il faut trois choses que je suis pas sûr que t'aies C'est l'art de conjuguer, le sens de l'orthographe et quand même un minimum de syntaxe Non mais de toute manière il y a Si si quand même Non attends attends C'est n'importe quoi ça donne je voudrais te dire je t'aime et puis bon Non mais de toute manière il y a pas spécialement je veux dire je t'aime ça c'est mes trucs à moi ça c'est Il faut de la syntaxe toi tu mets de la syntaxe dans tes poèmes t'en mets un maximum Il en faut il faut de la syntaxe il faut aussi de la conjugaison Il faut du Becherel du bled J'ai pété les rimes aussi hein voilà ouais Non mais attendez attendez on accueille qui là maintenant ? Attends pas encore non non non je vais la rappeler parce que j'ai besoin d'une ligne Alors tu bières la chaude et puis tu prends la ligne ? Rappelle le secret Ouais voilà le bulldog secret tu vois tout le monde le veut et apparemment il y en a un qui s'appelle Arnett ou Tony ? Non Non ? Ouais Alors donc comment doit être réalisé un poème bon bah de toute manière ça va être des rimes Mais j'ai pas répondu Non mais toi tu vas te faire foutre Je rentre s'il te plaît Bravo Mais non Mais je t'ai dit de toute manière je veux pas t'entendre toi Je t'ai dit de toute manière je veux pas t'entendre toi Je t'ai dit de toute manière je veux pas t'entendre toi T'as pas envie de me dire comment je réalise mes chers poèmes ? T'as pas envie de me dire comment je réalise mes chers poèmes ? Ouais vas-y Ouais vas-y Eh bien moi j'aime deux doigts de sensualité avec un tiers de whisky et un tiers de Gérard Eh bien moi j'aime deux doigts de sensualité avec un tiers de whisky et un tiers de Gérard Eh bien moi j'aime deux doigts de sensualité avec un tiers de whisky et un tiers de Gérard Ouais alors tu vois Fildar Fildar Fildar Fildar Fildar Fildar Quoi ? Fildar Quoi ? Fildar Quoi ? On travaille T'as laissé le pisser un peu ? Oh Benjamin Je m'amuse bien je fais de la Gameboy Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Oh putain l'autre au lieu de travailler il est en train de faire de la Gameboy en plein Non mais il est cool Non mais il est cool Non mais il est cool Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Ouais il est cool Fildar Bah apparemment comme il a pas l'air de vouloir travailler au standard c'est… Bah il est cool De Turpentine, est-ce que tu comptes tes pieds pour faire un poème ? Laisse-le Gérard, il répond à la question. Donc tu me disais ? Est-ce que tu comptes tes pieds quand tu écris un poème ? Non. Non, pas du tout. Et tu comptes tes verres ? Non plus. Non, il picole les verres. Les verres du cul. Les verres du cul, toi, tu la fermes un peu. Donc string en fleur. Oui, tu peux draguer, c'est clair, ça aide à draguer les poèmes. Moi, je me souviens, l'autre fois, j'ai branché une nana, je lui ai récité un poème. C'était un truc du genre, je ne sais pas, viens là cochonne, que je te ramone avec mon gros dard, je vais t'éclater ta boîte à souchards. Et direct, j'ai réussi à la serrer, direct. Et tu as pu trouver quelqu'un comme ça ? J'ai pu trouver plein, plein, plein, ça marche à chaque fois. Ça marche à chaque fois, tu leur fais deux, trois rimes et c'est bon, pas mal. Oui, mais je ne pense pas, mon ami. Toi, tu as fait pareil, tu as bien conquis. Des dizaines et des dizaines de femmes grâce à tes poèmes. Non, je pense qu'à mon avis, là, tu te trompes, vraiment, vraiment, tu te trompes. On reconnaît que tes poèmes ont quand même fait ta gloire. Ah mais attends, mais ce que je lis à l'antenne, ça c'est différent. Mais ça n'attire pas les femmes ? Non. La chaude, tu t'écrases un peu. Mais tu m'as touché, moi. Non, mais toi, tu as t'écrasé parce que tu m'énerves. Tu t'as touché où, la chaude ? Donc, on accueille, on accueille Santa Belgica, il nous appelle de Belgique. Et voilà, il est cool, il a... T'as quel âge, Santa Belgica ? J'ai 23 ans. Voilà. Salut, Santa Belgica. Salut, toi. Salut, Belle. Bonjour. Donc, patinez du phare. Putain ! C'est quoi, cette merde, là ? Calmez-vous, les auditeurs, merde. N'oubliez pas. C'est bon, quoi. Oh, putain ! Non, on se dépêche. Gérard, vas-y, continue le débat, je vais essayer. Allez, encule ton cul, toi, la salope. Là, tu vas permettre ta gueule pour deux bons. Mais c'est la chaude. Hein, la chaude ? C'est un conseil que je te donne avant que... Allez, dégage ! Hop ! T'es pas très poli. T'es pas très poli, Gérard. T'es pas très poli, tu puisses. Calmez-vous pour la chaude. Il est monté sans moi. Quel bordel, dans ce débat. Donc, petit délire char. Ouais. Donc, c'est quoi, la question ? Alors... Peut-on séduire avec un poème ? Peut-on utiliser un poème pour séduire ? Manu, fais gaffe ! Tu te calmes, Manu, hein. Bah, j'en sais rien, parce que... Donc, un mec m'a séduite avec un poème. Ah ! Ah ! Pour l'instant. Ah ! Ah ! Ah ! Ah, mais je sais pas. Ah ! Ah ! Ah ! Ah, bah, ils s'en foutent, là. Ils sont déjà partis. Attends, c'est quoi, ça, Gérard ? Ça vient d'où, ça ? Non, mais, Fildar, quand tu feras bien ton boulot... Qu'est-ce qui se passe ? Ouais, Fildar ! Bravo ! Merde ! Qu'est-ce que t'as fait ? Non, non, non, non. Non, non. Non, non, non, non, non. C'est quoi ? Non, non, tu l'auras pas. Mais c'est quoi ? Je sais même pas ce que c'est. J'aurais quoi ? Tu l'auras pas, parce que tu vas le mettre là, MD ? Ouais, ouais. Ouais, c'est un petit truc... MD, GG, insert. Gérard ? Avec Niette. Gérard ? C'est qui ? C'est un remix, un exclusif que je voulais pas te dire, parce que c'était une surprise. C'est qui ? C'est Verlaine. Ouais, Verlaine. Moi, je pense quand même qu'on peut, pour revenir un peu dans le débat, je pense qu'on peut répondre à la question, quand même, parce que t'as réussi à séduire la grosse Sandy avec tes poèmes. Verlaine, tu restes poli, parce que la grosse Sandy, elle t'emmerde. Oui, c'est vrai, pardon, mais c'est comme toi, c'est parce que tu l'appelles comme ça, toi, donc je pensais qu'on pouvait l'appeler comme ça, quoi. Non, non, mais attends, moi, je lui dis ce que je veux. C'est vrai, c'est vrai. Enfin, voilà, quoi. Bon, alors, dans ce cas-là, comme vous faites les cons, eh ben, on arrête. Oh, non ! Non, on n'arrête pas ! On arrête ! Non, j'ai dit pas ça, là. Sur l'IRC, on a dépassé les 4 1882,4. Je suis tranquille, on commence à arriver vers notre record, alors j'aimerais bien que le débat se passe calmement. Non, mais moi, dans ce cas-là, je voudrais bien que les gens, je voudrais bien que Fildar fasse bien son boulot avant qu'il se prenne des claques. Allô ? Gérard ? Oui, allô, fun, bonsoir. C'est qui ? Oui, t'es au standard, tu veux parler de quoi ? Mais qu'est-ce que c'est que ça, Phil ? Tu veux parler au doc, oui, quitte pas. Bon, Gérard... Fildar ! Moi, j'attends que tu fasses ton débat, moi, je peux rien faire sans toi. Ouais, c'est bon, c'est bon. Je peux rien faire sans toi, Gérard. Non, non, mais... Bon, Gérard, pour en revenir au débat, il y a Turpentine qui te demande si t'as séduit Sandy grâce à tes poèmes. Ah, ça, c'est une bonne question. Ça, c'est une question que tout le monde voudrait savoir. Est-ce que ça attire les animaux ? Comment ? Est-ce que ça attire les animaux, les poèmes ? Est-ce que ça attire ta connerie ? Ah, t'es drôle. Gérard ? On va demander à Petit Nénuphar. Oui ? Tu m'as pas écouté une fois de plus. Bon, alors, vas-y, dis. Non, c'est bon, j'ai répété, c'est bon. Je peux aller passer à un autre ? Donc, on va demander à Pucelle de Nuit. Allez, Pucelle du Sud. Gérard, on me repose la question sur IRC. On me redemande si Sandy... Sandy, on ne me la redemande pas. Non, attends, Manu, s'il te plaît, c'est pas toi qui commandes, c'est Régo, toi. Tu ne fais rien et tu te tais. Elle va venir plus tard, la question. Non, je la garde pour... La grosse, ça t'emmerde, toi, connard ! Elle va venir plus tard, la grosse. Tu peux répondre ? On reprend le débat, là. T'as un nouvel auditeur, en plus. Alors, on a Santa Belgica et Potiron du Sexe. Oui, salut, Coco. Oh ! Salut, Potiron. Salut, Potiron. Allô, Coco ? Potiron, tu réponds comme il faut ! Ouais, bonjour. Salut, ça va ? Oh là là ! Putain ! C'est quoi, là, ces auditeurs que tu me prends, toi ? Qu'est-ce que c'est que ça, là ? Putain ! Attends, Gérard, j'ai rappelé un mec de Belgique parce que tu voulais des Belges dans le débat. En plus, c'est quelqu'un de l'Internet et tu ne l'as toujours pas fait participer. C'est Santa Belgica. Il n'a toujours pas répondu à ta question. C'est un Belge et il attend. Oui, Gérard ? Alors, toi, toi, ça qui est plus sale du sud, tu vas fermer ta gueule un peu. Non, mais dis rien. Vas-y, réponds, Santa Belgica. Alors, je voudrais savoir si... En fait, je suis poète à mi-temps en Belgique. Je voudrais savoir si Gérard connaît mes oeuvres. Non ! Non, mais je peux lire un poème, peut-être ? Non ! Oh, mais tant pis, quand même. Une mélodie est née le jour où nous nous sommes rencontrés. Et cette mélodie... Il a mis sa gueule à lui ! Elle sera toute notre vie. Vas-y, gros. Voilà, c'est fait. C'est génial, quand même. Deuxième débat, vous allez me foutre la mère d'encore ! Il était beau, son poème. Gérard, tu pourrais faire correctement ton travail. Mais c'est pas vrai, hein ! Gérard, il était beau, son poème. Tu pourrais écouter. Ça m'a pris trois ans pour faire ce poème. Plus sale du sud. Oui, Gérard. Moi, on ne me séduit pas avec des poèmes. Avec des billets, avec des carottes râpées, des clés de douze, des choses comme ça. Hum. Verlaine. Oui, moi, je pense que je suis d'accord avec plus sale du sud. Non, mais tu es précise. C'est-à-dire qu'on peut, effectivement, ou on ne peut pas. Maintenant, chacun a un peu pour soi. Et pour un marque, tu fais quoi ? Non, il n'y a pas de marque. C'est-à-dire que, par exemple, quelque chose comme Orangina ou Coca-Cola... Bon, alors... Verlaine, au revoir ! Pour en revenir à ma question de tout à l'heure, donc, sur IRC, on te demandait si Sandy avait été charmée par tes poèmes. Tais-toi, la grosse débout, espèce de finiasse, là ! Tu ne vois pas que les autres s'habillent, là ? Allez, débout ! T'es vraiment un bâtard, toi, là-bas ! Quoi ? Dédicace ? T'es vraiment... T'es vraiment un fumier, là ! Tu nous le demandes à chaque fois ! Ouais, mais attends ! Tais-toi, la grosse débout, espèce de finiasse, là ! On va l'appeler. Bon, ben, justement, on accueille Poupou le mystère. Salut, Poupou ! Salut, le sanglier ! Salut, le sanglier ! Salut, le sanglier ! Tais-toi, la grosse débout, espèce de finiasse, là ! Tu ne vois pas que les autres s'habillent, là ? Allez, débout ! Et ils sont bien avec nous ! C'est la fête ! C'est la fête ! C'est la fête ! C'est la fête ! C'est la fête ! C'est la fête ! Poupou le mystère ! C'est la fête ! C'est la fête ! Oui, c'est la fête ! C'est la fête ! C'est ça, la fête ! Bon, ça y est ! Ça y est, là, ça y est ! Bon, alors, Poupou le mystère ! Oui, bonjour, Gérard ! Bon, t'es là ? Oui, oui, je suis là, t'inquiète pas ! T'es bonne ? Bonsoir ! Bon, donc... T'es bonne ? Bonsoir, bonsoir ! Bon, Poupou, t'as bien vu que c'était pour toi ? Oui, oui, j'ai bien vu, oui ! T'inquiète pas, j'ai bien écouté la musique ! Donc, alors, maintenant, comme tout le monde sur IRC me demande si je t'ai séduit avec mes poèmes, donc, est-ce que tu peux répondre à la question IRC ? En sachant que c'est Poulmystère ! Voilà, en sachant que c'est Poulmystère comme rigolo ! Il y a trop de mystère dans ce truc ! Non, non, mais vous la laissez répondre, d'accord, maintenant ? Non, je pense qu'en effet, tu m'as séduit avec tes poèmes ! Oh, tu peux faire moins de bruit, s'il te plaît, joue, là ! Attends, toi ! Gérard, Gérard, arrête, le tape pas, le tape pas ! Ah, mais Gérard, si tu ne m'écoutes pas, c'est pas un problème ! Mais non, il ne t'écoute pas, là, il est en train de taper Fildar ! Il te fait parler, c'est un poème de quel siècle ? Gérard, Gérard, vas-y ! Maîtrise quelque chose, là, au lieu de taper Fildar, reprends ! Je t'écoute ! Il y a Poupou le mystère qui te parlait, tu ne l'as même pas écouté, du coup ! Donc, alors, vas-y ! Moi, j'ai fait un poème sur le pont de l'Alma ! Non, ta gueule, à toi, sur le pont de l'Alma ! Non, mais ça, en plus, ça n'a rien à voir avec toi ! Oh, Mercedes ! Putain, putain, putain, putain ! Mais, balance, balance-moi un disque ! Mais non, j'ai pas un disque ! Toi, pilier du pont de l'Alma que j'aime tant ! Toi, haussier ! Au pont de l'Alma, non, je ne l'écoute pas ! Il est incroyable ! Alors, tu le prends, tu l'emmènes dans ton bureau, tu ne lui donnes plus ! Ah, d'accord ! Tu l'emmènes dans ton bureau, tu vas jouer avec ! Quand je m'éclate dans un pylône ! Bon, alors, attendez, attendez, attendez, attendez ! Oh ! Maintenant ! C'est combien, Game Boy ? Oh oui, Sandy, je joue, oui ! Oh oui ! Alors, on va garder Poupou le mystère ! Oui, je suis là ! Donc, tu restes ! Potiron du sexe ! Toi, tu vas te calmer, ou sinon, tu vas dégager ! D'accord ! Puis celle du sud ! Oui ! On va te garder ! Attends, c'est moi qui décide ! Attends, c'est toi qui décide, c'est moi qui commande, d'accord ? Oui, d'accord ! Ok ! Donc, Manu, tu me balances le disque ! Tout de suite ? Oui, oui, oui ! Il est 2h18, vous allez réfléchir à la troisième question ! D'accord ! Quels sont, pour vous, les poèmes les plus beaux ? Et on répondra, avec Poupou le mystère, à la question IRC, tout à l'heure, qu'on nous demande, comment j'ai fait pour... Non, mais ils s'en foutent, maintenant ! Ils m'ont dit que Manu, on s'en fout ! Non, ils ne veulent pas que tu répondes, ils vont s'en aller, si tu réponds, alors ! Non, non, mais on va leur répondre, avec Poupou le mystère, et on se retrouve... On va perdre des gens, Gérard, on va perdre des gens ! Eh ben, dans ce cas-là, on va s'écouter, quoi ? On va s'écouter, attends que je te dise pas de conneries ! Je me mets... Quoi ? Je me mets un doigt dans le cul, non ? Non, c'est pas ça ! Bouge la grosse ! Non, non, non ! Je me mets un carton dans les fesses, parce que je ne me suis pas essuyé ! Mais quand est-ce qu'on va l'avoir en CD, Bouge la grosse ? Ah ben ça, je sais pas, faudra voir si tes débats sont bien ! Ouais, mais faudrait qu'on l'aille en entier ! Donc, pour l'instant, c'est, je viens de te le dire, le titre... C'est, ben... C'est toi qui l'as... J'ai un carton dans les fesses, quoi ? Attends, il y a Max... Avec Je me suis mal essuyé ! Avec Je me suis mal essuyé, et donc, vous réfléchissez à la question... Je me suis mal essuyé ! Avec Je me suis mal essuyé, et donc, vous réfléchissez à la question... Quels sont pour vous les plus beaux poèmes ? Donc, vous pouvez toujours nous appeler au 0800 70 5000... Et 0800 308 5000... Oh, ta gueule ! Ta gueule, toi, tu es un peu ignorant ! Bon à rien, qu'est-ce qu'il fait, là ? T'es tombé dans la poubelle ? Pauvre tâche ! Pauvre tâche ! Tâche ! Tildar ! Allez ! Attends, parce qu'on ne l'avait pas mis en entier, le truc, elle est là, grosse ! Elle est où ? Elle est au standard ! Ta gueule, elle est au standard, attends ! Merde, ma grosse, ok ? Tu ne vas pas lui raccrocher au nez, comme tu as l'habitude de faire ? Donc, on se met le carton dans l'arrêt, et puis, voilà ! On se retrouve tout de suite après ! Manu, annonce le disque, s'il te plaît ! J'ai un carton dans l'arrêt, avec Je me suis mal essuyé ! Ok ! Voilà, et vous pouvez nous appeler au 0800 70 5000... 0800 808 5000 ! Et toujours l'IRC ! Toujours l'IRC ! www.funradio ! Et donc, c'est Rigo qui vous répond ! Voilà, on est... C'est les débats de Gérard, quand même ! C'est toujours les débats ! Le ! Gérard, ok ! Sur Funradio ! Sur Funradio ! Par rapport à l'IRC, vite fait, je voulais juste dire qu'on a dépassé les 4500 quand même, ce qui est un record, même si ça ne fait pas encore 4900 ! On est 4623, et je voulais saluer quelques personnes, Spoutnik, Izen, Cédric, Yankee, Ice-T, Chocobo, Cédric, et les autres, quoi ! Allez, faites-moi plaisir ! Faites-moi plaisir ! Aujourd'hui, on est... On est le... Combien ? On est le 3 décembre ? Ouais ! Non, le 4 décembre ! Allez, faites-moi plaisir ! Montez-moi l'IRC ! Faites-moi monter l'Internet ! Faites-moi monter l'Internet à 5000 personnes ! Allez, on récupère ! Allez, allez ! Spring en fleurs ! Oui, mais restez à toi, Gérard ! Ouais, salut ! Salut ! Pour le... Pour le... Match Talk... Chose... Mystère ! Allez, bouge la grosse, là ! T'inquiète pas, on a une surprise ! Salut, Rigaud ! Salut, Manu ! Et salut, Fildard ! Salut, machin mystère ! Ouais, salut à tous ! Et puis moi, je pue de la gueule ! Ouais ! Non, je viens de te dire salut, Gégé, donc t'as pas entendu ! Ouais ! Non, mais moi, j'ai mal entendu ce que tu m'as dit ! Bon, allez, c'est pas grave, on y va ! C'est pas grave ! Puis, celle du Sud, j'espère que tu t'es calmée ! Salut, Gérard ! Verlaine ! Oui, bonsoir, Gérard ! Tu t'es calmée ? Oui ! Euh... Potiron du sexe, j'espère que tu t'es calmée ! Oui ! Et Santa Belgica aussi ! Oh, j'étais pas énervé, moi ! Bon, alors... Ouais, Gégé, toi, t'es calmée ? Maintenant, on va continuer le débat ! Sérieusement ! Je suis pas calmée, je te le dis ! Bon, qui qui est pas calmée ? C'est String Enfleur, tu m'as pas demandé si j'étais calmée ! Bon, tu t'es calmée ? Ouais ! Bon, alors, maintenant, on y va ! Quels sont pour vous les plus beaux... Quels sont pour vous... Les poèmes les plus beaux ? On va demander ça à Santa Belgica ! Eh bien, un des poèmes les plus beaux qui existe, c'est Ecolalie de la mémoire, arborescent au trédit bitoir. Tu le connais ? Comment ? C'est Ecolalie de la mémoire, arborescent au trédit bitoir. C'est un poème belge. Euh, je connais pas. C'est beau, en tout cas. Enfin, euh... Potiron du sexe ! Ouais, bah, moi, le poème qui m'a le plus touché, c'était le grand classique de la charcuterie, ça, c'est un truc, ça m'a touché, parce que ça parle de la mormoine poêleuse, et j'aime bien. Tu aimes aussi, Gérard ? Non. Mais tu connais ? Non, je connais pas. Tu veux que je t'envoie ? Non, euh... Oui, tu peux l'envoyer au 143 menu Charles de Gaulle, 92 521, noyé sur scène SEDEX. Oh, quelle belle voix ! Donc, tu peux... T'es vrai, Gérard ? Non, mais vous pouvez toujours nous écrire, et puis m'envoyer des petits poèmes. On peut t'écrire directement à toi ? Oui, bah, vous mettez à l'intention de Gérard, et... N'ayez crainte. Je serais... Fildar m'avait dit qu'on pouvait pas. Ah bon, Fildar, depuis quand que... Attends, mais maintenant, il va vous rater. Depuis quand que les gens, ils ont plus le droit de m'écrire ? Ouais, c'est quoi ce bordel, là ? Fildar m'avait dit qu'on pouvait plus. Il a dit qu'il y avait pas de fan club au 143 menu Charles de Gaulle. Tu réponds, tu réponds. Non, je parle pas, je parle pas. Tu réponds aux auditeurs ! Faut savoir ce que tu veux, là. Tu dis que j'éteins mon micro, donc je parle pas. Attends, Gérard ? Oui ? Je t'ai envoyé des chocolats, tu les as reçus ou pas ? Non. Moi, j'ai envoyé des bonbons. Attends, mais on t'a envoyé des trucs, comment ça se fait que tu les as reçus ? J'avais mis l'attention de Fildar pour Gérard. C'est Fildar qui les a gardés ? Fildar ? C'est où ? Je comprends pas. C'est chez moi ? Avec des millionnaires. Moi, je lui ai envoyé des photos intimes, mais bon... Qui c'est qui a envoyé des millionnaires ? Verlaine, j'avais envoyé pour Noël, déjà, les cadeaux, l'attention de Fildar pour Gérard, parce que Fildar m'avait dit qu'il fallait lui envoyer à lui. Ah non, mais Fildar, tu t'en... Mais Fildar m'a dit qu'il fallait tout lui envoyer à lui. C'est pour ça que j'ai envoyé une télévision couleur. Mais Fildar, c'est pour ça que t'as des nouvelles sapes ? Ah, le salaud ! Max ! Je t'ai envoyé des coton-tits, je t'ai envoyé des t-shirts Nike. Je t'ai envoyé une pochette surprise millionnaire, tu sais, avec 20 tickets de millionnaire dedans. Attends, l'autre, il m'a envoyé des trucs... Oh ! Ah, mais calme-toi, Gégé ! Je comprends pas. Ouais, je t'avais envoyé des chocolats, hein. Attends, et l'autre, il me pique mon courrier ! Et les chocolats ? Très déçu. Il y avait des bons tickets au kiwi. Eh non, il pique ton courrier ! On en parlera après. Eh ben, je t'en faisais Chantal Goya, il l'a eu. Bon, alors, question Verlaine. Quels sont les... Je tenais quand même à vous remercier pour les millionnaires et tout ça, les mecs, c'est cool. Non, mais c'est un bâtard, lui, c'est pas grave, on va régler ça après. Pour en revenir à l'IRC, il y a Fiji Lido qui te demande si t'as entendu parler de l'hypraconductivité des poèmes le soir quand il fait nuit. Non. Non, j'ai pas eu l'occasion d'en entendre parler, de ça. Attends, je comprends pas, qu'est-ce que ça veut dire, ça, Gérard ? Ben, justement, moi non plus. L'hypraconductivité, tu vois ? Non, je sais pas ce que c'est. Moi, je t'expliquerai après, là. Tu me l'expliqueras. Donc, Verlaine ? Oui, ben moi, bizarrement, c'est un poème à toi qui m'avait le plus marqué, mais il y a longtemps, quoi. Ah, ben, dis, dis, dis ! Ben, je me souviens à peu près du texte, je sais pas si t'en souviendrais, c'était, bien sûr, je voudrais te dire je t'aime. Ouais. C'était dans un camion frigo, c'était sur un air de trompette, avec, sur un fendrier, je sais pas si tu te souviens. Ah, bon, ben, c'est... Sur un aigle. Ouais, ouais, ouais, c'est la merde. Ben, Gérard, c'est vrai que tu couches avec Big Bill ? Qui, qui, qui, qui, qui demande ça ? Ben, moi. Euh, Pissache du Sud. Oui. Donc, toi ? Ben, moi, ce sont les poèmes de Yaponov. Ben, Gérard, c'est vrai que tu couches avec Big Bill ? Oh, là, là. Pissache du Sud. Ouais, moi, c'est un poète russe dont les oeuvres ont été traduites en français, c'est très beau. C'est très dépouillé, t'as un mot par page, mais c'est très bien pensé. Ben, Gérard, c'est vrai que tu couches avec Big Bill ? Euh, Poupou le mystère. Oui, ben, écoute, moi, ce que je peux te dire, c'est que, pour moi, les poèmes les plus beaux, c'est Baudelaire. Ouais. C'est très, très beau. Oh, non ! Et, euh, bien sûr, les dix. Oh ! C'est exactement grâce à ça, grâce à tes poèmes, que je t'ai connue, quoi. Que j'ai fait ta connaissance, et puis, voilà. Ah, ben, voilà, elle répond à la question de l'Internet, Gérard. Il me mentait dessus, c'est tout. Ben, la question... Non, mais il y en a une autre. Ah, une autre ? Parce que l'IPRA, il perd contre l'activité, apparemment, tu sais pas ce que c'est. On te demande si c'est vrai que... Alors, attends, si les poèmes du Figaro signés Gégé de Suren, est-ce que c'est les tiens, c'est Chocobo qui demande ça ? Non, c'est le Figaro. J'ai jamais mis de poèmes sur le Figaro, et j'irai jamais mettre des poèmes. C'est quelqu'un d'autre, alors. Non, mais, là-dedans, j'irai jamais mettre... Ben, il faut payer, en plus. Comment ? Il faut payer. Oui, il faut payer. Et, Poupou le Mister, pour l'instant, je réponds, tu me laisses parler, s'il te plaît, merci. Ok, y a pas de problème. Avant que je t'assomme. Alors, ça, sûrement pas, parce que t'as pas... Bon, allez, c'est bon, c'est bon, laisse-le répondre, putain. Eh, oh, tu la laisses parler, toi ? Tu la laisses parler, toi ? Comment ? Eh, Gérard, t'as le juste prix de ton cul ? Euh, string en fleur... Euh, donc, euh... Tu réponds ? Pour répondre à la question IRC, donc, non... Vite, vite, vite, vite, vite. Donc, on va demander à... Ben, string en fleur, maintenant. Eh, Gérard, t'as le juste prix de ton cul ? String en fleur. Voilà, oui, déjà, je voulais dire que Moby Dick Mister, là, elle a pas beaucoup de goût au niveau des poèmes. Et, deuxièmement, les plus beaux poèmes, ben, c'est ceux qu'on fait avec le cœur, hein, ou ceux qu'on fait avec l'alcool. Non, mais, de toute manière, en principe, quand tu fais un poème, tu le fais du fond du cœur, pour la personne que t'aimes. Ouais, tu peux le faire du fond du cul, aussi. Non. String en fleur. Ouais, mais je te disais, avec l'alcool, reconnais que quand t'es un peu éméché, ça aide pour l'inspiration. Euh, non, je vais te dire une chose que... Non, non, non ! Les plus grands poètes, ils ont toujours consommé un maximum, quand même. Eh, je vais te dire une chose que... Ouais, il y a autre chose. Ben, attends, il y en a un, là, pour l'instant... J'ai rien fait ! Non, mais c'est lui, là. Tu vois, Pildar, tu me laisses ton micro, et c'est tout. D'accord ? Euh, Rigo ? Question IRC, avant que je réponde. Alors, est-ce que c'est vrai que j'ai lu dans le Surenois magazine que Gégé donne des cours de poème ? C'est Turpentine qui te demande ça. Non, je donne pas des cours de poème, et... C'est peut-être une idée, ça. Non, mais même, je donnerai pas mes cours... Je donnerai pas comment que je fais mes poèmes, ni rien du tout. De toute façon, t'as pas le temps, t'es pas bouqué. Comme Coca-Cola, c'est top. Est-ce que tu lui donnes des cours de comique involontaire ? Oh ! On se calme, derrière, on laisse parler la personne qui pose la question. Oui, donc, c'est beaucoup plus clair. Donc, ce que je voulais te dire, c'est que si, moi, tu me donnes des cours par correspondance pour faire des poèmes. Alors, les cours par correspondance... Et donc, ce que tu n'as pas dit ? On n'entend rien à ce qu'elle dit. Non, mais c'est normal, parce que Pildar, il parle dessus. Donc, alors, les cours par... Les cours par correspondance... Manu, tu vas te taire, s'il te plaît. Donc, les cours par correspondance... Putain, ça commence à bien faire. Je vais pouvoir répondre. Quel bordel ! Oui, mais je pense que ça va être les deux débats qui vont foirer. Si les deux débats foirent, la semaine prochaine, j'en ferai qu'un, ça sera les jeux vidéo. Donc, alors, avis aux amateurs... Pour les autres... Gérard, pour revenir au débat, bravo, déjà. Et il y a Chocobo, encore, qui te demande où est-ce qu'on peut trouver ton papier peint, les poèmes de Gégé, avec tes poèmes d'écrit dessus. Alors, là, dans ces cas-là, le truc avec les poèmes de Gégé, donc, dans ces cas-là, vous achetez le best-of qu'on a fait avec Max... Le papier peint ? Non, mais le papier peint, ça n'existe pas. Si, lui, il l'a vu chez des gens. Oui, ben, il l'a peut-être vu chez des gens. Moi, j'ai vu du papier toilette à Saint-Ouen, la dernière fois. Je te jure, c'est vrai. Ouais, ben, moi, j'en ai rien à foutre. Donc, si vous voulez savoir plus... On me dit qu'il y en a qui ont vu des 4x3 sur des nationales, aussi. Non, ben, ça, c'est des conneries. À côté du Mans. Oui, c'est ça. T'as raison, toi, pucelle du Sud. Continue comme ça, et tu m'intéresses. Vas-y, cochonne. Alors, donc, pour répondre à la question quels sont, pour vous, les poèmes les plus beaux, donc, c'est sûr qu'il y a Verlaine, il y a Baudelaire, il y a... Même, je pense qu'il y a plusieurs personnes qu'on en fait. Bon, pour dire que... Herbert Léonard ? Non, Herbert Léonard, c'est un chanteur. Voyons, voyons. On ne confond pas les chanteurs. C'est un peu des poètes, les chanteurs. Non, non, non. Justement, Gérard, on avait récupéré sur Internet un petit sondage à la question quel est votre poète préféré. Donc, il y avait 43% des gens qui préfèrent Pythagore. 24% des gens préfèrent Lili à poil. Ah, très bien. Et 100% des gens détestent le poète de Suren. Ah, là, c'est clair. Non, non, mais ça, c'est des trucs confidentiels. Non, c'est ma pochette, ça, Gérard. Du calme. Non, non, mais attends. Déjà, il y a un truc que j'ai retiré. Parce que dessus, c'est marqué Lili. Alors, il est hors de question, donc tu fais gaffe à ce que tu vas lire. T'as jamais lu ses poèmes ? La tienne, toi, connard. Alors, doit-on parler plus souvent de... Doit-on parler le plus souvent de quoi ? Je n'ai pas répondu à ta question. C'est qui ? Je t'écoute. Les poètes que j'admire beaucoup, il y a par exemple un poète belge qui est très connu, c'est Hergé, qui a écrit les poèmes de Tintin et Mille. Donc, il y a Rigaud qui a une question IRC, non ? Non, la question, c'est pourquoi mon micro il ne s'éteint plus ? Ben si, il s'éteint. Alors, ça y est, Rigaud. Ça y est, ça y est, ça y est. On se calme, hein. On va essayer de continuer le... Doit-on parler plus souvent de... Attends. Doit-on... Attends, attends. Calme-toi, Gérard. On reprend un peu de sa petite... Doit-on parler plus souvent... On va parler plus souvent des poèmes à la télé. On va demander ça à Stringanfleur. C'est quoi cette obsession du doit-on, là ? Qu'est-ce que ça peut te foutre ? Si tu ne veux pas répondre, tu le dis. On prend quelqu'un d'autre à ta place parce qu'il y a 24 lignes qui sonnent. Gérard, toi, perso, rapport au doit-on, tu mets un doigt ou deux doigts ? Voilà, exactement. Et toi, est-ce qu'on te demande si tu mets deux doigts ou un doigt ? Mais non, mais moi, je te le demande. Gérard, pour revenir au débat, Gérard, pour revenir au débat, il y a Formos qui me dit que... pour les débats à la télé, il ne devrait plus s'en parler dans le Big Wheel. Ouais, mais ça, c'est pas évident. Donc, Stringanfleur ? Tu peux me refaire la question, là, parce que je suis largué. Alors, doit-on parler plus souvent des poèmes à la télé ? À la télé, non. Je pense que, franchement, les poèmes, ça reste dans le milieu de la radio. Je pense qu'il y a quand même déjà suffisamment de gens qui souffrent avec tes poèmes. Donc, il ne faut pas trop que ça se diffuse à la télé parce que sinon, tu pourrais quand même contaminer pas mal de monde. Non, mais attends, Stringanfleur, dans ces cas-là, moi, les poèmes que je fais, c'est pour tout le monde. C'est pour tous les auditeurs et les auditrices. Je sais, c'est là qu'il y a le danger, justement. C'est qu'il peut toucher tout le monde, ton poème. Non, mais ça, de toute manière, ça a touché déjà... Bon, on va... Non, non, mais attends... Oui, Sylvain, tu parles de tes conneries, là ? Allez, c'est tranquille. C'est un peu le mystère, là. C'est un peu le mystère, là. Non, parce que tu me remets à l'antenne et après, tu me remets à le standard, là. Ça va pas du tout, hein ? C'est vrai que t'es pas bon, ta fille d'art. Il fait ça à tout le monde, hein ? Ah, la menteuse. Ah, non, non, je suis pas une menteuse. Je dis toujours la vérité, hein. Alors, Poupou le mystère. Oui ? Attends, attends. Oui, Rigo ? Alors... On te demande si t'es bourré quand tu fais tes poèmes. Non. Bah non, je l'ai dit tout à l'heure. J'en ai parlé tout à l'heure. Gégé, c'est qui, ta muse ? C'est Sandy, ta muse, ou pas ? Non, Gégé, c'est Mumus tout seul. Ah, est-ce que Sandy, c'est ta muse ? C'est ton égérie ? Est-ce que c'est là que tu trouves ton expiration, par exemple ? C'est qui qui parle, là ? C'est String en fleurs. Bon, alors, String en fleurs, pour l'instant, tu viens de répondre, tu laisses parler, les gens. Donc, Poupou le mystère. Poupou le mystère. Eh oui ! Elle est là ! Gérard, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Elle est là, elle est là ! Vous m'entendez, là ? Elle est là, elle est là ! Elle est là, c'est bon, Gérard, reviens ! Bon, alors, Gérard, c'est absenté du studio, je ne sais pas pourquoi. C'est pareil, il est parti dans le... Je sais, je vais te répondre ! Attends, c'est pas la peine, Poupou le mystère, il est parti. Il va revenir, là. Poupou le mystère, t'as pas un poème pour Gérard, pour le faire revenir ? Bah, écoute, je vais essayer de trouver dans mes affaires, et puis je vais le lire par... Allez, charge bien. Gérard, Poupou le mystère, elle veut te lire un poème. Et si, pas bien, il va te lire un poème. Tiens, je t'en prie. Non, mais là, il n'arrête pas de... Les gens sont en art, comme ça, ça va pas. Allô ? Là, moi, c'est terminé. Qu'est-ce qu'il s'est passé ? J'en comprends rien, là. C'est Caliméron le mystère. Allô ? T'es là, Poupou le mystère, Poupou le mystère, t'es là. Oui, t'es là, sans doute. Vas-y, balance. Allô, l'autruche ? Bah, il m'écoute, j'ai le jeu, ou pas ? J'écoute ! Donc, c'était quoi, déjà, la question ? Alors, doit-on... Non, mais attends, ça va lâcher encore pas le dégât. Mais non, il y a une basse cour derrière. Elle suit pas, Gérard. Non, mais moi, c'est simple, il est 2h40, je pense que je vais arrêter. Ça va aller plus vite, hein. Que certains auditeurs se calment de temps en temps, que ça fasse pas masse et que tout le monde s'y mette, quoi. Alors, Poupou le mystère, tu veux répondre ? Donc, c'est, doit-on parler plus souvent des poèmes, je sais pas quoi, là ? Ouais, à la télé. Ouais, bah, je pense qu'on devrait, sans doute, consacrer des reportages à propos des poèmes. Des poèmes. Et essayer de parler de ça, parce que c'est vrai qu'on n'en parle pas assez à la télé. Et donc, voilà. Moi, je pense qu'on devrait faire des reportages, quoi. D'accord. Régo ? Oui ? Attends, excuse-moi, Poupou le mystère, il y a une question hier, c'est ? Oui, on te demande combien de poèmes tu as écrits dans ta vie ? Alors... C'est toujours le même. Donc, les poèmes que j'ai écrits dans ma vie, donc, à l'heure actuelle, il y en a plus de 200. Oh, quand même. Alors... 200 quoi ? 200 feuilles ? Non, non, mais attends, toi, t'éteins ton micro, parce que c'est moi qui ai la feuille, maintenant. Bah, je te pose une question, Gérard. Ouais, non, mais moi, c'est 200 poèmes que j'ai sur des feuilles. Alors, à la question, quel est votre poète ? Après, vous allez... Puis, celle du Sud ? Oui. Verlaine ? Ouais. Potiron du sexe ? Oui. Et Santa Belgica, donc, n'ayez crainte, je vois... Vous allez répondre à... Je vais répondre à la question, je vais quand même lire un petit sondage, là, que j'ai sur les yeux. Il y en a un, par contre. Celui-là, il va être vite lu. Alors... Ok, à quel poète aimeriez-vous ressembler ? Merde. C'est Gérard. Celui-là... C'est à la question, quel est votre poète préféré ? Tarié ? Non, mais ça, j'ai déjà lu. On l'a déjà lu, celui-là. Non, non, non, non, il a lu la haute. Non, il a lu celui-là, tu t'es énervé à cause de ça, tu ne te rappelles même plus pourquoi tu... Alors, à la question... Que verriez-vous comme thème de poésie ? Donc, 20% des gens sont aveugles et n'en font que d'écouter. 25% des gens verraient mieux avec des lunettes. 37% des gens ne voient pas le rapport. Et 43% des gens n'aiment pas la question. Donc, des trucs comme ça, moi, ce n'est même plus la peine qu'on fasse des débats. Ça ne sert à rien d'essayer de jouer au con comme ça, à fil d'art. Allez bien, tu vois, tu pourrais répéter la dernière question. Pucelle du Sud. Oui. Donc, pour toi. C'était quoi déjà ? Parce qu'on a beaucoup parlé, là. Alors, doit-on parler plus souvent des poèmes à la télé ? Non, non, je pense que c'est bien. C'est bien que les gens ignorent que les poèmes existent. Comme ça, ils ne vont pas évoluer culturellement. Et puis, ça ne fera pas des intellectuels. Verlaine ? Oui, je pense qu'on amènerait une transaction translative si on parlait plus des poèmes à la télévision. Ce qui permettrait de... De plus voir en quoi est constitué le poème. Et ça revaloriserait l'ensemble du monde de la poésie. Ouais. Potiron du sexe. Il est parti, il est parti, il est parti. Ah, il est parti. Alors, Santa Belgica. Ben oui, écoute, Gérard, puisque je représente le public belge, il faut savoir qu'à la télévision belge, il y a énormément d'émissions de poésie. Ça passe toute la journée avec des musiques de violon. C'est un petit peu chiant. D'accord. Merci, Fildor, de le couper quand... Ah, il est là, il est là. C'est tout ce que tu avais à me dire ? Santa Belgica. Oui. J'ai juste dit que c'était un petit peu chiant, et c'est tout. Ah, d'accord. Là, je ne comprends pas, parce que les trois quarts du temps, ça saute. Je me demande ce qui se passe. Pourquoi ? Les poèmes sautent. Non, non, non, mais la ligne saute. Ah, ce sont des poèmes en octosyllabes, alors. C'est quoi ce bordel, là ? Je ne sais pas. Tu as bien vu, je ne touche à rien. Si tu veux que je te dise... Oui, je ne sais pas d'où ça vient, moi. Putain, mais Léo ! Vous savez, ça veut dire quoi, là, ce bordel ? Je ne sais pas. Putain, mais ce n'est pas possible. Depuis quelle date existent les poèmes ? On va demander à Stringham Pleur. Gérard, Gérard, Gérard ! Tu as ta gueule ! Va te faire enculer, connard ! Oh là là, ça dégénère. Ouais, Gérard ? Stringham Pleur. Ouais, bah écoute, les poèmes, je pense que ça remonte à l'aube des temps. Tu peux préciser ? Bah, je ne sais pas, l'Antiquité, la Renaissance... Le Moyen-Âge, la Grèce antique, tout ça. Tout ça, il y avait déjà les plus grands poètes à cette époque-là. D'accord. On n'a pas entendu que tu arrives, heureusement, d'ailleurs, pour avoir des grands poètes, quand même. Non, mais attends, moi, je les ai fait sur l'antenne de Paine Radio depuis 93. Non, mais je sais, mais heureusement qu'on n'a pas attendu et qu'il y avait des Platons et des Dioscures et tout ça avant toi, parce que... Voilà, quoi. Attends, Marc. Si ça ne te plaît pas, ce que je fais comme poème... Non, mais attends, écoute-moi... Écoute-moi, si ça ne te plaît pas, dans ce cas-là, tu changes de radio, c'est tout, ça va plus vite. Mais si, Gérard, je te dis que tu es le digne représentant de la lignée des pédagogues, c'est plutôt un compliment, je veux dire, arrête. Bon, Poupou le mystère. Bah, écoute, moi, ce que je peux te dire, c'est que les poèmes existent déjà depuis Jésus-Christ. Ah, bah, depuis 1900, hein, OK ? Non, même avant 1900. Ah, bon ? Parce que Jésus-Christ, il est né avant 1900. Ouais. Donc, c'est un cas... Mais moi, je suis bien né avant Jésus-Christ. Ouais, mais toi, tu n'es pas Jésus-Christ. Non, mais je suis qui ? Je m'excuse, mais en fait, ça existe depuis que Jésus est écrit. Oh, on se tait derrière, on la laisse parler. Donc, tu disais, toi ? Ouais, donc, je pense que les poèmes ont été créés à l'époque de Jésus-Christ. Et alors, moi, je suis bien né avant Jésus-Christ. Non, t'es né après... Tu ne comprends pas ce que je veux te dire, mais... Non, non, mais de toute manière, je ne comprends pas le français. Ah, bah, si ce n'est pas qui le dit, alors, tu le reconnais, eh ben... Puis, celle du Sud. Ouais. Bah, les poèmes, ça date depuis que les gens écrivent. Hum. On a commencé par ça, en fait. D'accord. On a commencé par l'écriture cunéiforme, et ils ont fait des poèmes, tout de suite, pour séduire leur belle pour les sodomiser. Ouais, bah, de toute manière, on n'a pas besoin de séduire sa belle pour la sodomiser, comme tu dis si bien. Mais, à l'époque, si. Ouais, bah, peut-être. Mais, je ne pense pas, à mon avis. Euh, Verlaine ? Oui, bah, moi, je pense que les poèmes existent depuis très, très longtemps, quand même. Je ne sais pas exactement depuis quand. Par contre, je suis sûr que la poésie, elle est apparue il y a trois ou quatre ans avec toi. D'une camille téléphonique assurée, la vraie poésie, la pure. Bah, disons, ça m'est venu comme ça, d'en faire. Et puis, maintenant, ça ne m'empêche pas de continuer de les faire. Non, c'est sûr. C'est sûr que... Attends, Verlaine. C'est sûr qu'au début, tout le monde me disait, bon, bah, que j'en repasse. Bon, c'est... Tout le monde, même Max, m'a demandé à ce que j'en repasse. Oui, vas-y, continue, je t'écoute. Donc, bah, là, il y en a... Il y en a quatre pour ce soir, donc on ne va pas faire les temps sereins, non ? Je le sais bien. Et d'ailleurs, Gérard, si tu pouvais me permettre, moi, j'en ai fait un petit. J'aimerais bien que tu l'écoutes à la fin, à la fin, avec les tiens, pour me dire ce que tu en penses plus tard. Non, mais de toute manière, tu vas lire le tien, toi, en premier. D'accord. Et moi, je lirai les quatre miens. Maintenant, bon, bah, écoute, je vais te le lire maintenant. Bah, vas-y, vas-y, fais-en un tout de suite. Les gens de l'IRC, ils ne veulent pas t'entendre. Ah, c'est comme ça ? Enfin ! Ah, putain ! Mais, je... Arrête ! Gérard ! Carrel ! On l'enlève, là ! Ah, il copie, là ! Arrête de taper ! Arrête de taper avec le téléphone ! Ah, bah, voilà, tu l'as trouvé ! Ah, bah, voilà, tu l'as trouvé ! Alors, il est où ? Eh, tu viens chez moi après, Gérard ! C'est vachement bien ! Bon, Gérard, tu fais quoi, là, oh ? Alors ? Eh, tu l'as coupé ! Putain, t'es vraiment un bâtard, toi ! Ah, mais c'est vraiment très beau, tes poèmes, hein ! Eh, tu viens chez moi après, Gérard ! Ta gueule, toi, va te faire foutre ! Donc, de toute manière, on ne va pas continuer, on va s'arrêter. Eh, tu viens chez moi après, Gérard ! Va te faire foutre, toi ! Vas-y, enchaîne, enchaîne, Gérard ! Non, non, mais, de toute manière, on arrête, là ! Oh, non, non, non ! On continue, on continue, là ! Je n'ai pas attendu tout ce temps pour rire ! Gérard, tu me le gères ! Allez, je te fais une petite surprise, pour les dix dernières minutes, j'accueille Couscous à la place de Poitiron du Sexe. Bonsoir, Gérard ! Bonsoir, à tous ! Salut, Couscous ! Bonsoir ! Bon, alors, Couscous, depuis quelle date existent les poèmes ? Ah, moi, je pense que ça existe depuis que les poétons existaient, disons, dans les années 1900. Ah, ben, 1900, c'est la date que j'ai lue. Hum ? Après Jésus-Christ. Bon, Verlaine, tu fermes ta gueule ! Ah, c'est pas Verlaine, là, hein ? Eh, s'il crie, c'est à cause des clous, hein ! Ah, c'est bon, Gérard, rentre chez toi ! Allô, c'est Couscous, là ! Ouais, Couscous ! Qu'est-ce qu'il y a ? Qu'est-ce qu'il se passe ? Allô, c'est Merguez ! Putain, Fuldar... Gérard, pour revenir au débat sur l'IRC, il y a D-Light qui te demande si, comme lui, tu es fan du poète grec Sergei Boubka. Je connais pas. Pourtant, il a écrit de super trucs ! Il est génial ! Il est grand, il a un grand grand stylo ! Donc, il est 2h48, 2h49, ça y est ? Oh oui, oh oui, oh oui ! Allô, qu'est-ce qu'il se passe ? Allô, c'est quoi ce bordel ? Allô ? Oui, allô, Fede, bonsoir, t'es au standard ? Ouais, bonsoir, c'est Couscous, ça va pas ? Bon, Gérard, pour continuer le débat, vu qu'apparemment, tu veux pas continuer, moi, j'ai des questions à te poser. Il y a Izen sur l'IRC qui te demande lequel de tes poèmes aimes-tu le plus ? Ah, c'est une bonne question, ça. Non, ça, justement, je l'ai pas là, et j'en ai fait quatre nouveaux pour éviter de changer. Donc, je vais en faire un, et puis après, je pense qu'on va se mettre... Non, on se met un disque... Non, on se met pas de disque, Gérard. On fera la conclusion... On finit dans dix minutes, donc... On fera une conclusion, donc... Donc, alors... T'as pas répondu, Gérard, en fait, c'est lequel de tes poèmes que t'aimes le plus ? Le mieux que j'aime, c'est... Je voudrais te dire « I love you », mais tu écoutes ton « What man ». C'est celui-là qui me touche le plus, et que tout le monde a apprécié. Je sais, si je peux me permettre, Gérard, j'étais pas encore ici, mais je t'écoutais déjà, et il y en avait un où... Je me souviens d'une phrase, en fait, mais ça faisait « J'aimerais te tenir la main sur le dos d'une vache ». Non. Et je pense que dans ce poème-là, il m'avait captivé. Non, je vais te dire une chose que là, tu vois... Non, je décroche, je m'en souviens. Non, mais attends, Manu, là, j'ai jamais été lire ce que tu viens d'annoncer, tu peux redire la phrase ? « J'aimerais te tenir la main sur le dos d'une vache ». Non. Ah si ? Non. Témoin. Non, non, non, non, non. Alors là, je peux te dire une chose que j'ai jamais été lire ça à l'antenne. Bon, c'est pas grave. C'était dans un poème. C'est pas grave, c'est pas grave. Non, mais attends, il y a un nouvel auditeur à la place de Verlaine que t'as viré, on a son copain Rambo. Non, mais c'est pas la peine, Manu, c'est de l'occlusion. Salut Rambo. Donc, alors, on va... Allô, on m'entend ? Salut Rambo. Allô ? Ouais, c'est Rambo, là. T'es bonne, Gérard. Elle mesure 1 mètre pour 400 kilos. C'est le Sandy ! Eh, Sandy, attends, merde ! Ok ? Sandy ! Voilà, alors... Allô ? Bon, ça y est, pour l'instant, je veux lire les poèmes. Manu, tu mets le double son, s'il te plaît. On m'entend bien, là, je suis au Vietnam, là. J'entends, j'entends. Gérard, on a Rambo au Vietnam, donc tu peux... Bah, j'en ai rien à poutre. C'est un grand poème, Rambo. On peut me perdre parce que je suis sur une valise satellite, hein. Putain, mais il va fermer sa gueule, lui. Merci. Alors, ça s'intitule Mon bébé. On le fait tout de suite ? Oui, on les paie maintenant. Bon, bah, on y va, on y va. On devrait plutôt peut-être faire la conclusion, ensuite tes poèmes. Non. Je pense que c'est mieux, quoi. Non, je paie. Non, mais vraiment. Non, mais c'est pas toi qui commandes, c'est moi. Non, mais comme ça, il fait les poèmes avec les auditeurs, comme ça, c'est cool. Non, mais c'est pas... C'était juste une suggestion, quoi. Non, mais de toute manière, on va faire... De toute façon, Max, il vient de me dire, Max, on fait la conclusion et après, on fait les poèmes. Voilà, tu vois, c'est pour ça que je te dis ça. Sinon, je te le dirai pas, on est venus me le dire. On est venus me le dire. Tu m'éteins ton micro et tu te la fermes. Fais la conclusion ! Non. Conclusion, d'abord, si, si, si. Mon bébé, fais-moi l'amour. Non, sérieux. Putain, mais c'est moi qui commande le jeudi, d'accord ? Bah, tu verras avec Max après, hein. C'est toi qui vois, hein. Mais bon, conclusion d'abord, quoi. Non. Bon, s'éclate-moi les fesses. Non, mais quand vous aurez fini de commander... C'est pas nous. Bon, Rigaud, tu peux me donner le nom de combien de personnes ? On a perdu, là. Si tu fais pas ta conclusion tout de suite, ils s'en vont, les gens. On a perdu 1200 personnes, là. Oh ! Non, non, non, non, ça, j'y crois pas trop, non plus, là-dedans. Bah, tu verras. Bon, donc, mon bébé. Mon bébé, fais-moi l'amour dans un camion. Manu, tu fermes ta gueule ! Non, mais, bah, je sais pas ce que t'en penses, Phil, mais moi, je pense que la conclusion, elle serait la bienvenue. Bon, alors, vous me faites chier, il y aura pas de poème ce soir, c'est tout. On fait conclusion et voir. Ok, poème d'abord, ok. Non, non, non, non, conclusion. Conclusion, on va demander à Serignan-Fleur, comme ça, ça va aller plus vite. Mais non, mais attends ! C'est qui qui commande le jeudi ? C'est moi ? Non, c'est moi. C'est toi qui ferme ta gueule ! T'as compris ? Tu fermes ta gueule ! Tu fermes ta gueule ! T'es bon, Gérard. Ok ? Là ! Maintenant, c'est moi qui commande. Alors, conclusion, il y aura pas de poème. Bah, moi, pourquoi il y a pas de poème ? Bah, ça, c'est pas à eux de commander, c'est à moi. Pourquoi il y aurait pas de poème ? Donc, moi, je fais les poèmes et je fais les conclusions derrière. Bah, tu crois pas que ça serait peut-être plus intelligent de faire la con ? Non. Non, parce que t'as tous les auditeurs qui vont t'alentir, ils vont pas arrêter de t'emmerder. Et après, tu vas gueuler. Tu fais ta conclusion, tu fais vite une torchade en 10 secondes et tu prends 5 minutes de ton temps, entre vos 55 et l'heure, pour faire tes 4 poèmes tranquilles. Alors, string en pleurs. Ah, c'est quand même inadmissible, ça. Ta gueule à toi ! On te l'a vu. Ta gueule ! Ouais, GG. String en pleurs, conclusion. Oui, tu m'entends, là ? Oui. Ok, donc, bah, je voulais te dire en conclusion que quand je suis dans ma Mercedes et que je suis à fond la caisse, je m'éclate sur un pylône et que je me fracasse la colonne. Quand il y a du verglas, non, je ne déraperai pas sous le pont de l'Allemagne. Voilà, c'était pour toi, Gérard. Gérard, pourquoi tu vas taper Fildar tout le temps ? Il était beau, son poème. Allez, à suivre. Poupou le mystère. Poupou le mystère. Moi, ce que j'ai à dire à GG, c'est que, là, franchement, je suis vachement dégoûtée parce que, là, les débats se passent très mal. On lui pose des questions, il répond pas correctement en question. C'est vrai. Et, là, je comprends pas, là. Pour moi, c'était nul. Merci, au revoir. Après, c'est... Attends, merci, au revoir. Attends, c'est toi qui commande depuis quand ? Pourquoi tu coupes saucisson à l'ail ? Poupou le mystère. Poussel du Sud. Poupou le mystère. Ouais, non, mais je suis là. Tu restes là parce que tu me diras ce que tu penses des quatre poèmes. Non, mais dépêche-toi parce que j'ai une grosse envie d'aller aux toilettes. C'est que ça contient... Allez, Poussel du Sud. Bon, Poussel du Sud. Moi, je voudrais te faire une conclusion en faisant un poème. Gérard est optimiste rien ne lui résiste car il a des kystes. Ok, merci. Verlaine ? Non, c'est Rambo. Rambo ? Allô ? Allô ? Rambo, ouais. Ouais. Vous m'entendez, là ? Ah, tu fais ta conclusion ! Gérard, il est au Vietnam. Attends, il y a un décalage. Non, je suis au Cambodge, j'ai changé. Ah. Ouais, bientôt, tu seras à Paris. Eh, il va vite, ton hélico. Je voulais juste dire qu'au niveau des poèmes, bon, je te laisse parce qu'il y a des Khmer rouges. Il dégage. Hop. Santa Belgica. Oui, Gérard, un instant, parce que j'étais en pleine création. Alors, eh bien, c'est très simple. Moi, mon père spirituel, c'est un certain J.Suren, qui est un auteur contemporain, plutôt temporain, d'ailleurs. Et je trouve qu'il était nécessaire de présenter, avec le maximum de rigueur, ce trésor de mots français qui est classé selon l'homophonie des syllabtoniques. D'accord, d'accord. OK, on a compris. Hop. Euh, couscous ? Ouais, Gérard, il n'y a pas de problème. Mais le débat, il était pas mal. Sauf que ça gueule un petit peu trop, mais il n'y a pas de problème. Quand tu veux, tu viens à la maison. OK, j'y pense. Toi, Manu, je vais t'éclater. Qu'est-ce que j'ai fait ? Toi aussi, je pense que tu vas perdre comme Filda. J'ai rien fait ? Je pense que... Tout à l'heure, on va discuter. Hein ? Rigo, combien sur l'Internet ? On a perdu un peu. On est quand même à 3000 et quelques. Je demande vite fait. 3000 combien, les gars ? 3125. C'est pas mal. On est à 4500. Bah ouais, mais je t'ai dit, si tu faisais pas ta conclusion tout de suite, ils partaient, les gens, ils sont partis. Non, mais il y en a... Bon, euh... Regarde, ben regarde, regarde. Tu vois où, un son, là ? Là, tu commences à m'énerver. Ça ? Vas-y, écoute. Attends, me prends pas pour un con. Ouais, c'est pareil. Ça, c'est Olivier. Voilà, donc c'est pas moi. Bon, ben, y aura pas de poème. Y a pas de double son, là ! Non, non, attends, faut pas déconner. Il te reste 3 minutes, dépêche-toi. Y a rien, là. Allez, allez, allez. Poupou le mystère, elle est toujours là ? Ouais. Non, mais toi, t'es... Non, mais elle est là ! Je suis là. T'es là, Poupou le mystère ? Ouais. Poupou le mystère, t'es là ? Poupou le mystère ! Oui, je suis là. Non, c'est pas toi. Mais si ! Non, c'est pas elle. J'ai envie de faire pipi. Attends, c'est un trap. T'as un trap, ça, attends. Me fais pas chier, toi. Pêche-toi, j'ai envie de faire pipi. Voilà, bravo. Bon, Gérard, y a quand même sur IRC une conclusion de paradoxe. Il dit que... T'as cassé, regarde ! Oh, il a pété le standard. Bon, je vais refaire ma conclusion de IRC, de paradoxe. Conclusion, les poèmes de Gégé sont aussi nasses que les surprises Kinder, que le dernier top album d'André Verschuren, et que les Feux de l'Amour, et que Témoin numéro 1, et que Skyro très unis. Alors là, André Verschuren, c'est pas moi. Bon, Manu, ça suffit, s'il te plaît ! Ça suffit, maintenant ! Vous faites que du boulot de naze, là ! On fout, maintenant ! Pour les émissions de demain, comment je vais faire, moi, à cause de toi ? Bah, attends, tu t'en prends après lui ? Non, non, c'est toi qui a cassé le truc en baissant le truc, en cassant. Bah, vas-y, maintenant, Gérard, vas-y. Donc, si elle écoute Poupou le Mister, c'est pour elle, les quatre qui sont dédiés. Donc, mon bébé. Mon bébé, fais-moi l'amour dans un camion. Mon bébé, fais-moi l'amour sur une voiture. Mon bébé, fais-moi l'amour dans une niche. Celui qui s'amuse avec les micros va fermer sa gueule et vite. D'accord ? Mon bébé, fais-moi l'amour sur un Magnum. Mon bébé, fais-moi l'amour sur mon Godot. Godzilla. Mon bébé, fais-moi l'amour sur un Saint-Pangé. Mon bébé, fais-moi l'amour sur une toupie. Mon bébé, fais-moi l'amour quand tu as tes règles. Mon bébé, fais-moi l'amour sur un Bambi. Mon bébé, fais-moi l'amour sur une girafe. Voilà, le premier. Le deuxième. Bravo. Le deuxième, aimer. Alors, je voudrais dire je t'aime sur une carte orange. Je voudrais te dire je t'aime sur un trèfle. Je voudrais te dire... Je t'aime sur un compresseur. Je voudrais te dire je t'aime quand ça ne va pas. Je voudrais te dire je t'aime sur un livre. Je voudrais te dire je t'aime sur un cheval. Je voudrais te dire je t'aime sur une cornemuse. Je voudrais te dire je t'aime sur un dalmatien. Je voudrais te dire je t'aime sur un concombre. Je voudrais te dire je t'aime sur un corbeau. Troisième, amour. Mon amour, je voudrais te faire des caresses sur une chouette. Mon amour, je voudrais te faire des caresses sur une cigale. Mon amour, je voudrais te faire des caresses sur un cormorant. Mon amour, je voudrais te faire des caresses sur un nuage. Gérard, excuse-moi, c'est quoi un cormorant ? Ta gueule. C'est quoi un nuage ? Va te faire foutre, toi. Mon amour, je voudrais te dire je t'aime. Je voudrais te faire des caresses sur une... Cigogne. Mon amour, je voudrais te faire des caresses dans l'espace. Mon amour, je voudrais te faire des caresses sur un chevreuil. Mon amour, je voudrais te faire des caresses sur une chicorée. Mon amour, je voudrais te faire des caresses sur un chouca. Mon amour, je voudrais te faire des caresses sur un chromosome. Le dernier. Il s'intitule poulette. Ma poulette, donne-moi ton amour sur un mini-tel. Ma poulette, donne-moi ton cœur sur une platine. Ça, je pense, en parlant de platine, c'est... C'est au DJ. Au DJ. Il faut dire quand même. Donc, ma poulette, donne-moi ton cœur sur un briquet. Ma poulette, donne-moi ton cœur sur une carotte. Sur une carotte. Ma poulette. Donne-moi ton cœur sur un fax. Ma poulette, donne-moi ton cœur sur un radis. Ma poulette, donne-moi ton... Donne-moi ton cœur sur un volcan. Pardon. Oh, le déculasse. Ma poulette, donne-moi ton cœur sur une assiette. Ma poulette, donne-moi ton cœur sur un livre. Et ma poulette, donne-moi ton cœur quand je te dis grenouille. Voilà, terminé. Point final à la ligne. Et on se retrouve la semaine prochaine. Le thème du débat portera sur les jeux vidéo. Et c'est tout. Gérard, quand tu dis donne-moi ton cœur sur un radis, tu parlais pour les jardiniers ? Pierre Pout, à toi, c'est pas toi que je m'adresse. Et pour faire plaisir à Sandy, à moins que Rigaud, il y a peut-être une question inversée. Oui, conclusion, la poésie est écrite par des vieux frustrés qui devraient se pendre pour faire un minimum d'argent. Moralité, t'en vas à la cruche à l'eau qu'à la fin, Gérard nous les brise. Eh ben, c'est dommage. Très beau, dit-on. C'est dommage parce que... Les... Il y a une autre question. Une autre conclusion de Turpentine. Le débat n'avait ni queue ni tête comme toi. Eh ben, c'est bien. Eh donc... Ça s'est plutôt bien passé. Ouais, ben... Non, non, mais ce que toi t'as cru, mais de l'autre côté, je peux t'assurer que c'était vraiment bien. Donc maintenant, est-ce qu'on peut avoir... Fildar était quand même meilleur. Vas-y, passe-la nous. Poupou le mystère. S'il te plaît. Poupou le mystère. Poupou le mystère. Putain, Fildor. C'est lui. C'est toi, Gérard, quand t'as pété le scandale. Non, non, non, non, non. Putain. Qu'est-ce que tu fais, là ? Allô ? Elle est où ? Ben... On repasse l'heure directe. Oh là là, là, là, là, là. T'as bêté vraiment. Putain, mais c'est... Dégage, dégage. Viens. Mais qu'est-ce que tu fais, Gérard ? Viens de là. Mais quoi ? C'est bon, je pourrais se faire le coin. Viens, viens. Je veux te voir. Allez, rappelle l'heure directe, s'il te plaît. Attends, je vais en numéro, si tu veux. Non, non, je te le permets. Ça va, c'est pas toi. Viens, viens, viens. Bon. Il sait même pas son numéro. Oh là là, là, là, là. Dépêche-toi, fais vite. Il reste deux minutes. Oh là là, là, là, là. Hop. C'est long, c'est long. Mais t'as fait deux fois le zéro. T'as pas besoin. Y a pas besoin, oui. Oh là là. Dégage, je vais le faire. Laisse-moi faire. Qu'est-ce qu'il se passe ? Ben, il arrive pas à faire son numéro au téléphone, le Gérard. Allez, dépêche-toi. On va pas lui dire, parce qu'il entend même pas. Si, vas-y. Y a Dylan qui dit qu'il a trouvé... Il a trouvé que Gérard avait réagi avec poésie ce soir. C'était très romantique. Merci, Gégé, pour cet intense moment d'extase littéraire. Sergueï Boubka n'aurait pas fait mieux. Vas-y, Manu. Vas-y. Allô ? Salut. Viens, t'es un peu le Messire. Putain, non, tu es... Oh là là. Mais j'ai rien fait ! Arrête ! Arrête, Gérard ! Ça va pas, Gérard, arrête ! Mais elle est là ! Mais qu'est-ce que t'as fait ? T'as fait la mauvaise ligne, elle est là. Mais qu'est-ce qu'il se passe, Gégé ? Ben alors ? Qu'est-ce que ça sert de t'énerver, Gérard ? Bon, pour le Messire. Oui ? Ben, c'est moi. C'est moi. Alors ? Alors, qu'est-ce que t'en as pensé ? Alors ? J'ai rien touché. Bon, dégage, Manu. Je prends la banque. Dégage. Ben, si tu veux, vas-y. Casse-toi, casse-toi. Ben, vas-y, vas-y, fais ton malin. Fais ton malin. Vas-y, tu vas bien me faire rigoler. On va dire que c'est l'autre, là-bas. Oh l'enculé, là. Oh la pisse de pute. Gérard, il est parti. Il faut peut-être expliquer aux gens. Je ne capte rien. L'enculé est parti. En fait... Bon, on va couper ça. Bon, alors, Gérard, qu'est-ce qu'il s'est passé ? Il lui a raccroché au nez, fil d'arbre ? Un machin mystère ? Bon, on recommence. Bon, allez, refais le numéro, mais vite, Gérard. Vite. Attends, laisse allumer la micro. Allez, Gégé. Vas-y, Gérard. Ah, il est parti se planquer, tu m'étonnes. Ah, putain. C'est occupé ? Ouais. Ouais, maintenant, ça, c'est un occupé. Elle ne répondra plus. Putain, putain. Oh là là. Putain, putain. Bon, sinon, moi, j'ai trouvé ça bien, quand même, tes débats, ce soir, Gérard. Franchement. Moi aussi, ouais. Putain, cause de putain. C'est dommage qu'on n'ait pas pu aller plus loin dans les jeux vidéo, mais... Putain. Dans les jeux vidéo, dans les jeux télé. Putain. Gérard, tu... Qu'est-ce qu'il y a ? Gérard, reviens ! Gérard ! Il est parti. Ils sont partis en courant, dans le couloir. Bon. Ben, reviens. C'était débat, on fait quoi, avec Rigaud, nous ? On n'a pas de micro pour arriver dans le couloir. Les gens, ils nous écoutent. Bon, ça va, Rigaud, c'était bien le Cosmic Laser, cet après-midi, quand même. C'était cool. C'était bien marré. Non, mais moi, je vais lire un petit peu l'IRC, alors... Il n'y a plus personne, là, à l'antenne, là ? Allô, l'IRC ? Gérard, fais quelque chose, là-dedans, on est en train de... Vas-y, tu mets la chanson, j'essaie de... Ma poulette, j'y... T'as eu une course poursuite dans les locaux de la radio, il a failli se faire déchirer la gueule. Dégage, toi ! Non, Gérard, maintenant, reste là, Gérard ! Arrête, c'est bon ! Let's groove tonight. Bon, finis là, on arrête là, c'est bon, on s'en fout, tu lui demandes en antenne, on lui demande en direct ? Vas-y. Il compose le numéro. Voilà, c'est bon. Je m'en occupe, je m'en occupe, vas-y, va te mettre en face. Allez. C'est là, là ? Vas-y, Gérard. Allez, on y va. Vas-y, mets à ta place ! Reprends-moi mon casque, là. Je la prends, là. Oh là là, t'es relou, Gérard. C'est tout au standard, Manu. Allô ? Oui ? Euh, bébé ? Ouais ? Bon, qu'est-ce que t'en as pensé ? Comment ? Qu'est-ce que t'en as pensé des quatre poèmes ? Ben, écoute, ça m'a touché énormément, hein. Ouais, ben, t'inquiète pas, tu étais encore plus touché. Parce que... Putain, qu'est-ce que t'as fait, encore ? T'es là ? Au fil d'art ! Putain, mais vous me faites chier, allez, au fil d'art ! Hop, on... Non, c'est le truc qu'elle fait, là. C'est le fil d'art qui a encore fait ça. Là, le truc, le potard qu'elle fait. Bon, pour... Là ? Ouais. Faites la fête, la grosse ! Et voilà, c'est dédié pour samedi, et on se retrouve la semaine prochaine. Sur Femme Radio ! Sur Femme Radio, et demain, Max, le Star System, à partir de 22h ! Wouhou ! C'est le café ! == Le débat sur l'argent == === Contexte === Ce débat occupe une place particulière dans la compréhension de cette émission. Sa clôture illutre un point clé, souvent débattu, quant à l'innocence de Gérard de Suresne sur le système autour de lui et de son émission. En effet, en din d'émission, alors qu'il identifie, très clairement, que les titres qu'il lit sont faux et loufoques, il veut lire les vrais, il n'y arrive pas. Il revient alors aux titres écrits par l'équipe. C'est une preuve absolue qu'il est parfaitement conscient de ce qu'il se passe, mais s'en acquitte de bonne grâce parce qu'il sait ce qu'il en tire, malgré le prix à payer à son niveau. Prix à relativier quand on sait l'apport de l'émission dans sa vie et que, cette même vie, il la réécrit souvent au gré d'une mémoire authentiquement traumatique. === Les personnages === === Transcription === Les débats, pas de radio et pas d'insultes de Gérard. Et voilà, donc vous venez d'écouter Manu s'il te plaît. C'est Roudoudou avec Peace and Tranquility to Earth. Et voilà, il est 0h32, donc bienvenue sur VN Radio. Vous pouvez nous appeler au 0875 000 et 0803 085 000. Et toujours sur l'IRC www.fr, il y a Rigaud qui vous attend. Et Rigaud, si tu pouvais nous dire à peu près combien qu'on est. Je suis là, bonsoir à tous. On a dépassé les 2000 déjà, ça va très vite ce soir. On est à 2543,1, c'est pas mal. C'est beau ce que tu fais Gérard, c'est beau. Donc j'espère que ça ne va pas faire comme la semaine dernière. On s'échappe, la semaine dernière on était à combien Rigaud à peu près ? Je ne sais plus, mais on n'avait pas fait beaucoup la semaine dernière. Je crois qu'on était des... Descendus à 3005. Oui, mais ça va aller ce soir. Donc à un moment donné, ça va aller. Ça va aller, ça va aller Gérard. On espère. Ça va aller. Un fil d'art. Ça va aller Gérard. Ça va aller, on fait le débat. On y va Gérard, j'arrive. On y va. Bah oui, mais on y va. Ton premier débat portera sur quoi Gérard ? Sur l'argent. Sur l'argent. Alors la première question donc... Vas-y, pose la première question pour les auditeurs qui nous écoutent déjà. Alors pour vous, l'argent, fait-il votre bonheur ? Donc voilà, et donc on va accueillir... Merci fil d'art. On va accueillir des gens, oui. Donc on va accueillir Tony. Tony, bonsoir. Bonsoir Gégé, bonsoir Manu. Bonsoir Tony. Bonsoir fil d'art. Salut. Bonsoir. Salut Tony. Non, non mais... Tu vois, il y a un problème fil d'art. Ouais. C'est que Tony, il faudrait que... Permettez qu'on passe toutes les semaines. Non mais j'ai des choses à dire, c'est pour ça. Non, non mais attends. 103.3. Déjà 101. Non mais je me suis trompé parce que tu vois, j'ai rayé là. C'est pas ça. Ouais, ouais, c'est 101. 101.9. 101.9. 101.9. Tony, tu ne commences pas, d'accord ? Ok. La suite, Tabouret, bonjour. Alors Tabouret. Salut Gérard. 10 demandes d'Axe, on peut écouter Fun Radio sur 95.3. Ouais, c'est ça. Donc Sandwich, 23 ans de tour. Bonsoir Gégé. 102.8. Oui, c'est ça. Alors, tu me fais bouder, 10 demandes. Bonsoir Gérard. Tu me fais bander. Ouais, bander. Ouais, ben, non mais tu vois, Fildar. Qu'est-ce qu'il y a ? Non, non, attends, Fildar. Là, il y a... Oh, qui c'est qui a un portable ? C'est Sandwich, mais elle n'a que ça. Ah non. Non, parce que les portables, c'est pitoyable. Tony, pour l'instant, tu t'écrases. Non, mais elle n'a que ça parce que chez elle, elle n'a pas le télécom. Ah ouais, non mais attends. Moi, dans ce cas-là, moi, je ne fais pas des débats avec des portables. C'était bien prévu. Parce que regarde, là, déjà... Ça commence. Je vais essayer de la rappeler, on va voir si la ligne passe mieux, OK ? Et puis tu la reprends dans deux minutes. Alors, tu me fais... Bon, allez, tu ne commences pas, d'accord ? Tu me fais bander. Oui, je suis là. Donc, on peut écouter, donc, à Ifto, 96.9. Ah, tu me confirmes la fréquence ou pas ? Oui, oui. Ouais, bien sûr, pas dans mon cul, ma tête est malade. On le savait, ça, Gérard. Non, non, mais attends. Déjà, hé, Fildar, tu me la reprends, tu la réveilles un peu, parce qu'à 19 ans... Allez, Gérard, on y va, on y va, on enchaîne. Après, on a... Fildar, le prochain coup, tu écris mieux. Oseille. Oseille. Ouais, bonsoir, Gégé, bonsoir. Donc, maintenant, Royan sur 99. Salut, Oseille, ça roule ? Ouais, ça roule. Et après, j'écarte... Quoi ? Barret. J'écarte Barret. J'écarte Barret, Paris, 101.9. Bah, si tu le dis, hein. Bah, ça va, et toi, Gérard, mon petit Gérard, comment vas-tu ? Non, non, mais attends, je suis pas ton petit Gérard, d'accord ? Vous allez pas me casser les couilles, maintenant ? C'est mignon. OK ? Alors, première question, donc, vous l'avez entendue. Pour vous, l'argent peut-il le bonheur ? Ouais, ouais, ouais, oh ! Qui c'est qui commence à dire, tu peux la répéter ? Parce que je vais pas répéter les questions 50 fois, hein. Bon, d'accord. D'accord. Alors... Allez, première question, on y va, on répond. Bouge ton doigt, mets ton doigt dans mon cul. Celui qui dit ça, ou celle qui dit ça, bah, commencez par la fermer, d'accord ? Et puis, vous allez arrêter de redipler comme des porcs. Gérard, si tu commences jamais, on fera jamais le débat, hein, donc pose la question. Alors, première question... Tony, tu la fermes, c'est pas toi qui commandes. Non, mais Tony est en attente, donc il est pas là, donc vas-y, j'ai l'attaque. Alors, première question... Première question... Pour vous, l'argent fait-il le bonheur ? On va demander à Tony s'il est là. J'ai pu en attendre, là ? Non. Ah, c'est dommage. Non, t'as alors... Pourquoi c'est dommage ? Non, non, parce que j'avais dit des choses marrantes, mais c'est pas grave. Bon, alors, tu dégages. Allez, hop, il a... Retourne voir, puis le dernier... Non, non, mais attends, j'ai rien dit, là. Il a rien dit, là, Gérard. Je réponds à la question. Y a pas de souci, hein. Je réponds à la question. Parce que là, tu as pas commencé. Tu passes toutes les semaines dans les débats. J'ai des choses à dire. Non, mais tu passes toutes les semaines dans les débats. Tiens, oh ! C'est moi qui commande ! Bon, pour répondre à la question, moi, j'ai pas trop d'argent. Eh, oh ! Toi, déjà. Hop ! J'en veux pas. Pas de problème. OK ? Pas de souci. Allô ? Ça va pas faire comme la semaine dernière. Tu peux répondre ? Attends. Eh, oh ! Moi, c'est pareil. D'accord ? Parce que là, ce soir, vous avez pas me cassé les couilles. Parce que sinon, je suis caléba et je me casse. Oh non ! OK ? Ouais, d'accord, d'accord, d'accord. On y va. Non, mais calme-toi, calme-toi. Bon, alors, Tony, pour l'instant, tu réponds à la question. Ça fait toutes les semaines que tu passes. Ouais, mais arrête de m'agresser comme ça. Moi, je veux... Non, mais attends. La semaine dernière, t'es passé. Alors, on dirait rien de bon. Mais non, mais s'il dit rien de méchant... Bah ouais. Non, mais même. Moi, j'ai pas. Même. Même. Eh, y a 24 lignes qui sonnent. Donc, faut prendre sur les 24 lignes. Je les ai fait sonner, les 24 lignes, moi. Non, mais tu les as fait sonner, mon cul ! Bon, alors, moi, j'ai pas beaucoup d'argent, mais je suis heureux. Voilà. Hop, je les ai zappés. Hop. Alors, tabouret. Ouais, moi, je pense que l'argent... Eh, là, attends, tabouret. Ouais. Mais attends, Fildar, tu me prends quelqu'un d'autre. OK. D'accord ? OK. Non, non, mais... Eh, là, ça commence à bien faire ! Alors... Oh, bah, dis donc, Gérard, calme-toi. Bon, Gérard, là, on va pas avancer, quoi, si tu commences comme ça, sans déterminer. Non, mais, sans déconner, moi, je vais te dire une chose... Sans déconner... Bon, ça y est... Mais, Gérard, ça fait 8 minutes qu'on attend le débat, ça commence ! Alors, tabouret ? Ouais, bah, moi, je pense que l'argent fait le bonheur de ceux qu'on n'ont et le malheur de ceux qu'on n'ont pas. Tu peux expliquer ? Bah, comme disait Coluche, quoi, l'argent fait pas le bonheur des pauvres. D'accord. Euh, sandwich ? Bah, écoute, moi, je crois que l'argent fait pas vraiment le bonheur, parce que c'est pas parce que t'as du fric que tu vas être heureux, quoi. D'ailleurs, si t'as des problèmes de santé ou même si t'as pas d'amis, je veux dire, tu te méfies, quoi. Ah, voilà ! Voilà ce que... Oh, qui c'est qui a un portable, là ? C'est moi, c'est moi, j'ai un petit... Bah, c'est, euh, sandwich. J'ai rappelé, mais c'est toujours pareil, je suis désolé. Bon. Là, je peux vraiment pas faire mieux, hein. D'accord. Euh, tu... Tu me fais bander, là ? Ouais, ouais, ouais. Enfin, moi, j'ai pas beaucoup d'argent, mais je veux dire, moi, je suis heureuse dans ma vie, et puis, de toute façon, quand on est trop riche, on a plein d'hypocrites autour de nous. Voilà. Euh, Ozaï ? Ouais, bah, c'est un peu ce qui m'est arrivé, moi, ça m'a fait mon malheur, parce que j'ai fait un gros héritage, et depuis que j'ai plein de thunes, et bah, tout le monde arrête pas d'essayer de me taper, parce qu'il y a ma famille, mes amis, et voilà. La nuit, vous ? Ouais, y a pas que moi, hein. Ouais, bah, ouais. Bah, ouais, hein. Non, euh... J'ai la carte, euh, Rigo, oui. Y a une question sur IRC, c'est Oxip qui te demande s'il faut beaucoup d'argent pour être pauvre. Euh, ça, je vais répondre. Oh ! Tu sais qui veut répondre à ma place, là ? Toi. Non, mais, euh, faudrait peut-être... Ton cerveau. Attends, mon cerveau, tu sais ce qu'il te dit, toi ? Pas grand-chose. Il me dit, euh... Oh, ouais, Fildar ! Fildar, on commence pas la première question avec des gens pourris, hein. Bah non, mais c'est des gens que j'ai pris sur les 24 lignes, j'essaie d'en trouver d'autres, Gérard. Alors, euh, Tony, pour l'instant, tu t'écrases. Mais il est pas là, Tony, Gérard. Il est pas là. Alors, euh, j'ai... j'ai carte... Marais. J'ai carte Marais. Euh, si tu le dis, mais moi, en fait, moi, j'ai eu le même problème que... Je crois que c'est Oseille. J'ai le fils de milliardaire. Je n'aimerais pas la marque. Et, euh, bah, il y a plein de gens autour de moi qui savent ne pas que c'est mon pognon et c'est l'or. Bon, alors, euh... D'accord. T'as pas 10 balles ? Euh... Je peux te faire un million. Euh, par contre, qui c'est qui a un sandwich, je pense, qui avait posé une... qui avait répondu à la question. Oui, c'est... Et quand t'as des amis, t'as... Et quand t'as de l'argent, t'as des amis. Et quand t'as pas d'argent, t'as plus d'amis, c'est ça ? Non, mais ce que je veux dire, c'est pas parce que t'as du fric que tu vas forcément avoir de bons amis, hein. Non, mais... Ouais. Non, mais, attendez, attendez. J'étais un peu d'accord. J'étais un peu d'accord avec la personne qui avait répondu comme quoi on avait des hypocrites, mais je suis un peu d'accord avec elle, c'est vrai, hein. Bon, alors, moi... Les gens, ils n'y aiment rien pour ton fric, quoi. Hum ? Non, mais, Malheur, il y a une question que... Oh, mais, c'est quoi, là, le son, là ? Bah, écoute, le son, il est comme il est, hein. Il faut s'en accommoder, puis y aller, quoi, hein. Non, mais, Gérard, excuse-moi, je peux raccrocher, hein ? Non, non, non, non, non, non, non, non. Gérard ? Euh, oui, Rigo ? Oui, à propos d'argent, il y a Yankee sur IRC qui te demande combien t'as payé pour animer les débats. Alors, ça, ça regarde personne, et c'est tout. Donc, sa question ne tient pas debout. Donc, je vais répondre à peu près à la question. Vas-y. Donc, alors, pour vous, l'argent peut-il le bonheur ? De toute manière, je vais répondre la question à Sandwich. Hum, hum. Vas-y, vas-y, vas-y. Euh, donc, moi, je peux dire une chose. C'est quand t'as des amis, tu as de l'argent, et quand t'as pas d'argent, tu n'as plus personne. Donc, tu te démerdes toi-même. Ouais. Ouais. Hein ? Donc, ça veut dire ? Ouais. Bon, allez, vous arrêtez, là, parce que vous commencez à me casser les couilles. Tout à fait, ouais. Non, mais ils t'écoutent. Vas-y, Gérard, continue. Ouais, ouais, attends. Continue ce que tu voulais dire. Ah, ah, hum, hum, hum. Non, mais... Je veux dire pas, là, à ces auditeurs, c'est qui qui les a choisis ? Ben, j'en sais rien, moi, continue. Donc, c'est pas la peine d'essayer de vouloir me contredire. Donc, là-dessus, quand t'as de l'argent, t'auras toujours quelqu'un qui t'aidera. Ta gueule, toi ! Bon, alors, vous me faites chier, je réponds pas à la question. Mais vas-y ! Non, non, non, non, non. Non, pour l'instant, vous déconnez ! Vous avez pas à commencer comme ça, tous les deux ! Parce que sinon, je vous balance ! Ok ? Mais arrête de gueuler, on n'a rien fait ! C'est toi qui crie tout seul, là ! Non, non, non, non, pour l'instant, qu'est-ce que tu me fais, là ? Ben, je fais rien, je vais couper les auditeurs pour qu'ils répondent à la question. Arrête de gueuler ! Arrête de gueuler ! C'est bon, il faut les couper. Mais ils sont coupés ! Non, non, tu es... Non, mais au moins ça, parce que sinon, il est minuit et demi, on tiendra pas. Pour l'instant, Manu, tu as... Ils sont coupés, tu réponds pas à la question, Gérard, j'y peux rien, après. Non, Manu ! Mais crie pas, il n'y a pas besoin de crier pour parler. Punaise, mais... Eh, Manu, toi, je crois que ça va être pareil, hein. Allez, vas-y. Donc, alors, je vais répondre à Sandwich. Vas-y, Gérard ! Non, mais attends, tu permets ? Ben, vas-y ! Ben, ça fait qu'un quart d'heure qu'on a démarré, d'accord ? Mais pour l'instant, ça fait un quart d'heure que tu me fais de la merde ! Ben, un quart d'heure que t'avances pas, aussi. Ouais, mais ça fait un quart d'heure que t'es en train de me faire de la merde ! Gérard, tu peux parler du débat et arrêter de parler de l'équipe ? Ouais, mais attends, pourquoi ? Non, mais là, tu continues, parle du débat, on fait le débat. Non, mais attends, Rigaud ! Rigaud, pour l'instant, il n'y a que toi qui fais du bon boulot, les deux autres, là, pour l'instant, nous font de la merde ! Ok ? Alors, c'est clair et net. Ou on travaille en équipe, on fait du bon boulot, ou on travaille pas ! Un patron, il s'énerve pas, il gueule pas ! Il n'y a pas besoin de gueuler ! Hein ? D'accord, Manu ? Ça y est ? D'accord, Pildar ? Ah, moi, je suis ok, hein ! D'accord, Gérard ? Bon, alors maintenant, il n'y a que Rigaud qui va faire du bon boulot. Comme d'hab ! D'accord, ok ! Vous faites de la merde, les mecs ! Nous, on fait rien ! Ouais, pour l'instant, vous me faites de la merde ! Bon, on y va, on y va, on y va, on y va, on y va ! Quand tu fais ton débat, parle pas de ce qui se passe ici, passe plutôt aux auditeurs, à ceux qui écoutent la radio. Alors, avez-vous de l'argent de poche par vos parents ? On m'a demandé un tabouret ! Ouais, non, moi, je travaille, donc mes parents ne me donnent pas d'argent. Je suis bien toute seule à mes besoins. Ouais, mais... d'accord. Ouais, mais quand j'étais petite, ouais, ils m'en donnaient un peu, ouais. Ah, voilà ! Je piquais dans le porte-monnaie de ma mère. C'est qui, celui-là, qui dit tout à fait ? Bah, c'est vrai ! Quand elle était gamine, tout à fait, il lui donnait de l'argent. Non, mais attends ! C'est qui, là ? C'est qui qu'on récupère ? Non, non, c'est... Attends, que je retrouve... Apparemment, tiens, je t'ai récupéré un truc. Oui, c'est ce que j'ai déguisé. Spécial sur l'Internet, avec... J'ai récupéré l'adresse. Et là, t'as des questions... Il y a des trucs qui ont été faits, c'est sur le... C'est pour l'euro. Il y a un 36, un www.euro. C'est des questions qu'ils posent sur l'agence, sur des jeunes étudiants. C'est marqué où, www.euro ? Non, c'est pas marqué, là, mais... C'est là où ça a été pris. Je l'ai récupéré, ça, sur le site de l'euro. D'accord. Sandwich ? Sandwich ! Oui, oui, je suis là, Gérard. Bon, tu réponds à la question, ou pas ? Bah, écoute, tu m'as coupé dans mon élan. J'étais en train de parler, je t'explique, quand même. Alors, j'étais en train de te dire que j'étais plus chez moi, et que, bon, bah, je travaille, mais étant petite, moi aussi, j'avais un peu d'argent de poche, mais... C'est pas la grosse fortune, quoi, quand même. Hum. Voilà. Tu me fais bander ? Bah, non, mes parents me donnent pas d'argent tous les mois, mais quand je leur demande, ils me le donnent facilement. Ouais. Ouais. Euh, Oseille ? Ouais, alors, tu m'entends ? Ouais. Ce qui se passe, c'est que moi, j'ai fait un héritage, donc, en fait, je suis... Bon, alors, Oseille ! Oseille, ton héritage, on n'en a rien à foutre, OK ? Alors, tu vas avoir... Non, non, tu vas avoir pile d'or au standard. Attends, il répond à la question, et toi, tu t'énerves. On n'a pas le droit d'être riche, dans le débat ? Alors, ouais, c'est vrai. Non, mais attends, on parle pas d'héritage ! Bah, écoute, écoute... Je te demande, avez-vous eu de l'argent de poche par vos parents ? Eh ben, il a eu un héritage ! Pourquoi ? Parce que t'as eu un héritage, toi ? Eh ben, ouais. Bah, ouais. Eh, alors ? C'est que là, j'en veux pas de ça ! Et maintenant, attends, je t'explique, maintenant, c'est moi qui donne de l'argent de poche à mes parents, parce qu'ils se sentent... Non, mais c'est ça, allez, hop ! Allez, hop, bonne nuit ! C'est sympa ! Allez, hop ! Allez, hop, Gérard, Gérard, Gérard ! Allez, hop, Gérard, Gérard, Gérard ! Ça y est, je l'ai viré, Gérard. Non, mais là, tu vas pas commencer, toi. Non, bah, je vais lui repiquer ses thunes, et puis il aura pu dire... Non, non, mais tu te démerdes ! D'accord. Eh là, vous me faites du bon boulot, parce que, pour l'instant, vous commencez à me... À Brèges ! Comment ? Non, elle dit, continue la question. Non, elle dit à Brèges ! Ouais, bah, c'est un peu... À Liège ! À Liège, en Belgique, je crois qu'elle est belge. Oh, ouais, c'est ça, t'as raison, Manu. Fous-toi bien de ma gueule ! Ouais, ouais, c'est ça. Ah, le métro, deux secondes. Euh, j'ai les cartes marées. Non, j'ai les cartes marées. J'ai les cartes marées, c'est vrai. J'ai les cartes marées, vas-y. Bah, en fait, moi, je t'ai dit, je suis fils d'Axel, de milliardaire, et moi, en fait, je cite pas de marque, j'envoie mes domestiques travailler à ma place, au McDo, pour qu'ils me gagnent de l'argent de poche. Putain, mais vous savez... Eh, vous savez ce que c'est, un débat ? Bah, moi, je te réponds à la question que tu poses ici. Non, mais moi, je te demande, est-ce que tu sais ce que c'est, un débat ? Oui, un débat, on pose une question et j'en réponds. Ouais, et bah, pour l'instant, t'es à moitié dehors. J'ai pas besoin d'argent de poche de mes parents, puisque j'envoie mes domestiques travailler. D'accord, allez-y, allez-y, faites de la scène. Moi, là, je dis, l'équipe va pas. Comment ? L'équipe, elle va pas, là. Ouais, bah, pour l'instant, c'est vous qui allez pas. J'ai répondu aux questions. Euh, qu'est-ce que c'est ? Tabouret, je pense qu'elle a répondu. Donc, à la place de Tony, on accueille J'ai pas une thune. Ouais, ouais, mais attends, Fildar. Oui. Non, non, non, non, non. Non, non, Fildar. Non, non, non, non, non. Non, Fildar. Mais pourquoi ? Fildar, non. Non, je te dis. Il t'a dit non. Tu vois, parce que là, pour l'instant, t'as pas viré, tu l'as pas viré, tu l'as fait prendre sur un autre nom. Pas du tout, bonsoir. T'es en mon cul, Tony. Alors, c'est pas la peine. Non, non, non, non, non, non, non, non, non. Moi, je... Non, non, je travaille pas. Je travaille pas comme ça. Bon, alors, on reprend tabouret, sandwich. Euh... Non, non, mais tu vas sur les 24. Oui, bah oui, sur les 24. Je monte sur les 24. Ouais, bah, tu te dépêches. Parce que, pour l'instant, pour l'instant, je crois qu'avec Manu, j'ai dit, on fait du bon travail ce soir. Oui, mais là, Gérard, c'est toi qui avances pas, quoi. Il l'a viré, maintenant, Tony. Alors, on y va. Non, mais attends, pour l'instant, il reprend sur un autre nom. Non, non, moi, je suis pas d'accord. Je suis pas d'accord. Gérard, il y a plein de questions sur l'IRC, donc je vais en lire une vite fait. Il y a Kenéda qui te demande combien tu donnes d'argent de poche à Sandy pour qu'elle reste avec toi. Alors, à Sandy, ça, ça regarde personne, donc c'est mon problème personnel, donc... C'est un problème, quand même, alors. Non, non, mais ça, ça regarde personne. Ouais, mais c'est toi, même, tu dis, c'est un problème. Ça regarde pas les auditeurs, donc, ça questionne, j'y réponds pas. Après, Rigo ? Quoi ? D'autres questions, non ? Si, si, peut-on acheter de l'intelligence avec son argent de poche ? Demande Blouder. De l'intelligence, je pense pas, non. Non ? Non, après ? Non, et je sais plus qui c'est qui me demandait combien d'argent t'avais pris dans la poche de Christine. De Christine, alors ça, tu vois, le mec, celui qui parle de Christine, il va... Il va faire du bonheur. Ouais, ben, bien sûr... En monnaie ! Donc, si c'est pour entendre des conneries comme ça, c'est pas la peine. Donc, alors, je peux vous dire une chose, avez-vous de l'argent de poche par vos parents, donc, ça dépend des parents, parce qu'il y a des parents qui peuvent vous donner jusqu'à 50 francs, d'autres qui vous donnent rien du tout, donc, là-dessus, c'est des parents qui sont pas très riches. Ben, moi, parce qu'ils veulent pas. Ben, ouais, c'est qu'ils veulent pas, toi... Non, mais il y a des parents qui veulent pas donner d'argent de poche à leurs enfants. Ouais, mais ça, c'est... Ils préfèrent qu'ils le gagnent par eux-mêmes, en faisant des petits boulots. Ouais, mais ça, de toute manière, si les parents n'aident pas leurs enfants pour trouver quelque chose, je pense qu'on n'y arrivera pas. C'est-à-dire ? Donc, pour que les jeunes aillent de l'argent, il faut quand même que les parents soient derrière pour les aider. Ouais, mais tu vois... Parce que si on n'a pas... C'est peut-être que de les aider, il faut qu'ils aillent trouver un petit boulot. Ouais, mais si on n'a pas de parents... Ouais. Donc, tu peux pas avoir d'argent pour les aider. Tu comprends ? Ouais, ouais, ouais, je comprends, je comprends, je t'écoute. Toi aussi ? Ouais. Donc, si t'as des parents qui veulent te donner de l'argent, ils seront là. Moi, je comprends pas, j'ai pas... Ben si, ben... Attends... Si t'as pas de parents, ils peuvent pas te donner d'argent de poche, regarde. Ah ouais, voilà. Donc, ils peuvent pas t'aider. T'es obligé de le voler. Pareil, euh... Non. Quoi, dans la poche de ton ex ? Non, non, non. Non, non, y a pas de voler. C'est que là, bon, ben, tu fais carrément la manche. T'es le distor. Non, non, non, t'es pas obligé de faire la manche comme tes gamins, que t'as pas de parents. Attends, attends, si, si, si, si, si, si. Tu fais des petits boulots. Mais oui, non, non, non. Tu livres du lait, tu t'achètes des gens. Non, non, non, non, t'as des gens qui font la manche, je veux pas dire... Ouais, mais on parle de l'argent de poche. On parle pas des S9. Les S9, ils veulent pas de l'argent de poche. Quand ils sont dans la rue, ils veulent de l'argent pour manger, nuance. Bon, Rigo, tu voulais rajouter quelque chose ? Ouais, je voulais te demander comment on fait si on a des parents, mais qui sont pauvres et qui peuvent pas te donner de l'argent de poche. Ben, le problème, c'est que tu reviens à la manche. Ah, tu vas faire la manche, finalement. Ben oui. T'as pas assez de thunes pour aller en Méditerranée, donc t'es baisé, quoi. Voilà. Alors, troisième question. Vas-y. Je te refais une liste, Gérard. T'inquiète pas, ça arrive. Donc, on a toujours tabouret, sandwich, tu me fais bander. À la place de Oseille, il n'y a pas rappelé. Oui, bonsoir. Oui, bonsoir. Et on a toujours G4 Marais, voilà. Ouais. Toujours là. Oui, salut. En espérant que... T'en es sûr de ce que tu me racontes, Filtre ? C'est-à-dire ? T'en es vraiment sûr des noms, là ? Ben oui. Ouais, ben, je pense que... Pour l'instant... Manu. T'as prévu, Gérard, que tu peux te dépêcher. Non, non, mais si t'as envie d'aller pousser... Non, non, non, non, non, non, non, non, non, non. Non. Non. Non, mais dépêche-toi un petit peu, parce que quand même, il est une heure, et si on continue comme ça, on va pas y arriver. Attends, si t'es pas contente... Et si vous êtes pas contentes dans ces cas-là... Non, non, je suis très content, mais bon, tu fais du boulot. Bon, alors, si t'es... Alors, toi, c'est qui, toi ? T'es qui, toi, qui vient de dire ça ? C'est un bon auditeur. Ouais. Qui tient rien. T'as la liste. C'est la police, un peu, Gégé, ça va plus, là. Non, non, mais de toute manière, ça va être Fildar. Maintenant, Fildar... Non, c'est pas Fildar. Arrête avec Fildar. Ok, mais vous vous calmez derrière, s'il vous plaît, c'est moi qui commande le jeudi. Bon, la question, c'est... Gérard, j'ai une bonne question, là, sur IRC. Voilà. Y a Turpentine qui te demande comment on fait pour avoir de l'argent de poche quand on a pas de poche. Ah, tu peux acheter en fait. Comment ? Tu peux acheter en fait. Mais c'est... Tu piasses dans le sac. Non, tu peux acheter un sac. Ouais, ben, le mieux, c'est de voler dans un sac à main. Et c'est pas tellement... C'est pas tellement recommandé. Ouais, non, faut pas le faire, même, ouais. Quoi, tu dis aux gens de voler dans un sac à main ? Non, non, non, non, non, même... Je le déconseille. Je le déconseille complètement. Alors, donc, troisième question. Est-ce que... Est-ce que vous travaillez pour avoir de l'argent ? On va demander à Tabouret. Ouais, ouais, moi, je travaille. Et je gagne de l'argent. Sans indiscrétion, tu fais quoi comme travail ? Ben, je trouve que c'est indiscret, donc... Je te réponds pas. D'accord. Alors, dans ces cas-là... Non, j'ai pas envie de te dire ce que je fais. Je trouve ça indiscret. Parce que, bon, c'est pas... C'est pas quelque chose dont on parle à la radio si facilement. Bon, attends. Dans ces cas-là, quand Max... Quand Max vous demande ce que vous faites comme boulot, vous lui répondez. Et quand c'est moi, vous me répondez non. Non, mais... C'est pas du tout ça. C'est bon, Tabouret. C'est bon. Sandwich. Sandwich. Sandwich. J'en ai pas non plus. Sandwich. Tu vois comment faire ? Je suis là, je suis là. Oui, moi, je travaille, oui. Et sans indiscrétion, tu fais quoi ? Moi, je suis secrétaire dans une entreprise. Voilà. Tu me fais bonder ? Ben, je travaille pas, mais voilà. Et tu cherches quelque chose ? Non, pas pour l'instant, d'abord. Non, mais pour l'instant, tu t'empoutes, tu te dis... Je touche plus par le chômage, c'est pas la peine que je travaille. Non, attends, je... Non, euh... T'es étudiante, à mon avis ? Oui. Dix ? Euh... Dix-deux ans, ouais. Ok. Euh... Gérard ? Oui ? Sur IRC, il y a Philippe Détoubifry, le vrai, qui te demande combien tu serais prêt à payer pour virer Fildar. Bonne question. Ça, j'attends toujours. Apparemment, on devait nous trouver d'autres personnes pour remplacer Fildar, parce que... Non, mais c'est pas le débat. Non, mais c'est pas ça, la question. La question, c'est combien tu paierais pour le virer. Oh, mais moi, je paye pas, c'est pas à moi de le payer, c'est à la direction. Ok. Donc, euh... J'ai carte marée, là, je sais pas quoi. Allô, oui, je suis... Tu vois, j'ai pas besoin de travailler, parce que je suis milliardaire, en fait, et je vis de l'argent que je place en bourse, et je comprends vraiment pas que les pauvres travaillent, parce que c'est si facile de gagner de l'argent en bourse. Non, mais attends, tu... Eh, tu te fous de ma gueule, à 19h, t'es... À 19 ans... À 19 ans, t'es milliardaire... À 19 ans, t'es milliardaire... Ah, oui, parce que je suis le fils d'Axel... Tu vois, je suis un fils de milliardaire... Ouais, bah, alors, pour l'instant, tu vas fermer ta gueule... D'accord ? Tu vas fermer ta gueule, parce que pour l'instant, t'es en train de me dire des conneries. D'accord ? Comment ? C'est quand même le fils du boss, hein. Ça peut aller loin, Gérard, s'il y a... Ouais, non, mais attends... Mais attends... Comment ? Ouais, t'as raison. Eh, ma mère ! Ma mère, tu sais ce qu'elle est ? Eh, je t'en meurs, c'est une pute ! Eh, bah, la tienne, elle t'en meurt, espèce de salope ! Allez, vous me faites chier ! Ça, c'est des filles, ça... Hop, terminé ! Je vous répondrai pas ! Oh, mais si, Gérard ! Non, non, non ! Castez-vous le plus souvent avec votre argent ! Hop ! Avant la question, Gérard, il y a une autre question de l'IRC, de Chocobo Gold, qui te demande combien il doit payer pour avoir l'honneur ou l'horreur de te rencontrer. Zéro franc ! Eh, Fildar ! Oui ? Fildar ! Fildar, maintenant, tu vas prendre 24 lignes, et tu vas te manier le cul, parce que là, tu commences à me faire du boulot de merde ! D'accord, je... Il est zéro heure ! Il est presque une heure du matin ! Ouais ? Pour l'instant, tu me donnes que des cons ! D'accord, bah, je vais essayer de trouver des gens intelligents, d'accord ? Ouais, ouais ! Non, non, mais, hé, là ! Gérard ? Oui, mais j'arrête pas de rappeler ! Gérard, depuis que t'as dit qu'on pouvait te rencontrer gratos, ils veulent tous te rencontrer, et il y en a un maximum qui vont venir devant la radio. T'es énervé ? T'es énervé ? Ouais, je suis énervé, pourquoi ? Parce que, normalement, j'ai eu Manu ! Avec Manu, il m'a dit qu'il me faisait du bon boulot ! Attends, il fait du bon travail ! Tu t'énerves pour rien, tu réponds jamais aux questions ! Il me fait du boulot de merde ! Non, mais t'arrêtes pas, il s'en fait une demi-heure ! Mais il me fait du boulot de merde ! Ça fait une demi-heure que je t'écoute, ça fait une demi-heure que je t'entends le cul gueuler, j'en ai rien vu ! Moi, je zappe, j'écoute pas, ce soir, y a pas d'audience ! Et alors ? Non, c'est pas de sa faute, c'est de la tienne, tu t'énerves, tu n'arrives pas à gérer ! Tu gères pas ton débat ! Je te repasse encore la liste, une dernière fois ! Vas-y, vas-y, trouve-moi des auditeurs, et pas des... Non, non, non, non, prends pas les mêmes, et demande pas qu'ils changent leur nom ! Poussin, bonjour ! Salut ! Voilà, merci ! On va mettre un disque après, parce que là... De toute manière, c'est maintenant ! On va peut-être... On va peut-être accueillir les auditeurs, et tu vas poser des questions pour qu'ils réfléchissent, bah si ! Cachez-vous avec votre argent de poche, cachez-vous le plus souvent avec votre argent, et on s'écoute ! On s'écoute, j'ai pas de tude pour me faire tirer l'arrêt avec des petits suisses ! Bah ouais ! Eh, c'est pas mal, parce que là, j'ai aucune fiche pour annoncer les disques, donc vous pouvez nous appeler au 0803 085000 et 0870 5000 ! Et voilà, donc, toujours le débat de Gérard, il est 1h03 du matin, donc vous pouvez toujours nous appeler au 0803 085000, même si ça répond pas, ce n'est pas grave, donc, ou sinon, au 0870 5000... Et c'est fan radio, quand même ! La radio où tu bosses, c'est fan radio ! Toujours, toujours, toujours, Rigo qui vous attend sur l'IRC www.fr ! Ouais ! Et donc, vous êtes bien sur un fan radio... Ouais, on est 3482-4, donc on y va, on fait ça bien ! C'est pas mal, c'est pas mal ! Gérard, on fait ça bien ! Donc... On l'écoute même pas ! Si, si, si, j'ai entendu, Rigo, 3000... Non, mais le débat, il va bien se passer ! Ouais, mais j'espère ! Si, si ! J'espère ! Je l'espère, parce que si ça se passe mal, la semaine prochaine, il n'y aura rien ! De toute manière, comme ça va être bientôt les vacances de Noël, donc... C'est pas le débat, ça, Gérard ! On va se mettre un peu en vacances ! On va écueillir Poussin, 20 ans de besoins, donc on peut écouter un peu de radio sur 100.9. Poussin, bonjour ! Salut, Gégé ! Bon, allez, vous arrêtez derrière, parce que là, vous commencez à me casser les couilles ! Ok ! La suite, donc, on a toujours Tabouret, Gérard ? Tabouret, 10 demandes d'Axe, c'est bien, parce que tu pourrais me mettre les fréquences, Ah, si ça ne te dérange pas, Pildar ! Non, mais ce n'est pas grave, on va la trouver, vas-y ! Celui d'après, c'est qui ? Sandwich, 23 ans de tour ! Oui, salut, Gérard ! Tu me fais bander ! Ouais, salut ! Non, mais tu peux répondre comme il faut ? Bah oui ! Bonjour, Gérard ! Bonsoir, Gérard ! Pas à pluie ! Oui, enchanté de pouvoir enfin te parler, Gérard ! De 21 ans, Royan ! Ça fait ! Et... Camembert ! Bonsoir, je suis Camembert, j'appelle de Chuby, j'ai 19 ans. Ouais, et... Ah, 19 ans ? C'est bizarre, parce que j'ai 20 ans, moi ! Je me suis trompé, je suis désolé ! Non, mais... C'est rien ! C'est rien, c'est rien ! Arrête de t'acharner sur lui, on a l'impression que c'est une bête fauve, c'est bon, fous-lui la paix ! Fous-lui la paix, Gérard, Pildar ! Ouais, mais attends ! Tu me donnes bien les fréquences ! Mais alors ? Toi, t'écoches bien les noms, toi tu fais bien des fautes de français, je te dis pas, t'es gentil, quand tu vas faire de la radio, tu fais pas de fautes de français ! Alors, Camembert, 20 ans, de Chuby-Z, donc on peut écouter plein de radios sur 101.9. C'est FM. Hein ? T'es gentil, quand tu dis 101.9, c'est FM, si c'est pour dire n'importe quoi, Gérard, tu les dis pas. 101, 101.9, FM. Voilà ! Voilà, il faut être précis. Si ça te plaît pas, c'est le même prix, Camembert. Allez, ça recommence. D'accord ! Et je la regarde tous les vendredis soir. Comment ? Je regarde ton émission tous les jeudis soir. D'accord ! Donc, t'as tes PS ? Bah ouais, je regarde celle-ci. Ouais, bah... Eh ! Eh ! Eh ! Stop ! Stop ! Y'a une chose que j'ai oubliée, pour tous les auditeurs... Vous y allez plus. Pour... Manu, tu me l'es mis en attente ? Ça y est. Donc, pour tous les éditeurs de Fun, qui écoutent à l'heure actuelle Max, le Sarc Système, dans 10 minutes... Vous avez Techno Max sur M6. Donc... Et pour le moment, c'est le débat, hein. Ouais, c'est quand même ton débat, quoi. Et on reprend le débat. Donc, cachez-vous le plus souvent avec votre argent. On va demander à Poussin. Oui ? Oui, Poussin. Oui, Poussin. C'est quand tu veux, tu réponds. Bah, qu'est-ce que j'achète le plus souvent ? Bah, des fringues, du maquillage. Et puis, bah, c'est tout. Ouais, ouais, ouais. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et puis, bah, c'est tout. Et à boire. Qu'on boive en boîte. Et puis, des clopes. Et puis, des clopes. Et puis, des clopes. D'accord. T'achètes pas mal de trucs, elle, quand même, hein. D'accord. D'accord. T'achètes pas mal de trucs, elle, quand même, hein. Ouais, ouais. Ouais, ouais. Non, mais, de manière... Je répondrai moins. Ouais, ouais. Non, mais, de manière... Je répondrai moins. Ouais, ouais. Non, mais, de manière... Je répondrai moins. D'accord. Euh, t'as bourré. Ouais, bah, moi, j'achète à bouffer, parce que... Il faut que je me nourrisse et mon loyer, là, aussi. Il faut que je paye mon loyer. Donc, tu vois, j'ai pas trop de fric pour m'acheter des fringues, ni du maquillage, ni... Non, mais, attends. À 19 ans... ... acheter à bouffer, enfin... T'as bourré. T'as bourré. T'as bourré. Ouais, ouais. T'as bourré. Oui. Pour l'instant, t'es étudiante, toi ? Non, pas du tout. Je travaille. Qu'est-ce que tu crois ? C'est pas parce qu'on a 19 ans qu'on est étudiant, hein. Non, mais, eh... Tout à l'heure. Tout à l'heure. Non, mais, eh... Tout à l'heure. Tout à l'heure. Maintenant, je me démerde. Mes parents m'ont foutu dehors. Donc, je me démerde. C'est tout. Ouais, non, mais, attends. Attends. T'as bourré. T'as bourré. Ça, c'est... C'est un truc que... Quoi ? Je veux pas parler. Donc, dans ces cas-là, t'avais qu'à... Quand je t'ai demandé : "Avez-vous de l'argent de poste par vos parents ?" Ouais. Donc, t'aurais pu me répondre correctement à la question. Bah, je t'ai répondu correctement. Je t'ai dit que je travaillais, que mes parents m'en donnaient pas. Hum-hum. Et... Ouais. Et... Ouais. Ouais. Ouais. Ouais. par vos parents. Donc, tu auras pu me répondre correctement à la question. Je t'ai répondu correctement. Je t'ai dit que je travaillais, que mes parents ne m'en donnaient pas. Non, non, mais ce n'est pas ce que je voulais faire. Bon. Donc, tu as bourré, toi, alors ? Oui, je t'ai dit. Il faut que je me nourrisse. C'est tout. Ça part de là. Mais vas-y, passe à autre chose. C'est lourd. Oui, mais ça, c'est... Fais gaffe, elle va tomber du tabouret, si tu comptes. Non, non, non, non, non, non. On rééquilibre la mortelle. Non, non, mais attends. Pour l'instant, son truc, il est foireux. Elle va réfléchir et on la reprendra. Non, non, non, non, non. Non, non, il n'est pas foireux. Mais vas-y, ne te l'amende pas, ce n'est pas grave. Non, non, mais ne t'inquiète pas, j'ai connu ta situation. Oui, mais c'est bien, je te l'amende pas, passe à autre chose. Ok. Sandwick ? Ben écoute, moi, déjà, j'ai mon loyer à payer. Et puis, en deuxième, j'ai des petits cadeaux à mon copain, du moins, mon nouveau petit copain, parce que je suis très attentionnée, voilà. D'accord. Tu me fais bonder ? Ouais, ben, j'achète des disques, des casquettes de théo, ben tout, quoi, les vêtements, tout ça. Ouais. Par à lui ? Ouais, ben moi, écoute, je dépense ma thune, quand même, pour sortir un petit peu, aller dans les boîtes, boire des coups, tout ça. Et, ben, quand même, il faut reconnaître que, je ne sais pas si tu vas encore poser ton boîte, mais ça, écoute, quand même, un maximum de fric. Ouais, mais... Ben, voilà. Non, mais attends. Quand t'es jeune, tout ton argent de poche, il passe dans le compot. Attends, quand t'as pas de fric, quand t'as pas de fric, comment tu peux faire pour aller en boîte ? Mais si, j'ai de l'argent de poche, même si j'en ai pas beaucoup, moi aussi, j'ai le droit de me déchirer un peu, quoi. Donc, voilà. Mais je viens de te poser la question, si tu n'as pas de fric, quand tu n'as pas d'argent, comment tu fais pour aller en boîte ? Ben, tu... Par exemple, j'ai des mecs qui bossent... Oh, le dernier, vous pouvez la fermer ! Tu connais, par exemple, des mecs qui bossent dans une radio et puis ils te font rentrer gratos à la boîte et ils te payent des coûts ? Bon, euh... Pas appuyé ! Ben, non, mais c'est un exemple, tu me demandes, moi. Je sais pas, cherche-toi, tu connais des gens de la radio, donc peut-être que tu peux rentrer gratuit et boire à l'oeil, j'en sais rien, moi. Non, non, attends... Je sais pas si t'as quand même remarqué, le prix des consos et le prix de l'argent en boîte, c'est quand même cher, tu peux pas dire le contraire. Non, mais si ! Le prix de l'argent, c'est inabordable. Le prix de l'argent... Non, mais attends... Je veux tirer 100 balles, ça t'en coûte 500, je veux dire, c'est quoi, ces histoires ? Attends, tu payes combien pour aller en boîte ? En général, vous aurez autour de 300 balles, ça dépend de la boîte, mais vous aurez autour de 300 balles, quoi. Ben ouais... Si tes parents te filent 50 balles et que la conso, c'est 50 balles, tu peux même pas boire dans la boîte, tu dois être obligé de boire dehors. Voilà, exactement. Camembert ! Je fais une collection et donc ça me coûte très cher d'acheter des choses pour la collection. En général, j'achète... Ouais, parce que je collectionne les ampoules. Alors j'achète beaucoup d'ampoules pour ma collection. Non, mais attends, Camembert, t'as bien compris la question ? Oui, je te dis, j'achète des ampoules pour ma collection. Gégé, pour une collection d'ampoules, c'est pas une lumière, hein. Non, mais pour un cent, je crois que t'es en dehors de la plaque. Non, mais attends, je te dis que j'achète des ampoules. Je pense... Non, mais attends, t'achètes des ampoules pour quoi faire ? Ben, je fais collection. T'es grillé, toi, ou quoi ? Non, attends, je suis grillé pour un cent, c'est toi qui es grillé. Non, l'auditeur est grillé. Il est grillé complet. C'est toi. Ben, dis-donc, c'est dis-donc, c'est... C'est toi qui es grillé parce que tu réponds pas à la question correctement. Bon, tu veux que je te dise quoi ? Que j'achète des disques, que je veux au ciné... Attends, c'est qui, là ? C'est Camembert. Attends, Camembert... T'as fermé ta boîte à Camembert. Tu as pas de poutre de ma gueule, tu vas répondre correctement à la question. Je vais te foutre de ta gueule, putain. Il y a pas de putain, d'accord ? D'accord. On dit moment de travail, OK, Tony ? Ah, non, non, c'est pas toi. Non, non, c'est pas Tony. Non, c'est pas moi, Tony, je te promets. Bon, ben, attends, je vois... Attends, c'est la voix de Tony. Tony, il a une voix de canard. Non, de toute manière, n'ayez crainte, j'ai l'impression que ce soir, vous avez envie de me faire chier. Et toi, c'est pas grave. Qu'est-ce que tu fais ? C'était quoi la question, déjà ? Parce que j'ai un peu oublié. Non, mais attends, toi, pour l'instant, c'est pas toi que je m'adresse. Moi, ce que je fais, c'est que je m'achète à bouffer et, bon, je me paye des vêtements. Tu fais des petits cadeaux. Oui, des cadeaux à 100 euros. On me demande combien ça te coûte de l'Adidas tous les mois. De l'Adidas tous les mois, pour l'instant, je n'en trouve pas dans les magasins. C'est ça qui m'emmerde. Tu veux le faire importer en France, non ? Parce que si tu n'en trouves pas en France, eh bien... Attends, toi, je vais te faire importer une voiture, toi. D'accord, c'est cool. Sinon, en parlant de petits cadeaux, tu fais bien des petits cadeaux à Sandy ou des trucs comme ça, non ? Ah oui, mais ça, Sandy, c'est différent. Bah non, c'est là où tu dépenses ton argent. C'est quand même dans le débat. Non, mais attends, Sandy, c'est différent. Sandy, c'est ma femme. Donc, à une femme, tu as le droit d'y faire ce que tu veux. Toi, par exemple, est-ce que tu fais des cadeaux à ta femme ? Non, jamais. Non ? Non. T'es un peu vache. Bah ouais. Moi, jamais. Même pas. Moi, j'aimerais bien avec des tresses. Même pas. Ou des chaussures compensées. Je ne sais pas. Filder, fais gaffe, parce que tout à l'heure, tu vas te prendre un café dans la tranche. Non, j'aimerais bien les tresses à ma copine. T'as même pas essayé d'y acheter un petit bouquet de fleurs à ta copine. Rien, rien, rien. Je suis un rat. Putain, t'es un rat d'un. Eh ouais, j'ai plein de filles, mais je garde tout pour ma gueule. Je suis un rat. T'es un rat d'un, Rigo. Oui, il y a Desesperado qui te demande combien t'as acheté samedi. Zéro franc. Ah bah ouais, on le savait. Ah si, ah si. Ah. Ah si, trois francs. Prix de gros. Ah bah non, trois francs. C'est dans le sentier, non ? Euh, Manu. Ah, j'ai rien mis. Alors là, j'ai rien fait. T'éteins ton micro, tu bosses. Quoi ? Trois francs, c'est quoi ? Pourquoi trois francs ? Trois francs, c'est le prix d'une lettre. Ah ! Il est malade ! Il y a Yannix qui te demande trois francs, ça fait combien en euros ? Alors, trois francs en euros, alors là, je peux pas lui répondre. 50 centimes, c'est la moitié. Ouais. Non, c'est 7 francs 50 l'euro. Non, c'est 6 francs 60 l'euro. Donc ça fait, ça fait 3 euros. Bon, j'ai un sondage sauf frais, sinon, concernant l'argent. À la question, avez-vous de l'argent, 15% des personnes répondent oui, 38,654% répondent des fois, 127% répondent 1, et 2% répondent j'aime pas, j'ai rien. C'est bien, si c'est même pas bas, qui reste chez eux. Ils y sont, je crois. Donc, pensez-vous, pensez-vous que sans argent, pensez-vous que sans argent, la vie serait plus dure ? On va demander à Poussin. De quoi ? De quoi ? J'ai pas entendu la question, j'ai pas entendu la question, j'étais avec Fildar. Ah, t'étais avec Fildar. Je vous demandais de se réveiller un peu, parce que, Gérard, si tu peux parler bien devant ton micro, par contre, ce serait super sympa. Pensez-vous que l'argent serait plus dur ? Pensez-vous que sans argent, la vie serait plus dure ? Bah ouais, c'est clair. Donc, tu peux préciser ? Bah, je peux préciser, en effet. Bah, l'argent, en fait, c'est matériel, quoi. Comment ça ? Eh bah, ça sert à vivre, sans ça, tu peux pas avoir une maison, à manger. Voilà, quand l'argent, t'es pas le bonhomme, il contribue. Ouais, mais sans argent, donc, tu fais quoi, alors ? Tu fais rien. Bah, sans argent, t'es à la rue, c'est clair, t'es sous les ponts. Hum, d'accord. OK, je vois à peu près ce que tu veux me dire. Tabouret ? Ouais, bah, moi, je pense que sans argent, la vie serait géniale. Y'avait pas d'argent, en fait, du tout. Donc, t'aurais pas besoin de payer pour avoir les choses, t'aurais les choses naturellement. Non, mais attends. Attends, tabouret. Oui ? T'as vraiment compris le sens de la question ? Oui, oui, j'ai compris. Je veux dire, si l'argent n'existait pas, bah, t'aurais pas de problème du tout pour acheter les choses, puisque t'aurais rien à acheter. T'aurais même pas à faire le geste, tout sera à toi. T'en fous ? Non, mais attends, je crois que, là, tabouret, ça m'étonnerait que tu comprennes ma question. Euh, sandwich ? Ouais, Gérard, je trouve que, déjà, la vie est assez dure comme ça. Déjà, rien qu'avec du fric. Alors, si on en avait pas, je crois que c'est la question. Ah, enfin ! Une qui répond bien à la question. Elle a un portable, c'est pour ça que t'as... C'est pas moi, hein ? On n'y peut rien, je suis désolé. Le sandwich, c'est avec un portable ? Oui. Ah là là, ah là là ! Non, j'avais bien précisé, lors des débats, pas de portable ! Bah oui, je suis déjà passée plusieurs fois, j'avais pas de portable avant, mais là, je suis désolée. Ouais, mais... C'est pas tellement aujourd'hui, hein ? Ah ouais, mais, dans ce cas-là, t'essayes de voir... Tu demandes à... à Fildar qui te rappelle sur une cabine téléphonique, parce que là... Non, mais là, j'ai l'air... Non, mais attends, là, dans ton portable... Non, mais attends ! Attends, sandwich ! Là, pour l'instant, dans ton portable, on entend ma voix. Oui. C'est agréable, quand même. Alors là, moi, ça me plaît pas. D'accord ? T'essaies de trouver une cabine téléphonique et tu dis à Fildar où qu'on peut t'appeler. C'est impossible. C'est impossible, Gérard, là. Ouais, ben, si. Y a rien qui est impossible. Gérard, sur Yanty, y a Yanty qui te demande comment tu fais sans argent pour payer ton portable. Alors, sans argent, ben, de toute manière... Euh... Une fois que la carte était à mon nez, ben, je la renouvelle pas. Alors, tu me fais bander. Ben ouais, ben, c'est clair, quand on a pas d'argent, on peut pas s'en sortir, mais... Si on a la volonté de réussir, et de travailler, c'est sûr qu'on peut en gagner facilement. Sondier, t'es grillé. Non, c'est pas Sondier, tu vois. C'est pas Sondier, là, qui est au téléphone. Donc, t'as tout pour celui qui dit que c'est Sondier. Parce que pour l'instant, Sondier, elle est en train de... Elle fait quoi, Sondier ? Pour l'instant, Sondier, elle t'emmerde. Mais ils ont rien dit, c'est pas grave. Non. Alors, pas à lui. Ouais, ben, écoute, bon, moi, je suis tout à fait d'accord avec lui. Je pense que, effectivement, sans argent, la vie est plus dure. Ça, je crois que c'est clair, c'est acquis. Par contre, ce qu'il faudrait savoir, savoir si c'est inné, d'ailleurs, c'est, est-ce qu'avec de l'argent, la vie est-elle plus molle ? Moi, je pense que c'est plutôt à ça qu'il faudrait s'intéresser. Je voudrais savoir ce que t'en penses. Non, mais, je te demande si, pour vous, pensez-vous que, sans argent, la vie est plus dure ? Tout à fait, tout à fait. Mais est-ce qu'elle est plus molle si t'en as, quoi, avec ? Attends, on te me dit, la vie sera plus dure, même que t'ailles avec de l'argent ou pas ? Parce que, je reviens, je reviens à une question. Est-ce que, pour, je ne sais même plus la question que j'avais répondue, de manière, voilà, pour vous, l'argent fait-il le bonheur ? De manière, je reprends les questions, donc, c'est à peu près à la question numéro un que tu veux répondre, toi. Non, ce que je voudrais savoir, en fait, c'est que tu parles de la vie est dure, est-ce que toi, t'es dur pour de l'argent, quoi ? Non, non, non, non, non, attends, tu deviens dur si on te donne de l'argent ou pas ? Non. Non ? Tu restes mou ? Non, mais moi, de manière, avec de l'argent, de manière, t'iras partout. Sans argent, t'auras rien. Et de manière, je reviens à la première question, pour vous, l'argent fait-il le bonheur ? De manière, je ne sais plus qui c'est qui m'avait posé la question, la question est simple. De manière, quand t'as de l'argent, t'as des amis, et quand t'as pas d'argent, tu n'as personne. Et ça, c'est un truc qui me dégoûte, c'est bien ça. Ça, c'est bien ça, parce que quand t'as de l'argent, tu as tout le monde qui vient te voir, qui vont venir te dire « Ah, bah oui, tiens, je réponds tout après. » Rigaud, oui ? Bah non, continue de répondre. Non, non, vas-y, vas-y. C'était juste Mulder, le vrai, sur l'IRC, qui te demande si tu penses que sans argent, t'aurais pu téléphoner tous les soirs à la fin de ta cabine. Ah, bah ça, de manière, vu que c'est un numéro vert, tu peux téléphoner, téléphoner comme tu veux. Il n'y a pas de problème, même avec une carte ou qu'il te reste une unité, tu peux appeler le 0875000, que si tu vois que ça sonne occupé, tu vas taper le service et t'insistes. Et Gérard, est-ce que tu penses que c'est la monnaie qui dirige le monde, c'est la monnaie qui dirige la Terre et qu'on ne peut rien y faire ? La vie, c'est comme ça, on n'a pas tout ce qu'on veut, mon gars. Qu'on le veuille ou non, quoi. De toute manière, maintenant, il faut... Non, mais... Non, mais il y a des trucs qui... qui sont assez durs à l'heure actuelle, c'est que maintenant, sans argent, tu ne peux rien faire. Donc toi, tu penses qu'il faut arrêter de compter à mon barrette et compter... Si tu n'as pas de caillasse, t'es un chien, hein ? Non, mais même... Si tu n'as pas de thune, tu ne vaux rien, c'est clair. Mais même, c'est pas parce que tu n'as pas de thune que tu ne vaux rien. C'est quand même beau, la vie, quoi. Viens voir le docteur, n'aie pas peur. Le docteur Doc, il n'est plus là. Tu viens d'avoir 15 ans, intéressant, quoi. Arrête tes conneries, Filder, s'il te plaît. Ah, il fait chaud, hein ? Non, il est grave. Pour l'instant, Filder, lui... Lui, il ferait mieux de se taire. Camembert, Camembert, pourquoi ? C'est un passement de jambe sur le bit de flambe, hein ? Comment ? C'est un passement de jambe sur le bit de flambe. Non, non, d'accord. Alors, Camembert, c'est terminé pour toi. Non, non, pour l'instant, tu viens de répondre à côté de la plateforme. J'ai compris la question, effectivement. Je pense que si on n'avait pas d'argent, moi, sans argent, je ne pourrais pas tâcher puisque je ne pourrais même pas avoir un téléphone puisqu'il faut déjà l'acheter avant de pouvoir faire le 0800. Non, non, non, non, non, non, non, non, non, non, non, non. Le téléphone, tu dois l'acheter. Non, tu n'as pas besoin d'acheter un téléphone. Le truc, une chose qu'il faut bien se dire dans sa tête, tu prends une carte, pour prendre une carte téléphonique et avec une carte téléphonique, tu peux avoir, tu peux l'avoir, le numéro. Parce que... Pour avoir une carte téléphonique, il faut l'acheter, même si tu n'as pas d'argent. Il faut l'acheter, même si tu n'as pas d'argent. Il faut l'acheter, même si tu n'as pas d'argent. Et s'il ne reste plus qu'une unité, il faut déjà l'acheter. Non, non, non, non, attends, le 0803-08-5000, il est gratuit. Donc moi, je peux te confirmer, moi, je l'ai déjà fait plus d'une fois, avec une unité. Oui, mais je suis d'accord. Non, non, mais attends, tiens mon verre, pour un instant, tu me laisses répondre. Je réponds à ta question, on est bien d'accord. Avec la carte, avec une unité, tu peux appeler toute la nuit, jusqu'à temps qu'on te réponde. Je suis d'accord, mais pour appeler, il faut déjà avoir une unité. Et pour avoir une unité, il faut déjà avoir acheté une carte. Et pour avoir acheté une carte, il faut avoir de l'argent. Bon, dans ce cas-là, t'essayes de voir si t'as des bons amis. De toute manière, les amis, il faut les compter sur les 5 doigts d'une main. On est d'accord, Camembert ? Nous sommes d'accord, mon petit Gégé. Donc, moi, pour l'instant, j'ai que 3 amis. Donc, sur 3 amis, je peux m'en sortir. Mais oui, mais moi, j'ai pas d'argent, donc j'ai pas d'argent. Donc, je peux pas me faire passer de carte. Mais non, mais attends, t'as des voisins ? Oui, mais non, je suis SDF. Non, mais attends, tu te fous de ma gueule, là, ou quoi ? Non, non, je t'appelle d'une cabine. Bah, la carte, je l'ai trouvée dans le nom de la cabine. Ah, il a du bol, quand même. Il a quand même un peu de bol, ce mec. J'ai peur qu'il me demande qui sont tes amis. Qui sont tes amis ? Mes amis sont... Je donnerai pas les noms à l'antenne. Non, mais tu donnes pas les noms. Non, mais je sais pas, ça peut être une voisine, ça peut être un copain, un copain d'école, j'en sais rien. Non, non, je donne pas les noms à l'antenne. Mais c'est pas des noms, ça, de dire que c'est ta voisine ou un copain d'école. C'est pas les noms, c'est de dire ce que c'est. Non, non, mais j'ai trois amis, et ces trois amis-là, j'y tiens. Atos, Porto, c'est Aramis, non ? Voilà. Tu peux me donner la petite fiche, là ? Ah, pour le disque ? Donc, pose la question. C'est la combien ? La sixième. Ah, encore quatre. Je taquine. Vas-y, pose. Alors, avoir un portable avec ou sans argent, peut-on y arriver ? Et on va s'écouter. Si quelqu'un veut gagner de la thune à ma place, c'est OK. Avec des cacahuètes en plus. Donc, vous pouvez toujours nous appeler au 0803 085000 et 0870 5000. Et toujours lire c'est www.fr. Et pour les Belges, 0033 147 259 50. Et on se retrouve tout de suite après. Et voilà, donc, vous venez d'écouter un remix qui a été fait par un auditeur, donc, deux sur moi, donc... Qui se vend sous le menton, je te rappelle. Donc, je sais pas qui c'est qui a fait ce remix. On sait pas non plus que ça se vend sur les marchés au puce. Ouais, c'est ça. Et donc, qu'est-ce que je voulais vous dire d'autre ? Donc, le premier disque, c'était si quelqu'un veut gagner de la thune avec ma place, c'est OK. Donc, avec des cacahuètes en plus. Donc, pour l'instant, vous pouvez toujours nous appeler au 0803 085000 et 0870 5000. Et toujours lire c'est www.fr. Rigo vous y attend. Voilà, et ça cartonne grave du fait que le débat s'est calmé. Il y a beaucoup plus de gens. On a dépassé les 4000 déjà. On est à 4122, moins en racine de 3. 4000, un 4, un 1. 4000, un 1. 4122. Racine de 3 qui vaut à 4 quand même. Non, non, 4122. Donc, alors, qu'est-ce que je voulais vous dire d'autre ? On va peut-être faire un petit sondage, non ? Un petit sondage, alors. Combien dépensez-vous d'argent par mois ? Donc, 50% dépensent plus de 100 000 euros. Donc, pour l'instant, l'euro, on n'y est pas encore. Oui, mais ça a été cherché sur le site de l'euro. C'est pour ça que c'est en... 1 euro. D'accord, Régo. Attends, il y a le métro, là. Je m'en fous. 20% dépensent moins de 3 francs. Ça, c'est pas beaucoup. Donc, ça, je ne sais pas. 25% veulent être payés pour répondre à la question. Ils vont se faire foutre. Que dalle. 5% pensent que Gérard de Suren gagne de trop. Alors, ça... Hop ! Qu'est-ce que t'en penses, toi ? Poubelle ! Qu'est-ce que t'en penses, Gérard de Suren ? Poubelle, c'est des conneries. Tu crois que tu ne gagnes pas assez ? Ça, c'est pas ton problème. C'est pas ton problème, c'est mon problème. Est-ce que t'aimerais être augmenté, alors ? Ça, tu peux le dire. La direction écoute. Ça, ça ne regarde personne. Si j'ai besoin de demander quelque chose, je passe par mon chef. Moi, je te dis, pour ce que tu fais, je donnerais beaucoup plus. Je te donnerais beaucoup plus d'argent. Toi, pour l'instant, tu fais déjà ton boulot. Je suis prêt à donner la moitié de ma paie, si tu comptes. Pour l'instant, donne... Attends, attends... C'était pour blaguer, vas-y. Non, non, non, non, non, non, non. Mes genoux. Gérard de Suren fout. Pensez-vous que l'argent est important ? Donc, 60% ne savent pas à quoi ça sert. C'est ça, à quoi l'argent ? En fin de compte, ça sert à manger. Donc, 20% préfèrent l'art. Alors là, je ne vois pas le rapport avec l'argent. Bah si, ils préfèrent l'art que les gens. L'argent. Bah, dans ces cas-là, 30% n'ont jamais répondu. Alors, est-ce que l'argent fait le bonheur ? Donc, c'était la question... C'était la question, la question, la question, la question... 1. Alors, donc, 50% ne savent pas ce que c'est le bonheur. C'est dommage, parce que le bonheur, ça n'arrive pas qu'aux autres. Ça peut arriver à tout le monde dans la vie. Et c'est simple. Et il y en a, il y en a qui se moquent parce qu'ils n'ont pas encore trouvé leurs chaussures à leurs pieds. N'est-ce pas, chef ? Allez, hop ! Oh, tu l'as cassé, hein ! Tu l'as cassé, hein ! On va te mettre un peu de... On va te mettre un peu de sucre, hein ! On va te mettre un peu de sucre sous les pieds. Ah, ça va donner un... Pour que tu trouves la chaussure, on va te mettre du sucre. Ne t'inquiète pas, tu vas la trouver. Tu vas voir. Je pense qu'avant... D'ici... D'ici le... 5 ou 10 ans, ça sera bon. Non, d'ici le 2-3 janvier, tu auras quelqu'un de sûr. Tu verras. Tu verras. Tu trouveras ton bonheur. Gérard, tu me dis, il y a Yankee qui te demande si le bonheur, pour toi, c'est pas de te payer un cerveau. Non. Moi, mon bonheur, je l'ai maintenant. Je suis tranquille. Ah, t'es insortable ? Non, mais moi, j'ai mon bonheur. Moi, j'ai pas eu... Moi, j'ai... J'ai trouvé la chaussure à mon pied. Ouais. Donc, le chef, il va la trouver pour le 2-3 janvier. Coupe-toi les ongles, quand même, des pieds. Non, non, mais... C'est des corps, à ce niveau-là. Non, non, mais faut qu'il essaye de voir. Tu mets des chaussures en transpiration ? 20% n'ont pas d'argent. Ça, c'est sûr que... Là-dessus, on peut rien faire. Et 30% ne comprennent pas la question. Alors, là... Ils sont cons, parce que c'est quand même simple. Parce que l'argent fait le bonheur. Le bonheur, c'est l'argent, c'est tout. Ouais, non, mais... Ils ne comprennent pas la question, donc c'est pas grave. Bon, on n'a pas d'argent, ça, c'est sûr que... De toute manière, avec... Si t'as pas d'argent, de toute manière, tu peux rien faire. De toute façon, c'est la conjoncture. Voilà. Avec Patel. Donc, on va... La conjoncture qui vit. Donc, on va récupérer Poussin. Allô ? Ouais, Poussin. Ouais, Poussin, ouais. Donc, tabouret. Ouais, toujours là. Sandwich. Toujours là aussi. Tu me fais bander. Toujours là aussi. Parapluie. Galopos. Et Camembert. Je suis dans ma cabine, c'est ça. C'est bon. C'est quoi, là ? Donc, Camembert, s'il repasse avec... Non, mais c'est pas Camembert, c'était une fille. Je sais pas si t'as remarqué, mais t'as quatre nanas, quand même. Quatre nanas. T'as quatre nanas, gamin. C'est parce que ça groove. Ça groove grave, là. Ça prend la couche. Tu vois, elle écoute de la musique, en plus. Faudrait peut-être qu'elle arrête aussi. Tu vois, ou tu me fais bander, t'arrêtes ta musique. Elle brandit, là. Voilà. Donc, avoir un portable... Elle est chouette, en plus. Merci, je peux poser la question ? Vas-y. Bon, oui. Avoir... Gérard ? Attends, il pose la question, Camembert. Vas-y, Gérard. Vas-y. Avoir un portable, avec ou sans argent, peut-on y arriver ? Oui. On va demander à Poussin. Moi, je pense que, déjà, quand on achète un portable, il faut avoir de l'argent. Et quand on vend un portable, il faut... Bah, il faut investir. Et que ça se réfléchit, quoi. Parce que, déjà, ça rapporte, quoi. Ouais, mais tu peux aller plus loin dans... Bah, pour m'analyser ? Bah... C'est vrai, c'est une analyse. Bah, aller plus loin, euh... Non, mais tu... Hé, Fildard. Tu coupes la personne qui s'amuse à dire ça, et tu coupes ton micro quand je parle. D'accord. Je vous rends de ça. Tu devrais le savoir, de toute façon. Le dictateur. Alors, euh... Donc, euh... Pour toi, Poussin. Ouais. Bah, moi, j'ai répondu. Ah, t'as répondu ? Bah, oui, moi, je pense que... Je sais pas, avoir un portable... Je sais pas, il faut investir... Je sais pas, ça s'investit, quoi. Non, mais attends... Ça s'est réfléchi. Non, mais attends. Par exemple, si quelqu'un te vend un portable... Ouais. Tu... T'achètes une carte ? Une carte ? T'achètes une carte, euh... Sans abonnement. Bah... Bon, c'est... Hé ! Attends, Poussin. Hé, celui qui s'amuse derrière à dire des conneries, arrête ! Allô ? Parce qu'elle est avec ses copines, Poussin, c'est pour ça, quoi. Non, non, non, c'est pas Poussin, attends. Non, t'es pas mort ! Non, moi, je suis toute seule, moi. Attends, Pilsard, tu... Pilsard, tu me fais du bon boudon ? On avait comment... On avait... Bah, c'est impeccable, vas-y, je vais... Ouais. Ouais, c'est impeccable. Donc, t'as bourré. Moi, j'ai pas fait une réponse. Réponds-moi ! Bah, vas-y, Poussin. Bah, moi, je dis que quand on a un téléphone, il faut investir, voilà. C'est pour ça que tu m'interromps ? Ouais, t'avais déjà fini, alors, Poussin, hein. Ouais, bah ouais, d'accord. Ok. Ah, d'accord. Euh, t'as bourré. Derrière, les mecs, vous fermez vos gueules. Ok. Merci. Ouais, bah... T'as bourré. Ouais, bah, moi, une fois, j'ai gagné un portable sur Fun. Ouais. Et, euh... Et, en fait, quand j'ai reçu le dossier, les abonnements étaient trop chers. Donc, j'ai pas pris, quoi. Non, non, mais attends, attends. Et, de toute façon, mes amis m'ont dit qu'ils m'appelleraient pas sur un portable, c'était trop cher. Alors, t'as bourré. Je vais te dire une chose. Ouais. Que lorsque tu gagnes un portable... Ouais. Sur Fun Radio... Ouais. Normalement, la mise en service, c'est gratuit. Oui, la mise en service, oui, mais tu payes tous les mois un abonnement, et moi... Et alors, bah, dans ce cas-là, si t'as pas envie de payer d'abonnement, tu reprends, tu fais une chose... Ouais. T'en gagnes un tous les mois. Tu retournes là où le portable, tu l'as eu... Ouais. Et tu demandes à avoir une MobiCard. Ouais. C'est clair, net, précis ? C'est la pub, ma... Hein ? OK. Ouais, ouais. Bah, je ferai ça, ouais, avec mon dossier. Ouais. OK. D'accord ? Ouais, mais enfin, merci quand même à Fun de m'avoir offert un portable. Y a pas de quoi, y a pas de quoi. Et tu l'as gagné quand, par Fun Radio ? Oh là là, y a, je sais pas, six mois. Ouais. Ouais, c'est ça. Ah, c'est pas mal, hein. C'est pas mal. Ouais. Bon, fil d'or. Hop. Je peux même pas participer. Non, non, toi, tu t'écrases. Ah, super. Toi, tu t'écrases, tu fais ton boulot. Ouais, bah, je veux faire. Hein, OK. Euh... Tu me fais bander. Merde. Merde ? OK, bah, t'fais refoutre. C'est bon pour... Tu me fais bander, tu me... Tu me prends quelqu'un d'autre. OK. T'as rappelé ? Ouais, bah, écoute, c'est clair qu'il faut avoir de l'argent pour avoir un portable potable, quoi. Donc, moi, ce que je te conseille, c'est le Tattoo. C'est un peu moins cher. C'est tous les trucs genre Tattoo, Tamtam, Cobi. Oui. Parce que tu vois, bon, alors, après, le problème, c'est que tu ne peux pas que ton numéro passe à l'antenne. Je crois que tu connais le problème. Sinon, bah, tu peux... Tu prends un téléphone avec un fil et puis tu tiens une rallonge. C'est des merdes. Euh... Bah, tu tiens un câble, il n'y a que ça à faire. Si t'as pas de thunes pour avoir un sans-fils... Non, mais attends, tu vois, le Tattoo, c'est pareil. De quoi ? Parce que le Tattoo... Non, non, mais attends, attends, attends. Attends, je vais te répondre par appui. Le Tattoo, d'accord, on... Moi, j'ai eu des problèmes avec. Mais j'ai été forcé de faire changer mon numéro. Hein, t'es... Ouais, je me souviens, ouais. Donc, t'es au courant ? Yes. Hein ? Do you know... Do you know speak English ? Yes, I want to talk to you in the ass. Yeah. Yes. Yes, I want to explore... Yeah, yeah, yeah. Ah, non. Ah, non. You want to talk to me in the ass ? Non, je... Euh... Déjà, je peux te dire une chose. Il faut que tu mettes une pile dedans. C'est vrai. Ouais, une pile, ça coûte pas trop cher, c'est bon. Euh... Ouais, mais... Vu les piles qu'on a dedans, c'est pas évident. Si tu reçois beaucoup de messages que t'es une star, c'est sûr, les piles, elles se vivent rapidement, quoi. Dites-le moi en position vibrante, en permanence, dans la poche, tu vois ce que je vais dire ? C'est sûr, ça se vive. Hum-hum. Ah ouais. Non, mais, te dire, le tatou... Ouais. Le tatou avec la pile, si personne t'appelle, donc, il va s'éteindre à une certaine heure que tu programmes, il va se rallumer à la même heure. Ouais, Gérard, sans vouloir te vexer, c'est pas... Ni le débat, c'est pas les tatous ni les portables, quoi. C'est la thune. Ouais, mais... Donc... Donc, j'ai bien répondu à ta question, par appui ? Ouais, impeccable. Camembert ? Pardon, impeccable. Ouais, on aime mieux ça. Camembert ? Oui, ben moi, en fait, je pense qu'on peut avoir un portable sans avoir l'argent, parce que j'étais dans la rue, parce que je fais le def, et puis il y a un camion qui est passé, et puis il y a une caisse qui est tombée, et puis il y avait plein de portables dedans. Non, mais attends, là, pour l'instant, Camembert, t'es en train de me dire des conneries, Alors si c'est pour continuer à dire des conneries. Non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non, non. Gérard, Gérard, sur l'internation, on te demande de répéter la question parce qu'ils n'ont pas entendu. Alors, avoir un portable avec ou sans argent, peut-on y arriver ? Ok. Alors, septième question. D'après vous, l'euro sera-t-il plus efficace que le franc ? Ça, c'est une bonne question. On va demander à Poussin. C'est dégueulasse. Je n'ai pas entendu la question. Oh ! Est-ce que l'euro est quoi ? Est-ce que l'euro sera plus efficace que le franc ? Non, moi, je pense que non. Parce que déjà, pour les personnes âgées, ça va être compliqué. Et le temps qu'on assimile tout ça, il nous faudra bien, je ne sais pas, au moins cinq ans. Non, mais déjà, déjà, il faut se dire une chose. Ouais. Avant que tous les autres répondent. Moi, je peux vous dire une chose, que l'euro, pour l'instant, c'est prévu pour là, 2000, pour 1999. Donc, ça ne sera que les pièces. Les billets seront prévus qu'en l'an 2000 ou 2002. Ben, vas-y, continue ! En l'an 2000 ou 2002. Donc, maintenant, j'ai vu des pubs. Il paraît qu'on peut... On peut garder même la carte bancaire. Les petits dessins animés, là, à la télé, c'est ça ? Ouais. Des trucs. Ouais. Ils peuvent... On peut garder... Par exemple, t'as une carte bancaire, tu vois, une carte bleue. Ouais. Et tu pourras payer avec ta carte bancaire. En franc. En franc ou en euro. Et comment je fais pour choisir ? Avec ma carte bleue, il y aura un bouton dessus ? Non, non, mais... Je sélectionne euro ou... Non, non, ça sera là, au magasin, où tu iras. Gérard ? Oui, euh... Si on regarde ici, on me dit que l'euro, c'est quand t'as bien mangé. Non, non, non, non. Ça, ça n'a rien à voir. Et on te demande si l'euro sera plus fort qu'elle le paie. Non, ça, je ne réponds même pas. C'est Zeewee qui demande ça. Ouais, ben, Zeewee, je n'y réponds même pas à sa question. Pas de politique. Donc, poussin. Ouais. Donc, pourquoi ? Ben, pour moi, c'est une source d'emmerde, quoi, parce que ça ne sert à rien. Déjà, l'avantage, c'est que ça va être une monnaie européenne. Et moi, je pense que, déjà, moi, déjà, ça me fait chier parce que ça ne sert à rien, voilà, quoi. Les personnes âgées, ça va, ça va... Franchement, les personnes âgées, ça va leur faire chier, quoi, tant qu'elles affluent tout ça. Elles vont crever, donc... Voilà, quoi. Tu sais, qui c'est qui dit que les personnes âgées peuvent crever, là ? Je n'ai pas dit qu'elles peuvent crever, j'ai dit que... Ah, c'est dégueulasse, Sam. C'est dégueulasse. Mais non. Non, non, non, mais attendez, attendez, attendez. Il faut bien se dire une chose, que l'euro, ça va emmerder tout le monde. C'est que là, ça ne sert à rien. Et ça, ça va, je dis, emmerder plus les personnes âgées. Le tabouret. Oui. Donc, pour toi ? Moi, je pense que c'est génial, l'euro. Et moi, j'attends vraiment une monnaie mondiale. Ce n'est pas que pour l'Europe, c'est vraiment pour le monde. Je ne sais pas, ça paraît le mondiaux, je ne sais pas, le périod. On ne s'emmerderait plus, au fond de terre, à changer les monnaies. Ce serait la même monnaie partout, pareil. Non, mais de toute manière, l'euro, tu vas être obligée de changer, hein ? Oui, non, mais je suis d'accord, mais... En euro, par exemple. Mais tu vas être obligée de changer. Tu vas être obligée de changer le franc contre l'euro. Oui, bien sûr. D'accord. D'accord ? Il y a quelqu'un qui se fait tirer sa caisse, hein ? Tu me fais bander. Non, elle est partie, tu me fais bander. C'est pour ça que je voulais t'annoncer. Donc, ta sandwich, quand même, Gérard, ne t'oublie pas. Puis tout à l'heure, elle est là, elle attend. Ben, sandwich. Ben, merci, quand même, ouais. Tu as répondu à la sixième ? Ben non, je n'ai pas répondu, mais bon, ce n'est pas grave. Non, non, mais attends, je... Non, elle veut... Non, non, non, attends. Avoir un portable avec ou sans argent, peut-on y arriver, donc, pour toi ? Ben non, pas pour moi, non. Non ? OK, septième. Merci. Septième, ouais. Ouais, donc, je voulais... Ouais, mais attends, il faut préciser les gens qui restent. Ben oui, ben, c'est marqué. Ben ouais, mais si tu me dis... Si je fais tout le monde et que tu ne me précises pas qu'il y a une personne qui n'a pas répondu, il faut me le dire, hein. Ben oui. Non, c'est alors sandwich. Ben, écoute, moi, pour moi, au niveau de la manifestation qu'elle finit, elle parlait, là. Moi, je suis un peu... Je suis un peu... Comment dire ? Je ne suis pas vraiment d'accord, parce que je crois que ça va être trop tard, de toute façon. La manifestation, elle ne changera rien, hein. Non, mais même, de toute manière, l'euro, là, il arrive dans moins de 15 jours. Oui. Donc, juste après les fêtes de... L'arrêt de vous ? Ah, c'est le 1er janvier, l'euro ? L'arrêt de vous ? Ouais. 1er janvier, là ? Le 2 janvier. 2 janvier 99, t'auras les pièces. On va faire comme toi, on va payer notre dinde en euros, là. Non, non, non, tu vas faire les fêtes de fin d'année, si tu veux, avec le fond normal. Ah, là ? Et au moment de... Le 2 janvier, juste après les fêtes de fin d'année, tu vas avoir de l'euro. Mais là, par contre, il ne faudra pas mélanger, par exemple... C'est un bordel, hein. Non, mais attends, regarde. T'as déjà des euros ? Non, non. Je prends 5 francs. Moi aussi, j'en ai. Tu vas avoir des euros en plus. Et là, je ne sais pas, parce que... Des zéros ou des euros ? Oh, tais-toi, toi. Non, il faut savoir. Tais-toi, toi. Tu l'ais, toi. Bah, OK. Non, je ne sais pas, parce que moi, j'ai une pièce, là, je ne sais pas, d'où qu'elle sort. Il faudrait que je voie si c'est pas un euro ou pas. Non, mais c'est un genre de pièce d'emprunte. Mais il y en a déjà, des euros, actuellement ? Non. Ben, je pense. Gérard, il y a Turpentine qui te demande si la vie sera moins dure avec l'euro. Euh, non, je pense qu'elle sera pareille, hein. Ouais, c'est la même chose, c'est de la monnaie, de toute façon. Ouais, mais même, elle sera aussi dure, hein. De toute manière, en fin de compte, c'est pas pour nous que ça va être le plus dur. Ça va être pour les personnes âgées, comme certaines personnes m'ont dit. Ouais, tout à fait, tout à fait. Ouais. Ça va être le plus dur, ça va être pour les personnes âgées. Il faut les tuer à la naissance. Ouais, non, mais attends, il faut les tuer à la naissance, et si on vous tue, vous, à la naissance, bande de cabs. Gérard, sur IRC, il y a Daf qui me dit que le masque de Zorro, il est déjà sorti, hein. Bon, ben, attends, lui, il est carrément en dehors de la plaque. Après, Sandwich, donc, à la place de Tu me fais bander, on a Roblochon, 19 ans, de Brest. Salut, Roblochon. Salut. Voilà, donc, il peut répondre. Ouais, Roblochon, je t'écoute. Ben, ouais, je sais pas, tu peux répéter la question, parce que j'ai pas bien écouté, là, en fait. Eh, putain, mais merde ! Il est au standard avec moi, GG, merde. Non, mais attends. Non, moi, quand je suis... Gérard, arrête de tourner comme ça, tu fais mal à la tête, t'as vu ? Ah, le portable qui vient, là. Ouais, le portable... En plus, il y a quelqu'un... En plus, il sonne, ben, je vais essayer de gérer le portable, Gérard, vas-y, pas la Roblochon. Alors, Roblochon, je t'écoute. Non, mais attends, tu peux répéter la question, parce que j'ai... Alors, d'après vous, l'euro sera-t-il plus efficace que le franc ? Ben, ouais, je sais pas, peut-être. Ouais, ouais, ouais, ouais. Hum ? Par rapport à d'autres pays, ouais, ça ira mieux. Euh, Camembert ? Euh, non, Camembert, attends, 5 minutes. Sur IRC, il y a Sardine qui te demande, avec l'euro, est-ce qu'il va falloir changer les billets du Monopoly ? Ben, pour l'instant, les billets ne sont pas prévus. Donc, les billets sont pas avant l'an de... Pas avant 2002. Donc, qui commence pas à nous casser les burnes ? Ben, il y aura que des pièces au début. Au début, oui. On aura des pièces de 5000 balles ? Non, ça sera des pièces... Je sais même pas... Des pièces de voiture, des pièces de moto ? Non, euh, donc... Donc, Camembert ? Non, parapluie, Camembert, il est parti. Alors, parapluie ? Ouais, ben, écoute, moi, ce que je peux te dire, c'est que l'euro, ça marchera mieux en Europe. Et que, si t'es en dehors de l'Europe, donc, par exemple, en France, ben, il vaut mieux utiliser le franc. Hum. Par contre, ce que je peux te dire, c'est que ça va poser des problèmes, parce que, tu vois, ça va plus te faire des contrôles. C'est-à-dire que, bon, je prends un exemple, faut pas que tu t'énerves, imagine, tu vas aux putes te faire sucer, ça coûtait 100 francs. Hum. Maintenant, il va falloir que tu viennes avec de la monnaie. Parce que, t'imagines la galère, les putes, elles vont se travailler avec des sacs entiers de monnaie. Parce que, 100 francs, ça fait quoi ? Ça fait 15 euros et des centimes, tu vois ? C'est clair. Et, t'imagines, les putes, elles vont passer leur temps avec des tonnes et des tonnes de monnaie. Ouais, avant... Oh, oh, oh, derrière, vous le laissez parler. Avant, quand j'allais pécho une red bat kiff, c'est 100 francs. Là, pareil, ça va plus faire des contrôles, c'est pas possible, ça va être trop une galère. Ouais, tu m'étonnes, maintenant, on va avoir plein de pièces dans les poches, et voilà. Mais, ouais, mais, mais, attends, attendez, attends, attends, attends, reblechons, reblechons. Ouais. Je vais calmer tout le monde. De toute manière, s'assoyez avec des pièces ou des billets, de toute manière, on sera toujours emmerdés. Mais, on sera toujours bien sucés, ça c'est clair. Ça c'est clair. Mais, t'imagines, les putes, elles vont se trimballer avec des sacs en deux pour se trimballer la monnaie, quoi. Mais, tu dis pas putes, c'est ce que tu dis. Ah, pardon, les péris, pas péris. On dit maman travaille, ok, on passe péris. Gérard, attends, sur l'URC, il y a Mulder, le vrai, donc le vrai, qui te demande si l'euro fera de toi un homme riche. Non. Non, pourquoi ? De toute manière, même avec de l'euro, tu pourras pas être riche, c'est pas facile. Mais dans quel sens ? Non, mais ça serait impossible, tu peux pas être riche avec de l'euro, ça c'est impossible. De toute manière, ça va être un débat que je pense qu'on... Ah, on va le faire, ce truc-là ? On le fera l'année prochaine. Si, si, tu l'as déjà fait l'année dernière. Ah, je pense qu'on l'a cassé. On a déjà fait un débat sur l'euro. Ah, je m'en souviens. Comme si j'y avais participé, je m'en souviens. Mais t'as pas fait sur l'EP, par contre. Ah ouais, c'est vrai. T'as fait sur l'euro, mais pas sur l'EP. Euh, Vasquerie. Oui, bonsoir, je suis Vasquerie, j'ai 21 ans, j'appelle de Lyon. Ouais, ben, on le sait, j'ai la fiche... Ouais, ben, je t'écoute. En fait, moi, j'ai de la famille en Italie. Ouais, mais t'as pas une vache qui pleure ? Je suis pas t'excité. Oh, c'est rien, ouais ! T'as pas une vache qui pleure ? Tu m'as vanné, tu m'as vanné. Mais par contre, oui, donc j'ai de la famille en Italie, donc je voyage beaucoup. Et c'est clair, quand je passe au change, parce qu'il faut changer l'argent, ben, je perds beaucoup. Tandis qu'avec l'euro, je perdrai moins. Le voyage sera plus abordable. Par contre, c'est un aspect négatif, parce qu'en Italie... Hé, là, attends. Vache qui rit. Hé, la salope ! Qui est en train de se prendre son pied. Arrête ! Et par contre, je vais saluer un petit Lyonnais qui travaille à la radio le matin de 6h à 9h. C'est M. Babart ! Parce qu'il nous écoute, et il me dit à chaque fois... À ce temps-là, il écoute, c'est sûr. C'est con, parce qu'on ne lui sait pas le débat. Non, oui. Ouais, ben, on se calme après, Bart. Il va vous laisser, il va vous réveiller demain matin, entre 6h et 9h. Euh, on se calme derrière ! Pour revenir au débat, il y a Perforas sur l'IRC qui te demande comment... Le vrai ? Ouais, le vrai, aussi. Et, putain, il y a de la célébrité ce soir. Comment est-ce qu'on pourra jouer pile ou face avec l'euro ? Eh, c'est pas con. Ah, ben, alors là, déjà, il faudrait que j'aille d'une pièce d'euro pour essayer de savoir d'où est le côté pile ou face. Donc, huitième question. Bon, parce qu'après, on va attaquer le deuxième débat. Oh ! Ouais, mais ça y est, pour moi, t'as fini. Attends, je voulais juste ajouter que, ben, l'euro, tu vois, qu'en Italie, un euro, ça vaut 6 000 lire. Non, ça vaut pas 6 000 lire, ça vaut 6 francs, 6 francs 50. C'est pas en Italie, c'est pas en Italie. Oh, mais, mon dieu ! Un euro, ça vaut 6 000 lire italienne. T'en fous de ton cul ! Eh, moi, t'en es une salope ! Attends, attends, attends ! Mais, c'est un mec, ça. S'il vous plaît, s'il vous plaît ! Un peu de calme ! Non, ça y est, c'est terminé. Non, mais attends, j'ai pas fini. Maintenant, tu me laisses parler. Oh, si je veux ! Erreur, je peux te poser une question ? Oh, ta gueule, elle est la tienne ! Non, mais calme ! Donc, tu me laisses... Tu me laisses parler, Gérard ? Non, t'accouches, parce qu'il a déjà eu... Donc, en Italie, un euro, ça vaut 2 500 lire. Et donc, tu passes de 2 500 à un, donc tu y perds. Quoi ? Attends, attends, je prends des notes, je fais des divisions. En Italie, un euro... Gérard, prends des notes, merde ! Tu fais une tournée en Italie, après. Alors, un euro, ça fait... Non, non, laisse tomber, laisse tomber, laisse tomber ! Mettez-vous de l'argent ! Un euro... Mettez-vous de l'argent aux autres ! Bon, ça y est, ça y est, ça y est, ça y est ! Oh ! 253 couronnes. Non ! Gérard, assieds-toi, assieds-toi, frappe pas, file d'un. 3, 2, tu marques, ok ? Voilà. Oh, merde ! Et sinon, Gérard, il y a Yannix sur l'IRC qui te demande comment on fera pour retirer de l'argent quand ce sera en euros, vu que là, on tire 100 francs, c'est un billet, mais... En euros, on va tirer des pièces ? Ah, voilà. Voilà la question que j'attendais. Enfin, une bonne question sur l'IRC ! Il y a que toi qui parraille bien, pour l'instant, Rigo. C'était une question de Yannix. Le vrai Yannix. Mais ça y est, Gérard, arrête de me faire des signes, je sais ce que je fais. Alors, donc, pour... Bon, ça y est, bravo ! C'est le tel à bien travailler ! Bravo, Rigo ! Merci, les mecs. Bon, faut s'appeler les Blancs, hein. Donc, pour l'instant, les billets, ils sont prévus pour 2002. Donc, par distributeur, je sais pas si t'auras les pièces, t'auras toujours les billets normaux. C'est faux. Quoi, c'est faux ? Ouais. C'est grave. Pourquoi c'est faux ? Bah, je sais pas, c'est toi qui pose la question. Ah non, moi, j'ai pas le micro allumé, hein. Bon, enfin, bref. Mettez-vous de l'argent. G, G, G, G, G, G. Ok. Je vous écoute. Ouais, c'est par rapport à ce que les billets et les pièces, c'était en 2002. T'es juste comme un héros. Attends, toi, la salope, tu vas te faire baiser par quelqu'un d'autre, Gérard. Oh, qui t'en cul. Bah, moi, je t'emmerde. Gérard, je te pose une question. Vas-y. En fait, je voulais te demander, tu me dis, à partir de 99, on va avoir des pièces en euros. C'est pour ça, je le dis, parce qu'elle a pas donné son prénom. C'est pour ça, ouais, c'est pour ça. Ouais, bah, faudrait peut-être préciser. Vas-y, je t'écoute. Excuse-moi, excuse-moi, Gégé. En fait, je voulais te demander, tu vois, par exemple, dans les téléphones, dans les cabines, il y a des téléphones à pièces. Non, non, depuis maintenant, non. Maintenant, c'est des cabines à cartes. Ouais, bah, disons, dans les péages, dans les billards, dans les baby-foot, il va falloir payer en euros, maintenant. Ah bah, oui. Et ils vont faire comment ? Ils vont changer les baby-foot ? Ils vont changer les pièges ? Non ! Les pièges, ils vont acheter des jetons. Non, non, non, non, non. Les pièges, elles seront de la même taille, en fait. Non, non, non, non. Ce qui va se produire, et ça, là, je pense que je suis pas assez informé dessus. Faudrait voir avec des personnes des champs de café que là où ils ont les plus peur les billards et les baby-foot ou autres, donc, pour savoir comment ça va se passer avec les pièces en euros. Oui, alors, Rigaud ? Oui, il y a Benichou, le vrai, sur l'IRC, qui donne un petit sondage sauf presse. Est-ce que l'euro sent mauvais ? 23% des gens ont répondu non. 38,894% disent oui quand il sort de la Lyonnaise. Et 86,70% disent oui quand il sort de la poche de Gérard. Ouais, bah, ça... Merci, merci, Rigaud. Bravo. Le truc, je vois pas du tout... Je vois pas du tout le rapport avec les questions. On est combien ? On est combien, là ? On est à 4, là. On stagne autour de... Ça va, toi, Phil ? Non, on est 4 dans le studio. Toi, t'as ton micro et... Ça tourne autour de 4 500, quoi. On stagne un peu, mais c'est déjà énorme. 4 500 ? Ouais. Ça a monté par rapport à tout à l'heure. Ouais, mais c'est un peu mieux que la semaine dernière, parce que la semaine dernière... Je demande combien on est. 4,5 et 2,0, j'ai dit. 4 528, toi. Ah, bon. Ah, 2 et... On n'est plus que 4 522, maintenant. Non, Gérard, on va faire la conclusion, là, parce que c'est 2 heures. D'accord ? Ben, non, on peut se... Ah, ben non, attends. Si on veut faire l'autre débat, on va jamais arriver à 3 heures. On arrête à 3 heures, donc on va faire la conclusion, quand même. Ben, attends, pour l'instant, c'est toi qui commande. Ben, attends, depuis quand t'es passé chef, toi ? T'es passé chef ? Non, mais je suis pas passé chef, je te demande si on peut faire la conclusion. Non, mais attends, pour l'instant... Eh, c'est moi qui commande. C'est moi qui commande. C'est moi qui commande. Ben, dis ta question. C'est moi qui commande, Gégé. Alors ? Conclusion. Les femmes devraient-elles payer leur mari ? Attends, on va demander à Poussin. Poussin ! Oui ! Les femmes devraient-elles payer leur mari ? Ouais. Pourquoi elles devraient payer leur mari ? Ah, je te pose la question. Ben, non. C'est les mecs qui payent leurs femmes, quoi. Ils les entretiennent. Ah, d'accord. C'est normal, parce qu'une femme, elle est censée faire la cuisine. C'est les mecs qui le disent, ça. Hum ? Alors, voilà, quoi. C'est les mecs qui entretiennent les femmes. Moi, c'est comme ça, quoi. Et tu crois qu'on va continuer à vous entretenir ? Ben, non. Ça rêve, là. De toute façon, maintenant, les femmes, elles sont égales aux hommes. Alors, je sais pas, moi. Ah, non, non, non, non. Attends, Poussin, Poussin. Bon, attendez, attendez, attendez. On va répondre à ces conneries, là, Gérard. Attendez, attendez, attendez. Mais c'est pas macho ? Mais dis-tu que ça, Gérard ? Bon, Poussin. Attendez, Gérard. Gérard va répondre. Attendez. On laisse... On va demander à Tabou. Ouais, je vais répondre juste derrière. Gérard, Tabouret. Ouais, ben, manquerait plus que ça, encore, qu'on paye les hommes. Hum ? Sandwich. Des fois, ouais, si je pouvais payer le mien pour qu'il ferme sa gueule, je le ferais. Attends, qui c'est qui vient de dire ça ? C'est Tabouret, Tabouret. Tabouret. Sandwich. Sandwich est parti, Gérard. Son portable est mort. Ah, ben, d'accord. C'est quoi, là, ses conclusions, Gérard ? Non, non, c'est pas la conclusion, c'est... Gâteau, désespère pas, ça va arriver, hein. C'est la dixième. Ça va bien, alors. En notion ? Ben, moi, je pense que ouais, parce que, vu qu'elle nous font chier toute la journée, ça serait à peu près normal, quoi. Puis, ouais... Attends, attends. Hé, derrière, derrière, vous vous taisez ? Ah, les filles. Hein, Tabouret et Poussin, toutes tes... Ouais, ça me vaut les gueules, un peu. Oh, tu restes poli, tu... Tu restes poli, Robleson. Ouais, on parle pas comme ça aux salopes. Bah, toi, le salope, tu fermes ta gueule. Ouais, excuse. Ok ? Ouais, tu fermes ta gueule, pas de ta mère. Ok, cochonne. Oh ! Bon, Robleson. Ouais. Robleson. Robleson, tu dégages ta conclusion, je la veux pas. Non, mais c'est pas Robleson qui dit... Ouais, tu dégages, salut. Hop, le Robleson, il... Ça sent pas bon, là. Il pue, voilà. Parapluie. Ouais, bah, écoute, moi, je suis plutôt dans le style gigolo, donc me faire entretenir par des vieilles cochonnes de 50 ans qui sont pétées de thunes, ça le fait. Non, mais attends. Attends, attends. Parapluie. Ouais. Hé, les femmes de Bretel, payez leur mari. Bah, justement, moi, je te dis, je prends des vieilles, je leur mets une cartouche une fois dans le mot, elles sont contentes, en attendant, elles m'arrosent deux thunes, et c'est bon. OK. Voilà. Euh, Vasquerie ? Bah, moi, je pense que c'est une bonne idée, parce que c'est toujours nous qui payons tout, le ciné, les sorties, machin, tout ça, et ce serait une bonne idée qu'on retourne et nous fait d'un salaire. Alors, là, moi, je suis pas d'accord avec vous, parce qu'en fin de compte, en fin de compte, les femmes, elles sont là pour nous faire à bouffer, elles sont là pour nous laver notre linge, pour nous entretenir, pour faire la vaisselle et tout. Maintenant... Non, non, non. Non. Qu'est-ce qu'il faut pas ? Tu vas pas te faire sucer par ton chien, c'est bien ta femme qui te suce, donc elles sont là aussi pour sucer. Attends, toi, tu fermes ta gueule, tu vas te faire sucer par une pute. Bah, écoute, c'est logique, non, j'ai ce qu'il faut faire. C'est des femmes. Ouais, mais, de toute manière, jusqu'à maintenant, moi... C'est pas la loco. Alors, moi, la loco, attends, merde, alors, conclusion, ça t'apprendra. À cause de toi, je... Merci beaucoup. On va commencer ta conclusion. Non, non, mais, vous allez voir. Vous allez voir au deuxième débat. La conclusion de l'IRC, Gérard. Ouais, donc, il y a Yankee sur l'IRC. Attends, faut que je la retrouve, parce que je sais plus où elle est passée. Conclusion, pour faire un débat sur l'argent, il faut déjà en posséder. Quand on fouille dans les poubelles, il faudra mieux qu'on fasse un débat sur les déchets domestiques. Ça, c'est pas un débat que je ferai. Et il y a Turpentine sur l'IRC qui dit que ton débat, il avait ni queue ni tête comme toi. Dans ces cas-là, si ça leur plaît pas sur l'IRC, dans ces cas-là, qu'ils arrêtent de dépenser leurs poignons. De toute manière, l'IRC, il faut le payer. Avec de l'argent. Donc, il faut avoir de l'argent. Quand est-ce que c'est la grève, Rigo ? Le 13. Je crois que c'est pour bientôt. Il vient de te dire le 13, on est le 11. Donc, dans deux jours, merde ! C'est bien marrant tout ça ! Un dimanche ! T'as tout compris, t'assures. C'est vraiment mortel. Alors, conclusion, on va demander à Poussin. La conclusion, moi, je dirais que ce débat était très intéressant. Grâce à toi, Gégé, j'en ai pris plus sur l'euro. Puis voilà, merci Gégé. Il n'y a pas de quoi. Tabouret ? Moi, l'argent, j'en ai pas. Donc, je lance un appel. S'il y a un vieux qui est prêt à claquer, qui m'écoute et qui a plein de fric, je suis prête. Non, mais attends, Tabouret. Tu te fous de ma gueule ? Non, mais je crois que tu prends le train. Tu prends le train. Pourquoi ? Parce que tout à l'heure, quand je t'ai posé une question sur de l'argent, tu m'as dit je ne suis pas lycéenne et je travaille. Oui, ben oui, mais je travaille mais je ne gagne pas beaucoup d'argent. Une fois que le loyer est payé, je n'ai plus rien, c'est tout. Moi, je cherche un vieux. A la rigueur, je l'aide à mourir et puis j'ai tout son fric et je m'éclate avec. Je l'aime à mourir, c'est ça ? Oui, c'est ça. Robloçon, il n'est plus là ? Non, tu l'as vu ? Non. Un parapluie ? Oui, ben écoute, l'argent, l'euro, je voulais juste te dire que je ne sais pas si tu savais, mais avant l'euro, ça s'appelait l'écu et je voulais savoir pourquoi la Banque de France et toi vous visez des fixations sur le gerbille et le caca et je voulais te dire que tu as bien une tronche à être payé en monnaie de singe, voilà. Alors moi, je vais te dire une chose, parapluie. Non, mais attends. C'est coupé. Toi, tu mets ça à ton micro, tu m'énerves avec ton micro. Maintenant, tu me remets parapluie à l'antenne ? Oui, je suis là. Ben moi, je vais te dire une chose, parce que ce que tu viens de me dire comme conclusion, ben moi, je t'emmerde. Ah ben, on est deux alors. Ok ? Et je te chie dans le bec. Vas-y. Ok, alors bonne nuit. Bonne nuit. Vas-y, Ray, pour terminer. Ben moi, j'ai trouvé que c'était un débat assez intéressant. On a appris pas mal de choses et je voudrais terminer, si tu le permets, sur une citation de Descartes qui est tout à fait dans le cadre du débat de plus à quoi servirait l'infinie puissance de cet infini imaginaire s'il ne pouvait jamais rien créer. Voilà. Bonne soirée. Ok, bonne soirée à toi. Donc, moi, ma conclusion, il y a peut-être une autre conclusion, non ? Conclusion, Fildar, passe-moi ton stylo, s'il te plaît. Ouais. Jolie conclusion, Hugo. C'est toi qui bosses le mieux. Voilà. Alors, moi, conclusion, ben moi, ce que je peux vous dire, c'est que pour l'argent, donc sur l'euro, donc maintenant, ça va être assez compliqué parce que ça va être pour les personnes âgées, donc ça, ça va être le plus dur. Sinon, qu'est-ce que je pouvais vous rapporter, vous dire d'autre ? Bon, ben, donnez à ceux que... Donnez ce que vous pouvez à des associations que vous êtes sûrs de connaître, mais faites attention. Faites attention parce que l'argent ne fait pas le bonheur. En fin de compte, on croit que l'argent fait le bonheur, et en fin de compte, non. C'est pas avec de l'argent qu'on y est. Avec de l'argent, on peut aller partout dès qu'on en a, mais si on n'en a pas, ben... Qu'est-ce que je peux vous dire d'autre ? Si on n'a pas d'argent, ben, on crève. Et donc, comme j'ai dit, comptez vos amis. Parce que les amis, ça se compte sur les 5 doigts d'une main. 1, 2, 3 ! Ouais, moi, j'en ai que 3. Et comme le remix, il dit, et 1, et 2, et 3, 0. Donc, voilà. Bravo, bravo, bravo ! Alors, on va se retrouver pour le deuxième débat qui va porter sur les jeux vidéo. Et donc, on va s'écouter. La petite fermière du bois avec des oursins dans le cul. Ouais, les Zeldas où il y a... Plus le... Plus le remix de merde. Euh... Alors, toi, quand tu viens là, tu vas prendre une blague dans ta gueule. Oh, mais, Gérard ! Alors, plus le remix de merde. C'est pas ça. Donc, tu me donnes la pochette, Manu, si tu veux. Quelle pochette ? Mais tu vas rien comprendre. La pochette de quoi ? Ça, on ne le met pas tout de suite, ça. Si, si. Non, on ne le met pas tout de suite. Si, c'est le deuxième. C'est ça. Parce que plus le remix de merde. Eh ben, alors, tu me les donnes. Je vais les annoncer gentiment. Eh ben, vas-y, fais le malin. Alors, euh... Vas-y, on va se marrer, là. Vas-y, fais le malin. Alors, le premier, c'est quoi ? Le premier, c'est... C'est plage 10. Plage 10. Alors, plage 10... On va se marrer. Allez. Alors, c'est, euh... Soon... Soon die. Oui, one... D'accord. Donc, en fin de compte, je vous dirais pas le premier donc c'est en fin de compte le premier c'est la première du bois avec des oursins dans le cul et le deuxième pour terminer donc un remix de merde donc c'est pas c'est ça le noir là c'est qui qui pro prodigy avec firest artères donc à tout à l'heure pour le deuxième débat sur fun radio n'oubliez pas ce système s'empêcher == Le débat sur les jeux vidéo == === Contexte === === Les personnages === === Transcription === Et voilà, donc vous venez d'écouter. Fildar, s'il te plaît, tu peux l'annoncer. C'était les Pro DJ avec Firestarter, c'est ce que tu as dit tout à l'heure, Gégé. Ah ouais, mais moi, c'était pas ce qui était annoncé, c'était en principe plus un remix de merde. Ah non, mais on l'a pas mis, parce qu'on a changé au dernier moment la prog. Ah ouais, ben d'accord. Ok, donc vous êtes toujours sur PN Radio, donc au standard, c'est Manu qui vous attend. Ouais ! Donc au 0803 0803. 0800 75 000 à moins que le 0803 le 0800 ne fonctionne plus. Ils essayent les deux et puis ils verront bien. Ouais, voilà. Donc Manu vous attend toujours au standard. Rigaud toujours sur l'internet, prêt à répondre aux questions. Ouais. Donc... Ouais, y'a pas de problème. Et ben... Fildar à la réa, en espérant qu'il va me faire du bon petit boulot comme le premier. J'espère. Donc, il y aura une surprise pour... Ben, pour les auditeurs qui ont l'habitude d'écouter Max le soir. Je vous dis pas quoi, parce que sinon... Bon, sinon, on peut l'annoncer, Fildar ? Ben, je sais pas, je sais pas, c'est une surprise, je sais pas. Ben si, ben, tu l'as, là. C'est... Ça va être dévié pour toi, Sandy, ma chérie. Ça va être fête à fête. Relaxation, ouais. Le pouvoir de la méditation. Mais non, c'est pas ça ! Là, tu l'as, là, là, devant tes yeux. Je te suis dessus, Christo. Mais non, mais non, c'est pas ça. Ça va être... Ça va être dédié pour Sandy, ça va être fête à fête. C'est ça ? Voilà ! Voilà. OK, d'accord. Et comme elle l'adore, on va lui dédier, malgré qu'elle... Ça lui rappelle des souvenirs. Ouais, mais... Non, mais ça lui rappelle pas des souvenirs, Manu. Ben, je sais pas pourquoi, elle l'aime bien. C'est pas le débat, c'est pas le débat. Non, mais elle aime bien, parce que... Depuis qu'elle l'a écouté, bon, ben... Ben, voyons, balance tout, toi. Gérard, on va peut-être commencer à accueillir les auditeurs, parce qu'il est déjà 2h20. Donc, le deuxième débat, donc, il est 2h18. Oui, c'est vrai, il faut qu'on avance. Donc, le deuxième débat porte sur les jeux vidéo. Et pour les jeux vidéo, on va accueillir Monica Latégresse. Salut, Gégé. 19 ans, de Paris. On peut écouter FN Radio sur 101.9 FM. Ouais, salut, Gégé. Donc, bonsoir à toi. Bulbul Gomme, 20 ans, de Marseille. On peut écouter FN Radio sur 103.9 FM. Salut, Gérard. Salut, Philippe Barre. Salut, Manu. Salut. Lara... Lara Graff. Hein ? Lara Graff. Ah, ben, moi, j'ai Graff. Ah, c'est Graff. Donc, 21 ans de Max et Bill. On peut écouter FN Radio sur 95 FM. Bonsoir, Gérard. Bonsoir, Manu. Bonsoir, Philippe Barre. Et bonsoir, Max. Max, il est... Pour l'instant, il est en train de préparer son petit... Ah, j'ai regardé Techno Max tout à l'heure. Ah, ben, c'est bien. Ah, ben, au moins des... J'espère que tout le monde l'a regardé. Ouais. Et l'éditeur suivant, c'est quoi ? Donc, c'est Pierre Mario. C'est Lara Graff. Bonsoir. Super Mario, 19 ans, de... Albertville. D'Albertville. On peut écouter FN Radio sur 97.5 FM. Oui, Rigo. Je voulais juste dire à Super Mario que je suis fan. Ah, OK. Ah, merci. Pac-Man, 23 ans. Oui, bonsoir, toute la populace. Salut. On peut écouter... On peut écouter FN Radio sur 101.9. Yes, c'est pareil. OK. Et Sonic, 19 ans, de Tokyo. Oui, j'appelle du Japon. J'ai un décalage. Je vous écoute sur Internet. Et il est 8h du matin à Tokyo. Ah, OK. Il fait beau, non ? Non, il se clope. Alors, donc, que peut-on faire avec des jeux vidéo ? On va demander ça à Monica la tigresse. Ben, qu'est-ce qu'on peut faire ? Ben, on peut jouer avec. C'est une bonne chose. Ben, en principe, des jeux... En principe, les jeux vidéo, c'est pour jouer avec. Ben, qu'est-ce qu'on peut faire avec ? C'est pas pour se branler. Ben, on peut... Ça passe longtemps, quoi. On se défoule dessus. Quand on a passé une journée de travail, on est stressé et tout. Et le soir, quand on rentre, une partie de Tekken... Ah, une partie de Tekken ! Attends... Une partie de Tekken ! Non, mais... Ah, non, mais là... Non, mais là... Vraiment trop con, hein. Là, t'es vraiment trop conne, hein. Ouais. Là, t'es vraiment une tigresse, hein. Ben, c'est une partie de Tekken. Allez, c'est bon, va te coucher. Oui, ben, ça sert à se défendre. Ça sert à se défendre. Et puis, ça sert à se défouler quand les gens nous prennent la tête. Parce qu'on fait des petits Mortal Kombat, des choses comme ça. Voilà, tu peux répéter, parce que là, j'ai... Je te dis que ça sert à se défouler quand il y a des gens qui t'ont pris la tête. C'est un Mortal Kombat. Non, mais celui qui a une... Il y en a un qui est en train de jouer aux jeux vidéo, en plus, c'est pas cool. J'ai l'impression que c'est... Tiens, ça, je reconnais ce... Celui-là, je l'ai pas, je suis jaloux. Non, mais moi, je le reconnais, parce que c'était la première fois que j'ai connu Max. Oh, ta gueule derrière ! On va demander à l'oragraphe. L'oragraphe. Ouais, ben, je sais pas qui c'est qui m'a écrit ce nom-là, mais je prononce comme c'est marqué. Allez ! Ouais, donc, normalement, c'est fait pour se défouler, mais aussi, si t'as la table qui est bancale, tu peux le mettre sur le pied. Ah, sur le pied ? Ouais, sur le pied de la table. Comme ça, ça te fait une table droite. Ah, une table droite ? Ben, la boîte. La console. La console, tu la mets dans ta PlayStation, et puis, la boîte, tu la mets sous le... sous le pied. Ouais, d'accord. Attends, je regarde vite fait. Oui, il y a Oxyd sur IRC qui te demande si c'est vrai que Sandy a fait des jeux vidéo quand elle jouait avec ton joystick et que toi, en même temps, t'appuies sur tous ses boutons. Et c'est toujours Game Over. Alors, lui, je lui réponds même pas à la question. Ça vaudra plus... Ça ira plus vite. Super Mario. Et sinon, il y a Yankee qui te demande si c'est vrai que Tom. C'est clair. C'est un nouvel manette de jeu, ça. C'est clair, ouais. Euh, je réponds même pas à des questions pourrites sur l'Internet, parce que là... Mais qu'est-ce que c'est pourrite ? C'est pourrite. Tes questions, Rodrigo. Non, non, mais... Non, mais c'est pas les miennes, non. Non, non, mais... Les gens d'IRC posaient des questions qui... Qui mettent en valeur robot, quoi. Merde. Qui ont un rapport... Posez des questions qui ont un rapport avec des jeux. Filder, pour l'instant, tu t'écrases, parce que... Allez, mortel débat. On y va. Euh... Super Mario. Bah, moi, je pense que les jeux vidéo, ça se sert déjà pour se défouler. Puis en plus, on peut se détendre surtout avec, quoi. Comment ? On peut se détendre avec. On se détend, quoi, le soir. Parce que parfois, c'est relou qu'on rentre le soir, on est bien vénère et tout. Alors, on se détend. Voilà. Et par exemple, si t'as... Si t'as pas de jeux de vidéo, si t'as pas de PlayStation, tout ça, c'est quoi ? Comment tu fais ? Bah, je sais pas. Tu te débrouilles. Tu m'as de quoi ? Tu t'es fait un pote. Qui en a eu ? Comment ? Tu tapes sur ta femme. Oh, non. Mais attends. Alors, là, qui c'est qui vient me dire ça ? Les filles. Non, mais dis ton nom, celle qui vient me dire ça. T'as le courage de dire ton nom, mais... Pétasse, là, qui vient me dire ça ? C'est quoi, Sam ? Oh, là, là, putain, j'aime bien... Elle vient pas de fou, hier. J'aime bien les salopes, là, comme ça. C'est pas moi. Bon, mais attends, c'est pas moi, c'est... C'est pas moi, c'est pas moi. Mais non, mais c'est jamais personne. Mais allez, arrêtez vos conneries, là. Non, non, bah, c'est pas moi. Non, il y en a trois. Moi, je suis respectueuse. Euh, Pacam. Non, Pacman. Pacman. Pacman. Pacman. Pacman. Écoute, une console, ça te sert, bah, par exemple, si t'es chômeur ou t'es étudiant et qu'il sèche les cours, déjà, ça t'occupe. Et puis, deuxièmement, ça peut aussi te servir à mettre une branlée à Tekken 3 à des standardistes dans une radio, quoi. Ouais, bah, alors, Pacman, je vais te dire une chose, que si c'est pour me dire des conneries comme ça sur... Excuse-moi, Gérard, j'ai une rectification à faire à des gars qui s'occupent de l'IRC et des branlées. Merci. D'accord. Attends, Gérard, moi aussi, j'ai Internet, j'ai un message IRC, je peux te le lire ? Non. Non, non, non, non, non, non, non, non, il y a pas de message à lire. Hop, terminé. Ah, moi, j'en ai un, par contre. Ouais. Il y a un truc qui dit qu'il y a un jeu où on est camionnaire et on gagne des points en faisant des bouchons et les ennemis, c'est des plaques de verglas, ça s'appelle Super GG Bros. Ah, bah, lui, je l'emmerde. Euh, Sonic. Euh, oui, en fait, moi, effectivement, les jeux vidéo, ça me servait avant, quand c'était des cartouches, à caler mes meubles. Au bon cas, je mettais les cartouches, mais maintenant, avec les CD, c'est galère. Donc, j'ai décidé de me reconvertir en pirate, je grave des CD, je me fais de la tuerie. Oh, ça s'interdit, ça. Euh, Sonic. Attends, tu demandes combien tes disques ? Sonic ! Sonic ! Sonic ! Je suis intéressée. Euh, terminé pour lui. Hop. Allô ? Bon, euh, puis... C'est pas moi, hein. Eh, là, ça... Manu, tu gères un peu, là. Bon, Manu, euh... On va voir que c'est bien du standard. Hop, je coupe. Je remets, je coupe. Tu vois ? Gérard ? Sur l'IC, il y a des V1 qui te demandent comment on fait pour graver un CD, justement, c'est avec un marteau et un bureau. Ouais. Ouais. Gagné. Bah, je peux peut-être répondre. Ouais, doit-on être intelligent ? Attends, moi, je m'y connais, je peux peut-être répondre. Encore les deux. Allô ? Donc, doit-on être intelligent pour jouer aux jeux vidéo, c'est ça ? Euh, Fuldard ? Oui ? Pour l'instant, tu fermes ta gueule, c'est moi qui pose les questions. D'accord. Toi, t'es payé pour faire l'arrière. Gérard, tu t'es en train de faire la gueule, t'allais pas la poser, il a bien fait de la poser. Ouais, mais c'est pas lui. De toute manière, c'est moi qui pose les questions, c'est pas lui. Alors, doit-on être intelligent pour faire de la Game Boy ou autre ? Gérard ? Comment la pétasse, là ? Ouais. Y a Fuldard de mon sur la tête. Non, non, non, la pétasse, là, qui vient de dire que je sais pas parler, tu peux dire ton nom, là ? Voilà, Game Boy, hein. Bon, allez, hop. Gernier pour Rég. Allez, hop, celle-là. Gérard, Gérard. Deux secondes, il y a une question internet. Gérard ? Ouais, une question internet. Tu me prends quelqu'un d'autre, hein, parce que là... Gérard, y a Chandler, le vrai, qui te demande si tu fais de la magie noire avec ta... Vaudou 2. Non. Doit-on être intelligent pour faire de la... Oh, ça y est ! Gérard ? Ouais. Oh, oh, oh. Hé, Fuldard ! Hé, Fuldard ! Hé, Gérard ! Hé, qu'est-ce que tu fais, là ? Tes mains, tu les mets là. Gérard, t'as déjà la Game Boy ? Hein, parce que là, c'est le jeu, là. T'as le cadeau. Tu vois que c'est pas lui, arrête de... C'est les éditeurs. C'est les éditeurs. Bon, hé, Manu ! C'est bon, ils sont coupés, là, on y va, on y va, on y va. Alors... Donc, on m'a demandé à Monica, la tigresse. Ouais. Ouais, ben moi, je pense que... Gérard ? Ta gueule, derrière, pour un second ! T'as déjà joué, là, Gérard ? Monica, réponds, vas-y. Ben, je réponds. Donc, moi, je pense que, oui, faut être intelligent, hein, parce que ça montre de l'esprit et de la réflexion. Et voilà, quoi. Quand même. Ouais, on va rajouter, quoi. Ok, euh... Buble... Buble-gum, là. Double-gum. Ouais. Ben, non, moi, je pense que un QI de 30, ça suffit. Il faut juste appuyer sur deux boutons, donc c'est pas forcé. Tout le monde peut le faire. Oui. Qu'est-ce qu'on veut dire, c'est ? Ouais, il y a Yankee, le vrai, qui te demande si tu sais jouer à la console, toi. Non. Non, donc... Là, euh... Donc, il faut bien être intelligent pour jouer à une console, alors. De toute manière, il y en a un qui est super intelligent parce qu'il a gagné à la coupe. Il s'appelle Manu. Ah, mais c'est parce que j'étais pas là. Sans préciser. J'étais pas là, c'est bon. Merci, j'ai... Ah, c'est... Non, j'étais pas là. Si j'étais là, c'est moi qui aurais gagné. La coupe de TKL 3. Ah, ouais ? Ben, si, t'es... J'étais pas là. Mais si, t'étais là. Ben, ouais, ça s'est passé dans les studios. Me dis pas que t'étais pas là. Enfoiré. Ben, ouais, t'étais là, Hugo. Voyons. Euh... Là, là, là, euh... Là, Croft. Ouais, Croft. Ouais, vas-y. Ouais, ben, moi, je pense qu'il faut pas être intelligent. Avoir le QI d'une mouche, tu peux jouer à ça, hein. Et juste appuyer sur deux boutons, comme ça. Comment ? Ouais, ça, c'est Monica qui parle, hein. C'est pas moi. Ouais, ben, alors, Monica, tu t'écrases. T'en as rien dit, Monica, hein. Mais si. Je crois que c'est moi, peut-être. Le raccroche. Ouais, ça y est, j'ai répondu à la question. Faut écouter, hein. J'ai dit qu'en fait, il fallait avoir le QI d'une mouche pour jouer à ce jeu. C'est tout. D'accord. J'ai pas appuyé sur les boutons. Euh, Super Mario ? Moi, je pense que ouais, parce que parfois, il y a des notices, quoi. Elles sont tellement énormes qu'il y en a, ils peuvent pas comprendre, quoi. T'es intelligent, pour toi ? Ben, ça dépend pour qui, ouais. Des fois, la notice, elle est écrite en anglais, hein. Ouais, des fois, même à l'écran japonais, parfois. Ouais, c'est ça. Prends-moi pour un con. Un con. Ah, mais non, c'est vrai, hein. Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! Arrête ! Et t'as le double son, pildard ! C'est une simulation virtuelle de soirée de richesse de la loco. Alors toi, c'est terminé pour toi. Au revoir aussi ! Au revoir aussi ! Salut ! Au revoir ! Alors, Gérard, à la place de Lara Croft, on accueille Paul Fénix. Bonsoir. Salut, Gérard. Salut, Paul Fénix. Salut. Salut. Et à la place de Pac-Man, on accueille Fantôme Glouton. Salut à tous. Salut. Salut. Manu ? Oui ? J'espère que c'est pas les mêmes. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah non, c'est pas les mêmes, c'était une meuf, t'as un mec. Ah, on se met le petit cadeau. Ouais. Dédié pour Sandy. C'est ça la fête ! Et on se retrouve tout de suite après aux heures 800, 308, 5000, 0800, 70, 5000. Et toujours lire cww.fr. Et vous êtes toujours sur Fond Radio, il est 2h39. C'est ça la fête ! Tous ceux qui ont l'habitude d'écouter Max, le Star System, le soir, on vient de vous mettre fête à fête. Donc, vous êtes toujours sur Fond Radio. Donc, vous pouvez nous écouter sur 101.9 et il est 2h42. Donc, Manu vous attend toujours aux 0800, 308, 5000. Excuse-moi Gérard, du coup, à la place de Sonic que t'as viré tout à l'heure, on accueille Zelda. Ah ben, tu me... Voilà. Ça te dérange de me faire une fiche ? Ouais, ouais, ça me fait chier. Ça te fait chier ? Ouais, ben ouais, tu me demandes, je te le dis. Ça te fait chier ? Ben, pas moi. C'est ton butier, c'est... Ouais, je sais, je sais. Tu connais les toilettes de Fond Radio ? Ouais, ouais, ouais. Bon. Oui, Rigo ? Non, je voulais juste dire à Zelda que je suis fan. Ah, ok. Alors, donc, vous venez d'écouter Fête à Fête et vous êtes toujours sur Fond Radio. Donc, 2h43 du matin. Donc, Manu vous attend au standard aux 0800, 308, 5000. Tu l'as déjà dit ça, Gérard. On est débat de Gérard du jeudi soir. Disons, on est vendredi. Donc, le débat, ça porte sur les jeux vidéo. Et on récupère donc... Monica, la tigresse. Salut, Gégé. Rebonsoir à toi. Ouais. Double gomme. Salut. Paul... Paul Fénix. Paul Fénix. Excuse-moi, j'étais en train de me faire une partie de Super Bulldog Mister 3. Ouais, ben, Super Bulldog Mister 3. Il t'emmerde. Attends, je suis contre le son de dinosaure, là. Ouais, ben, son de dinosaure, tu dégages. Ok. Oh ! Calme-toi, lui. Ça a été trop vite. Là, ben, lui, ça a été tout le visqueux. C'est la lumière. Il faut qu'il prenne les proutes magiques, là, pour dégommer son de dinosaure. Ouais, ben, son de dinosaure, pour l'instant, tu la laisses. Elle est en train de nous enregistrer, là, la peau. Ah bon ? Ouais. Elle pourrait un peu... C'est pas la grâce de vous, espèce de filiaste, là. Ouais, ouais. Ouais, elle remue pas trop bien. Oh, t'as encore une place pour elle. Ah non, hein ? Oh, si. Il n'y a plus de place, là. À la place de Paul Romix. Non, non. Bah, ouais, bien sûr, on va dégager quelqu'un d'intéressant pour quelqu'un de... Ouais, et alors ? Je vais te dire un truc, c'est que tu nous as saoulés toute la journée pour pas avoir d'habituel, alors il n'y a pas moyen. Ouais, ben, attends, on a bien eu Tony au premier débat. Ouais, mais il s'est fait garter. Ouais, ben, tiens. T'es pas encore là, toi ? Ben, non, c'est pas Tony. C'était pas Tony, ça. Super Mario. Oh, tu vois, quand je demande les noms, vous répondez ou pas ? Bon, d'accord. Super Mario. Ouais. T'es là ? Ouais. T'as répondu ? Ouais. Ouais, ben... Bon, d'accord. Fantôme Glouton ! Il est vieux, Super Mario. Ouais, celui-là, il a... Putain ! Oh, les grosses sanguines. Hé, les grosses sanguines, attends, merde, toi, salope ! Oh, là, là. Ah, mais les grosses, c'est celle-là, là. Ah, ça va mettre, avec le tampon vert. Attends, c'est pas moi le standard, hein. C'est toi qui gère, Manu, hein. Merci. Merci, Manu. Fantôme Glouton. Eh, celui-là. Oui, t'es gaffe, c'est Glouton qui attaque. Bon, alors, tu dégages, toi. Hop, terminé. C'était pas lui, c'était Zelda, je l'ai dégagé. Allez, hop. Zelda. Non, je viens de te dire que c'était lui qui avait dit ça. Regarde, Fantôme Glouton, il m'a dégagé, Zelda. Ok, alors... Donc, quatrième question, parce qu'on va faire vite, là. Alors, d'après vous, les jeux... D'après vous, jouer à un jeu vidéo est-il réservé aux garçons ? On va demander ça à Monica. Non, non, non, non, non. Non, non. C'est autant réservé aux filles qu'aux garçons, je suis désolée. Et voilà, quoi. Je vois pas pourquoi ce serait réservé qu'aux garçons, après tout. Ouais, mais de toute manière, il y a plusieurs parties. Hugo ? Oui, sur IRC, il y a Sardine qui te demande comment on fera pour compter les points en euros sur les consoles. Toi, je sais pas. C'est n'importe quoi, Hugo. Par contre, par contre, par contre... Oh, la salope, là, qui est incarnée comme une pute ! Arrête d'être vulgaire, Gérard. Ça sert à rien. Ouais, ben, toi, tu peux mieux... Ah, oui, j'ai pas. Manu... On peut rien faire. On peut pas faire un débat potable avec toi, Manu. Non, non, mais je pense que ça va aller vite fait. Hugo, on est combien, là, sur l'IRC ? Ben, on a perdu, quand t'as gueulé un peu trop, on est à 3852. 3852 ? C'est pas terrible, hein. Tu notes pas ? 3852. 3852. Allez, pas trop vite, quand même. En plus, je me suis renseigné par quelqu'un. Comment ? Tu vas les donner à Jean Donnader, les numéros ? Non, non, non. Je me suis renseigné par une personne qui peut avoir aussi Internet. Sur son tatou ? On peut avoir plus de 6000 personnes sur l'Internet. Mais ça dépend de l'appareil qu'on a. C'est pas le thème du débat. OK. Alors, Monica. Oui ? On m'accueille, pardon, à la place de Zelda. Link. Bonsoir. On s'accueille tous les jours. Gérard, deux secondes. Link. Oui, bonsoir. Ouais, je suis fan. Ouais, je te remercie. Je t'en remercie. C'est vraiment assez bio. Euh, oui, mais moi, par rapport au... Ouais, je pense que... Oui, je suis les filles aussi, pas que je joue à la vidéo. Eh, bonsoir, quand même. Bonsoir. Non, mais... Non, mais comment tu fais que je me concentre avec tous ces gens qui taisent autour de moi ? C'est vrai que c'est pas évident. Manu, tu pourras gérer un peu. Non, mais c'est bien. Là, je crois que le deuxième débat, il va être vite terminé. C'est n'importe quoi, Gérard. C'est vrai. Je t'écoute, Luc. Link. Link, mais moi, j'ai déjà répondu. Je t'ai dit que oui, les filles pouvaient effectivement jouer aux jeux vidéo. C'est les filles qui apprennent les consoles roses et les mecs les consoles bleues. C'est des consoles pour vie et des consoles pour garçons. C'est pour les filles, quoi. Ah, ouais. C'est une équivalentité. Super Mario ? Bah, moi, je pense que ouais, mais ça dépend des jeux, quoi. Ouais, mais tu peux préciser ? Bah, les jeux trop violents, quoi. Il vaut mieux que ça s'arrête. Il vaut mieux laisser des jeux de boysband aux filles. Ouais. C'est moi qui suis en temps. C'est moi qui suis en temps. Voilà. OK. Paul Fenix ? Non. Ouais. Je suis encore là. J'ai vu que Manu m'a calmé au standard. Je voudrais que tu me répètes la question, s'il te plaît, parce que j'ai pas pu entendre. Alors, d'après vous, un jeu vidéo, est-il réservé aux garçons ? Euh, je pense que oui, parce que j'ai jamais vu de console rose ou quoi que ce soit. Euh, si. Non, non, non. Bah, tu peux le reprendre. Ouais. OK. Une petite peinture ou de la gouache. Tu peux reprendre ta peinture. Voilà, OK. Euh, Bubblegum ? Euh, ouais, bah, moi, j'ai un jeu vidéo, donc je joue avec. Ouais, ouais, j'ai une manette ergonomique qui nous permet de faire plein de solutions et plein de sauts périlleux en arrière. Euh, Monica ? Oui ? Oui, Brandy ? Hein ? Oui, bravo. Oh, il a une licence. Il est fan, hein ? Vous laissez répondre, les gens, s'il vous plaît. Merci, Monica. Tu réponds à la question. Quelle question ? J'ai déjà répondu, j'ai... Ah bon, bah, alors, on va passer à la seconde. Eh, Fantôme Glouton, j'ai pas répondu. Quoi ? T'es encore là, toi ? Bah, oui, c'est Zelda qu'on a dégagé tout à l'heure. Voilà. Et Yannick, elle a... Merci, Rigo. Euh, pour gaucher, alors, ça, faudrait qu'on pose la question à un gaucher. Y'en a au Japon. Y'en a au Japon. T'es gaucher, non ? Non, du tout. Ah, merde. Non. Merde, non, ça, c'est pas... Et toi aussi, si elle est tout bitrée, mais ça n'a rien à voir. Ou alors, toi, tu t'écrases. Ouais, Gérard ? Quoi ? Fantôme Glouton, je continue, parce que je parlais quand Rigo m'a coupé. Bon, attends, pour l'instant, si Rigo, il vous coupe, c'est parce qu'il y a des questions IRC qui sont plus importantes que vos conneries. L'IRC, c'est un véhicule prioritaire, je sais. Voilà. Il y a des jeux pour les filles. Moi, j'ai une petite sœur. J'ai une petite sœur, elle joue aussi, ouais. J'ai une petite sœur, elle joue à Salope Fighting Beach 4. C'est un jeu de combat pour filles, quoi. Y'a que des filles dedans. Tu me les vires, celui-là, Manu ? Tu me les vires ? Pour vous jouer... C'est un Game Boy ? Non, mais il est mort, là. Il a Game Over. Vas-y, on y va. Game Over. Pour vous, jouez-vous à la Game Boy ? Est-il un passe-temps ? On va demander à Monica. De quoi ? De quoi ? De quoi ? Jouez-vous à la Game Boy ? Est-il un passe-temps ? Ben oui, je pense que oui. Ben, tu peux préciser ? Ben oui, c'est un passe-temps. Un jeu vidéo est un passe-temps. Non, mais tu peux préciser ? Ben, préciser comment, Gégé ? Précise ton nom. Non, mais tu précises ? Ton nom. Ton nom ? Ton numéro de téléphone, ton adresse, ta carte de crédit. Oh, tiens, tu permets ta gueule ! C'est un passe-temps, je crois plutôt que c'est un passe-temps. Ou un passe-partout. Voilà, un passe-partout. Gérard ? Oui ? Y'a Turpentine qui te demande si tu connais... Ah ouais, j'en ai pas, il a dit que les autres comme toi, Gérard. Mais vu que tu connais la Game Boy, est-ce que tu connais la Game Girl ? Non. Pulder, t'arrêtes, s'il te plaît, quand on parle. Tu n'as rien fait, Gégé. Donc, tu me disais quoi, Rigo ? Je te demandais si tu connaissais, comme il y a la Game Boy pour les garçons, est-ce que tu connais la Game Girl ? Non. Non, pas du tout. Et pourquoi ? Il n'y a pas de pourquoi. Donc, eh... Bubu le gomme. Ouais. Moi, non, je trouve que c'est une perte de temps, plutôt. Je préfère jouer avec mon tamamochi. C'est pas un jeu vidéo, ça ! Non, mais attends ! Eh, les tomatochips, là, c'est le truc... Les tomatochips, là ! C'est n'importe quoi, ce que tu dis. Bah, non, c'est bidon. Ah, ok. Bah, moi, tu perds pas ton temps, comme quand tu joues au Game Boy. Bah, ouais, mais de toute manière, si t'as de l'argent à foutre là-dedans, en l'air, tu peux, hein. Mais pas en l'air, je le fais en mon tamamochi. Bah, ouais, mais de toute manière, il faut bien lui donner à bouffer, ton tomatochi. Bah, oui, mais bon, ça coûte pas cher en bouffe, un tamamochi. Et quand il meurt, tu fais quoi ? Bah, quand il meurt, je rachète un autre. Et puis, attends, la thune dépensée, c'est n'importe quoi. Paul Phoenix. Tu rires. Avec Rigo. Bah, allô ? Attends, attends. Bubblegum ? Oui ? Tu veux retourner sur l'IRC ? Mais non, c'est une blague. Parce que sinon, y'a pas de problème. Non, mais elle l'a pas, IRC, comme elle fait chez elle. Tu demandes à Manu, et puis c'est bon. Il t'en achète un. Il t'achète un Internet, Manu, tu demandes, il est sympa. Pas de problème. Gérard, y'a Ziwi qui te demande si tu connais la console Neo-GGO. Non. Paul Phoenix. Ouais, c'est un passe-temps. Je voudrais savoir si, d'ailleurs, toi aussi, t'as un passe-temps. Si tu connais la Game Boy, mais est-ce que tu connais la Game Boy ? La Game Boys. Non, mais... Avec le jeu Super Penetrator 4. Tu connais pas ? Non. Tu peux préciser le fond de ta pensée ? En tout son cul. En tout son cul, toi, salope. Voilà, salope. Et hop, terminé. Moi, de toute manière, 2h53, dans 7 minutes, j'arrête. Ok, Michel. Super Mario. Moi, ouais, je pense que c'est un passe-temps, parce que, franchement, quand on a rien à foutre, c'est bien agréable d'avoir un truc pour s'occuper, quoi. Ouais, t'as qu'à toucher la cliquette, quoi. Ouais, mais bon, ça, c'est différent, quoi. C'est plus rapide, quoi. T'as qu'à toucher la cliquette, quoi. Voilà. Gérard. C'est pour ça que j'ai arrêté, quoi, à force, quoi. J'ai une info du vrai Yankee sur l'IRC. Le jeu de l'année, c'est Carmine Affion sur la console Gris. Carmine Affion. Il est pas mal, ce Yankee, je l'ai vu. Il tue, quoi. Je crois que c'est le jeu numéro 1. Qu'est-ce qu'il y a, Gérard ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Mais arrête ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Regarde ! Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? Qu'est-ce qu'il y a ? C'est plus fort que ça, le DG, merde. Dernière question. Ah bon ? Pas... Pas... Fais-le exprès, toi ! Mais attends, c'est pas moi qui fais la technique, hein. Ils sont là-bas, ils sont en rue Bayard. Ils sont en rue Bayard, j'ai pas rien, hein. Dernière question. Genre, avant la dernière question, il y a Turpentine sur l'IRC qui te dit que, vu que t'as jamais joué à la Game Boy, elle va t'envoyer une Game Goal. Une Go-Goal. Ah bah, c'est bien. Une Game Goal. Une Go-Goal 64. Ouais. T'en passes pas. Sur l'IRC, il y a... Tu le veux dans la gueule, là ? Tu me tiens, ça ? C'est un quoi ? Une Go-Goal 64. Mais viens vérifier, c'est un truc d'allumé. Alors, attendez. Attendez, attendez deux secondes. Gérard va vérifier si c'est un truc d'allumé. Ah ouais ? Ah ouais ? Ça, c'est ce que c'est ? C'est le micro. Ça, qu'est-ce que tu veux que j'allume ou que j'éteigne ? C'est allumé... Tu comprends pas, hein ? Gérard ? C'est vrai que c'est un truc d'allumé. Non, c'est... Terminé ! Non, mais attends, t'as posé trois pauvres questions. C'est quoi, le débat ? C'est quoi, le débat ? Si vous plaît, les auditeurs. Si vous plaît, les auditeurs. Gérard va poser la dernière question. Gérard va poser la dernière question. D'accord, on écoute. On écoute, Gérard. Comment ? On écoute. Attends, celui qui vient de poser une question qui dise son nom. Non, je l'ai coupé parce que c'était pas bien. Et la dernière question. Avez-vous déjà participé à un championnat de Game Boy ? Oui. C'est quoi, ce travail ? C'est quoi, ce bordel ? C'est quoi, ces gens ? Et la laine avec le micro ? Vous répondez. Qui répond à la question, Gégé ? Personne. Monica ? Je vais être brève, Gégé. Non, j'ai jamais participé à des championnats de Game Boy. D'accord. Gérard, tu crois que c'est intéressant ou pas ? Pour l'instant, c'est pas toi que je m'adresse. Sur IRC, on me dit que sur Street Fighter 2, pour avoir les turbos de 10 étoiles, il faut faire bas, R, O, L, Y, B, X. Ah. C'est pas vrai, il faut les relancer des petits mains aussi. T'as oublié R2, hein. R2, voilà. Bon, enfin, bref. Je parlais du 2. Du 2, pas trop mieux. Pas du Alpha, machin. Du Alpha, c'est pas vrai. Double Gun ? Ouais. Non, moi, j'ai jamais participé à un championnat de Game Boy. Par contre, j'ai gagné un championnat de T-shirt mouillé. D'accord. Où ? Où ? À la mer. Ouais. Paul... Paul Phoenix ? Ouais, ouais. J'ai jamais participé de ma vie à un truc qui a... Bon, en conclusion, il y a plus de... Il y a plus de questions. Ouais. Laisse-moi répondre. Ouais, je... Gérard, je voudrais... Putain. Mais qu'est-ce qui... Mais qu'est-ce qui... Gérard, je voudrais répondre. Vas-y. D'abord, je voudrais dire... En fait, je comprends pas pourquoi toutes les questions tournent autour de la Game Boy. J'ai jamais participé à un championnat de Game Boy. Et je voudrais qu'on réhabilite ce soir la Master System. Non, mais maintenant, c'est fini. Mais non, la console a taré. Laisse-moi parler. Mais la Master System... Conclusion ! Je peux conclure, Gérard ? Ouais. C'est qui ? C'est qui ? C'est Link. C'est Link. Ouais. Je voulais d'abord dire que c'était un débat un peu moins intéressant que le premier, mais qu'on a quand même appris des choses. On a déjà beaucoup appris sur les jeux vidéo. Et je voudrais aussi... Tu peux même dire ce que t'as appris sur les jeux vidéo. J'ai appris que Gérard utilisait parfaitement le vocabulaire du jeu vidéo. Et que c'était toutes les nouveautés. D'accord. Et j'ai appris également que mon jeu allait sortir demain. Sortira demain, Link, quoi ? Ouais, je sais, ouais. Ah, c'est de la bonne chance. Conclusion ! Conclusion ! Conclusion ! Je vais parler, là. Il disait, la plénitude n'est que ce que l'homme recherche. Ok. Bon, Gérard. Ouais. C'est qui ? C'est qui ? Paul Félix. Ok. Je vais conclure en disant Game Over. Et aussi, je vais donner un petit tips pour le jeu Super League Mystery 3. Non, non, pas de marque. Pour buter le mode de fin, il faut lui envoyer un petit kiss puant dans la gueule. Et ça marche à tous les coups. Bravo, Manu. Merci, Manu. Merci. Euh... Qu'est-ce qu'il nous reste ? GG. GG. Et le fantôme glouton. Ouais. Ouais, alors, en conclusion, je veux dire, je suis déçu parce que t'as pas posé beaucoup de questions. Et je voulais dire que sur les jeux vidéo, est-ce que c'est vrai que toi, t'es comme la Nintendo 64, c'est-à-dire 64 bits par minute ? Alors, moi, je sors meilleur. Bah, attends, je te demande. Super Mario. Bah, la conclusion, moi, il y a un pote qui m'avait dit que tes dévats étaient nuls. Mais bon, en fait, non, c'est pas vraiment nul. C'est carrément pourri, quoi. Mais bon, c'est pas grave, quoi. Paul Fenix. Ouais, bah, on va en faire une deuxième, pendant qu'on y est. J'ai pas trop quoi dire, moi, j'ai tout balancé, donc... Bon, ça... Un autre tips, non ? Ouais, bah, moi, je voudrais dire que j'aimerais bien qu'il fasse partie d'un des personnages de Street Fighter, comme ça, je pourrais t'en parler ta gueule. Bah, moi, c'est ton merde, connasse. Euh, Monica. Je me suis sentie trop concernée par ce débat. Mais je voulais dire que si un auditeur se le m'appelait, y'a pas de problème. Enfin, pute. Ok. Connasse. Ok, bah, c'est bien. Régo, conclusion ? Elle était jouée à Insultator 3. Euh, conclusion ? Alors, conclusion de l'IRC, y'a Turpentine qui dit que ton débat, il avait ni queue ni tête comme toi. Y'a... Oh là là, parce que ça va trop vite, là. Entre les mecs qui parlent d'argent ou alors qui n'en ont pas, et ceux qui parlent de console, enfin, bon, là, j'arrive pas à suivre. Il est temps que GG s'achète une console avec son argent de poche en euros pour pouvoir connaître les règles du jeu. Et sinon, si les consoles n'existaient pas, on a quand même GG pour foutre la merde sur l'IRC. Et combien de personnes ? Douze. On en a perdu quand t'as gueulé. Ouais, là, on est descendu sous les 2000, je préfère pas en parler. Non, bah, ça me fait une dalle. C'est lamentable. Donc, conclusion, bah, c'est... Gérard, sinon, y'a le vrai Arnette sur l'IRC en conclusion, il dit que tu pues la merde. Alors, moi, je dors merde. Moi, je dors merde et j'y suis dans... Oh là là, c'est dégueulasse. Donc, alors, tu me casses pas les couilles. Bah, c'est tout ce que j'ai à lui dire. Donc, vous allez retrouver Rousseau pour la... Ta conclusion, Gérard, ta conclusion, quand même. Ma conclusion, c'était de la merde parce que tu pues ta merde toutes les semaines, comme d'habitude. D'accord. Manu, pour un sens, ça pouvait aller. Y'en a qu'un qui fait bien son boulot. Y'a que Rigaud qui sait travailler. Y'a que moi. Y'a que lui. C'est incroyable. Y'a que lui qui arrive à nous faire quelque chose. Donc, maintenant, vous allez retrouver Rigaud. Attends, attends, j'ai une conclusion sur l'IRC. Deux secondes. Rigaud, Ré va te donner du plaisir. Qu'est-ce que ça peut te foutre, toi ? Toi, t'es vraiment le pédé. C'est tout ce que j'ai à te dire. Il te fait quelque chose. Y'a que lui qui fait bien son boulot. C'est vrai. Et y'a Ziwi sur l'IRC qui conclut en disant que les jeux vidéo, c'est beau et que GG, t'es un chier. C'est bien. Donc, qu'est-ce que j'ai à vous dire d'autre ? La semaine prochaine, les débats... On sait pas. Non mais, Pildar, quand t'auras pris une idée connerie, tu me le diras. Donc, maintenant, vous allez retrouver Rigaud pour la nuit sans pub. 6h-9h. C'est moi, là, je fais la nuit sans pub. Rousseau, pardon, pas Rigaud. Qu'est-ce que je dis ? Rousseau pour la nuit sans pub. Demain matin, 6h-9h. Max, et après... Merde ! La grillantaine, elle est belle. Tu fais quelle heure, toi ? Tu fais le décrochage vocal, non ? Oh là là ! La nuit sans pub, avec Rousseau. Sans pub, y'a pas de pub cette nuit. Gérard, y'a quand même une conclusion du vrai muldeur des X-Files. Il dit qu'il aurait mieux fait de jouer à sa console que d'écouter ton débat de merde. Merci Rigaud, tu nous donnes du plaisir. Alors, donc... T'as donné du plaisir. Vraiment, donc... Là, vous allez retrouver Rousseau pour la nuit sans pub. 6h-9h. Barthes. Et 22h, Max, pour la libre-antenne avec Jean Deneuver. Donc, vous pouvez appeler... Dès maintenant, appeler dès maintenant. Appeler dès maintenant pour Jean Deneuver. Appeler dès maintenant pour la... Manu reste jusqu'à 6h. Pour la libre-antenne, donc, demain soir. Et moi, je vous retrouverai la semaine prochaine, si tout va bien. On a le temps, on a le temps. Je voulais juste dire à tous les auditeurs qui voudraient encore aller sur l'IRC, y'a Sandy qui vous attend, la vraie. Non. Sandy Amatora à la maison. Bonne nuit, Gérard. Le disque pour skitter, tu connais pas ? Ah, non. Zintonic, tu connais ? Euh... C'est le truc pour danser. One, two, three, four. Non. Tu connais pas ? == Le débat sur la CB (Cibie) == === Contexte === === Les personnages === === Transcription === Pas de radio et pas d'insultes de Gérard. Et voilà, vous venez donc d'écouter un petit remix qui a été passé hier soir lors de l'émission de Max. Non, non, non, c'est ce qu'on a récolté dans une boîte de nuit. Voilà. Dans une boîte de nuit, c'était pas sur le répondeur ? À la chunga. Ah, à la chunga, d'accord. Gérard, il dit des conneries. Vas-y, commence-toi. Gérard, c'est Turpentine de l'Internet qui l'a récupéré. Voilà, je la remercie. Et là, avant, j'étais en train de demander à Rigo combien qu'on était. On est déjà 3 000... On était 3 582 quand je te l'ai dit. On est déjà à 3 722 moins 4. Donc, le premier débat va porter sur la cibille des erreurs 55. Donc, on va accueillir Cendrier. Oui, allô ? 20 ans, Mazamé. On écoute Fun Radio sur 99.4. Oui. Bonsoir à toi. Bonsoir. Mets ton doigt. Oui. Salut, Gérard. 18 ans, Verdun. On écoute Fun Radio 93.9. Oui, c'est ça. Tais-toi. Oui, bonsoir, Gérard. 22 ans. Bonsoir, Gérard. Bonsoir à tous. 22 ans de... De... De... De... De... La Cachan. Oui. Bonsoir. La Cadeau, pardon. On écoute Fun Radio 98.6. Exact. Bonsoir, Gérard. Bonsoir à toi. Petite truie. 19 ans de Alès. On écoute Fun Radio 95.6, pardon. Oui, bonsoir à toi, Gégé. Bonsoir à l'équipe. Bonsoir. Salut, tout le monde. Salut. Fesse de taureau. Bonsoir, Gégé. 25 ans. Isola 2000. On écoute Fun Radio 101.7. Exactement. Ça va bien, Gégé ? Je sais pas. Je n'ai pas regardé ce matin, ça. Ah, Gégé. C'est la fin de la tournée. Et... Sans pitié. 19 ans. 10 ans. 103.5. C'est sans pitié. Ben oui, ben. C'est ce que je viens de dire. C'est ça. Bon, alors, les oreilles, c'est comme le cul, ça se lave. Mais sans contotiche, d'accord ? Ouais. Ok. C'est clair. Bon, alors, on y va. On attaque. Première question. Est-ce que vous possédez une CBC, oui ? À quoi cela vous sert-elle ? On va demander ça à Tétois. Ouais, ouais. J'en possède une. Ben, en fait, ça me remplace le téléphone chez moi. Non, mais... Ben, ça y est. Ça, je m'en serais douté. Ah, ben ouais. Je m'en serais douté qu'on m'aurait dit que ça remplace le téléphone. Tu t'en redoutes aussi. Ouais. Donc, tu peux préciser ta... Ma phrase ? Ta réponse. Ouais. Donc, ben ouais. Je m'en sers comme téléphone parce qu'en fait, j'ai pas le téléphone. Ça coûte trop cher. Puis, c'est pas ce téléphone. C'est pas ce télécom. Ouais. Non, mais attends. Attends, attends, attends, attends, attends, attends, attends. Commence pas. Quoi, quoi, quoi, quoi, quoi ? Oh, hé, hé. Hé, tu vas te calmer parce que sinon, c'est moi qui te calme. Ok ? Ok, gamin. Oh, c'est Michel. Oh ! C'est moi qui parle. Ok ? Ouais. Ça parle, alors. Non, vas-y. Alors, déjà, la CBI, ça a été agréé par les PTT, mais maintenant, ça y est plus. Ok ? Pourquoi ? Pourquoi ? Euh... Parce que maintenant, la CBI, tu peux la posséder comme tu veux. Ça veut dire... Vas-y, vas-y. Ouais, je sais pas ce que ça veut dire, agréé. Agréé, c'est... Ben... Quand t'achètes un téléphone dans un magasin, c'est agréé PTT. Donc, derrière ton téléphone, t'as une marque. Et dessus, c'est marqué agréé PTT. Petit travail tranquille. Ouais. Voilà, ça veut dire ça, PTT. Mais ça n'existe plus, les PTT, hein ? Ah non, presque pas. C'est eux qui nous envoient le courrier. Quand ça marche... À une condition que ça fonctionne bien. Ok ? Ok. Euh, Cendrier ? Oui ? Tu t'écoutes ? Non, ben attends, je t'écoute, c'est moi qui t'écoute, maintenant. Tu réponds à la question, ou si tu réponds pas, ben, on va te dire bonne nuit. Ok, bon, ben moi, j'ai pas de CBI, mais je compte bientôt en prendre une. Ouais. Donc, je sais pas, c'est laquelle la moins chère ? Alors ça, pour l'instant, tu vois, là, tu commences déjà à me parler des questions qu'on n'est pas dedans encore. Ah, excuse-moi, d'accord, j'attends. Ok ? Ok. Alors, pour toi, ça va être... Euh, si, la question que je vais te poser, à quoi ça va te servir ? Ben, en fait, ouais, c'est une bonne question, à quoi ça va me servir ? Ben, je sais pas, garder le contact avec les gens, c'est cool, avec les camionneurs, tout ça, c'est bien. Non, mais, Fildar ! Non, mais, je prends un gâteau, mais... Non, mais, attends, Fildar, s'il te plaît ! Attends, Fildar ! Excuse-moi. L'autre, il ouvre carrément le paquet. J'avance au micro. Gérard, pour commencer, enfin, pour le début du débat, il y a... Perforas, le vrai Perforas sur l'IRC, d'ailleurs, il te salue. Il te demande qu'est-ce que ça veut dire, 6 billes ? 6 billes, en fin de compte, ça veut dire... Ben, justement, c'est la question. Ça veut dire 4 bancaires ou... Ouais, ben, ça veut dire 4 bancaires ou... Ben, oui, c'est tout, hein. 4 bancaires ou 4... Cues bouchées, cues bouchées. Cues bouchées, cues de bite... Lâche-toi, lâche-toi, Lascar, vas-y. Ok, non, allez, allez, allez... Non, mais... Moi, je croyais que ça voulait dire communication brève. Ok. La prévision de 6 billes, non ? Moi, je croyais que ça voulait dire 6 billes trop, en fait. Comment ? Je croyais que ça voulait dire 6 billes trop. Sur l'IRC aussi, l'indie, ça veut dire connard bourré. Bon, ben, ça, ils peuvent dire ce qu'ils veulent, hein, de toute manière, tu peux... N'importe quel nom. C'est une bonne définition, quand même. Mets ton doigt. Mets ton doigt, tu réponds, s'il te plaît. Ouais, c'est moi, je dirais. Ah, il a son pont, lui. Vas-y, laisse ton doigt. Ouais, vas-y, vas-y, vas-y. Eh, mets ton doigt dans mon cul, là, celui qui s'amuse à passer à chanter ça, il va commencer par fermer sa gueule. Ok, merci. Ça a coupé, hein, Manu. Bon, Manu, c'est quoi, ce bordel, là, déjà ? Je sais pas, l'auditeur, il a raccroché. Ah, il a raccroché, mets ton doigt. Ah, ben, c'est bon, tu prends quelqu'un d'autre. C'est bon, c'est bon, c'est bon. Allez, là, mais en plus, c'est cause, je crois que c'est un passionné de 6 billes et qu'il en a une. Parce que, euh, sur le téléphone, tu peux... Tu peux pas parler de tout. Parce que, des fois, il y a des gens qui t'écoutent. Ouais. Donc, nous, avec mes potes, on a des business un peu chelous, donc on est obligés de passer par la 6 billes, on se met sur le canal 19, et là, personne ne nous entend. Non, presque pas, presque pas. Sur le canal 19, personne ne t'entend. Non, mais attends. Non, non, c'est privé, c'est un canal privé. Ah, ouais, mais attends, tu me prends pour un con ou tu me laisses ? Non, non, c'est pour moi et mes potes les routiers. Non, non, mais attends, attends. Ouais. Petite truie. Oui, je suis là. C'est toi qui viens de me répondre ? Ouais, ouais, tout à fait, ouais. Bon, je te demande si tu me prends pour un con ou tu me laisses ? Bon, comme tu veux, je te laisse, vas-y. Ouais, eh ben, je vais te dire une chose, que sur le canal 19, déjà, une, tu peux pas rester 50 ans à raconter ta vie. Ah, t'sais, j'ai pas besoin de 50 ans pour faire mes business, t'inquiète. Ouais, ouais, non, mais moi, je te dis, sur le canal 19, t'as pas besoin de... C'est quoi, le canal 19, Gérard ? Le canal 19, ça va être la question 4. D'accord, vous attendez la question 4. Ok, mais Gégé, tu fais quoi au niveau de la juridiction pénale à ce niveau-là ? Je veux dire, la civile, c'est quand même réglementé, tu fais quoi dans ce cas-là ? Non, plus maintenant. Ah, si, si. Non. Non. Ah bon, t'es sûr ? Maintenant, tu peux te procurer une civile comme tu veux. Ah, donc, en gros, il y a un mec qui peut prendre une civile et puis il fait une radio locale dans sa chambre, c'est ça ? Non, mais attends, déjà, une civile, tu sais ce que c'est ? Euh, ouais, c'est le truc avec des boutons et des numéros pour... Voilà, c'est un petit appareil comme, je dirais, un téléphone. Ouais. Hein ? T'as un mic ? Ouais, t'as un mic ? Tu branches ton mic sur la civile ? Tu tires une antenne. Tu tires un fil qui te donne l'alimentation avec ton antenne et là, tu peux parler. Attends, est-ce que t'as checké le flot d'abord ? Comment ? Tu checkes le flot d'abord ou pas ? Attends, tu parles français, toi ? Est-ce que tu checkes le flot d'abord ? C'est quoi, ça ? Avant de balancer la purée. T'es dans la place ou quoi ? Bon, j'ai la fièvre, je dirais. Bon, fesse de taureau, fesse de taureau, allez. Ouais, bah moi... J'achète pas de civile parce que je trouve que le son, il est pourra. T'as bien raison. Tout naze, le son, tout pourri. Il faut mettre une antenne. C'est vrai qu'entre un téléphone et une civile, il n'y a pas de flot d'aujourd'hui. Non, non, non, mais alors là... Là, par contre, fesse de taureau... Tu m'as un petit lobby avec cette antenne. L'antenne, l'antenne... Oh, s'il vous plaît ! Attendez, Gérard, réponds. Ouais. Fesse de taureau. Ouais. Si déjà, t'achètes une civile sans antenne, tu peux être sûr que t'entendras rien. Bah, je sais, mais même avec une antenne, le son, il est naze. Non. Mais pourquoi, Gérard ? Non, parce que là, il faut se dire une chose. Avec une antenne de civile, donc tu la branches sur ton TX et ça a toi de... C'est quoi, un TX ? Un TX, c'est un appareil, comme dirait le Minitel ou téléphone. Mais pourquoi, par exemple, quand tu branches une civile, ça fait... Non, mais ça, c'est... Non, mais c'est normal. Non, mais c'est bouffé. Attendez, il répond, il répond. Non, parce qu'il y a certains TX... Non, euh... T'as du mal à les régler. Mais c'est à toi de les régler, parce que, pourquoi ? Faut se dire une chose, qu'avec l'antenne de civile, il te faut un TOS. Un TOSmètre. Ce qui te permet... Un TOS, non ? Non, non, non. Non, non, un TOSmètre, c'est... Ce qui te permet... Gérard, un peu de respect. Attends, s'il vous plaît ! Respect, respect, respect, c'est pas la chose. Attends, j'en ai fait de la civile, donc je sais ce que c'est un TOSmètre, ok ? Un TOSmètre, ça te permet de régler ton antenne. Correctement, pour pas avoir de problèmes. D'infrastructure. Donc, si la personne ne sait pas régler son antenne, c'est son problème. D'accord, et pour régler une antenne, il faut un TOSmètre. Voilà, un travailleur clandestin, quoi. Non, non, non, non. Et il va vite, il est quick ou pas ? Non, non, ça dépend d'où tu te trouves, et je vais même pas insister sur vos questions. Sans pitié. Ouais, ça sert à rencontrer des gens, et il paraît que face à la région du Nant, on peut rencontrer des gens. Il y a des mecs sur la Cibi, je crois, n'est-ce pas ? Ouais, ouais, moi j'ai entendu qu'il y avait un réseau de cul, Cibi, c'est ça ? Ouais, non, mais attendez, attendez, attendez. Attendez, parce que Gérard a un petit sondage, justement, sur ce que vient de dire, sans pitié. Alors, donc il y a 45% des gens qui utilisent la Cibi pour faire des connaissances, et plus il y a infinité. Mais ça, c'est des questions... Infinité. Ouais, mais... Ouais, ouais, plus c'est infinité, ouais. Ouais, mais ça... Comment ? Qui c'est qui a parlé derrière ? Bon, les filles... Sans pitié. Ouais, sans pitié, je t'écoute. Sans pitié. Ouais, ben je te disais, il y a un réseau de rencontres sur du Nant assez cul sur la Cibi, donc je vais essayer de m'en procurer une. Ouais. Donc ce serait bien que tu m'expliques un peu comment ça marche. Enfin, je vais écouter le débat, et puis je vais essayer d'apporter mes lumières. Ah, mais ça, pour t'expliquer comment marche une Cibi... Ouais. Déjà, quand... Quand tu viens chez toi. Non, non, non, non, non. Quand il n'y a pas de problème. Non, non, non, non, il n'y a pas besoin de venir chez moi. Elle achète sa Cibi à demande au vendeur. Le vendeur lui explique comment que ça fonctionne. Maintenant, si elle ne sait pas, eh ben, elle se débrouille. C'est un petit poil. C'est tout. De toute façon, il y a une notice, Gérard, quand tu achètes une Cibi. Bah oui. Mais si la notice est en japonais. Comment, comment ? Si la notice est en japonais, je fais comment ? Eh, si c'est des poignées de ton petit nègre, comment qu'on fait ? Je te l'envoie, tu m'en prêtes ? Ah, le roi de l'imitation de Gérard. Ah, Gérard, pas de Gérard. Bon, alors, deuxième question. Graines de déchets. Euh, Rigaud, une question IRC avant. Euh, oui, on te demande, Le Chiant, il te demande depuis quand la Cibi existe-t-elle ? Euh, ça, je sais pas, j'ai pas les dates, j'ai pas les dates approximatives, mais je pense que ça existe depuis longtemps. Début juin, on m'a dit, 47. Non, non, non, non, non, non, attends, la Cibi, ça va pas depuis juin. Ça fait combien de temps que ça existe, la Cibi, à ton avis ? Je sais pas, moi. Ça fait plus de 20 ans, plus de 30 ans ? Ouais. Euh, attends, euh, la Cibi, c'est, c'est connu, t'as, t'as même des, des Cibis portables. Ah, oui. Sur Titanic, il paraît qu'ils en avaient une, les Cibis. Non, non, mais c'est pas... C'était une Cibi sur le Titanic ? Eh, toi, fais gaffe là-bas, parce que je vais te faire avaler tes lunettes, si tu fais le con. Mais non, c'est pour la télé, vas-y. Donc, euh, deuxième question, Gégé. Deuxième question. Ouais. Euh, de quoi parlent les Cibistes, en, en général, là ? On va demander ça à... C'est d'autant. Non, ben, euh, ouais, ben, tiens, euh, voilà. Voilà. Comme tu l'as ouverte. Parce que c'est que des routiers, je pense. Hum ? De cul. Parce qu'il y a que les routiers qui... Ah, il y a, à, à, à, à ton avis, il y a, il y a que les routiers qui... Non, mais il y a bien 90% de Cibistes, euh, c'est des routiers, je pense. Bon, alors, moi, je vais te dire une chose, que tu te trompes déjà. Bon, c'est sûr que, euh, il y a, il y a pas mal de routiers, je suis d'accord avec toi. Mais tu te trompes. Mais faut te dire une chose, que il y a des chauffeurs de taxi qui, qui, qui l'utilisent. Ouais, je voudrais dire aussi qu'il y a aussi des prostituées. Ouais, ben, ça, euh, c'est leur problème, c'est... Ça, c'est leur problème, c'est pas le mien ! Ben, avant, moi, je dis, les, les, les, les putes, elles tapinaient sur le trottoir. Et maintenant, je trouve ça un truc scandaleux, parce qu'elles viennent tapiner sur la Cibi. Et franchement, ça brouille les canaux, surtout si tu vas sur le canal 69, c'est un vrai bordel, là-dedans. Ah, ouais, attends, attends, attends, qui c'est qui vient de, qui c'est qui vient de parler ? C'est Petite Truie. Alors, Petite Truie, j'ai jamais vu, euh, 69 canals sur, euh, sur une Cibi. Il y en a combien, d'ailleurs ? Euh, t'en as 40. Des canals ? Hum. T'as, euh, tu passes du 1 au 40 et c'est tout. À moins que t'as la, euh, la BLU, là, tu peux... C'est quoi, la BLU ? La quoi, la quoi ? La BLU, c'est, c'est un, euh... C'est un petit gâteau, ça, non ? Non, non, c'est, c'est un truc que... Un de marque, Gérard. C'est un violet en plante d'arbre. Mais attends, BLU, t'es toi, toi ? Pas de pub ? Bon, ouais, oh, vous, vous... Non, c'est quoi, la BLU ? C'est quoi, la BLU ? Non, euh, la BLU, c'est, c'est, ça permet que lorsque tu vas à l'introngé, tu peux correspondre avec quelqu'un qui est en France. Donc, il te parle en étranger, en, je sais pas, en américain ? Non, non, en étranger, non, mais par exemple, t'as... Bon, s'il vous plaît, vous vous taisez quand je parle ? Merci. Ok. Oh ! Merci ! La BLU, c'est, c'est un appareil que, euh, tu payes pour que ta cible soit homologuée pour ça, donc. T'as, ça s'appelle la BLU, donc, homologuée. Tu payes combien ? Euh, je crois que... Je crois que c'est... Tu payes 250 balles en plus du prix de ta cible. Par jour ? Non, non, non, non. Tu payes 250 balles plus le prix de ta cible. Pour la vie ? Pour tout le temps. Et la BLU, ça te permet de correspondre, par exemple, toi, t'es ici à Neuilly. Par exemple, t'as, je sais pas, je vais prendre quelqu'un au hasard de ta famille, ta sœur, qui est, qui est du côté de la Thaïlande. Ouais, bah, putain, elle est en Inde. Ouais, mais, de la Thaïlande. Bien joué. Ah, en Thaïlande. On fait des massages, ouais. À peu, à peu t'appeler. Sur ma cible ? Oui. Mais attends, Gérard, avant... Non, mais, non, mais, attends. Attends, je vais, je vais expliquer pourquoi. Parce que la BLU, ça te permet d'avoir plus de correspondance avec l'étranger qu'on a à l'heure actuelle, nous, en France. Ça sert à quoi qu'on ait inventé Internet, alors ? Bah oui, mais, mais, ça, attends. On n'arrête pas le progrès. Attends, moi, non, mais, Gérard. Oui ? Imagine quelqu'un qui est sourd, il peut pas être sur, il peut pas être sur le téléphone ou la cible, donc, forcément, il est sur Internet, c'est tout. Non, mais... Mais, mais, attends. Attends, déjà sur... Attends, le mec qui est sourd... Pardon. Excuse-moi, j'ai fait une fausse manip. Je crois que toi, t'as l'air, je vais te mettre, et toi, la grosse bouche de l'âge, je vais te mettre, et toi, le maigre, tais-toi. C'est celle dédicace pour Mobilik. Comment ? Je disais, c'est celle dédicace pour Mobilik. Le film, le film, le film. Qui c'est, qui c'est, qui s'appelle comme ça ? Rodrigo. Pierre Chalot. C'est ça, c'est ça, oui, bon. Donc, Sandrier, il y avait une question Internet, non, Rodrigo ? Ben, il y en a plein, on est plus de 4000 déjà. Oh là là, ouais ! Alors, il y a Davy One qui te demande s'il faut éteindre sa CB quand on va au cinéma. Alors, là, c'est une bonne question. C'est une sacrée bonne question de putain de merde. Une colle. Donc, de toute manière, oui. Je vais dire que oui. Et Turpentine, elle te demande combien ça coûte l'abonnement à la CB et c'est quoi le prix des communications ? Est-ce qu'il y a des forfaits ? Non. Non ? Non, non. Il n'y a pas de forfaits sur la CB. Mais comment ça coûte l'abonnement ? Il n'y a que SFR et Itinéris. Non, non, non. Non, il y a Bouille aussi. Non, non, non. Ben, attends, mais arrête de parler, toi. Les Maudit Cards, c'est pour ton taf, les CB. Mais non ! Puneuse, mais, hé ! Non, mais t'as le 7 aussi de CGTL. Voilà, t'as le 7 de CGTL et puis t'as le 3615 aussi qui fonctionne, hein ? Ouais. D'accord. Il y a Ante sur l'IRC qui me dit qu'il y a le câble aussi. Non, mais attends, ça, ça n'a rien à voir avec mes questions. Oh, Sandrier. Ouais, allô ? Ouais. Tu peux m'envoyer la question, s'il te plaît ? Non, non, non, non, non. Je répète plus les questions. Non, non, on est déjà à la bourre. Je répète plus les questions. Alors, on accouche. Ok, d'accord. Bon, alors, en fait, de quoi ils parlent, les gars ? Ben, sur les directions à prendre, tout ça, non ? Éviter les bouchons... Attendez, laissez-la parler ! Ouais, s'il te plaît, ouais. Donc, je sais pas, éviter les bouchons sur la route, les directions à prendre, tout ça, non ? Non, mais ça, c'est la... Ça, c'est la... Ouais, ben, à la rigueur, ouais. Donc, en fin de compte... Bon, je vais te répondre après, Sandrier, avant qu'on mette un disque. Tais-toi. Moi, je pense que les civils, attention, on peut les appeler, ils parlent le langage civique sur la route. Donc, ils doivent se dire, ouais, salut, salut, Robert, disons que je te file des calendriers de cul de playboy. Je t'échange un playboy contre un penthouse. Ouais, je t'ai déjà dit, ouais. Moi, je t'échange ma main dans ta gueule contre une connerie. Ok. On se fait chier avec quelqu'un comme moi, on s'en vise. Mais attends. Non, mais moi, je t'emmerde. Oh là là. Ok. Justement, Gérard, par rapport au sondage, là, t'as vu la deuxième ? Ouais, ouais, mais attends, on va finir. Petite prie. Petite prie, je t'ai déjà répondu, mon amant. Attends, je suis pas ton amour, d'accord ? Alors, tu vas te faire sauter, toi, connard. Je te kiffe. Bon, alors, hop, bonne nuit à toi. Allez, hop, celui-là, dégagez. Fermez le vent, lui. Hop, fesse de taureau. Tiens, Michel, je t'ai déjà répondu. Ok. Sans pitié. Ça sert à communiquer. Ça sert à communiquer. Vous kiffez, ça, les gars. De quoi, de quoi ? Ça sert à communiquer des plans cul. Quoi ? Ça sert à communiquer. Hé, parle un petit peu plus fort devant ton combiné, parce que j'entends pas. C'est un téléphone de merde, hein. Ça sert à communiquer des plans cul sur la région du Nant. Ouais, d'accord. Je crois que tu vas retourner dans ton lit. Ouais. Tu vas continuer avec ta cibille pour essayer d'avoir des petits cochons qui veulent bien te sodomiser. Ouais. Hein ? Et puis, on va te dire une bonne nuit. Ouais. Ok ? D'accord. D'accord. Eh ben voilà, bonne nuit à toi. Salut. Il y a du poids sur la cibille, toi, là. Bon, c'est... Merci. Donc, sur la question, là... Attends, il y a Métondoa qui n'a pas répondu, s'il te plaît, Gérard. Ah, c'est... Ouais, Gérard, excuse-moi, mais tu m'as pas appelé. Ah, oui, oui, oui, excuse-moi. Ouais. Ouais, alors, moi, j'ai dit que sur la cibille, ils parlent un peu de tout, quoi. Mais quand ils parlent... Tu veux, là, j'ai la cibille à côté de moi et... Ouais. Allume-la, va. Tu mets quelle la 19, là ? Allume-la, allume-la, allume-la, vas-y. Tu mets quelle la 19, hein ? Vas-y, vas-y, vas-y. Voilà. Vas-y, demande... Demande quelque chose. Eh, il y a quelqu'un, là ? Déjà, pour commencer... Ouais, ben, ça gueule, mais c'est ce qu'ils font, hein. Non, non, attends, attends. Déjà, pour commencer, on ne demande pas. Il y a quelqu'un ? Tu demandes. Qu'est-ce qu'il faut dire, justement, voilà. C'est quoi ton QRZ ? Euh, moi, c'est DJ Boost. Bon, alors, tu dis DJ Boost... DJ... DJ Boss... Pour un... DJ... DJ... Ouais. DJ Boss pour un STTX. OK, alors, attends, j'essaie. Vas-y. Ouais, attention, les stations, c'est DJ Boss pour un STTX. Là, il a transformé les stations. Voilà. Donc, là, il y a du monde. Voilà. Donc, il y a du monde. Donc, là, quelqu'un répond, c'est ça, Gérard ? Donc, là, tu demandes... T'as demandé... Attends, attends, attends. Oh, mets ton doigt. Mets ton doigt ! Ah, là, ben, c'est ton doigt. C'est ton doigt ! C'est ton doigt ! C'est ton doigt, Manu. Ouais ! Faut que tu commences, là ! Ça y est ! Voilà, donc, là, je peux vous dire que, pour faire... Déjà, quand vous achetez un STTX, déjà, la première chose que vous faites, vous allez... Non, j'ai pris un 103XPX, moi. Non, non, non, non, non, mais attends. Déjà, pour commencer, quand vous achetez un STTX que vous savez pas vous en servir, déjà, le vendeur vous explique comment que ça marche. Après, vous allez sur le canal 19, vous dites, voilà, par exemple, un QRZ bidon, puis la pisse pour un STTX. Non, mais comme ça, tu vois, c'est un QRZ que je prends au hasard. Le mec, il va te dire, bon, ben, c'est OK, ça passe. Je te change ton slip. Stop, stop, stop ! Je dirais, sur IRC, il y a Sardine qui te demande si on peut mettre sa 6 billes sur liste rouge. Non. Oh, putain. Mais attends, mais c'est pas des téléphones, une 6 billes ? Moi, j'en sais rien. Non, mais tu vois, les gens de l'Internet, ils sont largués en 6 billes. Ils connaissent que leur... Ils arrivent pas à se connecter sur la 6 billes avec l'Internet. On peut pas ? Mais non, c'est impossible. C'est impossible. Donc, alors, à la question que je vais poser... Donc, là, va mettre un disque, mon chéri. Mon chéri... Attends, je suis pas ton chéri, d'accord ? Pas de marque ! Toi, tu vas te faire sodomiser, toi. Donc, il y a 23% des routiers qui utilisent... Utilisent seulement leur 6 billes pour trouver un endroit pour faire leurs besoins. Alors ça, Gaël... Ouais, Gaël... Gaël, je vais te dire une chose. Que là, t'as... Le sondage que tu viens de trouver des 23%, je sais pas où t'as été me le chercher. Peut-être qu'elle a voulu dire, tu vois, comme ils sont sur la route, par exemple, ils veulent une station-service parce qu'ils ont envie de faire leurs besoins, ils peuvent peut-être pas s'arrêter sur le bord de la route pour pisser dans le... Non, non, mais attends. Surtout sur l'autoroute, Gérard. C'est dangereux, un camion qui s'arrête sur l'autoroute, c'est dangereux. Non, mais sur l'autoroute, faut se dire une chose. Une chose, par contre... Merde, j'ai y arrivé. Par contre ? Faut se dire une chose, par contre, que t'as plusieurs aires de repos. On l'a bien vu quand on a été avec Max, je sais plus, à... Non, mais ne le dis pas, ça le dit pas où on est allé, ne le dis pas, ne le dis pas. Je sais plus, du côté du Havre, là-bas. Ouais, on a pris des photos et tout. Faire une soirée. Hum, hum. Donc, il y avait... Il y avait pas mal d'aires de repos. Donc, là, ils peuvent s'arrêter. Donc, il y a plusieurs routiers, donc ils peuvent papoter ensemble. Donc... Ah, d'accord. La troisième question qu'on va poser, c'est... C'est, peut-on acheter la Cibi en allant à la banque ou autre ? Et on va s'écouter les petits bois du bois de boulagne avec des envies de caca. Et on se retrouve tout de suite après au 0803 085000 et 0870 5000. C'est quoi ? C'est le disque ? Ah bah, dis-donc, il est pourri, hein ? Et voilà, c'était les petits bois du bois de boulagne avec des envies de caca. Et donc, il est 1h... 1h21 et vous êtes toujours sur Fun Radio. Donc, vous pouvez toujours nous appeler au 0803 085000 0870 5000. Et toujours lire, c'est www.fr.funradiorigo. On est combien, s'il te plaît ? On est 4324,2. Ça cartonne fort, ce soir. Le débat se passe bien. Je salue 2-3 personnes visées. Je salue Paradox, Bacchus, Christophe, Izen, Sardine, Le Vrai de Marseille, etc. Il est là, Davy One ? Ouais, bien sûr, il est là. Ah, c'est cool. Et moi, je salue une personne, un cibiste. Tout particulièrement, donc je vais saluer 2 cibistes aussi. Donc, c'est-à-dire Lolo91. C'est son QRZ, ça ? On va peut-être l'appeler tout à l'heure. On va l'appeler tout à l'heure, oui. On devrait l'avoir dans nos débats. Et je salue Petit Guépard qui est sur la route. Ah, Petit Guépard. Le guépard qui nous écoute. Le guépard. Donc, je te fais des gros bisous. Et on va récupérer Sandrine. Oui, allô ? Bonjour. Rebonsoir, pardon. Mets ton doigt. Ouais, rebonsoir, Gérard. Tais-toi. Salut, les bébés. Fesse de taureau. Sringue terre ouverte. Sringue terre ouverte, bonsoir. Oui, bonsoir, c'est Sringue terre ouverte. Fesse de taureau. Ouais, rebonsoir. Gérard, tu peux me redonner le titre du livre parce que j'ai bien kiffé. T'as bien kiffé ? Ouais, j'ai bien kiffé. Je kiffe. Tu kiffes à la FNAC, c'est tout ? Tu le kiffes à la FNAC ? Et puis, basse-toi. Ok, et Camembert ? Salut, Gérard. Alors, donc, troisième question. Peut-on acheter la CB en allant à la banque ou autre ? On va demander ça à Sandrier. Ouais, ben moi, je pense pas. À la banque, on peut pas trop acheter des CB, quoi. Mais je pense qu'ailleurs, ouais, genre au supermarché, au casino, des trucs comme ça. Pas de marque ? Pas de marque. Non, mais elle te m'a dit, en fin de compte, si on vient bien à la banque, on peut acheter des CB. Si on vient bien sur le débat, CB, ça veut dire quoi ? Ça veut dire carte bancaire. Ça n'a rien à voir. Ah, très bien. N'importe quoi, ça. Quoi, n'importe quoi ? Si vous êtes pas contents, derrière, vous vous écrasez. Bien sûr, Gérard, ça veut dire ça. Je comprendrais pas le principe, alors. Non, mais attends. Tout le monde me dit, ouais, mais CB, ça veut dire quoi ? Bon, ben, maintenant, je dis, ça veut dire carte bancaire. Il faut un code. Si tu veux faire de la CB, il faut avoir un code. Ah, oui, mais en fin de compte, t'as pas besoin d'avoir un code pour acheter une CB. Donc, mettons-lui un Z. Il y a une puce dans le soleil. CB, ça veut dire carte bancaire. Mets ton doigt. Ouais, Gérard, écoute. Ben, écoute, pour moi, la CB, moi, en ce moment, j'anime une radio gay sur Verdun. À partir de la CB, justement. Ah, bien. Donc, la CB, c'est pas moi qui l'ai achetée, donc je peux pas te répondre. Et le matos, on l'a déjà. Moi, la CB, je l'ai chez moi, mais c'est juste pour m'entraîner, quoi. Ouais, mais, donc... J'attends que 2-3 routiers, puis on se parle, et puis voilà, quoi. Ah, ben, attends. Mais attends, tu te fous de moi, toi ? Ben, non. Ben, si. Ben, pourquoi ? Je te demande de quoi parlent les cibistes, en général. Tu m'as même pas répondu. Tu m'as répondu à travers la plaque. Mais si, t'as répondu. Il t'a dit que lui, il faisait une radio sur CB, donc c'est de ça qu'il parle. Bon, OK. OK, merci, Rigo. Est-ce que tu vois ? Merci, Rigo. Euh, tais-toi. Ouais, ouais. Tais-toi. Ouais, ben. Moi, donc, ouais, ben, moi, ma CB, comme je t'ai dit, bon, j'en ai déjà une, hein, ça remplace le téléphone. Ouais. Je l'ai acheté dans un petit magasin qui s'appelle les CB Fuckers, et puis... Ouais, ben, euh, tais-toi, tu, tu, tu, tu pressurises pas les noms, d'accord ? Ouais, y a pas de pub, hein, sur le son. J'ai acheté dans un magasin de CB, et je voulais dire que c'était un gros routier poilu qui était à la caisse, d'ailleurs, il a voulu me prendre quand tu t'es fait tomber ma CB. Je sais pas trop. Hop, vas-y. Bonne nuit. Merci, tais-toi. Non, non, mais... Merci, merci. Tais-toi, tais-toi, tais-toi, tais-toi. Tais-toi, tais-toi, tais-toi, c'est bon, c'est bon. Tu es fier pour toujours. Au revoir. Mais par rapport, justement, par rapport au petit sondage de Gaël, là, y a 61%... Non, non, mais attends, euh, j'ai pas fini avec les jambes, là. Ah, d'accord, non, mais par rapport, tu vois, on peut... Ouais, non, mais, ouais, mais, euh... Ok, parce qu'il y en a pas mal, les sondages. Non, non, ouais, mais après, ben, là, c'est un peu trop long, tous les sondages. Ben, justement, en temps de temps en temps, ils peuvent réagir en même temps de la question. Fin de chair ouverte. Fin de chair ouverte. Ouais. Bon, je t'écoute. Quand je t'ai rencontré, j'y ai pas cru. Ça va pas, fin de chair ouverte, t'as un problème ? J'ai des bouffées de chaleur, là, je sais pas ce qui se passe. Ouais, ouais, je crois que, t'as l'air, tu vas avoir des bouffées de chaleur... En standard. Manu, au standard. Ok, bon, alors, ce que je voulais dire, c'est que j'écoute souvent Radio Vazdine, là, l'autre, Tarlouz, là. Ouais, ouais, ouais, c'est bon, c'est bon, allume, allume, allume, hop, hop, hop, hop, hop, terminé pour toi. Baisse de taureau. Ouais, alors, donc, moi, je sais pas, je pense pas qu'on puisse acheter une cibille dans une banque. Pardon. Mais peut-être, je sais pas, moi, dans un truc Paris pas cher, tu vois, un truc dans le style, tu peux trouver ça, quoi. Voilà. Ok. Tu as mon verre ? Ouais, bah, moi, j'ai acheté une cibille à mon copain, je l'ai acheté chez mon boulanger. Parce qu'en fait, ils vendaient la sienne, donc j'ai acheté une cibille chez mon boulanger. Justement, par rapport à ce qu'elle vient de dire, Gérard, est-ce que tu crois que c'est mieux d'acheter une cibille neuve ou d'occase ? Euh, ça, c'est une bonne question. Non, parce qu'en fin de compte, si t'achètes une cibille d'occase, tu sais pas sur quel matos tu vas tomber. Le mieux, c'est d'acheter une neuve. Mais les prix, je pense qu'on va en parler, on va essayer de... On va aborder le sujet ou pas ? Ouais, on va... On en parle maintenant. Non, non, mais on va aborder le sujet sur savoir combien coûte une cibille, parce que là, vu les questions qu'on a et puis vu l'heure qu'il est, donc faudrait qu'on écoute les questions. Ouais, Gérard ? Oui ? Ouais, une petite question, je vais faire un peu. C'est qui ? C'est qui ? C'est qui ? C'est André, excuse-moi. Oui ? Je veux savoir comment t'écris, cibille. Cibille ? Ouais. Alors ? Ouais. Une cibiste ? Non, cibille, une cibille. Cibille, bah, un CB. Pardon ? CB. CB, en anglais, quoi, cibille, c'est ça ? Bah, un CB ? Ah, ouais, pas bête, je viens de comprendre, ok. C'est pas français, alors ? Pardon ? C'est pas français comme matos ? Ah, si. Ah, pourquoi on dit cibille comme les anglais ? Ah, ouais, c'est ça. Mais non, bah, attends. Comment on dirait un CB, une CB ? Non, mais un CB, CB, c'est carte bancaire. C'est des feuilles, les CB. CB, c'est des feuilles pour rouler des joints ou autres. Des joints ou autres ? Non, mais... Mais, cibille, en fin de compte, c'est quoi ? C'est français, hein ? Tu peux le trouver ? Bah, cibille, non, cibille, c'est pas français, c'est anglais, comme tu dis, CB. Non, parce que moi, je voulais mettre une annonce dans le journal, quoi, parce que je cherche maintenant, ça m'intéresse, maintenant qu'on en parle, je cherche une cibille, quoi. Donc, je vais savoir comment l'écrire, et voilà. Ouais, euh... Donc, CB, ok. D'accord. Ok. Après, question, ouais. Attends, attends, attends. Si le copain de Gégé pouvait raccrocher son téléphone pour que je le rappelle, ce serait sympa, mais... Euh, Laurent, s'il te plaît, si tu peux raccrocher, si tu pouvais raccrocher, on essaye de te joindre, alors raccroche. Laurent, scan the phone. Merci. For tonight. Alors, donc, 61% des cibistes préfèrent utiliser leur téléphone portable, donc je vois pas... Bah, par rapport à la cibille, tu vois, il y en a peut-être qui considèrent que c'est mieux, le portable. Non, mais... Non, mais... Ah, oui. D'accord, je vois... Tu vois ? Je vois le rapport, le sondage que Gaël vient de me donner. Donc, en fin de compte, c'est vrai qu'il y a des cibilles portables. Ah, oui ? Et c'est un genre de petit Akiwalki. C'est un genre de petit Akiwalki comme un téléphone... Portable. Portable. Et en fin de compte, sauf que dessus, au lieu d'avoir marqué n'importe quoi comme nom, c'est des canaux. Donc, tu peux aller du 1 au 40 aussi. Oui. Gérard, sur IRC, il y a Sardine, le vrai de Marseille, qui dit qu'il ne faut pas acheter une cibille à un routier parce que c'est des voleurs. Non, c'est faux. Non, mais c'est une cibille d'occasion aussi, donc c'est des voleurs. C'est faux, c'est faux, c'est faux. Oui, Manu, on accueille ton pote, alors. Alors, à la place... Oh, l'eau ! A la place de... Bah, à la place de qui ? A la place de Tétois. A la place de Tétois. Salut, Laurent. Salut, Gégé. Salut, tout le monde. Salut. Salut. Salut. comment vas tu toi sans déconner bon alors sans déconner tu peux tu peux répondre à la troisième et aussi moi qui commande il est là il est là j'ai envie de revenir au débat il ya 10 ans sur l'hiver c'est qu'ils demandent si une cibi ça se nettoie avec des coton-tiges non j'y réponds même pas non c'est lourd on laisse parler laurent laurent donc alors peut-on peut-on acheter la cibi en allant à la banque ou autres non mais en fin de compte c'est quoi une cibi c'est bien c'est bien ça veut bien dire carte bancaire merci mais ça veut dire carte bleue carte bancaire si lolo explique nous ce que ça veut dire si oui c'est tout de quoi communication bref c'est ce que j'ai dit tout à l'heure il dit quelque chose de bien pour une fois à la classe donc troisième il ya zz sur l'hiver c'est qu'ils demandent si tu utilises l'antenne de ta cibi quand t'as pas de coton-tiges mais je ne réponds pas tu fais un boulot de merde ce soir à la plage de cinq terres ouvertes on accueille zona oui bonsoir c'est zonat n'accueille pas oui c'est zonat zonat allez tout le monde salut donc sur les cibi alors je tiens un petit magasin de cibi à paris donc sans citer l'adresse c'est boulevard du général tu peux retourner chez toi j'invite tous les cibistes à venir s'affolusionner boulevard voltaire terminé pour lui combien plus précisément non mais ça y est il est plus là donc alors en antenne il m'a dit 115 à l'heure en antenne il m'a dit 115 ah merci qu'est ce qui se passe tant à l'heure j'ai peut-être à 115 dans le cul toi ouais quel est et quel est les codes cibi les plus employés alors on va demander à cendrier celui qui fait du bruit derrière arrête parce que ça commence à m'énerver non c'est pas un portable on va demander à cendrier ouais les codes en cibi les plus connus ouais franchement je sais pas je connais pas trop la cibi donc je peux pas te répondre ah bah d'accord alors pourquoi tu participes au débat sur la cibi pour en savoir plus bah voilà c'est ça il faut être ouvert un peu quoi il faut comprendre il faut savoir ok t'es ouvert toi gérard ouais moi la cibi moi je la connais sur le bout des doigts la cibi moi c'est mon rayon euh mets ton doigt où je le mets où on l'a dégagé mets ton doigt ah en plus ah bon bah oui on l'a remplacé par le lot il est là bah non non non ah non c'est tais toi qu'on a viré t'es un manu tu lui fais un boulot de merde ce soir manu tu vas prendre le débat vas-y mets ton doigt ouais alors les codes les plus courants il y en a plein quoi donc t'es qtrs qtrz ouais toi t'es tataillé gérard je crois ouais bah attends gérard t'écoute pas il est en train de se battre avec manu gérard écoute le débat ouais je t'écoute ouais alors ton qtrz t'est tataillé c'est ça non non ça l'est plus parce que gérard arrête la cibi il a eu un accident hein t'as eu un accident t'as eu un mur avec oh oh au moins qu'on le voit ouais bah arrête c'est ton débat là mais mets ton doigt allez allez allez c'est bon c'est bon c'est bon allez on active là bah ouais bah je te parle gérard tu me réponds pas bah vas-y bah y'a qtrs y'a qrl y'a euh y'en a plein ouais c'est des faux codes hein yl aussi ouais c'est des faux codes mais c'est utile hein c'est utile attends bon ok laurent oui donc pourquoi non on dirait pas à white y'a gaso liquide gaso solide ouais c'est manger boire ouais un bisu c'est euh quand on se rencontre hum hum mais y'en a plein d'autres bon j'ai mon papier devant la porte mais je m'en rappelle plus non mais là devant ton téléphone mon coco comment devant voilà très bien devant le téléphone non mais je sais pas celui là t'as la petite chiasse aussi t'as grosse colique t'as j'ai pas du tout soin de vous et tout ça des trucs comme ça non et non gérard oui c'est un fvc qui te demande si c'est dangereux la cibi non totalement totalement non non gérard excuse moi à la place de zona que t'as dégagé on accueille blénaud bonsoir ouais blénaud oui bonsoir tout le monde bonsoir blénaud oui alors je vous appelle je vous appelle de limoges bonsoir à tous ouais mais on s'en fout que t'appelles de limoges attends je me présente mais la fréquence c'est 127.5 non non mais moi je m'en bats les couilles ok ben je tenais à dire sur le débat que donc moi je connais un endroit sympathique qui s'appelle cibi and trucks c'est 13 avenue clémento c'est à limoges ça c'est malin ça fesses de taureau viens nous dire à l'antenne que oui c'est à limoges ah d'accord et au combien déjà fesses de taureau ouais alors moi les surnoms que j'emprunte je sais pas du tout puisque j'ai pas de cibi et donc justement je participe à ce débat pour me renseigner ok ben moi je pourrais te renseigner après avec laurent on pourra discuter de certains de l'antenne tout ça ouais on en discutera un peu après ouais ouais pas de problème euh camembert ben moi je connais ben comme les autres quoi ykl qrz il y a un bruit de portante ça devient lourd là manu ben attends je gère je sais pas d'où ça vient à mon avis c'est laurent là il fait marcher son bordel non non non ça et le métro on est bavard on est vernis ouais en plus c'est le dernier métro ben c'est un film ça ouais euh camembert oui je t'ai dit gérard ouais je te copie hum hum etc etc ok mais en fin de compte personne personne essaye de d'aller d'aller au fond des pensées parce que en fin de compte qth c'est là où t'habites comme laurent disait hein laurent oui tout à fait ouais euh ykl bon ben ça c'est pour les nanas euh yc c'est quoi non yc euh ça existe pas ouais après t'as ton qrz c'est c'est ton nom de de siby ouais puis y'a quoi d'autre lpf non non non t'as oh t'as t'as plusieurs codes mais ça faudrait tpsg t'as non non non non non y'a y'a y'a y'a plus y'a plusieurs codes euh ouais gérard gérard c'était les tons d'oie là j'aurais en rajouté un petit peu quelques-uns là ouais vas-y y'a qra aussi c'est l'endroit où t'habites ouais euh ouais et puis je crois que y'a d'autres qra aussi quand tu vas aux toilettes je crois eh ben eh euh laurent il te l'a dit hein c'est eh de quoi euh laurent il l'a bien dit euh gastrolytique gastro liquide gastro liquide ah le gastro encériste quand tu vas aux toilettes aussi nan nan nan nan nan mais attends eh déjà qth c'est pareil que qra ah non ah ah bon nan qth c'est l'endroit où tu te trouves et qra c'est où t'habites eh ben alors c'est pas pareil euh si nan on peut trouver c'est dans pendant quand t'es en voiture t'habites pas dans ta voiture ah ouais mais attends nan nan mais nan nan merde on peut avoir une cibi en voiture hein ouais mais euh si en si euh en voiture si bah oui si si si en voiture parce que moi mon oncle mon oncle il a acheté une voiture de case le mec il l'a vendu avec une cibi dedans avec l'antenne et tout ça y est il l'a changé euh c'est quoi son qrz ah ben il en a jamais fait mais s'il veut il peut en faire parce que moi une fois j'ai branché et euh j'ai mis sur le canal 19 après j'ai appelé ma grand-mère sur le canal 22 ouais que j'avais dit de se mettre sur le canal 22 pour être peinard ouais et euh ça t'intéresse ce que je dis ou pas mais t'as pas appelé ta sœur sur le canal 22 - Elle n'a pas la fenêtre à serre sur le canal 50. - Non, parce qu'elle n'a pas la BLU. C'est pour ça. - Manu. - Oui, pardon, à la place de Blénaud, on accueille Sistitz. - Bonsoir. - Salut Sistitz. - Bonsoir à toutes les filles en particulier. - Salut. - On t'écoute. - Donc, je vous appelle de Toulouse. - Ouais, ben, ouais, eh oh ! Si c'est pardonné un truc que tu lui dis : "Ouais, j'ai un magasin à telle adresse", c'est même pas la peine. - C'est 12 rue du Capitole ! - Comme ça, tu iras faire le Capitole chez toi. - Il me dirait que c'est bien à Toulouse. - D'accord. - Et c'est 12 rue du Capitole. - C'est 12 rue du Capitole. - Ouais, c'est ça. - C'est à Toulouse. - Pas de pub, merde. - Alors, il y a un sondage. 32 des gens pensent que l'abonnement de Chibi est trop cher. - Donc, il n'y a pas d'abonnement. - Il n'y a pas d'abonnement. - Non. - D'accord, tu peux en faire une autre alors. - Euh... - Gérard ? - Oui ? - Tu veux dire que si il y a des vieillasses qui te donnent... - Tu me demandes ce que c'est ? - Il est là, lui ! - Salut, Davy One ! - Bon ! - Le GPT-AQBCOPIDKCLKKIRCT... Qu'est-ce que c'est ? - Quoi ?! - Attends, hé ! - C'est long, c'est long. - Hé, Davy One ! Tu t'essayes d'abréger parce que là, je comprends pas ce que tu me demandes. - Ouais, c'est pas grave. - Euh... Donc, euh... 32... - Ah, tu as fait celle-là. - Donc, 32%... Ouais. - Ouais. Après, 86% des gens ? - Alors, 86% des gens qui ont une Chibi... ...sont sourds et n'ont pas... n'ont pas le bac. Alors ça, euh... ça, c'est pour les étudiants. - Ouais. - Ça, on n'en a rien à foutre. - D'accord. - Mais ça, euh... je vais te dire une chose, si les étudiants se t'emballent avec une Chibi dans leur lycée... - Ouais, c'est mal. - Ils sont complètement starbés. - C'est clair. - Étudiants ou étudiantes. - C'est clair. 12% des gens... - 12% des gens rêvent toute la nuit de se prendre une bonne grosse Chibi. Alors là, je voudrais bien savoir... Euh... Je voudrais bien savoir le rapport avec le débat sur la Chibi. - Mais peut-être qu'il y en a qui, tu sais, qui rêvent d'avoir une Chibi... - Non, mais Gaëlle... - Non, non, mais attends... - Gaëlle, si tu écoutes Gaëlle... - On va demander... on va demander à Gaëlle... - Bonne fête, Gaëlle, aussi. - Ah, c'était la 5, Gaëlle. Bonne fête. - Bonne fête, Gaëlle. - Donc, on va demander à Gaëlle qu'elle me trouve une réponse à la... à la... au pourcentage qu'elle m'a donné. - Ok. - Donc, cinquième question. Pensez-vous que la Chibi devrait-elle être utilisée sur une autre personne ? - La Chibi devrait-elle être utilisée sur une autre planète ? On va demander ça... - Oui, euh... - Pardon, avant que tu commences, à la place de... de Blénaud... - Non, à la place de Sissi. - Non, à la place de Sissi, on accueille Veru. - Oui, bonsoir. - Salut, Veru. - Bonsoir à tous. - Manu. - Manu. - Ouais ? - On prend sur les 24 signes. - C'est ce que je fais, Gérard, regarde. - Bon, Gérard, pour revenir au débat, il y a Turpentine qui te demande si, avec la Chibi, on peut parler en morse avec une otarie. - Alors, euh... parler en morse avec une otarie, je ne pense pas. - Je ne pense pas, parce que... déjà, les otaries, c'est des... ça doit être des poiscailles, ça ? - Ouais, c'est... ouais. C'est des animaux. - C'est des animaux en plus, Gérard. - Comment ? - Tu vives au Kenya. - Mais tu fuckes un peu ou pas ? - Comment ? - Tu fuckes un peu ou pas ? - Non, je fuck pas. Je fuck ma wife. - T'en as pas, d'otaries, toi ? - Non, moi, j'ai pas d'otaries, moi, j'ai qu'une truie. - Moi, je fuck pas ta wife, hein. - J'ai qu'une truie. - Comment, ta truie ? - Elle s'appelle... elle s'appelle "Je t'emmerde". - Ah, d'accord, OK. - Elle s'appelle "Je t'emmerde" ? - Ouais, elle s'appelle "Je t'emmerde". Et elle vous chie dans le cul. - C'est fin. - Euh, Régo ? - C'est fin. On a perdu 1200 personnes, là. - Merde. - À cause de quoi, Régo ? - Bah, chie dans le cul, là. Ils ont pas aimé... Attends, je regarde un truc. - Ouais, ben, donc, je pose la question. Pensez-vous que la CBD devrait être utilisée sur une autre planète ? - On va... on va la faire, la question. Après, on va... - Ouais, on mettra le disque après, ce soir. - On le mettra après, vu qu'on a commencé à la bourre. Donc, Rousseau, il est pas pressé, hein. - Ouais, OK, comme Régo, je pense. - Ouais, ben, il va prendre à 5 heures du matin, et puis c'est tout, hein. Wesh, wesh, wesh, hein. - Ouais, ouais. - Ouais, wesh, wesh. - Donc, on va demander à Cendrier, allez. - Ouais, franchement, ce serait trop bien, hein, qu'on puisse communiquer avec les extraterrestres, tout ça. - Ouais. - Et tout ça. - En plus, t'imagines, avec le visiophone, ce serait génial, hein. - Ouais, mais... - On pourrait voir la touche des extraterrestres, tout ça, ce serait cool, hein. - Ouais, mais faut voir Canal. - Non, non, mais attendez, moi, je vais vous demander une chose. Ça, c'est une question que je vous pose à tous, donc vous allez me répondre. Là, ça fait deux choses, hein. Vous allez me répondre : est-ce que vous pensez que le Big Bill... - Rien d'info du Big Bill, on parle des CB. - Non, mais est-ce que le Big Bill, qui est à la télé, pourrait avoir une CB pour communiquer avec Vincent Lagaffe ? - Mais non, il a trop de tuts, ce mec-là, il a pas besoin, il a pas besoin, ouais. - Non, mais c'est bon, on n'est pas à un mariage, hein, pour mettre les klaxons, hein. On parle pas de mariage, hein. - Lagaffe, il communique pas, hein. - Ah non, il communique avec qui ? - Bah, je sais pas, mais il fait tout le temps des bruits et tout, je sais pas ce qu'il fait, ce mec-là, mais... - Il a pas de potes, il a pas de potes. - Il communique pas, c'est pas... - Bon, allez, allez, allez, mets ton doigt, là. - Un pauvre gars. - Ouais, Gérard. Bah écoute, moi, je dis qu'il est déjà tellement la merde sur la CB... - Ouais. - ... que si on en est ailleurs, bah voilà, c'est encore plus inaudible. - Ouais. - On a eu des bruits de routiers sur la route, alors en plus, ils continuent de nous rajouter de l'espace, on est mal, en plus... - Non, mais attends. Attends, mets ton doigt. Je vais te dire une chose, qu'on est bien contents de posséder une CB dans sa voiture et de communiquer avec des routiers pour savoir comment que ça roule. Hein, on est bien d'accord. Oh, mets ton doigt. Oh ! - Gérard se riaissait hier, il me dit : "La CB, c'est bien en abusé, ça craint." - Ben, ça, c'est vrai que... Après, une fois que t'es dedans, tu peux plus t'en... C'est comme une drogue. Tu peux plus t'en passer, c'est comme... C'est comme fumer... C'est comme fumer ou boire, voilà. Celui qui vient de dire "Merci". - T'as tous les vis, toi, alors. - Non, non. Moi, j'ai... Ah, il me manque un vis. C'est de baiser. C'est ça qu'il me manquait. - Non, non, non, non. - C'est pas ce que j'ai fait avec Bulldog Mister. - Bulldog Mister, attends, merde, toi, connard. T'as compris ça ? - Ouais, j'ai compris. - OK. - Et tu sais pourquoi il te dit ça ? - Il est vraiment... Il est vraiment... Il est vraiment phénoménal ! La, la, la, la, la, la, la, la, la... - Eh ben... - Bon, Laurent... - Il est vraiment... - Oh, mon gueule derrière, s'il vous plaît ! Merci ! - Eh, t'es vraiment... - Eh, non, mais attendez ! Mais attendez ! Il est 1h43, pour l'instant, ça s'est bien passé. Je voudrais que ça continue comme ça. - Non, mais GG, je disais juste que t'étais à fond anal, c'est tout. Je suis d'accord. - C'est qui ? - C'est un verru. - Un verru ! - C'est pas un verru ! - Ben voilà, t'as répondu, donc on passera ton tour après. Laurent ? - Oui, j'écoute. - Donc, pour toi... - Barry Walt. - Eh, Barry Walt ! Barry Walt. - Ouais, c'est ça. - Oh, sans déconner, là ! - Sans déconner. - Oui, pourquoi pas ? - Sans déconner. - Pourquoi, mon gueule, le lagaffe ? - Pourquoi pas ? - Pourquoi pas ? - Pourquoi pas ? - Oui, pourquoi ils sont de l'Est ? - Ben oui ! Donc, c'est pour aller avec sans déconner, avec lagaffe. Je pourrais te demander, est-ce qu'il a des chiens, Laurent ? - Oui, j'en ai vu. - Avec un break, non ? - Ah, ben ça, ça te regarde pas. - Gégé ? - Quoi ? - Ce verru, je voulais juste dire que Laurent, avec sa grosse voix, il me fait un peu penser à un genre de Tony déguisé. Je voudrais dire que c'est lui qu'on a vu pas d'habitude. - Là, je vais te dire une chose, verru, tu te mets une grosse verrue dans le cul. - Ouais, c'est sûr. Je vais te dire une chose, je prends mon pied. - Ouais, ben, tu prends ton pied, ben, moi, je prends pas mon pied avec toi, d'accord ? Pesse de taureau ! - Il est tenu dans la boîte à quelqu'un, ça peut le faire, quand même. - Bon, verru, tu fermes ta gueule, maintenant. - Oui, chef. - D'accord. Euh, pesse de taureau. - Ouais, ben, vu que j'ai deux au standard, tu peux m'appeler de la question, s'il te plaît ? - Si, je l'ai calmé, parce qu'il avait dit un truc pas bien, donc... Alors, pesse de taureau, pensez-vous que la Cibi devrait être utilisée sur une autre planète ? Bon, allez hop, terminé pour lui. Camembert ! - Qu'est-ce qu'il y a, Manu, au standard ? - Je sais pas, je l'ai coupé, ça le fait toujours. Terminé ! Camembert ! J'ai coupé tout le monde, ça le fait toujours, ça vient pas de moi. - Y a un problème standard, là ? C'est la table télécom, ça ? - Ah ouais, y a un problème au standard, hein, Fulda ? - Ah, regarde, c'est moi, ça ? - Bon, c'est chef de taureau, donc c'était pas moi qui ai fait le con. - C'est quoi, ce bordel ? - Euh, donc, je voudrais répondre à la question, non, je pense pas que... À ma connaissance, hein, enfin, je suis pas sûr, mais je pense pas qu'on puisse aller sur une autre planète. - Ouais. - Euh, donc, impossible d'avoir une Cibi sur une autre planète. - Ok. - Surtout, tu parles bien devant ton combiné, toi. - Ouais, je comprends. - On dirait que t'es un nouveau dans le truc. - Bah ouais, moi, j'arrive, moi. - Camembert, Camembert ! - On va te former, alors. - Ok. - Camembert ! - Ouais, moi, je dis, il faut avoir un grand BLU, sinon t'arrives pas à capter. - C'est quoi, un BLU ? - Bah, c'est le truc, là, pour parler en Thaïlande. - Ah, ok. - Ok. Bon, donc, euh, en fin de compte, euh... - T'as emmerdé, là, non ? - Non, je pense pas qu'on pourrait avoir des... des cibistes sur notre planète. - Pourquoi ? - Euh... - Ça coûterait trop cher, en fil ? - Ouais, je pense. Rigaud ? - Oui, y a un petit sondage que Booster est allé chercher sur l'Internet. Alors, 45% des personnes interrogées n'en ont rien à foutre de la Cibie, 23% n'aiment pas les routiers cibistes, 15% pensent que la Cibie... qu'avec la Cibie, ils vont pouvoir décoder Canal+ et 5% se rappellent de tatailler lors des rencontres cibistes et auraient bien aimé l'enculé. - Ouais, bah, c'est bien. Euh... Donc... je vais poser. - Oh, Steve ! Oh, Steve ! Arrête ! - Tu peux virer Steve Austin au standard ? Vas-y, Gérard, vas-y, vas-y, vas-y. - Donc, la question... Manu... - Tu fais chier. - Manu, tu vas prendre une baffe. - Je vais gérer. - Ouais, ouais, tu vas prendre une baffe. Euh... Pensez... Pensez-vous que la Cibie est-elle réservée plus aux hommes qu'aux femmes ou autres, et on s'écoute comme un ouragan : "Je pète avec des fleurs, je pète avec des fleurs, je pète avec des fleurs à épines." Et on se retrouve tout de suite après, au 0800 308 5000 et 0870 7000 et tout ça. Le Fun Radio est www.fr. Rigaud vous y attend et je vous retrouve tout de suite après. Vous êtes bien sur Fun Radio. A tout de suite pour la suite. - Les débats... - Pas de radio et... - Pas d'insultes ? - De chien. - Et voilà. Donc, on va faire une petite pause. ''Musique' Vous êtes toujours sur Plein Radio. Il est 1h50. C'était un bon scud. C'était quoi ? Comme un ouragan, je pète avec des pleurs à épines. En espérant que je n'ai pas écorché les noms. Ce que tu viens d'annoncer, à mon avis, c'est un tube. C'est Pildar qui me donne les titres. Il n'y a pas de plantade. On va finir le débat sur la CBI. On va finir le débat sur la CBI. Pour ça, on récupère Cendrier. Salut. Mets ton doigt. Salut. Laurent. Salut. Sans déconner. Celui qui dit Tarlouse, il ferme sa gueule. Toi, tu dégages. Bonne nuit. C'était qui ? Je ne sais pas. C'était pas lui. Verru. Fesse de taureau. C'est une passion. C'est moi qui commande. C'est pas vous. C'est lui le boss. Et Camembert pour terminer. Il en a des boss. Donc alors, la question, vous l'avez toute comprise. Vous avez bien compris la question. Non, non. Non, non, mais là, vous n'allez pas me faire chier maintenant. Alors, pensez-vous que la CBI est-elle réservée plus aux hommes qu'aux femmes ? Alors, Cendrier. Oui, je t'écoute. Ben écoute, ouais, ben en fait, c'est plus pour les deux, quoi. Parce que maintenant, il y a autant d'hommes que de femmes dans la profession de routier, quoi. Et donc, je ne sais pas, ça concerne de plus en plus de femmes, quoi. Salut, je réponds bien. Voilà, j'ai terminé. Mets ton doigt. Ouais, Gérard, ben écoute, moi, je pense que déjà, pour les hommes et les femmes, ben, c'est pareil, quoi. Ils ont le droit tous les deux. Et puis, autre, ben, moi, je pense à mon chien qui s'y entraîne, mais il a du mal quand même. Ça, c'était un méga job. Ok. Moi, je mettrais bien une super cartouche à Super Jimmy. Ben, moi, je vais te mettre une cartouche qui va fermer ta gueule, maintenant. Putain, Wonder Woman, elle est bonne, quand même. Ouais, ben, je t'emmerde. Euh, Laurent ? On parle de votre combiné, Laurent, t'es pas un gamin. Ah, ben, mon téléphone, il y a un problème, là. Ouais, ouais, il est dans son break, alors. Non, non, les chiennes. C'est ce qui pousse, et tout. Oh ! Ouais ! Eh ! Oh ! Bon, ouais. Gérard, t'arrêtes, s'il te plaît. Ça me prend la tête, ça. T'arrêtes, parce que, pour l'instant, ça s'est bien passé, alors tu vas pas commencer à me faire... Non, il y a rien que du bon boulot. Donc, Laurent ? Non, non, mais, c'est mieux pour les hommes que pour les femmes, hein, pareil. Pas de problème. Ouais, mais, par contre, si j'ai... Ou autre, tu veux à peu près ? Ou autre ? Ou autre ? Pas du tout. Je pense pas que des chiens peuvent avoir des cimis. Ah, ben, non. Bah, les perroquets ! Attendez ! Si je vous dis un perroquet, est-ce qu'il peut se faire vivre d'une cimis ? Non. Si... Si il a un QRZ ? Avec ses pattes ? S'il a un QRZ, ouais. Et alors ? Quand tu sonnes chez toi, et qu'il y a personne, et que t'as un perroquet, qu'est-ce qu'il dit, le perroquet ? Allô ? Eh, Gérard ? Ouais ? Je veux pas être méchant, mais si le perroquet, il tient la cimis, il se perce la gueule du perchoir, hein. Ouais, ben, alors là, là, non, pas du tout. Euh, Rigo ? Oui, il y a Canard WC sur l'IRC, il te demande si... Est-ce qu'il existe des cimis modèle Batman ? Non. Et est-ce qu'il y a des cimis de couleur, ou elles sont toutes noires ? Euh... Alors là, c'est une très bonne question. Merci, tu fais du bon boulot, ça, hein, Gérard. Et ça, je... J'en ai vu avec... Avec... Je dirais pas son nom. Donc, j'ai vu des cimis, c'est vrai que t'as des cimis qui sont carrément en forme de bois, mais teintés. Ah ouais ? Comme l'intérieur, avec des... T'as des branches avec des feuilles ? Non, non. Non, t'as... T'as... C'est une cimis, euh... Par exemple, tu vois, euh... Tu vas... Tu vas chez... Chez Ikea ? Non, chez... Dans un concessionnaire. Dans un... Dans un concessionnaire. Ouais, à Carrefour, au Champs, des trucs comme ça. Non, non, la concession... Bon, s'il vous plaît, derrière, vous fermez vos gueules, merci. Des marques de cimis ? Non, non, mais tu vas... Tu peux aller n'importe où, moi, j'en ai vu une, à Vaud, euh... Ben, justement, ça va être la question suivante, le prix. Donc, vers U. Je dis, la cimis, c'est pas réservé que aux hommes, les femmes, elles y ont droit, y'a pas que des cons, y'a aussi des connes, quoi. Bon, alors, vers U. Vers U. Vers U, terminé pour toi. Allez, hop. Terminé ! Je l'ai éclaté, je l'ai éclaté, la vers U. Baisse de taureau. Ouais, je pense que la cimis, euh... Ce serait plus pour les bouseux qu'autre chose. Comment ? La cimis, c'est plus pour les bouseux qu'autre chose. Alors, tu peux préciser ? Aïe ! C'est parce que c'est un bouseux. Pour toi, tu devrais le savoir, hein. Tu prends un coup de jus. Je m'en fous, moi. C'est un bouseux. Ben, en camembert. Ouais. Moi, je pense que c'est plus pour les hommes que pour les femmes, parce que les femmes sont un peu plus intelligentes pour qu'elles utilisent le téléphone. Non, ben, alors, attendez, parce que là, pour l'instant, vous répondez tous à côté de la plaque. C'est ce que j'allais dire en même temps que toi, en plus, t'as vu ? C'est fort. Donc, moi, je peux juste prendre contre ? Il est imprévisible, Gérard. Manu, tu vas commencer à être calmé. Ouais, t'éteins ton micro. D'accord ! Tu peux fermer un peu ta gueule ? D'accord ! Merci. Donc, je peux vous dire une chose, que maintenant, comme il y a l'égalité des hommes et l'égalité des femmes, donc il y a l'égalité des deux, donc, des sexes, donc là, la Cibi, c'est très bien réservé. Devant ton micro. Pour les hommes, aussi bien pour les hommes que pour les femmes. Parce qu'en fin de compte, t'as aussi bien, t'as autant de femmes routiers que d'hommes. Non, mais il n'y a pas que les routiers. Oui, mais il y a tout. Il y a les chauffeurs de taxi, il y a les routiers, donc en... Est-ce que, par exemple, les prostituées pourraient avoir une Cibi pour avoir des clients ? C'est plus simple. Non, je pense pas. Pourquoi ? Je peux pas te dire pourquoi. Attends, je suis en train de chercher... Qui c'est qu'il y a d'autres qui pourraient avoir des Cibis ? Souvent, des ambulanciers en ont. Ah oui ? Puis, bien sûr, nous, on peut s'en servir comme moyen de... De locomotion ? Non, oui. Gérard, il y a Canard DC qui te demande, est-ce que les marabouts peuvent guérir des gens par la Cibi ? Non. J'ai une question, Internet. Non, mais Manu, pour l'instant, tu te... Hein ? Non, mais attends, pour l'instant, toi, t'arrêtes avec ta merde. Toi, t'es un... Toi, tu... Hein, bande de nazes ? Hop ! Arrête, Manu, t'es pénible. Attends, c'est mon standard, ça fait des étincelles. Arrête, tout à l'heure, ton standard, il va... Tout à l'heure, ton standard, il va te mettre une barbe, toi. Donc, alors, à la question, donc, il y a... du débat sur la Cibi, donc, que Gaël m'a donné. Ouais. Il y a 47% des routiers n'utilisent leur Cibi qu'entre 21h et 21h. Alors, ça, ça m'étonnerait. Elle a dû se planter, voilà. Ouais, parce que là, 21h et 21h, je vois pas... Ouais, je vois pas trop le rapport. Je vois pas le rapport non plus. Ouais, du cheval. Donc, après, il y a 16% des gens sont prêts à tuer leur chien pour avoir une Cibi. Alors là, Gaël, tu vois... Là, tu chies. Tu chies dans la colle. Ouais. Et donc, la dernière question. Ouais. Quelle heure est-elle ? Elle est 1h57. 1h58. On a encore le temps de faire une question et la conclusion. Deux, deux, deux. Non, non, non. Non, non, deux. Une. Bah, tu choisis la meilleure. Tu choisis la meilleure. Bah, c'est moi qui commande. Je fais la sept. Et après, je repose une question. OK ? C'est pas toi qui commande, c'est moi. Non, ta gueule, toi. Non, mais... Ta gueule. C'est pas cool, ce qui m'arrive. Ta gueule. J'ai envie de faire caca et j'ai pas mon téléphone. Eh bah alors, si t'as envie de faire caca, tu fais une chose, tu raccroches ton téléphone et tu appaires caca. J'ai plus mon téléphone, je t'en fiche. Eh bah, je m'en fous. J'ai l'habitude de chier pendant les débats. Alors, euh... Devrait-on consacrer une émission de télé sur la Cibi ou à l'école ? Manu ? Oh non ! Oh non, Gérard. Devrait-on consacrer une émission de télé... Regarde. C'est pas toi. Non, je te jure que c'est pas moi, Gérard. C'est pas toi, c'est mes premiers trucs. C'est les premiers trucs que j'ai fait quand j'étais à la... Mais tout le monde de là, ça... Non, non. Devrait-on consacrer une émission de télé sur la Cibi ou à l'école ? On va demander ça à Camembert. Ouais, bah surtout pas, parce que la Cibi, c'est quand même réservé à une élite. Et si on apprend ça des tout jeunes aux gamins, la Cibi et le Canal 19, ils vont être complètement saturés. Non, mais déjà, le Canal 19, c'est saturé, déjà. Bon, tu t'écrases ? Je réponds aussi avec... Non, non, mais attends, tu t'écrases ? D'accord. Pour l'instant, c'est moi qui commande. D'accord, excuse-moi. Euh, fesses de taureau ? Ouais. Bah, je pense qu'enseigner ça aux gosses, c'est vraiment un truc à pas faire. Parce que, après, voilà, quoi, c'est pas cool. Bon, d'accord, euh... C'est tout ta réponse ? Bah non, mais qu'est-ce que tu veux enseigner de la Cibi aux gosses ? C'est impossible. Ça va leur niquer la tête, c'est clair, ça va les ruiner. Non, je pense pas. Stop, stop, stop. Rigaud. Gérard, il y a le vrai Perforas, si on y a assez, qui te demande quel est le jour de la grève des Cibistes pour faire grève contre France Télécom, c'est quel jour ? Il y en a pas. Pourquoi ? Parce que maintenant, c'est la Cibi, et ça, Laurent, il pourra le confirmer. Maintenant, la Cibi n'est plus agréée par les PTT. Tu confirmes la tarlouze ? Non, je te parle. La tarlouze à ton maire, toi, connard ! La France Télécom, Gérard. Elle confirme ? C'est Pedro. Euh, pour l'instant... Attends, Laurent. Celui qui s'amuse à insulter les gens comme ça, pour l'instant, va fermer sa gueule, ou sinon, il va dégager ! C'est pas cool. C'est Pedro, j'aimerais parler comme tout le monde, c'est Pedro. Moi, je t'emmerde, espèce de salope ! Oh, pas trop de vulgarité, quand même. Ouais, mais attends ! On se calme, Gérard, on se calme. Dis à Manu de les gérer, c'est son taf, hein. Laurent ! Au lieu de jouer à Zelda, là. Oh, ta gueule ! Laurent, tu peux confirmer ce qu'on vient de dire ? Tout à fait, Gérard. T'as tout à fait raison. Donc, pour toi, donc, le canal 19, c'est vrai que maintenant, il est... C'est un canal d'appel, donc, pour avoir d'autres renseignements, il faut changer de canal. Voilà. Voilà. Donc, tu peux... Donc, est-ce qu'on... D'après toi, est-ce qu'on peut enseigner ça... À l'école, peut-être ? Est-ce qu'on pourrait faire une émission de télé, ou d'enseigner ça à des jeunes... Qui seraient capables ? Pas question. Putain, celui-là, il va fermer sa gueule quand je parle. Merci. Mais pourquoi ? Tu veux les traumatiser, les gamins. Ben non, mais... Mais ça fracasse la tête. Regarde, t'en es le digne exemple. Je veux dire, qu'est-ce que faire de la cibier aux gamins ? Ils vont parler avec des mecs comme toi, après. Et alors ? Imagine le genre de fréquentation. Comment tu veux qu'ils évoluent dans un milieu stimulant, après ça ? Bon, écrases-toi. Je veux plus vivre dans un monde... Allez, tais-toi, tais-toi, tais-toi, tais-toi, tais-toi, tais-toi. Tout n'est pas si facile. Tais-toi ! Tais-toi, tais-toi, tais-toi. Donc, Laurent, donc, pour toi... Non, mais déjà, à l'école, ils ont toujours aimé parler l'histoire, et puis français, alors... Tu leur apprends à parler la cibier, alors... Ok. Mets ton doigt. Ouais, Gérard. Ben, écoute, si on enseigne ça, déjà, aux gamins, comme disait la demoiselle tout à l'heure, je crois que c'est ton rire qui... C'est Camembert. C'est Camembert, excuse-moi, Camembert. Ben, écoute, très saturé, on puisse faire atteindre gamins qui diraient des conneries partout, et puis, en plus, leur apprendre à boire à cet âge-là, c'est chaud. Bon, alors, mets ton doigt. Pour l'instant, c'était pas la... C'est pas... Tu réponds à côté de la plaque. Ben, si, l'alcooliste des mineurs, c'est ça, la question. Ouais, c'est ça. Allez, hop. Vas-y, hop. Au revoir, pour lui. Au revoir. Au revoir. Au revoir, mets ton doigt. Au revoir, mets ton doigt. Tu peux l'enlever, tu peux l'enlever. Allez, au revoir, mets ton doigt. Enlève-le. Euh, cendruyer. Cendruyer ! Ouais, mais, en fait, moi, je suis pas d'accord pour qu'on puisse enseigner la cibie dans les écoles, quoi. Arrêter l'école et tout, quoi. En plus, on se prend la tête pour, je sais pas, aménager les horaires, les réduire, tout ça. On perd du temps à leur enseigner la cibie. Moi, je trouve ça inadmissible. D'abord, il y a mathématiques, le français, après, on parle de la cibie. En option, en terminale, j'en sais rien. En plus, à la télé, c'est pas la peine, parce que tu mesures un peu la face télé, non ? Oh, tu t'écrases derrière celui qui fait... Je suis partie dans mon truc et tout, là. Ouais, c'est clair, ouais. Bon, ça y est, ça y est, c'est terminé. Donc, dernière question, il est... Deux heures d'heure, on va peut-être faire conclure. Non, deux heures trois. Là, conclue. Deux heures trois. Bon, ben, on va faire, alors, vas-y. Deux heures trois, parce que là, t'as pendule de nas. Ouais, c'est le truc, elle est réglée sur RTL. Bon, allez, tiens, voilà mes genoux. Moi, j'ai l'heure pile. L'heure des cibies. Ouais. L'heure des cibies. Alors, donc, moi, je vais vous poser une question. Vas-y, pose. Ça va être la dernière. Combien peut coûter une cibie, en général ? Et on va demander à Cendrier, tiens. Encore ? Eh ben oui, encore. Je vais te donner une fourchette. Attends, attends, attends, cinq minutes. Question, à la place de mets ton doigt que t'as viré, on accueille Pines de Chacal, qui fait de la cibie aussi. C'est ce que tu es, RZ. Salut. Salut, Pines de Chacal. Salut, tout le monde. Salut, Chacal. Salut. On peut t'appeler Pines ? Ouais, pas de problème. Bon, allez. Donc, Cendrier. Bonjour. Moi, je te donne une fourchette entre 2 et 4 millions de francs. Ah ! Non, mais entre 2 francs et 4 millions de francs, non ? Ok, alors toi, t'es le comique. Ouais, t'as dit ça. Toi, pour l'instant, derrière, tu vas t'écraser. Donc, toi, tu dis combien ? Entre 2 francs et 4 millions de francs. 4 millions. Voilà, comme ça. Ok. Pines de Chacal, ouais. Moi, je suis pas trop d'accord que tes potes les blaireaux, ils passent dans les débats comme ça. Bah, moi, je t'emmerde. Donc, toi, tu vas répondre à la question ou pas du tout ? Ouais, bah, répète-la-moi, je t'emmerde. Non, bah, alors là, tu vas plus écouter. Non, mais répète-la-moi. Il m'expliquait son QRZ. Non, non, non, non, non, non, non. Il a très bien entendu la question. Non, je te jure que non. Répète-la-moi, s'il te plaît. Combien coûte une cibie en général ? Ah, bah, moi, la mienne, je l'ai payée 500 balles. Et c'est du bon matos. Là, ça le fait. D'accord. Laurent ? Je voulais témoigner d'un truc aussi. Moi, ce que je m'amuse, parce que je suis un petit plaisantin, je m'amuse à faire des faux radioguidages. Eh bah, alors, dans ces cas-là, Pines de Chacal, au revoir pour toi, tu prends même pas la conclusion. Terminé, terminé. Excellent. Terminé, terminé, terminé, terminé. Ok. Laurent ? Premier prix, c'est 60 francs, c'est 1 000 dans les canaux. Et la plus chère, c'est 2 000, 8 000, 6 000, 3 000. Euh... Entre deux... Entre 500 et ? Entre 500 et 2 000, 8 000. Ok. Gérard ? Gérard ? Gérard, oui ? Je voulais revenir sur l'histoire des radioguidages. Non, non, non, non, il n'y a pas de radioguidages, tu donnes. Effectivement, il avait tout à fait raison. Moi, je sais que pendant des années, j'ai passé du temps à orienter des cars de bonnes soeurs et de maisons de retraite dans des ravins, des plans dans ce genre-là. Voilà, merci, Laurent. Merci, Beru. Baisse de taureau. Baisse de taureau ! Bah, tu m'écoutes ou pas ? Tu réponds ou pas ? Bah, je réponds. On a mis en rentaine, c'est tout. Oh ! Oh ! Euh, ça doit coûter... Ouais, je sais pas, parce que j'ai pas jamais été... Ouais, il y a du bruit derrière. Bon, tu réponds ? Ouais, 200 à 300 francs. C'est ça. Euh, Camembert, pour finir ? Bah, moi, celle de mon copain, j'ai payé 10 000 francs d'occasion, ce qui fait à peu près 200 euros. Ouais, d'accord. Et on parle pas des gens... Donc, moi, je peux vous dire une chose. Que là, Sibi, Laurent étaient plus proches. En fin de compte, ça vaut presque entre 500 et 2 et 3 000 francs. La quelle est la mieux ? Celle qui fait 500 ou 2 000 ? Euh, le mieux, c'est carrément d'acheter une neuve. Au moins, t'as une garantie. Mais là, tu payes pas loin de 2 500 à 3 000 francs. 3 000 balles, la garantie, c'est cher. Normalement. Bon, ça y est, derrière... Oh, espèce de connard, là ! Eh ! Oh, Dieu ! Et il y en a un qui a la diarrhée, hein. Ouais, lui, il commence à me casser les couilles. C'est pas pareil. Quitte, parce que ça revient quand même vachement moins cher. Eh, t'as... Eh, t'es sûr que je vais te demander, à toi qui réponds, t'as jamais entendu parler d'Essibi en soutien-gorge ? Non, non. Non, j'en parlerai pas. Non. Alors, donc, conclusion. Ok, Michel. Donc, Cendrier. Gérard, Gérard, Gérard. Il y a un... Non, non, non, non, non, c'est terminé. Il voulait faire sa conclusion. Bah si, pour la conclusion. Il s'appelle Quiquette de Bison. Non, non, attends. Non, non, non. Ouais, salut. Ouais, Quiquette de Bison va faire foutre. Cendrier. Ouais. Conclusion. Le débat, en fait, il s'est pas trop mal passé. Non, c'était bien. C'était bien, Gérard. Ouais, c'était bien. On peut dire que c'était la merde, quand même. Ouais. Et puis, bon, bah, je suis contente. Je connais un peu plus sur l'Essibi, quoi. Et puis, demain, j'irai dans une banque pour m'acheter une. Est-ce que Gérard a une envie d'en assumer ? Non, mais attends. Non, mais attends, Cendrier. Il faut te dire une chose, que là, on n'a pas un débat sur l'Essibi. On aurait pu le faire plus longtemps, parce que j'aurais pu faire carrément un débat entier sur l'Essibi. Merci pour celui qui rote, espèce de gros porc. Ouais, non, non. Je disais que j'aurais pu aller plus loin. J'aurais pu faire carrément toute la nuit pour faire toute la soirée, pour faire un débat sur l'Essibi. Pourquoi on l'a pas fait ? Parce que ça coûte cher, tout simplement. Et c'est tout. Laurent, qui c'est qu'on a à la place de Pindochacal ? Je t'ai dit, Quiquette de Bison. Alors, Quiquette de Bison, ta conclusion ? Est-ce qu'il y a le temps de faire une petite anecdote, là ? Non. Alors, ma conclusion, c'était bien. On a bien appris ce que c'était l'Essibi. Ouais. T'es enrhumé, non ? Ouais. T'es enrhumé, Tony, hein ? T'es pas le choix. T'es enrhumé, Tony. T'es enrhumé, Tony. T'es bien enrhumé, hein ? OK. Alors, salut à toi, Tony. Laurent. Ça a été bien, pour une fois. C'était super bien, pour une fois. Il n'y a pas eu de problème. Il faut bien faire que ça se passe bien. OK. Vers une. Ouais, ben moi, je voulais dire que le débat a été, donc, comme d'hab, constructive. La voix de Laurent m'a bien fait kiffer. Je suis sûr que ça se pignole dans les cabines. Et je voulais dire que l'Essibi, c'est sûrement le moyen de communication de l'an 2000, oui. Alors, Verru, Verru, je vais te dire une chose, que Laurent, il t'emmerde. Et moi aussi. Il y a beaucoup de filles, je suis sûr, qui vont vouloir son numéro standard. Tu ne peux pas dire le contraire. C'est ça, t'as raison. Ben là, tu rêves. Tu te mets un doigt dans le cul. C'est pour lui, hein ? Tu te mets un gros doigt dans le cul. Mais doucement, quand même. OK ? Bon, alors, dégage. Bonne nuit. == Le débat sur les Miss France == === Contexte === === Les personnages === === Transcription === Donc vous êtes toujours sur Fun Radio, c'est le deuxième débat, donc il est 2h21 et donc pour le deuxième débat vous pouvez toujours nous appeler au 0800 308 5000, puis l'art est au standard donc il va vous accueillir. Bonjour ! Bonjour à toi Brouty, Rigaud le super chef de l'internet qui fait du bon boulot toutes les semaines donc qui vous attend au www.frfunradio. Donc on est combien la matin Rigaud ? Tu peux l'appeler par téléphone avec ? T'as l'air Fildar, tu vas te prendre une baffe, ce coup là je vais pas te rater toi. Donc on est combien ? On est 4282, ce qui est beaucoup. Donc je voudrais qu'on aille jusqu'à 5000 et puis Manu qui est à l'Aria. Bonsoir à tous ! La grosse ça t'emmerde toi la grosse espèce de con. C'est pas bien de parler de la femme de Gérard comme ça. Donc on va accueillir Mego. Mego de 19 ans de Brest. Salut Gérard, ça va ? Je sais pas, j'ai pas regardé ce matin. Bravo ! Pierre, 24 ans de Bourbon, annoncez-moi les fréquences de Mego, Brest. Ouais, 84.16. 84.16 ? Ouais voilà. Ouais mon cul tiens. Ok excuse-moi 84.6, excuse-moi. Ouais bah je préfère. Pierre ? Salut. La fréquence ? Euh, 82. Ouais tu connais pas ta fréquence alors on va te faire sauter. Tu connais pas ta fréquence alors on va te faire sauter. Ouais tu connais pas ta fréquence alors on va te faire sauter. Miss Essonne, 19 ans, de Saint-Etienne. Miss Essonne, 19 ans, de Saint-Etienne. On a une Miss France, j'avais oublié de te le préciser. Miss Essonne qui était première dauphine en… Ohlala le 9 ans, le 9 ans. Au régional. La même suite de gaz quoi. Miss Essonne, 19 ans, de Saint-Etienne. Votre ablot, tu réponds. Salut le brésilien. Tu vas chanter à l'Eurovision bientôt. Oulala lalalala. Elle est enrouée. Ça commence, ça commence, ça commence, ça commence. Elle est enrouée. Elle est enrouée. Ça commence, ça commence, ça commence. Elle est enrouée. Elle est enrouée. Tu réponds ! Salut le brésilien ! Tu vas chanter à l'Eurovision bientôt ! Ça commence, ça commence, ça commence, ça commence ! C'est une nana, c'est un trablos, qui c'est qui m'a choisi ça ? Fildar ! Fildar ! Fildar ! Mon pote Fildar ! Un Fildar ! Donc Mikos, 20 ans de Lyon, Kudan, 24 ans de Nogent-sur-Marne, on écoute... Non c'est ça, 101.9, d'accord ? Fous-toi pas de ma gueule ! Foufoune de Nantre ! Salut à toi ! Non c'est Lady de Nantre ! Fildar, fais gaffe parce que tout à l'heure ça... C'est Lady Di ! Pas le tunnel Manu ! Pas l'alma ! Pas le tunnel anal ! Gérard, Gérard, assieds-toi, assieds-toi, t'as pas Fildar dès le début ! Je commence pas, d'accord ? Sinon tu retournes en arrière ! Pas le tunnel anal, on a dit ! Bon ta gueule à toi ! C'est Monsieur Bouygues ! Bon continuez, continuez à me casser les burnes au deuxième débat, on va éclaircir vite le débat ! Ouais ! Ça commence bien ! Allez on va creuser, vas-y ! Alors que préférez-vous dans Miss France ? On va demander ça à Mego ! Moi j'aime bien ses robes ! Ouais ! Ouais, je trouve que c'est des bons couturiers ! Elles sont vachement cultivées je trouve ! Non mais tu peux donner plus de précision ? Bah je trouve que, je sais pas moi... Ouais, elles sont cultivées quoi ! Tu peux leur poser n'importe quelle question, genre... Quelqu'un l'a fait hier, tu vois, à chaque fois elles te répondent bien ! Ouais ! Tranquille hein ! Ouais tranquille, tout à l'heure tu vas faire tranquille au standard toi ! Tranquille ! Pierre ! Ouais, moi j'aime bien les hawaïennes ! Donc j'aime bien son boule en fait et c'est ça ! Ouais Tony ! Ok Tony ! Allez ! Allez ! Allez Tony, terminez pour toi ! Non mais Gérard, Gérard là il a rien dit quoi ! Non mais attends, faut pas déconner ! Hier il est passé, il passe pas dans les débats aujourd'hui ! C'est clair, net, très précis ! J'ai dit, j'en veux pas ! Ok, et toi tu vas me faire du boulot correct ce coup-là ! Si Tony il peut plus passer jamais, s'il passe plus jamais, qu'est-ce qu'il va faire dans sa vie ? Et alors ? Qu'est-ce qu'il va faire dans sa vie ? Et alors ? Bah non, il faut le passer ! Il passe dans la semaine et c'est tout ! Mais il y a rien à côté ! On peut pas, on peut pas ! Ou alors on essaie de voir, parce que c'est vrai que dans la vie, bon, toi j'ai... Non, faut arrêter là de le passer ! Ou alors on teste, faut qu'on teste ! Bah la première incartade... Parce qu'à toute manière il est pas de Bourbon ! Il va en prison ! Mais non parce qu'il est pas de Bourbon ! Si si, il est en vacances ! Non non non, attends ! Je suis en vacances ! Bah ouais t'as mon cul ! Hier t'étais à Paris et puis là ce soir t'es à Bourbon ! Bah attends, ça t'arrive jamais toi ! Moi le soir je suis à Paris, le soir je suis à Lyon, quand je vais faire une soirée, je mets pas dix jours pour y aller ! Enfin ! Il y va hein ! Il a un scooter, c'est tout ! Et alors Tony, vas-y ! Non mais j'aime bien la wayenne là en fait ! Je l'ai trouvée très séduisante ! Mais c'est Tony ! Bah ouais c'est le Tony, c'est celui qui est passé hier avec toi ! Non mais il est bien, il est bien, il est bien ! Il a le cul propre en plus en ce moment ! Il a une belle boîte à caca, j'aime bien la wayenne en fait ! Bon non mais je te demande, que préparez-vous dans Miss France ? Ouais mais il paraît que c'était truqué ! Je sais pas si t'as entendu ça ! Non mais attends, pour l'instant Tony, tu dis pas de conneries ! Parce que c'est pas le... Non mais c'est vrai ! C'est pas les questions, d'accord ? Alors ou tu réponds correctement ou tu dégages ! Je vois que t'es un peu trop sur moi là, mais moi je te dis, moi j'aime bien Miss France ! Bon, ok ! Décale-toi un peu Gérard, t'es trop sur lui ! Ouais, trop sur moi ! Recule, recule que je m'interromps ! Gérard, il y a Madame de Fontenay sur l'IRC, la vraie ! La vieille là ? Ouais, qui voulait te prévenir que si tu dis que les élections de Miss France sont truquées, elle t'attaque en justice ! Eh bah, elle fait ce qu'elle veut, moi je l'emmerde ! Oh là là, procès ! Miss Saison ! Elle va te mettre un procès au cul ! On l'emmerde la vieille ! Miss Saison ! Oui, j'écoute ! Alors, quand est-ce que tu t'es fait opérer, toi ? Bon, allez, hop ! Raconte-nous tout ! Allez, hop ! Terminer, moi ! Non, non, mais moi, allez, hop ! Bonne nuit, bonne nuit, bonne nuit, bonne nuit, bonne nuit ! Allez, hop ! J'ai pas sommeil ! Non, non, mais bonne nuit pour Miss Saison, hop ! C'est fini pour elle, j'aime pas... Quand je pose des questions, j'aime pas qu'elle réponde à moi... Je peux la garder, quand même ? Non, non, non, tu la... Pour moi, pour moi ! Non, non, mais tu... Pourquoi tu la kiffes ? T'as qu'à la sauter, si tu veux, moi, j'en ai rien à foutre ! Euh, Mycose ? Ouais, bah, écoute, euh... Ce que je préfère chez les Miss, c'est quand même leur cul, hein, on va pas dire le contraire ! Ouais ! Faut être franc, leur cul est leur nibard ! Ouais ! Par contre, c'est vrai qu'il y a un peu de la triche, elles sont dopées à mort, c'est clair ! Euh, attends... Elles sont dopées, elles sont dopées ! Attends, attendez, attendez, attendez ! Attendez, attendez, attendez ! Attendez 5 minutes ! Je te laisse, je te souhaite une bonne nuit ! Et je te rappellerai peut-être la semaine prochaine ! Ouais, ouais ! Salut ! Et tu vas pas la rappeler, d'accord ? Et elle change pas sur un autre nom ! Mais tu... Tu joues à quoi, Fildar ? C'est parce que t'es là, tu vois ? Tu vas laisser ta place à Manu... Ah non, non, non, non, non ! Et tu vas se dégager là-haut ! Oh non, il fait du bon boulot, au standard, Fildar ! Ah ouais, ouais, il fait du bon boulot, tiens ! Non, c'est le meilleur, c'est le meilleur ! Ouais, ouais ! Et si on perd du monde à cause... Sur l'IRC, à cause de lui, faudra pas se plaindre ! Pas de soucis, on en gagne, on en gagne ! Merci ! Micose ! Oui, donc, je te disais, elles sont quand même dopées au maximum ! Je sais pas si t'as vu les formes qu'elles ont, je veux dire, s'il y a pas de l'hormone bovine là-dedans, je sais plus, je m'y connais plus, quoi, tu vois ? Madame de Fontenay, elle refile quand même pas mal de saloperies à ses miss ! Le PO ? Ouais, je crois, entre autres choses... Arrête, Gérard ! Bon, Gérard, c'est avec... Viens t'asseoir, écoute les auditeurs, au moins ! On fait le travail à ta place ! Euh, Cudan ! Ouais, bah alors, moi, les nanas de Miss France, tout ça, je sais pas, je leur trouve rien de spécial, des fois, je... Je sais pas, dans la rue, on a des mieux, quoi ! C'est ça que je comprends pas, ça t'intéresse pas les femmes, toi ! Ouais, c'est clair ! Foufoun ! J'aime pas trop ce que tu viens de dire ! Bon, ça y est, on se calme derrière, s'il vous plaît, merci ! Foufoun ! Moi, j'aime bien leurs dents, et Jean-Pierre Foucault ! Je trouve qu'elles ont des super belles dents ! Non, mais attends, hé ! Fildar, attends, attends 5 minutes ! Fildar ! Tu, euh, si tu veux, t'as qu'à allumer ton micro, et puis gueuler dans le micro, dire « Allô, Fun Radio ! » Je travaille ! Attends, c'est pourquoi, t'as besoin de gueuler comme ça ? Bah, ils m'entendent pas ! Bon, allez ! Bon, alors, Foufoun ! Ouais, moi, je te disais, j'aime bien leurs dents, et Jean-Pierre Foucault ! C'est ça, bah, t'as qu'à l'appeler, puis tu lui demanderas ce que c'est ! Non, mais moi, je le trouve vachement séduisant, puis... Non, non, mais attends, t'as qu'à lui demander ! T'as qu'à lui demander ce qu'il s'est passé pour élire Miss Tahiti ! Ok ! Gérard ? Non, attends, Rigo ? Oui, il y a Miss Devi One sur l'IRC, qui te demande si Sandy a gagné le concours Gros Plein de Soupe ! Miss Gros Plein de Soupe ! Alors, euh, c'est qui ? C'est Miss Devi One ! Alors, Miss Devi One, Sandy a ton merde ! Ok, pour toi ! Voilà ! Tony, tu... Non, c'est pas moi, c'est pas moi ! Gérard, il te dit qu'il t'emmerde, lui aussi ! Eh bah, c'est bien, maintenant ! C'est pas moi, c'est pas moi ! Le mec, là, il peut laisser des messages, c'est même plus la peine de me les annoncer pour lui ! Ah, je vais aller me connecter, là ! Sandy, c'est dommage pour son corps, parce qu'elle a une belle tête ! Tony, Sandy a ton merde ! Non, mais c'est vrai qu'elle est belle ! Sandy a ton merde ! Mais il dit qu'elle est belle ! Sandy t'emmerde ! Bon, alors, Tony, tu te calmes ! Sinon, on accueille à la place de Miss Essonne, Georges, 43 ans, de Saint-Louis, qui, en fait, est le père de Miss Berry. Tu sais, c'est le cas perdu ! Je l'ai au standard sur les 24 lignes ! Bonsoir ! Elle est sur IRC, Miss Berry. Oui, bonsoir. Bonsoir, Georges. Oui, bonsoir, Monsieur Georges. Oui, Georges, ta fille, c'est un boudin. Ça y est, derrière, oui ! C'est normal qu'elle ait perdu, c'est un plomb ! Elle est plus de points, aussi. Bon, tu me calmes un peu, ça, parce que ça va... Mais qui ? Je te calme qui ? C'est un peu un plomb, on va dire. Voilà. Par bien. Allez, allez, allez ! Mais quoi, j'ai rien fait ! Bravo, le boulot que t'es en train de me faire ! Bravo ! Tu nous fais de la merde ! Attends, tu peux mieux dresser à l'aria, ça vaudra mieux. Non, non, non, c'est bien, là. Alors, seriez-vous d'accord pour inscrire votre copine au concours de Miss France ? On m'a demandé ça à Mégo. Ouais, mais en fait, ma copine, elle a déjà concouru pour l'élection l'année dernière, mais le problème, c'est qu'elle est perdue, quoi. Donc, depuis, elle est un peu traumatisée, quoi. Et donc, voilà. Mais Gérard, il ne vous écoute pas, il est en train de taper fil d'art ! Putain, Manu ! Ah non, non, non, c'est pas possible, ça. Ça, c'est pas possible, Gérard. Bon, ben moi, dans ce cas-là, moi... Dans 14 minutes, j'arrête. Gérard, s'il te plaît. Dans 14 minutes, j'arrête. On repose la question, s'il te plaît. 14 minutes, j'arrête. Gérard. Il fait que tu as de la merde. Il est en train de se... Il fait que des conneries, donc moi, dans 14 minutes, j'arrête. Je ne fais même pas les 11 questions. Non, moi, j'écoute. Qu'est-ce qu'il y a ? Qu'est-ce qu'il se passe ? Mais attends, il est en train de faire que des conneries. Tu fais que des conneries ! Mais qu'est-ce qu'il a fait ? Ça s'est bien passé dans le premier débat. Ouais, pour l'instant, il est en train de me faire que des conneries. Pourquoi ? Mais qu'est-ce qu'il a fait ? J'écoute, moi, je n'ai pas compris. Je lui demande quelque chose. Ah oui, vas-y, donne des raisons. Donne des raisons. Donne une raison, j'écoute, moi. Qu'est-ce qu'il se passait à l'antenne qu'il ne te plaisait pas ? Moi, je lui demande de calmer les gens, il ne les calme pas. Si ! Non, non, il ne les a pas calmés, il est en train de se... Tout le monde se fout de la gueule des gens. Et lui, il ne fait rien. Il n'est même pas capable de faire un boulot correctement. Si, le premier débat, à l'arrière. Alors, autant mettre Manu au standard, ça vaudra mieux. Gérard ? Oui ? Non, ce n'est pas possible. Sur IRC, il y a Mister Yankee qui dit qu'avec une perruque et sans ta moustache, tu ferais bien, Miss Bois de Boulogne. Ça, je m'en fous. Mégo ? J'ai déjà répondu, moi. Tu ne m'écoutais pas, aussi, là. Ben non, vas-y, dis. Non, mais je disais, ouais, c'est quoi la question ? Ça ne m'a plus, là. Alors, seriez-vous d'accord pour inscrire votre copine au concours de Miss France ? Euh, non, je ne serais pas d'accord. Et arrête de renifler. Oh, excuse-moi, là, oh, là, là. T'es égrue, ce soir. Bon, non, moi, je ne suis pas d'accord. Je ne suis pas d'accord pour faire subir ça à mes copines. D'abord, c'est des amis, je ne leur ferai jamais ça. D'accord. Voilà. Euh, Tony ? Ouais, non, moi, je la garde pour moi. Ben, tu peux préciser ? Elle est trop chême. Comment ? Elle est trop chême. Elle est moche. Elle est laide. Ouais, tu peux préciser le pont de ta pensée ? Affreuse. Vilaine. Il y a des concours pour ça, hein ? Berck. Bon, OK. Georges ? Gérard, attends, attends, attends. Sur IRC, il y a Miss Olio qui te demande si les Miss France t'excitent. Non, pas du tout. Pas du tout. Georges ? Pourquoi ? Il te demande pourquoi elle ne t'excite pas. Parce que ça ne m'intéresse pas. Trop belle. Bon, Tony, ça suffit. D'accord. Maintenant, tu laisses parler les gens. Mais Miss Berrick, qui dit que t'es un menteur ? Je m'en fous. Georges ? Après Miss France, il faut avoir 20 ans. Ma femme, elle a 56. C'est pour après être Miss France. Elle est vieille, ta femme. Je ne l'ai pas vraiment. Je venais à 56. Il y a Miss Tigri qui t'encule. Je l'ai viré juste quand j'ai entendu ça, Gérard. Alors, lui, c'est terminé. Terminé pour lui. Mycose. Justement, je l'ai viré parce que c'est lui qui foutait le bordel tout à l'heure. Alors, c'est bien. Donc, à la place, on a Clafoutis, 19 ans, qui appelle de Brest. Au jour d'aujourd'hui, 14 heures précises, je viens faire une requête au sieur. Peri Grigali ! Et qui appelle de Brest et qui te souhaite une bonne soirée. Au jour d'aujourd'hui... Salut, Gérard. Salut. C'est Clafoutis. Alors, moi, j'ai été hôtesse de présélection des Miss. Et j'ai été refoulée parce que j'avais une jambe plus courte que l'autre. Et ça se voyait en maillot de bain. D'accord. Alors, je trouve que c'est inadmissible. Ok. Voilà. Kudan ? Moi, la question va être vite réglée. Je n'ai pas de copine. Ok. Foufoune ? Moi, j'avais une copine. Enfin, une copine. Je ne pouvais pas la blairer. Et je l'ai inscrite au concours de Miss Boudin Noir à la CUSA l'année dernière pendant les vacances de ski. Et cette conne, elle a gagné. Et ça y est, c'est tout ? C'est tout ce que tu as à me dire ? Ben oui, ça y est, c'est tout. Gérard ? Oui ? Sur IRC, il y a Miss Devitou qui te demande est-ce que les Miss, quand elles gagnent le concours, elles gagnent une CB ? Non. Ce n'est même plus le thème des débats sur les CB. Demande à machin Devitou s'il ne gagne pas une Dreamcast. Puis tu lui demanderas qu'il réponde correctement aux questions en dehors des débats. Gérard, il y a Madame de Fontenay qui te dit que vu que ces Miss ne t'excitent pas, elles supposent que tu es homo. Et alors, qu'est-ce que ça peut y foutre ? Ah, c'est vrai. Ben alors, Gégé, quoi ? Non, mais attends, qui c'est qui s'amuse à faire des conneries derrière ? J'ai coupé les auditeurs, là, Gérard. Donc, troisième question. De nos jours, la beauté de Miss France est-elle importante ? Non, elle n'est pas importante. Ouais, ben justement, Gégé ? À partir de 17h. Tu fais une partouze à 17h, moi je t'emmerde et tu vas fermer ta gueule maintenant. C'est où, c'est où ? Ouais, c'est 12 rues. Ouais, oh ! Du château, hein. Château comment ? Tu me calmes ça, là ? Déjà, tu me calmes Tony parce que là, il commence à... Ouais, il fout la merde. ...à me gonfler, lui. Et en plus, il est sourd. Tony. Non, non, non, non, non, non, non. Tony, tu te calmes. Non, tu les prends en antenne, ils se calment. Autrement, tu dégages, Tony. Moi, je te dis, à l'antenne, comme ça, il va flipper. Ouais, ben, il va dégager dans moins de deux minutes, lui, si il continue. Non, mais je sais même pas quand je suis à l'antenne, quand je suis hors antenne. Non, mais pour l'instant, tu vas répondre à la question, maintenant. Non, mais répète-la, moi, parce que je sais pas... Non, non, non, non, non, non, non. Non, non, non, non, non. Non, non, non, non, non, non. Non, non, non, non, non, non. Je répète plus les questions. Alors, attends, je vais te faire une... Attends, je vais la répéter pour toi, Tony. Mego. Mego. Ouais, je t'écoute, là. Ben, en fait, ouais, c'est vachement important, surtout pour les vicieux qui regardent, hein. Et puis, ouais, enfin, moi, je m'en fous un peu, quoi, de la beauté des Miss France, là. Voilà. Donc, pour toi, la beauté, c'est pas importante ? Ben, c'est important pour les vicieux qui regardent. Sinon, pour moi, non, c'est pas important, quoi. OK. Ça y est, j'ai compris la question. Je peux répondre ? Ouais. Ouais, c'est très important, la beauté. Sinon, à quoi ça sert de regarder Miss France ? OK. Hé, Gérard. Quoi ? Tu sais ce qu'elle fait, Miss France, quand elle voit... C'est qui ? C'est Cudan. Tu sais ce qu'elle fait, Miss France, quand elle voit une peau de banane par terre ? Non. Merde, je vais encore me casser la gueule. Ouais, ben alors, merde. Moi, je vais te dire une chose, que là, maintenant, tu peux dégager. Ben, c'est pas méchant. C'est pas grave. Ben, c'est pas méchant. Bon, putain ! C'est pas méchant. Putain, mais arrête avec ta merde, là. Tu me gères un peu ça, là. Tu me fais quoi, là, de la merde ? T'as compris ? Tu me vires Cudan. Hop, terminé. Ouais, c'était sympa, la blague. Hop, terminé. Georges. Oui, la beauté, ça, c'est... Faut pas tenter la France, quand même. Même, on aurait... Sinon, on aurait une mauvaise image de la France. La beauté, c'est ça. Euh, Clafoutis. Bonjour. Ouais, c'est pas... Moi, je trouve que la beauté, c'est n'importe quoi, parce que c'est pas parce que j'ai une jambe plus courte que l'autre que, en fait, ben, j'étais pas belle, quoi. C'est n'importe quoi. En fait, j'étais aussi belle que les autres, mais évidemment, maillot de bain, ça se voit de trop, quoi. C'est ça, le problème. Non, mais tu peux préciser ? Eh ben, je précise que, ben, la beauté, c'est pas si important que ça, quoi. On peut avoir une jambe en moins et... Ouais, c'est vrai. Ben ouais. Ouais. Et puis être miss, quoi. Ouais. Eh, Gégé, tu veux pas faire une blague à Sandy et l'inscrire à Miss France ? Comment ? Tu veux pas faire une blague à Sandy et l'inscrire à Miss France ? C'est qui ? C'est qui qui parle ? Rodrigo. Bon. J'ai l'impression... J'ai l'impression qu'on va s'arrêter dans moins de 3 minutes. Oh non, Gérard ! On continue ton débat, là. C'est bien, non ? Franchement, c'est cool, ouais. C'est bien, on s'éclate. Ouais. Alors, Foufoune ? Ouais. Ben, je pense que c'est un minimum, ouais, qu'elle soit jolie au moins et puis qu'elle sache aligner deux mots, quoi. Ouais. Bonjour, ça va ? Oui, ça va. Là, j'ai dit 3 mots, t'as vu ? Ouais, 3 mots. Bonjour. Gégé, tout à l'heure, il y a une fille qui disait qu'elle avait inscrit sa copine à Miss France. Moi, j'ai inscrit un copain, tu sais, question pour un champion pour lui faire une blague et il a été éliminé au 4 à la suite. C'est pas le thème du débat ! Hop, terminé pour Tony. Non, non, mais attends. Terminé pour toi, c'est fini, là, maintenant. Non, mais t'es pas insulté, là. Ça est terminé ! OK, alors retourne à la danse, espèce d'enculé. Bon, moi, je t'en mets, salaud ! Oh, là, tu me le vires complètement. Il est viré, il est viré. Là, moi, un connard comme ça, moi, j'en veux pas. Alors, maintenant, tu m'envoies la musique, on va calmer tout le monde, maintenant. OK, OK, OK. Bah, t'annonces les numéros de téléphone et tout ça, s'il te plaît ? Alors, donc, vous pouvez toujours nous appeler au 0803 08 5000 et 0870 5000 et toujours de lire cww.fr ou que Rigaud vous attend. Rigaud, tu peux nous dire combien qu'on est ? Je crois qu'on a dû perdre... 4 382, c'est bien, et on s'écoute le disque. 4 300 ? Bon, ça va. Donc, on se retrouve tout de suite après. Voilà, vous venez d'écouter les petits sissons de la bonne avec des bas résiliés. Résilés, pardon. Et donc, vous êtes toujours sur Fun Radio, donc, 2h44 du matin. Ouais. Donc, j'espère qu'on va atteindre, et ça, mon chef, il vient de me le demander, j'espère qu'avec Rigaud, on va atteindre des 5 000 avant la fin de l'année. C'est ça, c'est ça. C'est ça, c'est ça. 3h du matin. Je pense que ça devait être possible. J'espère. Possible. Si les bas se passent bien et que tu gueules pas trop, ça devrait le faire. Vu que là, quand le disque s'est arrêté, on était à 4 462 moins 4, ça devrait le faire. OK. Alors, donc, on récupère Margot. Mégot. Mégot, pardon. Ouais, ouais. Excuse-moi, excuse-moi, excuse-moi. D'accord, je t'excuse. J'ai dit Margot, mais c'est pas grave. Ouais, c'est bon, Margot, non ? Bah ouais, pourquoi pas, c'est le nom d'un chien, en plus. Ouais, d'accord, OK, bon. OK. Ouais, c'est ça. OK. Poussin. Bonjour. Oui, donc, bonsoir à tous. Bonsoir, Mégot. 24 ans de... Bonsoir, Balut. Bonsoir, Fildar. Bonsoir, Max. Salut. Bonsoir, mon chien. Bonsoir, Poussin Mystère. Ah, bonsoir, Gérard. Excuse-moi, je t'avais oublié. Ah ouais, bah, c'est simple. Georges. Bonsoir à tout le monde. Bonsoir, Clapouti. Ouais, salut, toujours là. Bouledopu. Oh, Bouledopu ! C'est quoi, ce bordel ? Salut, salut, salut, salut, Gégé. Bouledopu. Ouais, je suis là. Bonsoir, Gérard. Bonsoir, Sandi Capé. Bonsoir, tout le monde. Sandi Capé, je vais te dire une chose, que Bouledopu, tu vas pas commencer tes conneries, d'accord ? C'est pas le problème. C'est pas le problème. Moi, je suis calme. T'es dans le coup, aussi, non ? Ouais, à fond. Et Foufoune ? Ouais, salut, Gérard. Salut, Sandi. Alors... Je vous rassure tout de suite, je m'appelle pas Sandi. Tu me rassures. Alors, la quatrième question, donc... Non, c'était la troisième. Non, quatre. D'après vous, comment je les... Comment je... Comment je les misse France ? Ça doit être de la bite. Comment ? À mon avis, c'est des crudités, hein. Attends, attends, attends, attendez, attendez. Qui c'est qui vient de répondre, là, que c'est de la bite ? Pas moi. Pas moi. Pas moi non plus. Bon, alors, on va demander à Foufoune. Ouais. Je sais pas, ils sont allés au grain, en plein air, dans le foin. Non, mais tu peux préciser. Elles mangent des choses saines, sans bactéries, sans EPO. Elles sont des picoses et elles font de l'agime. D'accord. Elles sont bien gaulées, donc il y a du travail, quoi. Elles passent par la chirurgie esthétique, elles mettent des millions là-dedans pour faire Miss France. Ouais, mais ça, c'est pas elles, en fin de compte, c'est pas elles qui payent. Ah non, c'est Madame de Fontenay qui paye. Non, non, non, non, non, non. Faut bien se dire une chose. Non, c'est les Restos du Coeur qui payent. Non, mais attends, toi, t'es à ton micro. Donc, faut se dire une chose. Pour être Miss France, déjà, c'est pas Madame de Fontenay, comme tu viens de dire. Ouais, c'est les impôts. Donc, ça passe par des concours de mode et tout ça. Donc, on va demander à Bouledopu. Gérard, avant, sur IRC, il y a Triso, Miss Triso, qui te demande quel est le QRZ de Madame de Fontenay. Ça, c'est pas le thème des débats. Pas belle, je crois. Pas belle, ou vilaine. Non, non, mais c'est même, c'est pas du tout le thème des débats. La Cibi est terminée, maintenant, c'est sur les Miss France. Donc, on va demander à Clapouti. Bah, je pue de la gueule, moi. Ouais. Qui ? Bouledopu. Bah, tu viens de répondre. Bah, non, j'ai pas répondu. Bah, alors, tu réponds. Ouais, alors, je pense que, je sais pas, je dois vous faire 2-3 Big Macs le midi. Un bon sauciflard le soir et un rôti de veau. On va avoir une belle ligne. D'accord. Tu crois qu'en mangeant tout ça, elles auront une belle ligne ? Je crois que le midi, elles mangent des frites, moi. J'en suis la preuve. Bah, attends, parce que t'es belge, toi. Ah non, je sais pas, je dis ça comme ça. Eh, t'es devenu belge ? Et après, chez elles, ça pue l'huile. Ouais, mais t'es... Non, ça pue l'huile. Eh, t'es bien. Ouais, mais t'es devenu belge, toi. Hein, non, non. Ouais, mais t'es comme Pildar, vous devenez belge, là, tous les deux. Bah, alors, toi, qu'est-ce que t'es, Gérard ? Clapouti. Euh, ouais, bah, moi, je pense qu'elles mangent des asperges en boîte. Ouais. C'est super bon pour la forme. Et qu'elles boivent du lait de chèvre. Parce que ça, c'est super top pour le teint. Et puis, bah, en fait, la Fontenay, par contre, elle, elle mange des frites. Non, non, mais attends. Eh, Clapouti. Ouais. On n'en a rien à foutre de la Fontenay, d'accord ? Ouais, mais c'est quand même une mise. Non, non, mais on n'en a rien à foutre. On n'en a rien à foutre. On s'en fout de la Fontenay. Non, elle voit le régime dragounien. Elle mange de la salade. Elle mange vraiment de la grasse. On peut grossir. Qu'est-ce que t'as donné à manger à ta fille, toi, avant qu'elle fasse le concours, Georges ? On a été voir un diététicien. Il a fait un régime pour les salignes. Puis c'est tout. On s'en fout de la grasse. Hum, hum. Euh, Poussin ? Ouais, bah, moi, je suis d'accord avec Georges. C'est vrai qu'il mange surtout des salades, tu vois, prodités, concombres, même des... Ok, super. Bon, derrière, vous laissez les gens répondre, s'il vous plaît. Oh ! Excuse-moi. Vous laissez les gens répondre. Ça vaudra mieux pour tout le monde. Parce qu'il est 2h49, et on n'est qu'à la quatrième, et il y a 11 questions. Oh, putain. On dit pas putain. Euh, bah, qu'est-ce que je dis ? Alors, donc, pour finir, Poussin, si tu pouvais continuer ce que tu me disais. Ouais, donc, je te disais, bah, tu sais, les Miss France, ils ont franchement un régime draconien, parce qu'il faut qu'elles mangent des croûtes. Oui, des pétraves, des salades. Donc, ils n'ont pas le droit à la graisse, ni au sucre, rien du tout. D'accord. Euh, Margot... Euh, Mégo, pardon. C'est pas cool. Moi, je dis que les Miss France, là, elles mangent rien. Elles pensent à rien, elles mangent rien. Et puis, je dis, quand elles ont vraiment, vraiment faim, au bout d'une semaine, elles mangent une courgette. D'accord. Question IRC. Oui, une question de Madame de Fontenay, la vraie. Elle te demande pour quelle Miss tu aurais voté. Euh, personnellement, moi, je... Bonne question, ça. Moi, je voterais pour personne. Oh, t'as regardé ou pas ? T'as bien un petit avis, quand même. Non, non, mais même... Lequel tu préférais ? Non, non, mais même, vu ce qui s'est passé, ça m'intéresse pas. Mais... Non, non, mais... T'avais bien une préférence, je veux dire, moi, j'avais une préférence, Rigo, il avait une préférence. Il s'est passé quoi ? Euh, j'aurais... Qu'est-ce qui s'est passé ? De toute manière, ça va être la dernière question. Donc, on n'est pas couchés. Donc, 43% des gens utilisent la Miss France pour découvrir la région de la France. Les régions de France, pardon. Bah ouais. 28% des Miss France utilisent seulement les portables pour s'appeler entre elles. Ça, je vois pas du tout le rapport. 71% des Miss France préfèrent être Miss Univers... Univers Solitaire. Univers Solitaire, c'est quoi, ça ? Au-dessus de... T'as Miss France, t'as Miss Monde, t'as Miss Univers et Univers Solitaire. C'est le top des Miss. Ouais, bah, c'est bien. 23% des gens... Des gens pensent que la Miss France ne sert à rien sauf pour se masturber. Alors ça, euh... Ça, c'est vraiment des... Il y a beaucoup de gens qui pensent ça, quand même, hein. Ouais, bah, ouais. Si, si. Combien y en a ? 23%. C'est énorme, hein. Ouais, ça fait beaucoup, hein. Et 32% des gens pensent que l'abonnement aux Miss France est trop cher. Il n'y a pas besoin d'abonnement. Voilà. Si ! Non. Quoi, si ? C'est ça, Rigaud, hein. Je me suis pas trompé dans... Dans les sondages ? Non, non, c'est ça. T'as bien joué. Alors, une question que je vais poser à tout le monde, et ça, je peux préciser que sur la question que je pose, personne n'a été capable de me le donner sur les sondages, et ça, c'est bête. Donc, d'après vous, depuis quelle date Miss France existe-t-elle ? On va demander à Mégo. Ouais, bah, écoute, ça a toujours existé depuis la nuit des temps, parce que, au départ, l'élection de Miss France... C'est une légende. C'est une légende, et puis ça s'est perpétué, et puis... Pardon ? Allô ? Ouais, on t'écoute. Ouais, je disais, donc... Ouais, ça date de la... Bon, on me laisse parler, là ? C'est possible ? Ah, vas-y ! Ouais, bonjour, c'est Boule de Pue. Ouais, ouais, attends, Boule de Pue, pour l'instant, tu... C'est pas fini. Oh, Manu... Fildar ! Ouais ? Calme-moi, Boule de Pue, là, pour l'instant, c'est pas son tour. Ouais, calme-moi, Fildar. Ouais. Mégo, donc, précise. Ouais, alors, donc, je disais, ça a toujours existé, depuis le début, au départ, c'était une légende, et, en fait, voilà, comme maintenant, ça se concrétise, tout le monde peut voter, tout le monde peut participer, maintenant, c'est génial, voilà. D'accord. C'est pas pour Boule de Pue. Ok. Rigo ? Oui, il y a Miss Assetton qui te demande, c'est quand l'élection des Miss Calendrier de Routier ? Ça, je sais pas. Ça, je pourrais pas lui répondre. Qui c'est qui va passer derrière ? C'est quoi, ça ? Je sais pas. Ah, c'est le poussin vert mystère, là ? Un poussin mystère tout court. Un poussin vert mystère. Écoche pas mon nom, s'il te plaît. Bon, c'est ce que je vote, toi, d'accord ? Un poussin vert mystère. Bah, écoute, moi, ce que je peux te répondre, c'est que ça existe déjà depuis très, très longtemps. Ouais. Et que, déjà, à l'époque de Cro-Magnon, ça existait. À l'époque de qui ? À l'époque de Cro-Magnon. C'était qui, Cro-Magnon ? C'était qui ? C'était qui, Cro-Magnon, là ? C'était qui, Cro-Magnon ? C'était les hommes historiques. Oh ! On se calme derrière, on laisse passer le poussin vert mystère de mes genoux, là. Faites place, faites place. Ah, c'est les hommes préhistoriques. Ah ! Ah, mais c'est un homme préhistorique. Bon, non, c'est à l'époque des hommes préhistoriques, quoi. Ah ! Ah, attends, mais ça... Il y avait des femmes qui étaient mythes. Ah, ouais, mais c'est à l'époque où Jésus-Christ est allé sur la Lune. Ok, super. Hein, poussin ? Ça va être l'humour, ce soir, Gérard. Oh, putain. C'est cool, Gérard. Oh, poussin ! Oui ? C'est à l'époque où le premier homme est monté sur la Lune. Ouais, c'est super beau, oui. Gérard ? Allô ? Poussin ? Oui ? Quand tu parles de l'époque préhistorique, c'est l'époque des 100 dinosaures ? Oui, voilà, les 10 dinosaures, et puis je ne sais plus quoi, là, les... Les tranctosaures, là, les trucs comme ça. Ah, les brunosaures, les... Les brontosaures, les tricérapthos. Ouais, bon, Georges, les 100 dinosaures. Depuis le temps, trop tard. Georges ? Oui ? Comment c'est, en 1956 ? 66 ? Non, 56. 56 ? Oui. Je ne suis pas trop d'accord avec toi. Pourquoi ? Ah bon ? Non, non, mais on va laisser tout le monde répondre clapoutis. Ouais, moi, je pense que c'était en 1789, parce que la première, elle s'appelait Marianne, je crois. Oh, ouais, bah d'accord. Alors là, toi, t'es carrément parti sur... C'est vieux, hein ? Ouais, mais c'est vachement vieux, en fait. Oh, ouais, vache. Oh, la vache. Eh, pourquoi c'était pas l'année de la vache, les Miss France ? Mais non... Non, mais tu te rappelles pas, Marianne, avec son chapeau, là, et tout ça ? C'est clair, quoi, c'était elle, c'était l'ancêtre, déjà, de l'autre, là, Geneviève, et tout. Elle avait le chapeau, c'est clair, c'est 1789. Bon, ok, d'accord. Ok. Boule de puce ? Ouais, alors moi, je sais pas du tout. Faudrait pas te dire une date exacte, mais je sais que je regarde depuis l'âge de ma naissance. Que je kiffe Miss France. Elles sont bonnes, quoi. D'accord. Foufoune ? Ça existe depuis que Madame de Fontenay a pris un extra, en 1962. Et depuis, elle s'en est parmise. Je voudrais se partir avec Laurent Gardier. Elle a m'enflé, hein. À mon avis, je pense que vous vous trompez tous, ça existe depuis 1965, et il y a eu un reportage... Ah, j'ai fait trois ans. Il y a eu un reportage de fait... N'importe quoi. C'est faux ! Tu mens, Gérard. Tu mens comme tu respires. Ouais, moi, je t'emmerde ! N'importe quoi. Bon, tu me mets tout le monde en air. On est en air. En air. Tranquille. J'en connais un tout à l'heure, il va se prendre une bobe si je l'attrape, lui. Ouais, c'est ça. Bon, tu me mets... Tu me coupes tout le monde. Voilà. Voilà. Donc, alors, moi, je peux vous dire une chose, que ça existe depuis 1965, et ça, c'est vrai, parce qu'il y a eu un reportage qui a été fait samedi, sur la Une, avec... Patrick De Carolis. Non. Non ? Non, sur la première, c'est pas avec... C'est Emmanuel Chien. Henri Chambon. Ah, avec Henri Chambon. Et donc, ça existe depuis 1965. Exactement. Les sélections de Miss France. Moi aussi, Chambon. Regarde, Chambon, Gérard, sans... Hop, on... Suivante question. Sortirez-vous avec la Miss France en boîte ou autre ? Allô ? Allô ? Attendez, parce qu'il est parti savater Olivier, parce qu'il a eu le double saut. Olivier, casse-toi. Casse... Dégage, Olivier ! Arrête tes conneries, d'accord ? Et avec qui ? Je t'en reviens dans le studio, tu me fais une connerie, je te claque. Ok ? Allez, reviens, Gégé. Allez. On reprend, on reprend les auditeurs. Allez, c'est parti. Ok. Alors, on va demander à Foufoune. Ouais, non, moi j'irai pas avec elle. Mais tu peux expliquer ? Parce que je vais dans des boîtes pas très saines et je pense que pendant un an, elle n'a pas trop le droit de fréquenter ce genre d'endroits, donc non, j'irai pas avec elle. Non, bah là, tu te trompes. Ah bon ? Montez sur moi, c'est tout. Euh, Manu ! Tu arrêtes avec ce remix ! Regarde, tu arrêtes ! Ça, c'est du mix. Tu arrêtes ou sinon j'arrête, là. J'ai rien fait. J'arrête dans 4 minutes les débats. Bah ouais, c'est le but. D'accord ? Bon, allez, on y va. Donc, Foufoune, je suis... Il y a Miss Davy Free qui te demande si on peut lire dans les chromosomes d'un embryon si le bébé, il sera futur Miss France. Et si c'est un garçon, comment on fait ? Non, je pense pas qu'on peut lire là-dedans. Et il te demande combien ça fait en euros. Ouais, ça, j'en sais rien. Euh, boule de puce. Bah alors, moi, je suis chaud comme la brèze pour sortir avec une meuf, une Miss France. Elles n'ont pas le droit... Pendant l'année où elles sont Miss France, de sortir avec des garçons. Interdit d'avoir des gosses. Interdit de rien faire, les pauvres. C'est ça, bah... Je crois que tu te trompes complètement. Euh, non, pas du tout. Mais t'as dit au GG. Tu te trompes. Tu te trompes parce que... Les nanas qui sont élus ont le droit de sortir. Et après, une fois qu'elles sont élus, je t'explique pas les soirées qu'ils font. C'est quoi comme soirée ? À poil et tout. Non, non, mais attends... Des trucs cul-cul-cul ? Non, mais... Avec des menottes et tout. Non, non, après, ils sont invités dans... Dans des soirées... Moulin Rouge ou autre... Non, Ritz. Après, ils vont en Ritz. Ils prennent des Mercedes. Bon, Fildar, tu fermes ta gueule, maintenant. Euh, Georges ? Non, mais moi, j'ai ma femme. Elle s'est obligée. D'accord. Euh, Poussin ? Comme un bon sûr de ça. Comme un boule de pute, tu t'écrases. Oh, oh, oh. J'étais contentisant. C'est bon. Donc, Georges ? Ouais, non, mais avec ma femme, elle s'est obligée. Ok. Euh, Poussin ? Mystère. Poussin, Mystère. Putain ! Quelle bouffonne, celle-là, sérieusement. T'es la grosse. Bah, t'es toi, la grosse. T'es boule à dos, t'as fait finir ça. Putain ! Fildar ! Eh, mais calme-toi, là-bas, le vieux con, là. Mais non, mais Gérard, c'est bon, il revient. Reviens, Gérard. Attends, l'autre, il arrête pas de me couper les jambes. Il a laissé son truc, là, il me coupe n'importe qui. Là, il va se prendre des claques dans sa gueule, encore. Qu'est-ce que t'as fait ? C'est navrant. Y'a rien, hein ? Y'a rien, regarde, regarde. Viens voir, viens voir, viens voir. Mais, mais, mais, là, là. C'est-à-dire que là, ils sont tous talentés. Mais, bien sûr, pourquoi t'avais été là ? C'est moi qui viens de le remettre. Ah. Il l'avait mis en air, encore. Alors, il va se prendre des claques dans sa gueule. En air, c'est quand t'es à l'antenne. Il l'avait mis en out. En vête. Ouais. Il voulait pas qu'elle parle. Ah, c'était une erreur. Comme d'habitude. C'était une erreur. Ouais, ouais, c'est une erreur. Attends, tu vas te prendre des claques dans ta gueule. C'est comme un faux numéro, c'est pareil. Alors, Poussin. Ouais, bah, tu m'écoutes, Gégé, ou pas ? Je t'écoute. Fildar a fait un bon premier débat. Ouais, mais là, pour l'instant, il fait de la merde. Oui, mais comme tu me l'as pas remercié au début, tu remercies pas les gens quand ils font du beau boulot. Pour l'instant, au premier débat... Il fait que c'est crabe. Il fait un truc avec ses crabes. Bah, ouais, mais il va pas continuer comme ça. Mais d'accord, mais ça s'est bien passé. Ouais, bah, alors, dans ce cas-là, qui me passe un deuxième débat ? Qui bosse bien pour le moment ? Qui bosse bien ? Pour l'instant, Rigaud, on est à combien sur l'Internet ? On a perdu. Quand t'as dit que tu te cassais, il y en a plus de 1 000 qui sont partis. On est à 3 722. Donc, j'espère qu'on va récupérer. Bah, dis-leur de revenir, dis-leur de revenir. Manu, au premier débat, il a fait du bon boulot, au standard. Oh, merde, c'est pas vrai. Attends, c'était pas vrai. T'as gueulé dessus. Non, non, non, non. Bah, j'ai la DAT, t'as gueulé dessus. J'ai la DAT. Sur certains auditeurs... On va reprendre le débat juste pour dire à Rigaud, là, tu peux leur demander de revenir au 1000. Donc, tous ceux qui sont partis, là, sur Minitel, essayez de revenir... Non, Internet, ça s'appelle. Sur l'Internet, pas sur le Minitel, parce qu'il fonctionne pas. Non, mais Minitel, Internet, vas-y, parle de l'Internet. Donc, l'Internet, vous pouvez toujours nous joindre au www.frfunradio. Revenez, revenez, revenez. On va battre le record, ce soir, Rigaud, s'il te plaît. Faut qu'on arrive à 5000. Faut que tu nous en trouves 5000. Et là, il est 3h01, normalement. Moi, je devrais avoir fini le débat. On va chercher, on va chercher. Donc, Poussin. Oui, donc, je te disais, je pense que les... Ah oui, c'est sortir avec les Miss France. Oui. C'est pas sortir avec moi. Poussin. Moi, personnellement, je pourrais pas sortir avec une Miss France, vu que je suis une nana. Mais avec un mec qui fait Miss France, oui, pourquoi pas. Ah bah, t'as déjà vu des mecs... Je regarde si ça fonctionne. C'est pas facile pour les contourneurs de beauté. Qu'est-ce qu'elle est taubée, celle-là ? Qu'est-ce que tu fais, Gérard ? Non, je suis pas taubée, c'est vrai. Attendez, attendez. Non, non, on arrête, on arrête. Qu'est-ce que tu fais, Gérard ? On arrête, on arrête. Pourquoi tu... Mais non, on n'arrête pas, hein. Non, non, il recommence, il recommence. Il recommence, il recommence. Je suis là, je suis là. Poussin. Ah, mais c'est Manu. Mais non, parce que là, je les coupe, parce que tu parlais. Oui ? C'est Manu qui coupait. T'as été coupée combien de fois ? Manu, c'était Manu. Je peux pas te dire, parce que j'ai pas fait gaffe. Ouais. C'est pas la religion, en plus, on parle pas de la religion. Euh, donc, qui c'est qu'il me reste ? Mego ? Ouais, bah moi, je suis d'accord avec Poussin Mystère, là. Je trouve qu'elle a bien répondu à la question, et moi, je suis d'accord avec elle. - Hum ? - Voilà. Mais tu peux préciser, quand même, le fond de ta pensée ? Bah, que moi, je pourrais pas sortir avec une fille qui est dans l'élection de Miss France, parce que je suis pas intéressée par les filles. Et puis, par contre, un mec, qui va dans l'élection de Miss France, ouais, je suis d'accord, pourquoi pas ? - D'accord. - Voilà, c'est ce qu'elle a dit, non ? - Euh, ouais. - Voilà. De toute manière, y a pas que les boîtes. En fin de compte, qu'on peut inviter une Miss France, tu peux l'inviter au restaurant et autant. Ouais, mais il faut du pognon, putain. Ouais, mais ça, euh... Tu m'en prêtes ? Tu peux l'inviter à faire les boutiques, aussi, hein ? Ouais. T'as des lèches vitrines, t'as... - Fils de cul... - Poussin Mystère ? - Oui ? - Ouais, quand tu fais les boutiques, tu vas où, toi ? - De quoi ? - Quand tu fais les boutiques, tu vas où, toi ? Moi, je vais généralement dans Paris. Ouais, mais où, dans Paris ? Bah, y a une ville, mais je pourrais pas citer, quoi, parce que sinon, ça ferait trop de marques. Bon, bon, bon, bon, on va peut-être reprendre les débats, Gérard. Tu gères un peu, on y va. Donc, alors, sur la question, donc... Oui, Rigaud, une question, avant ? On va danser sur le débat ou pas, là ? Y en a plein. Y a Miss Paradox qui te demande : "Est-ce que tu penses que l'élection de Miss France, c'est pas un racket visant à enrichir France Télécom ?" Je pense pas. Mais ça... Mais justement, cette question-là, tout le monde l'attend, mais je vais la poser tout de suite, là. Non, non, je l'attends pas. Bon, attends, toi, tu perds de ta gueule et c'est tout. - Euh, Manu ? - Ah non. Tu me fais du bon boulot ? Bah ouais, je fais que ça, hein. Je fais que ça. Alors, donc, y a 86 % des gens... Bon, allez, hop, conclusion terminée, moi, j'arrête. Bah non, maintenant, Gérard, je suis en train d'essayer de récupérer des gens. Regarde, on va battre leur corps. On est remontés au-dessus de 4 000, Gérard. Gérard, reste, Manu, on y va, on y va, on continue. Alors, y a 86 % des gens qui ont vu Miss France ont vomi et s'en remettent pas. Donc ça, je vais te dire une chose, Gaël, quand tu me sortiras des trucs comme ça, tu me feras signe. 53 % des gens rêvent toutes les nuits de se prendre une bonne grosse Miss France. Donc, je sais pas où est-ce qu'elle est. Alors là, l'histoire des calendriers, je la pose pas, ça sert à rien. - Pourquoi ? Elle est bien. - Non, non. - C'est des routiers. - 47 % des routiers ont des calendriers de Miss France nus dans leur camion, c'est vrai ou pas ? - Non, c'est faux. Alors, toi, tu t'écrases. Toi, tu fais ton boulot et tu t'es... 36 % des gens ont tué Miss France pour avoir un chien. Alors là, Gaël, je vais te dire une chose, que là, je termine même plus. - Elle t'embrasse, elle t'embrasse comme elle te dit bisous, Gégé. - Allez, hop. - Sondage paru dans Miss France News. - T'as oublié de dire que 43 % des gens pensent que Miss France est une salope et que 1 % des gens préfèrent Monsieur France en string que Miss France en short. - Eh ben, ça y est, le sondage est terminé pour... - Ouais, c'est fini. - Bon, alors, maintenant, on va continuer le débat. Alors, l'élection de Miss France est-elle truquée ? Donc, on va demander ça à mégots. - Euh, non, non, elle n'est pas truquée. Je trouve qu'elle se passe normalement devant un huissier et tout ça. Voilà. - T'es sûre ? - Ouais, ouais, je suis sûre. - T'es sûre ? - Si, si, non, non, non. Moi, je pense que c'est tout à fait légal et puis il n'y en a aucune qui ait choisi dès le départ et puis voilà, quoi. Moi, je pense que c'est tout à fait légal. - D'accord. Pouce en mystère ? - Non, moi, je pense qu'au contraire, c'est truqué parce que quand tu vois ce qui s'est passé à la télé il y a à peu près 2-3 jours, ils ont expliqué que normalement, c'était la Miss Berry qui devait être élue. - Miss Berry ? - À la place de la Miss... - Miss Berry ? - Ouais, Miss Berry à la place de Miss... - Berry ! - Si, Berry ! - Oh, t'as le cœur de Paris. - Oui, c'est Berry, c'est ça que j'ai dit, Berry. - Euh, Georges ? - Oui, monsieur Aurélien, ma fille. - Mais, il y a Delphi. - C'est truqué, c'est un scandale, de toute façon. - C'est truqué. - D'accord. Question Minital... IRC, pardon. - Non, c'est pas une question, c'est... Attends, parce qu'il faut que je la retrouve... Je sais plus qui c'était qui me disait que c'est truqué, en fait, pour gagner Fos-Sucé. - Je ne pense pas. Euh, Clapouti ? - Bah, je me demande si Fos-Sucé est Geneviève ou quoi. - Non, Fos-Sucé est Jean-Pierre Foucault. - Ah, Foucault ! - Ouais, d'accord. - Ouais, ça. Boules de pus ? - Ouais, bah, moi, je pense que c'est bien truqué, parce que je me souviens, en 1975, il y a Sandy Plodocus qui a gagné le concours, et je voudrais savoir... C'est pas possible, quoi. - Puis, euh... Fildar, s'il te plaît. - Ouais ? - Tu me vires Boules de pus. - Salut, mec ! - Non, mais c'est intéressant, ce qu'il dit, Gérard, t'inquiète pas. - Euh, Foufoune ? - Ouais, bah, euh... C'est pas truqué. - Bah, tu peux expliquer ? - Parce que Sandy a dit que c'était truqué, donc je veux pas dire comme elle. - Alors, moi, je peux te dire une chose. - Oui ? - Bonjour. - Bonjour. - Gérard, en attendant, il y a Miss Davy Ford sur l'IRC qui dit qu'en tout cas, s'il voit Sandy au Miss France, il considérera que c'est clair que c'est truqué. - Mais n'importe quoi. Euh, donc, moi, je peux vous dire une chose, que l'histoire de Miss France... Bon, alors, pour moi, terminé, je... - Non, non, Gérard, c'est bon, là ! - Gérard, t'es niaque pas ! - Regarde ! - Qu'est-ce qu'il y a ? - Regarde, Gérard ! - Hé, Olivier, t'arrêtes, t'as pas tes conneries derrière ! - Allez, assieds-toi, Gérard, c'est bon, reviens, allez, allez. - Fais pas le con, toi, non plus ! - Olivier, il travaille dans le studio à côté, alors c'est lui. - Alors, fais pas le con, toi. - Salut, c'est pas moi, Gérard. - Fais pas le con, parce que de toute manière, c'est terminé. Moi, je fais la dernière question. - On te fatigue pas, Gégé, c'est bon. - Non, non, mais c'est terminé, maintenant. Allez, hop. Moi, je peux vous dire une chose, que ça a été truqué, parce que, pour une bonne chose, c'est que la ministre Haïti pleurait avant, la présidente qui a donné un mouchoir pour qu'elle s'essuie les yeux, et normalement, c'était Miss Berry, qui devait être élue non Miss Haïti. Donc, pour moi, ça a été truqué, ça a été truqué. Et ça, dans la presse, ils en ont parlé, mais maintenant, ils écrasent. Pour l'instant, ils ont camouflé, ils ont mis fin, comme dans un jury, ils ont dit : "C'est une affaire classée." Donc, pour moi, c'est de la merde. - On m'excuse. - Voilà. - Donc, conclusion du débat. - Ah ! - Non, déjà ? - Non ! - Non, c'est pas possible. - Je suis en train de rattraper des gens, là. Si tu veux qu'on dépasse les 5 000, il faut continuer le débat, là. On est à 4 722, on est beaucoup remontés. Ils ne m'écoutent même pas. - Si, si. - Non, mais non. - J'écoute, Rigaud. - Non, mais tu ne m'écoutes pas. - On était à 4 000. - Tu ne m'écoutes pas. - On est à combien ? 4 722. Voilà. - Bon, ça va, tu m'écoutes, c'est bien. - Alors, devrait-on faire une élection de Miss Boudin ? On va demander à Mégo. - Moi, je suis d'accord avec cette idée-là. Je pense qu'il n'y a pas que les beautés qui doivent participer à l'élection. Il y a aussi les boudins, il n'y a pas que des beautés sur Terre. Voilà, je pense que chacun y trouvera son compte, non ? - Je pense. Poussin vers Mystère. - Oui, donc moi aussi, je pense que pourquoi pas ? Parce qu'il y a bien aussi des Miss pour les personnes âgées, pour les mamies, il y a des Miss mamies. - Et il y a des mêmes, je dirai plus tard, Georges ? - Oui, tout le monde doit être égaux. - Ah bah, c'est bien, toi. - Bah oui. - Donc, on peut élire n'importe qui. Qui c'est qu'un téléphone pourri, là ? - Eh Gérard, là, c'est Poussin. Je voulais te dire qu'en Amérique, ils font aussi les concours d'élections sur les femmes qui sont un peu fortes. Et donc, ça fait les élections de Miss ronde. - D'accord. Ok, Poussin, Mystère, bière. - Tu t'es inscrit, non ? - Euh, Clapouti ? - Ouais, j'avais une question. Comment on fait pour les maillots de bain, alors ? - Bah, tu peux préciser ? - Bah, si on fait l'élection de Miss Boudin, on fait comment pour les maillots de bain, quoi ? - Bah, tu peux trouver des maillots de bain... - Taille unique. - Taille unique ? - Ouais, si taille unique, ça craint. - Non, mais de toute manière, tu peux trouver des maillots de bain qui sont assez... qui sont faits pour ta taille. - Eh, j'ai des toiles de teint. - Faut pas qu'ils crassent, ici. - Gérard, sur IRC, il y a Miss Pourras qui demande : "Est-ce que c'est vrai que Miss France est à la beauté, ce que Sandi est au saucisson à l'ail ?" - Ah, bah, ça, peut-être. On verra, on lui demandera. Euh, boule de pus ? - Ouais ? - Boule de pus ! - Tu l'as virée ! - Ah, bah... - Ah, bah, oui, quand même, je suis là. Bah, vu que Fildar, il m'a pas mal calmé, il m'a bien engueulé au standard. - Ouais, il t'a vachement calmé, il est en train de faire le con avec sa caméra. - Non, c'est quelqu'un d'autre, je sais pas qui c'est, je connais pas les voix. Mais t'as pas entendu la question. - Ah, bah, t'as pas entendu la question, je répète pas. - S'il te plaît, j'ai pas été méchant pendant le débat. - C'était l'élection de Miss Boudin. - Voilà. - Voilà, Miss Boudin. Et c'était quoi ? Répète, répète. - Non, mais attends, répète, maintenant, t'as compris. - C'était l'élection de Miss Boudin, c'est ça ? - Bah, si Sandy participe, y a pas de problème, ouais. - Alors, Sandy, attends, merde, tu dégages pour de bon pour toi. C'est terminé. Allez, hop ! Hop là ! - Alors, euh... Qui c'est qu'il nous reste, donc, boule de pus ? Tu me reprends quelqu'un d'autre, hein ? Oh là là, fil d'art ! - Quoi ? - Tu me trouves quelqu'un d'autre ? - Non, j'ai pas le temps. - Ouais, t'as pas le temps, tu vas travailler. Foufoune ? - Ouais, euh... Bah, pourquoi pas, non plus, faire l'élection de Miss Jambe de Bois, Miss Oeil de Vert, ou Miss Culotte de Cheval, quoi, c'est ridicule. - Hum-hum. - Voilà. - D'accord. - Gérard ? - Oui ? - Y a Miss Eason qui me demande : "Est-ce qu'une fille qui n'est pas française peut participer à Miss France ?" - Je pense. - Ouais ! - C'est faux, c'est faux ! - Pour une fois, elle a raison, c'est faux, hein. - Ouais, mais attends ! - Non, mais attends ! - Non, non, ça... Non, non, ça, moi, je peux vous dire une chose, y a toutes les villes qui participent. - Ouais, mais c'est français, les villes. - Gérard, y a Miss Paradox qui me dit qu'il a vu Sandy à l'élection de Mister Nobile 92. - C'est bien. C'est bien, c'est pas mal. Donc, moi, je peux vous dire une chose, qu'on pourrait faire... plus de... Bon, celui qui s'amuse derrière, il arrête ! Bon, allez, terminé, conclusion. Hop. Voilà, c'est fini. Conclusion, donc... - Attends, on est combien sur Internet ? - Combien, Internet, Rigaud ? - On a perdu, conclusion, il se casse. - Mais non, mais non ! - Mais non, Rigaud, t'es con ! Combien, sur Internet ? - Combien ? - 4 722. - Aïe, aïe, aïe, aïe, aïe. - Non, c'est pas grave. - La semaine prochaine, c'est les vacances, donc ça devrait cartonner, là. - Peut-être que dans la conclusion, ils vont peut-être... - Ils vont revenir ! - Tu t'écrases ! - Si ça se passe bien, mon avis, ils vont revenir. - Tu me fais du boulot de nasse, tu t'écrases au standard ! - Sinon, Gérard, Nassim... - Bon premier débat ! - Gérard ? - Oui, Rigaud ? - Nassim, il donne sa conclusion tout de suite avant de se barrer. Il dit que si Miss France s'est truquée, il n'y aurait que des Sandy en finale. Donc c'est pas truqué. - Si, ça a été... Ça a été truqué. Euh, Nassim, eh ! N'essaye pas de me virer tout le monde au standard avant les conclusions, parce que sinon... - Ouais, non. - Tiens, ça commence ! - Gérard, arrête, tu le tapes pas dessus ! - Arrête ! - Allez ! Gueule pas, ils vont pas revenir sur Internet, après. - Mais go ! - Ouais, conclusion, là, donc ? - Ouais, on arrête, là, c'est fini. - Bah écoute... Moi, Gérard, je vais te dire une chose. Pendant le débat, je suis tombée amoureuse de toi. - Non, bah c'est bien, mais je suis bien pris. - Moi, je suis tombée amoureuse de toi, grave. Je n'ai pensé qu'à toi, cette nuit, là. - Eh bah, c'est bien, t'as... - Non, s'il te plaît, fais quelque chose, là. - Non, non, mais moi, je peux rien faire pour toi. - Parole gentille, non, mais quelque chose de gentil, seulement. - Bah, attends, attends, tu reprends le fil d'art, il va... Tu reprends le fil d'art, pouce en vert. - Ouais, j'ai dessiné son numéro ! - Ouais, bah écoute, je pense que c'est... - Fil d'art ! - Allô ? Y a quelqu'un ? - Oui, y a moi, y a moi. - Pouce en vert ! - Oui, non, mais je suis là, t'inquiète pas, hein. - Conclusion ? - Tu m'entends, là ? - Ouais. - Donc, conclusion, bah, ce que j'ai à te dire, c'est que c'est un très bon débat, le meilleur que t'aies fait, et en fin de compte, bah, je pense que je vais m'inscrire à l'élection Miss France. - Non, non, non, non, non ! - Si, si, si, si ! - D'accord. - Jean ! - J'en comprends le tout, hein. - Georges ! - C'était bien, mais à la prochaine fois, ma fille, ça va être Miss France. - De quoi ? - Berry, l'année prochaine. - Qui ? - Ma fille. Miss Berry, ça sera Miss France l'année prochaine. - D'accord. - Voilà. - Tlapouti ? - Ouais, bah moi, je pense qu'il faut garder l'émission des Miss France, parce que comme ça, on peut bien se marrer à la télé, quoi. - Ouais, non, mais y a des limites. Et Foufoun ? - Salut, Gérard ! - Tlapouti, tu me rappelles après ? Et, euh... - De quoi ? - De quoi ? Qui c'est que je rappelle après ? - C'est un message personnel. - Allô ? - Je voulais dire qu'il te crevait pas trop le cul, parce que, depuis la rentrée, tu fais un débat suivant le reportage qui est passé samedi d'avant sur la Une. Donc, je pense que tu pourrais faire preuve d'un peu plus d'imagination et d'un peu plus de culture. Surtout que, en de bon intendeur... - Salut ! Eh bah, la prochaine fois, on t'appellera pas, parce que les débats que je fais sont déjà convenus avec Max, et ça, on en avait discuté. Donc, le débat sur Miss France, c'était prévu. Normalement, on devait faire la solitude et j'ai annulé. - Parce qu'on voulait rebondir... - Fils France ! - Fils France, ouais. On voulait rebondir sur l'actualité de Fils France. - Fils France ! - Fils fucking ! - Toi, écrases ! - Jérard... - Donc, moi, je voulais... - J'ai une grande nouvelle, on a dépassé les 5000, enfin. - Ouais ! - Quand ils ont entendu que j'avais demandé de revenir pour la conclusion, ils sont revenus. On est à 5003. - Ouais ! - Aïe, aïe, aïe, aïe, aïe ! - Je vais citer quelques conclusions. - On va peut-être remercier les 5000. - Bah ouais, on va remercier... - On va peut-être les citer, on va peut-être donner leur pseudo. Ça va peut-être être un peu long. - Miss Acetone, Miss Boudin, Miss Devi One, Miss Coras, Miss Zed Zed, Miss Olio, Rip, Ara, Beko, Bénichou, Bigo Pleu, Hélène Dille, Finger Eater, Jean Lucien... - C'est bon ! - C'est bon ! - Attendez, il m'en reste... Je n'ai pas fini. Triso, Web Shark, Sweet Boy... - Ça y est, ça y est, c'est bon ! - Rigaud, Rigaud, c'est bon, c'est bon ! - OK, et une petite conclusion ? Une petite conclusion quand même de Miss Turpentine. Elle dit que ton débat, il n'avait ni queue ni tête comme toi. - Bon bah ça, je m'en doute. C'est toutes les semaines que j'entends ça. - Sinon, il y a aussi Yankee, il y a aussi Madame de Fontenay, quand même. - Merci Rigaud, c'est bon. - Miss France, Miss Berry, Miss... - Salut, salut ! - Salut, salut ! - Donc, de toute manière, là, vous allez retrouver Rigaud. - J'ai oublié Beko, j'ai oublié Beko. - Ouais, bah Beko... - Je suis désolé. - Donc, voilà, merci à tous d'être restés. - Je voulais saluer les demoiselles auditrices. Il y en a 4 ou 5 qui sont venus ce soir du Havre. - Il y a 4 personnes du Havre qui sont venues. - Les 4 pour filles, là. - Qui sont venues aussi pour toi, spécialement, que pour moi. - Oh si, oh si, oh si, elles ont entendu. - Par contre, il y en a une qui t'a posé un lapin. - C'est qui ? - Ah ah ah ! - Cette semaine ? - Ouais. - Il y a eu deux lapins en l'espace d'une semaine. - Rien que toi, j'ai plus de batterie. - Bah non, t'as plus de batterie. - Gérard, j'ai oublié Miss LGM. - Ouais, bah ça, je vais pas aller. Bon. - Conclusion du débat, Gérard, toi, de Miss France. Qu'est-ce que tu penses de Miss France et de tout ça ? - Personnellement, j'en pense que c'est... En fin de compte, ça a vraiment été un peu... - Et Miss Paradoxe, excuse-moi. - C'est bien. Donc, pour moi, je pense qu'à mon avis, ça a été un peu truqué. Parce qu'il faut se dire une chose, que ça, ça a bien été précisé dans la presse. Même sur Exclusif, ça a bien été dit, comme quoi la présidente avait bien donné son mouchoir. À Miss Tahiti. Et que normalement, ça devait être bien Miss Berry qui devait être élue. Donc, la semaine prochaine, étant donné... - C'est le 24 au soir. Et non seulement nous serons là pour fêter Noël avec vous, pour tous les pauvres paumés qui sont de l'autre côté et qui fêtent pas Noël et qui sont malheureux. Donc, nous, on fêtera pas Noël en famille, en ce qui nous concerne, et on sera là. Et comme ça tombe un jeudi... - Ça tombe un jeudi. - Donc, Gérard sera là pour ses débats. Et un débat de trois heures. - Vas-y, dis, Gérard. - Un débat qui va porter uniquement sur mes copains les routiers ! - Ouais ! - Et je veux des routiers à l'antenne ! Et même devant la radio pour Noël, je veux entendre klaxonner ! - Voilà, donc un débat de trois heures avec à peu près 20 questions. - Euh, on va faire 22 questions. - Ouais ! - On va essayer d'avoir 22 questions. Et je vais les travailler pendant... - Avec la même équipe, quand même ? - Ouais, si ça se calme. Donc, vous allez retrouver, pour finir, Rousseau. Excuse-moi du temps, tu reprends avec un peu de retard, mais c'est pas grave. Je t'avais dit avant 4 heures, donc on n'est pas loin. - T'as de la veine. - Donc, Rousseau pour la nuit sans pub. 6h-9h, Barthes, après la suite des émissions. Bien sûr, demain soir, 22h, minuit max, avec Jean Deneuver. Et bien sûr, si vous voulez des places à La Loco, n'hésitez pas, Fildar va vous attendre. Il va vous récupérer pour avoir des places à La Loco. Donc, sur ce, je vous souhaite une bonne nuit à tous. - Des places de ciné aussi, des places de parking, des places de... - Tout ce que tu veux. Et bien sûr, demain soir, n'hésitez pas. Branchez-vous tous sur FUN. - Aucune hésitation possible. - Maintenant, vous n'avez plus le droit de vous tromper. Écoutez FUN. - Moi, je vous mets sur Énergie. - Oh, ma gueule à toi ! Toi, tu vas te faire sauter, tu vas aller dans une poubelle sur Énergie. - Voilà. Le dernier disque, avant de se dire au revoir, c'est... - Le dernier disque, c'est : "Mets tes doigts dans les fesses, avec le beurre, c'est mieux." "Avec du beurre, c'est mieux." Et c'est... Tu n'aimes même pas ça ? - Si ! "Avec du beurre, c'est mieux." == Le débat sur les routiers == === Contexte === Nous l'avons dit, l'époque était particulière. Époque des grands passionnés, des jeunes gens, d'une sorte d'euphorie. Pour ces gens, travailler à des moments sacrés n'était pas un problème. C'est évident pour Gérard, vu son manque de socialisation et de lien avec l'aspect familial de telles fêtes, mais ça l'est moins pour l'équipe régulière de la radio. Et pourtant, pas de best of, les animateurs sont là, au grand complet. Alors pourquoi ne pas fêter en direct Noël ? Et se faire plaisir avec un débat de Gérard, dans la pure tradition surréaliste. C'est à ça que ressemblera la messe de minuit de Fun radio. Pour faire plaisir à l'animateur, Max accepte son thème favori : les routiers. C'est un peu redondant par rapport à celui de la semaine d'avant, mais ce ne sera pas la seule redondance de ce thème. Et là-dessus, il est intarrissable. COmme si les astres étaient alignés, et cela n'arrivera plus ensuite, même les audituers vedettes étaient là, sans exception, malgré le moment. De quoi offrir un beau cadeau de Noël à la jeunesse adolescente de l'époque. === Les personnages === === Transcription === Je tais toi, je parle à Gérard, oh là là ! Bonne soirée Anne-Joëlle, merci, au revoir ! Allez hop, on dégage ça. Suivant ! Ah je peux plus Anne-Joëlle, je peux plus. C'est même pas physique, c'est vocal là. En plus c'est pas gentil ce qu'elle t'a dit. Ouais mais attends, tu vas voir ton répondeur, il va être blindé pour elle. Alors, donc ce soir, minuit pile dans 20 secondes, les conseils de Gérard et Sandy jusqu'à minuit et demi, une heure moins le quart, on va voir comment ça va se passer. Et même si ça se passe même plutôt bien, on fera peut-être jusqu'à une heure les conseils de Gérard et Sandy, c'est sympathique. Non mais moi j'aurais bien voulu un petit jeu de la vérité, un petit peu quand même ! En règle générale ça se termine toujours mal parce que les questions sont assez dures et il faut voir si vous assumez, on va voir. On va déjà démarrer la première demi-heure et voir comment ça va se passer. Qui allons-nous accueillir Gérard et Sandy ? Alors on va accueillir Nina, 17 ans de Paris. Nima ! 17 ans de Paris. Oui bonsoir. Oui bonsoir. Bonsoir Max. Salut Nima. Bonsoir. Joyeux Noël à tous. Merci. De même pour toi. Ouais merci. Bonsoir Michel. Oui alors j'ai un petit problème. Comment ? Non non moi c'est Sandy. T'énerves pas. C'est pas ta chienne d'accord ? Michel ! C'était l'américaine, bonsoir Michel et tu fiches pas ta chienne. D'accord. Tu commences à te calmer d'accord ? Ouais. Parce que sinon on passe à quelqu'un d'autre. Non non attendez, on va y aller mollo parce qu'il est minuit, il faut aller jusqu'à 4h. Donc tranquille les gars, tranquille les gars. Alors ton conseil c'est quoi ? Ce n'est pas offert de... Non mais attends il va le dire lui-même. Non mais Gérard, Gérard. Gérard. Oh non mais concentre-toi. Arrête de les emmerder toutes les deux secondes au standard. C'est à lui de poser son problème. Parce qu'il est noté sur ta feuille que tu dois dire pourquoi ton... Hein ? Bon merci Max. Qu'est-ce qu'il t'amène Ringo ? Quoi ? Allez vas-y magne ! Bon alors en fait mon conseil c'est que j'ai pas de cadeau pour ma mère pour demain. Et je vous donne un conseil de cadeau. Déjà moi j'ai une question à te poser. Qu'est-ce que ta mère elle aime ? Elle aime forcément quelque chose. Si c'est des fleurs ou si c'est... Je sais pas moi. Elle aime les voitures. Ouais. Quel genre de voiture ? Ah les voitures jaunes. De couleur jaune. Ouais. Et de quelle marque ? Une marque japonaise. Une marque japonaise ? Mais quelle marque ? Il y a plusieurs marques japonaises. Mais non mais non non non non non non non non. Non mais là déjà on va avoir des problèmes. Non non excuse-moi. On va avoir des problèmes avec ça direct parce que vous avez dit... Pas de marque. Une marque japonaise. Une marque japonaise c'est une marque. Donc... D'ailleurs on sait que tous ceux qui conduisent avec une voiture japonaise c'est une marque. Comme pourrait l'être Renault. Moi j'ai... T'as quoi comme voiture une japonaise ? C'est une marque. Pas de pays rien. A la rigueur des affluents ou des... Vous avez le droit à... Mais pas... Le parfum. Qu'est-ce qu'elle aime comme parfum ? Oh tu te réveilles ? Allo ? Une. Ouais. Bah alors tu réponds pas aux questions que je... Oh tu te réveilles ou quoi là ? Ou je te réveille moi de tout à l'heure ? Donc en fin de compte elle aime les voitures et qu'est-ce qu'elle aime d'autres ? Elle aime un peu de tout. Les parfums. Les vêtements. Ouais. Bon bah moi je serais avec toi. Mais tu disposes de combien d'argent déjà ? 200 balles. 200 balles. Donc déjà pour 200 balles je pense que tu peux lui offrir une bouteille de parfum. Une bouteille de parfum ? Je pense que c'est déjà bien quand tu... Une bouteille c'est grand. Comment ? C'est beaucoup une bouteille. Non mais attends tu trouves du parfum à moins de 200 balles. Arrête tes conneries toi. Comment tu vas faire ? Tu peux avoir du parfum pour moins cher. C'est sûr. Maintenant si tu veux lui offrir un bouquet de fleurs je pense que tu peux aussi. Poignée avec la bouteille de parfum. D'accord. Donc voilà mais tout dépend de ce qu'elle aime aussi. Elle aime les parfums exotiques. Les parfums exotiques. C'est-à-dire ? C'est quoi ? Quel parfum exotique ? Je ne saurais pas te dire précisément mais... Attends parce que du parfum exotique il y en a plusieurs. Alors précise. Avec la noix de coco ? Avec la noix de coco tout ça non ? Non mais attends. Laisse le préciser lui. Alors avec la noix de coco ? Ouais vas-y. Parce qu'on vient de te le dire. Vas-y. Non avec la noix de coco, ananas... Ouais c'est ça. T'as déjà vu du parfum à l'ananas toi ? Ah si si si. Il y a même du parfum à la pêche aussi. Non mais attends. Du parfum à l'ananas t'en as déjà vu toi ? Oui j'en ai déjà vu. T'as vu jouer ça dans Spirou Magazine ? Non pas dans Spirou Magazine. Non mais dans Tintin Milou. Non non plus non. Non mais dans Hercule. Non plus. Hercule et Pif. Non mais donc voilà tu peux lui offrir une bouteille de parfum accompagnée d'un bouquet de fleurs. Et puis ça... Non le mieux. Moi le mieux à ce que je te propose. Ouais. C'est d'y offrir un bouquet de fleurs. Ouais. Bah oui c'est ce que je viens de dire. Avec une petite carte. Et je mets quoi dans la carte ? Bah attends. Joyeux Noël et puis bonne fête et puis... Bah attends. Tu sais pas ce qu'on met sur une carte de bonne année toi. Broutille. Bah c'est pour ça que j'appelle. Comment ? C'est pour ça que j'appelle. Ah ouais. Non non mais attends. Tu nous demandes pour offrir un cadeau et tu nous demandes comment qu'on écrit une carte. Bah tu me dis de... Prendre un bouquet de fleurs avec une carte. Tu écris. Tu paies une carte. Tu mets Joyeux Noël et bonne année et bonne santé. Voilà. 99. Hein ? Ouais. Accompagné des fleurs et puis du parfum. Ouais d'accord. D'accord ? Je trouve pas que c'est un peu commun comme cadeau Gérard de toujours offrir des fleurs ou du parfum. Ouais c'est classique. Bah tout dépend de ce qu'elle aime. Mais ouais mais de toute manière il nous dit pas ce qu'elle aime. A part les voitures. Mais attends. Est-ce qu'il a l'argent pour acheter une voiture ? 100 balles pour acheter une bagnole. Non mais il peut peut-être déjà acheter une maquette. Non ? Ou un truc. Bah non mais attends. Une maquette. Ouais une maquette. Elle fait collection des voitures. Ouais ouais. Pourquoi pas. Ouais c'est ça. Ou alors moi ce que je te propose c'est que tu achètes une voiture pas trop chère. Tu vois. Une petite voiture miniature. T'achètes aussi une bouteille de parfum pour accompagner la voiture. Et en même temps tu lui offres des fleurs parce que c'est normal. Tu vas pas y aller. Donc voilà ce que je peux te répondre. J'espère qu'on a pu t'aider quand même un petit peu. Ouais un petit peu. Non mais moi... Ouais je pense le mieux. Le mieux c'est que tu y alles avec... Si elle aime le parfum. Le plus grand cadeau que tu peux faire à une personne comme ça. Elle a quel âge ta maman déjà ? Elle a 45 ans. 45 ans. Donc le mieux c'est que tu y achètes une bouteille de parfum. Ouais. Et tu lui offres un bouquet de fleurs. Ouais d'accord mais j'ai un autre problème aussi. C'est que tout est fermé là. Ouais mais attends. Demain c'est ouvert. Demain c'est ouvert. Demain c'est ouvert. D'accord. Y'a des grandes surfaces demain qui sont ouvertes. Le 25 t'es sûr ? Oui oui oui. Jusqu'à midi normalement. Jusqu'à midi ? Ouais. Et si elle se réveille avant ? De quoi ? Et si elle se réveille avant ? Mais alors ? Mais c'est à toi de te réveiller avant midi. Non mais d'accord. Non mais attends. Tu comprends ce qu'on te dit ou pas là ? Non mais crie pas. Non mais attends je crie pas. C'est bon c'est Noël. Pour l'instant on te demande quelque chose. Est-ce que tu seras réveillé avant midi ? Oui ou non ? Ma mère imagine elle se réveille à 8h. Moi et toi tu te réveilles à 9h. Non mais t'inquiète pas. Tu fais comme on t'a dit. T'achètes un bouquet de fleurs. T'achètes ce qu'on t'a dit quoi. Avec la voiture. Si elle aime les voitures. Ou si elle préfère le parfum. T'achètes le parfum quoi. Ça dépend. C'est toi qui vois avec l'argent que t'as. D'accord. Mais vous êtes sûr que demain c'est ouvert ? Bah oui c'est ouvert demain. Mais moi je penserais plus pour acheter du parfum que d'acheter la voiture. Parce que la voiture c'est une voiture de collection. Mais le parfum tu peux le mettre tout le temps. Dans la voiture. Tu vois l'huile de voiture. Et voilà quoi. Bah merci beaucoup. C'est tout ce que je peux te dire moi. Ok bon bah je suis pas avancé. Donc je te souhaite de bonnes fêtes. Et puis bah amuse-toi bien. Bon bah joyeux Noël quand même. D'accord merci. A toi aussi. Salut. Le second c'est quoi ? C'est qui ? Le second c'est Valérie. 35 ans de Paris. Bonjour. Bonsoir. Bonsoir. Je vous souhaite un joyeux Noël Gérard. Bah moi aussi. Je te souhaite un joyeux Noël. Hein Christine ? Oui c'est Christine. Ouais c'est ça. Alors bonne nuit. Au revoir. Au revoir Christine. Au revoir. Au revoir. Mais elle a besoin d'un conseil. Elle a besoin d'un conseil. Ah non Christine ? Oui. Comment vas-tu ? C'est l'ex de Gérard. Ah ? Ça va ? Ça va bien ? Oui. Non mais t'inquiète pas. Gérard c'est Noël. Fais le gentleman. Il pourrait être une meuf. Bon j'étais mauve avec lui quand même. Il soit poli un peu. Non mais t'inquiète pas. Ça va s'arranger. Bah oui. Faut rester cool quoi. Bah oui. Moi c'est vrai que des fois je suis un peu... Dès que je suis là je me dis oh mince. Mais bon. Faut pas crisper quoi. On n'est pas des gamins pour se disputer. Bah ouais c'est vrai. C'est vrai t'as raison. Je suis d'accord avec toi. Bah oui genre. De ça qu'on fait le gamin. On n'est pas des gosses. Faut rester zen quoi. Bah oui. Bravo Sandy. Ouais Sandy. T'as profité de ta vie un peu. Bah alors vas-y Christine. Donc à part ça qu'est-ce que t'as à dire ? Moi bah j'ai dit c'est joyeux Noël et puis c'est tout. Bah c'est gentil ça. Voilà. T'as besoin d'un conseil non ? Vous êtes heureux tous les deux que ça marche très bien pour vous deux. Bah je t'en remercie. Moi je te dis de même que la vie soit belle pour toi et puis que bah si t'as des enfants ou pas je sais pas bah que tu sois heureuse quoi. Je peux pas en avoir. Donc je sais pas t'as pas de conseil à demander ou... Non rien. Bah c'est cool Christine. Non mais c'est gentil d'avoir téléphoné et puis... Bon bah c'est gentil Christine on te souhaite un joyeux Noël. Bon réveillon l'amoureux. Ouais. D'accord merci. Je t'en remercie beaucoup. Ouais je vais faire le réveillon avec Sandy demain. C'est cool. Bon Sandy tu dois avoir une autre fiche là. Tu vas être à Yanis. Ouais attends je vais... Parce que Gérard est parti on sait pas où il est il va certainement revenir. Attends ça c'est... Ah non c'est pas fait ça. Conseil GG Sandy a un problème pour faire la cuisine. Voilà Yanis. Si si. Donc on va accueillir Yanis 18 ans de Limoges. Salut. Allo ? Allo ? Salut Yanis. Salut joyeux Noël. Oui toi aussi. Bon je vais te parler j'ai vraiment des gros problèmes pour faire la cuisine. J'arrive réellement pas. Mes parents sont pas venus ce soir pour Noël. J'en prends marée de médecine alors je travaille. J'essaie de faire la cuisine pour manger un peu. J'ai fait des pâtes et tout a brûlé. C'est tout cramé à l'intérieur. Je sais pas comment il faut faire. Mais comment t'as fait pour faire cuire les pâtes et que ce soit brûlé comme ça ? J'ai pris une casserole. J'ai pris de l'eau. J'ai mis les pâtes dessus et je sais pas j'ai laissé. Une demi-heure et puis après pouf. Une demi-heure t'as mis les pâtes ? Bah ouais faut que ce soit bien chaud. Non non attends attends. Attends attends attends. Déjà les pâtes tu les fais pas cuire une demi-heure. Tu les fais cuire maximum. 10 minutes à 15 heures. 10 minutes. Ça va être froid après. Non non non. Après tu peux les faire réchauffer. Tu vois si t'as un micro-ondes tu peux les faire réchauffer. J'ai pas de micro-ondes. J'ai juste une petite plaque. Et t'as pas un petit four où tu pourrais faire tu vois des plats cuisiniers genre surgelés les trucs comme ça ? Non non j'ai juste une plaque chauffante. J'ai une chambre d'étudiants donc j'ai juste une petite plaque. Et qu'est-ce que t'aimes exactement comme nourriture ? Tu dois avoir une préférence. Je sais pas moi. Si t'aimes je sais pas soit les surgelés soit les boîtes de conserve je sais pas. J'aime bien les raviolis. Ah t'aimes bien les raviolis. Les raviolis c'est pas dur à faire chauffer. Tu prends une casserole et puis bon c'est bon. Comment on fait des raviolis Sandy ou Gérard ? Je sais pas vous pouvez nous dire. Non mais attends. Une boîte. Tu ouvres la boîte. Ouais. Tu la mets dans une casserole. Sans te couper les doigts. Ouais. Sans te couper les doigts. Pas faire comme Sandy. Tu mets la boîte dans la casserole où tu vis. Non non mais pas faire comme Sandy pour un avocat prendre son doigt pour un avocat. On parle des raviolis Gérard. L'avocat c'est pas une boîte de conserve. Donc pour ces raviolis le mieux c'est de faire une chose. C'est couper ta boîte. Non mais attends. C'est des plaques sur pente ? Bah ouais. Ah c'est plaques électriques. Ouais. Alors sur plaques électriques tu les mets à... 10 ? Non ? Non non non pas à 10 parce que c'est trop. À 3 peut-être ? Trop. 3-4 ? 3-4 ? Ouais je pense. Ouais. Et tu fais attention que ça crame pas. Tu surveilles et tu touilles de temps en temps pour voir si ça crame pas dans la casserole. Est-ce qu'il faut mettre de l'eau avec les raviolis dans la casserole ou pas ? Non non parce qu'il y a de la sauce déjà. Il y a de la sauce. Ou du beurre pour pas que ça attache. Si si si. Il faut mettre quoi Gérard ? Attends attends attends. Attends Sandy Gérard c'est mieux que toi. Non non attends attends. Une fois que t'as retiré tes raviolis de la boîte. Ouais. Il te reste un peu de sauce dedans. De quoi ? De la sauce ? Ouais de la sauce. De quoi comme sauce ? De la sauce tomate abrutie ! Bah ouais mais j'en ai pas de sauce tomate moi. Non mais ils sont déjà dans les raviolis. Oh mais c'est pas possible ! Tu comprends ce qu'on veut dire ? Bah ouais bah ouais. Dès que t'as les raviolis on t'ouvre la boîte. Attends Gérard excuse-moi. C'est Max. Il y a des fois les gens ne comprennent pas toujours. Moi je comprends pas tout lui je te le dis. Attends comment que tu fais une omelette toi ? Bah avec des oeufs. Et tu mets quoi dans ta poêle ? Je mets ce qu'il y a dans la coquille c'est-à-dire l'oeuf et la sauce. Le blanc. Et comment que tu les fais cuire tes oeufs ? Bah je fais chauffer. Ouais avec quoi ? Bah avec du gaz. Ouais et tu mets quoi pour que ça chauffe ? Bah il peut mettre des lardons. Bah j'en sais rien du beurre ou du beurre. La crème fraîche. La crème fraîche ? Non la crème fraîche c'est quand tu veux faire des champignons à la crème fraîche. Mais moi des fois je mets un peu d'herbe de Provence avant. Pour bien que ça saisisse l'affaire. N'importe quoi toi. Donc on revient aux raviolis donc Gérard les raviolis. Bon les raviolis. Donc pour en finir avec tes raviolis là. Ouais. Donc tu mets un peu d'eau dans ta boîte. Pas beaucoup. Non dans la casserole. Dans la boîte ? Non dans la boîte pour bien retirer. Ah pour diluer. Ah ok. Pour diluer ce qui reste. Tu mets pas beaucoup. Tu prends une cuillère à boire pour tourner de temps en temps. Tu surveilles. Rigaud oui une question internet. Ouais Gérard il y a Steph sur l'IRC qui te demande si tu l'invites à bouffer demain parce qu'il aime bien tes conseils cuisine. Non. Pourquoi ? Non j'invite personne à bouffer chez moi demain. Pourquoi ? Hein ? Non le 31 ils sont tous invités. Ah ouais ouais j'ai vu l'affiche ouais. Vous êtes tous invités le 31. Le 31 ils sont tous ceux qui vont venir vont être aux flics. Donc ? Nuance. Ouais bah pour les raviolis Gérard. Ouais ouais. Non mais tu ferais une parenthèse d'ailleurs pour en parler tout à l'heure et en montrant. Ouais. Elle est où l'affiche ? L'affiche est là et en plus il faut qu'on parle du courrier parce que t'as reçu du courrier pour Noël en plus. Ah ouais si c'est des conneries ça sert à rien. Non non non. Non c'est des bons cadeaux. Donc ton histoire de raviolis. J'en mets combien ? Un demi litre ? Mais non tu t'en mets un petit peu. Un petit peu. Un verre ? Ouais tu mets un verre dans ta boîte tu secoues et tu remues le restant de la sauce tomate. Ok. Et tu le mets dans ta casserole ? Il y a des raviolis dans la casserole normalement. Oh là là. Ouais. Mais non les raviolis tu les mets dans la casserole donc si tu les mets pas ils peuvent pas y être. Bah ouais. Donc c'est logique. Ok ok ouais. Ouais. Et qu'est-ce que t'aimes d'autre à part les raviolis ? Bah les pâtes j'aime bien mais bon ça cramait tout à l'heure j'en ai plus là. Donc les pâtes bon c'est des spaghettis ? Non non c'est des petites coquillettes là. Bah les coquillettes tu les fais chauffer à je sais pas 5-10 minutes et ce que tu peux faire de l'huile avec du sel. Ah ok. Et tu remues de temps en temps pour pas que ça colle. Ah ok. Et si tu veux me faire des nouilles à la sauce tomate tu mets de la sauce tomate dedans mais après tu les égouttes. Ouais mais la sauce tomate c'est des trucs en briques ou les... Bah ce que tu veux. Oh tu peux avoir ce que tu veux des petites boîtes ou des grandes boîtes ça dépend. Ouais. Enfin voilà Yanis. Ça y est t'es renseigné au moins tu peux faire quelque chose de main de potable. Ok. Comme dirait Gérard ok ? Ok. Bah bonne soirée à toi. Merci. Ouais bonne soirée. Gérard le suivant ? Bonsoir. Allo. Allo. Allo. Y'a quelqu'un ? Ah bah elle est partie. Y'a quelqu'un dans la secoupe ? Bah c'est pas grave c'est pas grave. Bon. Elle est manouillée. Je sais pas. C'est pas grave. C'est pas grave. On va accueillir Thomas 25 ans. Ouais. 25 ans de Nice. Ouais salut à tous. Bonsoir. Bonsoir à toi. Salut Sandy. Salut. Oui salut. Bah bon joyeux Noël quand même. Merci. Ouais j'espère que vous avez passé un bon réveillon. Bah tu vois là on y est. On est en plein dedans. Ok. Bah écoute moi je t'appelle justement c'est un peu à cause de ça parce qu'en fait j'ai bien fait la teuf et j'ai un petit peu trop mangé j'ai un petit peu trop bu et j'ai peur demain d'être un petit peu malade et d'avoir un petit peu la gueule de bois donc on m'a dit que t'étais calé sur le sujet donc j'aurais voulu savoir si t'avais des petits trucs pour éviter si tu veux d'avoir la gueule de bois ou la chiasse. D'accord. Alors ce que je te conseille pour pas avoir pour pas avoir envie de... Pas manger de chocolat d'abord. Est-ce que t'as mangé du chocolat ? Ouais ouais il y avait de la bûche au chocolat en dessert. Non mais ça c'est pas ça qui va te... Attends attends Thomas. Oui oui oui. Pour l'instant le réveillon n'est pas terminé. Ah bah oui mais moi j'étais fini de manger là j'ai déjà mangé de la bûche. Mais qu'est-ce que t'as mangé exactement ? Alors en entrée il y avait des huîtres. Ouais. Après j'ai bouffé de la moule quand même un petit peu. Ouais. Après on a enchaîné foie gras saumon tu vois bien classique. Ouais. Ok. Après un bon petit rôti, fromage et puis la bûche. Bon ça va là c'est pas trop c'est pas un grand repas comme il y en a qui font. Si tu veux moi j'ai un petit estomac quoi. Tout le monde n'a pas la chance d'arriver à digérer des quantités de nourriture faramineuse peut-être comme toi Sandy mais moi... Ah non non moi je te rassure tout de suite je mange pas beaucoup. Tu manges pas beaucoup ? Par rapport à ce que tout le monde peut croire... Menteuse ! Non elle mange pas beaucoup. Menteuse ! Menteuse ! Menteuse ! Menteuse ! Attends attends Thomas. Moi je démens ce qu'elle vient de dire. Ouais c'est vrai c'est dégueulasse ce que t'as dit. Elle a dit qu'elle mange pas beaucoup mais elle arrête pas de manger du chocolat du matin au soir. Donc c'est une menteuse. Non pas en ce moment. Une menteuse ! Elle mange plus de boîte de pales d'affilée. Elle est peut-être enceinte Gérard si elle mange du chocolat non ? Bah oui. Attends ça c'est pour le jeu de la vérité d'accord ? Ah ouais merde. Ok. C'est vrai que si elle est enceinte tout de suite elle mange plus mais moi je suis pas enceinte et je te dis je mange pas beaucoup. Non mais moi de toute manière un conseil que je vais te donner pour pas avoir la gueule de bois si t'as bien bu si t'as bien arrosé le réveillon un conseil que je te donne c'est de boire un café salé. Un café salé ? Non mais ça c'est pour faire vomir ça le café salé. Ah oui mais justement. J'ai pas envie de vomir justement j'ai pas envie d'être malade c'est ça le problème. Et bah alors dans ce cas là tu fais une chose tu bois un café sans sel. Ou sinon si t'es malade. Ah merde. Tu peux faire du vélo aussi si tu veux. Un café sans sel. Non Gégé le problème le problème c'est que là quand je vais aller Un café sans sucre excuse moi. Ok quand je vais aller me coucher avec ma copine déjà premièrement je pue de la gueule et deuxièmement j'ai pas envie de lui dégobiller dessus. Bon alors dans ce cas là tu fais une chose tu bois un café sans sucre et avant de faire l'amour avec ta copine t'essayes de te laver... De te laver les dents quand même. De te laver les dents. Non pas la quéquette attends et oh. Bah si il peut hein. Je me lave pas la quéquette ? Attends si il veut faire la gueule il peut te laver la quéquette hein. Ah bah ouais. Bah attends mais attends. Non mais je suis d'accord avec toi. Mais de toute manière et oh. Ouais. Moi je vais te dire une chose. T'en dis est-ce que tu te laves la quéquette avant l'amour ? Moi d'abord je te rassure j'ai pas de quéquette. Ouais la chounette. Ouais la chounette bah ça dépend hein si j'ai pas envie je la lave pas hein. Ouais ça peut être souvent. Mais t'as vraiment envie non ? Mais ça ça dépend hein moi je prends une douche. Deux fois par jour donc y'a pas de problème. Un jour. Non non pas par mois. Non pas par mois non. J'en connais tout à l'heure qui vont se prendre des baffes. Ouais Manu. Hein Fildar et Manu ? Voilà. Attends attends attends. Juste pour dire qu'il faudra quand même penser à... On plaisante on plaisante mais ça serait bien quand même qu'on fasse un tout petit point sur... Ouais un petit point courrier mais justement on va abréger. On va finir avec Thomas. C'est fini parce que je voyais parler entre vous. Ah non non non. Bah lui il est là. Bah lui il est là. Je pense que pour toi Thomas la solution donc c'est déjà si t'as envie de faire l'amour là maintenant. Ouais. Donc... J'ai peur de vomir pendant l'amour. Surtout y'a un truc que je te conseille si tu me le permets c'est que bon dès que tu veux faire ça avec ta copine surtout tu te protèges. Oui non mais ça y'a pas de problème. Bon bah voilà ça y'est ça y'est ça y'est c'est bon. Le problème c'est le mal de mer. Je vais avoir le mal de mer c'est tout. Ouais non mais attends. Ou sinon tu prends un cachet d'aspirine si ça va pas. C'est bon c'est bon c'est bon. Terminé apparemment il a assez de conseils ou pas ? Bah pas des masses. T'es conseillé ou pas Thomas ? Bah je trouve que c'est léger quand même au niveau du conseil. C'est normal. Je vais lui vomir dessus c'est tout. C'est comme ça que ça va finir. Non mais si t'as envie de vomir tu vas dans les cabinets et puis tu vomis c'est tout. Ouais ouais. Et puis une fois que t'as fini bon bah tu retournes la voir et puis gentiment. Voilà. Sans lui vomir dessus en principe. Attends tu vomis pas sur ta copine attends arrête de dire des bêtises là. Tu lui demandes avant. J'aimerais bien éviter. Ou sinon tu peux prendre des sacs et puis tu vomis dans un sac. Et puis après tu mets ça dans le vide d'ordure. Voilà. Bah même tu prends un préservatif et tu vomis dans le préservatif et puis basta. Mais non attends. C'est cramé ça Gérard. Hop terminé. Bah merci Thomas. Terminé Thomas. Bon bah bonne chance à toi. Merci à toi. Au revoir. Bon alors Gérard. On pourrait. Ouais. On a reçu du courrier donc déjà du. On a reçu du pâté de foie. Non non. Non non non. Ça c'est pas fesse de babouin. Gourmet. Gourmet. Gourmet trois étoiles. Mousseline de soie. De sol. De sol. De sol. Faudra que tu le goûtes quand même avant de partir. Non ça me paraît bizarre ça. Donc apparemment t'es abonné à Atlas. Voilà ça. Tu peux ouvrir. Non mais ouvre. Non non mais attends. Ça c'est. C'est pas grave. L'abonnement c'est 8000 francs par trimestre. Non non mais ça c'est. C'est le mec. Parce que les mecs qui t'ont abonné ils demandent l'argent apparemment à Atlas. Donc moi j'ai dit que c'était pas fun. Ça c'est le mec. C'est le mec qui s'amusait à m'envoyer les trucs de camion et qui me demande. Bah voilà. C'est bien ce que. D'accord. Voilà. C'est quoi t'as des étiquettes de camion là ? Et t'avais une lettre non ? Ouais en fait on a reçu le colis tu vois. C'est rare. C'est Fès de Babouin qui t'a envoyé donc ce colis là. Le beau colis. Et donc en fait c'est pour Noël bien sûr. C'est pour toi. Et en fait dans ce paquet il y a un voyage. Destination au choix. Il y a des millionnaires. Des bancos. Un abonnement au journal France Soir. Un réveil. Un réveil fun radio. Unique. Des tickets à restaurant. Des écouteurs de Wackman. Un CD. Deux livres. Un stylo. Un déodorant. Un protège-dents. On va ouvrir tout ça. Un père Noël. Une carte magnétique. Ton cutter. 14 piles. Un ticket RATP SNCF. Une ampoule. Un calendrier Spirou. Un rouleau de scotch. Quelques brochures sur la Bretagne. Si tu as envie d'aller en Bretagne. Deux autocollants. Un paquet de mouchoirs. Un savon. Et une pomme de terre. Donc voilà. Donc j'espère qu'il y a le compte. Donc Gérard est en train de nous voir en direct. Donc attends. Ça fait beaucoup pour tenir dans une boîte. Non ça tient. Non c'est miniature. Calme Gérard. Alors. On récupère. Alors donc il y a les autocollants. Des autocollants. J'ai effectivement l'ampoule. Voilà. L'ampoule est belle. Ah sympa. Ah c'est sympa ça. Elle est peut-être grillée. Mais bon. Le réveil fun radio. Ah ouais. Tiens. Ah il est classe. Là. Les tickets à restaurant. Les tickets à restaurant. Il ne reste plus beaucoup. Le CD. Le CD. Ah il est beau le réveil. C'était marqué un CD. 50 heures gratuites. De CD-ROM. Super pour internet. C'est pour avoir internet ça. Tu pourras demander à Régo. Là. Le patrimoine religieux de la Bretagne. Donc pour voyager. Ouais. Ça c'est les brochures sur la Bretagne. Non mais attends. C'est pas de la religion. C'est bien. On va pouvoir lire. Voyage. Voyage. C'est des voyages. Voilà. Voyage gratuit. Je m'en fous. Il y a des millionnaires et des bancos aussi Max. T'as un calendrier. Ouais. Non mais attends. Toi. Quoi ? Toi. Attends. Attends. Un savon. Ah ouais. Il y a effectivement des Kleenex. Ouais. Qu'est-ce qu'il y a d'autre ? Regarde dans l'enveloppe. Il y a du scotch. Il y a un rouleau de scotch vide. Ça peut toujours servir. Il y a une enveloppe aussi. Ah ouais. Normalement. Ouais. Du scotch vide. Sauf s'il y en a plus. Ah merde. Là il y a des écouteurs de Wackman. Ouais. Bon. En pièces détachées. Mais ils sont là. Ouais. Non mais c'est bien parce que le réveil. Il n'y a pas les aiguilles. Il n'y a pas d'aiguilles. Et puis à mon ami. Il est naze. C'est l'attention qui compte. Ouais. Il est naze. Attends. Je crois qu'il y a une enveloppe aussi. T'as pas une enveloppe dans la... Ah bah attends. Les Wackman ils sont à moitié cassés. Ça c'est le parfum. C'est le déodorant. Écoutez bien. Écoutez bien. Attendez. Après l'Adidas. Après l'Antarctique. Gérard va se parfumer à quoi à votre avis ? Je sais pas. Au tsar. Tu veux voir ? Ah bah on est dans la merde. Oh non. Tiens je connaissais pas ce parfum. Attendez. Ah non non mais c'est bon. Tout à fait. Non mais non. Il n'y a rien dedans. La bouteille est vide. Non mais c'est pas mal. Non la bouteille est vide. Mais t'as plus qu'à la remplir. Le must du must. Un dentier. Un protège-dents. Un protège-dents. Un protège-dents. N'importe quoi. C'est pas grave. Il y avait une enveloppe. Il y a une enveloppe non ? Pour Gérard c'est pas un protège-dents. C'est un protège-dents. Ouais mais attends. Toi l'enveloppe. Je me demande si tu l'as pas piqué comme t'as l'habitude de me faire. Hein Gérard ? Mais non c'est marqué une enveloppe avec des bancos et des millionnaires. Ouais le protège-dents. Ouais bah ça. Mais ça. Hop. La fausse dent en plus. Ah bah voilà. Ah les bancos et les millionnaires. Ouais mais attends. C'est quoi ? C'est quoi Gérard ? C'est quoi ? Je vois pas. C'est cool non ? C'est quoi ? Des bancos. Des bancos ? Ils ont déjà été grattés. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0. Putain, il y en a plein en plus. T'as gagné ou pas ? Non mais regarde les touches Gérard, ça se trouve il y en a un gagnant dans le tas. Non, non, il n'y a aucun gagnant. Donc ça, ça va à la poubelle. 14 piles normalement. 1, 2, 3, 4, 5. C'est bien ça ! Ah ça c'est gentil. À mon avis elle fonctionne à mort. Ouais c'est ça. Pour écouter Wakeman c'est bien. La pomme de terre. Ah c'est une pierre hindoue. C'est une noix de coco miniature. C'est exotique, c'est beau. Ça c'est une patate. Ça retourne là-dedans. Il y a un stylo aussi normalement. Et t'as aussi une brochure France 3. Non, non, ça c'est un abonnement à France Soir. C'est ça. Non, non, mais il va se faire foutre. Tu dois avoir aussi de la monnaie. Voyage, RATP. C'est ça, c'est ça. Donc poubelle, c'est pas la peine. Regarde, t'arrives réduit. Mais non, non, non. Il y a bien marqué, vous pouvez gagner un abonnement à France Soir. C'est bien ça. Mais attends. Attends, c'est pas du bidon ce courrier. C'est pas bidon. C'est pour moi que... Il doit y avoir un stylo aussi Max, normalement. Et une carte magnétique. Il y a dit... Il y a dit Fning. C'est de la monnaie allemande. Non, mais c'est bien parce que le bouchon, il est où ? C'est pas grave. Regarde s'il écrit. Il s'est peut-être perdu dans la boîte. Il écrit le stylo Gérard. Il y a un stylo. Et il y a de la monnaie allemande. Normalement. Voilà, la carte magnétique. C'est pas du bidon. Avec ça, tu peux passer partout. C'est ça. C'est surtout que tout est retiré. Je sais pas, tu peux essayer dans les distributeurs. Il manque le magnétisme. Mais la carte magnétique est quand même là. Attends. Un petit savon. C'est quoi ça ? À la vendeur shop. Violent, là. Tiens, tiens, tiens. Un petit courrier quand même pour Gérard. Merci. Tu gardes quand même la carte ? Coubelle. Alors attention, qu'est-ce qu'il se dit ? Je suis un grand fan de tes débats. Première, la façon que tu les mènes. Je les trouve très intéressants. Surtout quand ils sont collants à l'actualité. Comme aujourd'hui avec Miss France. J'aimerais avoir ta photo de toi. De tes préférés dédicacés. C'est sympa ça. C'est quoi ? C'est très sympa. Termine. Laisse-moi. T'aimer ? Ainsi. Que toi et Sandy, en espérant une réponse... Attends, attends, attends. T'as peut-être oublié des mots. Je suis un grand fan de tes débats. Et j'admire la façon... La façon que tu les mènes. Dont tu les mènes. Je les trouve très intéressants. Surtout quand ils collent à l'actualité. Comme aujourd'hui avec Miss France. Ouais, d'accord. J'aurais aimé avoir des photos de toi. De préférence dédicacés. Ainsi que de toi avec Sandy. C'est normal. En espérant une réponse positive. Positive, ouais. Il a oublié le F. Demande ton micro. Je te souhaite de joyeuses fêtes. Demande ton micro. C'est bon ? Ouais, c'est bon. T'inquiète pas. Il a oublié le F à positive. Sans fil d'art. Ah, je suis désolée fil d'art. Ah oui, t'es là. Excuse-moi. Merci. Hermine. Donc voilà. Hermine, bah... C'était bien ce que t'avais mis, mais t'avais oublié quelques mots. C'est la nageuse, la Muriel Hermine. Ouais, Muriel Hermine. C'est ça. C'est Hermine Robin. Ah oui, oui. Tu peux mettre ça. Tu peux mettre tout ça. Même, tiens. Quoi encore ? Le parfum, il en reste. Ouais, garde-le, le parfum. On sait jamais pour demain. Pour le réveillon, là. Puis ça, bah ça, on goûtera pour voir si... Ouais, on goûtera si c'est... On essaiera de tester. On essaiera de savoir si c'est pas des trucs pour chien. Non, non, non. Attends, c'est pas pour chien, ça. Non, non, c'est pas pour chien, ça. C'est ce qu'on a mangé dans le bureau tout à l'heure. Ouais, c'est la même boîte. Attends, j'arrive pas à lire ce qu'il y a marqué. C'est du Trois Étoiles, ça. Non, mais cherche pas à comprendre. Non, mais c'est écrit trop petit. C'est rien, c'est gourmet. Ouais, cherche pas à comprendre. Attends, toi, tu as commencé par... Attends, attends, dis tout de suite qu'elle est conne. Ah non, pas du tout. Non, non, non. Non, mais attends, dis qu'elle est conne, ça vaudra mieux, d'accord ? Non, c'est pas vrai. Ah non ? Attends, il y a marqué chat adulte. Ah, chat adulte, alors poubelle. Mais attends, j'ai pas commencé encore. Attends, je suis pas un chien. Je suis pas un chat. Servir à température ambiante. Mais non, mais ça, c'est de la nourriture pour des gens qui ont des chats. C'est ça. Pourquoi tu moques ça ? Parce qu'ils croient que je suis un chat. Mais non, peut-être que t'as un chat. Peut-être que t'as des animaux. Ah, il y a du poisson quand même dedans. C'est bon pour la mémoire. Hop, poubelle. Attends, j'aurais quand même pu goûter. Bah ouais, merde, elle aurait pu goûter, Gérard. Attends, toi, tu vas me goûter ça, toi ? Qu'est-ce qu'on va accueillir ? C'est Noël ? Qu'est-ce qu'on accueille ? Bonsoir, Olivier et monsieur Prodigy de La Loco. Ouais, bonsoir. Qu'est-ce qu'on fait, Gérard ? On fait un conseil, là, ou pas ? Non, bah, on va s'écouter un petit disque si tu me donnes le titre. C'est chasse. On parlera du courrier d'affiche. Ouais. Mais en dernier... Non. Pourquoi ? On parlera pas du courrier d'affiche. Non, non, non. Non, tout bas, tout bas. C'est chasse. Chasse. C'est quoi ? Chasse. Encore une fois, tu sais, là. Encore une fois ? Ouais. Alors, vas-y. C'est parti. Et on se retrouve tout à l'heure pour la suite des conseils. Et même... Même, vous pouvez appeler maintenant. On va arrêter les conseils et on va prendre le jeu de la vérité. Donc, vous pouvez nous appeler au 0803 08 5000 et 0803 70 5000 et toujours lire. C'est W2E.fr Fun Radio. A tout de suite. Et voilà, c'était Sass dans Inertis. Donc, vous pouvez toujours nous appeler au 0803 08 5000 et 0870 5000. Manu, vous attend au standard. Il est 0h35. Bon avion à tous ceux qui sont en pleine fête. En pleine bourre, ouais. En pleine bourre. Donc, ceux qui sont sur la route comme des chauffeurs de taxi, on va quand même les saluer. Ils sont à la bourre aussi, non ? Non, non, mais on va les saluer parce que grâce à eux... Tu peux me rendre le carton pour le CD, c'est mieux. Ça le protège. Merci. Voilà. Donc, on salue tous les chauffeurs de taxi. S'il y en a qui veulent passer, nous dire un petit coucou, ils seront les bienvenus. Donc, il y a toujours Rigo qui vous attend sur l'Internet. W2E.fr Fun Radio. On est combien, Rigo, s'il te plaît ? Ça n'arrête pas de monter. On est 4347. Et tout à l'heure, j'ai écouté... Combien on était tout à l'heure ? 90 ! Mais comment c'est possible, Rigo, ça ? D'ailleurs, vous étiez 90 et là, maintenant, on est à 4300. Les fans de Gérard. Ça, c'est normal. Ça ne se calcule pas, ça. Alors... Plus de 6000. Ah ouais, mais ce soir, comme c'est Noël, et comme c'est la dernière ce soir pour des débats de l'année 98, donc je voudrais qu'on aille jusqu'à 6500 personnes sur l'Internet. Rien que pour mettre les boules au chef. Comme ça, son patron, son boss, il va lui dire Oh, mais qu'est-ce qu'il fait ? Il ne nous fait rien sur l'Internet. 90 personnes tout à l'heure. J'ai écouté, j'étais là-haut. 90 ! Bon, attends, toi, t'es naze, tu peux te taire, toi. Oui, il est naze. Mais attends, toi aussi, t'es naze. Toi, tu ne bosses pas avant 11h30. Donc, qu'est-ce qu'on fait, là, Gérard ? Le jeu de la vérité ? Alors, on va faire le jeu de la vérité, mais j'aurais bien voulu que Sandy, maille de truffion. Elle se vide. Bon, eh, eh, eh, eh, eh, eh, Fildar, vas-y, mets-moi la grosse. Allez, bouge de là. Tu veux que je la mette ? Allez, allez, allez. Je n'ai pas trop envie ce soir de la mettre. Ah si, allez, allez. Non, je n'ai pas trop envie de la mettre la grosse ce soir. Mais si, allez. On va la faire revenir plus vite qu'elle est sortie. Eh toi, la grosse, débouche, espèce de fainéante. Tu ne vois pas que les autres s'amusent là. Allez, débouche. Allez, débouche. Viens avec nous. C'est ça la fête ! C'est ça la fête ! C'est ça la fête ! C'est ça la fête ! C'est ça la fête ! C'est fini la fête. Donc Gérard, on accueille le premier auditeur. On accueille Sylvain, 23 ans, de Calais. Oui, bonsoir, bonsoir. Bonsoir. Salut, bonne Pâques à tous. J'espère que t'as trouvé beaucoup d'œufs en chocolat dans le jardin, Gégé. C'est ça. Attends, bonne Pâques. Je vais te dire une chose, qu'on n'est qu'à Noël. Alors, je serais classe, tu vois. Je dirais joyeux Noël, bonne année et joyeuses Pâques. Attends, Sylvain, t'appelles d'où aussi ? Il appelle de Calais. Tout à fait, c'est une petite ville de la Guadeloupe. Et il fête Pâques. Ah ouais, c'est ça. Calais à la Guadeloupe ? Oui, tout à fait, tout à fait. Non mais attends, tu prendrais pas les gens pour des cons, toi ? C'est pas plutôt au nord de la France, plutôt ? Non, non, non. Si, si, si. Pas du tout, c'est New Calais comme New York. Ouais, c'est ça. C'est un peu pareil. C'est ça. Alors vas-y, ta question. Alors, le jeu de la vérité, on va monter le niveau d'un cran. Ouais, vas-y. C'est une question un peu personnelle qui vous concerne tous les deux, donc c'est bien que Sandi soit revenu. Ouais, vas-y. Vous avez beaucoup parlé à la fin de l'année dernière que vous alliez vous marier. Pourquoi vous étiez pas marié ? Et j'ai demandé un petit peu autour de moi, on m'a fourni quelques réponses. Alors il y en a qui disent que c'est parce que le maire de Surin ne voulait pas. Ouais. Et il y en a d'autres qui disent que c'est parce que Sandi, elle est bohémienne et donc il faudrait que tu te convertisses à la religion des manouches. Eh ben alors, dans ces cas-là, tu sais... Ah non, non, pas du tout. Non, non, attends, attends, Sandi. Non, attends, Gérard, je vais te rappeler le principe du jeu de la vérité. Non, non, attends. C'est pas dans ces cas-là que tu dégages le standard. C'est Joker. Ah mais t'en as pas... Joker. Non, non. Déjà, tu poses la question à qui ? A moi ou à Gérard ? A vous deux. à Gégé parce que c'est quand même l'homme, donc c'est lui qui porte la jupe, donc c'est quand même à lui de répondre. Non, c'est moi qui porte la jupe. Dans ce cas-là, Joker. Joker, hop, terminé. Et bien voilà. Il n'y a pas besoin de Joker. Gérard, Sandy peut répondre. Moi, je peux répondre. Vas-y, Sandy. Donc, si on ne s'est pas marié, c'est tout simplement, ce n'est pas parce qu'on ne veut pas, c'est tout simplement parce qu'on manque d'argent. Et comme on manque d'argent, Gégé travaille, d'accord. Mais tu n'es pas bohémienne. Non, je ne suis pas bohémienne. Tu es quoi ? Je suis d'origine anglaise. Non, non, non. Si, si, si, je suis d'origine anglaise. T'es sûr que t'es pas gitane ? Non, non, je suis pas gitane. D'abord, je me sens pas une gitane. T'es manouche, toi, t'es manouche, direct. Bon, allez, terminez pour toi. Gérard, qu'est-ce que tu disais ? Au revoir, au revoir, au revoir. Au revoir pour lui, terminé. Mais attends, j'ai même pas répondu. Elle a le droit de répondre, Gérard. C'est le jeu de la vérité. Non, non, mais attends. Moi, je vais te dire une chose. Pour l'instant, mon beau-père est emmerdé. Soyez emmerdé, vu ce qu'elle vient de dire. Le jeu de la vérité, c'est le jeu de la vérité. Ça n'a rien à voir avec mon père. Pour l'instant, j'ai dit qu'on ne pouvait pas se marier. Et elle a dit qu'elle était d'origine anglaise. Et j'ai dit que j'étais pas bohémienne non plus. C'est le jeu de la vérité, elle a répondu. Ça ne sert à rien de t'énerver. C'est toi qui as pris ton joker, donc ça te fait un point en moins. Voilà, t'es tout naze. Ça te fait un point en moins, c'est tout. Horror, 21 ans de maniaque. Allô ? Oui, bonsoir. Question pour vous deux. Je voulais savoir quel est le plus beau cadeau qu'on vous ait jamais fait. Alors, le plus beau cadeau qu'on nous a jamais offert, tu veux dire ? Ouais. Tu dis la vérité, Gérard. Donc, c'est une voiture. Une voiture ? Ouais. Qui c'est qui t'a offert une voiture ? Bah non, personne. Non, moi, ce que j'aimerais plutôt que quelque chose qu'on m'a jamais offert, c'est un voyage. Non, mais attendez, vous n'avez pas compris la question. La question d'Horror, c'est quel est le cadeau qu'on vous a... Enfin, quel est le plus beau cadeau qu'on vous a jamais fait ? C'est-à-dire, quel est le plus beau cadeau qu'on vous a fait ? Tu vois ? Quel est le plus beau cadeau que vous avez eu ? Voilà. Ah, le plus beau cadeau qu'on a eu ? Voilà. Ouais. Moi, le cadeau que j'ai eu, le plus, c'est un ordinateur. Ouais ? Un ordinateur ? Ouais. Parce que c'est mon père qui me l'avait offert, parce qu'il m'avait dit, bon bah, écoute, si tu réussis ton CAP, je t'offre un ordinateur. À l'heure d'immidi, là. L'heure d'immidi, pour apprendre les couleurs. Et comme j'aime bien l'ordinateur, donc... Et pourquoi pas un vélo d'appartement, quand tu pensais à moi, avant que tu me connaisses ? Non, mais attends, un vélo d'appartement, c'est pour ceux qui vont mourir. Attends, attends, attends, attends, attends. Attends, tu permets ? Quand je t'ai vu la première fois, tu m'as dit que tu pensais à moi avec ton vélo d'appartement. Non, non, non. C'est, c'est, c'est, c'est, c'est. Vas-y, vas-y. Sandy, il y a Olio sur l'IRC qui te demande si t'es branché sur Internet, parce qu'il a trouvé un site www.vientbrouterlecute sandy. Ah, non, non, pas du tout, je connais pas. C'est pas toi ? Moi, je l'ai vu aussi. Je suis pas branchée à Internet, et là... Ouais, tu veux même, toi ? Pour ? Pour... Pour te les gratter ? Non, ça va. Donc, Gérard, le plus beau cadeau qu'on t'ait jamais fait, c'est quoi, toi ? Moi, le plus beau cadeau qu'on m'a jamais fait, ben, c'est de m'offrir une voiture. Putain, mais t'as pas compris la question. Quel est le plus beau cadeau qu'on t'a fait, alors ? Non. Qu'on t'ait jamais fait. Non, qu'on t'ait jamais fait. Pas qu'on t'a, qu'on t'ait jamais fait, c'est-à-dire être. Donc, tu l'as, le cadeau, tu l'as. Ben... Ça peut être tout ce que tu veux. Ben, de toute manière, le plus beau, le plus beau cadeau que j'attendais, c'était de faire une émission de radio. Et là, maintenant, je l'ai. Ah, ouais, c'est un beau cadeau, ça. C'est ça, ouais. Grâce à... Grâce à... Grâce à... Grâce à Manu, je sais. Max. Max, le meilleur. Max. Max, mon chef. Grâce à lui, c'est grâce à lui si je fais de la radio. Parce que sinon, j'en aurais jamais fait. Et je rêvais toujours d'en faire. C'est pas... Attends. Vas-y, gratte-toi. Tu veux que je te gratte aussi, moi ? Tu faisais de la Cibi, quand même. Ouais, ouais. C'est un peu de la radio, la Cibi. C'est pas pareil. Moi, par contre, ce que j'ai à dire, c'est que, bon, c'est vrai que je rêvais jamais de faire de la radio. Mais, enfin, en faisant de la radio, je prends plaisir à en faire. Et plus j'en fais, plus j'ai envie de continuer. Ouais, mais grâce à qui ? Grâce à Max. Le meilleur de... Il est là. Tu dis que la Cibi, c'est pas pareil que la radio. C'est quoi, vraiment, la différence ? Parce qu'on fera un débat sur les routiers. C'est quoi, la vraie différence entre la radio et la Cibi ? Ben... En fin de compte, si tu veux, la Cibi, c'est pas du tout pareil. Parce que sur la Cibi, t'as un QRZ. Comme il y en a un qui m'a piqué mon QRZ. La radio, c'est différent. Parce que t'as Manu et Fildar, qui sont au standard, qui prennent des gens. Tu discutes avec les gens. Même sur la Cibi, tu peux discuter avec eux. Mais tu peux pas être avec Fildar et Manu, au standard. Moi, je peux faire son standard Cibi, si tu veux. Non, mais c'est pas pareil, la Cibi et le standard. Et tu peux pas avoir un QRZ en radio ? Non. Pourquoi ? Non, c'est pas possible. Et pourquoi ? Non, mais c'est pas possible. C'est différent. Pourtant, les gens pensent que c'est la même chose. Non, non. C'est quoi, la grande différence entre les deux ? La grande différence, c'est qu'il faut se dire une chose dans sa tête. C'est qu'à la Cibi, t'as un mic, t'appuies dessus. Tandis que là, t'es devant un micro, tu peux l'éteindre. C'est plutôt un kintosh, ici. Tu peux l'éteindre comme tu veux, ton micro. En Cibi, t'as des mics, et en radio, t'as des kintosh. T'appuies sur le bouton, là. Hop. Voilà. Et tu laisses tout le monde. Je peux te demander un truc ? Chaque animateur radio a un QRZ ? Parce que, regarde, Max, c'est pas son vrai prénom. Donc Max, c'est son QRZ. Mais on le sait. Mais pourquoi, moi, on me dit GG ? Moi, j'aurais bien voulu trouver un autre nom pour passer à la radio. Un QRZ, c'est un prénom qui passe bien en radio. Gérard, ça passe en radio. Gérard, sur Fun Radio, ça fait pas pareil que Franck sur Fun Radio. Ouais, mais ça... C'est pas de ta faute si t'as un prénom. Dévoile pas trop ton identité, toi. Ta cutie. Dévoile pas trop ta cutie. C'est pour ça que j'éteins la lumière du studio, pour pas qu'on regarde de mon visage. Voilà. Bien vu, Max. Et donc, c'est bon, Aurore ? Ouais. Ouais, donc c'était ça, ton plus beau cadeau ? Voilà. Ouais, ok. Alors... Donc voilà, j'espère qu'on a répondu à tes questions. Et puis, on te souhaite de bonnes fêtes, de la part de moi et Gérard. Ouais, ben moi aussi. Et puis, un joyeux nouvel an, quoi. Ben, passe une bonne année. Pense pas trop sur l'alcool, quand même. Passe une bonne fête de fin d'année 98. Ouais, ben toi aussi. Ben, on va essayer. On va essayer, c'est pas évident. Ciao, Aurore. Ouais, allez. Allez, à bientôt. Allez, salut. David, 19 ans, de Nantes. Oui, bonsoir. Bonsoir. Bonjour, Sandy. Bonsoir. Alors, ma question, c'est... Je voudrais savoir, en fait, quel a été ton plus beau souvenir de routier, Gérard ? Alors, mon plus beau souvenir de routier, ben... C'est de faire de la route. C'est-à-dire ? C'est-à-dire, ben... Là, tu vois... C'est bête, parce que j'aurais préféré qu'on te garde pour ce débat. Ah, mais t'as jamais eu, je veux dire, de problème ? Jamais ? Non. T'as toujours bien vaché ? Jamais de dérapage, ni rien ? Ah, ben, si. Ça va faire 4 ans que j'ai eu ça, hein. Ah, d'accord. OK. OK. Et c'est tout ? Ben, oui. Et sinon, j'ai entendu Sandy qui parlait d'un voyage, tout à l'heure. Eh ben, moi, je suis prêt à lui offrir un voyage au fin fond de mon lit. Qu'est-ce que ça l'attend ? Attends, Gérard, Gérard. La question, ça ne reste à Sandy, pas à Gérard. Mais c'est un voyage, pour combien de temps ? Ben, ça ne reste pas dur, avant longtemps, je te le dis direct. Tiens, à mon avis, l'auditeur, il fait ça rapide. Pour une journée, ou pour deux jours, ou pour une semaine ? Ah, non, non, non. C'est un précoce, l'auditeur. 5 minutes, 5 minutes, 5 minutes. Oh, ben, 5 minutes, ça ne m'intéresse pas. Non. Rigo, on est combien sur l'Internet, s'il te plaît, avant qu'on accueille Bertrand ? On est 4367,4, ce qui n'est pas mal. Ça monte, ça monte, ça monte. Allez-y, je veux 6000 personnes avant la fin. Et même Sandy vous dit, allez-y, foncez, allez sur l'Internet. Faites comme le Téléthon, donnez vos dons, donnez vos dons. Soyez généreux. Voilà. On accueille Bertrand. On peut peut-être déjà dire au revoir, quand même, à l'auditeur qui était avec nous. David, on te souhaite de bonnes fêtes de fin d'année. A toi aussi. A la prochaine, ciao. Salut. Alors, Bertrand, 25 ans de Lyon. Oui, bonsoir, bonsoir à tous, bonsoir l'équipe. Salut Gégé, salut Sandy. Bonsoir. Salut. Avant toute chose, je voulais vous souhaiter une bonne Saint-Valentin. Merci. Non, ce n'est pas la Saint-Valentin. Non, mais à l'Avance. À l'Avance, oui, c'est bientôt. Qui vous a rappelé. À l'Avance. Moi, en échange, je te souhaite de bonnes fêtes de fin d'année. C'est gentil, je te remercie. Moi, je voulais vous poser une question qui concerne votre avenir. Je voulais savoir si vous aviez l'intention d'avoir une grande famille et donc d'avoir des enfants très prochainement dans l'avenir futur. Non, attends, je ne veux pas prendre le choker. Ah ben non. Je voulais juste savoir si vous allez avoir des miens. Qu'est-ce qu'il se passe ? Non, il y a eu un problème avec Manu. Non, non, non, ce n'est pas Manu, c'est toi. Ah, pardon. Non, non, ce n'est pas Fildar. Donc la question, Sandy. Sandy, la réponse. C'était quoi déjà ta question ? C'est pour quand les gamins ? Voilà, les miens. Une grande famille. Les tiens ? Non, les tiens. Non, les vôtres. Ah, les nôtres. Les nôtres. Oui, ben, les enfants, tu vois, ça se fait à deux. Ouais. Donc, je pense que l'enfant, il viendra quand il viendra. Pour l'instant, on essaye le tout pour le tout, mais bon. Vous essayez en ce moment d'avoir un enfant ? Ouais. Non, mais ça, ça ne te regarde pas, toi. Non, mais c'est le jeu de la vérité, Gérard. Je te pose une question. En fait, il faut dire la vérité dans le jeu de la vérité. C'est normal. Moi, je vais te dire une chose. J'essaye le tout pour le tout. Ça ne vient pas. Ça ne vient pas, c'est tout. Et vous faites comment ? Vous faites comment pour essayer ? Qu'est-ce que tu appelles le tout pour le tout ? Moi, je reste zen. Je fais, tu vois, je reste cool. Bon, ben, si ça vient, ça vient. Si ça ne vient pas, ben, tant pis. Tu as une érection, Gérard, quand même ? Ça demande ou pas ? C'est vrai que cette question s'adresse à toi. Non, mais moi, je pose Joker. Ben, tu n'en as plus. Tu l'as déjà posé. Non, il y a un Joker. Il n'y a pas trois Jokers. Non, il y en a trois Jokers. Ah, tu n'as pas d'érection en ce moment, mais c'est normal. Tu as laissé tous tes Jokers, déjà ? C'est pas de ta faute. Gérard, est-ce que Sandy ? Ben, non, moi, je pense qu'un enfant, ben, ça vient quand ça vient. C'est pas... Mais, ouais, moi, ce que je voulais savoir, si vous faites une portée, vous pouvez m'en garder un, petit chihuahua ? Ouais, c'est ça, Tony. Non, c'est pas Tony, Gérard. C'est pas la voix de Tony. Il ne faut pas confondre avec les chiens et puis les personnes humaines. Mais le vétérinaire, il en pense quoi ? Ça peut marcher, un cachalot avec un sanglier ? Ça va le faire ? Qu'est-ce que tu entends parler par cachalot et je ne sais pas quoi ? Baleine et puis, ben, ouais, sanglier, quoi, c'est clair. Non, mais là, on ne parle pas des animaux. On parle juste de nous deux. Moi et Gérard, on n'est pas des animaux. On est des personnes humaines, tu vois, comme toi et moi. Moi, je pense qu'un enfant, ça vient quand ça vient, c'est tout. Maintenant, les animaux, ils font ce qu'ils veulent. S'ils ont envie d'avoir des petits, ben, ils font ce qu'ils veulent. Moi, ce que je dis, c'est qu'il faut peut-être chercher les causes de pourquoi le gamin, il n'a pas envie de venir. Est-ce que c'est une question d'hygiène ? Cette non-envie de venir de la part du gamin ? Mais non, non, non, attends, attends, attends, Bertrand. Moi, je vais te dire une chose. Ça dépend de l'homme et la femme, d'accord ? Vous avez de quoi l'accueillir ? Ben oui, oui, oui, t'inquiète pas, t'inquiète pas. T'inquiète pas, il y a ce qu'il faut. Là-dedans, j'ai tout ce qu'il faut. Donc, si j'ai besoin de quelque chose, j'ai une roue de secours. Gérard, sur l'IRC, la plupart des gens comprennent parfaitement pourquoi l'enfant, il ne veut pas venir. Donc, s'il y en a qui... qui pouvaient préciser sur l'IRC... Leur nom ? Non, mais qui nous disent à peu près ce qu'ils en pensent, eux. Ben, il y a le gérard masqué qui dit que t'as des couilles au cul, mais je vois pas le rapport. Non, mais ça, ça n'a rien à voir. Ça aide pas pour la reproduction. Comment ? Je dis que ça aide pas pour la reproduction d'avoir des couilles au cul. Non, mais tu sais, il y a bien des singes en voie de... De disparition. De disparition, donc ça fait comme des enfants. Ouais, c'est clair. Ouais, parce qu'il y a des enfants qui sont... Ouais, ben écoute, merci du conseil. Ben, de rien. En conclusion, je voulais dire, vive l'avortement. Ben, ouais, ben... Moi, je vais te dire une chose. Là, je suis contre. Alors là, je vais te dire une chose. C'est terminé pour toi. Au revoir. Allez, salut. Non, non, attends. Pourquoi t'es contre, Gérard, l'avortement ? C'est le jeu de la vérité. Tu réponds, laisse-le parler. C'est vrai que moi aussi, je suis contre. Pourquoi vous êtes contre ? Moi, je suis pas d'accord parce que si tu veux un enfant, dans ce cas-là, c'est la personne qui le veut. On s'amuse pas à se faire avorter. Mais c'est pas qu'une personne qu'ils veulent. C'est les deux personnes. C'est les deux personnes. C'est le couple. Ils sont à deux pour le faire. Donc, si on se fait avorter dans ces cas-là, moi, je suis pas d'accord. On tue un être humain. Donc, il est hors de question qu'on tue un être humain là-dessus. Voilà, on prend ses précautions avant. Il faut se protéger. Il y a des moyens pour se protéger. Il y a le préservatif et la pilule. Donc, c'est pour ça que je vais pas m'éterniser là-dessus. Voilà. Donc, Fildar, on s'écoute. T'as sur l'IRC qui dit que si vous y arrivez pas, c'est qu'il y a incompatibilité gégétique. Ça, ça dépend parce que ça peut être très bien aussi... Ça peut provenir aussi bien de moi que de Sandy. Ah, OK. Mais moi, de toute façon, je suis bien placée sur la question parce que comme j'ai déjà eu un enfant, donc je sais ce que c'est. Et moi, je sais que je peux en avoir. Donc, voilà. Donc, on s'écoute. On s'écoute le TGV avec Va plus vite, il faut que j'arrive à l'heure. Et on se retrouve tout de suite après pour le dernier... Le dernier... Auditeur. Le dernier auditeur pour le droit de réponse. Vous pouvez nous appeler au 0800 308 5000 0800 75 000 et toujours l'IRC www.rfr.radio pour les débats qui vont porter sur les routiers. Après... À tout de suite ! Et joyeux Noël à tous ! Et voilà, vous venez d'écouter... Le TGV va plus vite parce que je risque d'arriver en retard. Voilà. Donc, vous êtes au 0800 308 5000 et 0800 75 000 et toujours Manu qui vous attend en standard. Donc, W... Et puis, Rigaud qui vous attend sur l'Internet www.fr.radio. Tout à fait. Et on est combien, Rigaud, s'il te plaît, là, maintenant ? On est à peu près comme tout à l'heure. On est 4424,8. Oh, non, mais attends ! Il est minuit. Il est 0h56. Ils sont encore à table, là. Faut les laisser le temps. Bah ouais, mais... J'ouvre une parenthèse simplement pour dire, puisque tu salues les gens de l'Internet, pour saluer les gens qui viennent nous voir. Bah oui, mais je sais... Qui viennent de partout. Il y a un routier qui est passé à l'instant. Bah oui, je l'ai vu. Et il y a encore des gens qui viennent devant la radio pour visiter les locaux. Il y a pas mal de personnes qui viennent. Et là, vous n'allez pas... Le macro qui est venu, là, spécialement, ils vont aller aux putes, mais ils sont venus de dire bonsoir. Il est de Cannes. C'est un mec, un ancien dealer. Deux auditrices. Oh, la vache, elle lui fait la bise. Oh, la vache, t'as pas peur. Sandy. La belle Sandy. Il y a le bulldog mystère, là-bas. Le top modèle. Je t'en prie, Gérard. Bah, attends... À la tienne. Salut. Je t'en prie. Oh, bah quoi ? Ah, trop fort. Et alors ? Encore, vous avez pas vu. Moi, je suis là. Oh, la vache. Mais attends, c'est ce que je veux. T'es à moi, maintenant. Ouais, mais tu me fais mal aussi. Tu tapes trop fort. Pas trop fort. Il y a une personne. Heureusement qu'elle est là. Elle est forte. Il y a une personne qui va... Bah, j'ai la pêche. Ah, la patate, hein. Voilà. Sans déconner. J'aimerais bien avoir la banane, aussi. T'as pas la banane ? C'est une patate. Non, non, j'ai pas la banane. C'est toi qui as la banane. Ah, la banane du curé. Merde. Elle est où ? Tu sais où ? Entre mes jambes ? Bah, voilà. Elle est trouvée. On y va, on y va. Allez. Il y a une personne qui va vous parler. C'est un de tes copains qui est venu ce soir ? Ouais, mais ça, tu sais très bien qui c'est. C'est qui ? C'est le seul. C'est le seul qui a voulu venir pour fêter Noël avec nous. C'est le seul. Parmi tous les auditeurs. L'invité mystère, vas-y. Bonsoir. Ah. Et là, tout le monde l'a reconnu, bien sûr, c'est... Bonsoir. Alain Le Beig. Voilà. Bienvenue, Alain. C'est le seul. C'est le seul qui est venu parmi tous les habituels. C'est le seul qui pouvait, donc. Voilà. C'est tout ce qu'on pouvait dire, quoi. Vas-y, Alain. N'aie pas peur. Arrête, arrête. Bonsoir. Donc, on va accueillir... Le dernier. C'est qui ? Alain. Alain, tu restes zen. Ouais, ouais, il reste zen, Alain. Bon, ouais. Tranquille, hein. Ouais, tranquille. Tranquille. Tranquille, hein. Enfin, ça me fait plaisir que tu sois y venu. Ça fait plaisir à Max. Et que tu sois resté, surtout. On est que les trois à être là. Bah oui, mais... Hé, hé, Gégé. Mais non, mais non, mais Max, c'est pas pareil. Lui, c'est le chef. Mais non, mais lui, c'est le chef. Parmi tous ces habituels. Gérard. On est que les trois. Gérard. Oui. Tu dis qu'on est tous les trois, d'accord, mais il y a quand même Max, il y a quand même Manu, il y a quand même tout le monde. Mais non, mais... Et il y a tous ceux qui sont derrière le poste de radio, aussi. Ouais, mais il y a tous ceux qui nous écoutent, il y a tous ceux qui viennent nous faire un petit coucou. Ça, on les remercie. Oui, on vous remercie, là. Donc... Du fond du cœur. Donc, venez. Venez encore nombreux, si vous voulez, jusqu'à 4h du matin, de toute manière. On va tenir jusqu'à 4h. Surtout sur Internet. Et l'Internet, Rigo, s'il te plaît. Oui, c'est moi. Ouais, donc, combien ? Pour bouger ? Si, si, ça n'arrête pas de monter. Là, on est à 4524 moins 2. Ça va, ça booste. Bon, bah, ça va. Donc, Rigo... Oui, c'est moi. Non, c'est Manu. Non, non, excuse-moi. Manu, c'est qui ? C'est Audrey, tu l'as devant toi. Audrey. Bonsoir. Audrey, 19 ans de New York. Bonsoir, Audrey. Bonsoir, Gérard. Bonsoir, Sandy. Bonsoir, Alain. Bonsoir. Bonsoir. Alors, moi, c'est une question. Je voulais savoir si vous étiez déjà fait cocu. C'est-à-dire si Gérard avait fait cocu Sandy et Sandy avait fait cocu Gérard. C'est une très bonne question. C'est ce que j'allais dire. Bah, écoute, moi, non. Je pense pas que, tu vois, quand tu es dans un couple, ça se fait pas... Si t'es avec quelqu'un, c'est pas normal si tu vas voir ailleurs ou alors si t'aimes pas vraiment la personne. Ouais, mais ça peut arriver des fois comme ça. Oui, c'est vrai que ça peut arriver. Tu peux flasher pour quelqu'un, mais pas forcément pour aller coucher tout de suite avec elle. Oh bah, pourquoi pas ? Sauf si la personne n'est pas visible. Non, je te demande. Moi, je vais te dire une chose, tu vois. Je suis fidèle à Sandy. Ça va faire un an qu'on est ensemble. Eh ouais, déjà. Ça va faire un an que je la supporte. Eh moi, je te supporte aussi. Gérard, est-ce que t'as déjà trompé Sandy avec elle ? Non. Jamais ? Non. Et moi, jamais non plus. J'irai pas voir ailleurs. J'irai pas voir ailleurs parce que je l'aime de trop. Même pas si t'as un super canon. Non, non, non. Gérard, il y a Anonyme sur l'IRC qui dit que tu mens. Non, c'est faux. Elle se rappelle de toi. Qui ? Je la connais pas. Anonyme. Je la connais pas. Elle veut pas dire son nom. Elle veut pas dire son nom, elle est Anonyme. Moi, je te connais pas, Anonyme, sur l'IRC. Donc, voilà. Donc, Anonyme, si tu pouvais préciser, comme ça, je pourrais avoir des renseignements, quoi. Ok. Non, parce que Gérard, moi, je me rappelle tous les deux... De quoi, de quoi, de quoi, de quoi, de quoi ? Bah, toi et moi. Ah bon ? Quand ? Quand, quand, quand, quand ? Bah, c'était le mois dernier. Ah, le mois dernier, ça m'étonnerait parce que j'étais encore avec Sandy. Ah bah, ça n'empêche, hein. Non, non, non, non, non. Là, tu dis des mensonges. Tu peux préciser le jour... Précise, précise, précise. Précise. Je précise, je précise. Précise le jour, la date et l'heure. Et où, comment ? Le jour, la date et l'heure, bah, c'était le 27. Il était... Le 27 de quel mois ? Bah, du mois dernier. Donc, on est... Le mois de novembre. Le 27 novembre, vas-y. L'heure ? Il devait être une heure ou deux du matin, je ne sais plus. Pardon, pardon, pardon, pardon. Je me suis trompé de bouton. Et Gérard, en attendant, il y a Anonyme sur l'IRC qui dit que c'était le 18 06 98 nu dans sa piscine. Non, c'est faux. Donc, je ne la connais pas. Elle a des photos. Elle m'a dit qu'elle allait les afficher dans Suren. Ah bah, c'est bien. Et puis en plus, c'était très bien. Ouais. Ouais, ouais, ouais. Non, non, moi je pense pas. Non, non, t'es une menteuse. Tu vois, moi j'ai confiance en Gérard et je pense pas qu'il me ferait une chose pareille. Là, tu mens. Et si par exemple, un jour, Gérard, tu vois, je sais pas, ça peut arriver, tu vois, il te trompe, est-ce que tu lui pardonnerais ou pas ? Non, je crois pas. Qu'est-ce que tu ferais ? Moi, je pardonne pas, moi. Tu te barres. Tu te casses, tu le laisses. Ouais, je prends mes affaires et je m'en vais, quoi. D'accord, bah fais gaffe à toi, Gérard. Moi, je suis comme ça. Non, mais t'as raison, c'est normal. Alors, elle dit, là, devant des millions d'auditeurs, mais en fin de compte... Ah non, mais je te jure, je pardonne pas. Mais non, mais attends. J'ai même pas pris mon joker, alors tu vois. Et alors, t'as pas besoin de joker, tu réponds à toutes les questions. Bah oui, donc toi, t'as pris tes trois jokers et puis moi, j'ai pas pris mes jokers, donc... J'ai répondu à toutes les questions. Bah alors, tu prends tes clics et tes claques et tu te casses. Bon, bah c'est sympa, alors. Voilà, c'est tout. Bah alors, toi, c'est pareil. Tu prends tes clics et tes claques et tu t'en vas, comme la chanson de Mélilique, c'est quoi déjà ? Bye bye. Hé, Mélilique ! Bye bye ! Ah, c'est Mélilique qui chante bye bye ? Bah oui. Non, bah si, il chante bye bye, mais si tu veux, dans la chanson, tu prends tes clics et tes claques et tu te casses. N'importe quoi, ça a jamais été Mélilique. Mais si, c'est Mélilique. C'est MC Solar. C'est MC Solar. Alors ? Mais non, c'est pas MC Solar. Mais c'est MC Solar. Non, non, non, non. Mais c'est MC Solar, on l'a encore vu ce matin à 7h à la... à la télé. Attends, arrête de dire des bêtises. Non, parce que Mélilique, je le reconnais, c'est à coiffure, donc... Ah ouais, bah bien sûr, il est coiffé comme toi. Non, non, non, pas tout à fait. Non ? Ah, avec Léopatra. Juste avec des petites tresses, quoi. Ouais, avec Léopatra. Pas comme moi. Ouais, mais c'est vrai que t'es... Eh, c'est vrai, sans déconner. Ouais, sans déconner. Sans déconner, comme Max il dit. Sans déconner, c'est vrai que t'as une tête de Cléopatra, hein. Ouais. C'est quoi pour toi une tête de Cléopatra, Gérard ? Eh, Cléopatra, c'est celle qu'on voit, là, sans arrêt. Ah, oui, d'accord. C'est vrai, hein. Comment la petite, là ? Audrey. Elle s'appelait Audrey. On a répondu à ta question, Audrey ? Bah ouais, ouais. Mais bon, Gérard, t'as pas dit la vérité, quoi. Bah moi, j'ai pas dit la vérité. Moi, je t'ai dit que je suis toujours fidèle à Sandy et j'y resterai. Bah ouais, mais... Jusqu'à la fin. Jusqu'à la fin. Jusqu'à la fin. Non, mais ça se trouve, c'était un autre Gérard. Tu t'es peut-être trompé. Non, non, mais attendez, attendez, attendez, attendez. Ouais, faut peut-être arrêter les conneries. Parce qu'il y a des gens qu'on a marre d'être... qui sont harcelés. Qui sont harcelés. Attends, Gégé... Elle veut pas le dire. C'est perso. Non, non, non, mais vas-y. Tu l'as vu. Tu as eu un rendez-vous avec elle. Enfin, avec lui, pardon. Tu l'as vu et tout ça. Ah bon ? Ah bon ? C'est bon ? Avec elle. Avec elle, avec elle, avec elle. C'est bon. Alors, vas-y. Donc, tu peux préciser plus ta pensée, là ? De quoi ? Tu veux que je donne des détails ? Ouais. Attends, je peux donner des détails ? Non, c'est perso, ça. Attends. Non, moi, je suis d'accord avec elle. Si elle veut garder ça pour elle, elle le fera dans neuf mois, au pire. Ouais, voilà. Parce que t'avais pas mis de capote, je te signale, et moi, je prends pas la pilule. Non, non, bon, allez, on va s'arrêter, là. Non, non, bah, allez, c'est bon. C'est bon, donc. Audrey ? Ouais ? Bah, on va te souhaiter de bonnes fêtes de fin d'année. Ouais, bah, OK. Ouais, bonnes fêtes. Et puis, bah, à l'année prochaine, si tout va bien. D'accord. OK ? Donc, on va se retrouver, là, maintenant, pour attaquer les débats. Ah, le débat, ouais. Donc, le débat sur les routiers. Donc, on va... Il y a Manu et... Manu, qui est au standard. Ouais. Donc, qui vous attend, les bras ouverts. Donc, 0803 08 5000. Rigaud, toujours sur l'Internet, au www.fr. Donc, si vous voulez nous appeler, n'hésitez pas. On est là. Et si vous voulez toujours passer, voir comment ça se passe dans les studios, c'est fini, là. Je pense que... Le chef, il vient de me faire... Hop ! Le chef, il m'a fait... Hop ! Il m'a fait... Hop ! Ça fait trois jours que tu me dis. Comment on va faire visiter, surtout, personne pendant tes débats ? Et maintenant, t'arrêtes pas de demander aux gens de venir pendant tes débats. Bah, alors ? Non, bah, non. C'est toi qui as demandé à ce qu'il y ait personne. Bah, alors ? Bah, dans ce cas-là, on laisse la porte ouverte. On relance pas une annonce. C'est bon. Bah, si. Bah, si. Maintenant, c'est les concerts. On va... Attends. Maintenant, c'est les débats. S'il y a des gens qui veulent venir... Débat sur les routiers. Et voilà. Donc, s'il y a des gens qui veulent venir, donc, ils peuvent venir. Mais pas trop nombreux dans les studios. C'est tout ce que je demande. Attendez la pub. C'est... Ouais, bah, attendez longtemps. Ouais, d'accord. La pub. Vous attendez la pause musicale. Je viendrai vous dire un bonjour. D'accord, ok. Bon, ça, c'est notre problème. D'accord, ok. Bon, bah, alors, les débats sur... Enfin, le débat sur les routiers. Le débat sur les routiers. Trois heures de débat. Il y a... 120 questions. Il y a 23 questions. Et que de la bombe, hein. Ouais. Et c'est de la bombe bébé. Comme dirait... Je sais pas qui, là. Ça, c'est... Ayam. Ouais. Et donc... Ayam. on va garder... Cléopatra est toujours là. Cléopatra va réagir quand même. La bombe bébé, c'est réciproque. Chicho. La bombe bébé, Chicho. Fais-moi plaisir. C'est Noël. C'est Noël. Faites la fête. On va mettre un petit remix. On le mettra tout à l'heure. Faites la fête maintenant. Faites la fête. Faites la fête. Faites la fête. Faites la fête. Tu peux arrêter deux minutes ? Je propose un truc. Tant qu'il n'y a pas les 6500 connectés sur Internet, on ne le met pas. Non. Ça les forcera à venir. Ça les forcera à venir. Non, non, non. Ce n'est pas toi qui commandes, c'est moi. D'accord. On le met alors. C'est moi. On y va. On se retrouve dans un instant, c'est ça ? On se retrouve tout de suite après aux 0803, 085000 et 0875000. Il n'y a plus qu'une personne au standard, c'est Manu. Ce n'est pas grave. Oui, mais toi, tu vas y retourner. Oui, d'accord. D'accord, mon canard. Ok. Ok. Et c'est quoi là qu'on s'écoute ? Naromix. Comment ? Comment ? Alors là, c'est une très bonne question. Ah, bon ? D'accord, je vois. Celui qui fait du bruit derrière, arrête. Parce que ça commence à m'énerver. C'est moi qui commande. Mais non ! Hey, hey. Sans déconner. Sans déconner. Non, non, non. Attends, je t'écoute. C'est moi qui t'écoute maintenant. Tu réponds à la question ou si tu réponds pas, on va te dire pas. Bonne nuit. Bonne nuit à toi. Allez, celui-là, dégage. Fais gaffe là-bas parce que j'ai l'air de faire avaler tes lunettes si tu fais le con. Mais attends, tu te fous de moi, toi ? Quoi ? Quoi ? Parle un petit peu plus fort devant ton combiné parce que j'ai un téléphone de merde. Toi, tu as l'air de faire sodomiser, toi. Sans déconner. Remix ! Remix ! Remix ! Remix ! Remix ! Remix ! Remix ! Remix ! Il y a Gilbert, il y a Patrick, il y a pas mal de gens. Il y a pas mal de gens, donc je remercie tous les gens. Et il y a d'autres personnes encore qui sont en haut à l'accueil. C'est des routiers, hein ? Ouais. Il y a des triplés routiers, en plus. Derrière, juste derrière. Bon, toi, pour l'instant, tu as de terre et c'est tout. Non, mais c'est une routière qui est venue spécialement. Elle va livrer bientôt dans la Haute-Savoie. Elle est venue te dire bonsoir. Ouais, mais de toute manière, en fin de compte... Ah, les canons, hein, si t'étais célibate, si t'étais pas maqué. Non, mais je sais bien. Moi, j'ai mon bébé. J'ai mon bébé rose. Je le garde, mon bébé rose. Non, s'il te plaît. Excuse-moi, là, je me porte en faux. C'est pas ton bébé rose, merci. Attends, toi, t'étais bien contente ? Ouais, bébé rose, c'est moi. Donc, toi, c'est bébé vert, bébé marron, bébé ce que tu veux, mais bébé rose, c'est moi. Ouais, mais t'étais bien content quand t'avais Aurélie, là, dans les studios, hier. Mais Aurélie, je lui ai rien dit, moi, Aurélie. C'est rigolo, hein ? Menteur ! Menteur, menteur. Allez, sans déconner. Allez, sans rancune. On y va. 1h17, c'est parti. On accueille sans problème 20 ans de Niort. On écoute Fun Radio sur 93.3. Bonjour, Gérard. Bonjour. Joyeux Noël à toi. Bon anniversaire. Ah bah, d'accord. Toi, t'es vachement en avance. À l'avance, à l'avance. Chute 19 ans de Laval, 102.3. Oui, tout à fait. Salut, joyeux Halloween à tous. Salut à bébé gros. Comment ? J'ai dit salut à bébé gros. Euh... Là, tu vas te calmer, toi. Allez, hop. C'est Noël, on écoute. Ouais, c'est Noël, Gégé. Allez-vous, allez-vous. Tranquille. Non, non, hé. Tu me l'attrapes et tu me le calmes déjà, lui. Ça y est, il commence déjà à faire sa somme dictature, le latin. Allez ! Hop. Couille de loup, 23 ans de Toulouse. On écoute Fun Radio sur 105.9. Bonsoir. Bonsoir. Petit téton, 18 ans. Presse, 98.9. Oui, bonsoir et joyeux Noël. Eh ben, de même à toi. Euh... Raisin sec, 25 ans d'Alès. Bonsoir, joyeux Noël. 96.5. 65. Euh... 96.6, pardon. 65, genre. 96... 96... 95.6. OK. On écoute Fun Radio sur 95.6. Oui, si tu veux. Allez, hop. Allez, hop, il dégage, celui-là. Allez. Oh ! Vous avez vu, calmez. La suite, Gégé. Eh... Poil de nez. Oui, bonsoir. 20 ans de Nantua. 99.4. Bonsoir, Paris. Bonsoir, Goumaud. Salut à toi. Parle bien dans ton téléphone, hein, Poil de nez. Ouais. Pardon ? Ouais, parle un peu mieux dans ton téléphone et... D'accord, mais je suis dans une cabine en pleine campagne, donc ça, c'est pas nouveau. Oh là là là là là ! C'est un portable, c'est un portable ! Non, non, c'est pas un portable. C'est ici, c'est un portable. C'est pas nouveau, bon. Oh, vous vous calmez, c'est pas vous qui commandez, c'est moi. OK, on y va, Gégé. OK. Donc, c'est le débat sur les routiers, hein. Tu le rappelles, voilà. Donc, la question, excuse-moi, parce que j'ai pas écouté. Bon, la question, de toute manière, t'as pas besoin de l'écouter, toi. Ah, d'accord, bon. Toi, tu fais la réalisation, tu me donnes les fiches avec les titres de chansons. D'accord. OK. Rigaud, oui ? Oui. Bonsoir. Bonsoir. Débat sur les routiers, oui, tout à fait. Donc, y avait pas une petite question avant qu'on... Spoutnik qui te demande comment il doit faire pour manger sa dinde de Noël avec des baguettes au resto chinois. Ah, là, je sais pas. Là, je sais pas du tout. Donc, la question, donc, un routier peut-il conduire 24h sur 24 sans s'arrêter ? Allez, hop ! Non, mais merci, Fildar. Mais ils sont là, les auditeurs, Gérard. Non, mais bravo, Fildar, tu commences. Bravo, Fildar. Bravo ! Bravo ! Bravo ! Bravo ! Bravo ! Je pense qu'il n'y avait aucun auditeur. Un routier peut-il conduire 24h sur 24 sans s'arrêter ? Impossible. On va demander à 100 problèmes. Pas de problème. Impossible. 24h sur 24, c'est impossible. Il y a quelqu'un qui mange. Non, mais... Non, mais ça dépend. Il dort, mais qu'il fasse autre chose. Attendez, déjà, pas tous en même temps, parce qu'on ne comprend rien, s'il vous plaît. Vous coupez la radio. Qui c'est qui a une radio pourrite, là ? Elle est pourrite, ta radio, en plus. Pas moi non plus. Pas moi non plus. Qui c'est qui a une radio ? Je remercie celui qui met le son, parce que j'ai l'image, je n'avais pas le son. Gérard, il met de Goldorak, Manu... C'est bon, c'est bon, il gère, Manu. Vas-y, Gérard. Alors, chute. Chute, à toi. C'est bon, je le calme. Bon, d'accord. C'était chute qui mettait Goldorak, c'est pour ça. C'est parce que je suis fan, je suis fan. Alors, tu peux... J'ai connu des routiers qui conduisaient beaucoup plus que 24h d'affilée, ça dépend à quoi ils tournent. Et moi, je dis, il y a des routiers qui ne respectent pas les consignes de sécurité, qui conduisent beaucoup plus que ce qu'ils devraient. Parce qu'il y a des accidents, comme d'habitude. D'accord. Oh, on se tait ! Si on est du routier qui tourne aux enfaites, je vais dire, ça sera conduit 72h, 96h de suite sans problème. Ils partent de Amsterdam, ils vont jusqu'à Tomboucou direct. D'accord. De toute manière, ce n'est pas la question. Bah si, il est routier, c'est quand même... Non, non, mais ce n'est pas la question, d'accord ? C'est international. Ce n'est pas la question ! Oh là là. C'est pas le thème du débat. Oh, le grand stratégaire ! Oh yes ! Oh là là ! Oh là là ! Eh putain, vous ne me faites pas là ! Oh, Manu, Manu, Manu. Bon, allez, stop. C'est bon. Allez, Gérard. Oh, euh... Faut... Faut peut-être que tu te calmes, Manu. Gérard, sur IRC, il y a Sardine, le vrai de Marseille, qui te dit que s'il n'y a pas de feu rouge sur l'autoroute, il peut ne pas s'arrêter pendant au moins 120h, le routier. Non, mais attends, les feux rouges, je ne vois pas le rapport avec... Un routier peut-il conduire 24h sur 24h ? Bah si. Non, mais je ne vois pas le rapport avec les feux rouges. Ah si, s'il n'y a pas de feux rouges, il ne peut pas s'arrêter de rouler. Bah ouais, mais attends. Un routier qui conduit 24h sur 24h, déjà, je n'en ai jamais vu. Bah alors, c'est quoi ta question ? Justement, c'est une question que je pose. C'est une question con. Bah ouais, si tu sais que ce n'est pas vrai, pourquoi tu poses la question ? Parce que... Parce que cette question-là, elle n'a jamais été posée lors qu'on a fait les débats sur les routiers. Donc c'était important de la poser, parce que comme ça n'avait jamais été fait... Gérard, sur IRC, on me demande si c'est que des questions à la con, comme ça, pendant tout le débat. Si ça ne leur plaît pas, c'est qui qui te demande ça ? C'est un peu tout le monde. Fais gaffe, parce que si tu leur dis à tous de se casser, on va être mal. Donc, on va demander à Chut. Ouais. Bah écoute, moi je voulais te dire que des routiers qui conduisent plus de 24h, comme je t'ai dit tout à l'heure, il n'y a aucun problème. Ouais. Si Manuel Générix fout la main, si tu prends Steve Austin, il conduit largement plus de 24h. C'est pas moi l'arrière. Si tu prends Steve Austin, il peut conduire largement plus de 24h. Lui, c'est un show aussi, quoi. Ah bah ouais, non, mais je veux dire, ça, c'est du super routier, quoi. Ah, c'est clair. Ouais, bah ouais, d'accord, t'as raison. Tu ne prends pas parti des ports, toi ? Ils ne prennent pas l'avion, Gérard. Non, non, mais tu ne prends pas parti des ports ? C'est important que tu transportes les cochons, alors, en France. Pourquoi tu veux tout de suite citer le nom de Manu ? Ah ! Tu n'as pas parlé de Manu, je t'ai demandé comment t'avais fait la fête. Manu, je l'ai vu en live, il n'est pas gros. Comment t'avais affrété ta meuf ? Dégage-moi ce abruti, là. Ok, ça y est. Ah, tu vas voir, toi. On va s'occuper de toi, hein. Je vais savoir qui c'est. Qui c'est qui s'amuse à parler de Sandy ? C'est Robert. Non, il n'y a pas de Robert. On n'a pas de Robert, là, sur la liste. Gérard, à propos de Sandy, il y a Olio qui te demande combien de temps tu roules sans t'arrêter. Je ne roule pas, je t'assure, mais bon, je ne peux pas te répondre à cette question. Tu flottes, alors, si tu ne roules pas. Donc, je prends un joker. Ce n'est pas le jeu de la vérité, c'est les débats. Alors, couille de loup. Moi, tu vois, je pense que ça dépend. En fait, s'il a pris du speed, il peut aller rouler plus de 24 heures. Je ne sais pas s'il roule plus vite aussi, ça dépend de la vitesse, en fait. Ça dépend à quelle vitesse il roule. Non, mais attends. Facilement, plusieurs heures. Moi, je vais te dire une chose. Tu as déjà vu à combien ils sont limités, les routiers ? Ah ben non, moi, je ne suis pas routière. Non, tu n'es pas routière. 20, 30 à l'heure, je crois. Oui, c'est ça. Qui c'est qui vient de dire ça ? Chaudreau, Chaudreau. Qui ? Ils sont limités à combien, Gérard ? Toi, tu peux peut-être leur dire. Alors, limitation de vitesse. Manu, tu vas me faire du bon boulot. S'il te plaît, pour la dernière. Gérard ! Il y a des routiers, ce soir. Il y a des routiers avec toi, en plus. Ils vont confirmer. Oui, je l'ai vu. Donc, il pourra le confirmer. Donc, je pense que les routiers sont limités à 80. Tu peux le confirmer ou pas ? 60, 80, voire 90, pas plus. C'est faux ! 90 sur autoroute. C'est faux ! Non, non, laisse-le réagir. Laisse-le s'exprimer. Non, non, mais c'est un vrai routier. 90 sur autoroute. Ce n'est pas vrai ! C'est une honte ! Ce n'est pas vrai ! Attends, toi. Toi, avec ton vélo, tu roules à combien ? 91. 91 km heure. Tu fais moins le malin. Mais attends, ton vélo, on te le prend entre deux camions, tu n'as plus de vélo. C'est une boîte à conserve. Oui, mais moi, je prends ton camion entre deux vélos. C'est moins le malin. Mon camion entre deux vélos, tu as raison. Prends... Ouais. Donc, petit téton. Oui, bien sûr, il peut conduire... Oh, ta gueule, toi ! Ça s'appelle des routiers somnambules. Ah, d'accord. Des routiers somnambules. Tu as vu jouer ça dans Spirou Magazine ou dans Tintin Milou ? Non, dans Mickey. Ah, dans Mickey. Moi, je crois que j'ai vu jouer ça dans L'île aux enfants avec Casimir. Ne cherche pas à être drôle, Gérard. Ça ne marche pas, Gérard. Gérard, sur IRC, il y a Sean qui te demande de répéter la question. Ah non, je ne répète plus les questions, maintenant. On accélère. Raisin sec. Alors, les routiers, ils sont limités à 230, normalement, non ? Bien sûr. Pourquoi pas 250 km heure aussi ? La dernière fois, j'étais à 140, je me suis fait doubler par un camion. Alors, je ne comprends plus, maintenant. Euh, Gégé ? Ouais ? Si son problème, ça ne te dit pas, on fait une petite pause pendant un quart d'heure et on met le son de Goldorak. Non, non, non, non, non, non. Alors, son problème, terminé pour toi. Est-ce qu'il joue de la guitare, là ? Non, personne ne joue de la guitare. Non, non, Actarus. Euh, Poil Donné. Tu n'as pas répondu à ma question. Qui ? Raisin sec. Alors, vas-y. Je t'ai demandé comment ça se faisait que j'étais à 150 sur le tour de route et qu'un camion m'a doublé. Non, mais attends. Tu étais avec quoi ? Avec ma voiture. Gérard, ça peut rouler au maximum à combien, un camion, un semi ? Un camion, de toute manière, on a confirmation, c'est limité à 90. Non, mais c'est limité. Mais si ça dépasse la limite, ça peut rouler à combien ? Non, il n'y a pas de si il dépasse la limite. Il y a son mouchard. Il y a un petit voyant rouge. Donc, le mouchard, pour préciser, pour ceux qui ne sont pas routiers, qui n'ont pas l'habitude de le faire, et là, on a deux... Ils peuvent confirmer. On a des routiers qui sont là, qui peuvent confirmer. Donc, le mouchard, c'est là où qu'on met le disque pour savoir à combien qu'on roule et tout ça. Donc, c'est un boîtier comme un... Attends, parce que tu dis que ce n'est pas un lecteur CD pour mettre le disque, c'est un radio cassette. Non, mais c'est à peu près comme ton disque. Oui, c'est ça. Tu as le disque qui tourne... C'est un lecteur cassette, CD. Même, non. On appelle ça des mouchards. Oui, les mouchards, ce sont ceux qui disent des... Non, non, non. Comme les Kleenex, des trucs comme ça ? Mais non, attends, toi... C'est exactement ce qu'on demande à un salarié. Non, non, non. Là, on a des routiers. Donc, on peut confirmer. Les mouchards, c'est un truc où tu mets ton disque. Tu mets ton nom. Ton disque CD ou vinyle ? Mais non, tu mets un disque normal. Tu prends ça. C'est faux ! Mais arrêtez vos conneries, putain ! Mais moi, c'est ce que je dis. Alors, toi, tu t'écrases, ok ? Ouais, non, mais attendez. Un disque, c'est un genre de truc comme ça. Ah, une feuille de papier. Non, mais qui est trouée là. Montre bien, parce que les gens ne voient pas bien, peut-être. Là, tu as tout ça. Tout ça, c'est un disque. Et tout de suite... Ah, tu fais une horloge, comme une radio. C'est une horloge. Mais si tu n'as pas d'horloge, tu peux mettre quoi ? Non, tu ne peux pas. Tu ne peux pas. Réveil ! Non, non, tu ne peux pas. Pas de réveil ? Non, non. Non. Ah bon. Tu ne peux pas machiner là-dessus. Ah, tu ne peux pas machiner, surtout. Alors... Je voulais dire quand même que les routiers, c'est des grosses balances, quand même. Ta gueule, là, toi. Toi, la balance, tu sais où tu vas terminer, toi ? Là. Ah ouais, ah ouais, ah ouais. Gérard ? Excuse-moi. Vas-y, Manu, vas-y. À la place de sans problème, on accueille n'importe quoi. Euh... Je vais te dire une chose. Attends, tu permets sans problème ? Euh... Il n'est plus là, il n'est plus là. Il est parti sans problème. C'est n'importe quoi. N'importe quoi. Ouais. Je vais te dire une chose, Manu. Ouais. Pas comme toutes les semaines. Ah, excuse-moi. Dis plus rien, parce que sinon, ça fera plus d'une chose. Là, tu ne peux pas dire... Tu ne peux pas dire sur les 24 lignes, parce qu'il n'y en a plus que 12, mais... Ouais, ouais, non, mais je voudrais qu'on prenne un peu, là. Sur les 12 lignes, Manu. Donc, c'est comment, son nom ? N'importe quoi. N'importe quoi. Attends, Gérard, j'ai lutté pour essayer de vous joindre. Ouais, donc, tu peux répondre à la première question ? Bah, j'ai pas entendu, j'étais au standard avec Manu. Alors, la première question, donc, je la rappelle, parce que tout le monde a à peu près fait le tour. Donc, n'importe quoi pour toi. Je répète. Un routier peut-il conduire 24 heures sur 24 sans s'arrêter ? Euh... Si c'est mon argent. Oui, je pense, oui. S'il prend de la caféine. C'est ça, t'as raison. Et celui qui dit « fais chier maman », c'est ton... C'est mon argent. Ouais, c'est ça. Et celui qui fait le porc, c'est pareil. Il n'y a personne qui peut m'enregistrer l'épisode de Goldo en DVD ? Non, non, non, non, il n'y a personne qui peut t'enregistrer Goldo en DVD. Il est monté sur moi, c'est tout. Oh... Gérard, tu parlais des mouchards. Moi, je voulais savoir quelle est ta théorie sur le Morbac. Non, il n'y en a pas. Alors, comment s'organise un routier ? Attends, Paul Donnet, il n'a pas répondu. Non, vas-y. Bon, alors, tu parlais de... C'est quoi déjà la question ? Oh, allez, tu me prends pour un con, là. Allez, va retirer tes poils de nez. Allez, hop. Hop, terminé. Va retirer tes poils de nez. Je m'en souviens. Non, non, c'est bon, c'est bon. Joyeux Noël à toi. Va retirer tes poils de nez. Hop, terminé pour toi. Alors, comment s'organise un routier quand il s'ennuie ? On va demander ça à n'importe quoi. Je pense qu'il se tape une grosse branlette. Alors, tu peux... Vas-y. Rigo, attends, attends. Justement, à ce propos, il y a un misto sur l'IRC qui dit que 99% des routiers se branlent quand ils se font chier et l'autre pour cent sont des neuneux. Alors, là, je vais te dire une chose. Qui c'est qui a dit ça sur l'IRC ? Misto. Misto. Je vais te dire une chose que là, tu as ouvert la réponse dans peu de temps parce qu'il y a des routiers qui sont là. Toi, tu ne peux pas répondre. Ils peuvent confirmer. C'est bon. Ils peuvent confirmer que c'est faux. Non, non, non, c'est faux. Il ne faut pas déconner. Attendez. Il ne faut pas. N'importe quoi. Putain, il fait la transformation. Excuse-moi. Donc, Gérard. Bon, allez, hop. Attends, il fait la transformation. Non, non, non, non, non. Non, non, ouais. Je ne sais pas d'où ça vient. Gérard. Gérard. Allez, allez, allez. Manu. Manu, bosse un peu. Putain, autrement, tu dégages. Rigo. Non, non. Tu le tais, toi. Non, il y a juste Misto qui dit que si tu ne fais pas partie des 99% qui se branlaient, c'est que tu étais un neuneu. Et alors ? Tous les routiers ne se branlent pas dans leur camion. Attends. Tous les routiers ne sont pas neuneux. 99%. Tous les routiers ne sont pas des cochons comme la question va être posée. Donc, je... Je sais qu'il n'y en a pas beaucoup qui sont sur les routes, malheureusement. Ah, pourquoi ? C'est les fêtes. Quoi, il y a du gel ? Eh non, mais... Ça gèle ? Non, mais il n'y a pas de routiers. Ouais, vas-y, toi. Je voulais juste te dire qu'à la place de Poil Donné, on accueillait Sandrine, c'est tout. Alors, Sandrine, bonsoir. Non, non, c'est bien, ça. Oui, bonsoir, Gérard. Salut, Sandrine. Salut, Sandrine. Bonsoir, c'est Sandrine de France. Ouais, c'est ça, Travelo. Bon, vous fermez un peu vos gueules. Ok, super. Merci. Ah, on va peut-être plus avoir de confirmation, mais c'est pas grave. Salut, les routiers. Salut, les routiers. Salut à vous. Bonne route, vous êtes sympas. Bonne bourre. Bonne bourre et prudence sur les routes. Ouais. Passez la deuxième, quand même, des fois. Sortez couverts, les mecs. Gérard. Oui ? C'est Sandrine. Est-ce que je peux avoir la question ? Parce que Manu m'a pris sur le standard. Ouais, ouais, ouais. En plus, il est sourd. Oh, tu te tais, toi. Ferme-toi, s'il te plaît. Moi, ça va. Alors, comment s'organise un routier quand il s'ennuie ? Oh, putain, mais vous me faites ça, mec ! Bon, moi, j'arrête à 3 heures, hein. Allez, hop ! Allez, allez, allez. Manu, c'est quoi, ce bordel ? C'est nul. Nul, nul, nul, nul. Faut me mettre à l'aréa, moi, je pense. Allez, on va s'écouter, Sacha, avec Fête la Fête et La Grosse. Et on se retrouve après pour la deuxième question. Comment s'organise un routier quand il s'ennuie ? A tout de suite. Sous-titrage Société Radio-Canada ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... Et voilà, c'était Saga avec Fête la Fête et... Saga Africa ? Non, c'est Saga avec Fête la Fête à La Grosse. Donc, c'était dédié pour... La Grosse ? Pour ma petite femme que j'aime de tout mon cœur. Avant de recommencer avec les auditeurs, j'ai un petit sondage sur l'Internet. Alors, c'est de paradoxe. Alors, attention, parce que ça défile très vite. Alors, sondage reçu par l'AFP. 15% des routiers sont des maniaco-dépressifs. 23,78% sont en proie à de gros problèmes sexuels. 36% prennent du Viagra. 3% sont sans emploi. Et 90,3% auraient préféré être CRS. Parce qu'ils ont le même QI. Euh... CRS, non, je vois pas trop le rapport. N'importe quoi, bonsoir. Bonsoir, Gérard, comment vas-tu ? Re-bonsoir. Chut, derrière, vous fermez vos gueules. Oh putain, mais... Oh, Manu ! Faut gérer un peu, là, parce que ça commence à bien faire. Chut. Il y a un mec qui fait le malin, derrière. Oh là là, Goldorak, Manu ! Ça vient pas de chez moi ! Oh, moi, j'en ai ras-le-bol, là ! Mais y a personne ! Regarde un peu, y a personne en air ! Putain, tu as bossé comme il faut, toi ! Mais y a personne, ça vient pas de moi, hein ! Si t'as pas envie de bosser, ce soir de Noël, tu retournes voir ton bébé rose ! Mais y a personne ! Tu nous fais chier, là ! Ouais, c'est vrai. D'accord, retournez voir ton bébé rose ! Ouais, d'accord. Ouais, Gérard, on y va, on y va. Euh, chut ! Ouais. Ouais, d'accord, euh... Couille de loup ! Ouais. Re-bonsoir. Bonsoir. Petit téton. Oui. Re-bonsoir. Raisin sec ! Raisin sec ! Oui ! Ouais. Oh, tu travailles ou quoi, là ? Excuse-moi, ça va ! Eh, Sandrine ! Dis le trableau ! T'es sourd ! C'est-à-dire GG. Moi, je kiffe bien sur tes pantoufles internes. Bon, alors... Celui-là... Il dégage ! Il dégage ! C'est Pedro qui a dit ça ! Bon, vous fermez ! Maintenant, vous allez vous la fermer ! Ok. Allez, hop ! Eh, Gérard ! De quoi ? Comment ? Tu voudrais être routier ? C'est qui ? Petit téton. Petit téton ? Ben, tu retournes voir Manu, il va... Il va... Gérard, elle te pose la question. Est-ce que t'aimerais redevenir routier ? Non. Pas pour l'instant. Pourquoi ? Parce que j'ai une bonne place. C'est tout. Alors, maintenant, comment s'organise... Comment s'organise un routier quand il s'ennuie ? Sandrine. Alors, Sandrine, vas-y, le trableau. Alors, la question de facilité, ce serait de dire, bon, la branlette, mais à mon avis, c'est pas ça. Donc, un routier, qu'est-ce qu'il va faire ? Il va chez Ypres. Je donne pas la marque de la station au service. Ouais. Il va acheter des cassettes de cul. Ou alors, des calendriers de cul, de la bouffe, et tout ça. C'est quoi, ça ? C'est la solvée. Et voilà. Merde en figure ! Putain, Manu, Manu, Manu ! Voilà, Gérard. J'essaie de gérer, ça y est. Non, mais si tu veux, on peut arrêter à 3h. Parce que c'est ce qu'on va faire, on va pas faire les deux débats. Parce que là... Non, mais moi, ça m'emmerde pas. C'est toi que ça emmerde. Parce que toi, pour l'instant, t'es en train de me foutre de la merde. Ça se voit que c'est le dernier débat de l'année. Parce que t'es pas avec ton bébé rose. Et moi, je suis pas... Moi, elle est là, mais on n'a pas fait de réveillon encore. Gérard, pour revenir au débat, il y a Chandler, le vrai, sur l'IRC, qui te demande qu'est-ce qu'il faut faire comme étude pour devenir routier. Justement, ça, c'est dans le deuxième débat. Donc, c'est pas maintenant. Gérard ? Oui ? C'est Sandrine, donc j'ai pas fini. Ouais, vas-y. Parle dans ton téléphone, Sandrine. Pardon ? Parle dans ton téléphone. Ouais, mais attends, attends, Sandrine. Toi, tu recommences pas ce que tu viens de faire. Parce que c'est toi qui t'amuses à... Non, c'est pas moi qui mets Goldorak. Non, non, tiens. Ah, tu vois, c'était pas moi. Tiens, tiens, tiens, tiens. C'est pas parce que je mets main là que je mets Goldorak. Parce que tu veux que je te le mette, Goldorak, tu vas avoir un autre son, regarde. Ah, ouais, ouais. Ça, c'est Goldorak. C'est mon Goldorak, c'est pas l'auditeur, là. Ouais, ouais, ouais. Tu vois ? Ouais, ouais, c'est ça, allez. Laisse-le. Toi, il y a une différence. Bon, allez. Bon, Gérard, c'est de la bombe, c'est un épisode. Gérard ! C'est Sandrine, j'ai pas fini, donc. Bon, alors, dépêche-toi. Le routier, s'il s'ennuie vraiment, à mon avis, ils peuvent même aller jouer aux flippers, style Sugar Ray, par exemple, les flippers qui marchent pas, ou la PlayStation. D'accord. Gérard, résin sec. Ouais. Alors, je voulais dire que, bon, les routiers, quand ils s'ennuient, ils peuvent appeler leur famille, hein. Ils sont pas tout seuls, ils doivent avoir des enfants, aussi, les routiers. Non ? Ben, à mon avis, s'ils sont sur la route, ils peuvent pas être chez eux, hein. Non, mais ils peuvent avoir un portable pour appeler de leur route. Petit téton ! Ben, ils écoutent la radio. Ah, d'accord, carrément, toi. Ben, écoute, c'est une réponse intelligente, hein. Ah, ouais, ben, je vois. Euh, couille de loup. Non, moi, je pense qu'il doit se taper une grosse. Gérard ! Ah, ta gueule. Oh ! Oh, vous gâlez un peu ! Ouais. Bon, allez, vas-y, cochon. Couille de loup ! Attends, la cochonne, attends, merde, toi ! C'est pas une cochonne, c'est une salope ! Oh ! Oh, tu calmes tes nerfs, toi, ou je te calme ? Ouais, c'est clair, arrêtez. Ben, heureusement que je suis pas marié avec lui ! Parlez pas comme ça aux chiennes, mec. Oh ! Gérard, on pourrait revenir un peu dans le débat avec les auditeurs, parce que c'est n'importe quoi. Ouais, mais c'est n'importe quoi, tu demanderais, t'es à l'hôte, là. Manu, on pourrait revenir dans le débat, parce que c'est n'importe quoi, là. Non ! Gérard, à propos du débat, reviens dans le débat, Gérard, s'il te plaît. Tu m'écoutes ? Oui, Rigo. Il y a Rainbow, le vrai arc-en-ciel, qui te demande si un routier a une prime pour Noël s'il travaille pour le réveillon. Ah, c'est une bonne question, ça. Voilà la question que je m'attendais. Mais ça, c'est dommage qu'il soit parti. Ah, ils peuvent plus approuver, là. Une prime, non, mais être payé double, oui. C'est faux. Attends, toi, tu fermes ta... ta gueule, hein ? Tu fermes ta gueule, et tu me fais du boulot correct, ok ? C'est tout ce qu'on te demande, Manu, merde. C'est tout ce que je te demande, avant que je te mette une claque dans... Dans le museau. Fais le con. Fais le con. Tu vas voir tout à l'heure. Tout à l'heure, tout à l'heure, tu vois ce qu'il reste de coca ? Allez, on y retourne, Gérard. On y va, on y va, on y va. Alors... Chut ! Ah, on n'est plus en antenne, c'est bon. Chut ! J'ai pas répondu, ouais. Allô, Gérard ? Oh, ta gueule, toi. Oh, putain, ferme-la, couillon. Ouais, Gégé, on va... Ta gueule, un peu. Voilà. Gégé, c'est chute ? Ouais. Moi, je voulais te dire que j'ai connu des routiers qui, quand ils s'emmerdaient, bah, tout simplement, ils classaient, ils avaient des collections de calendriers de cul. Allô, Gérard ? Ils classaient leurs calendriers de cul, bah, quand ils se faisaient chier, quoi, pour couper. Et je voulais savoir si tu confirmais. Oui. Gérard, t'as même pas écouté la question. Ouais, c'est pas poli, Gérard. Tu sais, j'ai très bien compris, et je vais te dire une chose. Vas-y, dis ta chose. Vas-y, dis une chose, Gérard. Moi, je peux vous dire une chose, que les routiers n'ont pas de calendriers de femmes à poil dans leurs camions. C'est faux ! Vous mentez tous ! Vous êtes tous des menteurs ! Vous êtes tous des menteurs ! C'est faux ! C'est faux ! C'est faux ! N'importe quoi ! C'est pas pareil ! Je suis là, je suis là, je suis là ! Qu'est-ce qu'il y a, Gégé ? Tu réponds à la question ? J'ai déjà répondu tout à l'heure, donc, voilà, quoi. Je t'ai déjà dit que, quand ils se faisaient chier, ils se tapaient des petites pignoles dans leur cabine. Non, ça dépend. S'ils sont à deux, ils s'en couillent. S'ils sont à deux, ils s'en couillent. S'ils sont à deux, ils s'en couillent. Troisième question. Allez, Gérard ! Allez ! Allez ! Attendez, Gérard est en train de dealer un truc. Mais non, il n'y a pas Tony ! Arrête tes conneries ! Il n'y a pas Tony ! Gérard, pour calmer le débat, il y a Scone sur l'IRC qui souhaite un joyeux Noël à tout le monde, quand même. C'est sympa. C'est bien, on te souhaite un joyeux Noël aussi, à toi. Moi, je t'emmerde, toi. Peut-on tricher sur les puces de paille d'un routier ? Ta gueule ! Tu peux m'écouter ? Peut-on quoi ? Peut-on tricher sur une puce de paille d'un routier ? Tout à fait. Alors, n'importe quoi. Oui, je pense. C'est possible. C'est possible, non ? Tu pirates ton salaire, et c'est bon, il n'y a pas de problème après. Tu gagnes le pognon que tu veux par mois. D'accord. Chut ! Moi, je pense qu'on ne peut pas tricher sur une puce de paille d'un routier. Tu peux préciser ? Vu les sommes qu'il y a, je crois qu'il n'y a pas de quoi tricher. De 1 franc, tu passeras à 2 francs. Oui, mais ça ne fait pas tricher. Couille de loup ! Oui, non, moi, je ne pense pas, parce qu'ils ne doivent pas avoir le QI assez élevé pour pouvoir piger comment on fait. De quoi ? Non, je dis, je ne crois pas qu'ils doivent être assez intelligents pour comprendre comment on fait pour falsifier la feuille. Non, mais attends. Peut-on tricher ? Peut-on tricher sur les puces de paille d'un routier ? Je vais te dire une chose, c'est que c'est le patron qui triche. Ce n'est pas le routier, d'accord ? C'est faux ! Toi, Manu, tu fermes ta gueule, maintenant. C'est faux ! Bon, Manu, tu dégages, tu pousses le camp à l'arrière. D'accord ! Non, non, non, non, non. Si, si, si, si, si, si. Non, mais attends. Non, mais c'est bon, attendez. Faites un débat correct, on verra après. Non, non, mais attends, pour l'instant, il est en train de me foutre de la merde. Euh, petit téton. Eh, tu viens chez moi, après, Gérard. Ta gueule ! Je peux parler ? Oui, ben, je ne sais pas du tout répondre. Non, mais, eh ! Oh ! Quoi, qu'est-ce qu'il y a, Gérard ? Oh, Max ! Eh, tu lui demandes qu'il me passe du bon boulot, là, pour la dernière de l'année, ou pas ? J'étais pas là, moi. Non, t'étais pas là. T'étais où, bâtard ? T'étais où ? J'ai arrêté ma cassette vidéo, là. Ouais, t'as arrêté ta cassette vidéo. Moi, de toute manière, on ne va pas durer jusqu'à 4h du matin. Eh, tu viens chez moi, après, Gérard. Bon. Qui c'est qui a donné tout ça aux auditeurs ? J'ai personne. J'ai personne à l'antenne. Non, non, non, non, non. C'est pas possible, là. Allez, hop. Hop, envoie-moi la musique. Attends, j'ai pas de disque, là, Gérard. Envoie ! Envoie ! Je m'en fous, je veux pas le savoir. Envoie la musique. Allez, hop. Envoie la musique. Bah, attends, je vais en trouver, alors. Je veux pas le savoir, tu te démerdes. Tu m'envoies un truc. Attends, attends, moi, j'ai des questions pour toi, pour calmer le débat, auxquelles tu peux répondre. Alors, il y a... Attends que je retrouve. Il y a Chandler, le vrai sur l'IRC, qui te demande combien représente le salaire d'un routier. Bah, justement, ça... On se calme, les gars, on se calme un peu. La question, on n'en est pas là. Non, mais réponds, réponds. La question, combien... Non, mais Gérard, à chaque fois que je te pose une question, tu dis, c'est pas la question, on viendra plus tard. Réponds tout de suite. Combien gagne un routier ? Voilà. Bon, un routier, à l'heure actuelle, si tu veux, gagne entre 10 000 et 15 000 francs. Donc, selon là où il s'en va. Oh là là ! Bon, toi, toi, tu vas me faire du bon boulot. Mais, Fildar... Attends, je cherche. Non, non, mais tu cherches, tu vas pas chercher longtemps, parce que sinon, sinon, le débat, il s'arrête et on va laisser Rousseau. Ouais, attends deux secondes, j'ai trouvé un truc super, là. Non, non, mais je m'en fous. On peut pas laisser Rousseau, il joue à la PlayStation. La disco ? Tu veux de la disco ? Bah, je m'en fous, tu mets ce que tu veux, mais moi, soit que Yannin, il fait du bon boulot. Non, mais si Manu faisait du bon boulot, il n'y aurait pas de problème. Soit qu'on fait du bon boulot, on continue. Soit que j'arrête maintenant. C'est simple. Gérard ? Et si j'arrête maintenant, on est combien ? Non, mais non, on n'arrête pas, là. On est presque 5 000, on est 4 852 moins 4. C'est très bien, j'aimerais bien qu'on booste bien. Les gars ! Et il y a quelqu'un, je me rappelle plus qui c'est, sur l'IRC, qui te demandait le salaire, ça fait combien en euros ? C'est pas la question. En euros, là, je peux pas trop lui répondre, parce que l'euro, il est à 6... Non, il est à 5,57. Non, 6,50. 6,50, oui, pardon. Il est à 6,50, ça devrait faire 6 500 euros. Oui. À quelque chose près. Il y a des milliers d'euros, de soi. Au lieu de dire que je sais pas et de bouffer ton gobelet quand Maxi parle, tu la fermes et tu me calmes les auditeurs. Avant que moi, je te calme. Bon, alors les gars, on refait de réunion. Gérard, qu'est-ce que t'as à dire ? Pour un cent... Eh oui, eh oui, filard, fais du bon boulot. Pour un cent. Oui. Rigaud, c'est bon. Mais l'autre, parce qu'il est pas avec son bébé rose, il fout de la merde. Il est en train de nous foutre de la merde. Non, c'est pas vrai, je te bosse bien. Mais si, mais si, mais si. Non, je fais du bon taf. Mais non, pour un cent, t'es en train de me faire de la merde, on est à la troisième question, et il y a 23 questions en tout. Eh ben, on a le temps jusqu'à 4 heures. Ouais, ben, tu crois que je vais durer jusqu'à 4 heures ? Ça m'étonnerait. Bah si. Je crois pas. Parce que c'était prévu qu'avec Maxi, ça se passait mal, t'es à 3 heures, et je pense que je vais arrêter à 3 heures. C'est bien, là, pourtant, parce que... Alors, on va s'écouter Moby Dick avec des prouts. Des prouts en plus, et on se retrouve aussitôt après. Pour ceux qui sont encore en plein réveillon, ben, bon réveillon de Noël. Ça m'étonnerait qu'il y en ait encore à 2 heures qui mangent la dinde. Ah bon ? T'inquiète pas, il y en a encore. On peut la manger jusqu'à quelle heure, la dinde ? Je sais pas. Il y a peut-être des mecs qui baisent. Manu ! T'éteins ton micro pour deux mots maintenant, et tu t'écrases. D'accord ! Je disais, il y a peut-être des mecs qui baisent ! La dinde ! Bon, tu t'écrases, c'est tout. D'accord ! Donc, je sais qu'il y en a... qui sont sur les routes. Ouais. Donc, prudence à eux. Ils font réveillon sur la route ? Non, peut-être pas. Non, non. Oui, Rigaud. Oui, je voulais juste dire qu'on a dépassé les 5000. Ouais. On est à 5123,4. Ouais. Donc, si tu peux les remercier. Ben, je remercie tous ceux qui sont... C'est pas assez. Tous ceux qui sont sur l'Internet. Donc, je vous souhaite un joyeux Noël. C'est pas assez, hein, 5000 fois. Et une bonne et heureuse année 99, parce que j'aurais pas l'occasion de... de vous avoir pour le réveillon. Ouais. Donc, ben... Voilà. Voilà ce que je peux vous dire. Donc, on récupère n'importe quoi. Eh, tu viens chez moi, après, Gérard ? Ah, ta gueule, à toi ! Oh là là ! Ouais, c'est moi. N'importe quoi. Ah, je vais passer à l'entrée, d'ailleurs, là, dans 5 minutes. Oh là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là là Et je baisse dans une demi-heure. Et moi, je t'emmerde. Je t'emmerde. Bon, allez, on se dépêche. Bon, n'importe quoi. Eh, tu viens chez moi, après, Gérard ? Bonsoir, Gégé ! Joyeux Noël à toi ! Chut ! Ouais, salut. Bon 14 juillet à tous. Ouais, c'est ça. Joyeux Pâques. Couille de loup. Ouais, salut. Petit téton. Salut. Raisin sec. Non, excuse-moi, il est parti. On n'a que Jean-Pul, à la place. Non, mais alors, attends. Manu ! Ouais ? Un conseil que je te donne. Ouais. Tu vois, tu fais une chose, tu me prends, sur les 12 lignes qui sortent. Ce que j'ai fait, c'est un nouveau. Non, non, non, non, non, non. Bah si, je suis désolé. Tu prends sur les deux lignes. Alors, c'est comment ? Jean-Pul. Jean-Pul. Ouais, mais attends. Jean-Pul. Ouais. Non, Jean-Pul. Bon, alors, tu te démerdes, tu me fais une fiche propre. Ouais, une fiche propre, Gérard. Quand même. Alors, la question, ben, peut-on tricher sur les fiches de pays d'un routier ? Donc, je pense que vous avez réfléchi. Ouais. Donc, ben... Oui ? Oui, tu m'as oublié. Ben, je t'écoute. Rebonsoir, Gérard. Ben, rebonsoir à toi. Donc, allez-y, posez... Ouais, c'est chute. Ouais, chute. Ouais, moi, ce que je voulais dire, c'était que si les routiers, il fallait qu'ils trafiquent leurs fiches de pays, il faudrait déjà qu'ils sachent compter. Non, mais attends. Attends, attends. Attends, chute. Chute, chute, chute, chute. Chute. Chute. Écoute-moi bien. Oui, chute. Peut-on tricher sur les fiches de pays d'un routier ? Oui, ben, justement. S'il faut qu'ils trichent... Attends, celui qui rentre derrière, arrête ! Jean-Pul. Jean-Pul. Il faudrait qu'ils sachent compter. Et je pense, bon, je me permets d'émettre un léger doute, quoi, tu vois. Mais je croyais que ça se faisait par ordinateur, maintenant, les fiches de paye. Ouais, mais de toute manière, il faut se dire une chose, qu'il y a certains patrons qui trichent quand même sur certaines fiches de paye. Ouais, mais sur les leurs, pas sur celles de leurs employés, si. Jean, à peine. Ils retirent de l'argent sur leurs payes, alors ? Bon, alors. Mais comment ça se passe ? Un routier, c'est payé au kilomètre ? Comment ? Non, c'est pas payé au kilomètre, en fin de compte. Comme une personne... Oh, t'as de jolle ! D'accord, c'est... Maintenant, tu m'emmerdes, toi. Ouais. Voilà. Donc, tu disais, GG ? Non, mais, en fin de compte, c'est pas payé... Au kilomètre ? Au kilomètre, c'est payé comme toi et moi. Non, mais c'est payé comme toi et moi. D'accord. Par exemple, le mec, il va rester... De nuit, ça va être payé un peu plus cher. Et ainsi de suite. D'accord. En fait, il doit faire... Il doit faire 39 heures par semaine, comme un employé... Ah, non, non, non ! Non, c'est pas 39 heures ? Non, non, parce qu'il faut se dire une chose, que les routiers, à l'heure actuelle, passent plus de temps sur les routes que chez eux. Donc, il faut bien se dire... Il faut bien se mettre à la place d'un routier. Je y ai été. Donc, je peux savoir ce que c'est. D'accord. Et je vais te dire une chose, que... Bon, j'ai pas fait de la route. Ouais. Mais ceux qui font de la route ne sont pas tout le temps là. Ah, d'accord. Gérard ? Oui, Rigaud ? Il y a Sardine de Marseille qui te demande des routiers abandonnés par leur camion sur les aires de repos de l'autoroute. Euh... Des routiers abandonnés... Des routiers qui font du stop pour rentrer chez eux les week-ends, oui. Mais des routiers abandonnés, non. Jamais. Ouais. Gégé ? Oui ? Oui, je voulais savoir... On m'a dit qu'être routier, c'était un métier qui nécessitait de la sueur. On disait que c'était un métier dur, qu'il fallait transpirer et tout. Et je voulais savoir si c'est pour ça que, dès tout jeune, tu avais trouvé ta vocation dans ce milieu-là. C'est clair. Euh... Ouais. Laquelle ? Laquelle ? Laquelle ? Laquelle ? Oh ! Tu te tais, toi ! Ouais, vas-y, j'ai répondu. Un routier. Donc, c'est toi qui viens de poser la question. C'est comme... C'est chute, c'est chute. C'est chute. Ouais. Donc, ta question, tu peux me la reposer, s'il te plaît ? Ouais, donc, je te disais, il paraît qu'être routier, c'est un métier qui demande de la sueur et de la transpiration. Et je voulais savoir si c'est ça qui, dès ton enfance, t'avais quand même donné ta vocation pour savoir ce que t'allais faire plus tard. Alors, moi, je vais te dire une chose. Qu'un routier transpire beaucoup, ça, c'est vrai. Parce qu'il faut se dire une chose, que certains routiers sont obligés de décharger. Pas tous. C'est clair. Mais certains. Ouais. Donc, d'autres, quand ils arrivent, ils sont dans la cabine, ils dorment et... Oh là là ! Celui-là, il va se faire virer une fille, non ? Manu ! Non, mais continue, Gégé, continue. Manu, tu fais ton boulot correct ou pas ? Tu fais ton boulot correctement ou pas du tout ? Ou tu pires ? Ah, correctement, correctement. Ou tu retournes voir ton bébé rose ? Ouais. Gégé, t'en étais au problème de décharger. Donc, t'as certains routiers qui sont obligés de vider leur camion, d'autres, non. Pourquoi ? Parce que quand ils arrivent, ils se mettent hackés, ils sont dans leur cabine et ils dorment. Ouais, mais pour... Oh là là ! Pour le problème de la douche, Gégé, ils font comment, les routiers ? Parce qu'il y a un lit à l'arrière du camion, mais il n'y a pas de douche. Non, mais ça... Ça, pour les douches et tout ça, ils s'arrêtent dans... Bon ! Je réponds à Chut. Ça, pour cette histoire de se laver, ils peuvent s'arrêter dans des aires de repos. Il y a des douches, spécialement, qui sont dans les aires de repos, qui peuvent se laver et tout. Ouais, mais ils ne se lavent pas souvent, du coup. Si, si, si, si, si. Et je voulais savoir si, toi, pourquoi, depuis que t'avais arrêté le métier, t'avais quand même gardé des manières de routier, quoi ? Même si t'es plus dans le métier, je veux dire, tu transpires encore beaucoup et tu ne te laves pas souvent et tu décharges pas mal. Non, non, mais attends, je transpire beaucoup parce que là, il n'y a même plus de ventilation dans les studios, je ne sais pas pourquoi. Ils ont déménagé la ventile, hein. Ouais, mais là, ça devient inadmissible. Euh... Gérard ? Ouais. Gérard, il y a le vrai canard vissé sur l'IRC qui te demande pourquoi les routiers pissent sur le long des routes et pas sur les aires de repos. Attends, attends. Ça, c'est complètement faux. Euh... Ouais. Non, non, non, non, non, non. Chute, tu t'es, chute, tu t'es. C'est une anecdote. Non, non, mais je réponds. Je peux prévenir tout de suite, là. Je réponds à canard vissé que c'est faux qu'il n'y ait aucun routier qui s'arrête sur les bandes d'arrêt d'urgence. Non, non, non, non, non. Les bandes d'arrêt d'urgence, ça fait pourquoi ? Pour les arrêts d'urgence. Alors, vas-y, vas-y. Le mec, il n'était pas arrêté sur la bande d'arrêt d'urgence, il était garé en triple fil sur l'autoroute et donc, il y pissait. C'est ça. Tu ne prendras pas les... Tu ne prends pas les gens pour des cons, toi ? Non, mais c'est réel. Non, tu les laisses. C'est réel. Que transporte un routier en fin de journée ? Que transporte un routier en fin de journée ? Que transporte un routier en fin de journée ? Que transporte un routier en fin de journée ? Oui, oui. Gérard, tu m'excites avec tes moustaches. Ta gueule ! Tu m'excites avec tes moustaches. C'est n'importe quoi, Gégé, je vais répondre. Gérard, tu m'excites avec tes moustaches. Vas-y, jouis. Oui, oui, oui, Gérard. Gégé. Chute, chute, chute. Vas-y. Je voulais te dire qu'un routier, après avoir déchargé toute la journée, à mon avis, à la fin de la journée, il est vide, quoi. Oui, mais... Il t'enrôde un sec. Ah, attends, là. Pour toi, il est vide. Ah oui, il est vide. Il t'enrôde un sec. Moi, je pense qu'à mon avis, il repart recharger pour aller vider quelque part d'autre. Ah non, il faut qu'il s'arrête, quand même. Non, non, mais attends. Tu ne peux pas décharger si tu ne récupères pas au moins un quart d'heure ou une demi-heure entre deux décharges. Non, non, mais attends, ce n'est pas un quart d'heure ou une demi-heure. Tu t'épuies si tu ne fais pas une petite pause. Ce n'est pas un quart d'heure. Une demi-heure qui prend, c'est deux heures de repos maximum. Tu vois, donc il faut bien se reposer entre deux décharges. Maximum. OK. OK. Alors, n'importe quoi ? Oui, à part transporter des dindons et des cachalots, je ne vois pas ce qui... Bon, alors, n'importe quoi, c'est terminé. Ce n'est pas méchant. Dindons et cachalots, moi, je t'emmerde. Ce n'est pas pour toi, Gégé. Moi, je t'emmerde. Mais je te kiffe. Je t'emmerde. Hop, terminé pour lui. Bon, allez, hop, au standard. Hop. Non, non, mais c'est bon pour lui. Allez, chute. Standard. C'est pas chute, hein. Merci, c'est chute qui a dit ça. Oh, gamin. Bon, Gégé, c'est bon. Voilà. Voilà. Lui, c'est terminé. Au revoir. Au revoir. Alors, chute. Ah, ben non, je viens de te répondre, Gégé. Je viens de te répondre, mon Gégé. Ah, tu viens de répondre ? Ah, oui, oui. Coup de loup. Tu répètes la question, s'il te plaît ? Allez. Alors, c'est la dernière fois que je répète la question. Que transporte un routier en fin de journée ? Gérard ? Oui. En attendant, il y a un rainbow, le vacancier sur l'IRC, qui te demande quand tu étais routier, t'as été attaqué par le gang des chasseurs de routiers sur l'autoroute. Non. Des mecs qui volent les cargaisons. Ouais. Ça, c'est vrai, ça s'est produit en Russie, je crois. Il y a un routier qui s'est fait... qui s'est fait agresser. Ils lui ont piqué carrément son camion, plus la cargaison, carrément. Ouais, ouais, ouais. Ça coûte cher, un camion ? Un camion, je peux te dire une chose, c'est dommage qu'on n'aille pas, tous là, les routiers, mais un camion, ça vaut plus de 150 000 francs. C'est vrai ? Carrément ? 150 000 francs ? 150 000, hein. Ah bah, ça va. C'est pas trop cher, hein. Ouais, bah, attends, ça dépend, ça dépend ce que tu prends comme camion, hein. Donc, euh... Oui, Rigo ? Excuse-moi, j'avais éteint mon micro. Sinon, il y a Chantelor qui te demande comment fait un routier, puisque tu disais qu'ils s'arrêtent pas... ils s'arrêtent qu'aux aires de repos pour faire leurs besoins, mais comment ils font quand ils ont la diarrhée et qu'ils sont dans leur camion ? Ben, ils peuvent s'arrêter, mais dès qu'ils trouvent une aire de repos, hein. Ben, ça, justement, c'est des questions... Elles vont venir après, les questions, j'ai l'impression qu'internet, ils ont des questions... Non, non, non, non, non, non, non. Attends, euh... Fildar, c'est moi qui... C'est mes débats, donc c'est moi qui commande. Ok. Donc, euh... Là, pour te dire une chose, en fin de compte, on va... Oh ! Oh, t'es pas dans un salon de thé, là ? Eh ! Oh, on n'est pas dans un salon de coiffure, c'est papa-maman, là, hein ! Bon, on s'affirme quand je parle un peu. Alors ? J'ai fermé la porte, alors, ouais. Oh, ça veut dire quoi, là ? Vous jettez dehors et c'est tout ? Ok. Vous allez jeter dehors ? Ouais, tu vas voir, tout à l'heure, toi, je vais te kiffer, moi. Je vais te mettre une bombe dans... Moi, je vais te mettre une bombe, tu vas voir. Une bombe de routier, tu vas voir ce que ça donne. Bon, ouais. Alors ? Je vais te faire une petite marque, mais bon... Fais gaffe ! Alors, on était où, nous ? On parlait de quoi, là ? Euh... Des questions, si on est... Ah, ouais. Ouais, donc, les questions, là, sur Internet, donc, je vous en supplie, répondez aux premières questions, parce que le deuxième... Non, ils répondent pas, ils t'en posent. Bah, ouais, mais c'est la suite. Ça fera le deuxième. Tu vois, il y a Sardine de Marseille qui te demande si t'as déjà posé pour un calendrier de routier. Mais non, mais ça... Ça, là-dessus, non. Moi, je voudrais... Combien qu'on est, maintenant, sur Internet ? Allez. 5288. Oh, ça baissait, là ! Non, non, non. Non, non, non. Non, non, non. 5144, on est. Ah, d'accord. 5200. Ah, d'accord. Euh... Excusez-moi. Ouais ? À la place de n'importe quoi, on accueille Billy. Allô ? Allô, quoi ? Salut, Billy. Salut, Billy. Salut, Billy. Salut, Billy. Salut, Billy. Alors, euh... Bon, la question, que transporte un routier en fin de journée, Billy ? Tu peux répéter la question ? Merde ! Ah, ça va répondre. Non, non, t'es en antenne, là, connard ! Bon, laissez parler le gamin, là. Allez, le gamin, là, accouche. Ouais, moi, je pense qu'il se transporte des cadeaux pour aider le Père Noël. Hein ? Tu vois pas ? Non, mon ami, je pense pas. Non, je pense que le Père Noël, il va se transporter des cadeaux, et voilà. Non, mais ça va, le mec, avec son klaxon de mariage, tranquille ? Ça, c'est un klaxon de routier, ça, hein ? Attends, Billy, tu dégages. Ah, Gérard, Gérard, Gérard ! Au revoir, au revoir, au revoir, au revoir, au revoir ! Allez, euh... Coup de loup. Tu peux répéter la question ? Non. Mais Gérard, Gérard, c'est pas pour toi ! Gérard, attendez, parce que Billy a foutu la merde. Oh là là, oh là là, oh là là, Manu ! Gérard ? Manu ! Gérard, calme-toi, il y a Scone sur l'IRC qui te demande si les conducteurs de J9 font partie des routiers. Alors, J9, c'est des véhicules légers. T'as une tartine ? Non, mais, euh, ça y est, ça... Merci, Cathy. Tu veux une tartine, Gégé ? Tu veux une tartine ou pas ? T'as l'air, je t'en mets tout une tartine, moi ! Tu vas l'avaler ! Ouais, deux, trois tartines, ce serait bien. Tu peux répéter la question ? Oh là là, oh, putain, vous commencez à me casser les couilles, hein ? Allez, on enchaîne. Billy, il a mis la merde, alors on n'a pas entendu. Non, couille de loup ! Ouais, ben, je pense qu'il transporte... d'autres trucs. Tu peux préciser ? Ben, je sais pas, moi, il a déchargé, après, il remballe d'autres machins, et puis, bah, il continue sa tournée. Ah, ben, voilà, enfin ! Ah, ben, alors ! Voilà, enfin, une bonne question ! Bon, je pense qu'on a une bonne réponse, plutôt, ouais. Ben, ouais ! Ben, voilà ce que j'attendais ! Petit piéton ! Petit piéton ! Gérard, t'es beau ! Ta gueule ! Il peut tout transporter ! Allô ? Ben, je sais pas, moi, n'importe quoi ! Tu te reviens un petit peu ? Petit piéton, là ? Ouais. C'est quoi, ça ? C'est un gros piéton ! Allez, dégage-la, allez ! Allez, hop ! Hop, hop, hop, hop, hop ! Euh, Jean-Pulle ! C'est beau ! Jean-Pulle ! Ouais, je suis là, je suis là, je suis là ! Eh ben, je sais pas, c'est pas mal ! Oh, non ! Comme un camion ! Allô ? Oh, là, là, là, là, là, là ! Bon, allez, moi, j'attaque le deuxième, hein ! Hop, terminé ! Attends, j'ai un... Ouais, Rigo ! Il y a... Attends, j'ai un... Voilà, c'est Oxyd sur l'IA3. Qui te demande par où rentre le Père Noël dans les camions, vu qu'il n'y a pas de cheminée ? Le pot, le pot. Par, euh... Au déchagement. Par les portes. Ah, ok. Voilà. Euh, Puldar ! J'aimerais répondre. Puldar ! Il est parti chercher sa tartine. Sinon, Gérard, il y a Turcontine sur l'IA3 qui te demande pourquoi tous les routiers sont-ils vulgaires ? Euh, pourquoi que les routiers sont tous vulgaires, t'en as certains, mais pas tous. Donc, euh... Oui, mais pourquoi ? Non, non. Non, non, il y a... Tous les routiers ne sont pas vulgaires, ça, c'est faux. Ouais, mais pourquoi ils sont vulgaires ? Non, non, non, non, non, non. C'est faux ! Non, non, il y a... Non, mais tu dis pas non quand je te demande pourquoi. Pourquoi ils sont vulgaires ? Voilà. En fin de compte, euh... On n'a jamais été vulgaires vis-à-vis des gens. Non, mais est-ce que vous êtes grossier, alors ? Euh... C'est quoi ? Est-ce que vous êtes grossier ? Euh... Dans quel sens que tu veux... Non, parce qu'il y a aussi le pape, le vrai pape, sur l'IA3, qui me dit que... Un routier, quand tu le regardes, il fait une sale gueule, toujours. Au feu rouge ou sans être en route. Ouais, non, mais attends. On a toujours l'impression qu'un routier, c'est malheureux. Bah ouais. C'est vrai ou pas ? Bah, pourquoi ? Bah, bien sûr, ils sont malheureux. Pourquoi ? Parce qu'ils passent trop de temps sur les routes. Non, mais c'est leur métier. Bah oui, mais... De toute manière, tout le monde a... Comme je l'ai dit, euh... Dans... Dans un best-of, dans ton livre. Non, non, dans un best-of, chacun... Chacun fait... Bois midi à sa porte. Le routier, il a choisi de faire... Faire ça, c'est son boulot. Donc... Faux ! Oh, putain, mais t'as gueule à toi ! J'ai rien dit ? Donc, euh... Les routiers... Ouais. Ont choisi leur boulot, c'est leur... C'est leur métier. Maintenant, s'ils veulent pas faire ça, bah... Ils le font parce qu'ils peuvent rien faire d'autre. Ouais, mais attends. Un routier, s'il choisit, c'est sa vocation. S'il choisit de faire ça, c'est sa vocation. Ouais, donc... Un routier, pour moi, c'est quelqu'un de... Qui est né pour faire de la route. Qui est né pour faire de la route, dans un sens, si tu veux, oui. Mais, en fin de compte, il peut très bien changer, après. Si ça, il peut plus, il peut changer. Ah, il peut faire quoi, des chemins ? Non, mais... Il peut... Il peut changer. Il peut... Il peut se retrouver employé de bureau ou animateur radio. Ah, oui. Comme moi. Ah, oui. Voilà. T'as gueule. Donc, on s'écoute. Euh... Oh, c'est bon. Euh... Oui, alors... Il y a Nassim qui te demande pourquoi tous les routiers ont-ils une moustache ? Si oui, est-ce que cela leur sert d'airbag ? Non. Alors, tous les routiers... Il y a des routiers qui ont des moustaches, mais ça leur sert pas d'airbag pour... Quand ils ont un accident. Donc, voilà la réponse. Sinon, il y a Sardine sur l'IRC qui dit que comme tous les routiers sont des pédés, est-ce que les lesbiennes ont le droit d'être routières ? Ah... Une bonne question. Alors, tous les routiers ne sont pas des pédés. Déjà, une pour commencer. Non. Non. Ça, c'est faux. C'est faux. C'est faux, c'est faux, c'est faux. Voilà, c'est tout. Euh... On s'écoute. Ah, tu m'as posé une question avant quand même qu'il réfléchisse. Alors, que pensez-vous ? Pensez-vous que les routiers sont des vieux cochons ? Non, monsieur. Allez, on s'écoute. Non, non, non. Ah, bah, non, mais vas-y. Ben, couche. Mais ça, mais ton boulot, au lieu de bouffer, là, il devrait être fait. Il devrait être fait. Les numéros de téléphone, l'Internet... Donc, alors, vous pouvez toujours nous appeler au 0870 5000 et 0803 75 000. Non, non, non. C'est pas ça du tout. Quoi ? Dis les numéros correctement. On les dit pas. Attends, je les dis pas. Je les dis pas, abruti. Non, mais les dis pas. Tu dis n'importe quoi. C'est pas ça, le bon numéro. Dis le bon numéro. Quoi ? C'est 0870 5000 et 0803 75 000 ? Non, 0803 08 5000. Eh ben, alors ? Eh ben, t'as qu'à les annoncer, toi. Ben, tu me donnes ta paye. Et Rigo vous attend. Et Rigo, tu peux nous dire combien qu'on est, là ? Ouais, dis-le, dis-le. Ça monte, ça monte. 5 432. Ouais. Aïe, aïe, aïe. J'ai l'impression qu'avant 4 heures du matin, on va aller à 10 000. C'est faux ! Oh, arrête. 4 heures, j'ai fait une barbe, ça va être faux. Alors, on s'écoute les petits poussins avec des verres dans la raie et on se retrouve tout de suite après. Vous venez d'écouter les petits poussins avec... Des verrues. Des verrues dans la raie. Et vous êtes toujours sur pleine radio. Il est 2h19 du matin. Donc, joyeux Noël à tous. Malgré qu'on ne l'a pas assez annoncé. Ah oui, peut-être que je ne l'ai pas assez dit. J'ai dit au moins 200 fois déjà. Ah ouais, mais alors, c'est normal. Donc, ouais, tu voulais dire quoi ? Je voulais dire qu'à la place de Billy, que t'as dégagé sauvagement, on accueille Marcel et c'est un routier. Ah, enfin ! Marcel, bonsoir. D'accord. Salut, Marcel. Bonsoir, c'est bon. Salut, Marcel. Salut, bien. Le 27 ? Oui. Ok. Je t'appelle. Eh, qui c'est qui regarde les textes avoués, là ? Non, mais tu le calmes, là, ou quoi ? J'ai rien à calmer, moi. Non, mais ça va pas. Alors, la question... Ouais. Gérard. Allez, hop. Oh là là ! 5 630,2. Et je salue Ice-T. Ok. Eh ben, on salue tous les gens. Eh, bousclez un peu, là. Il en manque 500, là. On salue tous les gens ? Ok. Alors, on salue... Non, mais... On salue Seb, on salue Tony. On salue... Non, il n'est pas là, il est à Lille. C'est marrant, on le salue quand même. On salue Acta, on salue Canard WC, Chamicha, Chand, Chocapic, Lisenne, Geoffroy, Ouls, Ice-T, je viens de le citer, Le Pape, Malcolm X, Le Vrai, Ressuscité, Miss Lover, Nassim, No Live, Paradox, Sardine, Scorpion, Shun, Symbol, Thanatos, Ben non, c'est... Ça sert à rien, mais bon, c'est pas grave. Titos, Turpentine, Zirt, Keneda, Steph, Redox, Olio, Acide, Inc. Ça y est, c'est bon. C'est bon, Régo. C'est bon, ça y est. Ouais. C'est Marcel. Il y a quelque chose que je comprends pas. Ouais, vas-y. Sur mon ordinateur, je tape www.fr, mais je n'arrive pas à aller sur le Channel Fun Radio. Alors, le Channel Fun Radio, c'est www.frfunradio. D'accord ? Merci, merci. Ok. D'accord. Alors, en de bon entendeur, salut, si tu veux pas participer au débat. Mais bien sûr que si, mais c'était juste pour me renseigner. Bah, et t'es qui, toi ? Je suis Marcel. Bon, bah alors... Alors, pensez-vous que les routiers sont de vieux cochons ? On va demander, ben... Ouais, bah écoute, moi, je suis tout à fait d'accord pour dire que c'est des gros pervers. Ouais. Je crois qu'on peut pas nier quand même que ça se tignole dans les cabines. Et tout à l'heure, il y avait le pape, je crois, sur Internet qui demandait pourquoi il faisait la grimace. Bah, tout simplement parce qu'ils sont concentrés sur leur banlette, c'est tout. D'accord. Ok. Euh... Couille de loup ? Ouais, moi, je pense qu'il y en a plein, ouais. Il faut les voir, ils roulent toute la journée, alors forcément... Non, mais tu peux préciser le point de ta pensée ? Oui. La façon de ma pensée, oui, c'est qu'il y en a. Jérôme ? Euh... Oui, Rigo ? Ouais, il y a Sardine de Marseille sur l'IRC qui te demande si tu peux faire une pause parce qu'il voudrait aller aux toilettes et qu'il a pas la radio aux toilettes. Copyright, copyright. Non, non, euh... Non, non. Pause caca. Non, non, il y a pas de pause. C'est plus de pause, là. Là, la prochaine pause, c'est pas avant 3h. Euh... Non, 2h30, 3h moins le quart, à peu près. Et c'était de qui, le copyright ? Oh, mec, je sais pas, je comprends pas. Bon, ok. C'est pas grave. Euh... Ouais. Euh... Petit Tétron ? Ouais, moi, je trouve que c'est les plus délicieux et à mon avis, ils ont des photos pernos dans leur camion. Ouais. Non, moi, je te démends. Je démends ! Non, Gégé, Gégé. C'est qui ? C'est Mortel. Ouais, bah, pour l'instant, c'est pas toi que je m'adresse. Euh... J'en pulle. J'en pulle une fois, j'en pulle deux fois, j'en pulle trois fois. Au revoir ! Il est là, Gérard. Il est là, si tu croyais. Non, non, si tu croyais pas, tu l'entendrais. Eh, Gérard, crie pas, tu fais mal aux oreilles. Ouais, bah, si tu te fais mal aux oreilles, t'es avec un wetman ? Non, non, non. Non ? T'es avec la main de ma soeur dans la chouette dans ce web ? Ouais... Tu t'en t'en pulls et on cule ta soeur ? Ok, le comique. Alors, j'en pulle. Euh... Bah, je suis d'accord. D'accord. Alors, toi, t'es d'accord sur la question ? C'est tout ce que t'as à me dire ? Euh... Bah, ouais, je suis d'accord avec toi. Ah, bah, c'est bien. Ah, bah, Sardine. C'est bien, si t'es d'accord. Sardine. Sardine. Ouais, Sardine. Ouais, ça fait un moment que je gueule parce que j'étais pas à l'antenne. Ouais. Euh... Ouais, je pense que oui. Je pense que ce sont des gros dégueulasses et qu'ils mettent plein de poupées espagnoles dans leur... Je sais de quoi je parle. Euh... Tu peux préciser le point que t'as pensé ? Bah... En tant qu'agent de l'OT, quand ils prennent leur retrait chez eux, ils mettent des poupées espagnoles sur leur armoire. Et... Voilà. Alors, Marcel ? D'ailleurs, je vais faire aller CTX avec la simile. Il y a tout le monde qui te salue, hein. Non, mais... Tu réponds à la question, s'il te plaît. Bah, en fait... Ouais, bon... Faut pas dire que les routiers sont des pervers. Bon, moi, j'ai quelques magazines. Mais, euh... Ça va pas à plus de 400 pignoles par jour. Donc, voilà, quand même, hein. Au revoir. Le 28, sinon. Ouais, non, mais... Je t'écoute. Il y en a un tout à l'heure... Il y en a un tout à l'heure qui va se prendre une bouteille de coca, ça va lui faire tout drôle. Il va prendre facilement dans la gueule, ouais. Hein ? J'aime pas, Gégé. J'aime pas, Fildar. Gérard, est-ce que t'as mangé le pâté qu'un auditeur t'a offert, là ? Mais qu'est-ce que ça peut te foutre, à toi ? Non, non, parce que j'ai pas... Combien gagne un routier en euros ? N'importe quoi ! Combien gagne un routier en euros ? N'importe quoi ! Manu ! C'est la dernière fois que je te demande de faire ton boulot ! Ok. Sinon, tu sais ce que tu fais. Tu prends tes clics et tes claques, et tu vas avoir ton bébé rose. D'accord. Ok ? Ok. Et on va mettre Sandi à ta place au standard. Ok, mais je commence à ronger, alors. Ouais. Ouais, tu peux, tu peux. C'est de la place, c'est de la place. Tu peux, tu peux. Tu peux commencer à ronger, si ça va pas. C'est de la place, Manu. Non, non, mais tu peux. Attends, attends, merde, le Sandi, d'accord ? C'est de la place, Manu. Ouais, bah attends, toi, tu dégages. Le boulot mystère. Allez, hop. C'est quoi ? Faut vider le studio, là, si t'as bien le rang. Ouais, bah, tu peux commencer à ronger. Bah ouais. Ouais, bah, t'inquiète pas. Tu peux commencer, là. C'est la table. Manu, Manu, Manu. Eh, Manu. Ouais. Tu peux commencer à ronger, je crois. Je suis en train, je suis en train. Tu vas dégager vite fait, bien fait. Enlevez la table dans le couloir, vite. Tu vas vite fait dégager. Ouais, ouais. J'ai l'impression. Ouais. Vite fait, vite fait, hein. Vite, vite, vite. Vite, parce qu'on va mettre Sandi, là. Non, non. Fais de la place, alors. Combien gagne un euro ? Un euro en routier. Combien gagne un routier en euro ? Sandrine. Sandrine. Je sais pas très bien, en fait. Déjà, je connais pas très, très bien ton salaire de routier, donc en euro, je peux pas trop convertir, en fait. Ouais. Alors, je vais te dire une chose, que l'euro, il est à 6,50. Ouais. D'accord ? C'est faux. Oh là là. 6,50. C'est pas moi qui dis ça. Arrête d'halluciner un peu. Toi, tu commences à me les gonfler. Ouais. Donc, Sandrine ? 6,50, tu dis mieux. Alors, le euro, il est à 6,50, hein, Gérard. Oui, il y a Titeuf. Il y a Titeuf sur l'IRC qui te demande dans quel pays il paye en euros. Ah ouais ? Non, mais ça va, toi, si t'as envie de bailler. Non, tu te bailles pas, je fais ah oui. Non, mais attends, parce que j'ai pas trop compris la question. Rigo, tu peux me la... C'est bizarre que Gérard comprenne pas les questions. On te demande. Dans quel pays on paye en euros ? Ben, pour l'instant, l'euro, d'une part... Bon, toi, tu... Tu t'écrases ? D'accord. Ok. Hein ? Pour l'instant, l'euro, il sort qu'à partir de... Ben, nulle part. De 6 jours. Non, putain que... Toi, t'éteins ton micro, je te dis que... Je te dis que tu prends tes clics, etc., que tu passes, tu vas voir ton bébé rose. Ok. Et tu nous fais pas fier. Hein ? Hein ? Donc, l'euro sort pas avant 6 jours. En fait, au début de l'année. Il sort au début de l'année 99. Ouais. C'est-à-dire, pour le premier janvier 99, ce qui va se produire, c'est qu'on va avoir des pièces euros, mais on n'aura pas encore les billets. Parce que les billets sont... Ta gueule ! Merci. Donc, je disais, donc, ça va être en pièces. Les billets seront pas avant 2001, voire 2002. Donc, pour l'instant, ça sera uniquement qu'en pièces. D'accord. En plus, il y a Canada qui dit que c'est faux. Ah bon ? Ben... N'importe quoi ! Eh ben, dans ces cas-là, si c'est faux, qu'elle écoute bien les informations, parce qu'ils arrêtent pas d'en parler, que maintenant, c'est dans moins de 6 jours qu'on a l'euro en pièces. Les billets sont pas avant l'an 2000 ou 2002. Bon, enfin. Bref. Passons. Donc, Marcel. Ouais. Euh... J'étais en antenne. J'étais là, et Manu m'ont calmé, ou je sais pas qui c'était. Non, mais pour l'instant, tu réponds à la question. J'ai pas très bien entendu la question. Justement. Tu réponds... C'est bien que le salaire d'un routier en euros, c'est ça ? Voilà. Ok. Alors, ouais, ça doit être... Ça doit tourner aux alentours de 15, 20 euros, un truc comme ça. Voilà, Michel. Alors, c'est tout à deux. Il y en a un qui entend le calmer, c'est Manu, parce que... Pour l'instant, il est en train de... Il est en train de me foutre du boulot de merde ! Qu'est-ce qu'il fait, Manu ? Bon, Manu... Non, il disait les routes viraux rouges, les heures à éviter, tout ça, pour les bouchons. Ça, c'est du journal en plein débat, ça. Ça doit être intéressant. Non, mais... À part ça, après... Après, il va dire... Ah ouais, mais moi, j'ai fait du bon boulot ! C'est faux. Alors que c'est faux. Pour l'instant, il me fait de la merde. Non, c'est bien, moi, je trouve. Ouais, et qui c'est qui met sa musique, là ? Bah, je sais pas, j'ai pas d'auditeur à l'antenne. Ah non, t'as pas d'auditeur. Ah non, regarde. J'ai pas d'auditeur. Euh, Jean-Pul ! C'est moi, c'est moi ! Jean-Pul ! Y a personne, là. Non, c'est Manu. Regarde, là, c'est là. Regarde. C'est bien Gérard. C'est bien Manu. Il y avait encore de la musique. Non, y a pas de musique. C'est faux. Ils sont tous en attente, là. C'est faux. Tu vois ? Alors, tu me les mets tous en l'air et tu le suites. Allez, Manu ! Mais pas des auditeurs, la musique. Allez, Manu ! Je suis perdu. Jean-Pul ! Oui, c'est moi. Donc, c'est à toi. Euh... - Je vais lui donner un coup de Tokyo Rock en revanche. - 4 euros ? - Oui, mais c'est peu. - A mon avis, ça m'étonnerait. - Ah non ! - Eh, attends, je veux dire... - J'en pull. - Toujours le même rang au gueule. - J'en pull. - Oui, ça sûrement. - Je veux dire une chose, ça m'étonnerait qu'un routier gagne 4 euros, parce que pour 4 euros, il travaillera pour un mec. Bon. Allez, hop. Qu'est-ce qu'il y a, Gérard ? - Tu vas où, là ? - C'est de la faute de fil d'or, encore. - Mais non, justement, reviens. - Gérard ! - Oh là là. - Gérard, attends. Bon, Manu. - Ouais ? - C'est toi qui as foutu la merde, tu vas le chercher. - Ah, ça va pas, non ? - Attends, tu vas le chercher, toi tu combles. Ouais, parce que là, regarde, maintenant, on est... Bon, les auditeurs, vous patientez, parce que là, en fait, Gérard est sorti du studio, je sais pas pourquoi. Attendez, alors, voilà. Non. Assis. Assis, il y a Max et il y a Gérard. Allez, Gérard, assis-toi. Mais tu le calmes. J'ai rien fait, là, Gérard. Non, non, tu ne fais rien, tu ne fais même pas ton boulot. - C'est terminé, toi. - Non, mais c'est bon, je vais le calmer. Je vais le calmer deux secondes. - Non, non, non. - Manu. Tu me demandes de le calmer, tu me demandes pas de le zapper. - Non, non, mais ouais, est-ce qu'on continue pas... - Alors, donc, silence. - Ah... - Manu. Manu. - Ouais, ouais, ouais. - Tu te calmes. - OK. - Non, mais... - Merci, chef, de m'avoir calmé comme ça. Et là, il va être calmé, hein. - Mais je m'en fous, moi. - Mais je m'en fous. Je m'en fous, il fait son boulot correctement. Pas du tout. - Mais pense au gamin défavorisé qui écoute la radio. - Mais attends, il fait un boulot de merde. - T'as fait un peu la cité de la 94. - Mais attends. - T'es un peu le père Noël du 94, toi. - Mais attends, il fait du boulot de merde, là. - C'est quoi, ce bordel ? - Attends, c'est quoi, ce bordel ? Il me reprend même pas. Les auditeurs, il met une message de non. - Non, c'est pas vrai, j'ai un routier. - Non, non, non, il n'y a pas de routier. - Non, c'est tout. - C'est un routier. - Non, c'est un boulot au standard. - Ouais, allez, au standard. - Ah non. - Hop, t'envoies la musique, t'es terminé. Allez, hop, passe ça. Allez, hop, deux heures et demie, pause. Comme on est là jusqu'à quatre heures, pause. Hop, pause. - Pause quoi ? - Pause, je t'envoie un vide. Je t'ai même pas donné le disque. Tu mets, tu l'annonceras. Allez, on fait une pause, allez, hop. On l'annonce après, alors. T'envoies, et c'est tout. D'accord. Alors, donc, on récupère... Qu'est-ce qu'on a ? On a Marcel, pute, couille de loup, petit téton, j'en pue les cendrilles. Bon, vous fermez un peu vos jolles. Oh, putain, mais ta gueule, toi, mec, Gérard ! Oh, Gérard ! Tu me commences à me casser les couilles. Putain, mais, tu vas les calmer, là. Oh, merde ! Gérard ! Gérard ! Gérard ! Je t'avais dit, Fildar, avec tes pauvres sons, là, j'ai tout le monde. T'as l'air égoûté, gros. T'as l'air chiant, les auditeurs, parce que tu regardes les Gérards avec tes mauvais, quoi. T'abuses, Fildar, ils nous ont fait calmer, là. Fildar, honnêtement, arrête. Non, mais... Ah, il y a rien... Ils arrêtent pas, là, mais ils vont te calmer, ou quoi ? Bah oui. Calmez-vous, les auditeurs. Non, non, arrête, arrête. Mais donc, tu l'as arrêté, ok ? Mais quoi ? J'ai rien fait. Mais ça, ça, là ! C'est quoi, là ? Ça, là ! Mais c'est un remix ! Oui, alors ? Oui, alors, c'est toi qui t'amuses ? Mais non, c'est un remix ! C'est un remix de... C'est des remixes de la... Mais moi, ils sont très calmes, les auditeurs, là. Non, mais ça, je vais écouter, je vais surveiller. Le premier qui fait une merde, il jarte ! Ça, c'est un general ball ! Mais attends, mais ça, c'est pas quand même connecté. 5 940, j'aimerais bien qu'on arrive à... 5 60, merde ! 5 60 pour arriver à 6 000, Gérard, à 6 000. Allez ! Allez, bonsoir ! Ça, moi, je commence à me... Rêve de ta gueule ! Ça a tombé par aussi ! Rêve ! Rêve ! Rêve ! Rêve ! Rêve ! Rêve ! Rêve ! C'est bon, Gérard, t'es prêt, là ? Parce que ça fait une heure. Non, il a pété son casque ! Oh, merde ! Non, c'est bon, il le répare, Gérard. Tu peux quand même commencer à... reprendre les auditeurs avec tout ça, hein. Ouais, ouais. C'est bon ? T'es là, encore, hein. Ah, là, là, là. Non, merci, chef. Ah, ouais. Alors, là, je vais écouter le premier qui fait une merde, il dégage. Non, mais là, maintenant, il... Non, mais je vais surveiller Manu, je vais surveiller Manu. Parfait. Eh, ensuite... Oui, je suis là, oui. Petit Delou. Oui ? Petit Téton. Eh, mais merde ! Mais ils sont là, Gérard. Mais attends, il n'est pas là, Jean-Pulle ! Qu'est-ce que tu demandes ? Ah, tu ne m'as pas appelé ? Non, à peine ! Tu me prends pour un con, là ! Ça va pas, non ? Mais non ! Sandrine ! Oui, je suis là. Et Marcel ! Alors, la question... Pensez-vous que les routiers sont des vieux cochons ? Oui. Alors, qui, oui ? Banane. Banane. Attends, Banane, elle sort d'où ? Eh, je ne sais pas quoi elle a à faire ! Je ne sais pas, je ne sais que la tête à gueule ! Je ne sais pas d'où elle sort. Putain de merde ! Je ne sais pas. Tu me fais quoi, là ? Ben, je ne sais pas d'où elle sort, je vais la trouver. Putain, c'est pas vrai, hein ! Eh, merde, il y a un gourmet qui l'a mangé. C'est le pâle qui t'a mangé. Voilà ! Voilà, continue ! Laissez-le dire des conneries ! Ben, c'est toi qui... Oh, tu mets ta cop, là ! Arrête ! Hop, allez hop ! C'est écrasé ! C'est quoi, ce bordel ? C'est quoi ? C'est quoi, ce bruit ? Quel bruit ? Ouais, tu as mon cul ! Oui, je suis là. Salut à tout le 94 et spéciale dédicace à la prison de freine. Allez, hop, dégage pour toi ! Hop, au revoir ! Hop, au revoir ! Ok, Michel ! Hop, écoute Delou ! Ouais ? Tu réponds ? Eh ben, ouais. J'ai déjà répondu tout à l'heure. Non, tu n'as pas répondu à la question. Si ! Alors, ouais, ce sont tous des cochons, ouais. D'accord. Et pourquoi c'est des cochons ? C'est ça qu'il faut savoir. Est-ce qu'il y a un cochon ? Oui, c'est un cochon. Mais pourquoi il est cochon ? Ben, parce qu'ils n'ont rien d'autre à foutre dans leur camion toute la journée. Ouais. Ils pensent à ça. Ouais, mais attends. Tu crois que le routier, il n'en a pas marre de passer... Je ne crois pas en penser au cul, mais je ne crois pas, non. Non, mais tu crois qu'il n'en a pas marre d'être sur la route constamment 24 heures sur 24 en pensant... {{AutoCat}} c1uwq37wrgos6n9vm45dky2b93ggu54 Fonctionnement d'un ordinateur/Les processeurs 8 bits et moins 0 82384 765823 765756 2026-05-02T20:02:59Z Mewtow 31375 /* La microarchitecture de l'Intel 4004 */ 765823 wikitext text/x-wiki Nous avons déjà abordé la notion de processeur 8, 16, 32, 64 bits. Elle désigne la taille des registres généraux, ou de l'accumulateur. De nos jours, les processeurs 32 et 64 bits sont la norme, mais les premiers micro-processeurs étaient des processeurs 4 et 8, avant de passer rapidement au 16 bits. La raison est que leur budget en transistor limité faisait qu'on ne pouvait pas utiliser une ALU trop grande : une ALU 8 bit prend deux fois moins de place et de transistors qu'une ALU 16 bits. Cependant, les processeurs 8 bits avaient de sérieuses limitations qui étaient compensées par diverses solutions. Dans ce chapitre, nous allons faire une revue rapide des processeurs 8 bits et de leurs fonctionnalités. La principale limitation des CPU 8 bits était l'adressage : des registres de 8 bits limitaient l'espace d'adressage à seulement 256 adresses, soit à peine 256 octets ! Intuitivement, on se dit que 256 octets est purement impraticable, on ne peut rien faire d'intéressant avec seulement 256 de RAM + ROM. Et c'est partiellement vrai. L'adage veut que 16 bits est la taille minimale intéressante, la limite à partir de laquelle on a assez de mémoire RAM/ROM pour coder des applications intéressantes. Mais 256 octets de RAM est largement suffisant sur de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Pour les applications demandant plus de mémoire RAM, les CPU de l'époque contournaient la limitation de 256 octets de RAM avec de nombreux stratagèmes. Dans ce qui va suivre, nous allons séparer les CPU 8 bits selon qu'ils utilisent une architecture Harvard ou une architecture Von Neumann. La raison est qu'une architecture Harvard permet en soi de contourner partiellement ce problème d'adressage. Les choses sont plus compliquées avec une architecture Von Neumann. ==Les processeurs 8/16 bits à architecture Harvard == La première solution est d'utiliser une architecture Harvard. Le processeur 8 bit a alors deux espaces d'adressage : un pour la RAM, un autre pour la ROM. Et les deux utilisent des adresses de taille différente. La ROM est reliée à un bus d'adresse de 16 bits, alors que la RAM est elle connectée à un bus d'adresse de 8 bits. La RAM est donc limitée à 256 octets, alors que la ROM peut monter jusqu'à 64 kibioctets. Mine de rien, faire ainsi est largement suffisant. Les processeurs 8 bits intègrent parfois les 256 octets de RAM directement dans le processeur. Vous noterez que 256 octets de RAM est très peu, comparable à ce qu'on trouve dans un banc de registres. Aussi, fusionner banc de registre et 256 octets de SRAM est une optimisation possible. Concrètement, cela veut dire que le processeur n'intégre pas une RAM séparée, mais a un banc de 256 registres de 8 bits. Beaucoup de processeurs en implémentent moins, avec par exemple seulement 64 octets de RAM, ou 32 octets, ou 128 octets. L'avantage est que cela élimine le bus mémoire de la RAM, ce qui économise beaucoup de broches sur le circuit intégré du CPU. Et c'est ce qui explique que cette solution est beaucoup utilisée sur les microcontrôleurs peu puissants. Les exemples qui vont suivre devraient vous convaincre. Et pour les applications demandant plus de RAM, des optimisations permettent d'adresser plus de 256 octets de RAM. La plus connue est la commutation de banques, mais nous n'avons pas encore abordé celle-ci, et il faudra attendre le chapitre sur l'espace d'adressage pour cela. Cependant, se limiter à 256 octets de RAM demande des compromis assez forts, pour économiser un maximum d'adresses mémoire. L'usage d'une architecture Harvard est une solution très intéressante, mais on peut aller plus loin en utilisant une architecture Harvard modifiée. Pour rappel, elles permettent de lire des constantes depuis la mémoire ROM. Les constantes manipulées par le programme sont mémorisées en ROM, lues depuis la ROM, au lieu d'être chargées en RAM. Une autre optimisation est d'utiliser un espace d'adressage séparé pour les entrées-sorties, à la place d'entrées-sorties mappées en mémoire qui détournent des adresses. Cependant, de nombreux processeurs 8 bits utilisent les entrées-sorties mappées en mémoire, comme on va le voir plus bas. Avec ce genre de stratagèmes, 256 octets de RAM est largement suffisant sur de nombreux systèmes, à condition qu'on ait assez de ROM pour coder un programme digne de ce nom. Par exemple, de nombreux systèmes embarqués simples s'en accommodent : des caisses enregistreuses, des systèmes de régulation de feu de circulation, etc. Dans ce qui suit, nous allons voir quelques processeurs 8 bits de ce type. Deux exemples seront des microcontrôleurs très utilisés de nos jours. ===Le Fairchild F8 et la console de jeu Fairchild Channel F=== Un premier exemple est la Fairchild F8 de la défunte entreprise Fairchild Semiconductor. Il incorpore un processeur 8 bits, c’est-à-dire que le processeur fait des calculs sur des entiers de 8 bits maximum, une mémoire RAM de 64 octets, ainsi qu'une mémoire ROM de 1 kibioctet. Les 64 octets de RAM sont certes très peu, mais c'est suffisant pour certaines applications simples, comme les caisses automatiques de l'époque, ou des applications embarquées. Et de toute façon, il est possible d'ajouter de la mémoire RAM supplémentaire si les 64 octets de RAM intégrée ne suffisent pas. Le système était donc modulaire, adaptable selon les besoins, peu cher pour son implémentation minimale sans RAM en plus. Vu qu'il s'agit d'un des tout premiers ordinateurs, il est sorti à une époque où la technologie était rudimentaire. À cette époque, le processeur était composé de pièces détachées qu'il fallait souder ensemble pour obtenir un processeur fonctionnel. Ce n'est que plus tard qu'est apparu le micro-processeur, qui regroupe un processeur complet dans un seul circuit intégré. Le résultat est que le processeur du Fairchild F8 est coupé en deux, l'unité de calcul et l'unité de contrôle sont placés dans des pièces détachées séparés. Le microcontrôleur est composé de trois à quatre pièces détachées, certaines étant optionnelles. La première est le '''3850 CPU''', qui regroupe l'unité de calcul et la mémoire RAM intégrée. La seconde est le PSU (''3851 Program Storage Unit''), qui regroupe la mémoire ROM et l'unité de contrôle, ''program counter'' inclut. S'il y a besoin d'utiliser plus de RAM, il faut ajouter un circuit d’interface mémoire, qui est au choix le ''3852 Dynamic Memory Interface'' (DMI) ou le ''3853 Static Memory Interface'', le premier étant connecté à une mémoire de type DRAM, l'autre à une SRAM (nous verrons ce que sont les DRAM et les SRAM dans le prochain chapitre). [[File:Fairchild F8.png|centre|vignette|upright=2|Fairchild F8]] Le système minimal est composé d'un PSU et d'un 3850, sans les circuits d'interface mémoire. Le tout donne un système avec un processeur 8 bit, 64 octets de RAM et 1 kibioctet de ROM, les deux mémoires étant intégrées dans le "processeur". Le processeur gérait 4 entrées-sorties, chacune étant reliée avec un bus de 8 bit au processeur. Au passage, en 1977, Mostek a créé un microcontrôleur qui regroupe un PSU et un 3850 : le Mostek 3870. Le système minimal n'avait pas de bus d'adresse, vu que la RAM était intégrée au processeur. C'est les 3852 et 3853 qui ajoutaient un bus d'adresse. Ils ajoutent un bus d'adresse de 16 bits, ce qui permet d'adresser 64 kibioctets de RAM. [[File:Fairchild-Channel-F.jpg|vignette|un Fairchild Channel F]] Le Fairchild F8 a été utilisé dans la Fairchild Channel F, une des toute première console de seconde génération, à savoir des consoles qui utilisaient des cartouches de jeu. Avant les consoles de seconde génération, les consoles étaient non-programmables. Elles étaient conçues pour faire tourner un jeu précis, aucun autre, le jeu étant implémenté dans leurs circuits. La Fairchild Channel F est composé du système minimal, auquel on a ajouté une carte son rudimentaire et 2 kibioctets de mémoire vidéo. La mémoire vidéo sert uniquement pour afficher des images à l'écran : on écrit l'image à afficher dedans, un circuit vidéo se charge de l'afficher à l'écran automatiquement. Le processeur ne fait qu'écrire dans cette RAM vidéo, il ne peut pas en lire le contenu. De la RAM supplémentaire peut cependant être ajoutée dans les cartouches de jeu. ===Les microcontrôleurs PIC=== Les '''microcontrôleurs PIC''' regroupent des microcontrôleurs allant de microcontrôleurs 8 bits aux performances très faibles, à des microcontrôleurs 32 bits bien plus puissants. Les microcontrôleurs PIC sont très utilisés dans l'embarqué ou d'informatique industrielle. Ils sont vendus à des volumes assez impressionnants, plusieurs millions par an. Et si vous avez ou êtes en train de faire des études d'électronique, je parie que vous les avez déjà vus en classe, ou que ce ne saurait tarder. Dans ce qui suit, nous allons nous concentrer sur les microcontrôleurs PIC 8 bits, à savoir les PIC 16, 16 et 18. Les PIC 24, qui sont des microcontrôleurs 16 bits, ne seront pas abordés. La mémoire ROM des PIC va de 1024 instructions à 4096 instructions. En comparaison, la mémoire RAM des microcontrôleurs PIC ne peut pas dépasser 256 adresses, et elle est encore plus petite en pratique sur certains modèles. Pour donner un exemple, le PIC16F84 a une RAM composée de 68 "registres" de 8 bits. Le terme "registres" devrait vous faire comprendre que les 256 octets de RAM sont en réalité un banc de registre de 256 registres d'un octet chacun. Vu que la RAM et le banc de registre sont fusionnés, il n'y a pas de différences entre nom/numéro de registre et adresse mémoire. Les registres sont donc adressables, on y accède en lisant/écrivant à une adresse mémoire bien précise. Ce banc de registre contient des registres généraux, mais aussi des registres pour communiquer avec les ports d'entrée-sortie, des registres de contrôle, le ''program counter'', le registre d'état, et le pointeur de pile. Pour donner un exemple, sur les modèles 16F, l'espace d'adressage fait 128 octets, dont 32 sont réservés aux registres du processeur, ce qui fait que seuls 96 octets sont adressables comme de la RAM. Cela gaspille quelques adresses mémoire, mais permet une implémentation plus simple, avec une petite économie de registres et donc de transistors. : Les PIC 18 peuvent adresser plus de 256 octets de RAM en utilisant la commutation de banques, une technique qui sera abordée dans plusieurs chapitres. [[File:DocPIC16F84 3.png|centre|vignette|upright=3|Espaces d'adressage du PIC16F84.]] Les PIC sont une architecture à accumulateur, ce qui permet d'utiliser un banc de registre à un seul port et simplifie grandement la conception du processeur. Il faut préciser que l'accumulateur n'est pas mappé en mémoire, sauf sur les modèles PIC 17, qui mappé l'accumulateur en mémoire RAM ! Leur implémentation de l'accumulateur ajoute une petite subtilité : le résultat d'une opération arithmétique peut être enregistré ailleurs que dans l'accumulateur. Le résultat peut aussi remplacer la seconde opérande, celle lue en mémoire RAM. Dit autrement, le résultat est enregistré dans l'adresse mémoire source. Les instructions de calcul ont le choix : un bit dans leur encodage précise où enregistrer le résultat. {| |- |[[File:DocPIC16F84 4.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84).]] |[[File:DocPIC16F84 5.png|centre|vignette|upright=2|Microarchitecture simplifiée d'un microcontroleur PIC (ici, un 16F84), avec les branchements directs.]] |} La petite taille de la ROM d'un PIC n'est pas une surprise, car les architectures 8 bits sont conçues pour ne pas utiliser beaucoup de transistors et être très simples. Mais il faut adapter le jeu d'instruction, pour qu'il ait une bonne densité de code. Par exemple, il faut faire en sorte d'avoir des instructions assez courtes. Si les instructions font 16 bits au lieu de 32, on divise par deux le nombre de transistors nécessaire pour la mémoire ROM. Et le jeu d’instruction des PIC est adapté à cette contrainte. Les microcontrôleurs PIC utilisent un jeu d'instruction propriétaire, dont les instructions sont très petites. Les premières versions du jeu d'instruction utilisaient des instructions codées sur 12 bits, dont 5 pour l'adresse mémoire de la seconde opérande. Pour les branchements, 3 bits étaient utilisés pour l'opcode, 9 pour l'adresse de destination. Par la suite, les instructions ont été étendues à 13 bits sur les PIC1670, puis à 14, 15 et 16 bits. Les adresses ont alors été élargies, ce qui permet d'adresser en peu plus de mémoire RAM. Il est intéressant de regarder comment les PIC font pour obtenir des instructions aussi courtes. Premièrement, le fait d'utiliser une architecture à accumulateur, couplé à une RAM très petite aident grandement. Les architectures à accumulateur ont besoin de préciser un opcode et une adresse mémoire pour chaque instruction, pas besoin de préciser de noms de registres ni le mode d'adressage. La taille des adresses mémoire est censé être un problème pour la densité de code, mais les adresses d'un processeur 8 bits font 8 bits. On peut alors avoir un jeu d'instruction étoffé, en utilisant des instructions 16 bits, qui concatènent un opcode et une adresse mémoire, d'un octet chacun. Mais d'autres optimisations permettent d'avoir une bonne densité de code. Les PIC ont des branchements pour les appels et retour de fonction. Les PIC incorporent une pile d'appel de retour, qui fait 2 à 8 adresses suivant les modèles. Elle permet d'économiser quelques registres, car la pile d'appel n'est pas mappée dans l'espace d'adressage, elle n'est pas adressable. On économise ainsi 2 à 8 registres, sur 32-256 registres. De plus, cela simplifie l'encodage des instructions d'appel/retour de fonction, qui n'ont pas à préciser où enregistre l'adresse de retour. Les PIC n'ont pas d'instructions de branchement conditionnels, ils font avec une SKIP instruction et des branchements inconditionnels. Du moins, c'est le principe, car si vous regardez la liste des instructions ci-dessous, vous verrez qu'il n'y a pas d'instruction SKIP. À la place, les instructions SKIP sont fusionnées avec d'autres instructions. Elles sont notamment fusionnées avec les instructions d'incrémentation et de décrémentation. Les PIC supportent une incrémentation normale, une décrémentation normale, une décrémentation fusionnée avec une instruction SKIP, et une incrémentation fusionnée avec une instruction SKIP. Les deux dernières incrémentent/décrémentent l'accumulateur et SKIP l'instruction suivante si le résultat est zéro. Elles permettent de fortement simplifier l'implémentation des boucles qui s'exécutent tant que leur compteur atteint zéro. Les PIC disposent d'instructions de manipulation de bit, pour tester/masquer un bit dans une opérande. Il y a en a 4 en tout : mettre à 0, mettre à 1, tester si bit = 1, tester si bit = 0. Les instructions qui testent un bit font le test et décident s'il faut skipper l'instruction suivante ou non. Il y a aussi deux instructions de rotation à gauche et droite, qui tiennent compte de la retenue mémorisée dans le registre d'état. Les instructions de décalages sont émulées avec une rotation suivie d'un ET bit à bit. Mentionnons aussi une instruction pour inverser deux ''nibbles'' dans un octet. De telles instructions sont très utiles pour manipuler les ports I/O. Les modèles haute performance ajoutent des instructions d'addition avec retenue entrante, idem pour la soustraction. De telles instructions sont très utiles pour faire des additions/soustractions sur des opérandes de 16 bits. Le processeur a beau être un CPU 8 bits, il peut être utilisé pour faire des calculs 16 bits, la performance est alors amoindrie, mais ce n'est pas un problème pour les applications d'un tel microcontrôleur. Les modèles initiaux, comme les PIC 10 et 12, ne supportaient pas les interruptions, mais c'est chose réglé sur les modèles plus récents. Ils ont même des registres séparés pour les interruptions et les programmes normaux. De plus, ils intègrent nativement un ''watchdog timer''. {|class="wikitable" style="text-align:center" |+ Jeu d'instruction des dodèles PCI 16 |- ! colspan="5" | Instructions diverses |- | colspan="3" | 00 0000 0000 0000 || NOP || Ne fait rien |- | colspan="3" | 00 0000 0000 1000 || RETURN || Instruction de retour pour une fonction |- | colspan="3" | 00 0000 0000 1001 || NOP || Instruction de retour pour une interruption |- | colspan="3" | 00 0000 0110 0011 || SLEEP || Mise en veille |- | colspan="3" | 00 0000 0110 0100 || CLRWDT || RESET le ''watchdog timer'', intégré dans le PIC |- ! colspan="5" | Instructions de manipulation de bit |- | 0100 || Position du bit dans l'opérande || Adresse mémoire || BCF || Met le bit à 1 |- | 0101 || Position du bit dans l'opérande || Adresse mémoire || BSF || Met le bit à 0 |- | 0110 || Position du bit dans l'opérande || Adresse mémoire || BTFSC || Teste si le bit adressé est à 1 |- | 0111 || Position du bit dans l'opérande || Adresse mémoire || BTFSS || Teste si le bit adressé est à 0 |- ! colspan="5" | Branchements |- | colspan="2" | 100 || Adresse mémoire || CALL || Appel de fonction |- | colspan="2" | 100 || Adresse mémoire || GOTO || Branchement inconditionnel |- ! colspan="5" | Instructions logiques/arithmétiques avec opérande lue en mémoire RAM |- | colspan="5" | ''Le bit '''d''' dans l'opcode indique la destination : accumulateur ou adresse mémoire''. |- | colspan="2" | 0000001 || Adresse mémoire || MOVWF || Store (accumulateur vers destination) |- | colspan="2" | 000001d || Adresse mémoire || MOVWF || Met à zéro la destination (adresse ou registre) |- | colspan="2" | 000001d || Adresse mémoire || SUBWF || Soustraction |- | colspan="2" | 000010d|| Adresse mémoire || DECF || Décrémentation |- | colspan="2" | 000100d|| Adresse mémoire || IORWF || OU bit à bit |- | colspan="2" | 000101d|| Adresse mémoire || ANDWF || ET bit à bit |- | colspan="2" | 000110d || Adresse mémoire || XORWF || XOR bit à bit |- | colspan="2" | 000111d || Adresse mémoire || ADDWF VWF || Addition |- | colspan="2" | 001000d || Adresse mémoire || MOVF || LOAD |- | colspan="2" | 001001d || Adresse mémoire || COMF || NOT bit à bit |- | colspan="2" | 001010d || Adresse mémoire || INCF || Incrémentation |- | colspan="2" | 001011d || Adresse mémoire || DECFSZ || Décrémentation, puis instruction SKIP si résultat = 0 |- | colspan="2" | 001100d || Adresse mémoire || RRF || Rotation à droite avec retenue entrante |- | colspan="2" | 001101d || Adresse mémoire || RLF || Rotation à gauche avec retenue entrante |- | colspan="2" | 001110d || Adresse mémoire || SWAPF || Echange deux ''niblle'' dans un octet |- | colspan="2" | 001111d || Adresse mémoire || INCFSZ || Incrémentation, puis instruction SKIP si résultat = 0 |- ! colspan="5" | Instructions logiques/arithmétiques avec constante immédiate |- | colspan="2" | 1100xx || Constante immédiate (8bits) || MOVLW || Copie constante dans accumulateur |- | colspan="2" | 1101xx || Constante immédiate (8bits) || RETLW || MOV fusionné avec un retour de fonction |- | colspan="2" | 111000 || Constante immédiate (8bits) || IORLW || OU |- | colspan="2" | 111001 || Constante immédiate (8bits) || ANDLW || ET |- | colspan="2" | 111010 || Constante immédiate (8bits) || XORLW || XOR |- | colspan="2" | 11110x || Constante immédiate (8bits) || SUBLW || Soustraction |- | colspan="2" | 11111x || Constante immédiate (8bits) || ADDLW || Addition |} Les PIC gèrent l'adressage absolu et immédiat, mais pas plus. L'adressage absolu, celui où l'adresse est intégrée dans l'instruction, est très simple à implémenter. Les adresses prennent moins d'un octet, vu que la taille de la RAM est très petite, les adresses sont très courtes, les intégrer dans des instructions elles-mêmes courtes n'est pas un problème. L'adresse est encodée sur 5 à 7 bits, selon le modèle, ce qui permet d'adresser entre 32 et 128 octets. Les PIC ne supportent pas l'adressage indirect, mais peuvent l'émuler grâce à un '''registre d'adresse''' dédié. Il s'agit du registre FSR, qui mémorise l'adresse à lire/écrire. Il est possible de copier un pointeur dedans, qui provient soit de l'accumulateur, soit de la mémoire SRAM. Dans les deux cas, la donnée adressée est lue ou écrite dans un registre INDR, est un registre d’interfaçage rendu adressable. Le registre FSR est directement connecté sur le bus d'adresse. Les modèles de base se débrouillent avec un registre FSR et un registre INDR, mais les modèles plus performants ont deux ou trois copies de chaque registre. Les modèles PIC18 ajoutent aussi des instructions LOAD/STORE qui émulent les modes d'adressage à post- ou pré-incrément/décrément, et le mode d'adressage "Base + Indice + Décalage", encore une fois en utilisant les registres FSR et INDR. Avec tout ce qu'on vient de dire, vous devriez pouvoir comprendre la microarchitecture d'un PIC, qui est résumée dans ce schéma. [[File:DocPIC16F84 all.png|centre|vignette|upright=2.5|Microarchitecture du PIC16F84.]] ===Les microcontrôleurs Intel 8051/8031=== [[File:Pinagem8031.jpg|vignette|Broches du 8051.]] Les microcontrôleurs Intel 8051/8031 sont des microcontrôleurs 8 bits, commercialisés par Intel. Ils contiennent un processeur 8/16 bits, 4 kibioctets de mémoire ROM et une RAM de 128 octets. Niveau entrées-sorties, il contient un port série, ainsi que 4 ports d'un octet chacun sur lesquels il peut lire ou écrire. Il supporte des interruptions, avec un contrôleur d'interruption intégré. Il contient aussi deux ''timers'' de 16 bits chacun, qui déclenchent des interruptions quand ils tombent à zéro ou à une valeur configurable. Ils ont de nombreuses ressemblances avec les microcontrôleurs PIC, mais aussi des différences notables. Par exemple, le 8051 n'a pas de pile d'adresse de retour, contrairement aux processeurs PIC. Il fait autrement, à savoir qu'il gère une pile d'appel placée en mémoire RAM,ce qui est très différent. De même, il utilise deux accumulateurs nommés A et B, le second étant surtout utilisé pour les multiplications. Car oui, le 8051 supporte les multiplications et divisions, ce qui est une autre différence avec les processeurs PIC. Une autre différence est que les registres sont placés dans un banc de registre à part des 128 octets de SRAM. Il y a une SRAM séparée du banc de registre, contrairement à ce qu'on a sur les microcontrôleurs PIC. Par contre, les registres du processeur sont mappés en mémoire RAM, y compris les deux accumulateurs, le registre d'état, le ''program counter'', et bien d'autres. Mais le fait qu'ils soient séparés de la SRAM permet de les mapper dans l'espace d'adressage sans marcher sur les pieds de la SRAM. Vu que le processeur peut adresser 256 octets, mais n'a que 128 octets de SRAM, les registres sont mappés dans les 128 octets restants. Les entrées-sorties aussi sont mappées dans ces 128 octets restants. L'ensemble utilise une architecture Harvard, contrairement à ce que pourrait faire croire le schéma ci-dessous. [[File:Arkitektura mikro kontrollerit Intel 8051.png|centre|vignette|upright=2.5|Microcontrôleur 8051]] Un détail original est que 16 octets de la SRAM sont bit-adressables, à savoir que chaque bit a sa propre adresse. En tout, cela permet d'adresser 128 bits (16 adresses * 8 bits par octet adressé). L'intervalle bit-adressable va de l'adresse 32 (inclue) à l'adresse 47 (inclue). Les 32 premières adresses sont réservées à la mémoire SRAM, c'est 32 octets de RAM utilisable à volonté par le programmeur. Les 16 adresses suivantes sont les 16 adresses bit-adressables mentionnées dans le paragraphe précédent. Les 96 octets suivants sont de la mémoire RAM adressable, affectée par défaut à la pile d'appel mais adressable via adressage direct/indirect si besoin. Les 128 octets de poids fort sont réservés aux registres du processeur et aux entrées-sorties mappées en mémoire. [[File:Memory map du 8051.png|centre|vignette|upright=2|Memory map du 8051]] Les 128 octets au sommet de l'espace d'adressage sont décrits dans le schéma ci-dessous. On voit que les deux accumulateurs sont mappés dedans, de même que le registre d'état PSW, le registre de configuration des interruptions IE (''Interrupt Enable''), et quelques autres. Les ports I/O sont aussi mappés dedans, que ce soit les 4 ports parallèles ou le port série. Les deux ''timers'' sont aussi mappés dedans, ainsi que leurs registres de configuration. Une partie des octets sont bit-adressables, et cette partie inclus les registres du processeur et les ports I/O. Pour le dire autrement, chaque bit d'un port I/O a sa propre adresse mémoire, qui permet de le sélectionner. Par contre, les registres pour les ''timers'' ne sont pas dedans, sauf pour le troisième ajouté dans des extensions du 8051. [[File:MFrey SFR MCS-51.svg|centre|vignette|upright=2|Memory map des 128 octets de poids fort du 8051]] Une particularité est que le processeur incorpore une '''unité de calcul de 1 bit'''. Elle permet de faire des opérations sur des bits, avec 17 instructions possibles au total. L'ALU de 1 bit est reliée à un accumulateur de 1 bit et 32 registres de 1 bit. Elle peut lire des opérandes de 1 bit en mémoire RAM ou sur les ports I/O, pour les portions qui sont bit-adressables. Le processeur supporte aussi l'adressage indirect dans la SRAM, mais celui-ci fonctionne différemment comparé aux microcontrôleurs PIC. Il n'y a pas deux registres d'adresse dédiés, séparés des autres. À la place, l'adressage indirect est implémenté normalement, en utilisant les registres généraux. Par contre, il y a une contrainte : seuls les deux premiers registres R0 et R1 sont utilisables. En clair, seuls ces deux registres peuvent contenir une adresse, un pointeur. C'est là une différence liée au fait que le 8051 a un banc de registre séparé. Le 8051 peut communiquer avec une mémoire RAM externe, en plus de la SRAM interne. Pour cela, le processeur du 8051 avait un espace d'adressage séparé pour la RAM externe, capable d'adresser 64 kibioctets. Communiquer avec cet espace d'adressage se faisait avec des instructions d'accès mémoire séparées des autres, pas les LOAD/STORE normaux. Par exemple, l'instruction MOVX lisaient une donnée dans cet espace d'adressage, et la copiait dans l'accumulateur ou la SRAM. Pour envoyer l'adresse à lire/écrire à cette RAM externe, le processeur incorporait un registre d'adresse dédié. Il s'agit du '''registre DPTR''', qui contient une adresse de 16 bits. Le processeur devait copier l'adresse à lire/écrire dedans, puis lancer l'instruction MOVX. ===Le HP Nanoprocessor : un processeur sans ALU=== Un dernier exemple est celui du processeur HP Nanoprocessor, de l'entreprise HP. Il a été commercialisé en 1974, en même temps que les premiers micro-processeurs d'Intel. Tous les processeurs de l'époque étaient des processeurs 8 bits et le HP Nanoprocessor ne faisait pas exception. Ce n'était pas un processeur hautes performances, il était destiné à des applications d'informatique industrielle ou embarquée. D'ailleurs, il utilisait des transistors de type metal-gate, peu performants, là où ses contemporains utilisait des transistors en silicium, plus performants. Mais une caractéristique qui rend cela encore plus claire est qu'il n'y a pas d'ALU ! En effet, ce processeur est incapable de faire des additions, des soustractions ou autres opérations simples ! Il est cependant capable d'effectuer des incrémentations et décrémentations, des décalages, des opérations logiques comme des ET/OU/NON/XOR et bien d'autres. Il supporte en tout 48 instructions, avec un support limité des modes d'adressage indirects. Les instructions de branchement étaient des instructions SKIP, il n'y avait pas d'instructions de branchement généralistes. Pour ce qui est des registres, il disposait de 16 registres de 8 bits et d'un accumulateur. Niveau mémoire, il était relié à une mémoire ROM, rien de plus. Il n'avait de RAM supplémentaire qu'on pouvait lui adjoindre, il devait se débrouiller avec seulement ses registres. Et cela ne posait pas de problèmes pour son usage. Seul le mode d'adressage indirect à registre est supporté, il n'y a pas de registres d'indices. Ce mode d'adressage permet de lire des données en mémoire ROM, la ROM pouvant contenir des tableaux de valeurs constantes. : Il est possible de lui adjoindre de la RAM via les ports d'entrée-sortie, ainsi qu'une ALU, mais RAM et ALU sont traités comme des périphériques avec lesquels on communique, ils ne sont pas intégrés au processeur. Niveau micro-architecture, il incorporait une unité de calcul logique et un circuit comparateur. Le comparateur était un circuit comparateur série des plus basiques, qui était utilisé pour les instructions de branchement et associées. L'unité de calcul logique gérait des incrémentations/décrémentation, des décalages, les opérations logiques et quelques autres. L'unité de calcul logique était bit-slicée, à savoir conçue en assemblant 8 ALU de 1 bit chacune, enchainées en série. Le tout était combiné à des circuits de ''carry skip''. [[File:Unité de calcul du HP nanonprocessor.png|centre|vignette|upright=2|Unité de calcul du HP nanoprocessor]] Son unité de décodage d'instruction était très simple, essentiellement basée sur des portes NOR, grâce à un encodage efficace des instructions machine. Le ''program counter'' fait 11 bits, ce qui permet d'adresser une ROM de 2 kibioctets. Le ''program counter'' était relié à un circuit incrémenteur qui gérait les isntructions SKIP (il pouvait incrémenter le ''program counter'' par pas de 1 ou de 2 en cas de SKIP). Le processeur contient aussi deux registres, qui servent en quelque sorte de pile d'adresse de retour. Un premier registre mémorise l'adresse de retour d'une fonction, l'autre mémorise le ''program counter'' lors d'une interruption, pour savoir où brancher à la fin de l'interruption. [[File:HP nanoprocessor.png|centre|vignette|upright=2.5|HP nanoprocessor]] Fait intéressant, le concepteur du processeur a gracieusement donné les masques utilisés pour graver le silicium du processeur au site [https://www.cpushack.com/ CPU Shack]. Les masques en question sont disponibles ici : * [https://www.cpushack.com/2020/08/20/hp-nanoprocessor-mask-set/ HP NanoProcessor Mask Set] * [https://www.cpushack.com/2020/08/09/the-forgotten-ones-hp-nanoprocessor/ The Forgotten Ones: HP Nanoprocessor] Les masques ont été analysés par Ken Shirrif dans cet article de blog : * [https://www.righto.com/2020/09/hp-nanoprocessor-part-ii-reverse.html HP Nanoprocessor part II: Reverse-engineering the circuits from the masks] ==Les processeurs 8/16 bits à architecture Von Neumann== L'usage d'une architecture Harvard est une solution pour adresser plus de mémoire avec des CPU 8 bits. Mais plusieurs microprocesseurs commerciaux n'utilisaient pas cette solution. À la place, c'était des architectures Von Neumann, mais qui étaient capables de gérer des adresses de 16 bits. Les données faisaient 8 bits, les registres faisaient 8 bits, mais quelques techniques permettaient de gérer des adresses de 16 bits. Nous parlerons de '''processeurs 8/16 bits''' pour les désigner, et nous allons les étudier à part. Un point important est que la gestion d'adresses de 16 bits permet d'adresser 64 kibioctets, qui peuvent être remplis avec de la RAM et de la ROM. On a donc le meilleur des mondes : 64 kibioctets de mémoire, mais avec des données de 8 bits et les économies de circuit qui vont avec. L'avantage est que le processeur peut maintenant gérer une vraie pile d'appel, pas seulement une pile d'adresse de retour. Il lui suffit pour cela d'intégrer un pointeur de pile codé sur 16 bits. ===Les modes d'adressage par page des CPU Motorola=== Les processeurs Motorola 8 bits étaient des processeurs 8 bits avec un bus d'adresse de 16 bits. C'était des processeurs à accumulateur incorporant deux registres d'indice, un registre d'état, un pointeur de pile, et un ''program counter''. Tous les registres sont reliés au bus d'adresse, sauf le registre d'état et l’accumulateur. Tous les registres font 8 bits, sauf le ''program counter''. La pile est câblée pour être dans un bloc de 256 octets compris entre l'adresse 1 0000 0000 et l'adresse 1 1111 1111, ce qui fait que son adressage se fait avec un seul octet. [[File:6502-architecture.svg|centre|vignette|upright=1.5|Architecture simplifiée du 6502.</br> X et Y : registres d'indice ;</br> S : le pointeur de pile ;</br> A : accumulateur ;</br>P : registre d'état.</br>]] Les processeurs Motorola 8 bits utilisaient une méthode simple pour adresser 64 kibioctets de RAM, avec des registres de 8 bits. Pour cela, ils utilisaient une variante de l'adressage base + décalage. Elle améliore l'adressage absolu, qui intègre l'adresse à lire/écrire dans l'instruction elle-même. L'adresse en question est de 8 bits et n'encode que les 8 bits de poids faible de l'adresse, les 8 bits de poids fort sont dans un '''registre de page''' adressé implicitement. L'adresse finale est obtenue en concaténant ce registre avec l'adresse mémoire intégrée dans l’instruction. Le résultat est que la mémoire était découpée en blocs de 256 consécutifs, chacun pouvant servir de fenêtre de 256 octets. Une page est réservée pour la pile, la seconde, comme dit plus haut. Formellement, ce mode d'adressage a des ressemblances avec la commutation de banques, une technique qu'on verra dans les chapitres sur l'espace d'adressage et la mémoire virtuelle. Mais ce n'en est pas du tout : le registre de page est utilisé uniquement pour les accès mémoire avec le mode d'adressage base + décalage, mais pas pour les autres accès mémoire, qui gèrent des adresses complètes. Notons que l'usage d'un registre de page dédié fait que celui-ci est adressé implicitement. Il faut noter que la technique a été utilisée sur des processeurs 16 bits, pour contourner la petite taille des instructions. Un exemple est celui du HP 2100, un processeur 16 bits. Il avait un registre de page de 5 bits et encodait 10 bits d'adresse dans ses instructions. Ses instructions d'accès mémoire disposaient d'un bit qui choisit quel mode d'adressage utiliser. S'il était à 0, l'adressage absolu était utilisé, le registre de page n'était pas utilisé. Mais s'il était à 1, le registre de page était utilisé pour calculer l'adresse. Une évolution de l'adressage précédent est le '''mode page direct'''. Avec lui, le registre de page est étendu et contient une adresse mémoire complète. L'adresse finale n'est pas obtenue par concaténation, mais en additionnant le registre de page avec l'adresse fournie par adressage absolu + décalage. Un exemple est celui des premiers processeurs Motorola, qui géraient des adresses courtes de 8 bits. L'adresse courte de 8 bits correspondait non pas aux 256 premiers octets de la mémoire, mais à une fenêtre de 256 octets déplaçable en mémoire. La position de la fenêtre de 256 octets était spécifiée par le registre de page de 16 bits, qui précisait l'adresse du début de la fenêtre, celle de sa première donnée. Il s'agit donc formellement d'adressage base + décalage, à un détail près : il n'y a qu'un seul registre de base. Le fait que ce registre de base soit unique fait qu'il est adressé implicitement, on n'a pas à encoder le numéro/noms de registre dans l'instruction. Le registre de base est utilisé uniquement pour l'adressage absolu, pas pour les autres accès mémoire. S'il y a des ressemblances avec la segmentation, une technique de mémoire virtuelle qu'on abordera dans quelques chapitres, ce n'en est pas vu que le registre de base est utilisé seulement pour un mode d'adressage bien précis. ===Le ''pseudo-aliasing'' des registres des processeurs Intel x86=== Voyons maintenant le cas des anciens processeurs 8 bits d'Intel à savoir l'Intel 4004, 4040, 8008 et 8080. Le Z80, un processeur inspiré des CPU Intel 8 bits, est aussi concerné. Avant de poursuivre, parlons des registres de ces processeurs. Les premiers CPU Intel incorporaient 7 registres de 8 bits nommés A, B, C, D, E, F, H, L, SP. Ils correspondent respectivement à : l'accumulateur A ; six registres nommés B, C, D, E, H et L ; le registre d'état F ; le pointeur de pile SP. Le Z80 ajoute deux registres d'indice X et Y. De plus, le Z80 dispose de registres d'interruption, qui sont en quelque sorte des copies des registres A, B, C, D, E, F, H, L. Le tout est illustré dans le tableau ci-dessous. {|class="wikitable" style="text-align:center;" |- ! ! Registres des CPU Intel ! Registres supplémentaires du Z80 |- ! Accumulateur | A | A' |- ! Registre d'état | F | F' |- ! Registres généraux | B, C, D, E, H, L | B', C', D', E', H', L' |- ! Pointeur de pile | colspan="2" | SP (sauf pour le 8008) |- ! Registres d'indice | | X et Y |} Le 8008 incorpore une pile d'appel de 7 adresses, dans le processeur lui-même. Il en est de la même avec le 4004 et le 4040, comme on le verra dans la section sur les processeurs 4 bits. Mais le 8080 et le 8085 ont remplacé le tout par un simple pointeur de pile, afin d'avoir une véritable pile d'appel. Autant c'est impossible d'avoir une pile d'appel avec seulement 256 octets de mémoire, autant on peut se le permettre avec 65 536 adresses. Pour gérer des adresses de 16 bits, ils auraient pu utiliser des registres d'adresse séparés, mais on préféré un système de '''pseudo-''aliasing'' de registres'''. Formellement, c'est un système qui concatène deux registres 8 bits pour obtenir une adresse de 16 bits. L’appariement a lieu lors de certaines opérations bien précises, qui n'ont de sens que pour les adresses : la lecture/écriture en mémoire, et l'incrémentation. Il y avait cependant des contraintes quant aux paires de registres possibles, toutes les paires de registres n'étaient pas autorisées. Les CPU concernés sont donc des processeurs hybrides accumulateur-registre généraux. L'accumulateur ne peut pas être appairé, seuls les registres généraux le peuvent. Le Z80 autorise plus de paires que les CPU Intel. Voici les paires de registres qui pouvaient servir d'adresse 16 bits : * Les CPU 8008 d'Intel autorisait une seule paire formée des registres H et L. * Les autres processeurs, à savoir le 8080, le 8085 et le Z80, autorisaient : les paires BC, DE et HL. Le 8008 ne gérait que des opérations sur 8 bits. Mais le 8080 et le 8085 ont ajouté des instructions 16 bits qui agissaient sur des paires de registre, que le Z80 a repris. Une paire de registres est considérée comme un registre unique de 16 bits pour certaines opérations arithmétiques, dont l'incrémentation. Voici la liste des instructions concernées : * INC et DEC pour l'incrémentation et la décrémentation ; * DAD : additionne le registre HL avec une autre paire (Hl inclus) ; * LXI : copie une constante immédiate dans une paire de registres ; * LHLD : lit 16 depuis la mémoire et l'enregistre dans une paire de registres ; * SHLD : copie 16 bits depuis une paire de registres et l'enregistre en mémoire ; * PUSH et POP : empile ou dépilent une paire de registre sur la pile ; * XTHL : échange la paire HL avec les 16 bits au sommet de la pile d'appel ; * XCHG : échange le contenu de la paire HL et DE. Pour résumer, le processeur avait des instructions LOAD, STORE, PUSH et POP adaptées pour gérer des paires de registre. De plus, l'instruction XCHG permettait d’échanger le contenu des paires DE et HL. L'instruction a été étendue sur les processeurs 16 bits pour échanger tous les registres. Mais l'implémentation était alors différente. L'incrémentation sur une paire de 16 bit était très utile, car les adresses sont souvent incrémentées quand on parcours un tableau. Ces instructions nous donnent quelques indices sur ce qu'il y a dans le processeur. Le système de pseudo-aliasing a un impact sur le banc de registre. Le banc de registre regroupe les registres généraux et le pointeur de pile, mais ne contient pas l'accumulateur. Les contraintes sur les paires de registres possibles ne s'expliquent que d'une seule manière : le banc de registre contient des registres de 16 bits, une paire de registres 8 bits est mémorisée dans un registre unique. Il faut donc faire une différence entre les registres architecturaux de 8 bits, et les registres réels de 16 bits. Le banc de registre a un port de 8 bits pour les données, qui est fabriqué à partir d'un port 16 bits auquel on a rajouté un multiplexeur pour choisir soit l'octet de poids faible, soit l'octet de poids fort. Le bus de données fait 8 bits, ce qui fait que les instructions LOAD, STORE, PUSH et POP pour paires 16 bits sont réalisées en deux fois : on lit/écrit l'octet de poids faible, puis celui de poids fort. Par contre, le bus d'adresse fait bien 16 bits. Cela suggère que le banc de registre dispose d'un port de 16 bits dédié aux adresses, en plus du port de données 8 bits. [[File:Architecture d'un CPU 8-16 bits avec un banc de registre double port.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits avec un banc de registre double port]] L'incrémentation d'une paire 16 bits ne coute rien à implémenter, ou presque. En effet, le processeur incorpore un incrémenteur 16 bits pour le ''program counter'', qui est relié au bus d'adresse. L'idée est de rentabiliser cet incrémenteur, en lui permettant d'incrémenter des données/adresses de 16 bits obtenues via pseudo-aliasing. De même, il peut être utilisé pour incrémenter le pointeur de pile, voire un compteur de rafraichissement mémoire (pour rappel, le rafraîchissement mémoire demande de balayer la mémoire d'adresse en adresse et été fait par le CPU à l'époque). Pour cela, il suffit de connecter le ''program counter'', le banc de registre, et l'incrémenteur, via un bus dédié. [[File:Calcul d'adresse par ALU dédiée avec PC séparé.png|centre|vignette|upright=2|Calcul d'adresse par ALU dédiée avec PC séparé]] Notez qu'on peut encore simplifier le tout en placant le ''program counter'' dans le banc de registre, ce qui ne gênera pas le travail de l'incrémenteur mais simplifiera le câblage au bus d'adresse. Ce n'était pas systématique, certains processeurs mettaient le ''program counter'' dans le banc de registre, d'autres non. : Inclure le ''program counter'' dans le banc de registre permet parfois de remplir un vide. Par exemple, sur un processeur avec 12 registres, le banc de registre devrait faire idéalement 16 registres, inclure le ''program counter'' dedans fait monter le tout à 13. [[File:Architecture d'un CPU 8-16 bits.png|centre|vignette|upright=2|Architecture d'un CPU 8-16 bits]] Les processeurs Intel 8 bits, à savoir le 8008, le 8080 et le 8085 ; mettaient le ''program counter'' dans le banc de registre. Vous avez donc toutes les armes pour comprendre leur micro-architecture. Par exemple, voici la micro-architecture du processeur 8080. Remarquez le banc de registre, qui contient tous les registres sauf l'accumulateur et le registre. Il a deux ports : un pour les adresses et un pour les données. Notez le dé-multiplexeur sur le port de donnée. Pour le reste, il s'agit d'une architecture à accumulateur hybride des plus classiques. [[File:Intel 8080 arch.svg|centre|vignette|upright=3|Microarchitecture de l'Intel 8080.]] Le Z80 est un processeur inspiré du design des processeurs Intel 8 bits, mais avec pas mal d'améliorations. Un point particulier de ce processeur est son banc de registre. Il contient tous les registres du processeur, y compris l'accumulateur et le registre d'état ! Les seuls registres en-dehors du banc de registre sont le ''program counter'' et un compteur de rafraichissement mémoire IR. Un autre point particulier est que les registres dans le banc de registres avaient une copie séparée accessible uniquement pour les interruptions, via fenêtrage de registres. Et l'accumulateur et le registre d'état étant dans le banc de registre, il y avait deux accumulateurs et deux registres d'état. Les registres A, B, C, D, E et F étaient dupliqués, par le pointeur de pile ni les registres d'indice. Les copies des registres étaient nommées A', B', C', D', E' et F'. Le Z80 supportait des instructions d'échange de registre en plus des CPU Intel 8 bits. L'instruction EX peut échanger soit le contenu des paires D,E et H,F, soit la paire A,F avec la paire A',F'. L'instruction EXX échange les paires BC, DE, HL avec les paires BC', DE', HL'. En faisant cela, le programmeur pouvait utiliser deux fois plus de registres généraux s'il n'utilisait pas les interruptions. L'échange de paires se fait sans copies de registres, mais simplement en modifiant l'adresse envoyée sur le banc de registre. Pour cela, plusieurs bascules mémorisent des bits qui indiquent si les paires ont été échangées ou non. Il y a une bascule pour les paires DE , HL ; une autre pour les paires A,F et paire A',F', une dernière pour l'instruction EXX. En combinant ces bascules avec les noms de registres envoyés par le séquenceur, on peut échanger les paires de registres. ==Le cas particulier des processeurs 4 bits : le 4004 d'Intel== L'Intel 4004 était le tout premier micro-processeur. Il s'agissait d'un microprocesseur de 4 bits, basé sur une architecture à accumulateur. Il disposait d'un accumulateur et de 16 registres d'indice, tous de 4 bits. Il faisait des calculs sur des données de 4 bits, appelées des nibbles. Cependant, sur ses 46 instructions machines supportées, 41 agissaient sur des opérandes de 8 bits, les 5 restantes sur des opérandes de 16 bits. Simplement, les calculs se faisaient en deux fois, en échangeant des données entre mémoire RAM et accumulateur. Le 4004 est un circuit intégré avec peu de broches. Il dispose notamment d'un bus de données/adresse, qui est multiplexé, c’est-à-dire qu'il sert alternativement de bus de données et de bus d'adresse selon les besoins. Le bus de commande mémoire fait 5 bits, dont 4 pour les chips de RAM, un pour la ROM. Les adresses sont codées sur 12 bits, les données sur 4 et les instructions sur 8 bits. L'envoi d'une adresse sur le bus se fait en plusieurs fois, de même que la lecture d'une instruction. Il s'agit là d'une adaptation pour outrepasser les limitations d'un processeur 4 bit. [[File:Intel 4004 processor pinout.png|centre|vignette|upright=2|Broches de l'Intel 4004. Nous verrons à quoi elles servent plus bas.]] ===L'espace d'adressage de l'Intel 4004=== Les adresses du processeur sont sur 12 bits, ce qui fait 4096 adresses différentes. Elles regroupent à la fois la ROM et la mémoire RAM, vu que l'architecture est une sorte de mélange bizarre entre une architecture Von Neumann et Harvard. Le processeur gère bien deux espaces d'adressage séparés, mais la RAM et la ROM sont reliés au même bus. La sortie CM-ROM du processeur indique si l'adresse envoyée correspond à la RAM ou la ROM. Un circuit de décodage d'adresse active ou désactive la RAM selon la valeur de ce bit, l'inverse pour la ROM, en agissant sur leurs bits Chip Select. Seule la RAM ou la ROM répondent alors à l'adresse. Pour ce qui est de la RAM, le circuit de décodage d'adresse pouvait gérer au maximum 1024 adresses différentes, chacune contenant un nibble. Pour cela, le CPU 4004 était relié à une ou plusieurs RAM externes, des Intel 4002. Chaque Intel 4002 contenait 64 nibbles de données, plus 16 nibbles de statut qu'on ne détaillera pas ici. Les nibbles de statut étaient accessibles en utilisant des instructions d'entrée-sortie, donc pas avec des lectures/écritures mémoire. Les 64 nibbles de données sont découpés en 4 groupes de 16 nibbles. Le CPU pouvait être relié à maximum 16 Intel 4002, ce qui fait 1024 nibbles de données et 256 nibbles de statut. L'ensemble permet de remplir l'espace d'adressage de 1024 adresses. ===Le registre de page et le pseudo-aliasing des registres=== Sélectionner une adresse mémoire utilisait un mélange entre pseudo-aliasing et registre de page. Pour les données, les 1024 adresses étaient découpées en 4 pages de 256 adresses. Pour la ROM, les 4096 adresses étaient découpées en 16 pages de 256 adresses. Localiser une donnée dans une page ne requiert que 8 bits, 2/4 bits supplémentaires permettent de sélectionner la page voulue. Le registre de page était dans le processeur lui-même, et était relié aux sorties du processeur nommées CM-RAM 0, 1, 2 et 3. Les 4 sorties encodaient un nombre qui permet de sélectionner le numéro de page voulu. Le registre de page fait 5 bits : un pour distinguer RAM et ROM, 4 bits pour sélectionner la page voulue. L'avantage est que la carte mère gère au maximum 16 chips de RAM, ce qui colle parfaitement avec les 4 utilisés pour sélectionner une page. Un chip de RAM correspond à une page, et chacun est activé ou désactivé suivant la page sélectionnée. Pour cela, il suffit d'ajouter un décodeur sur la carte mère, qui prend les 4 bits du registre de page et fournit les signaux Chip Select aux différents chips de RAM. Reste alors à utiliser les 8 bits d'adresse à l'intérieur d'un chip de RAM. Le 4004 permettait de concaténer deux registres d'indice de 4 bits pour former une adresse de 8 bits. Les instructions d'accès mémoire pouvaient ainsi préciser une paire de registre d'indice pour préciser quelle adresse lire/écrire. Idem pour les branchements indirects : le processeur supportait une instruction de branchement indirect qui précisait l'adresse dans une paire de registres d'indice. Les registres d'indice sont donc assez mal nommés sur cette architecture, vu qu'ils peuvent servir soit de registre d'indice, soit de demi-registre d'adresse. Il s'agit là du système de pseudo-aliasing des registres, mais appliqué aux registres d'indice. L'Intel 4004 gérait deux instructions pour gérer les adresses mémoires. La première, l'instruction DCL (''Designate Command Line'') configure le registre de page. Elle prend en entrée un numéro de page et le copie dans le registre de page. L'opérande peut provenir d'un registre d'indice ou de l'accumulateur. La seconde, l'instruction SRC (''Send Register Control'') concatène deux registres d'indice pour obtenir une adresse de 8 bits. Un accès mémoire se fait donc en maximum trois instructions : une qui configure le registre de page si ce n'est pas déjà fait, une instruction SRC pour envoyer l'adresse, et une troisième instruction qui dit s'il faut faire une lecture ou une écriture. ===La microarchitecture de l'Intel 4004=== Il incorporait une pile d'adresse de retour intégrée au processeur. La pile d'adresse acceptait exactement 3 adresses maximum. Elle était regroupée avec le ''program counter'' dans un banc de registre, de 4 registres. Le ''program counter'' et le pointeur de pile faisaient chacun 12 bits, soit trois nibble. Ils étaient incrémentés par un incrémenteur dédié. SI on omet le registre de page et la pile d'adresse, le 4004 est une architecture à accumulateur des plus classiques, avec un bus interne unique, un banc de registre pour les registres d'indices, un accumulateur relié à une unité de calcul. Les registres d'indice étaient dans un banc de registre séparés, car ils faisaient 4 bits chacun, contrairement au pointeur de pile et le ''program counter''. Un détail important est que les bancs de registres du 4004 étaient implémentés avec de la DRAM, et non des registres usuels fabriqués avec des bascules 1 bit. [[File:Microarchitecture de l'Intel 4004.png|centre|vignette|upright=2.5|Microarchitecture de l'Intel 4004]] <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=Les architectures à pile et mémoire-mémoire | prevText=Les architectures à pile et mémoire-mémoire | next=L'espace d'adressage du processeur | nextText=L'espace d'adressage du processeur }} </noinclude> arknbekzufhx0dhv3tn9icn8lozblih Manuel de terminale de philosophie/Liberté 0 83121 765850 753714 2026-05-03T04:19:42Z PandaMystique 119061 765850 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu manipulé, intimidé, endetté, soumis à une publicité massive ou à des normes sociales pesantes peut ne rencontrer aucun obstacle matériel et n'être pourtant pas pleinement libre. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs : si tout dans nos pensées est déterminé, dans quelle mesure nos décisions nous appartiennent-elles ? L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. C'est aussi vivre sous des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement ; un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions. == Les deux grandes conceptions de la liberté == Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), partie I, chapitre XI, Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), livre II, chapitre XXI, §8-15, trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Les analyses compatibilistes contemporaines ajoutent à cette première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. == Liberté et raison : la conception de Kant == Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), partie II, proposition 35 et son scolie, trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Le serveur de café qui s'identifie totalement à sa fonction, ou le timide qui dit « je suis comme cela, je n'y peux rien », sont des exemples sartriens d'une fuite devant la responsabilité<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La liberté sartrienne n'est pas un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Elle n'est pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == La liberté ne se joue pas seulement dans la conscience individuelle. Elle se déploie aussi dans la vie collective. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref>. == Liberté formelle et liberté réelle : la critique de Marx == Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Le concept de liberté traverse plusieurs débats actuels. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne ou la prévention des dommages. == Conclusion == La liberté apparaît comme une notion plurielle. Elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} i0qq4bv568lmgi35jwlsexuslbc05pu 765851 765850 2026-05-03T04:24:22Z PandaMystique 119061 /* Notes et Références */ 765851 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu manipulé, intimidé, endetté, soumis à une publicité massive ou à des normes sociales pesantes peut ne rencontrer aucun obstacle matériel et n'être pourtant pas pleinement libre. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs : si tout dans nos pensées est déterminé, dans quelle mesure nos décisions nous appartiennent-elles ? L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. C'est aussi vivre sous des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement ; un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions. == Les deux grandes conceptions de la liberté == Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), partie I, chapitre XI, Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), livre II, chapitre XXI, §8-15, trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Les analyses compatibilistes contemporaines ajoutent à cette première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. == Liberté et raison : la conception de Kant == Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), partie II, proposition 35 et son scolie, trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Le serveur de café qui s'identifie totalement à sa fonction, ou le timide qui dit « je suis comme cela, je n'y peux rien », sont des exemples sartriens d'une fuite devant la responsabilité<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La liberté sartrienne n'est pas un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Elle n'est pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == La liberté ne se joue pas seulement dans la conscience individuelle. Elle se déploie aussi dans la vie collective. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref>. == Liberté formelle et liberté réelle : la critique de Marx == Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Le concept de liberté traverse plusieurs débats actuels. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne ou la prévention des dommages. == Conclusion == La liberté apparaît comme une notion plurielle. Elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''Système de la nature'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''Fondements de la métaphysique des mœurs'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''Essai philosophique concernant l'entendement humain'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''De la liberté'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''Du contrat social'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''Éthique'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} bv77glgy0d99vt7a9y6c3psboa7fkex 765852 765851 2026-05-03T04:30:59Z PandaMystique 119061 /* Sources primaires */ 765852 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu manipulé, intimidé, endetté, soumis à une publicité massive ou à des normes sociales pesantes peut ne rencontrer aucun obstacle matériel et n'être pourtant pas pleinement libre. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs : si tout dans nos pensées est déterminé, dans quelle mesure nos décisions nous appartiennent-elles ? L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. C'est aussi vivre sous des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement ; un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions. == Les deux grandes conceptions de la liberté == Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), partie I, chapitre XI, Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), livre II, chapitre XXI, §8-15, trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Les analyses compatibilistes contemporaines ajoutent à cette première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. == Liberté et raison : la conception de Kant == Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), partie II, proposition 35 et son scolie, trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Le serveur de café qui s'identifie totalement à sa fonction, ou le timide qui dit « je suis comme cela, je n'y peux rien », sont des exemples sartriens d'une fuite devant la responsabilité<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La liberté sartrienne n'est pas un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Elle n'est pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == La liberté ne se joue pas seulement dans la conscience individuelle. Elle se déploie aussi dans la vie collective. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref>. == Liberté formelle et liberté réelle : la critique de Marx == Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Le concept de liberté traverse plusieurs débats actuels. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne ou la prévention des dommages. == Conclusion == La liberté apparaît comme une notion plurielle. Elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} kl2yz83rzfu7pw2dgytbj6nnkahvakh 765853 765852 2026-05-03T04:32:53Z PandaMystique 119061 /* Le problème du libre arbitre */ 765853 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu manipulé, intimidé, endetté, soumis à une publicité massive ou à des normes sociales pesantes peut ne rencontrer aucun obstacle matériel et n'être pourtant pas pleinement libre. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs : si tout dans nos pensées est déterminé, dans quelle mesure nos décisions nous appartiennent-elles ? L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. C'est aussi vivre sous des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement ; un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions. == Les deux grandes conceptions de la liberté == Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), livre II, chapitre XXI, §8-15, trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Les analyses compatibilistes contemporaines ajoutent à cette première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. == Liberté et raison : la conception de Kant == Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), partie II, proposition 35 et son scolie, trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Le serveur de café qui s'identifie totalement à sa fonction, ou le timide qui dit « je suis comme cela, je n'y peux rien », sont des exemples sartriens d'une fuite devant la responsabilité<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La liberté sartrienne n'est pas un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Elle n'est pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == La liberté ne se joue pas seulement dans la conscience individuelle. Elle se déploie aussi dans la vie collective. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref>. == Liberté formelle et liberté réelle : la critique de Marx == Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Le concept de liberté traverse plusieurs débats actuels. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne ou la prévention des dommages. == Conclusion == La liberté apparaît comme une notion plurielle. Elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} kuo0344wkp8p98xxrt362hkl0zrs1zk 765854 765853 2026-05-03T04:34:32Z PandaMystique 119061 /* Le problème du libre arbitre */ 765854 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu manipulé, intimidé, endetté, soumis à une publicité massive ou à des normes sociales pesantes peut ne rencontrer aucun obstacle matériel et n'être pourtant pas pleinement libre. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs : si tout dans nos pensées est déterminé, dans quelle mesure nos décisions nous appartiennent-elles ? L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. C'est aussi vivre sous des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement ; un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions. == Les deux grandes conceptions de la liberté == Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), [[s:Essai philosophique concernant l’entendement humain/Livre 2/Chapitre 21|livre II, chapitre XXI, §8-15]], trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Les analyses compatibilistes contemporaines ajoutent à cette première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. == Liberté et raison : la conception de Kant == Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), partie II, proposition 35 et son scolie, trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Le serveur de café qui s'identifie totalement à sa fonction, ou le timide qui dit « je suis comme cela, je n'y peux rien », sont des exemples sartriens d'une fuite devant la responsabilité<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La liberté sartrienne n'est pas un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Elle n'est pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == La liberté ne se joue pas seulement dans la conscience individuelle. Elle se déploie aussi dans la vie collective. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref>. == Liberté formelle et liberté réelle : la critique de Marx == Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Le concept de liberté traverse plusieurs débats actuels. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne ou la prévention des dommages. == Conclusion == La liberté apparaît comme une notion plurielle. Elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} 6dilhs0j74rnjkyqrfwjh5ic040jmjj 765855 765854 2026-05-03T04:37:02Z PandaMystique 119061 /* Liberté et nécessité : la conception de Spinoza */ 765855 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu manipulé, intimidé, endetté, soumis à une publicité massive ou à des normes sociales pesantes peut ne rencontrer aucun obstacle matériel et n'être pourtant pas pleinement libre. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs : si tout dans nos pensées est déterminé, dans quelle mesure nos décisions nous appartiennent-elles ? L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. C'est aussi vivre sous des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement ; un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions. == Les deux grandes conceptions de la liberté == Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), [[s:Essai philosophique concernant l’entendement humain/Livre 2/Chapitre 21|livre II, chapitre XXI, §8-15]], trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Les analyses compatibilistes contemporaines ajoutent à cette première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. == Liberté et raison : la conception de Kant == Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), [[s:Page:Spinoza - Éthique, trad. Appuhn, 1913.djvu/201|partie II, proposition 35 et son scolie]], trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Le serveur de café qui s'identifie totalement à sa fonction, ou le timide qui dit « je suis comme cela, je n'y peux rien », sont des exemples sartriens d'une fuite devant la responsabilité<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La liberté sartrienne n'est pas un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Elle n'est pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == La liberté ne se joue pas seulement dans la conscience individuelle. Elle se déploie aussi dans la vie collective. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref>. == Liberté formelle et liberté réelle : la critique de Marx == Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Le concept de liberté traverse plusieurs débats actuels. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne ou la prévention des dommages. == Conclusion == La liberté apparaît comme une notion plurielle. Elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} h1z1742ch8esca2uh78ef3cezskc7ao 765856 765855 2026-05-03T04:52:02Z PandaMystique 119061 765856 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == La liberté compte parmi les notions cardinales de la philosophie. Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu peut très bien faire ce qu'il croit vouloir sans pour autant être pleinement libre. L'adolescent qui adopte une marque de vêtements parce qu'il est moqué dans le cas contraire ne se sent peut-être empêché par rien, et il « choisit » pourtant sous la pression du groupe. La personne dépendante au tabac fume « ce qu'elle veut », mais sa dépendance dicte une partie du désir. L'électeur dont les opinions sont massivement façonnées par les contenus qu'on lui suggère croit voter librement, sans toujours mesurer combien son jugement a été orienté. Manipulation, intimidation, endettement, publicité, normes sociales pesantes : autant de forces qui agissent sans laisser de traces visibles. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs. Si nos pensées et nos goûts dépendent de notre éducation, de notre milieu, de notre cerveau et de notre histoire, dans quelle mesure nos décisions nous appartiennent-elles ? Cette question, qui paraît abstraite, surgit dès qu'on se demande pourquoi on aime tel sport, telle musique ou telle personne plutôt qu'une autre. L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. Le détenu, l'otage ou le malade alité voient leur liberté physique entravée. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. Les lois qui interdisaient autrefois aux femmes de voter ou imposaient la ségrégation raciale étaient légales sans pour autant garantir la liberté. La liberté politique authentique suppose des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Celui qui agit par colère, par habitude ou par peur du jugement d'autrui peut, en ce sens, n'être pas pleinement libre. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement, comme l'ont montré les écrits de prisonniers politiques. À l'inverse, un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions ou à ses peurs. == Les deux grandes conceptions de la liberté == Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. Le droit de circuler sans autorisation préalable, le droit d'exprimer une opinion sans être inquiété, le droit de choisir sa religion ou son mode de vie : autant d'illustrations de cette liberté entendue comme « ne pas être empêché ». La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Avoir reçu une éducation qui forme le jugement, disposer des informations nécessaires pour faire un choix éclairé, savoir résister à ses impulsions immédiates : ces capacités sont autant de conditions positives de l'autonomie. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité : on contraignait les individus « pour leur propre bien », au nom d'un « véritable peuple » que les dirigeants prétendaient incarner mieux que les citoyens eux-mêmes. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), [[s:Essai philosophique concernant l’entendement humain/Livre 2/Chapitre 21|livre II, chapitre XXI, §8-15]], trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Que mon goût pour la lecture vienne d'une éducation reçue n'enlève rien au fait que, lorsque je lis tranquillement chez moi, personne ne m'y oblige. Cette première approche se heurte toutefois à des cas embarrassants. Une personne sous hypnose fait « ce qu'elle veut » au sens où elle ne sent aucune contrainte, mais on hésite à dire qu'elle est libre. Le kleptomane qui vole un objet en obéissant à une impulsion qu'il ne maîtrise pas fait, lui aussi, « ce qu'il veut », sans pour autant être pleinement maître de lui. L'individu sous l'emprise d'une secte exécute volontairement ce qu'on lui demande, mais on parle bien d'aliénation. Les analyses compatibilistes contemporaines ajoutent donc à la première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir prendre du recul sur ses désirs, et pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. == Liberté et raison : la conception de Kant == Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Aimer ses proches non plus. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. Un exemple permet de saisir la nuance. Imaginons quelqu'un qui trouve un portefeuille rempli de billets dans la rue. S'il le rend par crainte d'avoir été filmé par une caméra, il agit par intérêt. S'il le rend parce qu'il a un caractère naturellement honnête et qu'il ne pourrait pas faire autrement sans malaise, il agit par inclination. Dans les deux cas, l'action est correcte mais ne traduit pas, selon Kant, une véritable volonté morale. C'est lorsqu'il rend le portefeuille en se disant qu'il faut le faire parce qu'aucun être raisonnable ne peut accepter le vol comme règle universelle, qu'il agit véritablement par devoir, et donc librement. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément par ses humeurs ou ses peurs. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), [[s:Page:Spinoza - Éthique, trad. Appuhn, 1913.djvu/201|partie II, proposition 35 et son scolie]], trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. L'analyse vaut aussi pour nos passions humaines. Celui qui éprouve une jalousie violente sans en comprendre l'origine se croit libre de haïr l'autre, alors qu'il subit en réalité une blessure d'enfance, une comparaison sociale ou une peur qu'il n'identifie pas. Le fumeur qui « choisit » d'allumer une cigarette ignore souvent à quel point son geste est commandé par la dépendance physique et par les automatismes acquis. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. Comprendre que ma colère naît de la fatigue, ou que ma tristesse découle d'une blessure ancienne, change ma manière d'agir : ce qui me dominait à mon insu devient un objet sur lequel j'ai prise. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Sartre prend l'exemple célèbre du serveur de café qui exécute son service avec un peu trop de vivacité, comme s'il jouait un rôle de serveur : il s'efforce d'être serveur comme une chaise est une chaise, pour s'épargner d'avoir à choisir librement chacun de ses gestes. Le timide qui dit « je suis comme cela, je n'y peux rien » utilise sa timidité comme une excuse pour ne pas prendre la parole, alors qu'il pourrait, dans chaque situation, décider d'agir autrement<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La mauvaise foi se reconnaît dans des formules courantes : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». Sartre y voit autant de tentatives pour se transformer en chose et fuir la responsabilité d'avoir à se définir. La liberté sartrienne n'est pas pour autant un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Sartre lui-même illustre ce point en évoquant la France sous l'Occupation : on ne choisit pas l'invasion ni l'oppression, mais on choisit toujours comment y réagir, par la collaboration, l'attentisme ou la résistance. La liberté n'est donc pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == La liberté ne se joue pas seulement dans la conscience individuelle. Elle se déploie aussi dans la vie collective. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Un exemple aide à saisir la différence. Si l'on demandait à chaque automobiliste, en pensant à lui-même, s'il préfère rouler vite, la majorité répondrait oui : c'est la volonté de tous. Si l'on demande aux mêmes personnes, comme citoyens partageant les routes avec des piétons, des enfants et d'autres conducteurs, si une limitation de vitesse est souhaitable, la réponse devient autre : c'est la volonté générale. La même remarque vaut pour l'impôt, la vaccination ou la protection de l'environnement, qui peuvent contrarier l'intérêt immédiat de chacun tout en exprimant ce que veulent les citoyens en tant que membres d'une communauté. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Au dix-neuvième siècle, une femme qui refusait le mariage ou un homme qui choisissait une carrière artistique pouvaient être parfaitement libres au regard de la loi, et pourtant accablés par la réprobation collective. Aujourd'hui, le harcèlement scolaire, les campagnes de dénonciation sur les réseaux sociaux, la pression du conformisme vestimentaire ou des codes sociaux du groupe illustrent la même mécanique : aucune sanction légale, mais une contrainte morale parfois étouffante. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Choisir un régime alimentaire original, pratiquer un sport à risque, mener une vie discrète ou marginale : tant que personne d'autre n'en pâtit, la société n'a pas à intervenir. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée. Interdire à quelqu'un de fumer chez lui relève, selon Mill, d'une intrusion injustifiée ; lui interdire de fumer dans un lieu où d'autres respireront sa fumée se justifie au nom de leur santé. Cette distinction reste discutée aujourd'hui : à partir de quel seuil un acte « personnel » a-t-il des effets sur les autres et appelle-t-il une régulation collective<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref> ? == Liberté formelle et liberté réelle : la critique de Marx == Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Un travailleur qui doit accepter n'importe quel emploi pour nourrir sa famille n'est pas, à proprement parler, contraint par la loi : on lui reconnaît la liberté de refuser. Mais cette liberté formelle ne pèse pas lourd face à la nécessité de manger. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Le concept de liberté traverse plusieurs débats actuels. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. L'élève qui doit choisir son orientation dans un système où les voies sont nombreuses peut se sentir paralysé, là où une orientation imposée semblait plus simple. Le consommateur qui dispose de centaines de produits hésite parfois plus que celui qui n'en avait que trois. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Faut-il interdire les paris en ligne, encadrer les régimes amaigrissants, limiter le temps passé sur les écrans ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne, qui inclut le droit de prendre des risques avec sa propre vie, ou la prévention des dommages, qui justifie certaines interdictions au nom du bien-être à long terme. == Conclusion == La liberté apparaît comme une notion plurielle. Elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} fzwi27wlbluvh94nxy73de2gzi8zd4h 765857 765856 2026-05-03T05:37:24Z PandaMystique 119061 765857 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu peut très bien faire ce qu'il croit vouloir sans pour autant être pleinement libre. L'adolescent qui adopte une marque de vêtements parce qu'il est moqué dans le cas contraire ne se sent peut-être empêché par rien, et il « choisit » pourtant sous la pression du groupe. La personne dépendante au tabac fume « ce qu'elle veut », mais sa dépendance dicte une partie du désir. L'électeur dont les opinions sont massivement façonnées par les contenus qu'on lui suggère croit voter librement, sans toujours mesurer combien son jugement a été orienté. Manipulation, intimidation, endettement, publicité, normes sociales pesantes : autant de forces qui agissent sans laisser de traces visibles. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs. Si nos pensées et nos goûts dépendent de notre éducation, de notre milieu, de notre cerveau et de notre histoire, dans quelle mesure nos décisions nous appartiennent-elles ? Cette question, qui paraît abstraite, surgit dès qu'on se demande pourquoi on aime tel sport, telle musique ou telle personne plutôt qu'une autre. L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. Le détenu, l'otage ou le malade alité voient leur liberté physique entravée. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. Les lois qui interdisaient autrefois aux femmes de voter ou imposaient la ségrégation raciale étaient légales sans pour autant garantir la liberté. La liberté politique authentique suppose des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Celui qui agit par colère, par habitude ou par peur du jugement d'autrui peut, en ce sens, n'être pas pleinement libre. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement, comme l'ont montré les écrits de prisonniers politiques. À l'inverse, un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions ou à ses peurs. == Les deux grandes conceptions de la liberté == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté négative et liberté positive'' ''Liberté négative'' : absence d'obstacles. Exemples : libertés de circuler, d'expression, de conscience. ''Liberté positive'' : pouvoir d'agir selon sa volonté propre. Exemples : éducation, information fiable, maîtrise de soi. Berlin met en garde contre l'usage autoritaire de la liberté positive : un pouvoir peut prétendre savoir mieux que les individus quelle est leur « vraie volonté ». </div> Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. Le droit de circuler sans autorisation préalable, le droit d'exprimer une opinion sans être inquiété, le droit de choisir sa religion ou son mode de vie : autant d'illustrations de cette liberté entendue comme « ne pas être empêché ». La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Avoir reçu une éducation qui forme le jugement, disposer des informations nécessaires pour faire un choix éclairé, savoir résister à ses impulsions immédiates : ces capacités sont autant de conditions positives de l'autonomie. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité : on contraignait les individus « pour leur propre bien », au nom d'un « véritable peuple » que les dirigeants prétendaient incarner mieux que les citoyens eux-mêmes. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : trois positions sur le libre arbitre'' ''Déterminisme dur'' : tout est fixé, donc nous ne sommes pas libres et la responsabilité morale s'effondre (Holbach). ''Libertarisme'' : nous sommes libres parce que certains de nos choix échappent à la chaîne causale. ''Compatibilisme'' : être libre, ce n'est pas être sans cause ; c'est agir selon ses propres raisons, sans manipulation ni contrainte écrasante (Locke, Hume, analyses contemporaines). </div> La distinction entre liberté négative et liberté positive permet de cartographier les sens du mot « libre », mais elle laisse entière une question plus profonde : suis-je seulement capable de choisir ? Avant de demander si la société me laisse libre, il faut demander si, au fond de moi, je suis l'auteur de ce que je veux. C'est le problème du libre arbitre. Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), [[s:Essai philosophique concernant l’entendement humain/Livre 2/Chapitre 21|livre II, chapitre XXI, §8-15]], trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Que mon goût pour la lecture vienne d'une éducation reçue n'enlève rien au fait que, lorsque je lis tranquillement chez moi, personne ne m'y oblige. Cette première approche se heurte toutefois à des cas embarrassants. Une personne sous hypnose fait « ce qu'elle veut » au sens où elle ne sent aucune contrainte, mais on hésite à dire qu'elle est libre. Le kleptomane qui vole un objet en obéissant à une impulsion qu'il ne maîtrise pas fait, lui aussi, « ce qu'il veut », sans pour autant être pleinement maître de lui. L'individu sous l'emprise d'une secte exécute volontairement ce qu'on lui demande, mais on parle bien d'aliénation. Les analyses compatibilistes contemporaines ajoutent donc à la première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir prendre du recul sur ses désirs, et pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. Ces conditions invitent à préciser ce que signifie « agir selon ses propres raisons ». Plusieurs philosophes ont cherché à montrer qu'une telle action suppose une discipline interne, une fidélité à des principes que la raison se donne. Trois figures majeures, Kant, Spinoza et Sartre, proposent à ce sujet des analyses différentes mais complémentaires. == Liberté et raison : la conception de Kant == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : autonomie et hétéronomie'' ''Autonomie'' (''autos'', soi-même ; ''nomos'', loi) : se donner à soi-même la loi qu'on suit. ''Hétéronomie'' (''heteros'', autre) : recevoir sa loi d'ailleurs que de soi (désirs, traditions, ordres reçus). ''Agir par devoir'' : par respect d'une loi que la raison reconnaît, et non par intérêt ou inclination spontanée. C'est en ce sens, pour Kant, que l'on est véritablement libre. </div> Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Aimer ses proches non plus. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. Un exemple permet de saisir la nuance. Imaginons quelqu'un qui trouve un portefeuille rempli de billets dans la rue. S'il le rend par crainte d'avoir été filmé par une caméra, il agit par intérêt. S'il le rend parce qu'il a un caractère naturellement honnête et qu'il ne pourrait pas faire autrement sans malaise, il agit par inclination. Dans les deux cas, l'action est correcte mais ne traduit pas, selon Kant, une véritable volonté morale. C'est lorsqu'il rend le portefeuille en se disant qu'il faut le faire parce qu'aucun être raisonnable ne peut accepter le vol comme règle universelle, qu'il agit véritablement par devoir, et donc librement. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément par ses humeurs ou ses peurs. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Là où Kant fonde la liberté sur la capacité de la raison à s'opposer aux inclinations, Spinoza propose une voie sensiblement différente. Il ne sépare pas la liberté de la nécessité, mais la pense au sein même de l'ordre causal qui régit la nature. Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), [[s:Page:Spinoza - Éthique, trad. Appuhn, 1913.djvu/201|partie II, proposition 35 et son scolie]], trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. L'analyse vaut aussi pour nos passions humaines. Celui qui éprouve une jalousie violente sans en comprendre l'origine se croit libre de haïr l'autre, alors qu'il subit en réalité une blessure d'enfance, une comparaison sociale ou une peur qu'il n'identifie pas. Le fumeur qui « choisit » d'allumer une cigarette ignore souvent à quel point son geste est commandé par la dépendance physique et par les automatismes acquis. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. Comprendre que ma colère naît de la fatigue, ou que ma tristesse découle d'une blessure ancienne, change ma manière d'agir : ce qui me dominait à mon insu devient un objet sur lequel j'ai prise. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : la mauvaise foi'' ''Mauvaise foi'' : se mentir à soi-même pour fuir sa liberté, en se présentant comme une chose, un rôle figé ou une nature inchangeable. ''Signes courants'' : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». ''Liberté en situation'' : on ne choisit pas les circonstances (corps, époque, classe sociale), mais on choisit toujours comment y répondre. </div> Kant cherchait dans la raison un fondement universel de la liberté ; Spinoza la situait dans la connaissance des causes. Au vingtième siècle, Sartre déplace encore le problème : il ne s'agit plus de fonder ou de comprendre la liberté, mais de prendre acte du fait que l'existant humain ne peut s'y soustraire. Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Sartre prend l'exemple célèbre du serveur de café qui exécute son service avec un peu trop de vivacité, comme s'il jouait un rôle de serveur : il s'efforce d'être serveur comme une chaise est une chaise, pour s'épargner d'avoir à choisir librement chacun de ses gestes. Le timide qui dit « je suis comme cela, je n'y peux rien » utilise sa timidité comme une excuse pour ne pas prendre la parole, alors qu'il pourrait, dans chaque situation, décider d'agir autrement<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La mauvaise foi se reconnaît dans des formules courantes : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». Sartre y voit autant de tentatives pour se transformer en chose et fuir la responsabilité d'avoir à se définir. La liberté sartrienne n'est pas pour autant un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Sartre lui-même illustre ce point en évoquant la France sous l'Occupation : on ne choisit pas l'invasion ni l'oppression, mais on choisit toujours comment y réagir, par la collaboration, l'attentisme ou la résistance. La liberté n'est donc pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : volonté générale et volonté de tous'' ''Volonté de tous'' : somme des volontés particulières, chacune guidée par son intérêt propre. ''Volonté générale'' : ce que veulent les citoyens en tant que membres d'une communauté soucieuse du bien commun. ''Liberté civile'' : « l'obéissance à la loi qu'on s'est prescrite est liberté ». En obéissant à la loi qui exprime la volonté générale, le citoyen obéit à lui-même. </div> Jusqu'ici, la liberté a été examinée du côté de l'agent : capacité de choisir, autonomie de la raison, connaissance des causes, projet existentiel. Mais nul ne vit seul. La liberté individuelle se déploie dans une vie collective qui en conditionne l'exercice. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Un exemple aide à saisir la différence. Si l'on demandait à chaque automobiliste, en pensant à lui-même, s'il préfère rouler vite, la majorité répondrait oui : c'est la volonté de tous. Si l'on demande aux mêmes personnes, comme citoyens partageant les routes avec des piétons, des enfants et d'autres conducteurs, si une limitation de vitesse est souhaitable, la réponse devient autre : c'est la volonté générale. La même remarque vaut pour l'impôt, la vaccination ou la protection de l'environnement, qui peuvent contrarier l'intérêt immédiat de chacun tout en exprimant ce que veulent les citoyens en tant que membres d'une communauté. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. Au siècle suivant, la question politique de la liberté se déplace. Le danger principal n'est plus seulement l'absence de loi commune, mais l'étouffement des individualités par la masse, le conformisme et l'opinion publique. C'est ce que va analyser Mill. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Au dix-neuvième siècle, une femme qui refusait le mariage ou un homme qui choisissait une carrière artistique pouvaient être parfaitement libres au regard de la loi, et pourtant accablés par la réprobation collective. Aujourd'hui, le harcèlement scolaire, les campagnes de dénonciation sur les réseaux sociaux, la pression du conformisme vestimentaire ou des codes sociaux du groupe illustrent la même mécanique : aucune sanction légale, mais une contrainte morale parfois étouffante. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Choisir un régime alimentaire original, pratiquer un sport à risque, mener une vie discrète ou marginale : tant que personne d'autre n'en pâtit, la société n'a pas à intervenir. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée. Interdire à quelqu'un de fumer chez lui relève, selon Mill, d'une intrusion injustifiée ; lui interdire de fumer dans un lieu où d'autres respireront sa fumée se justifie au nom de leur santé. Cette distinction reste discutée aujourd'hui : à partir de quel seuil un acte « personnel » a-t-il des effets sur les autres et appelle-t-il une régulation collective<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref> ? == Liberté formelle et liberté réelle : la critique de Marx == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté formelle et liberté réelle'' ''Liberté formelle'' : liberté juridiquement reconnue (libertés d'expression, de circuler, de s'instruire, de travailler). ''Liberté réelle'' : capacité effective d'exercer ces droits, qui suppose des ressources (revenu, éducation, accès à l'information, santé). Sans correction sociale, les libertés formelles risquent de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique est prolongée par l'approche des « capabilités » d'A. Sen et M. Nussbaum. </div> Rousseau et Mill pensent la liberté politique sous l'angle de la légitimité de la loi et de la résistance au conformisme. Une autre critique apparaît au dix-neuvième siècle : la liberté juridiquement reconnue n'a pas la même portée pour celui qui possède et pour celui qui ne possède pas. Marx oblige ainsi à mesurer la part des conditions matérielles dans l'exercice effectif de la liberté. Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Un travailleur qui doit accepter n'importe quel emploi pour nourrir sa famille n'est pas, à proprement parler, contraint par la loi : on lui reconnaît la liberté de refuser. Mais cette liberté formelle ne pèse pas lourd face à la nécessité de manger. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Les doctrines parcourues ne sont pas des reliques d'histoire. Elles continuent d'éclairer les débats actuels sur la responsabilité, les sciences de l'homme, les inégalités sociales et la régulation des modes de vie. Reprenons quatre champs où la question de la liberté est aujourd'hui particulièrement vive. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. L'élève qui doit choisir son orientation dans un système où les voies sont nombreuses peut se sentir paralysé, là où une orientation imposée semblait plus simple. Le consommateur qui dispose de centaines de produits hésite parfois plus que celui qui n'en avait que trois. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Faut-il interdire les paris en ligne, encadrer les régimes amaigrissants, limiter le temps passé sur les écrans ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne, qui inclut le droit de prendre des risques avec sa propre vie, ou la prévention des dommages, qui justifie certaines interdictions au nom du bien-être à long terme. == Conclusion == Au terme de ce parcours, la liberté apparaît moins comme une notion à définir une fois pour toutes que comme un problème à articuler dans plusieurs registres : individuel et politique, négatif et positif, formel et réel. Selon les auteurs, elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''Système de la nature'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''Fondements de la métaphysique des mœurs'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''Essai philosophique concernant l'entendement humain'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''De la liberté'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''Du contrat social'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''Éthique'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} 1px2t166l215fvjixi0ugga0ydro99x 765858 765857 2026-05-03T05:39:05Z PandaMystique 119061 /* Bibliographie */ 765858 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221-222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu peut très bien faire ce qu'il croit vouloir sans pour autant être pleinement libre. L'adolescent qui adopte une marque de vêtements parce qu'il est moqué dans le cas contraire ne se sent peut-être empêché par rien, et il « choisit » pourtant sous la pression du groupe. La personne dépendante au tabac fume « ce qu'elle veut », mais sa dépendance dicte une partie du désir. L'électeur dont les opinions sont massivement façonnées par les contenus qu'on lui suggère croit voter librement, sans toujours mesurer combien son jugement a été orienté. Manipulation, intimidation, endettement, publicité, normes sociales pesantes : autant de forces qui agissent sans laisser de traces visibles. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs. Si nos pensées et nos goûts dépendent de notre éducation, de notre milieu, de notre cerveau et de notre histoire, dans quelle mesure nos décisions nous appartiennent-elles ? Cette question, qui paraît abstraite, surgit dès qu'on se demande pourquoi on aime tel sport, telle musique ou telle personne plutôt qu'une autre. L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. Le détenu, l'otage ou le malade alité voient leur liberté physique entravée. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. Les lois qui interdisaient autrefois aux femmes de voter ou imposaient la ségrégation raciale étaient légales sans pour autant garantir la liberté. La liberté politique authentique suppose des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Celui qui agit par colère, par habitude ou par peur du jugement d'autrui peut, en ce sens, n'être pas pleinement libre. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement, comme l'ont montré les écrits de prisonniers politiques. À l'inverse, un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions ou à ses peurs. == Les deux grandes conceptions de la liberté == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté négative et liberté positive'' ''Liberté négative'' : absence d'obstacles. Exemples : libertés de circuler, d'expression, de conscience. ''Liberté positive'' : pouvoir d'agir selon sa volonté propre. Exemples : éducation, information fiable, maîtrise de soi. Berlin met en garde contre l'usage autoritaire de la liberté positive : un pouvoir peut prétendre savoir mieux que les individus quelle est leur « vraie volonté ». </div> Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167-218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. Le droit de circuler sans autorisation préalable, le droit d'exprimer une opinion sans être inquiété, le droit de choisir sa religion ou son mode de vie : autant d'illustrations de cette liberté entendue comme « ne pas être empêché ». La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Avoir reçu une éducation qui forme le jugement, disposer des informations nécessaires pour faire un choix éclairé, savoir résister à ses impulsions immédiates : ces capacités sont autant de conditions positives de l'autonomie. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité : on contraignait les individus « pour leur propre bien », au nom d'un « véritable peuple » que les dirigeants prétendaient incarner mieux que les citoyens eux-mêmes. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : trois positions sur le libre arbitre'' ''Déterminisme dur'' : tout est fixé, donc nous ne sommes pas libres et la responsabilité morale s'effondre (Holbach). ''Libertarisme'' : nous sommes libres parce que certains de nos choix échappent à la chaîne causale. ''Compatibilisme'' : être libre, ce n'est pas être sans cause ; c'est agir selon ses propres raisons, sans manipulation ni contrainte écrasante (Locke, Hume, analyses contemporaines). </div> La distinction entre liberté négative et liberté positive permet de cartographier les sens du mot « libre », mais elle laisse entière une question plus profonde : suis-je seulement capable de choisir ? Avant de demander si la société me laisse libre, il faut demander si, au fond de moi, je suis l'auteur de ce que je veux. C'est le problème du libre arbitre. Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), [[s:Essai philosophique concernant l’entendement humain/Livre 2/Chapitre 21|livre II, chapitre XXI, §8-15]], trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Que mon goût pour la lecture vienne d'une éducation reçue n'enlève rien au fait que, lorsque je lis tranquillement chez moi, personne ne m'y oblige. Cette première approche se heurte toutefois à des cas embarrassants. Une personne sous hypnose fait « ce qu'elle veut » au sens où elle ne sent aucune contrainte, mais on hésite à dire qu'elle est libre. Le kleptomane qui vole un objet en obéissant à une impulsion qu'il ne maîtrise pas fait, lui aussi, « ce qu'il veut », sans pour autant être pleinement maître de lui. L'individu sous l'emprise d'une secte exécute volontairement ce qu'on lui demande, mais on parle bien d'aliénation. Les analyses compatibilistes contemporaines ajoutent donc à la première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir prendre du recul sur ses désirs, et pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. Ces conditions invitent à préciser ce que signifie « agir selon ses propres raisons ». Plusieurs philosophes ont cherché à montrer qu'une telle action suppose une discipline interne, une fidélité à des principes que la raison se donne. Trois figures majeures, Kant, Spinoza et Sartre, proposent à ce sujet des analyses différentes mais complémentaires. == Liberté et raison : la conception de Kant == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : autonomie et hétéronomie'' ''Autonomie'' (''autos'', soi-même ; ''nomos'', loi) : se donner à soi-même la loi qu'on suit. ''Hétéronomie'' (''heteros'', autre) : recevoir sa loi d'ailleurs que de soi (désirs, traditions, ordres reçus). ''Agir par devoir'' : par respect d'une loi que la raison reconnaît, et non par intérêt ou inclination spontanée. C'est en ce sens, pour Kant, que l'on est véritablement libre. </div> Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440-445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121-150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Aimer ses proches non plus. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. Un exemple permet de saisir la nuance. Imaginons quelqu'un qui trouve un portefeuille rempli de billets dans la rue. S'il le rend par crainte d'avoir été filmé par une caméra, il agit par intérêt. S'il le rend parce qu'il a un caractère naturellement honnête et qu'il ne pourrait pas faire autrement sans malaise, il agit par inclination. Dans les deux cas, l'action est correcte mais ne traduit pas, selon Kant, une véritable volonté morale. C'est lorsqu'il rend le portefeuille en se disant qu'il faut le faire parce qu'aucun être raisonnable ne peut accepter le vol comme règle universelle, qu'il agit véritablement par devoir, et donc librement. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément par ses humeurs ou ses peurs. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Là où Kant fonde la liberté sur la capacité de la raison à s'opposer aux inclinations, Spinoza propose une voie sensiblement différente. Il ne sépare pas la liberté de la nécessité, mais la pense au sein même de l'ordre causal qui régit la nature. Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), [[s:Page:Spinoza - Éthique, trad. Appuhn, 1913.djvu/201|partie II, proposition 35 et son scolie]], trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251-1253.</ref>. L'analyse vaut aussi pour nos passions humaines. Celui qui éprouve une jalousie violente sans en comprendre l'origine se croit libre de haïr l'autre, alors qu'il subit en réalité une blessure d'enfance, une comparaison sociale ou une peur qu'il n'identifie pas. Le fumeur qui « choisit » d'allumer une cigarette ignore souvent à quel point son geste est commandé par la dépendance physique et par les automatismes acquis. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. Comprendre que ma colère naît de la fatigue, ou que ma tristesse découle d'une blessure ancienne, change ma manière d'agir : ce qui me dominait à mon insu devient un objet sur lequel j'ai prise. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489-503.</ref>. == La liberté comme projet : la conception de Sartre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : la mauvaise foi'' ''Mauvaise foi'' : se mentir à soi-même pour fuir sa liberté, en se présentant comme une chose, un rôle figé ou une nature inchangeable. ''Signes courants'' : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». ''Liberté en situation'' : on ne choisit pas les circonstances (corps, époque, classe sociale), mais on choisit toujours comment y répondre. </div> Kant cherchait dans la raison un fondement universel de la liberté ; Spinoza la situait dans la connaissance des causes. Au vingtième siècle, Sartre déplace encore le problème : il ne s'agit plus de fonder ou de comprendre la liberté, mais de prendre acte du fait que l'existant humain ne peut s'y soustraire. Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487-503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Sartre prend l'exemple célèbre du serveur de café qui exécute son service avec un peu trop de vivacité, comme s'il jouait un rôle de serveur : il s'efforce d'être serveur comme une chaise est une chaise, pour s'épargner d'avoir à choisir librement chacun de ses gestes. Le timide qui dit « je suis comme cela, je n'y peux rien » utilise sa timidité comme une excuse pour ne pas prendre la parole, alors qu'il pourrait, dans chaque situation, décider d'agir autrement<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82-107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18-31.</ref>. La mauvaise foi se reconnaît dans des formules courantes : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». Sartre y voit autant de tentatives pour se transformer en chose et fuir la responsabilité d'avoir à se définir. La liberté sartrienne n'est pas pour autant un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Sartre lui-même illustre ce point en évoquant la France sous l'Occupation : on ne choisit pas l'invasion ni l'oppression, mais on choisit toujours comment y réagir, par la collaboration, l'attentisme ou la résistance. La liberté n'est donc pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : volonté générale et volonté de tous'' ''Volonté de tous'' : somme des volontés particulières, chacune guidée par son intérêt propre. ''Volonté générale'' : ce que veulent les citoyens en tant que membres d'une communauté soucieuse du bien commun. ''Liberté civile'' : « l'obéissance à la loi qu'on s'est prescrite est liberté ». En obéissant à la loi qui exprime la volonté générale, le citoyen obéit à lui-même. </div> Jusqu'ici, la liberté a été examinée du côté de l'agent : capacité de choisir, autonomie de la raison, connaissance des causes, projet existentiel. Mais nul ne vit seul. La liberté individuelle se déploie dans une vie collective qui en conditionne l'exercice. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56-78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Un exemple aide à saisir la différence. Si l'on demandait à chaque automobiliste, en pensant à lui-même, s'il préfère rouler vite, la majorité répondrait oui : c'est la volonté de tous. Si l'on demande aux mêmes personnes, comme citoyens partageant les routes avec des piétons, des enfants et d'autres conducteurs, si une limitation de vitesse est souhaitable, la réponse devient autre : c'est la volonté générale. La même remarque vaut pour l'impôt, la vaccination ou la protection de l'environnement, qui peuvent contrarier l'intérêt immédiat de chacun tout en exprimant ce que veulent les citoyens en tant que membres d'une communauté. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. Au siècle suivant, la question politique de la liberté se déplace. Le danger principal n'est plus seulement l'absence de loi commune, mais l'étouffement des individualités par la masse, le conformisme et l'opinion publique. C'est ce que va analyser Mill. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73-95 et p. 175-209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Au dix-neuvième siècle, une femme qui refusait le mariage ou un homme qui choisissait une carrière artistique pouvaient être parfaitement libres au regard de la loi, et pourtant accablés par la réprobation collective. Aujourd'hui, le harcèlement scolaire, les campagnes de dénonciation sur les réseaux sociaux, la pression du conformisme vestimentaire ou des codes sociaux du groupe illustrent la même mécanique : aucune sanction légale, mais une contrainte morale parfois étouffante. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Choisir un régime alimentaire original, pratiquer un sport à risque, mener une vie discrète ou marginale : tant que personne d'autre n'en pâtit, la société n'a pas à intervenir. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée. Interdire à quelqu'un de fumer chez lui relève, selon Mill, d'une intrusion injustifiée ; lui interdire de fumer dans un lieu où d'autres respireront sa fumée se justifie au nom de leur santé. Cette distinction reste discutée aujourd'hui : à partir de quel seuil un acte « personnel » a-t-il des effets sur les autres et appelle-t-il une régulation collective<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149-174.</ref> ? == Liberté formelle et liberté réelle : la critique de Marx == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté formelle et liberté réelle'' ''Liberté formelle'' : liberté juridiquement reconnue (libertés d'expression, de circuler, de s'instruire, de travailler). ''Liberté réelle'' : capacité effective d'exercer ces droits, qui suppose des ressources (revenu, éducation, accès à l'information, santé). Sans correction sociale, les libertés formelles risquent de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique est prolongée par l'approche des « capabilités » d'A. Sen et M. Nussbaum. </div> Rousseau et Mill pensent la liberté politique sous l'angle de la légitimité de la loi et de la résistance au conformisme. Une autre critique apparaît au dix-neuvième siècle : la liberté juridiquement reconnue n'a pas la même portée pour celui qui possède et pour celui qui ne possède pas. Marx oblige ainsi à mesurer la part des conditions matérielles dans l'exercice effectif de la liberté. Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47-78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Un travailleur qui doit accepter n'importe quel emploi pour nourrir sa famille n'est pas, à proprement parler, contraint par la loi : on lui reconnaît la liberté de refuser. Mais cette liberté formelle ne pèse pas lourd face à la nécessité de manger. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277-330.</ref>. == Les enjeux contemporains de la liberté == Les doctrines parcourues ne sont pas des reliques d'histoire. Elles continuent d'éclairer les débats actuels sur la responsabilité, les sciences de l'homme, les inégalités sociales et la régulation des modes de vie. Reprenons quatre champs où la question de la liberté est aujourd'hui particulièrement vive. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3-31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. L'élève qui doit choisir son orientation dans un système où les voies sont nombreuses peut se sentir paralysé, là où une orientation imposée semblait plus simple. Le consommateur qui dispose de centaines de produits hésite parfois plus que celui qui n'en avait que trois. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Faut-il interdire les paris en ligne, encadrer les régimes amaigrissants, limiter le temps passé sur les écrans ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne, qui inclut le droit de prendre des risques avec sa propre vie, ou la prévention des dommages, qui justifie certaines interdictions au nom du bien-être à long terme. == Conclusion == Au terme de ce parcours, la liberté apparaît moins comme une notion à définir une fois pour toutes que comme un problème à articuler dans plusieurs registres : individuel et politique, négatif et positif, formel et réel. Selon les auteurs, elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et Références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} 0i3dbfgf193kl0c2jv2n3fckad0uz0f 765859 765858 2026-05-03T06:05:59Z PandaMystique 119061 765859 wikitext text/x-wiki {{ManuelPhilo}} == Qu'est-ce que la liberté ? == Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221–222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu peut très bien faire ce qu'il croit vouloir sans pour autant être pleinement libre. L'adolescent qui adopte une marque de vêtements parce qu'il est moqué dans le cas contraire ne se sent peut-être empêché par rien, et il « choisit » pourtant sous la pression du groupe. La personne dépendante au tabac fume « ce qu'elle veut », mais sa dépendance dicte une partie du désir. L'électeur dont les opinions sont massivement façonnées par les contenus qu'on lui suggère croit voter librement, sans toujours mesurer combien son jugement a été orienté. Manipulation, intimidation, endettement, publicité, normes sociales pesantes : autant de forces qui agissent sans laisser de traces visibles. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs. Si nos pensées et nos goûts dépendent de notre éducation, de notre milieu, de notre cerveau et de notre histoire, dans quelle mesure nos décisions nous appartiennent-elles ? Cette question, qui paraît abstraite, surgit dès qu'on se demande pourquoi on aime tel sport, telle musique ou telle personne plutôt qu'une autre. L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. Le détenu, l'otage ou le malade alité voient leur liberté physique entravée. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. Les lois qui interdisaient autrefois aux femmes de voter ou imposaient la ségrégation raciale étaient légales sans pour autant garantir la liberté. La liberté politique authentique suppose des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Celui qui agit par colère, par habitude ou par peur du jugement d'autrui peut, en ce sens, n'être pas pleinement libre. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement, comme l'ont montré les écrits de prisonniers politiques. À l'inverse, un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions ou à ses peurs. == Les deux grandes conceptions de la liberté == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté négative et liberté positive'' ''Liberté négative'' : absence d'obstacles. Exemples : libertés de circuler, d'expression, de conscience. ''Liberté positive'' : pouvoir d'agir selon sa volonté propre. Exemples : éducation, information fiable, maîtrise de soi. Berlin met en garde contre l'usage autoritaire de la liberté positive : un pouvoir peut prétendre savoir mieux que les individus quelle est leur « vraie volonté ». </div> Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167–218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. Le droit de circuler sans autorisation préalable, le droit d'exprimer une opinion sans être inquiété, le droit de choisir sa religion ou son mode de vie : autant d'illustrations de cette liberté entendue comme « ne pas être empêché ». La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Avoir reçu une éducation qui forme le jugement, disposer des informations nécessaires pour faire un choix éclairé, savoir résister à ses impulsions immédiates : ces capacités sont autant de conditions positives de l'autonomie. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité : on contraignait les individus « pour leur propre bien », au nom d'un « véritable peuple » que les dirigeants prétendaient incarner mieux que les citoyens eux-mêmes. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : trois positions sur le libre arbitre'' ''Déterminisme dur'' : tout est fixé, donc nous ne sommes pas libres et la responsabilité morale s'effondre (Holbach). ''Libertarisme'' : nous sommes libres parce que certains de nos choix échappent à la chaîne causale. ''Compatibilisme'' : être libre, ce n'est pas être sans cause ; c'est agir selon ses propres raisons, sans manipulation ni contrainte écrasante (Locke, Hume, analyses contemporaines). </div> La distinction entre liberté négative et liberté positive permet de cartographier les sens du mot « libre », mais elle laisse entière une question plus profonde : suis-je seulement capable de choisir ? Avant de demander si la société me laisse libre, il faut demander si, au fond de moi, je suis l'auteur de ce que je veux. C'est le problème du libre arbitre. Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les libertariens métaphysiques partagent avec les déterministes durs la conviction qu'on ne peut être libre dans un univers où tout est causalement fixé, mais ils en tirent la conclusion inverse : puisque nous sommes libres, certains de nos choix doivent échapper à la chaîne causale. La tradition classique parlait à ce sujet de « libre arbitre d'indifférence », et plusieurs philosophes ont soutenu qu'un agent peut être véritablement « cause première » de ses actions, sans être lui-même produit par d'autres causes. Les défenseurs contemporains de cette position cherchent à montrer qu'au moment du choix, plusieurs avenirs restent ouverts, et que c'est précisément cette ouverture qui distingue l'agent libre d'un mécanisme. Cette voie est philosophiquement exigeante : elle doit articuler liberté et explication causale sans réduire le choix à un pur hasard, ce qui ferait à son tour disparaître la responsabilité. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), [[s:Essai philosophique concernant l’entendement humain/Livre 2/Chapitre 21|livre II, chapitre XXI, §8-15]], trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Que mon goût pour la lecture vienne d'une éducation reçue n'enlève rien au fait que, lorsque je lis tranquillement chez moi, personne ne m'y oblige. Hume prolonge cette analyse en montrant que la liberté ne s'oppose pas à la nécessité mais à la contrainte : appeler libre une action, c'est dire qu'elle procède de la volonté de l'agent, et non que cette volonté serait sans cause. Sans une certaine constance des liaisons entre motifs et actions, ajoute-t-il, on ne pourrait ni prévoir la conduite des autres ni les en juger responsables<ref>David Hume, ''Enquête sur l'entendement humain'' (1748), section VIII, « De la liberté et de la nécessité », trad. A. Leroy, revue par M. Beyssade, Paris, GF Flammarion, 2006, p. 173–198.</ref>. Cette première approche se heurte toutefois à des cas embarrassants. Une personne sous hypnose fait « ce qu'elle veut » au sens où elle ne sent aucune contrainte, mais on hésite à dire qu'elle est libre. Le kleptomane qui vole un objet en obéissant à une impulsion qu'il ne maîtrise pas fait, lui aussi, « ce qu'il veut », sans pour autant être pleinement maître de lui. L'individu sous l'emprise d'une secte exécute volontairement ce qu'on lui demande, mais on parle bien d'aliénation. Les analyses compatibilistes contemporaines ajoutent donc à la première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir prendre du recul sur ses désirs, et pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. Ces conditions invitent à préciser ce que signifie « agir selon ses propres raisons ». Plusieurs philosophes ont cherché à montrer qu'une telle action suppose une discipline interne, une fidélité à des principes que la raison se donne. Trois figures majeures, Kant, Spinoza et Sartre, proposent à ce sujet des analyses différentes mais complémentaires. == Liberté et raison : la conception de Kant == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : autonomie et hétéronomie'' ''Autonomie'' (''autos'', soi-même ; ''nomos'', loi) : se donner à soi-même la loi qu'on suit. ''Hétéronomie'' (''heteros'', autre) : recevoir sa loi d'ailleurs que de soi (désirs, traditions, ordres reçus). ''Agir par devoir'' : par respect d'une loi que la raison reconnaît, et non par intérêt ou inclination spontanée. C'est en ce sens, pour Kant, que l'on est véritablement libre. </div> Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440–445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121–150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Aimer ses proches non plus. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. Un exemple permet de saisir la nuance. Imaginons quelqu'un qui trouve un portefeuille rempli de billets dans la rue. S'il le rend par crainte d'avoir été filmé par une caméra, il agit par intérêt. S'il le rend parce qu'il a un caractère naturellement honnête et qu'il ne pourrait pas faire autrement sans malaise, il agit par inclination. Kant ne juge pas pour autant que ces actions soient mauvaises : conformes au devoir, elles n'ont simplement pas, à ses yeux, la même valeur morale qu'une action accomplie par pur respect de la loi. C'est lorsqu'il rend le portefeuille en se disant qu'il faut le faire parce qu'aucun être raisonnable ne peut accepter le vol comme règle universelle, qu'il agit véritablement par devoir, et donc librement. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément par ses humeurs ou ses peurs. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Là où Kant fonde la liberté sur la capacité de la raison à s'opposer aux inclinations, Spinoza propose une voie sensiblement différente. Il ne sépare pas la liberté de la nécessité, mais la pense au sein même de l'ordre causal qui régit la nature. Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), [[s:Page:Spinoza - Éthique, trad. Appuhn, 1913.djvu/201|partie II, proposition 35 et son scolie]], trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251–1253.</ref>. L'analyse vaut aussi pour nos passions humaines. Celui qui éprouve une jalousie violente sans en comprendre l'origine se croit libre de haïr l'autre, alors qu'il subit en réalité une blessure d'enfance, une comparaison sociale ou une peur qu'il n'identifie pas. Le fumeur qui « choisit » d'allumer une cigarette ignore souvent à quel point son geste est commandé par la dépendance physique et par les automatismes acquis. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. Comprendre que ma colère naît de la fatigue, ou que ma tristesse découle d'une blessure ancienne, change ma manière d'agir : ce qui me dominait à mon insu devient un objet sur lequel j'ai prise. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489–503.</ref>. == La liberté comme projet : la conception de Sartre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : la mauvaise foi'' ''Mauvaise foi'' : se mentir à soi-même pour fuir sa liberté, en se présentant comme une chose, un rôle figé ou une nature inchangeable. ''Signes courants'' : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». ''Liberté en situation'' : on ne choisit pas les circonstances (corps, époque, classe sociale), mais on choisit toujours comment y répondre. </div> Kant cherchait dans la raison un fondement universel de la liberté ; Spinoza la situait dans la connaissance des causes. Au vingtième siècle, Sartre déplace encore le problème : il ne s'agit plus de fonder ou de comprendre la liberté, mais de prendre acte du fait que l'existant humain ne peut s'y soustraire. Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487–503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Sartre prend l'exemple célèbre du serveur de café qui exécute son service avec un peu trop de vivacité, comme s'il jouait un rôle de serveur : il s'efforce d'être serveur comme une chaise est une chaise, pour s'épargner d'avoir à choisir librement chacun de ses gestes. Le timide qui dit « je suis comme cela, je n'y peux rien » utilise sa timidité comme une excuse pour ne pas prendre la parole, alors qu'il demeure responsable de la manière dont il reprend cette timidité dans ses actes : la liberté ne supprime pas les dispositions, les habitudes incorporées ou les inhibitions sociales, mais elle laisse à chacun le soin de les assumer, de les fuir ou de les transformer<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82–107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18–31.</ref>. La mauvaise foi se reconnaît dans des formules courantes : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». Sartre y voit autant de tentatives pour se transformer en chose et fuir la responsabilité d'avoir à se définir. La liberté sartrienne n'est pas pour autant un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Sartre lui-même illustre ce point en évoquant la France sous l'Occupation : on ne choisit pas l'invasion ni l'oppression, mais on choisit toujours comment y réagir, par la collaboration, l'attentisme ou la résistance. La liberté n'est donc pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : volonté générale et volonté de tous'' ''Volonté de tous'' : somme des volontés particulières, chacune guidée par son intérêt propre. ''Volonté générale'' : ce que veulent les citoyens en tant que membres d'une communauté soucieuse du bien commun. ''Liberté civile'' : « l'obéissance à la loi qu'on s'est prescrite est liberté ». En obéissant à la loi qui exprime la volonté générale, le citoyen obéit à lui-même. </div> Jusqu'ici, la liberté a été examinée du côté de l'agent : capacité de choisir, autonomie de la raison, connaissance des causes, projet existentiel. Mais nul ne vit seul. La liberté individuelle se déploie dans une vie collective qui en conditionne l'exercice. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56–78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Un exemple aide à saisir la différence. Si l'on demandait à chaque automobiliste, en pensant à lui-même, s'il préfère rouler vite, la majorité répondrait oui : c'est la volonté de tous. Si l'on demande aux mêmes personnes, comme citoyens partageant les routes avec des piétons, des enfants et d'autres conducteurs, si une limitation de vitesse est souhaitable, la réponse devient autre : c'est la volonté générale. La même remarque vaut pour l'impôt, la vaccination ou la protection de l'environnement, qui peuvent contrarier l'intérêt immédiat de chacun tout en exprimant ce que veulent les citoyens en tant que membres d'une communauté. Ces exemples ont une valeur indicative et ne disent pas le dernier mot rousseauiste. La volonté générale n'est ni un sondage ni une opinion majoritaire mieux informée : elle désigne, dans le ''Contrat social'', la volonté orientée vers le bien commun, qui peut requérir un examen exigeant des intérêts en jeu et ne se laisse pas réduire à une simple addition de préférences éclairées. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. Au siècle suivant, la question politique de la liberté se déplace. Le danger principal n'est plus seulement l'absence de loi commune, mais l'étouffement des individualités par la masse, le conformisme et l'opinion publique. C'est ce que va analyser Mill. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73–95 et p. 175–209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Au dix-neuvième siècle, une femme qui refusait le mariage ou un homme qui choisissait une carrière artistique pouvaient être parfaitement libres au regard de la loi, et pourtant accablés par la réprobation collective. Aujourd'hui, le harcèlement scolaire, les campagnes de dénonciation sur les réseaux sociaux, la pression du conformisme vestimentaire ou des codes sociaux du groupe illustrent la même mécanique : aucune sanction légale, mais une contrainte morale parfois étouffante. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Choisir un régime alimentaire original, pratiquer un sport à risque, mener une vie discrète ou marginale : tant que personne d'autre n'en pâtit, la société n'a pas à intervenir. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée. Interdire à quelqu'un de fumer chez lui relève, selon Mill, d'une intrusion injustifiée ; lui interdire de fumer dans un lieu où d'autres respireront sa fumée se justifie au nom de leur santé. Cette distinction reste discutée aujourd'hui : à partir de quel seuil un acte « personnel » a-t-il des effets sur les autres et appelle-t-il une régulation collective<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149–174.</ref> ? == Liberté formelle et liberté réelle : la critique de Marx == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté formelle et liberté réelle'' ''Liberté formelle'' : liberté juridiquement reconnue (libertés d'expression, de circuler, de s'instruire, de travailler). ''Liberté réelle'' : capacité effective d'exercer ces droits, qui suppose des ressources (revenu, éducation, accès à l'information, santé). Sans correction sociale, les libertés formelles risquent de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique est prolongée par l'approche des « capabilités » d'A. Sen et M. Nussbaum. </div> Rousseau et Mill pensent la liberté politique sous l'angle de la légitimité de la loi et de la résistance au conformisme. Une autre critique apparaît au dix-neuvième siècle : la liberté juridiquement reconnue n'a pas la même portée pour celui qui possède et pour celui qui ne possède pas. Marx oblige ainsi à mesurer la part des conditions matérielles dans l'exercice effectif de la liberté. Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47–78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Un travailleur qui doit accepter n'importe quel emploi pour nourrir sa famille n'est pas, à proprement parler, contraint par la loi : on lui reconnaît la liberté de refuser. Mais cette liberté formelle ne pèse pas lourd face à la nécessité de manger. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277–330.</ref>. == Les enjeux contemporains de la liberté == Les doctrines parcourues ne sont pas des reliques d'histoire. Elles continuent d'éclairer les débats actuels sur la responsabilité, les sciences de l'homme, les inégalités sociales et la régulation des modes de vie. Reprenons quatre champs où la question de la liberté est aujourd'hui particulièrement vive. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3–31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. L'élève qui doit choisir son orientation dans un système où les voies sont nombreuses peut se sentir paralysé, là où une orientation imposée semblait plus simple. Le consommateur qui dispose de centaines de produits hésite parfois plus que celui qui n'en avait que trois. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Faut-il interdire les paris en ligne, encadrer les régimes amaigrissants, limiter le temps passé sur les écrans ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne, qui inclut le droit de prendre des risques avec sa propre vie, ou la prévention des dommages, qui justifie certaines interdictions au nom du bien-être à long terme. == Conclusion == Au terme de ce parcours, la liberté apparaît moins comme une notion à définir une fois pour toutes que comme un problème à articuler dans plusieurs registres : individuel et politique, négatif et positif, formel et réel. Selon les auteurs, elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Prolongements contemporains === * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3–31. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} qe9pxzrymp08stltb0qid84dbotmbu2 765860 765859 2026-05-03T06:06:36Z PandaMystique 119061 765860 wikitext text/x-wiki == Qu'est-ce que la liberté ? == {{ManuelPhilo}} Au sens le plus immédiat, être libre signifie ne pas être empêché de faire ce que l'on veut<ref>Thomas Hobbes, ''Léviathan'' (1651), chapitre XXI, trad. F. Tricaud, Paris, Sirey, 1971, p. 221–222.</ref>. Cette définition paraît évidente : je suis libre quand rien ni personne ne m'empêche d'agir. Les philosophes montrent toutefois que la notion résiste à une approche aussi rapide. Une première difficulté tient à l'origine du vouloir. Faire ce que l'on veut suppose que ce vouloir soit véritablement le sien. Or un individu peut très bien faire ce qu'il croit vouloir sans pour autant être pleinement libre. L'adolescent qui adopte une marque de vêtements parce qu'il est moqué dans le cas contraire ne se sent peut-être empêché par rien, et il « choisit » pourtant sous la pression du groupe. La personne dépendante au tabac fume « ce qu'elle veut », mais sa dépendance dicte une partie du désir. L'électeur dont les opinions sont massivement façonnées par les contenus qu'on lui suggère croit voter librement, sans toujours mesurer combien son jugement a été orienté. Manipulation, intimidation, endettement, publicité, normes sociales pesantes : autant de forces qui agissent sans laisser de traces visibles. Une seconde difficulté apparaît lorsqu'on examine les causes qui produisent nos désirs. Si nos pensées et nos goûts dépendent de notre éducation, de notre milieu, de notre cerveau et de notre histoire, dans quelle mesure nos décisions nous appartiennent-elles ? Cette question, qui paraît abstraite, surgit dès qu'on se demande pourquoi on aime tel sport, telle musique ou telle personne plutôt qu'une autre. L'article s'organise autour d'une question directrice : être libre, est-ce faire ce que l'on veut, vouloir ce que l'on fait, obéir à une loi que l'on reconnaît comme juste, ou comprendre les causes qui nous déterminent ? Les doctrines présentées ne sont pas juxtaposées au hasard ; elles répondent diversement à ce problème commun. On distingue traditionnellement plusieurs registres de liberté : * La liberté physique : c'est l'absence de contrainte matérielle. Je ne suis pas libre si je suis enfermé, attaché ou empêché de circuler. Le détenu, l'otage ou le malade alité voient leur liberté physique entravée. * La liberté civile et politique : ce n'est pas seulement le pouvoir d'agir dans les limites fixées par la loi, car une loi peut être injuste, oppressive ou discriminatoire. Les lois qui interdisaient autrefois aux femmes de voter ou imposaient la ségrégation raciale étaient légales sans pour autant garantir la liberté. La liberté politique authentique suppose des lois auxquelles les citoyens peuvent participer, qui protègent des droits, limitent l'arbitraire du pouvoir et empêchent la domination. * La liberté morale ou métaphysique : c'est la capacité de choisir par soi-même, d'être l'auteur de ses décisions plutôt que l'esclave de ses passions, de ses préjugés ou de pressions extérieures. Celui qui agit par colère, par habitude ou par peur du jugement d'autrui peut, en ce sens, n'être pas pleinement libre. Ces registres se croisent. Un détenu privé de liberté physique peut conserver sa liberté de jugement, comme l'ont montré les écrits de prisonniers politiques. À l'inverse, un citoyen jouissant de tous ses droits peut rester intérieurement asservi à ses passions ou à ses peurs. == Les deux grandes conceptions de la liberté == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté négative et liberté positive'' ''Liberté négative'' : absence d'obstacles. Exemples : libertés de circuler, d'expression, de conscience. ''Liberté positive'' : pouvoir d'agir selon sa volonté propre. Exemples : éducation, information fiable, maîtrise de soi. Berlin met en garde contre l'usage autoritaire de la liberté positive : un pouvoir peut prétendre savoir mieux que les individus quelle est leur « vraie volonté ». </div> Isaiah Berlin, philosophe britannique du vingtième siècle, distingue deux manières principales de comprendre la liberté<ref>Isaiah Berlin, « Deux concepts de la liberté » (''Two Concepts of Liberty'', 1958), dans ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988, p. 167–218.</ref>. La liberté négative désigne l'absence d'obstacles. Je suis libre quand personne ne m'empêche d'agir. Elle insiste sur ce qui ne doit pas arriver : ni autrui ni l'État ne doivent entraver mes choix. Le droit de circuler sans autorisation préalable, le droit d'exprimer une opinion sans être inquiété, le droit de choisir sa religion ou son mode de vie : autant d'illustrations de cette liberté entendue comme « ne pas être empêché ». La liberté positive désigne le pouvoir d'agir selon sa volonté propre. Je suis libre quand je suis maître de moi-même et que je décide de ma vie. Elle insiste sur ce qui doit advenir : je dois être capable de me gouverner. Avoir reçu une éducation qui forme le jugement, disposer des informations nécessaires pour faire un choix éclairé, savoir résister à ses impulsions immédiates : ces capacités sont autant de conditions positives de l'autonomie. Berlin ne se contente pas de cette distinction. Il met en garde contre une dérive possible de la liberté positive : lorsqu'un pouvoir prétend savoir mieux que les individus ce qu'est leur « vrai moi » ou leur « vraie volonté », l'idéal de l'autonomie peut servir à justifier la contrainte au nom d'une libération supposée. Berlin estime que certains régimes autoritaires du vingtième siècle ont utilisé ce langage pour imposer leur autorité : on contraignait les individus « pour leur propre bien », au nom d'un « véritable peuple » que les dirigeants prétendaient incarner mieux que les citoyens eux-mêmes. Il ne nie pas pour autant la valeur de l'idéal d'autonomie ; il se méfie de ses usages politiques autoritaires et accorde à la liberté négative un rôle protecteur essentiel, comme garde-fou contre les abus du pouvoir. Les deux conceptions ne s'opposent pas mécaniquement, mais elles privilégient des aspects différents : protéger l'individu contre l'ingérence d'autrui, ou rendre l'individu capable de se conduire lui-même. == Le problème du libre arbitre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : trois positions sur le libre arbitre'' ''Déterminisme dur'' : tout est fixé, donc nous ne sommes pas libres et la responsabilité morale s'effondre (Holbach). ''Libertarisme'' : nous sommes libres parce que certains de nos choix échappent à la chaîne causale. ''Compatibilisme'' : être libre, ce n'est pas être sans cause ; c'est agir selon ses propres raisons, sans manipulation ni contrainte écrasante (Locke, Hume, analyses contemporaines). </div> La distinction entre liberté négative et liberté positive permet de cartographier les sens du mot « libre », mais elle laisse entière une question plus profonde : suis-je seulement capable de choisir ? Avant de demander si la société me laisse libre, il faut demander si, au fond de moi, je suis l'auteur de ce que je veux. C'est le problème du libre arbitre. Le libre arbitre désigne la capacité de choisir nos actions sans y être contraints. Sa réalité est mise en doute par le déterminisme. Le déterminisme, au sens fort, soutient qu'étant donné un état du monde et des lois de la nature, un seul avenir est possible. Il ne se réduit pas à l'idée que tout a une cause : la causalité peut être probabiliste, statistique ou partielle, et toute explication causale n'implique pas que rien d'autre ne pouvait advenir. Cette précision compte, car elle évite de croire trop vite que l'explication scientifique d'un comportement supprime nécessairement la liberté. Le déterminisme dur tient le déterminisme et la liberté pour incompatibles. Si nos actions sont fixées par les causes antérieures, alors nous ne sommes pas vraiment libres et la responsabilité morale s'effondre<ref>Paul-Henri Thiry, baron d'Holbach, ''Système de la nature'' (1770), [[s:Système de la nature/Partie 1/Chapitre 11|partie I, chapitre XI]], Paris, Fayard, 1990, p. 261-280.</ref>. Les libertariens métaphysiques partagent avec les déterministes durs la conviction qu'on ne peut être libre dans un univers où tout est causalement fixé, mais ils en tirent la conclusion inverse : puisque nous sommes libres, certains de nos choix doivent échapper à la chaîne causale. La tradition classique parlait à ce sujet de « libre arbitre d'indifférence », et plusieurs philosophes ont soutenu qu'un agent peut être véritablement « cause première » de ses actions, sans être lui-même produit par d'autres causes. Les défenseurs contemporains de cette position cherchent à montrer qu'au moment du choix, plusieurs avenirs restent ouverts, et que c'est précisément cette ouverture qui distingue l'agent libre d'un mécanisme. Cette voie est philosophiquement exigeante : elle doit articuler liberté et explication causale sans réduire le choix à un pur hasard, ce qui ferait à son tour disparaître la responsabilité. Les compatibilistes proposent une autre solution. Pour Locke, je suis libre quand rien d'extérieur ne m'empêche de faire ce que je veux, même si ce vouloir a lui-même des causes<ref>John Locke, ''Essai philosophique concernant l'entendement humain'' (1689), [[s:Essai philosophique concernant l’entendement humain/Livre 2/Chapitre 21|livre II, chapitre XXI, §8-15]], trad. P. Coste, Paris, Vrin, 2002, p. 233-242.</ref>. Que mon goût pour la lecture vienne d'une éducation reçue n'enlève rien au fait que, lorsque je lis tranquillement chez moi, personne ne m'y oblige. Hume prolonge cette analyse en montrant que la liberté ne s'oppose pas à la nécessité mais à la contrainte : appeler libre une action, c'est dire qu'elle procède de la volonté de l'agent, et non que cette volonté serait sans cause. Sans une certaine constance des liaisons entre motifs et actions, ajoute-t-il, on ne pourrait ni prévoir la conduite des autres ni les en juger responsables<ref>David Hume, ''Enquête sur l'entendement humain'' (1748), section VIII, « De la liberté et de la nécessité », trad. A. Leroy, revue par M. Beyssade, Paris, GF Flammarion, 2006, p. 173–198.</ref>. Cette première approche se heurte toutefois à des cas embarrassants. Une personne sous hypnose fait « ce qu'elle veut » au sens où elle ne sent aucune contrainte, mais on hésite à dire qu'elle est libre. Le kleptomane qui vole un objet en obéissant à une impulsion qu'il ne maîtrise pas fait, lui aussi, « ce qu'il veut », sans pour autant être pleinement maître de lui. L'individu sous l'emprise d'une secte exécute volontairement ce qu'on lui demande, mais on parle bien d'aliénation. Les analyses compatibilistes contemporaines ajoutent donc à la première idée plusieurs conditions : agir selon ses propres raisons, ne pas être manipulé ni placé sous une contrainte écrasante, pouvoir prendre du recul sur ses désirs, et pouvoir répondre rationnellement de ce que l'on fait. Être libre, dans cette perspective, ce n'est pas être sans cause ; c'est entretenir avec ses motifs un certain rapport, qui distingue l'agent réfléchi de l'automate ou de l'individu sous emprise. Ces conditions invitent à préciser ce que signifie « agir selon ses propres raisons ». Plusieurs philosophes ont cherché à montrer qu'une telle action suppose une discipline interne, une fidélité à des principes que la raison se donne. Trois figures majeures, Kant, Spinoza et Sartre, proposent à ce sujet des analyses différentes mais complémentaires. == Liberté et raison : la conception de Kant == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : autonomie et hétéronomie'' ''Autonomie'' (''autos'', soi-même ; ''nomos'', loi) : se donner à soi-même la loi qu'on suit. ''Hétéronomie'' (''heteros'', autre) : recevoir sa loi d'ailleurs que de soi (désirs, traditions, ordres reçus). ''Agir par devoir'' : par respect d'une loi que la raison reconnaît, et non par intérêt ou inclination spontanée. C'est en ce sens, pour Kant, que l'on est véritablement libre. </div> Pour Emmanuel Kant, philosophe allemand du dix-huitième siècle, la liberté ne se confond pas avec le simple fait d'agir selon ses désirs. Plusieurs niveaux doivent être distingués<ref>Emmanuel Kant, ''Fondements de la métaphysique des mœurs'' (1785), section II, trad. V. Delbos, Paris, Delagrave, 1973, AK IV, p. 440–445.</ref>. À un premier niveau, la liberté est indépendance à l'égard des inclinations sensibles : ne pas être déterminé à agir par la seule pression des désirs ou des habitudes. À un deuxième niveau, elle est autonomie de la volonté : la capacité de se donner à soi-même la loi qu'on suit, par opposition à l'hétéronomie, état d'une volonté qui se laisse dicter ses fins par des causes étrangères, désirs, traditions ou ordres reçus. À un troisième niveau, la liberté n'est pas un fait empirique observable mais une condition pensable de la moralité : l'agent raisonnable se pense lui-même comme appartenant à un ordre intelligible où il peut être l'auteur de la loi morale qu'il suit. Sans cette possibilité, parler de devoir perdrait son sens<ref>Emmanuel Kant, ''Critique de la raison pratique'' (1788), première partie, livre I, chapitre I, trad. J.-P. Fussler, Paris, GF Flammarion, 2003, p. 121–150.</ref>. Le problème kantien n'est pas que tout désir serait mauvais. Boire quand on a soif n'est pas immoral. Aimer ses proches non plus. Le problème est que l'action proprement morale ne peut être fondée sur la seule inclination, qui varie d'un individu à l'autre et selon les circonstances. Pour qu'une action ait une valeur morale, elle doit être faite par devoir, c'est-à-dire par respect d'une loi que la raison reconnaît comme valable pour tout être raisonnable. Un exemple permet de saisir la nuance. Imaginons quelqu'un qui trouve un portefeuille rempli de billets dans la rue. S'il le rend par crainte d'avoir été filmé par une caméra, il agit par intérêt. S'il le rend parce qu'il a un caractère naturellement honnête et qu'il ne pourrait pas faire autrement sans malaise, il agit par inclination. Kant ne juge pas pour autant que ces actions soient mauvaises : conformes au devoir, elles n'ont simplement pas, à ses yeux, la même valeur morale qu'une action accomplie par pur respect de la loi. C'est lorsqu'il rend le portefeuille en se disant qu'il faut le faire parce qu'aucun être raisonnable ne peut accepter le vol comme règle universelle, qu'il agit véritablement par devoir, et donc librement. L'homme libre, chez Kant, est celui qui agit selon des principes rationnels qu'il s'impose, sans se laisser entraîner aveuglément par ses humeurs ou ses peurs. L'obéissance à cette loi n'est pas une soumission, puisque la loi n'est pas imposée du dehors : elle vient de la raison de l'agent lui-même. Obéir à cette loi, c'est obéir à soi-même comme être raisonnable. == Liberté et nécessité : la conception de Spinoza == Là où Kant fonde la liberté sur la capacité de la raison à s'opposer aux inclinations, Spinoza propose une voie sensiblement différente. Il ne sépare pas la liberté de la nécessité, mais la pense au sein même de l'ordre causal qui régit la nature. Baruch Spinoza, philosophe hollandais du dix-septième siècle, propose une analyse différente. À ses yeux, le libre arbitre, entendu comme pouvoir de choisir sans cause, est une illusion<ref>Baruch Spinoza, ''Éthique'' (1677), [[s:Page:Spinoza - Éthique, trad. Appuhn, 1913.djvu/201|partie II, proposition 35 et son scolie]], trad. B. Pautrat, Paris, Seuil, 1988, p. 159.</ref>. Tout dans la nature, y compris nos actions, suit l'enchaînement des causes. Nous nous croyons libres parce que nous avons conscience de nos désirs, mais nous ignorons les causes qui produisent ces désirs. L'image classique est celle de la pierre lancée : si elle avait conscience de son mouvement, elle se croirait sa propre cause, alors qu'elle obéit à des forces qui la dépassent<ref>Baruch Spinoza, ''Lettre 58 à G. H. Schuller'' (1674), dans ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954, p. 1251–1253.</ref>. L'analyse vaut aussi pour nos passions humaines. Celui qui éprouve une jalousie violente sans en comprendre l'origine se croit libre de haïr l'autre, alors qu'il subit en réalité une blessure d'enfance, une comparaison sociale ou une peur qu'il n'identifie pas. Le fumeur qui « choisit » d'allumer une cigarette ignore souvent à quel point son geste est commandé par la dépendance physique et par les automatismes acquis. La liberté spinoziste n'est pourtant pas la résignation à un destin obscur. Elle consiste à agir selon la nécessité de sa propre nature, par la puissance de comprendre, plutôt qu'à subir passivement les causes extérieures. Cette idée prolonge la définition fondatrice donnée dans la première partie de l'ouvrage : est libre la chose qui existe par la seule nécessité de sa nature et qui est déterminée à agir par soi seule<ref>Baruch Spinoza, ''Éthique'', partie I, définition 7, trad. B. Pautrat, Paris, Seuil, 1988, p. 15.</ref>. L'homme libre n'accepte pas seulement la nécessité : il devient actif en la connaissant. Comprendre que ma colère naît de la fatigue, ou que ma tristesse découle d'une blessure ancienne, change ma manière d'agir : ce qui me dominait à mon insu devient un objet sur lequel j'ai prise. À mesure que nous comprenons les causes de nos passions, nous cessons d'en être les jouets et gagnons en activité rationnelle. Spinoza nomme ce cheminement le passage de la servitude à la liberté<ref>Baruch Spinoza, ''Éthique'', partie V, propositions 3 à 10, trad. B. Pautrat, Paris, Seuil, 1988, p. 489–503.</ref>. == La liberté comme projet : la conception de Sartre == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : la mauvaise foi'' ''Mauvaise foi'' : se mentir à soi-même pour fuir sa liberté, en se présentant comme une chose, un rôle figé ou une nature inchangeable. ''Signes courants'' : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». ''Liberté en situation'' : on ne choisit pas les circonstances (corps, époque, classe sociale), mais on choisit toujours comment y répondre. </div> Kant cherchait dans la raison un fondement universel de la liberté ; Spinoza la situait dans la connaissance des causes. Au vingtième siècle, Sartre déplace encore le problème : il ne s'agit plus de fonder ou de comprendre la liberté, mais de prendre acte du fait que l'existant humain ne peut s'y soustraire. Jean-Paul Sartre, philosophe français du vingtième siècle, soutient que « l'homme est condamné à être libre »<ref>Jean-Paul Sartre, ''L'existentialisme est un humanisme'' (1946), Paris, Gallimard, « Folio essais », 1996, p. 39.</ref>. La formule paradoxale signifie que nous ne pouvons échapper à notre liberté. Aucune nature humaine fixée d'avance ne dicterait ce que nous devons être. « L'existence précède l'essence » : nous existons d'abord, puis nous nous définissons par nos actes. Nous portons donc la responsabilité de ce que nous devenons. Refuser de choisir reste un choix dont nous demeurons les auteurs<ref>Jean-Paul Sartre, ''L'être et le néant'' (1943), quatrième partie, chapitre I, Paris, Gallimard, « Tel », 1976, p. 487–503.</ref>. Sartre nomme « mauvaise foi » l'attitude par laquelle l'individu tente de fuir cette liberté. On se présente alors comme une chose, un rôle figé, une nature inchangeable, ou une victime pure des circonstances, afin de ne pas avoir à assumer ce que l'on fait. Sartre prend l'exemple célèbre du serveur de café qui exécute son service avec un peu trop de vivacité, comme s'il jouait un rôle de serveur : il s'efforce d'être serveur comme une chaise est une chaise, pour s'épargner d'avoir à choisir librement chacun de ses gestes. Le timide qui dit « je suis comme cela, je n'y peux rien » utilise sa timidité comme une excuse pour ne pas prendre la parole, alors qu'il demeure responsable de la manière dont il reprend cette timidité dans ses actes : la liberté ne supprime pas les dispositions, les habitudes incorporées ou les inhibitions sociales, mais elle laisse à chacun le soin de les assumer, de les fuir ou de les transformer<ref>Jean-Paul Sartre, ''L'être et le néant'', première partie, chapitre II, « La mauvaise foi », p. 82–107.</ref>. L'antisémite, analysé dans un autre texte, illustre la même structure : il prétend obéir à une essence qui le dépasserait, alors qu'il choisit librement la haine<ref>Jean-Paul Sartre, ''Réflexions sur la question juive'' (1946), Paris, Gallimard, « Folio essais », 1985, p. 18–31.</ref>. La mauvaise foi se reconnaît dans des formules courantes : « je suis comme ça », « c'est plus fort que moi », « je n'avais pas le choix ». Sartre y voit autant de tentatives pour se transformer en chose et fuir la responsabilité d'avoir à se définir. La liberté sartrienne n'est pas pour autant un pouvoir illimité. Elle s'exerce toujours « en situation », dans des circonstances que nous n'avons pas choisies : naissance, corps, époque, classe sociale, langue. Sartre lui-même illustre ce point en évoquant la France sous l'Occupation : on ne choisit pas l'invasion ni l'oppression, mais on choisit toujours comment y réagir, par la collaboration, l'attentisme ou la résistance. La liberté n'est donc pas le pouvoir de tout faire, mais l'impossibilité de ne pas donner sens à ce qui nous arrive. Cette charge peut être angoissante, et elle fonde l'exigence d'authenticité que Sartre oppose à la mauvaise foi. == Liberté individuelle et liberté politique == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : volonté générale et volonté de tous'' ''Volonté de tous'' : somme des volontés particulières, chacune guidée par son intérêt propre. ''Volonté générale'' : ce que veulent les citoyens en tant que membres d'une communauté soucieuse du bien commun. ''Liberté civile'' : « l'obéissance à la loi qu'on s'est prescrite est liberté ». En obéissant à la loi qui exprime la volonté générale, le citoyen obéit à lui-même. </div> Jusqu'ici, la liberté a été examinée du côté de l'agent : capacité de choisir, autonomie de la raison, connaissance des causes, projet existentiel. Mais nul ne vit seul. La liberté individuelle se déploie dans une vie collective qui en conditionne l'exercice. Comment articuler la liberté de chacun avec l'existence d'une société commune ? Jean-Jacques Rousseau, philosophe du dix-huitième siècle, propose un cadre célèbre avec l'idée du contrat social<ref>Jean-Jacques Rousseau, ''Du contrat social'' (1762), livre I, chapitres VI à VIII, et livre II, chapitres III et IV, Paris, GF Flammarion, 2001, p. 56–78.</ref>. Le contrat n'est pas un événement historique conclu entre des individus déjà constitués : c'est une construction normative, c'est-à-dire un modèle de pensée qui ne décrit pas un fait passé mais sert à définir les conditions sous lesquelles un pouvoir politique peut être tenu pour légitime. Il pose la question : sous quelles conditions une autorité peut-elle être obéie sans renier la liberté de ceux qui s'y soumettent ? La réponse passe par la volonté générale, qu'il faut distinguer de la volonté de tous. La volonté de tous additionne les intérêts particuliers ; la volonté générale exprime ce que veulent les citoyens en tant que membres d'une communauté politique soucieuse du bien commun. Un exemple aide à saisir la différence. Si l'on demandait à chaque automobiliste, en pensant à lui-même, s'il préfère rouler vite, la majorité répondrait oui : c'est la volonté de tous. Si l'on demande aux mêmes personnes, comme citoyens partageant les routes avec des piétons, des enfants et d'autres conducteurs, si une limitation de vitesse est souhaitable, la réponse devient autre : c'est la volonté générale. La même remarque vaut pour l'impôt, la vaccination ou la protection de l'environnement, qui peuvent contrarier l'intérêt immédiat de chacun tout en exprimant ce que veulent les citoyens en tant que membres d'une communauté. Ces exemples ont une valeur indicative et ne disent pas le dernier mot rousseauiste. La volonté générale n'est ni un sondage ni une opinion majoritaire mieux informée : elle désigne, dans le ''Contrat social'', la volonté orientée vers le bien commun, qui peut requérir un examen exigeant des intérêts en jeu et ne se laisse pas réduire à une simple addition de préférences éclairées. Obéir à une loi qui procède de la volonté générale, ce n'est donc pas obéir à un autre, mais à soi-même comme citoyen. C'est en ce sens que Rousseau écrit que « l'obéissance à la loi qu'on s'est prescrite est liberté »<ref>Jean-Jacques Rousseau, ''Du contrat social'', livre I, chapitre VIII, GF Flammarion, 2001, p. 60.</ref>. La liberté politique suppose ainsi la participation, au moins idéale, à la formation de la loi commune. Au siècle suivant, la question politique de la liberté se déplace. Le danger principal n'est plus seulement l'absence de loi commune, mais l'étouffement des individualités par la masse, le conformisme et l'opinion publique. C'est ce que va analyser Mill. John Stuart Mill, philosophe anglais du dix-neuvième siècle, défend la liberté individuelle contre l'État, mais aussi contre la tyrannie de l'opinion sociale<ref>John Stuart Mill, ''De la liberté'' (1859), chapitres I et IV, trad. L. Lenglet à partir de la traduction de D. White, Paris, Gallimard, « Folio essais », 1990, p. 73–95 et p. 175–209.</ref>. La société peut imposer des normes par le regard, la honte et l'exclusion, sans recourir à la loi. Cette pression peut peser autant qu'une contrainte légale, et Mill la juge particulièrement insidieuse parce qu'elle pénètre la sphère privée. Au dix-neuvième siècle, une femme qui refusait le mariage ou un homme qui choisissait une carrière artistique pouvaient être parfaitement libres au regard de la loi, et pourtant accablés par la réprobation collective. Aujourd'hui, le harcèlement scolaire, les campagnes de dénonciation sur les réseaux sociaux, la pression du conformisme vestimentaire ou des codes sociaux du groupe illustrent la même mécanique : aucune sanction légale, mais une contrainte morale parfois étouffante. Mill propose le principe dit de non-nuisance : la société ne peut légitimement limiter la liberté d'un adulte que pour empêcher un dommage à autrui. Il distingue à cet effet les actions qui concernent surtout l'agent lui-même de celles qui affectent les autres. Pour les premières, la libre expérimentation des modes de vie est précieuse, car elle nourrit la diversité, l'invention et le progrès des opinions. Choisir un régime alimentaire original, pratiquer un sport à risque, mener une vie discrète ou marginale : tant que personne d'autre n'en pâtit, la société n'a pas à intervenir. Pour les secondes, l'intervention publique se justifie, à condition d'être proportionnée. Interdire à quelqu'un de fumer chez lui relève, selon Mill, d'une intrusion injustifiée ; lui interdire de fumer dans un lieu où d'autres respireront sa fumée se justifie au nom de leur santé. Cette distinction reste discutée aujourd'hui : à partir de quel seuil un acte « personnel » a-t-il des effets sur les autres et appelle-t-il une régulation collective<ref>John Stuart Mill, ''De la liberté'', chapitre III, « De l'individualité comme l'un des éléments du bien-être », GF Flammarion, 1990, p. 149–174.</ref> ? == Liberté formelle et liberté réelle : la critique de Marx == <div style="float:right; clear:right; width:260px; margin:0.3em 0 1em 1.5em; padding:0.5em 0.8em; border:1px solid #aaa; background-color:#f8f8f8; font-size:90%;"> ''À retenir : liberté formelle et liberté réelle'' ''Liberté formelle'' : liberté juridiquement reconnue (libertés d'expression, de circuler, de s'instruire, de travailler). ''Liberté réelle'' : capacité effective d'exercer ces droits, qui suppose des ressources (revenu, éducation, accès à l'information, santé). Sans correction sociale, les libertés formelles risquent de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique est prolongée par l'approche des « capabilités » d'A. Sen et M. Nussbaum. </div> Rousseau et Mill pensent la liberté politique sous l'angle de la légitimité de la loi et de la résistance au conformisme. Une autre critique apparaît au dix-neuvième siècle : la liberté juridiquement reconnue n'a pas la même portée pour celui qui possède et pour celui qui ne possède pas. Marx oblige ainsi à mesurer la part des conditions matérielles dans l'exercice effectif de la liberté. Karl Marx, philosophe et économiste allemand du dix-neuvième siècle, déplace la question de la liberté en distinguant deux registres : la liberté formelle, garantie par les droits, et la liberté réelle, qui suppose les conditions matérielles de son exercice<ref>Karl Marx, ''Sur la question juive'' (1844), trad. J.-F. Poirier, Paris, La Fabrique, 2006, p. 47–78.</ref>. Avoir le droit de circuler sans avoir les moyens de se déplacer, le droit de s'instruire sans accès effectif à l'école, le droit d'expression sans pouvoir se faire entendre dans l'espace public : la liberté juridiquement reconnue peut rester sans effet pour celles et ceux qui sont privés des ressources nécessaires. Un travailleur qui doit accepter n'importe quel emploi pour nourrir sa famille n'est pas, à proprement parler, contraint par la loi : on lui reconnaît la liberté de refuser. Mais cette liberté formelle ne pèse pas lourd face à la nécessité de manger. Marx soutient que les libertés individuelles proclamées par les sociétés modernes risquent, sans correction sociale, de bénéficier surtout à ceux qui possèdent déjà les moyens d'en user. Cette critique ne supprime pas la valeur des libertés civiles. Elle invite à les compléter par une attention aux inégalités économiques, éducatives et sociales qui pèsent sur leur exercice. La discussion contemporaine sur les capabilités, ouverte par Amartya Sen et Martha Nussbaum, prolonge cette préoccupation : être libre, ce n'est pas seulement ne pas être empêché, c'est aussi disposer effectivement des moyens d'agir et de mener la vie que l'on a des raisons de juger bonne<ref>Amartya Sen, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010, chapitres 11 et 12, p. 277–330.</ref>. == Les enjeux contemporains de la liberté == Les doctrines parcourues ne sont pas des reliques d'histoire. Elles continuent d'éclairer les débats actuels sur la responsabilité, les sciences de l'homme, les inégalités sociales et la régulation des modes de vie. Reprenons quatre champs où la question de la liberté est aujourd'hui particulièrement vive. Liberté et responsabilité. Si je suis libre, je peux être tenu pour responsable de mes actes. La responsabilité est une charge, mais elle est aussi une condition de la dignité reconnue à l'agent. Les discussions juridiques, morales et psychologiques sur l'imputabilité, c'est-à-dire le fait de pouvoir attribuer une action à quelqu'un et de le tenir pour responsable, montrent que la frontière entre acte libre et acte non libre n'est jamais simple<ref>Peter F. Strawson, « Liberté et ressentiment » (1962), trad. J.-Y. Goffi, dans ''Philosophie'', n° 28, 1990, p. 3–31.</ref>. Une personne dépendante qui consomme la substance qu'elle désire fait-elle ce qu'elle veut, ou subit-elle un désir qui la dépasse ? L'addiction, la maladie mentale et la contrainte psychologique conduisent à atténuer la responsabilité sans toujours la supprimer. Liberté et sciences de l'homme. La biologie, la psychologie, la sociologie et les neurosciences invitent à penser les causes de nos conduites : déterminismes sociaux, biais cognitifs, conditionnements affectifs, mécanismes neuronaux. Ces apports ne tranchent pas à eux seuls la question philosophique de la liberté. Ils rappellent en revanche que l'agent humain est traversé de causes qu'il ignore souvent, et qu'une liberté véritable suppose un travail sur ces causes plutôt que leur dénégation. Liberté et société. Comment garantir à chacun les conditions effectives de l'autonomie, alors que les inégalités matérielles, éducatives ou informationnelles pèsent sur les choix ? Un citoyen dont les opinions sont massivement orientées par les recommandations algorithmiques d'une plateforme exerce-t-il une liberté politique pleine, ou subit-il une orientation invisible de son jugement ? Une politique publique qui interdit certains comportements jugés dangereux pour soi-même, comme la consommation de certaines substances, protège-t-elle la liberté réelle ou ampute-t-elle la liberté individuelle ? Ces questions traversent aujourd'hui la régulation des plateformes numériques, la lutte contre la désinformation, la pauvreté et le paternalisme sanitaire ou éducatif. Elles supposent des arbitrages délicats entre protection et autonomie. Liberté et bonheur. Une liberté pleine ne va pas toujours sans inconfort. Choisir engage, et la multiplication des options peut produire de l'angoisse. L'élève qui doit choisir son orientation dans un système où les voies sont nombreuses peut se sentir paralysé, là où une orientation imposée semblait plus simple. Le consommateur qui dispose de centaines de produits hésite parfois plus que celui qui n'en avait que trois. Faut-il, pour autant, restreindre la liberté afin de protéger les individus contre eux-mêmes ? Faut-il interdire les paris en ligne, encadrer les régimes amaigrissants, limiter le temps passé sur les écrans ? Les réponses divergent selon que l'on privilégie l'autonomie de la personne, qui inclut le droit de prendre des risques avec sa propre vie, ou la prévention des dommages, qui justifie certaines interdictions au nom du bien-être à long terme. == Conclusion == Au terme de ce parcours, la liberté apparaît moins comme une notion à définir une fois pour toutes que comme un problème à articuler dans plusieurs registres : individuel et politique, négatif et positif, formel et réel. Selon les auteurs, elle peut désigner l'absence d'obstacles, la maîtrise de soi, l'obéissance à une loi rationnelle qu'on s'est donnée, l'activité de la connaissance qui transforme la passion en compréhension, ou encore le projet par lequel l'existant se définit. Chaque doctrine éclaire un aspect du problème sans en épuiser la difficulté. Tous les penseurs ne placent pas la liberté au même rang. Spinoza la subordonne à la connaissance ; Marx critique l'illusion d'une liberté formelle qui ignorerait les rapports économiques ; Nietzsche soupçonne dans certaines morales de la liberté un déguisement de la faiblesse ; Freud souligne le poids de l'inconscient ; certains utilitaristes l'évaluent à l'aune du bien-être qu'elle produit. La liberté s'est imposée comme une grande valeur de la modernité politique et morale, mais elle reste une notion disputée, dont le sens, les conditions et la portée demeurent l'objet d'un travail philosophique vivant. == Notes et références == {{references|colonnes=2}} == Bibliographie == === Sources primaires === * Berlin, Isaiah, ''Éloge de la liberté'', trad. J. Carnaud et J. Lahana, Paris, Calmann-Lévy, 1988. * Hobbes, Thomas, ''Léviathan'' [1651], trad. F. Tricaud, Paris, Sirey, 1971. * Holbach, Paul-Henri Thiry baron d', ''[[s:Système de la nature|Système de la nature]]'' [1770], Paris, Fayard, 1990. * Kant, Emmanuel, ''[[s:Fondements de la métaphysique des mœurs|Fondements de la métaphysique des mœurs]]'' [1785], trad. V. Delbos, Paris, Delagrave, 1973. * Kant, Emmanuel, ''Critique de la raison pratique'' [1788], trad. J.-P. Fussler, Paris, GF Flammarion, 2003. * Locke, John, ''[[s:Essai philosophique concernant l’entendement humain|Essai philosophique concernant l'entendement humain]]'' [1689], trad. P. Coste, Paris, Vrin, 2002. * Marx, Karl, ''Sur la question juive'' [1844], trad. J.-F. Poirier, Paris, La Fabrique, 2006. * Mill, John Stuart, ''[[s:De la liberté|De la liberté]]'' [1859], trad. L. Lenglet d'après la trad. de D. White, Paris, Gallimard, « Folio essais », 1990. * Rousseau, Jean-Jacques, ''[[s:Du contrat social|Du contrat social]]'' [1762], Paris, GF Flammarion, 2001. * Sartre, Jean-Paul, ''L'être et le néant. Essai d'ontologie phénoménologique'' [1943], Paris, Gallimard, « Tel », 1976. * Sartre, Jean-Paul, ''L'existentialisme est un humanisme'' [1946], Paris, Gallimard, « Folio essais », 1996. * Sartre, Jean-Paul, ''Réflexions sur la question juive'' [1946], Paris, Gallimard, « Folio essais », 1985. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Spinoza, Baruch, ''[[s:Éthique (Spinoza)|Éthique]]'' [1677], trad. B. Pautrat, Paris, Seuil, 1988. * Spinoza, Baruch, ''Œuvres complètes'', trad. R. Caillois, M. Francès et R. Misrahi, Paris, Gallimard, « Bibliothèque de la Pléiade », 1954. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3-31. === Études secondaires === * Audard, Catherine, ''John Stuart Mill'', Paris, PUF, coll. « Philosophes », 2009. * Balibar, Étienne, ''Spinoza et la politique'', Paris, PUF, 1985. * Balibar, Étienne, ''La philosophie de Marx'', Paris, La Découverte, 1993. * Bernardi, Bruno, ''Le principe d'obligation. Sur une aporie de la modernité politique'', Paris, Vrin/EHESS, 2007. * Deleuze, Gilles, ''Spinoza, philosophie pratique'', Paris, Minuit, 1981. * Derathé, Robert, ''Jean-Jacques Rousseau et la science politique de son temps'', Paris, Vrin, 1995. * Macherey, Pierre, ''Introduction à l'Éthique de Spinoza'', 5 vol., Paris, PUF, 1994-1998. * Manent, Pierre, ''Histoire intellectuelle du libéralisme'', Paris, Calmann-Lévy, 1987. * Matheron, Alexandre, ''Individu et communauté chez Spinoza'', Paris, Minuit, 1969. * Pettit, Philip, ''Républicanisme. Une théorie de la liberté et du gouvernement'', trad. P. Savidan et J.-F. Spitz, Paris, Gallimard, « NRF Essais », 2004. * Philonenko, Alexis, ''L'œuvre de Kant. La philosophie critique'', t. II, Paris, Vrin, 1972. * Renaut, Alain, ''Kant aujourd'hui'', Paris, Aubier, 1997. * Skinner, Quentin, ''La liberté avant le libéralisme'', trad. M. Zagha, Paris, Seuil, 2000. * Worms, Frédéric, ''La philosophie en France au XXe siècle. Moments'', Paris, Gallimard, « Folio essais », 2009. === Prolongements contemporains === * Nussbaum, Martha, ''Capabilités. Comment créer les conditions d'un monde plus juste ?'', trad. S. Chavel, Paris, Climats, 2012. * Sen, Amartya, ''L'idée de justice'', trad. P. Chemla, Paris, Flammarion, 2010. * Strawson, Peter F., « Liberté et ressentiment » [1962], trad. J.-Y. Goffi, ''Philosophie'', n° 28, 1990, p. 3–31. === Ouvrages de référence === * Canto-Sperber, Monique (dir.), ''Dictionnaire d'éthique et de philosophie morale'', Paris, PUF, 1996, articles « Liberté » et « Libre arbitre ». * Cassin, Barbara (dir.), ''Vocabulaire européen des philosophies. Dictionnaire des intraduisibles'', Paris, Seuil/Le Robert, 2004, article « Liberté ». * Lalande, André, ''Vocabulaire technique et critique de la philosophie'' [1926], Paris, PUF, « Quadrige », 2010, article « Liberté ». * Raynaud, Philippe et Rials, Stéphane (dir.), ''Dictionnaire de philosophie politique'', Paris, PUF, 1996, articles « Liberté » et « Libéralisme ». [[Catégorie:Manuel de terminale de philosophie (livre)]] {{Autocat}} r9smh1cq3lqs7g5qrlsue5oyvfnnx03 Fonctionnement d'un ordinateur/Les ISA optimisés pour la compilation/interprétation 0 83651 765826 764070 2026-05-02T20:04:12Z Mewtow 31375 /* Les jeux d'instructions dédiés à un langage de programmation */ 765826 wikitext text/x-wiki De nos jours, la majorité des programmeurs programment dans des langages de haut niveau. Il est très rare pour eux d'avoir à utiliser de l'assembleur, et encore moins un langage machine. Les programmes écrits dans un langage de haut niveau sont traduits en langage machine par un logiciel appelé le compilateur. [[File:Compilation.PNG|centre|vignette|upright=2.5|Compilateur : principe.]] Il se trouve que quelques rares processeurs sont conçus pour faciliter le travail du compilateur. Et ce sont ces processeurs que nous allons voir dans ce qui suit. Ils représentent une catégorie de jeux d'instruction à part, qui n'a pas vraiment de nom. ==La compilation et l’interprétation== Un compilateur traduit donc du code source, écrit dans un langage de haut niveau, vers du langage machine. La traduction est rarement directe. En général, le compilateur traduit le code source en assembleur, qui est lui-même traduit en langage machine. L'assembleur est une représentation textuelle du langage machine alors que le code machine est du binaire exécutable par le processeur. La traduction se fait donc en deux étapes, la '''compilation''' proprement dite et l''''assemblage''', réalisées respectivement par un compilateur et un assembleur. Il faut parfois rajouter une troisième phase d'édition des liens, que nous passons volontairement sous silence. {| |[[File:Code C.png|vignette|200px|Le code source, ici en C.]] |[[File:Assem.png|vignette|250px|Le code assembleur.]] |[[File:Binary file - hello world (C programming).png|vignette|150px|Le code machine.]] |} ===L'interprétation et la compilation à la volée=== Une alternative à la compilation est l''''interprétation''', qui transforme le code source en code machine à la volée. Avec l'interprétation, le code source est passé à un logiciel appelé l''''interpréteur''', qui exécute le code source ligne de code par ligne de code. Une ligne de code est traduite en code machine, qui est exécutée, puis l'interpréteur passe à la ligne suivante. [[File:Kaantotulkkaus.png|centre|vignette|upright=3|Compilation versus interprétation.]] Un défaut de l'interprétation est son cout en performance, qui est assez important. Aussi, l'interprétation stricte a évolué vers un hybride entre interprétation et compilation. L'idée est qu'une partie peu importante du code source est interprétée, alors que le code important est compilé juste avant d'être exécuté. Pour le dire autrement, le code source est partiellement compilé à la volée, juste avant son exécution. Aussi, on parle de '''compilation à la volée'''. Le terme en anglais est ''Just In Time compilation'', abrévié en JIT. En soi, le JIT est associé à de l'interprétation, les JIT sont en réalité des hybrides interpréteurs-compilateurs. Un point important est que compiler du code à la volée est assez lourd, cela a un cout en performance. Par contre, le code compilé s'exécute plus vite que du code interprété. Si on exécute le code compilé une seule fois, le cout de la compilation l'emporte sur le gain à l'exécution. Mais le code compilé est réutilisé autant de fois que nécessaire. Le gain à l'exécution est donc multiplié par le nombre d'exécutions, alors que le cout de la compilation est répartit sur plusieurs exécutions, il est amorti. Les portions du code sont choisies de manière à avoir un gain en performance maximal. L'idée générale est que le code exécuté très souvent est compilé, alors que du code exécuté pas souvent est interprété. Typiquement, les boucles les plus souvent exécutées sont compilées, le code exécuté une seule fois est interprété. ===Les langages intermédiaires=== Les compilateurs modernes passent par un '''langage intermédiaire''' pour faire la transformation en code machine. Le compilateur traduit le langage de haut niveau en langage intermédiaire, puis traduit le langage intermédiaire en code machine cible. Le langage intermédiaire est parfois appelé le '''''bytecode''''', et ce terme recouvre aussi le code écrit avec du ''bytecode''. L'interprétation aussi peut passer par l'intermédiaire d'un un ''bytecode'', ce n'est pas limité aux compilateurs proprement dit. {| |[[File:Intermediate representation scheme.png|centre|vignette|upright=1.5|Représentation intermédiaire d'un compilateur.]] |[[File:Code interpreter scheme.png|centre|vignette|upright=1.5|Fonctionnement d'un interpréteur.]] |} Faire ainsi a de nombreux avantages, le principal étant d'avoir un compilateur capable de traduire un langage de haut niveau vers plusieurs jeux d'instructions différents. Cela permet d'avoir, par exemple, un compilateur qui traduit du C soit en code machine x86, soit en code machine pour un CPU ARM, soit pour un CPU POWERPC, etc. [[File:Compiler design.svg|centre|vignette|upright=3|Compiler design]] Pour l'interprétation, l'usage d'un ''bytecode'' a d'autres avantages. Pour l'exploiter, il faut distribuer non pas le code source, mais le ''bytecode''. En clair, l'interpréteur ne prend pas en entrée le code source, mais du ''bytecode'' déjà compilé. La traduction est alors beaucoup plus simple, car le code source a déjà été partiellement compilé, par la traduction en ''bytecode''. Interpréter du code source est en effet assez compliqué : il faut effectuer des étapes d'analyse lexicale, sémantique, et bien d'autres. Avec du ''bytecode'', ces étapes ont été réalisées lors de la compilation du ''bytecode'', l'interpréteur a alors peut de choses à faire. L'interprétation du ''bytecode'' se fait instruction par instruction, au niveau du ''bytecode''. Une instruction du ''bytecode'' est traduite en une instruction machine équivalente, qui est exécutée. Si l'instruction est un peu complexe, il exécute une fonction/procédure qui fait la même chose. Pour résumer, le ''bytecode'' est ensuite traduit à la volée et exécuté instruction par instruction par un logiciel appelé l'interpréteur. [[File:Control table.png|centre|vignette|upright=2|Control table]] Le langage intermédiaire peut être vu comme l'assembleur d'un processeur, n'existe pas forcément dans la réalité, mais dont le jeu d'instruction est décrit en détail. Le processeur en question est appelé une '''machine abstraite''', ou encore une ''machine virtuelle''. Nous utiliserons le terme de machine abstraite dans ce qui suit. La machine abstraite n'est pas la même suivant que l'on cible la compilation ou l'interprétation/JIT. Pour l'interprétation/JIT, la machine abstraite est souvent une machine à pile, car cela simplifie grandement la traduction en code machine final. L'interprétation demande que la traduction du ''bytecode'' en code machine soit la plus simple possible. Et cela demande de prendre en compte pas mal de détails. Par exemple, les différents jeux d'instruction existants n'ont pas le même nombre de registres, ce qui pose problème lors de la traduction du ''bytecode''. Lors de la transformation en code machine, un algorithme d'allocation de registres se débrouille pour traduire le code intermédiaire en code qui utilise un nombre limité de registres. Pour améliorer cette allocation de registres, il y a deux solutions niveau ''bytecode'' : soit utiliser un nombre illimité de registres, soit utiliser une machine à pile. Pour les machines à pile, il existe un algorithme simple et rapide pour traduire un code écrit pour une machine à pile en un code écrit pour un processeur avec des registres, qui se débrouille pas trop mal pour allouer efficacement les registres. C'est un avantage assez important pour les langages interprétés. ==Les processeurs qui exécutent du bytecode== Le ''bytecode'' est un code machine, ce qui signifie qu'il peut en théorie s'exécuter sur un processeur qui implémente le jeu d’instruction associé. Si le jeu d'instruction d'un ''bytecode'' est souvent une description censée être fictive, elle n'en reste pas moins un jeu d'instruction et des caractéristiques précises, qu'on peut l'implémenter en matériel ! Néanmoins, tous les ''bytecode'' ne sont pas égaux de ce point de vue. Certains sont faciles à implémenter en matériel, d'autres non. Les ''bytecodes'' implémentés en matériel sont ceux dont les machines abstraites sont des machines à pile. Un premier exemple est celui des processeurs Pascal MicroEngine, qui exécutaient directement le bytecode du langage Pascal, le fameux UCSD P-code. Un second exemple est la '''machine SECD''', qui sert de langage intermédiaire pour certains compilateurs de langages fonctionnels. Elle a été implémentée en matériel par plusieurs équipes, notamment par les chercheurs de l'université de Calgary en 1989. Dans le même genre, quelques processeurs simples étaient capables d’exécuter directement le ''bytecode'' du langage FORTH. Le FORTH, un des premiers langages à pile de haut niveau, possède de nombreuses implémentations hardware et est un des rares langages de haut niveau dont le ''bytecode'' a été utilisé comme langage machine sur certains processeurs. Par exemple, on peut citer le processeur FC16, capable d’exécuter nativement du ''bytecode'' FORTH. ===Les processeurs Java=== Le cas le plus impressionnant est celui de la machine virtuelle Java, qui est un design de processeur comme un autre. En temps normal, le ''bytecode'' Java est compilé ou interprété, mais certains processeurs exécutaient du ''bytecode'' Java directement, sans interprétation ni compilation. Ils sont appelés des '''processeurs Java'''. On peut citer les processeurs ARM disposant de l'extension Jazelle, du JEMCore et du aJ-100 de aJile Systems, le picoJava II de Sun, et quelques autres. Il y a aussi eu quelques projets de recherche ou processeurs open source, comme Komodo, jamuth, le ''Java Optimized Processor'' et quelques autres projets du même genre. L'implémentation de la machine virtuelle Java n'était cependant pas complète. Quelques instructions complexes n'étaient pas gérées par le processeur et devaient être émulées en logiciel. Mais la grosse majorité des instructions l'était. Les instructions non-supportées étaient émulées avec la méthode ''trap and emulate'', à savoir qu'un opcode inconnu déclenchait une exception matérielle ''opcode invalide'', dont la routine pouvait émuler les instructions qui doivent l'être. Le processeur aJ-100 de aJile est capable d'exécuter la quasi-totalité des instructions de la JVM Java, seules deux instructions faisant exception. Les '''accélérateurs Java''' sont une solution intermédiaire, qui permet de traduire à la volée du ''bytecode'' Java en instructions RISC, exécutées sur un autre processeur. Il s'agit formellement de traduction binaire, mais je préfère en parler ici. L'idée est de combiner un processeur RISC avec un coprocesseur Java. Le coprocesseur lit le ''bytecode'' Java et le traduit en instructions RISC, ces dernières étant exécutées sur le processeur RISC. Le JA108 de Nozomi était un coprocesseur de ce genre, au même titre que le coprocesseur JSTAR de JEDI. L'extension Jazelle de certains CPU ARM fonctionnait vraisemblablement sur un principe similaire, sauf que le coprocesseur était intégré dans le processeur ARM, entre le cache d'instruction et le décodeur d'instructions ARM. L'intérêt des processeurs Java n'est pas qu'une question de performance. Certes, ils permettent d’exécuter plus vite les programmes compilés en ''bytecode'', comme des programmes Java pour la JVM Java. Mais l'intérêt est aussi de faire des économies de mémoire RAM et ROM. Je rappelle que la machine virtuelle Java est une machine à pile, ce qui fait que sa densité de code est excellente. Les programmes en ''bytecode'' Java sont donc très petits, et prennent peu de place en mémoire ROM. De plus, utiliser un processeur Java permet de se passer d'interpréteur ou de JIT Java, ce qui économise encore plus de mémoire. ===Transformer un processeur RISC en machine à pile=== La plupart des processeurs Java utilisent en interne une architecture à registre généraux, qui émule une machine à registre en microcode. Quelques registres sont réservés pour l'état de la machine virtuelle, avec au minimum un registre réservé pour le pointeur de pile, un autre pour un pointeur vers un ''pool'' de constantes, et quelques autres. D'autres registres servent à mémoriser le haut de la pile, à savoir le sommet de la pile et quelques opérandes situées juste en-dessous. Par exemple, le processeur picoJava II gardait les 64 opérandes au sommet de la pile dans 64 registres généraux, séparés des registres pour les pointeurs et l'état de la JVM. Une optimisation possible, envisagée sur les processeurs picoJava, était une sorte de macro-fusion sous stéroïde. L'idée était de fusionner certaines séries d'instructions Java en une seule instruction machine. Typiquement, pour faire une opération arithmétique, une machine à pile empile deux opérandes et exécute une opération, ce qui prend trois instructions machine. La spécification picoJava 1 a proposé d'envoyer directement la seconde opérande en entrée de l'ALU, ce qui fusionnait l'empilement de la seconde opérande et l'opération arithmétique. Le processeur picoJava II va plus loin et fusionne les trois instructions en une seule instruction RISC, agissant sur des registres. Mais la majorité des processeurs Java ne faisaient pas cela, car cela complexifie grandement le décodeur. Les processeurs ''bigfoot'' de DCT utilisaient un système différent pour émuler une pile avec des registres. Leur banc de registre de 64 bits était coupé en deux : les 16 premiers registres étaient utilisés pour la pile, les 48 suivants étaient utilisés pour autre chose. L'idée est que le registre 0 mémorise un emplacement vide, le registre 1 contient le sommet de la pile, le registre 2 l'opérande sous le sommet de la pile, et ainsi de suite. Les 15 premières opérandes de la pile sont donc mémorisées dans les registres. Les instructions écrivent leur résultat dans le registre adéquat, puis tous les registres sont décalés pour que le résultat passe dans le registre R1. Par exemple, les instructions PUSH chargent une opérande dans le registre 0, puis tous les registres sont décalés de un rang, pour que l'opérande chargée soit dans le registre 1. Le registre 0 devient alors le registre numéro 1, le registre 1 devient le 2, et ainsi de suite. Par contre, les opérations arithmétiques font autrement. Une instruction d'addition, par exemple, lit les opérandes dans le registre 1 et 2, puis place son résultat dans le registre 2 (les deux opérandes sont dépilées). Puis, les registres sont décalés d'un rang pour que ce registre 2 devienne le 1. Les registres ne sont en réalité pas décalés, il n'y a pas de transferts entre registres. A la place, les 16 premiers registres utilisaient une forme limitée de renommage de registres, similaire au banc de registre tournant utilisé sur les processeurs EPIC comme l'Itanium. Les numéros de registres sont renommés, décalés, à chaque fois qu'on empile ou dépile une opérande. Pour faire le renommage de registres, processeur contient un ''register stack counter'' de 4 bits, qui est incrémenté à chaque fois qu'on empile une donnée, et est décrémenté quand on dépile une donnée. Quand on veut accéder à un opérande, le numéro de registre architectural associé est traduit en numéro de registre physique, en additionnant le ''register stack counter'' (modulo 16, pour rester sur 4 bits). ==L'accélération de l'interprétation/JIT : le ''Thumb-EE'' d'ARM== Quelques processeurs ont ajouté des instructions pour faciliter le travail des interpréteurs/JIT. Par exemple, en 2005, ARM a ajouté le mode ''Thumb Execution Environment'', qui faisait cela. Il reprenait le jeu d'instruction compact ''thumb'' et ajoutait quelques instructions et modifiait le comportement d'instructions existantes. Le jeu d'instruction ''Thumb-EE'' a été ajouté sur les CPU ARM en 2005, mais a été déprécié en 2011, par manque d'utilité. Mais la tentative mérite qu'on s'attarde dessus. Les CPU de gamme M, déstinés à l'embarqué, n'ont jamais supporté ''Thumb-EE'', vu que de tels processeurs ne sont pas conçus pour exécuter du code interprété/JIT. Le mode ''Thumb-EE'' est un mode d'exécution, séparé de l'ARM normal. Ainsi, une instruction ''Thumb-EE'' et une instruction ARM peuvent avoir le même encodage en binaire, mais se comporter différemment. Le processeur est à tout moment soit en mode ''Thumb-EE'', soit en mode ARM normal, ce qui précise comment ces instructions doivent se comporter. Des instructions ont été ajoutées par ''Thumb-EE'', pour qu'il fasse son travail. L'entrée et la sortie du mode ''Thumb-EE'' se fait avec deux instructions : ENTERX et LEAVEX. Une fois en mode ''Thumb-EE'', le décodage des instructions ''thumb'' se fait avec les règles du ''Thumb-EE'', et non celles du ''thumb'' normal. Une première différence entre ''thumb'' normal et ''Thumb-EE'' est l'ajout de ce qui s'appelle un ''null check'' pour les instructions mémoire. Le ''null check'' est utilisé pour les instructions en mode d'adressage "base + indice" ou "Base + décalage", ou tout autre mode d'adressage avec un registre de base utilisés dans des calculs d'adresse. L'idée est de vérifier si l'adresse de base vaut zéro ou non. Si c'est le cas, le processeur lève une exception matérielle, qui est traitée par l'interprétation ou le compilateur JIT. Une telle situation est en effet signe d'une erreur d'adressage mémoire, qui doit être traitée par l'interpréteur. Typiquement, c'est signe qu'un pointeur n'a pas bien été initialisé, ce qui peut arriver avec du code interprété ou JIT. Les interpréteurs/JIT traitent généralement la situation en ajoutant un test avant toute instruction mémoire, pour vérifier si le pointeur accédé vaut zéro ou non. Avec ''Thumb-EE'', pas besoin d'ajouter les tests en questions : ils sont réalisés automatiquement lors de chaque instruction mémoire. : Les registres pour la pile, comme le pointeur de pile et le pointeur de ''frame'', sont aussi concernés. L'instruction CHKA vérifie que les accès à un tableau ne débordent pas en dehors du tableau en question. Par exemple, pour un tableau de 1024 éléments, elle vérifie si l'indice est compris entre 0 et 1024. Pour cela, elle vérifie si l'indice de tableau est bien dans l'intervalle adéquat et lève une exception matérielle si ce n'est pas le cas. Son utilité se comprend quand on sait que tous les accès à un tableau sont vérifiés par l'interpréteur. L'interpréteur est censé ajouter des instructions pour vérifier les indices, à savoir deux ou trois branchements. Avec CHKA, le test se fait en une seule instruction. D'autres modifications mineures de l'encodage des instructions sont aussi présentes, ainsi que des modifications pour les instructions LOAD/STORE. Précisément, dans les modes "base + indice" et "base + décalage", le décalage et l'indice subissent maintenant des décalages. L'idée est de simplifier le calcul d'adresse. De quoi économiser quelques instructions lors des calculs d'adresse, ce qui facilite le travail de l'interpréteur/JIT. Et des instructions LOAD/STORE précises voient leur comportement modifié pour faciliter la gestion de la pile de Java ou l'exécution des méthodes locales. Pour faciliter le travail de l'interpréteur, deux instructions HBP et HBLP ont été ajoutées. Elles branchent vers une fonction qui gère les exceptions logicielles (une fonctionnalité présente dans de nombreux langages, comme Java). La première effectue un branchement vers la fonction en question, la seconde sauvegarde l'adresse de retour avant de faire ce branchement. Les deux peuvent brancher vers 256 fonctions pré-déterminées, sans avoir à présenter leur adresse. ==La traduction binaire accélérée par le matériel== Plus haut, nous avons surtout parlé des compilateurs et des interpréteurs. Cependant, nous devons aussi parler de la '''traduction binaire'''. Elle traduit un programme écrit dans un code machine vers un autre code machine. Par exemple, elle traduit un programme compilé pour un CPU x86 vers un code machine ARM. En général, le système d'exploitation est généralement compilé pour le jeu d'instruction natif, mais il exécute des applications prévues pour le x86. Les applications sont traduites par le système d'exploitation, avant d'exécuter le code traduit. : Nous parlerons dans la suite de code machine source et de code machine cible, pour parler respectivement du code à traduire et du code obtenu après traduction. Idem avec d'autres termes comme architecture cible/source, ou jeu d'instruction cible/source. La traduction binaire est surtout utilisée pour des questions d'émulation ou de compatibilité. Par exemple, lorsque les Macintosh sont passés de processeurs Power PC vers des processeurs x86, le système d'exploitation Mac OS utilisait la traduction binaire pour convertir les anciennes applications Power PC vers du code x86. Les utilisateurs n'y ont vu que du feu. Le système de traduction binaire était appelé Rosetta 1. Par la suite, lors de la transition de processeurs x86 vers des processeurs Apple, Rosetta 2 a vu le jour. La traduction binaire a surtout été utilisée pour traduire du code x86 vers un autre jeu d'instruction. Il faut dire que le x86 est le jeu d'instruction dominant. De nombreuses entreprises ont eu pour ambition de briser l'hégémonie du x86 sur PC, en remplaçant le x86 par un jeu d'instruction plus performant, tout en gardant une compatibilité maximale. La traduction binaire était la seule solution pratique. Elle était le plus souvent intégralement réalisée en logiciel, comme c'était le cas sur les architectures Itanium avec le ''IA-32 Execution Layer''. ===Les généralités sur la traduction binaire assistée en matériel=== L'architecture source est presque tout le temps une architecture CISC, assez ancienne, qu'on souhaite émuler. Le choix de l'architecture cible se porte souvent sur une architecture VLIW, fort différente de l'architecture source, et ce pour obtenir une économie de matériel conséquente. Pour s'exécuter rapidement, le code traduit doit exploiter le parallélisme d'instruction, à savoir exécuter plusieurs instructions en même temps dans des unités de calcul séparées. Il est possible d'utiliser un processeur superscalaire avec exécution dans le désordre pour cela, mais au prix d'un cout important en transistors. Alors qu'en utilisant un CPU VLIW, c'est le traducteur binaire qui fait tout le travail d'extraction du parallélisme d'instruction. Et après tout, quitte à avoir un traducteur binaire, autant lui refiler le boulot d'optimisation. Compiler du code à la volée est certes assez lourd, mais qu'il existe des algorithmes efficaces pour regrouper des instructions indépendantes dans une seule instruction VLIW. Au passage, le processeur VLIW a plus de registres que le processeur source. Cela permet de faire du renommage de registres directement en logiciel. Le traducteur binaire n'hésite pas à changer les noms de registres entre instructions source et instruction VLIW cible, afin de supprimer des dépendances de données. En conséquence, cela ouvre des opportunités de parallélisme, qui sont exploitées lors du regroupement des opérations en instructions VLIW. Vous pourriez penser que le choix d'un CPU VLIW pour émuler du CISC est tout sauf optimal. Vous devez penser que la traduction binaire est d'autant plus simple que l'architecture source et cibles sont semblables. Dans les faits, ce n'est pas tellement traduire les instructions qui pose problème, mais plus la gestion du registre d'état, des exceptions matérielles, de la mémoire virtuelle, la différence entre gros-boutisme et petit-boutisme, de même que des différences d'adressage pour les périphériques. Le premier problème est la gestion des conditions, notamment en présence d'un registre d'état. En pratique, la traduction binaire s'utilise pour traduire du code CISC vers du code RISC ou VLIW. Les architectures source ont donc un registre d'état, qui est mis à jour non seulement par des instructions de test, mais aussi des instructions arithmétiques. L'architecture cible n'a elle pas de registre d'état, mais des registres à prédicats. La traduction de l'un vers l'autre est alors quelque peu compliquée. Et elle est d'autant plus compliquée que le registre d'état est la source de dépendances d'instruction implicites, qui réduisent les performances. Par exemple, si une instruction arithmétique modifie le registre d'état, cela peut impacter l'exécution d'une instruction ultérieure, qui lit ce registre d'état. Pour éliminer ces fausses dépendances, le traducteur binaire doit renommer ce registre en logiciel et détecter les dépendances utiles. Et le compilateur doit gérer les cas où il y a beaucoup de distance entre les deux, voire les cas où l'instruction dépendante n'a pas encore été analysée par le compilateur. Un autre problème est lié à la gestion des exceptions matérielles, et précisément des exceptions précises. Pour rappel, une instruction VLIW regroupe plusieurs opérations, opérations qui correspondraient à une instruction machine sur un CPU pas VLIW. En conséquence, plusieurs instructions du langage machine "source" sont regroupées en une seule instruction VLIW. Et il faut tenir compte du cas où une instruction source lève une exception. Dans le code VLIW, cela signifie qu'une opération lève une exception, et il faut annuler partiellement l'instruction VLIW associée. Et par partiellement, on veut dire que seules les opérations suivantes dans l'ordre du programme source doivent être annulées, puis ré-exécutées. Et c'est un sacré casse-tête ! Les processeurs VLIW utilisent comme solution le mécanisme d'exceptions différées des processeurs EPIC, vu il y a quelques chapitres. Pour résumer, le code est exécuté par blocs d'instruction, délimités par des branchements ou tout autre limite/barrière pertinente dans le code. Un bloc de code est compilé en deux versions : une version rapide sans exceptions matérielles, une version lente qui gère les exceptions précises. La version rapide s'exécute sans exécuter les exceptions. Cependant, les exceptions matérielles sont enregistrées, pour être prises en compte à la toute fin du bloc de code. La version rapide est exécutée en premier et elle mémorise si une exception matérielle a eu lieu. Puis une instruction vérifie si une exception a eu lieu et décide quoi faire. Si aucune exception n'a eu lieu, elle passe à la suite du programme, les résultats du bloc de code sont définitivement acceptés. Mais si une exception a eu lieu, tout est annulé. Le processeur est remis dans l'état initial, puis le code est ré-exécuté instruction par instruction de manière à gérer l'exception correctement. ===La traduction par pré-décodage=== Une première solution serait de faire la traduction binaire dans le cache d'instruction. Lors d'un défaut de cache, le code chargé depuis la RAM est traduit en code machine cible. Et c'est ce code machine cible qui est mémorisé dans le cache d'instruction et exécuté par le processeur. La technique marche sur le papier et n'est qu'une amélioration des techniques de pré-décodage vues il y a quelques chapitres. Cependant, le code obtenu est une traduction assez basique, qui n'incorpore pas d'optimisations dignes de ce nom. De plus, elle gère mal le cas où la taille du code source et cible sont potentiellement très différentes. Concrètement, elle est surtout utile pour traduire du code d'un processeur RISC vers un autre processeur RISC, dont les tailles d'instructions sont similaires. Elle ne permet pas d'émuler plusieurs jeux d'instructions différents, le cout en matériel (un circuit de pré-décodage par jeu d'instruction) serait trop important. ===Le projet DAISY d'IBM=== De très rares processeurs étaient conçus pour accélérer cette traduction binaire, afin de garder de bonnes performances. Les premiers à avoir étudié l'idée étaient IBM, avec leur projet DAISY (''Dynamically Architected Instruction Set from Yorktown''). Le projet de base était de convertir à la volée du code compilé pour des CPU Power PC, vers du code VLIW. Les chercheurs d'IBM avaient développé un algorithme de traduction dynamique efficace, ainsi qu'un processeur VLIW disposant d'optimisations spécifiques à la traduction binaire dynamique, à la volée. De nombreuses idées de ce projet ont été reprises ou re-découvertes par la société Transmetta, avec ses processeurs Crusoe et Efficieon, puis par NVIDIA avec son projet Denver. Les ingénieurs de ce projet ont étudié la possibilité d'émuler plusieurs jeux d'instructions différents sur un même processeur, notamment le s390 d'IBM et le x86. En théorie, cela demande juste d'avoir plusieurs programmes de traduction binaire : un pour le x86, un autre pour le s390, éventuellement un autre pour le Power PC. Mais cela ne s'est pas concrétisé. Mais les ingénieurs ont étudié quelle pourrait être l'architecture VLIW idéale pour ça. Par exemple, il fallait des additions 3-opérandes pour simplifier les calculs d'adresse. Une difficulté était la gestion du registre d'état, dont les bits ne sont pas mis à jour de la même manière sur le x86 et le s390 ou le Power PC. La différence entre gros-boutisme et petit-boutisme était aussi un problème, de même que des différences d'adressage pour les périphériques. Pour que la traduction binaire soit efficace, le processeur VLIW intègre diverses optimisations, comme les exceptions différées et les branchements multi-voies. La principale est la suivante : seul le code des boucles ou fonctions exécutées fréquemment est traduit en code VLIW, le reste du code est interprété. En effet, traduire du code binaire prend plus de temps qu'une simple interprétation. Pour du code qui ne sera exécutée qu'une seule fois, il est plus rapide d'utiliser l'interprétation. Par contre, pour du code exécuté beaucoup de fois, le cout de la traduction binaire est amorti, dilué sur N exécutions, compensé par le gain en temps d'exécution de ce code traduit. Au final, cela permet de ne traduire que le code qui le mérite. La détection du code fréquemment exécuté est réalisée dans le cœur VLIW. L'unité de branchement mémorise les derniers branchements rencontrés et le nombre de fois qu'ils ont été exécutés. Si ils ont été exécutés un certain nombre de fois, l'unité de branchement lève une exception matérielle, qui invoque le traducteur binaire. La routine de cette exception est le traducteur binaire proprement dit. En clair, la traduction binaire est démarrée quand le processeur détecte qu'une fonction a été exécutée plus de N fois, via une exception matérielle dédiée. La mesure du nombre d'exécution d'un branchement se fait dans l'unité de calcul dédiée aux branchements, avec l'aide d'une sorte de ''branch adress buffer'' modifié. Pour rappel, le ''branch adress buffer'' mémorise le ''Program counter'' de chaque branchement récemment rencontré. Ici, chaque entrée du ''branch adress buffer'' est associée à un compteur incrémenté à chaque exécution du branchement. ===Les processeurs Crusoe et Efficieon de Transmetta=== Les processeurs Crusoe Et Efficeron sont deux processeurs VLIW produits par la société Transmetta, une société californienne rachetée par NVIDIA. Ils étaient conçus pour exécuter spécifiquement des programmes x86, système d'exploitation inclus. L'idée derrière ce projet était d'exécuter du code x86 sans que les applications, ni même le système d'exploitation et le BIOS soient au courant ! Les processeurs Transmetta étaient en réalité conçus pour exécuter un programme unique, le ''Code Morphing Software'' (CMS), qui traduisait le code x86 en code VLIW. Transmetta ne voulait pas que son processeur VLIW soit exploité directement, sans le CMS. Il n'avait pas rendu public de compilateur pour traduire du C vers du code VLIW, il n'avait pas donné la documentation du jeu d'instruction VLIW. Des efforts de rétro-ingénieurie, documentés sur le site realworldtech, ont cependant permis de comprendre comment étaient encodées les instructions du processeur Crusoe. Comme pour le projet Daisy, le ''Code Morphing Software'' utilisait à la fois interprétation et traduction binaire, selon les besoins. Les instructions sont interprétées lors de leurs premières exécutions, mais le CMS bascule sur de la traduction en code VLIW après un certain nombre d'exécution. Ainsi, les boucles souvent exécutées sont traduites en code VLIW, alors que le reste du code est interprété. Le choix du code à traduire est le fait du CMS, il utilise des heuristiques complexes pour, qui ne sont pas connues dans le détail. Le ''Code Morphing Software'' est mémorisé dans une EEPROM, ce qui en fait un ''firmware'' situé en dessous du BIOS. Le CMS démarre ensuite le BIOS, qui lui-même démarre le système d'exploitation, qui lui-même démarre les pilotes de périphériques et les programmes. Le CMS se réserve les 16 premiers mébioctets de l'espace d'adressage. L'EEPROM du CMS est mappée dedans, mais n'en utilise que la moitié. Le reste est utilisé comme cache, pour mémoriser le code VLIW traduit par le CMS. Les deux processeurs intégraient aussi deux mémoires SRAM, utilisées par le CMS, appelées la ''local program memory'' (LPM) et la ''local data memory'' (LDM). La première contient du code qui gére les interruptions, la mémoire virtuelle, les exceptions matérielles, les problèmes d'alignement mémoire, et quelques fonctions très fréquemment utilisées par le CMS. La seconde est de la mémoire RAM utilisée par ces fonctions de la ''local program memory''. Les mémoires caches L1 et L2 sont séparées de ces deux mémoires. Le processeur Crusoe et Efficieon étaient des processeurs VLIW très simples. Ils n'avaient même pas de MMU, ni de fonctionnalités importantes sur les CPU x86. Pour Crusoe, les instructions VLIW étaient encodées sur 64 ou 128 bits, et regroupaient entre 2 à 4 opérations. Les instructions LOAD/STORE ne supportaient pas d'adressage indicé, juste de l'adressage indirect à registre. Crusoe avait 5 unités de calcul : deux ALU entières, une unité LOAD/STORE, une unité de branchement, une FPU. Efficieon doublait le nombre d'ALU entière et d'unité LOAD/STORE, les instructions VLIW passaient à 256 bits. Le processeur Crusoe contient 160 registres, dont 64 registres généraux, 32 registres flottants. Les registres généraux font 32 bits, ce qui est cohérent avec le fait que les CPU x86 de l'époque étaient des processeurs 32 bits. Quant aux registres flottants, ils faisaient 80 bits, ce qui colle avec la taille des registres flottants de la FPU x87 utilisée à l'époque. Sur les 64 registres généraux, seuls 48 étaient réellement utilisable pour mémoriser des opérandes. Une partie des registres généraux étaient utilisés pour la gestion de la pile, d'autres pour mémoriser l'état du CPU x86 émulé, un registre était un registre zéro non accesible en écriture. La gestion des exceptions est optimisée avec un système d'exceptions différées, le même que celui décrit plus haut. Le processeur utilise un système similaire, pour effectuer des lectures anticipées, qui a été expliqué dans le chapitre sur les processeurs VLIW/EPIC. Sauf qu'il s'agit là d'une optimisation pour gagner en performances en général, pas une aide utile pour gérer des exceptions précises ou toute autre subtilité de la traduction binaire. Pour gérer les exceptions différées et les lectures anticipées, le processeur mémorise l'état du processeur avant de démarrer un bloc de code. Pour cela, le processeur contient des ''shadow registers'', 48 registres entiers et 16 registres flottants. Vous remarquerez qu'il y a autant de registres entiers que de ''shadow registers'' entiers. Les registres entiers/flottants sont mémorisés dans les ''shadow registers'' avant d'exécuter un bloc de code, afin que le processeur puisse revenir à l'état de base. Une autre fonctionnalité liée est le ''gated store buffer''. Le principe est d'éviter toute écriture en mémoire RAM, tant que le code VLIW n'a pas émis d'instruction ''commit''. L'idée est que les écritures sont conservées dans la ''store queue'' de l'unité LOAD/STORE. Pour rappel, la ''store queue'' met en attente les écritures soit tant que les écritures ne sont pas terminées, soit tant que la RAM est occupée. L'idée est que les écritures sont accumulées dans la ''store queue'' tant que l'instruction ''commit'' n'a pas eu lieu. Le ''store queue'' est "déversé dans la RAM" seulement quand l'instruction ''commit'' s'exécute. ===Les CPU NVIDIA Denver=== Nvidia a tenté quelque chose de similaire avec son projet Denver. NVIDIA a racheté l'entreprise Transmetta, ses brevets, et a tenté de refaire la même chose. Le projet initial était de traduire du code x86 vers un jeu d'instruction VLIW propriétaire, comme l'a fait Transmetta. Mais NVIDIA n'a pas réussi à acquérir la licence du jeu d'instruction x86 et s'est rabattu sur le jeu d'instruction ARM. Le processeur né de ce projet est le Tegra K1-64 CPU. Il s'agit d'un processeur composé d'un cœur VLIW, couplé à deux décodeurs d'instructions ARM. Les deux décodeurs ARM traduisent une paire d'instructions ARM consécutives en instructions VLIW, pour les exécuter sur le cœur VLIW. Le CPU peut fonctionner selon deux modes : ARM et VLIW. En somme, le processeur supporte deux jeux d'instruction : le jeu d'instruction ARM, et un jeu d'instruction VLIW. En mode ARM, les instructions ARM sont chargées depuis le cache, traduites en VLIW par les décodeurs ARM, puis exécutées par le cœur VLIW. En mode optimisé, le CPU exécute des instructions VLIW chargées depuis le cache d'instruction, les décodeurs ne sont pas utilisés. : Le CPU supporte en réalité deux jeux d'instruction ARM : ARM8 et 7. Mais ils correspondent au même mode pour le CPU. Un point important est que le processeur peut changer très rapidement de mode, en à peine quelques cycles d'horloges. On n'est clairement pas dans le cas des CPU x86, qui mettent des plombes pour passer du mode 32 à 64 bits et inversement. La commutation est tellement rapide qu'on peut considérer que le processeur supporte deux jeux d'instruction simultanément. Et le support simultané de deux jeux d'instruction facilite l'implémentation de la traduction binaire. Encore une fois, inutile de traduire du code qui ne sera exécutée qu'une seule fois, mieux vaut l'exécuter directement dans le mode ARM. Surtout que le processeur supporte un mode ARM qui permet d'exécuter du code ARM sans perte de performance. Par contre, le code fréquemment utilisé, notamment dans des boucles critiques, est traduit en VLIW. Au final, les performances sont optimisées, en limitant le travail du logiciel traducteur binaire. La détection du code fréquemment exécuté se fait différemment que pour les processeurs Transmetta et Daisy. L'unité de branchement ne détecte pas directement le code beaucoup exécuté, même si elle a un rôle à jouer. A la place, la détection est réalisée en logiciel, par un ''thread'' dédié, qui s'exécute sur un cœur séparé. Il détecte le code fréquemment utilisé en regardent les branchements exécutés récemment. Pour cela, le processeur mémorise l'historique des branchements pris récemment et copie cette historique dans une mémoire tampon dédiée, partagée entre tous les cœurs. Vu qu'elle est partagée, le ''thread'' de détection a accès à l'historique sans pertes de performances, seule la copie de l'historique dans ce tampon a un cout en performance, pas son partage. Le code VLIW obtenu après traduction binaire est mémorisé dans la mémoire RAM, dans une portion spécialement réservée pour. Elle fait 128 mébioctets, et est appelée le '''cache d'optimisation''' par NVIDIA. Le cache d'optimisation est protégé en écriture et seul le traducteur binaire peut écrire dedans. Au passage, le traducteur binaire est du code VLIW, ce qui fait qu'il est placé dans le cache d'optimisation. Le processeur détecte automatiquement quand une fonction pour laquelle le code compilé équivalent est disponible. Pour cela, l'unité de chargement contient une table de correspondance entre l'adresse de la fonction ARM, et l'adresse de son équivalent compilé. Quand une fonction est appelée, l'unité de chargement regarde l'adresse de destination du branchement. Si l'adresse est dans cette table, elle récupère l'adresse de la fonction compilée et branche vers celle-ci. Le processeur dispose d'un cache d'instruction de 128 kibioctets, ce qui est très important, mais nécessaire vu la taille des instructions VLIW. Le coeur VLIW dispose de ses propres décodeurs, d'un ''scoreboard'', de 7 unités de calcul et de registres. Pour les unités de calcul, il a deux FPU, deux ALU, une unité de branchement, et deux unités LOAD-STORE faisant aussi ALU. Un point important est que le CPU dispose de 64 registres entiers et de 64 registres flottants. C'est deux fois plus que supporte le jeu d'instruction ARM. En mode ARM, seule la moitié des registres est utilisée. Mais en mode optimisé, le traducteur binaire utilise bien les 64 registres, grâce à une sorte de renommage de registres logicielle. Pour simplifier la traduction binaire, le processeur supporte les techniques vues précédemment. Le processeur intègre un ''gated store buffer'' similaire à celui des processeurs Transmetta. Les techniques d'exceptions différées sont aussi supportées, comme sur les processeurs Transmetta. Il a aussi une unité de préchargement décrite par NVIDIA comme agressive, avec support du préchargement de type anticipé (''runahead''). ===L'émulation de la mémoire virtuelle=== Pour finir, il faut parler de la mémoire virtuelle avec la traduction binaire. Sur le processeur source, le processeur gère à la fois des adresses physiques et virtuelles et sa MMU fait la conversion entre les deux. Sur le processeur VLIW, la MMU est simulée par le programme de traduction binaire, partiellement ou totalement. L'implémentation exacte varie suivant que l'on parle du projet Daisy, des processeurs Transmetta ou de Denver. Sur les processeurs Transmetta, il n'y a pas de MMU ni de mémoire virtuelle. A la place, le programme de traduction binaire émule la mémoire virtuelle du processeur source. Le processeur VLIW ne gère que des adresses physiques, rien d'autre. L'espace d'adressage physique du processeur VLIW a la même taille que celui du processeur émulé, ici des processeurs x86. Il est vraisemblable que les adresses physiques utilisées par le processeur x86 sont les mêmes que celles du processeur VLIW. Sur le projet Daisy, le processeur VLIW gère la mémoire virtuelle via pagination, comme les processeurs émulés. Ce qui fait qu'il gère un espace d'adressage virtuel et un espace d'adressage physique. Pour éviter toute confusion, nous parlerons d'adresse physique/virtuelle VLIW pour les adresses physiques/virtuelles du processeur VLIW, d'adresse virtuelle/physique source pour celle du jeu d'instruction traduit, à savoir du Power PC ou du s390, éventuellement de l'x86. Il faut alors faire le lien entre adresses physiques source et adresses virtuelles VLIW. Pour cela, rien de plus simple : il y a correspondance parfaite. L'adresse physique source numéro N correspond à l'adresse virtuelle VLIW numéro N. Cependant, cela signifie que tout l'espace d'adressage virtuel VLIW serait utilisé par le code à traduire. En réalité, il faut ajouter de la place pour le code traduit et le programme de traduction binaire. La conséquence est que l'espace d'adressage virtuel VLIW est plus large que l'espace d'adressage source. L'espace d'adressage virtuel VLIW est découpé en trois sections : une section pour le code Power PC à traduire, une autre pour le code traduit en VLIW, et une dernière réservée au traducteur binaire. Le programme de traduction est placé dans une ROM mappée en mémoire dans la seconde section. Le reste de la seconde section est réservé à une mémoire RAM utilisée par le programme de traduction. [[File:Mémoire virtuelle sur le projet Daisy.png|centre|vignette|upright=1.5|Mémoire virtuelle sur le projet Daisy]] Il faut noter que chaque page physique source, une fois traduite, correspond à N pages virtuelles VLIW. La raison est que le code traduit prend plus de place que le code machine originel. En conséquence, on doit utiliser une page finale plus grande. Pour le reste, des pages contiguës en mémoire physique source sont elles aussi contiguës en mémoire virtuelle VLIW. Le calcul d'adresse est donc simple : l'adresse physique source est multipliée par N, puis on ajoute l'adresse de base à laquelle commence la section pour le code traduit. ==La traduction binaire sur les Burroughs B1700== Nous venons de voir comment accélérer en matériel la traduction binaire, avec des techniques bien spécifiques. Le Burroughs B1700 a procédé autrement et il est intéressant d'étudier en détail son architecture. Son architecture est décrite dans le livre "Interpreting Machines : Architecture and Programming of the Bl700/Bl800 Series", écrit par Elliott I. Organick et James A. Hinds. Une partie de ce qui vfa suivre est un très court résumé de ce livre. : Dans ce qui suit, nous parlerons de traducteur binaire pour parler soit d'un interpréteur pour un langage de programmation de haut niveau, soit pour un logiciel de traduction binaire. Le Burroughs 1700 est un processeur 24 bits, qui a cependant la capacité d'émuler des architectures 8, 16 bits assez simplement, via divers mécanismes. Le Burroughs 1700 incorpore de nombreuses optimisations pour cela. Une partie d'entre elles permet de gérer des opérandes de taille différente de 24 bits, d'autres permettent de gérer des instructions de taille différente de 24 bits, d'autres servent pour les deux. Il incorpore aussi des instructions facilitant le découpage des instructions machines en ''opcode'', adresses et constantes immédiates. ===L'ALU de taille variable=== Les Burroughs B1700 avaient une '''ALU de taille variable''', ce qui veut dire qu'elle pouvait faire des calculs sur un nombre de bits compris entre 0 et 24. Pour cela, les calculs étaient faits avec une ALU de 24 bits, puis les bits de poids fort inutiles étaient masqués. L'ALU de 24 bits pouvait masquer les bits de poids fort du résultat, mais avec des limitations. Elle gérait des opérandes et résultats de 0, 4, 8, 12, 16, 20 et 24 bits. Pour avoir un réglage plus fin, une ALU 4 bits séparée permettait de corriger le résultat. Les registres X et Y étaient reliés à une ALU de 24 bits capable d'effectuer des opérations arithmétiques basiques. Fait étonnant, l'ALU faisait tous les calculs en même temps et fournissait ses résultats dans 7 registres : un registre SUM pour l'addition, un registre DIFFERENCE pour la soustraction, et un registre par opération bit à bit. Les registres pour les opérations bit à bit sont : CMPX et CMPY pour l'opération NOT sur chaque opérande, XANY pour le ET bit à bit, XEOY pour le XOR, XORY pour le OU logique. Les additions et soustractions pouvaient se faire sur des opérandes codés en binaire ou en BCD, suivant le code opération utilisé. A cela, il fallait ajouter deux registres de "résultat" MSKX et MSKY. Ils fournissaient un masque dépendant de la taille du résultat en bits. C'est ce registre qui permettait de gérer des données de 0, 4, 8, 12, 16, 20, et 24 bits, alors que l'ALU faisait 24 bits. Le masque dans ce registre pouvait servir d'opérande dans une opération de masquage ultérieure, pour corriger le résultat. L'ALU prenait en opérande les registres X et Y, mais aussi un registre CYF pour la retenue entrante. En sortie, il fournissait aussi deux retenues sortantes : une pour l'addition et une autre pour la soustraction. Elles étaient mémorisées dans les registres CYL et CYD, respectivement. L'ALU fournissait aussi 12 conditions, qui alimentait un registre d'état. Le registre d'état était segmenté en trois registres appelés XYST, XYCN et BICN. Les registres X et Y sont des registres pour les opérandes, mais il y a aussi deux autres registres de 24 bits. Il s'agit des registres T et L, qui sont des registres généraux. Les registres T et L étaient découpés en 6 sous-registres de 4 bits, nommés LA LB LC LD LE et LF pour le registre L, TA TB TC TD TE et TF pour le registre T. Ils étaient adressables comme n'importe quel registre. Le processeur contenait de nombreux autres registres de 4 bits, dont les sous-registres de T et L. En tout, il y a 27 registres de 4 bits adressables ! Et le processeur disposait d'une ALU 4 bits pour manipuler ces registres de 4 bits. L'ALU 4 bits est capable de faire des MOV entre registres de 4 bits, des opérations bit à bit, et peut aussi tester si un bit vaut 0 ou 1. La dernière possibilité est très utile pour implémenter les branchements. De plus, cela permettait de faire des opérations de masquage, notamment pour appliquer un masquage supplémentaire à celui de l'ALU. Par exemple, pour gérer des opérations sur 14 bits, on effectue une opération sur 16 bits avec l'ALU, et on masque les 2 bits manquants avec l'ALU 4 bits. ===Une architecture bit-adressable=== Le CPU Burroughs B1700 était '''bit-adressable'''. En clair, il pouvait adresser la mémoire bit par bit, si nécessaire. Un avantage est que cela facilitait la traduction binaire des instructions machine, mais nous détaillerons cela plus bas. Un autre avantage est que cela permettait d'émuler des architectures dont la taille des registres/''byte''/mots était très différente. Et cet avantage mérite quelques explications immédiates. Le processeur était un CPU 24 bits, mais il pouvait émuler des processeurs 16 bits, 8 bits, 4 bits, 1 bit, 9 bits, ou toute autre valeur. Pour cela, le processeur lisait des mots de 24 bits et utilisant un ''barrel shifter'' pour sélectionner les bits adéquats. Par exemple, pour un accès de 16 bits, la donnée lue en mémoire était masquée de manière à ne garder que les 16 bits de poids faible. Le ''barrel shifter''/circuit de masquage était placé directement avant le bus mémoire, sur le trajet des données/instructions. Le ''barrel shifter'' était commandé par un registre ''Field Unit'', qui précisait quelle était la taille des données à charger. Les instructions source , à traduire, peuvent faire 16 bit avec tel jeu d'instruction, 8 bits avec un autre, 32 bits sur un autre, etc. Elles peuvent aussi être de longueur fixe ou variable ! Le B1700 utilisait une architecture bit-adressable pour gérer ces contraintes. En effet, avec un CPU bit-adressable, les contraintes d'alignement des instructions disparaissent ! ===Des registres d’interfaçage mémoire adressables=== Pour communiquer avec la mémoire, il avait trois registres séparés : READ, WRITE, MAR. READ contient la donnée lue lors d'une lecture, WRITE est pour une donnée à écrire lors d’une écriture, MAR contient l'adresse à lire ou en cours de lecture. Il s'agit de registres d’interfaçage mémoire, les mêmes que ceux vus dans le chapitre sur le chemin de données du CPU. Une instruction LOAD est donc émulée en deux instructions machines : une instruction MOV pour copier l'adresse dans le registre READ, une instruction de lecture proprement dite. L'écriture demande d'ajouter une seconde instruction MOV pour copier la donnée à écrire, et la lecture est remplacée par une écriture. Le fait que ces registres d’interfaçage mémoire et IO soit adressable est peu commun, et c'est plus quelque chose qu'on attend d'un microcode que d'instructions machines. D'ailleurs, l'implémentation des instructions LOAD/STORE ressemble à ce qui est effectué par le séquenceur d'un CPU. Le séquenceur est d'ordinaire celui qui séquence la copie des adresses/données dans les registres d’interfaçage, puis lance la lecture/écriture. Ici, c'est réalisé via des instructions machines. Il faut bien comprendre que les registres d’interfaçage mémoire ont été promus au rang de registres architecturaux, sur ce processeur. De même, pour communiquer avec les entrées-sorties, il disposait de deux registres CMND et DATA : CMND pour envoyer une commande à une entrée-sortie, DATA pour lire ou écrire une donnée. Il y avait aussi un registre U, qui mémorisait une donnée lue depuis le lecteur de cassette. ===Le code machine du Burroughs B1700=== Le processeur utilise des instructions de 16 bits de long, qui sont copiées dans registre d'instruction M de 16 bits. Le ''program counter'' est appelé le registre A. Les instructions du processeur font 16 bits de long, et elles sont alignées en RAM sur 16 bits, ce qui fait que les 4 bits de poids fort de ce registre valent 0, seuls les 14 bits de poids fort sont utiles. Les adresses mentionnées plus haut, qui adressent les micro-opérations en mémoire RAM, sont des adresses de mots de 16 bits, pas les adresses de bit individuels. Fait intéressant, il était possible de faire un OU logique entre l'instruction lue et un registre du processeur, le résultat étant mémorisé dans le registre M. Cela permettait de faire du code automodifiant, pour émuler des modes d'adressage complexe. Cela permettait par exemple de remplacer une adresse dans une micro-opération. L'adresse est alors surimposée avec un OU dans le champ d'adresse, alors que le reste de l'instruction n'est pas modifié. Afin de gérer les interruptions, ces dernières étaient partiellement détectées en logiciel. Une interruption doit être prise en compte à la toute fin de l'exécution d'une instruction source, quand celle-ci a fini son travail. Mais vu qu'ici, les instructions sont émulées avec des séries d'instructions cibles, il y a un problème : il est possible d'interrompre une instruction émulée en plein milieu. Pour éviter cela, le processeur ne déclenche pas les interruptions matérielles immédiatement, elles sont mises en attente. Une instruction dédiée vérifie si une interruption est en attente, et l'exécute alors cas échéant. L'instruction en question est utilisée en dernier, dans la suite d'instruction qui émule l'instruction source. ===La traduction binaire sur le Burroughs B1700=== Les Burroughs B1700 intégraient une pile d'adresse de retour, capable de mémoriser 16 adresses de 24 bits, ainsi que 4 registres généraux, nommés X, Y, T et L, tous de 24 bits. Un point important est que le registre T avait des possibilités d’extraction spécifiques. Il était possible d'extraire N bits, placés n'importe où dans ce registre, et de les copier dans un autre registre. Le CPU supportait une '''instruction EXTRACT''' pour ça. Nous verrons comment cette possibilité est exploitée pour la traduction binaire dans ce qui suit. Dans ce qui suit, on suppose que l'instruction est composée de '''champs''' : l'opcode, les opérandes, les adresses absolues, les constantes immédiates, les numéros de registre, etc. L'idée est que l'instruction source est chargée dans le registre T, puis découpée en champs, qui sont copiés dans les registres du processeur ou envoyés au microcode. Je rappelle que le registre T est relié à un ''barrel shifter'', différent au précédent, qui permettait de masquer, décaler et extraire une donnée de ce registre. Et il y a la possibilité d'extraire une suite de bit de ce registre T, pour la copier dans un autre registre. Par exemple, prenons une instruction composée d'un opcode, d'une constante immédiate et d'une adresse immédiate. Premièrement, elle est chargée dans le registre T. Deuxièmement, la constante immédiate est extraite du registre T et copiée dans le registre X. Troisièmement, l'adresse est extraite et est copiée dans le registre d’interfaçage mémoire, une lecture est démarrée, et l'opérande lu est copiée dans le registre Y. Enfin, l'instruction équivalente à l'opcode est exécutée par le microcode. Le tout prend plusieurs instructions : une première pour lire l'opcode, une seconde pour lire le premier opérande, une troisième pour lire la seconde opérande, une quatrième pour tout exécuter. Notons que suivant la taille des champs, on peut en charger plusieurs à la fois. Par exemple, imaginons qu'on ait chargé 24 bits, contenant un opcode de 8 bits et une constante immédiate de 16 bits : le registre T est découpé en un opcode et une constante, avec deux instructions EXTRACT. L'architecture est bit-adressable, car elle gère des champs qui ne font pas forcément 8 ou 16 bits. Par exemple, certains jeux d'instructions ont des opcodes codés sur 6 ou 7 bits, voire 9-10 bits. Utiliser une architecture bit-adressable règle ce problème d'alignement. On peut lire un champ depuis la mémoire RAM en précisant l'adresse de son premier bit, pas besoin de gérer des accès non-alignés. Par exemple, prenons une instruction source avec un opcode de 7 bits, suivi par une adresse de 12 bits et une constante immédiate de 15 bits. On peut charger 7 + 12 bits en un premier accès, pour extraite l'opcode et l'adresse, suivi par un second accès de 15 bits pour extraire la constante immédiate. Pour charger un champ, il faut connaitre plusieurs informations : l'adresse de son premier bit, sa taille. Pour cela, le B1700 contient deux registres, nommés ''Field Adress'' (FA) et ''Field Length'' (FL), qui indiquent l'adresse du premier bit et la taille de l'instruction à charger. Le premier fait 24 bits, ce qui permet de gérer des adresses de 24 bits. N'oubliez pas que le processeur est bit-adressable, ce qui permet d'adresser 16 Mébi-bits, soit 2 mébioctets. Le registre pour la taille fait lui 16 bits, ce qui permet de gérer des instructions de 65536 bits, soit 8192 octets ! Leur nom commence par ''field'', car le processeur peut gérer des instructions de taille variable et/ou plus longues que 24 bits. Dans ce cas, le chargement de l'instruction se fait champ par champ. Pour donner un exemple, prenons une instruction composée de 20 champs de 12 bits chacun. Les champs sont chargés un par un dans le registre T. Le registre FA est alors initialisé avec l'adresse de l'instruction, il est incrémenté de 12 à chaque cycle. Le registre FL est initialisé avec la taille de l'instruction, soit 20 × 12 = 240 bits, et il est décrémenté de 16 à chaque cycle. Précisons cependant que la taille d'un champ peut être changée d'un cycle à l'autre. Par exemple, le processeur peut charger un opcode de 8 bits, l'interpréter, détecter que l'instruction demande ensuite de charger une adresse de 16 bits. Dans ce cas, le registre FL est immédiatement altéré pour charger 16 bits, au lieu des 8 bits de l'opcode immédiatement précédent. ===Le Burroughs B1726 : le mal-nommé ''split-level control store''=== Le Burroughs B1700 avait plusieurs modèles : le B1726, le B1710 et le B1800. * Le B1710 plaquait le traducteur binaire en mémoire RAM. * Le B1800 avait ajouté un cache dédié au code du traducteur binaire, afin d'améliorer les performances. * Le B1726 utilisait un ''local store'' dédié au traducteur binaire. Le B1726 peut exécuter le traducteur binaire soit depuis le ''local store'', soit depuis la mémoire RAM avec une pénalité en termes de performances. La documentation appelle cela un '''''split-level control store''''', mais le terme est trompeur : la documentation qualifie de microcode le langage machine du Burroughs B1700, ce qui est à l'origine de beaucoup de confusions. Une autre source de confusion est que ce langage machine a quelques propriétés qu'on pourrait attendre d'un microcode, mais certaines sont manquantes. Par exemple, il peut adresser les registres d’interfaçage mémoire, mais c'est parce que ce sont des registres architecturaux sur ce processeur. Ses instructions n'encodent pas de signaux de commande, par contre, elles font 16 bits et adressent les opérandes de manière implicite. Le ''local store'' mémorisait au maximum 2048 instructions machine, ce qui fait que les 2048 premières "adresses" correspondaient au ''local store''. Les suivantes étaient des adresses de mémoire RAM qui contenaient le reste du traducteur binaire. En pratique, l'adresse qui séparait les deux était configurable ! On pouvait limiter la taille du ''local store'' à un multiple de 32 instructions ! Les adresses restantes étaient alors réattribuées à la RAM. Par exemple, on pouvait attribuer 64 adresses au ''local store'', les 2048 - 64 adresses restantes étaient alors attribuées à la mémoire RAM. Un registre limite, nommé TDPM, indiquait quelle était l'adresse de démarcation entre les deux. Le programmeur devait découper le traducteur binaire en segments, certains étant placés dans le ''local store'', les autres étant en mémoire RAM. Mieux que ça, le processeur autorisait d'utiliser la technique de l'''overlaying'' pour le microcode ! Il y avait même une fonction OVERLAY dédiée pour ! OVERLAY avait besoin de trois opérandes : la taille du segment à copier, son adresse source en mémoire RAM, son adresse de destination dans la micro-SRAM. L'interpréteur réservait un "segment" en mémoire RAM, pour les données, dont le processeur connaissait la position. En dehors de ce segment, il n'y a que des instructions machines à traduire, et le traducteur binaire. Le CPU incorporait pour cela deux registres, un pour l'adresse de base du segment de données, un autre pour son adresse de fin. Il incorporait une protection mémoire limitée sur ce segment, à savoir que seul l'interpréteur pouvait lire ou écrire dans ce segment. ==Les jeux d'instructions dédiés à un langage de programmation== De rares processeurs sont conçus pour un langage de programmation en particulier. On appelle ces processeurs, conçus pour des besoins particuliers, des '''processeurs dédiés'''. Par exemple, les fameux ''Burrough E-mode'' B5000/B6000/B7000 étaient spécialement conçus pour exécuter de l'ALGOL-60. Leurs cousins B2000/B3000/B4000 étaient eux conçus pour le COBOL. Des langages fonctionnels ont aussi eu droit à leurs processeurs dédiés. Le prolog en est un bel exemple, avec les superordinateurs de 5ème génération qui lui étaient dédié. On peut aussi citer les machines LISP, dédiés au langage LISP, qui datent des années 1970. Elles étaient capables d’exécuter certaines fonctions de base du langage directement dans leurs circuits : elles possédaient notamment un ''garbage collector'' câblé dans ses circuits ainsi que des instructions machines supportant un typage déterminé à l’exécution. Les processeurs dédiés ont eu leur heure de gloire au début de l'informatique, à une époque où les langages de haut niveau venaient d'être inventés. À cette époque, les compilateurs n'étaient pas performants et ne savaient pas bien optimiser le code machine. Il était alors rationnel, pour l'époque, de rapprocher le code machine cible et le langage de programmation de haut niveau. De nombreuses architectures dédiés ont ainsi été inventées, avant que les concepteurs se rendent compte des défauts de cette approche. Les défauts en question ne sont pas nombreux, mais assez simples à comprendre. Premièrement, elles sont très rapides pour un langage de programmation en particulier, mais sont assez mauvaises pour les autres, d'où un problème de "compatibilité". Ajoutons à cela que les langages de programmation peuvent évoluer, devenir de moins en moins populaires/utilisés, ce qui rend la création d'architectures généralistes plus pertinente. Enfin, les architectures dédiées sont évidemment des processeurs CISC, pour implémenter les nombreuses fonctionnalités des langages évolués. Et les défauts des CISC sont assez rédhibitoires à l'heure actuelle. À l'heure actuelle, les algorithmes des compilateurs se sont améliorés et savent nettement mieux utiliser le matériel. Ils produisent du code machine efficace, ce qui rend les architecture dédiées bien moins intéressantes. Si on ajoute les défauts de ces architectures dédiées, par étonnant que les architectures dédiées aient presque disparues. <noinclude> {{NavChapitre | book=Fonctionnement d'un ordinateur | prev=L'accélération matérielle de la virtualisation | prevText=L'accélération matérielle de la virtualisation | next=Les processeurs de traitement du signal | nextText=Les processeurs de traitement du signal }} </noinclude> hvtwpfanrifg4x7pvjlnk5g2z1cn5od