..

...

...

## Thursday 2 November 2017

### conditional operator (?:) vs IF statement

Here is the simple code for comparing conditional operator and if statement.

Code:
module testing;
reg foo;
wire [3:0] c1,c2,c3;
reg [3:0] a=1,b=3,cif1,cif2,cif3;

assign c1 = foo ? a : b;

//equality
assign c2 = (foo==1) ? a : b;

//case equality
assign c3 = (foo===1) ? a : b;

always@(foo or a or b) begin
if (foo)
cif1 = a;
else
cif1 = b;

//equality
if (foo==1)
cif2 = a;
else
cif2 = b;
//case equality
if (foo===1)
cif3 = a;
else
cif3 = b;
end

initial begin
\$monitor("@%3t :: foo=%b, a=%x, b=%x,   c1=%x, c2=%x, c3=%x,   cif1=%x ,cif2=%x ,cif3=%x", \$realtime,foo,a,b,c1,c2,c3,cif1,cif2,cif3);
#10 foo=1;
#5 a=a+1;
#10 foo=0;
#5 b=b+1;
#10 foo=1;
end

endmodule

OUTPUT:
`@  0 :: foo=x, a=1, b=3,   c1=X, c2=X, c3=3,   cif1=3 ,cif2=3 ,cif3=3  @ 10 :: foo=1, a=1, b=3,   c1=1, c2=1, c3=1,   cif1=1 ,cif2=1 ,cif3=1  @ 15 :: foo=1, a=2, b=3,   c1=2, c2=2, c3=2,   cif1=2 ,cif2=2 ,cif3=2  @ 25 :: foo=0, a=2, b=3,   c1=3, c2=3, c3=3,   cif1=3 ,cif2=3 ,cif3=3  @ 30 :: foo=0, a=2, b=4,   c1=4, c2=4, c3=4,   cif1=4 ,cif2=4 ,cif3=4  @ 40 :: foo=1, a=2, b=4,   c1=2, c2=2, c3=2,   cif1=2 ,cif2=2 ,cif3=2  `

Based on the simulation, when the condition is X conditional operator outputs X whereas if statement outputs else part. Except this, moreover no difference in execution of these two.