a = b==1?1:
b==2?2:
b==3?3:
0
类似写法用case实现。
从代码上感觉前者是按顺序一级一级下来判断的,但是综合结果二者其实应该是一致的?是这样吗?
这是一个三目运算符的嵌套
跟写if嵌套差不多意思
改成case就是
switch(b)
{
case 1:
a=1;
break;
case 2:
a=2;
break;
case 3:
a=3;
break;
default:
a=0;
break;
}
但是其实还有更简练的写法
a=(b>0 && b<4)?b:0;
综合后是不一样的
用下面 4 种方式写的代码,综合后的结果如下
module xxx1
(
output [7:0] a,
input [7:0] b
);
assign a = b == 1 ? 1:
b == 2 ? 2:
b == 3 ? 4:0;
endmodule
module xxx2
(
output [7:0] a,
input [7:0] b
);
reg [7:0] a;
always@(*)
begin
case(b)
1: a <= b;
2: a <= b;
3: a <= b;
default:a <= 0;
endcase
end
endmodule
module xxx3
(
output [7:0] a,
input [7:0] b
);
reg [7:0] a;
always@(*)
begin
if(a<4) a <= b;
else a <= 0;
end
endmodule
module xxx4
(
output [7:0] a,
input [7:0] b
);
assign a = b < 4 ? b:0;
endmodule