- Verilog Basics
- Verilog Introduction
- Verilog Install
- Verilog Datatypes
- Verilog Conditions
- Verilog Loops
- Verilog Objects
- Verilog Libs
- Verilog Control Flow
- Verilog Modules
- Verilog Ports
- Verilog Operators
- Verilog Procedural Blocks
- Verilog Wires
- Verilog - Advanced
- Verilog Param-Modules
- Verilog Interfaces
- Verilog Classes
- Verilog Assertions
- Verilog Generating Blocks
- Verilog Clocking Blocks
- Verilog State Machines
- Verilog Coverage
- Verilog Race Conditions
- Verilog Timing
- Verilog Testing
Verilog Conditions
In Verilog, conditions are used to control the flow of execution based on the evaluation of logical expressions. Conditional statements allow for decision-making in your hardware description, determining how different parts of the design behave under various circumstances.
Conditional Statements in Verilog
ifStatementelseStatementcaseStatementif-elseStatementcasezandcasexStatements
1. if Statement
The if statement is used to execute a block of code when a specified condition is true.
Syntax:
verilogif (condition) begin // Statements end
Example:
verilogmodule check_value; reg [3:0] value; initial begin value = 4'b1010; if (value == 4'b1010) begin $display("Value is 1010"); end end endmodule
In this example, the message "Value is 1010" is displayed if the condition value == 4'b1010 is true.
2. else Statement
The else statement follows an if statement and executes a block of code if the if condition is false.
Syntax:
verilogif (condition) begin // Statements end else begin // Alternative statements end
Example:
verilogmodule check_value; reg [3:0] value; initial begin value = 4'b0001; if (value == 4'b1010) begin $display("Value is 1010"); end else begin $display("Value is not 1010"); end end endmodule
Here, if value is not 4'b1010, the message "Value is not 1010" is displayed.
3. case Statement
The case statement is used for multi-way branching based on the value of a variable. It's similar to a switch-case construct in other programming languages.
Syntax:
verilogcase (expression) value1: begin // Statements for value1 end value2: begin // Statements for value2 end default: begin // Statements for default case end endcase
Example:
verilogmodule case_example; reg [2:0] opcode; initial begin opcode = 3'b010; case (opcode) 3'b000: $display("NOP"); 3'b001: $display("LOAD"); 3'b010: $display("STORE"); 3'b011: $display("ADD"); default: $display("Unknown opcode"); endcase end endmodule
In this example, based on the value of opcode, a specific message is displayed.
4. if-else Statement
The if-else construct allows for multiple conditions to be checked in sequence.
Syntax:
verilogif (condition1) begin // Statements for condition1 end else if (condition2) begin // Statements for condition2 end else begin // Statements for all other cases end
Example:
verilogmodule if_else_example; reg [3:0] value; initial begin value = 4'b0110; if (value == 4'b0000) begin $display("Value is 0"); end else if (value == 4'b0110) begin $display("Value is 6"); end else begin $display("Value is neither 0 nor 6"); end end endmodule
5. casez and casex Statements
casez and casex are variants of the case statement that handle don't-care conditions using z (high-impedance) and x (unknown) values.
casez
The casez statement treats z as a don't-care condition.
Syntax:
verilogcasez (expression) pattern1: begin // Statements for pattern1 end pattern2: begin // Statements for pattern2 end default: begin // Default statements end endcase
Example:
verilogmodule casez_example; reg [3:0] value; initial begin value = 4'b1z10; casez (value) 4'b1z10: $display("Pattern matches 1z10"); 4'b0001: $display("Pattern matches 0001"); default: $display("Pattern does not match"); endcase end endmodule
casex
The casex statement treats x as a don't-care condition.
Syntax:
verilogcasex (expression) pattern1: begin // Statements for pattern1 end pattern2: begin // Statements for pattern2 end default: begin // Default statements end endcasex
Example:
verilogmodule casex_example; reg [3:0] value; initial begin value = 4'b1x01; casex (value) 4'b1x01: $display("Pattern matches 1x01"); 4'bxx01: $display("Pattern matches xx01"); default: $display("Pattern does not match"); endcasex end endmodule
Summary
Verilog provides several conditional statements for making decisions in your hardware design:
if: Checks a single condition.else: Provides alternative actions when theifcondition is false.case: Allows multi-way branching based on the value of an expression.if-else: Handles multiple conditions in sequence.casezandcasex: Handle don't-care conditions for more flexible pattern matching.
Using these constructs effectively helps in controlling the behavior of your hardware design based on various conditions and scenarios.