Question.5
What does out evaluate to during simulation?
always @(*) begin
casex (2'b1x)
2'b11: out = 1;
2'b10: out = 0;
default: out = 1'bx;
endcase
end
Syntax:
if (expression)
statement;
else if (expression)
statement;
else
statement;
Key Rules
expression must evaluate to a 1-bit result (0, 1, x, z).else, no action occurs.Common Uses
always @(*).Guidelines
else or default) to avoid unintended latch inference.begin…end for multiple statements.case for parallel decisions; if-else is better for priority logic.Example
always @(*) begin
if (sel == 2'b00) y = a;
else if (sel == 2'b01) y = b;
else if (sel == 2'b10) y = c;
else y = d; // avoids latch
end
General Syntax:
case (expression)
value1: statement;
value2: statement;
...
default: statement;
endcase
x/z).casez (opcode)
4'b1???: alu_op = ADD;
4'b01??: alu_op = SUB;
default: alu_op = NOP;
endcase
default to prevent latches.casez is preferred over casex in synthesizable RTL.Syntax:
for (init; condition; step) statement;
Rules
integer i;).Example
integer i;
always @(*) begin
sum = 0;
for (i=0; i<8; i=i+1) begin
sum = sum + data[i];
end
end
Guidelines
for loops to describe repeated hardware structures (not like software loops).forever and while are also allowed.