The default case in a Verilog case statement ensures the circuit behaves predictably when none of the specified cases match. It helps avoid unexpected results and makes your design safer.
Default case importance in Verilog
case (expression)
value1: begin
// statements
end
value2: begin
// statements
end
default: begin
// statements for unmatched cases
end
endcaseThe default block runs if no other case matches.
Including default helps prevent unintended latches by ensuring all outputs get assigned.
opcode is not 0001 or 0010, out is set to 0.case (opcode) 4'b0001: out = 1; 4'b0010: out = 2; default: out = 0; endcase
next_state is always assigned, even if state is unexpected.case (state) IDLE: next_state = RUN; RUN: next_state = STOP; default: next_state = IDLE; endcase
This example shows a case with a default that sets out to 0 if sel is not one of the listed cases. The testbench tests three values, including one that triggers the default.
module default_case_example(input [1:0] sel, output reg [3:0] out); always @(*) begin case (sel) 2'b00: out = 4'd1; 2'b01: out = 4'd2; 2'b10: out = 4'd3; default: out = 4'd0; endcase end endmodule // Testbench module test; reg [1:0] sel; wire [3:0] out; default_case_example uut(sel, out); initial begin sel = 2'b00; #10; $display("sel=%b out=%d", sel, out); sel = 2'b01; #10; $display("sel=%b out=%d", sel, out); sel = 2'b11; #10; $display("sel=%b out=%d", sel, out); $finish; end endmodule
Always include a default to avoid unintended latches in combinational logic.
Without default, synthesis tools might infer memory elements, which can cause bugs.
Default case improves code readability and safety.
The default case handles unexpected inputs safely.
It prevents unintended latches by ensuring all outputs are assigned.
Always use default in case statements for reliable designs.
Practice
Why is the default case important in a Verilog case statement?
Solution
Step 1: Understand the role of
Thedefaultincasedefaultcase catches any input values not explicitly matched by other cases.Step 2: Recognize the impact on hardware behavior
Without adefault, unmatched inputs can cause unintended latches or unpredictable outputs.Final Answer:
It handles all unmatched inputs to avoid unintended behavior. -> Option AQuick Check:
Default case = safe unmatched input handling [OK]
- Thinking default speeds up simulation
- Believing default declares variables
- Assuming default optimizes hardware automatically
Which of the following is the correct syntax for including a default case in a Verilog case statement?
case (sel) 2'b00: out = 1; 2'b01: out = 0; // What is the correct default syntax? endcase
Solution
Step 1: Recall Verilog
Thecasesyntaxdefaultkeyword is used to specify the default case in acasestatement.Step 2: Identify correct syntax
The correct syntax isdefault: statement;. Other keywords likeelseorotherwiseare invalid in Verilogcase.Final Answer:
default: out = 1'bx; -> Option CQuick Check:
Default syntax = "default:" [OK]
- Using 'else' or 'otherwise' instead of 'default'
- Writing 'case default:' which is invalid
- Omitting the colon after default
What is the output of the following Verilog code snippet if sel = 2'b10?
reg out;
always @(*) begin
case (sel)
2'b00: out = 1'b0;
2'b01: out = 1'b1;
default: out = 1'bx;
endcase
endSolution
Step 1: Check the value of
The inputselselis2'b10, which is not matched by any explicit case.Step 2: Determine which case executes
Since2'b10is unmatched, thedefaultcase runs, settingout = 1'bx.Final Answer:
out = 1'bx -> Option DQuick Check:
Unmatched input triggers default = 1'bx [OK]
- Assuming output stays at previous value
- Confusing default with last matched case
- Expecting output to be 0 or 1 without default
Identify the problem in this Verilog case statement and how to fix it:
always @(*) begin
case (state)
2'b00: out = 1'b0;
2'b01: out = 1'b1;
endcase
endSolution
Step 1: Analyze the
Thecasestatement coveragecaseonly covers two states but does not handle other possible values ofstate.Step 2: Understand hardware implications
Without adefault, the synthesizer may infer a latch to holdoutwhenstateis unmatched.Final Answer:
Missingdefaultcase can cause unintended latch inference. -> Option AQuick Check:
Missing default = latch risk [OK]
- Ignoring latch inference from incomplete cases
- Thinking missing default causes syntax error
- Assuming always @(*) needs clock edge
You have a 3-bit input sel controlling an output out with a case statement. You want to ensure no latches are inferred and all inputs are safely handled. Which is the best way to write the case?
always @(*) begin
case (sel)
3'b000: out = 1'b0;
3'b001: out = 1'b1;
3'b010: out = 1'b0;
3'b011: out = 1'b1;
3'b100: out = 1'b0;
3'b101: out = 1'b1;
3'b110: out = 1'b0;
// What about 3'b111?
endcase
endSolution
Step 1: Identify missing case coverage
The input3'b111is not covered explicitly in thecasestatement.Step 2: Prevent latch inference and ensure safe output
Adding adefaultcase assignsouta known value for unmatched inputs, preventing latches and undefined behavior.Final Answer:
Add adefaultcase to assignouta safe value for 3'b111. -> Option BQuick Check:
Default case covers all inputs safely [OK]
- Ignoring missing input cases
- Trying to handle missing cases outside the case statement
- Using loops which are invalid in this context
Ready to prove it?
Pass the test and this pattern moves unknown
