Casex und Casez
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 56 von 90.
Manchmal sind nur bestimmte Bits in einem Wert von Bedeutung, während andere Bits ignoriert werden können. Zum Beispiel möchten Sie in einem Prioritäts-Encoder das erste 1-Bit finden, unabhängig von den anderen Bits.
Eine reguläre case-Anweisung würde von Ihnen verlangen, jede mögliche Kombination der Don't-Care-Bits aufzulisten — was bei breiten Bussen unmöglich ist.
<strong>casez</strong> und <strong>casex</strong> lösen dieses Problem, indem sie es Ihnen ermöglichen, bestimmte Bits unter Verwendung von ?, z oder x als „don't care“ zu markieren.
Casez vs. Casex vs. reguläres Case
| Anweisung | Don't-Care-Bits | Bestens geeignet für |
|---|---|---|
case | Keine | Exakte Übereinstimmung |
casez | z oder ? | Prioritäts-Encoder (empfohlen) |
casex | x, z oder ? | Vermeiden (verbirgt Bugs) |
<strong>casez</strong>ignoriert Bits, diezoder?sind (empfohlen)<strong>casex</strong>ignoriert ebenfallsxBits — was Simulationsfehler verbergen kann
Verwenden Sie immer <strong>casez</strong>, nicht <strong>casex</strong>. casex wurde zuerst erstellt, aber Ingenieure erkannten, dass es gefährlich ist, da es x-Werte ignoriert (die oft auf nicht initialisierte Register oder Simulationsfehler hinweisen). casez wurde als sicherere Alternative eingeführt.
Beispiel
casez (data)
4'b???1: out = 0; // Bit0 muss 1 sein, andere sind egal
4'b??1?: out = 1; // Bit1 muss 1 sein, andere sind egal
4'b?1??: out = 2; // Bit2 muss 1 sein, andere sind egal
4'b1???: out = 3; // Bit3 muss 1 sein, andere sind egal
endcaseDas ? bedeutet „egal“ – dieses Bit kann 0, 1 oder beliebig sein.
Aufgabe
Was zu tun ist:
Fügen Sie die fehlende casez-Anweisung hinzu, damit dieser Decoder funktioniert.
Wie es funktioniert:
input = 4'b???1→out = 4'b0001input = 4'b??1?→out = 4'b0010input = 4'b?1??→out = 4'b0100input = 4'b1???→out = 4'b1000- Default →
out = 4'b0000
Spickzettel
casez ermöglicht den Mustervergleich mit Don't-Care-Bits unter Verwendung von ? oder z, was nützlich für Prioritäts-Encoder ist, bei denen nur bestimmte Bits von Bedeutung sind.
| Anweisung | Don't-Care-Bits | Anmerkungen |
|---|---|---|
case | Keine | Exakte Übereinstimmung |
casez | z oder ? | Empfohlen |
casex | x, z, oder ? | Vermeiden — verbirgt Fehler |
Bevorzugen Sie immer casez gegenüber casex. casex ignoriert x-Werte, was nicht initialisierte Register oder Simulationsfehler maskieren kann.
casez (data)
4'b???1: out = 0; // Bit0 muss 1 sein, andere sind egal
4'b??1?: out = 1; // Bit1 muss 1 sein, andere sind egal
4'b?1??: out = 2; // Bit2 muss 1 sein, andere sind egal
4'b1???: out = 3; // Bit3 muss 1 sein, andere sind egal
default: out = 0;
endcaseDas ? bedeutet "don't care" — dieses Bit kann 0, 1 oder beliebig sein.
Probier es selbst
module decoder (
input [3:0] in,
output reg [3:0] out
);
always @(*) begin
// TODO: casez-Anweisung hinzufügen
// in = 4'b???1 -> out = 4'b0001
// in = 4'b??1? -> out = 4'b0010
// in = 4'b?1?? -> out = 4'b0100
// in = 4'b1??? -> out = 4'b1000
// default -> out = 4'b0000
end
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen