Fig. 1 – Division d’un polynôme à coefficients binaires
La notation habituelle utilise k pour désigner le nombre de bits de données. La taille du message avec
l’ajout du CRC est n. La taille du CRC est donc n-k, qui est aussi le degré du polynôme générateur.
Dans la description théorique de l’algorithme, on multiplie le message par n-k, c’est à dire qu’on y
ajoute n-k zéros: on l’appelle alors le message augmenté.
On peut mettre en œuvre cette division bit-à-bit simplement à l'aide de registres à décalages et de
portes XOR (OU exclusif); ce circuit porte le nom de « Linear Feedback Shift Register ». Lors de
l’introduction des zéros du message augmenté, la valeur du CRC sera lue en sortie.
Fig. 2 – Calcul d'un CRC par registres à décalage
Les premières implémentations logicielles émulaient ce fonctionnement. Rapidement, une méthode a
été développée afin d'utiliser efficacement un processeur [3], c’est-à-dire traiter des mots et non des
bits (soit le nombre de bits traités en parallèle). Celle-ci se base sur le fait que le contenu des registres
est une certaine combinaison de leur contenu précédent et des nouveaux bits introduits. Pour traiter
plusieurs bits en parallèle, il faut pré-calculer ce résultat pour chaque combinaison possible de ces
bits: cela nécessite une table de 2 mots de (n-k) bits de long. Pour chaque valeur possible, un élément
de la table donne le reste de la division de bits augmentés de n-k zéros.
L'algorithme prend la forme suivante, lorsque <n-k (itération sur i, data[i] est large de !":
crc = ((crc<< )^data[i]) ^ table[crc>>(n-k- )].
Après les bits de données, il faut encore traiter (n-k) zéros (pour former les données augmentées).
Généralement, on traite 8 bits à la fois, ce qui nécessite une table de taille raisonnable, et les opérations
se font maintenant généralement sur 32 bits (ce qui demande moins d'opérations que signalé dans des
articles précédents [4]). On peut noter qu'il existe une variante de cet algorithme qui évite de devoir
traiter les bits de zéros en fin de calcul; tout ce qui est dit ici s'applique également dans ce cas. On peut
trouver introduction claire et intuitive aux CRC dans [5].
2. Cas d'un processeur à instructions longues
2. Cas d'un processeur à instructions longues2. Cas d'un processeur à instructions longues
2. Cas d'un processeur à instructions longues
L'algorithme classique du CRC a été mis en œuvre sur un processeur de signal de TI (Texas
Instruments) de la famille TMS320C62 [6]. Ce processeur est destiné aux applications exigeantes en
calculs tels les systèmes de télécommunication à haut débit. La caractéristique principale de celui-ci est
son architecture VLIW (Very Long Instruction Word) qui permet d'exécuter jusqu'à 8 instructions
élémentaires en parallèle. Il est conçu pour atteindre des performances maximales en utilisant un
pipeline logiciel [7]: chaque itération d'une boucle est démarrée aussitôt que l'unité appropriée est
libre. Le noyau de la boucle pipelinée exécute donc plusieurs instructions en parallèle pour le compte
d'itérations successives.
Signalons d’abord que bien qu’une instruction de lecture en mémoire puisse être démarrée à chaque
cycle, le résultat n’est disponible qu’après 5 cycles, à cause de la structure en pipeline de l'architecture
C6000. Cette caractéristique n’est pas limitée à ce processeur. Par exemple, le DSP Trimedia de Philips
possède également un noyau VLIW avec 5 unités d’exécution. Les instructions d’accès en mémoire y
ont un délai de 3 cycles.