verilog问题,能解释下为什么是这个答案吗

在下一个程序段中,当ADDRESS的值等于5'b0X000时,问casex执行完后A和B的值是多少。
A=0;
B=0;
casex(ADDRESS)
5'b00???: A=1;
5'b01???: B=1;
5'b10?00,5'b11?00:
begin
A=1;
B=1;
end
endcase
标准答案: A=1 and B=0;

casex是顺序执行的满足条件就退出
所以5‘b00???是满足5’b0x000的
因为这里‘x’和‘?’ 一样会被看成是任意满足的数值。
如果在实际电路里面这种语义的东西是综合不出来的。所以请尽量避免进到casex()的信号是带有x数值的信号。追问

(5‘b00???是满足5’b0x000 )?那(5'b01???不满足5’b0x000吗)
0和x匹配,1和x就不匹配了?

追答

顺序执行的意思就是匹配完了第一个就不会匹配第二个了。否则也没有parallel_case的说法了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-08
在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。
在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。

题中5‘b0X000的X不考虑,所以与之匹配的是5’b00???。A的值为1,B的值不变
第2个回答  2012-09-22
case语句条件互斥不需要考虑优先级,但是casex是有优先级的,上面的优先级高所以答案就是你看到的了。。
相似回答