10.11. Verilog Conditional Operator: The Ternary Decision Maker
Introduction
The conditional operator `? :`, also known as the ternary operator, is a compact way to express conditional assignments. It directly maps to multiplexer hardware and is one of the most elegant ways to write conditional logic in a single line. Understanding when and how to use it effectively is key to writing clean, synthesizable RTL.
At VLSI Mentor, we emphasize that the conditional operator is perfect for simple selections but should be used judiciously—complex nested conditionals can become difficult to read and maintain.
Conditional Operator Syntax
result = condition ? true_value : false_value;
Components:
- `condition`: Boolean expression (evaluates to 1 or 0)
- `?`: If condition is true
- `true_value`: Value when condition is true (1)
- `:`: Else
- `false_value`: Value when condition is false (0)
Read as: "If condition is true, use true_value; otherwise, use false_value"
Basic Examples
Verilog
10.11.1. Hardware Mapping: Multiplexer
The conditional operator directly synthesizes to a multiplexer (mux)!
Verilog
2-to-1 Multiplexer
Verilog
Nested Conditional Operators
4-to-1 Multiplexer
Verilog
8-to-1 Multiplexer
Verilog
10.11.2. Practical Applications
Application 1: Min/Max Finder
Verilog
Application 2: Saturating Arithmetic
Verilog
Application 3: Absolute Value
Verilog
Application 4: Clamp/Limit Value
Verilog
Application 5: Priority Selector
Verilog
Application 6: Divide by Power of 2 with Rounding
Verilog
Application 7: Parameterized Default Value
Verilog
10.11.3. Conditional vs If-Else
When to Use Conditional Operator
// ✅ GOOD: Simple selection
assign result = sel ? a : b;
// ✅ GOOD: Min/max
assign maximum = (a > b) ? a : b;
// ✅ GOOD: Simple condition
assign enable = (count < threshold) ? 1'b1 : 1'b0;
When to Use If-Else
Verilog
Verilog
10.11.4. Complex Conditional Examples
Three-Way Selection
Verilog
Multiple Conditions
Verilog
Conditional in Expressions
Verilog
10.11.5. Common Pitfalls
Pitfall 1: Forgetting Parentheses
Verilog
Pitfall 2: Width Mismatch
Verilog
Pitfall 3: Overly Complex Nesting
Verilog
Pitfall 4: Don't Use X or Z
Verilog
10.11.6. Performance Considerations
Simple Conditional (Efficient)
Verilog
Nested Conditional (Mux Tree)
Verilog
Deeply Nested (Can Be Slow)
Verilog
10.11.7 Best Practices
✅ Use for simple selections (2-to-1, 4-to-1 mux)
✅ Use for min/max operations
✅ Use for single-line conditionals
✅ Keep nesting shallow (≤3 levels)
✅ Use parentheses for clarity
❌ Don't create deeply nested chains
❌ Don't mix with complex logic
❌ Don't use for multiple assignments
❌ Don't use if hard to read
10.11.8 Conditional Operator vs Case Statement
Verilog
10.11.9 Summary Table

10.11.10 Real-World Design Examples
ALU Operation Selector
Verilog
Data Valid Selector
Verilog
