`timescale 1ns/1ns

module encoder_0(
   input      [8:0]         I_n   ,
   
   output reg [3:0]         Y_n   
);

always@(*)begin
    casez(I_n)
    9'b0_zzzz_zzzz: Y_n = 4'b0110; 
    9'b1_0zzz_zzzz: Y_n = 4'b0111; 
    9'b1_10zz_zzzz: Y_n = 4'b1000; 
    9'b1_110z_zzzz: Y_n = 4'b1001; 
    9'b1_1110_zzzz: Y_n = 4'b1010; 
    9'b1_1111_0zzz: Y_n = 4'b1011; 
    9'b1_1111_10zz: Y_n = 4'b1100; 
    9'b1_1111_110z: Y_n = 4'b1101; 
    9'b1_1111_1110: Y_n = 4'b1110; 
    default:  Y_n = 4'b1111; 
    endcase
end
endmodule

在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹配。

在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。

在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。

使用过程中许需要注意的问题:1)一般经常使用到的是casez语句,最好少用casex

2)case/casez/casex其实都是可综合的

2)case的描述,匹配都是从上到下进行的