Altifigence Academy

2 / 20 · Konzept

Vorzeichenbehaftete Produkte und Akkumulatorbreite

Leiten Sie eine Akkumulatorbreite aus dem ungünstigsten Operandenbereich ab.

Den negativsten Eingangswert berücksichtigen

Ein W-Bit-Eingang im Zweierkomplement reicht von −2^(W−1) bis 2^(W−1)−1. Das größte positive Produkt entsteht, wenn beide Eingaben den negativsten Wert haben. Für W=8 gilt (−128)×(−128)=16384, mehr als 127×127=16129. Ein vollständiges vorzeichenbehaftetes Produkt zweier W-Bit-Eingaben lässt sich sicher in 2W Bits darstellen.

Für eine Reduktion mit K Termen wählt dieser Kurs die folgende konservative Regel. K muss positiv sein; die Regel setzt gleiche Operandenbreiten und keinen zusätzlichen Bias voraus.

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

Die Regel liefert eine einfache sichere Grenze und behauptet nicht für jedes K die minimale Breite. Bei W=8 und K=4 wählen Sie achtzehn Bits. Vier maximale Produkte ergeben 65536. Ein vorzeichenbehafteter Siebzehn-Bit-Akkumulator reicht nur bis 65535 und versagt daher genau an dieser Grenze. Achtzehn Bits decken −131072 bis 131071 ab. Bei K=1 kommen keine zusätzlichen Akkumulationsbits hinzu.

Das Vorzeichen ausdrücklich erhalten

Deklarieren Sie Zwischensignale, statt die Größe von Ausdrücken zu erraten. AW muss mindestens PW betragen.

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

Das Acht-Bit-Muster 0xFE stellt −2 dar. Die Multiplikation mit drei ergibt −6; die Erweiterung dieses Produkts erfordert Vorzeichenerweiterung. Nullerweiterung verwandelt eine negative Zahl in eine positive. Dokumentieren Sie den Punkt, an dem ein vorzeichenloses Schnittstellen-Bitmuster zum vorzeichenbehafteten arithmetischen Wert wird.

Die Breite hängt von der vollständigen, im Akkumulator gehaltenen Reduktion ab. Die Aufteilung von K in Kacheln rechtfertigt keine geringere Breite eines Teilakkumulators, wenn dieser vor dem Zusammenführen überlaufen kann. Das Hinzufügen eines Bias oder das Kombinieren mehrerer Reduktionen erfordert eine neue Wertebereichsanalyse.

Testen Sie Minimum×Minimum, Minimum×Maximum, Maximum×Maximum und wechselnde Vorzeichen. Bewahren Sie sowohl die breite Ganzzahlreferenz als auch das Ergebnis mit gewählter Breite auf. Exakte Akkumulation im spezifizierten Bereich und Umlauf oder Sättigung außerhalb davon sind getrennte Verhaltensregeln; wenn alle Abweichungen pauschal als Überlauf behandelt werden, bleiben echte Vorzeichenfehler verborgen.

Selbst ausprobieren

Bestimmen Sie für W=4 und K=3 die konservative AW und die maximale positive Summe. Welches Bit wird bei der Erweiterung des Produkts −8×7 verwendet?

Erklärung lesen

PW=8 und ceil(log2 3)=2, also AW=10. Die maximale positive Summe ist 3×64=192. Das Produkt ist −56 und muss mit Einsen erweitert werden. Zehn vorzeichenbehaftete Bits decken −512..511 ab.

Deine Auswahl gilt für diesen Browser. Du kannst sie jederzeit in der Fußzeile ändern.