之间有什么区别casex和casez在Verilog?我已经搜索过它并找到了这句话:
casez 将 case 替代项或 case 表达式中的所有 z 值视为无关紧要。所有带有 z 的位位置也可以用 ? 在那个位置。
casex 将 case 项或 case 表达式中的所有 x 和 z 值视为不
关心。
例如,第一个和第二个有什么区别:
1-
casez (instr)
7'b1zzzzzzz: // arithmetic
7'b01zzzzzz: // load-reg
7'b00zzzzzz: // store-reg
endcase
Run Code Online (Sandbox Code Playgroud)
2-
casex (instr)
7'b1zxxxxzz: // arithmetic
7'b01zzxxxx: // load-reg
7'b00xxxzzz: // store-reg
endcase
Run Code Online (Sandbox Code Playgroud)
Verilog 语言参考手册(现在被SystemVerilog LRM取代)非常详细地解释了这一点。关键区别在于case 表达式 何时instr包含 x 或 z 值。请记住,这两个casex和casez看两个案例项目 以及该CASE表达式为x和z值。我们称其为对称比较,因为无关值可以出现在任何地方。
因此,如果instr是所有 x,则 中的任何项目都casez不会匹配,但 中的所有项目casex都会匹配,并且模拟器将选择第一个项目。类似地,如果instr都是 z,则所有项目都将匹配。我认为casex一个无用的构造。
SystemVerilog 用一个case() inside语句替换这两个语句。它使用非对称比较运算符==?,该运算符仅将案例项中的 x 或 z视为无关项。