Altifigence Academy

2 / 20 · Concepto

Productos con signo y anchura del acumulador

Deduce la anchura del acumulador a partir del intervalo de operandos del peor caso.

Incluye la entrada más negativa

Una entrada de W bits en complemento a dos va de −2^(W−1) a 2^(W−1)−1. El mayor producto positivo se obtiene cuando ambas entradas tienen el valor más negativo. Para W=8, (−128)×(−128)=16384, que supera 127×127=16129. Un producto completo con signo de dos entradas de W bits puede representarse de forma segura en 2W bits.

Para una reducción de K términos, este curso elige la siguiente regla conservadora. K debe ser positivo; la regla supone operandos de igual anchura y ningún sesgo adicional.

Wacc=2W+⌈log⁡2K⌉W_{acc}=2W+\lceil\log_2 K\rceil

La regla es una cota segura sencilla, no una afirmación de anchura mínima para todos los valores de K. Con W=8 y K=4, elige dieciocho bits. Cuatro productos máximos suman 65536. Un acumulador con signo de diecisiete bits llega hasta 65535, así que falla exactamente en este límite. Dieciocho bits cubren de −131072 a 131071. Cuando K=1, no se añaden bits adicionales de acumulación.

Conserva el signo explícitamente

Declara señales intermedias en lugar de adivinar el dimensionamiento de las expresiones. AW debe ser al menos PW.

SystemVerilog
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};

El patrón de ocho bits 0xFE representa −2. Multiplicarlo por tres da −6; ampliar ese producto requiere extensión de signo. La extensión con ceros convierte un número negativo en positivo. Documenta el punto en el que un patrón de bits de una interfaz sin signo se convierte en un valor aritmético con signo.

La anchura depende de la reducción completa retenida en el acumulador. Dividir K en bloques no justifica reducir la anchura de un acumulador parcial si puede desbordarse antes de combinarlo. Añadir un sesgo o combinar varias reducciones requiere un nuevo análisis de intervalos.

Prueba mínimo×mínimo, mínimo×máximo, máximo×máximo y signos alternos. Conserva tanto la referencia entera ancha como el resultado de la anchura elegida. La acumulación exacta dentro del intervalo especificado y el comportamiento modular o la saturación fuera de él son contratos distintos; tratar todas las discrepancias como desbordamiento genérico oculta errores reales de signo.

Inténtalo tú

Para W=4 y K=3, calcula AW conservador y la suma positiva máxima. ¿Qué bit extiende el producto −8×7?

Leer la explicación

PW=8 y ceil(log2 3)=2, así que AW=10. La suma positiva máxima es 3×64=192. El producto es −56 y debe extenderse con unos. Diez bits con signo cubren −512..511.

Tu elección se aplica a este navegador. Puedes cambiarla en el pie de página.