10 / 63 · Übung
Entwurfsübung: Von der Spezifikation zur Dreieingangsmehrheit
Eine Textspezifikation in eine vollständige Wahrheitstabelle überführen und Minimierung, Implementierung und Vollprüfung verbinden.
Lektionen sind frei lesbar. Schreibe dich ein, um deinen Fortschritt zu speichern.
Bedingungen vor der Implementierung festlegen
Wir entwerfen eine Schaltung mit y=1, wenn von a, b, c mindestens zwei Eingänge 1 sind. Die Eingänge seien stabile 0/1-Werte, gleich gewichtet und ohne Speicherung früherer Eingaben. „Genau zwei“ und „mindestens zwei“ unterscheiden sich bei 111.
| abc | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
|---|---|---|---|---|---|---|---|---|
| y | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
Jeder Term steht für zwei gleichzeitig gesetzte Eingänge. Dieselbe Funktion lässt sich zu faktorisieren. Welche Form schneller ist, hängt von Zellen und Ankunftszeiten ab.
Mehrheit entspricht dem Übertrag eines Volladdierers
Lesen Sie cin unten als dritten Eingang c. cout ist unser y, sum die ungerade ParitätParität Gibt an, ob die Anzahl gesetzter Bits gerade oder ungerade ist. Paritätsprüfung erkennt ungerade viele Bitfehler, kann gerade viele jedoch übersehen. Mehr erfahren. Der Vergleich von 001 und 111 zeigt, warum es falsch ist, Parität als Mehrheitsfunktion zu verwenden.
a + b + cin = sum + 2 × cout
Den Prüfmaßstab unabhängig aus der Spezifikation bilden
Wird (a & b) | (a & c) | (b & c) unverändert als Referenzmodell kopiert, kann derselbe Fehler in beiden stehen. Berechnen Sie stattdessen die Spezifikation „mindestens zwei Einsen“ mit Ganzzahlen.
module voter3(input logic a, b, c, output logic y);
assign y = (a & b) | (a & c) | (b & c);
endmodule
module tb;
timeunit 1ns;
timeprecision 1ps;
logic a, b, c, y;
int ones;
voter3 dut(.*);
initial begin
for (int v = 0; v < 8; v++) begin
{a, b, c} = v[2:0];
#1;
ones = int'(a) + int'(b) + int'(c);
assert (y === (ones >= 2))
else $fatal(1, "voter mismatch at %03b", {a,b,c});
end
$finish;
end
endmoduleDie Erweiterung jedes Bits zu int vermeidet Breitenverwechslungen in 1-Bit-Arithmetik. #1 gibt der kombinatorischen Simulation Zeit zum Aktualisieren und beweist keinen Betrieb des realen Chips in 1 ns.
Die Spezifikation ändern und Gegenbeispiele finden
Mit einer Ausgangsfreigabe e gilt . Vier Eingänge verlangen jetzt 16 Kombinationen für eine vollständige Prüfung. Prüfen Sie zusätzlich die InvarianteInvariante Bedingung, die bei jeder zulässigen Ausführung stets wahr bleiben muss. Eine FIFO mit Tiefe vier enthält etwa immer zwischen null und vier Elemente. Mehr erfahren, dass bei e=0 alle a, b, c ignoriert werden.
Selbst ausprobieren
Nennen Sie alle Eingaben, die den Fehler y=(a XOR b XOR c) aufdecken. Welche Zeile ändert sich gegenüber der Mehrheit, wenn genau zwei Einsen verlangt sind?
Erklärung lesen
XOR weicht bei 001, 010, 100, 011, 101 und 110 ab: in den ersten drei Fällen fälschlich 1, in den letzten drei fälschlich 0. Für genau zwei Einsen wird gegenüber der Mehrheit nur 111 auf 0 geändert.