2 / 20 · Concept
Produits signés et largeur d’accumulateur
Déduisez la largeur d’accumulateur de la plage d’opérandes la plus défavorable.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Inclure l’entrée la plus négative
Une entrée en complément à deux sur W bits va de −2^(W−1) à 2^(W−1)−1. Le plus grand produit positif apparaît lorsque les deux entrées sont la valeur la plus négative. Pour W=8, (−128)×(−128)=16384, qui dépasse 127×127=16129. Le produit signé complet de deux entrées sur W bits est représentable sans risque sur 2W bits.
Pour une réduction de K termes, ce cours choisit la règle prudente ci-dessous. K doit être positif ; la règle suppose des opérandes de même largeur et aucun biais supplémentaire.
Cette règle est une borne sûre et simple, sans prétendre donner la largeur minimale pour chaque K. Avec W=8 et K=4, choisissez dix-huit bits. Quatre produits maximaux donnent une somme de 65536. Un accumulateur signé sur dix-sept bits s’arrête à 65535 : il échoue précisément à cette limite. Dix-huit bits couvrent −131072 à 131071. Lorsque K=1, aucun bit supplémentaire d’accumulation n’est ajouté.
Préserver explicitement le signe
Déclarez des signaux intermédiaires au lieu de deviner la taille des expressions. AW doit être au moins égal à PW.
localparam int PW = 2*W;
localparam int AW = PW + $clog2(K);
logic signed [W-1:0] a, b;
logic signed [PW-1:0] product;
logic signed [AW-1:0] addend, acc;
assign product = $signed(a) * $signed(b);
assign addend = {{(AW-PW){product[PW-1]}}, product};La configuration sur huit bits 0xFE représente −2. La multiplier par trois donne −6 ; élargir ce produit exige une extension de signe. L’extension par zéros transforme un nombre négatif en nombre positif. Documentez le point où une configuration de bits provenant d’une interface non signée devient une valeur arithmétique signée.
La largeur dépend de la réduction complète conservée dans l’accumulateur. Découper K en tuiles ne justifie pas de réduire la largeur d’un accumulateur partiel s’il peut déborder avant la combinaison. Ajouter un biais ou combiner plusieurs réductions nécessite une nouvelle analyse de plage.
Testez minimum×minimum, minimum×maximum, maximum×maximum et des signes alternés. Conservez à la fois la référence entière large et le résultat à la largeur choisie. L’accumulation exacte dans la plage définie et le rebouclage modulaire ou la saturation hors de cette plage sont des contrats distincts ; classer tous les écarts comme de simples débordements masque de véritables erreurs de signe.
Essayez vous-même
Pour W=4 et K=3, trouvez AW selon la règle prudente et la somme positive maximale. Quel bit étend le produit −8×7 ?
Lire l’explication
PW=8 et ceil(log2 3)=2, donc AW=10. La somme positive maximale est 3×64=192. Le produit vaut −56 et doit être étendu par des uns. Dix bits signés couvrent −512..511.