Casex And Casez
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 56 von 90.
Manchmal interessieren dich nur bestimmte Bits in einem Wert, während andere Bits ignoriert werden können. Zum Beispiel möchtest du in einem Prioritätsencoder das erste 1-Bit finden, unabhängig von den anderen Bits.
Eine reguläre case-statement würde von dir 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 dir erlauben, bestimmte Bits mithilfe von ?, z oder x als „irrelevant“ zu kennzeichnen.
Casez vs Casex vs regulärer Case
| Statement | Don't-Care-Bits | Am besten geeignet für |
|---|---|---|
case | Keine | Exakte Übereinstimmung |
casez | z oder ? | Prioritätskodierer (empfohlen) |
casex | x, z oder ? | Vermeiden (verbirgt Fehler) |
<strong>casez</strong>ignoriert Bits, diezoder?sind (empfohlen)<strong>casex</strong>ignoriert außerdemx-Bits, wodurch Simulationsfehler verborgen werden können
Verwende immer <strong>casez</strong>, nicht <strong>casex</strong>. casex wurde zuerst erstellt, aber Ingenieure erkannten, dass es gefährlich war, weil es x-Werte ignoriert (die häufig auf nicht initialisierte Register oder Simulationsfehler hinweisen). casez wurde als sicherere Alternative eingeführt.
Beispiel
casez (data)
4'b???1: out = 0; // Bit0 must be 1, others don't matter
4'b??1?: out = 1; // Bit1 must be 1, others don't matter
4'b?1??: out = 2; // Bit2 must be 1, others don't matter
4'b1???: out = 3; // Bit3 must be 1, others don't matter
endcaseDas ? bedeutet „egal“. Dieses Bit kann 0, 1 oder irgendetwas sein.
Aufgabe
Was zu tun ist:
Füge die fehlende casez-Anweisung hinzu, damit dieser decoder funktioniert.
So funktioniert es:
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
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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler