Altifigence Academy

2 / 24 · Concept

Largeurs, extension de signe et débordement

Distinguez l’interprétation, l’extension et la réduction de largeur à partir d’exemples numériques.

Distinguer une configuration de bits de sa signification

La configuration sur huit bits 1111_1101 représente 253 en non signé ou -3 en complément à deux signé. Les bits stockés sont identiques, mais les comparaisons et les extensions diffèrent. Une valeur signée sur huit bits va de -128 à 127 ; une valeur non signée va de 0 à 255. La largeur détermine le nombre de configurations représentables, tandis que le caractère signé ou non signé détermine leur interprétation numérique.

Étendez le nombre non signé 253 par des zéros pour le porter à seize bits. Étendez le signe de -3 en répétant son bit de poids fort d’origine, ce qui donne 1111_1111_1111_1101. Une extension par zéros transformerait -3 en 253. En SystemVerilog, définissez explicitement les types et largeurs des opérandes avant le calcul ; ne supposez pas qu’une concaténation ou une sélection de bits conserve l’interprétation signée souhaitée.

SystemVerilog
logic [7:0] ua, ub;
logic [8:0] usum;
logic signed [7:0] sa, sb;
logic signed [8:0] sax, sbx, ssum;
assign usum = {1'b0, ua} + {1'b0, ub};
assign sax = {sa[7], sa};
assign sbx = {sb[7], sb};
assign ssum = sax + sbx;

Ici, les deux entrées passent à neuf bits avant l’addition. L’addition non signée 255+1 donne 256, puis zéro dans les huit bits de poids faible. L’addition signée 127+1 donne également la valeur mathématique 128, mais sa réduction à huit bits signés produit -128. La retenue indique le franchissement d’une limite non signée ; le débordement signé indique le franchissement d’une limite signée. L’addition d’opérandes de même signe qui change le signe du résultat révèle un débordement signé. L’addition de -1 et 1 peut produire une retenue sans débordement signé.

Prévoyez aussi les largeurs intermédiaires. Le plus grand produit de deux nombres non signés sur huit bits vaut 65025 et nécessite seize bits. Quatre valeurs non signées sur huit bits peuvent donner une somme de 1020, qui nécessite dix bits. Tronquer chaque somme partielle à huit bits perd une information qu’un registre final plus large ne pourra pas récupérer.

OpérationRésultat largeInterprétation après réduction
non signé 255+12560 avec retenue
signé 127+1128-128 avec débordement
signé -3+2-1-1 sans débordement

Utilisez les avertissements WIDTH de Verilator pour analyser les changements de taille involontaires. Les vérifications Node de ce cours exécutent des modèles numériques, et non ces extraits HDL. Testez zéro, les valeurs extrêmes et les signes mixtes avant de considérer des exemples positifs courants comme une preuve de correction.

Essayez vous-même

Calculez le résultat obtenu en étendant le signe de -3 et 2, codés sur huit bits, à neuf bits, puis en les additionnant. Trouvez aussi la largeur minimale de la somme exacte de quatre valeurs non signées égales à 255.

Lire l’explication

Les opérandes sur neuf bits sont 111111101 et 000000010. Leur somme vaut 111111111, soit -1. Quatre valeurs de 255 donnent 1020 ; neuf bits non signés s’arrêtent à 511, il faut donc dix bits.

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.