(A[2]==1)是一个逻辑表达式,它是一个位运算符,尽管两者都有效,但使用逻辑和运算符&会是更好的语义。&&这与大多数其他语言略有不同,后者&&是短路运算符。
逻辑上你想要的是if ((A[2]==1) && ((A[0]==0)),但它可以简化为按位表达式:
if ( ~A[0] & A[2] ) 
注意:尽量避免使用 casex,未知部分会在模拟中匹配 x。尝试casez改用, ? 仍然可以用来匹配不关心。
更新内部与 casez 的比较
Case 语句是大多数语言中使用的一种干净的控制结构,以避免出现较大的 if elsif else 链。内部操作会将 x 匹配到不关心 '?' 价值观。这使得它的用法类似于 casex,这被认为是不好的做法,因为它可以隐藏模拟失败。
casez(sel)
  4'b1??? a= 3'd4;
  4'b01?? a= 3'd3;
  4'b001? a= 3'd2;
  4'b0001 a= 3'd1;
  4'b0000 a= 3'd0;  
endcase
对比
if (sel inside {4'b1???})
  a= 3'd4;
else if (sel inside {4'b01??})
  a= 3'd3;
else if (sel inside {4'b001?})
  a= 3'd2;
...
以上实际上等于casex(但更冗长)我相信你也可以使用而不是casex:
case(sel) inside
  4'b1??? a= 3'd4;
  4'b01?? a= 3'd3;
  4'b001? a= 3'd2;
  4'b0001 a= 3'd1;
  4'b0000 a= 3'd0;  
endcase
但是我永远不会使用casex。