8 / 37 · Konzept
Zweierkomplement, Vorzeichenerweiterung und Overflow
Signed-Interpretation und Additionsoverflow durch Gleichungen und Gegenbeispiele unterscheiden.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Das höchstwertige Bit erhält ein anderes Gewicht
Eine -Bit-ZweierkomplementzahlZweierkomplement Darstellung vorzeichenbehafteter Ganzzahlen mit fester Bitbreite. n Bit reichen von −2^(n−1) bis 2^(n−1)−1. wird so interpretiert:
Die vier Bits 1010 bedeuten unsignedUnsigned Interpretation einer Bitfolge als nichtnegative Ganzzahl. Der n-Bit-Bereich ist 0 bis 2^n−1 und kann sich von der signed-Interpretation derselben Bits unterscheiden. Mehr erfahren 10, signed −6. Man darf nicht das Vorzeichenbit abtrennen und den Rest als Betrag lesen. entsteht bei fester Breite durch BitinversionInversion NOT vertauscht 0 und 1. Ein Überstrich wendet NOT auf den gesamten darunterstehenden Ausdruck an. Mehr erfahren und Addition von 1; zum Minimum −8 existiert aber kein +8 im selben 4-Bit-signed-Bereich.
Erweiterung muss den Wert erhalten
Unsigned wird links mit Nullen erweitert, signed mit dem bisherigen Vorzeichenbit. Aus 1010 wird mit 00001010 der Wert +10, mit 11111010 der Wert −6. Dieselben Bits zu verbreitern verlangt je nach Interpretation unterschiedliche Schaltungen.
logic signed [3:0] a, b;
logic signed [4:0] exact;
logic [3:0] result;
logic overflow;
assign exact = {a[3], a} + {b[3], b};
assign result = exact[3:0];
assign overflow = (a[3] == b[3]) && (result[3] != a[3]);Das Beispiel addiert zwei signed Operanden ohne carry-Eingang. exact bewahrt die 5-Bit-Summe; geprüft wird, ob das Vorzeichen des verkürzten Ergebnisses stimmt.
Der Startwert ist 11111010. Beachten Sie, dass unsigned 250 und signed −6 dieselben Bits haben. Das Umschalten von b7 verändert beide Interpretationen in entgegengesetzte Richtungen.
11111010 → unsigned 250 · signed -6 · hex 0xFA
Carry und signed Overflow unterscheiden sich
Werden gleichnamige Vorzeichen addiert und wechselt das Ergebnisvorzeichen, liegt Overflow vor. In vier Bit wird als 1010, also scheinbar −6, gespeichert; als 0111, scheinbar +7. Bei zwei verschieden vorzeichenbehafteten Zahlen entsteht diese Bereichsüberschreitung nicht.
Gemischte signed/unsigned-RTL-Ausdrücke erschweren Vergleichs- und Erweiterungsregeln. Geben Sie Breite und Vorzeichen beider Operanden explizit an und testen Sie Minimum, −1, 0 und Maximum.
Selbst ausprobieren
Bestimmen Sie gespeicherte Bits und Overflow für und in vier Bit signed. Erklären Sie auch die Negation von .
Erklärung lesen
ist 1001 ohne Overflow. 10 liegt außerhalb des Bereichs und wird als 1010 (−6) gespeichert: Overflow. Inversion von −8 plus 1 ergibt wieder 1000, da +8 nicht darstellbar ist. Dies darf nicht als korrekte Betragsberechnung verwendet werden.