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