Verilog 中的 Casex 与 Casez

use*_*767 4 verilog

之间有什么区别casexcasezVerilog?我已经搜索过它并找到了这句话:

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)

dav*_*_59 6

Verilog 语言参考手册(现在被SystemVerilog LRM取代)非常详细地解释了这一点。关键区别在于case 表达式 何时instr包含 x 或 z 值。请记住,这两个casexcasez看两个案例项目 以及CASE表达式为x和z值。我们称其为对称比较,因为无关值可以出现在任何地方。

因此,如果instr是所有 x,则 中的任何项目都casez不会匹配,但 中的所有项目casex都会匹配,并且模拟器将选择第一个项目。类似地,如果instr都是 z,则所有项目都将匹配。我认为casex一个无用的构造。

SystemVerilog 用一个case() inside语句替换这两个语句。它使用非对称比较运算符==?,该运算符仅将案例项中的 x 或 z视为无关