The conditional (ternary) operator lets you choose between two values based on a condition in a simple way.
Conditional (ternary) operator in Verilog
condition ? value_if_true : value_if_false;
The condition is evaluated first.
If condition is true (non-zero), the expression returns value_if_true, otherwise value_if_false.
a if sel is 1, otherwise selects b.assign out = (sel == 1) ? a : b;x or y to result.wire [3:0] result = (x > y) ? x : y;
led if button_pressed is true, else turns it off.assign led = (button_pressed) ? 1'b1 : 1'b0;
This example shows a simple module using the ternary operator to select between inputs a and b based on sel. The testbench prints the output for different input combinations.
module ternary_example(input wire sel, input wire a, input wire b, output wire out); assign out = sel ? a : b; endmodule // Testbench module test; reg sel, a, b; wire out; ternary_example uut(sel, a, b, out); initial begin $display("sel a b | out"); sel = 0; a = 0; b = 0; #1 $display("%b %b %b | %b", sel, a, b, out); sel = 0; a = 0; b = 1; #1 $display("%b %b %b | %b", sel, a, b, out); sel = 1; a = 1; b = 0; #1 $display("%b %b %b | %b", sel, a, b, out); sel = 1; a = 0; b = 1; #1 $display("%b %b %b | %b", sel, a, b, out); $finish; end endmodule
The ternary operator is a compact way to write simple if-else assignments.
It is often used in assign statements for combinational logic.
For complex conditions or multiple choices, use nested ternary operators carefully or switch to if-else blocks for clarity.
The conditional (ternary) operator chooses between two values based on a condition.
It helps write shorter and clearer code for simple decisions.
Use it in assign statements to create combinational logic easily.
Practice
condition ? value_if_true : value_if_false do in Verilog?Solution
Step 1: Understand the operator's purpose
The conditional operator evaluates a condition and chooses between two values.Step 2: Recognize the syntax meaning
If the condition is true, it returns the first value; otherwise, it returns the second value.Final Answer:
It selects one of two values based on the condition's truth. -> Option BQuick Check:
Conditional operator chooses value based on condition [OK]
- Thinking it repeats code like a loop
- Confusing it with variable declaration
- Assuming it comments code
Solution
Step 1: Check the syntax format
The correct syntax is: condition ? value_if_true : value_if_false;Step 2: Verify each option
assign out = (a > b) ? a : b; matches the correct syntax with parentheses and colon separating values.Final Answer:
assign out = (a > b) ? a : b; -> Option DQuick Check:
Correct ternary syntax uses ? and : properly [OK]
- Using comma instead of colon
- Missing value after colon
- Starting with ? without condition
out after this Verilog code runs?wire [3:0] a = 4'd7; wire [3:0] b = 4'd10; wire [3:0] out; assign out = (a > b) ? a : b;
Solution
Step 1: Evaluate the condition (a > b)
a is 7, b is 10, so 7 > 10 is false.Step 2: Choose value based on condition
Since condition is false, out gets value b, which is 10.Final Answer:
10 -> Option AQuick Check:
7 > 10 is false, so out = b = 10 [OK]
- Assuming a is greater than b
- Confusing true and false branches
- Thinking code has syntax error
assign result = (x == 1) ? 5 : ;
Solution
Step 1: Check the ternary operator structure
The operator needs a value after the colon to use if condition is false.Step 2: Identify missing part
Here, after colon (:), no value is given, causing syntax error.Final Answer:
Missing value after colon (:) -> Option CQuick Check:
Conditional operator needs both true and false values [OK]
- Leaving false value empty
- Using == incorrectly (it's correct here)
- Ignoring missing value error
final_out? wire [3:0] a = 4'd3; wire [3:0] b = 4'd7; wire [3:0] c = 4'd5; wire [3:0] final_out; assign final_out = (a > b) ? ((b > c) ? b : c) : ((a > c) ? a : c);
Solution
Step 1: Evaluate outer condition (a > b)
a=3, b=7, so 3 > 7 is false, go to false branch.Step 2: Evaluate inner condition in false branch (a > c)
a=3, c=5, so 3 > 5 is false, select c which is 5.Final Answer:
5 -> Option AQuick Check:
Nested ternary picks c=5 as final_out [OK]
- Mixing true and false branches
- Ignoring nested ternary structure
- Assuming syntax error without checking
Ready to prove it?
Pass the test and this pattern moves unknown
