2 / 20 · Concetto
Prodotti con segno e larghezza dell'accumulatore
Ricava la larghezza dell'accumulatore dall'intervallo peggiore degli operandi.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Includi l'ingresso più negativo
Un ingresso in complemento a due a W bit va da −2^(W−1) a 2^(W−1)−1. Il massimo prodotto positivo si verifica quando entrambi gli ingressi sono il valore più negativo. Per W=8, (−128)×(−128)=16384, che supera 127×127=16129. Un prodotto completo con segno di due ingressi a W bit è rappresentabile in sicurezza con 2W bit.
Per una riduzione contenente K termini, questo corso sceglie la regola conservativa seguente. K deve essere positivo; la regola presume operandi della stessa larghezza e nessun bias aggiuntivo.
La regola è un semplice limite sicuro, non un'affermazione della larghezza minima per ogni K. Con W=8 e K=4, scegli diciotto bit. Quattro prodotti massimi sommano a 65536. Un accumulatore con segno a diciassette bit arriva a 65535, quindi fallisce proprio a questo limite. Diciotto bit coprono da −131072 a 131071. Quando K=1, non vengono aggiunti bit di accumulo.
Conserva esplicitamente il segno
Dichiara i segnali intermedi anziché indovinare il dimensionamento delle espressioni. AW deve essere almeno 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};Una configurazione a otto bit 0xFE rappresenta −2. Moltiplicare per tre dà −6; ampliare quel prodotto richiede l'estensione del segno. L'estensione con zeri trasforma un numero negativo in uno positivo. Documenta il punto in cui una configurazione di bit dell'interfaccia senza segno diventa un valore aritmetico con segno.
La larghezza dipende dalla riduzione completa conservata nell'accumulatore. Dividere K in blocchi non giustifica la riduzione della larghezza di un accumulatore parziale se questo può andare in overflow prima della combinazione. Aggiungere un bias o combinare più riduzioni richiede una nuova analisi dell'intervallo.
Prova minimo×minimo, minimo×massimo, massimo×massimo e segni alternati. Mantieni sia il riferimento intero esteso sia il risultato alla larghezza scelta. L'accumulo esatto entro l'intervallo specificato e il ritorno modulare o la saturazione fuori da esso sono contratti distinti; trattare tutte le differenze come generico overflow nasconde veri errori di segno.
Prova tu
Per W=4 e K=3, trova AW conservativo e la massima somma positiva. Quale bit estende il prodotto −8×7?
Leggi la spiegazione
PW=8 e ceil(log2 3)=2, quindi AW=10. La massima somma positiva è 3×64=192. Il prodotto è −56 e deve essere esteso con uno. Dieci bit con segno coprono −512..511.