(A[2]==1)
は論理式で&
あり、ビットごとの演算子ですが、どちらも機能しますが、&&
論理 and 演算子を使用する方がセマンティクスとして優れています。&&
これは、が短絡演算子である他のほとんどの言語とは少し異なります。
論理的にはあなたが望むものですがif ((A[2]==1) && ((A[0]==0))
、ビット単位の式に減らすことができます:
if ( ~A[0] & A[2] )
注意: casex の使用は避けてください。不明な部分はシミュレーションで x と一致します。casez
代わりに ?を使用してみてください。don't care に一致させるために引き続き使用できます。
内部をcasezと比較して更新
Case ステートメントは、大規模な if elsif else チェーンを回避するためにほとんどの言語で使用されるクリーンな制御構造です。内部操作は、x を don't care '?' に一致させます。値。これにより、シミュレーションの失敗を隠すことができるため、使用するのが悪いと考えられている 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を使用することはありません.