casez:出现在条件表达式和任意分支项表达式的值为z的位都被认为是无关位,不进行比较。
casex:出现在条件表达式和任意分支项表达式的值为z和x的位都被认为是无关位,不进行比较。
case的语句是有优先级的,条件分支项靠前的优先级高。
module case_sentence;
reg [3:0] code;
reg [3:0] data;
initial
begin
#5 code = 4'b1111;
#5 code = 4'b11xx;
#5 code = 4'b0110;
#5 code = 4'b0100;
#5 code = 4'b0x01;
#5 code = 4'b0000;
#5 code = 4'b0110;
#5 code = 4'b0011;
#5 code = 4'bX0xx;
end
always @(code)
begin
casez(code)
4'b1???: data = 4'b0111;
4'b11??: data = 4'b0011;
4'b?1??: data = 4'b1011;
4'b?11?: data = 4'b1001;
4'b???1: data = 4'b1110;
default: data = 4'b1111;
endcase
end
always @(data or code)
$display("code = %b,data = %b",code,data);
endmodule
运行后输出的结果:
1# code = 1111,data = 0111
2# code = 11xx,data = 0111
3# code = 0110,data = 1011
4# code = 0100,data = 1011
5# code = 0x01,data = 1110
6# code = 0000,data = 1111
7# code = 0110,data = 1011
8# code = 0011,data = 1110
9# code = x0xx,data = 1111
通过结果,第三行中出现了条件分支项中第四项的情况,但输出的结果却是分支项第三项应该输出的结果,这就证明了,case语句是先判断code的第2位(从0开始),发现满足条件3,data的输出就为1011
文章评论(0条评论)
登录后参与讨论