input x;
input y;
input[10:0] z;
wire a;
assign a = x & y & (|z);
私はコードを見ていて、割り当てられている行が何であるか理解していません。この行が何を意味するかについての説明は高く評価されるでしょう!Verilogコードの背後にあるロジック
input x;
input y;
input[10:0] z;
wire a;
assign a = x & y & (|z);
私はコードを見ていて、割り当てられている行が何であるか理解していません。この行が何を意味するかについての説明は高く評価されるでしょう!Verilogコードの背後にあるロジック
wire a
は、いくつかの組み合わせ論理によって駆動されます。その組合せ論理では、input [10:0] z
のすべてのビットがOR演算されます(つまり、|z
の意味です)。そのOR演算の結果(つまり、11入力ORゲートの出力)は、入力x
とy
と一緒にANDされます。その論理積の結果(すなわち、その3入力ANDゲートの出力)は、wire a
(すなわち、3入力ANDゲート駆動wire a
)に割り当てられます。
z
は、11ビット幅の信号である。
|
は、信号のor reduction
です。 z
に少なくとも1ビットがあり、それが1
である場合、
(|z)
が真(1
)になります。一方、のすべてのビットが0
である場合、(|z)
は偽(0
)になります。これは、信号が0
である場合、信号のor reduction
が短い方法であることを意味します。
|z <==> z==0;
&
bitwise and
です。これは、マルチビット信号の場合、各ビットインデックス間でand
演算を実行することを意味します。結果は入力と同じサイズになります。例えば:
wire [2:0] signal1, signal2, result;
assign result = signal1 & signal2;
は(ビットのビット)に相当します。
assign result[0] = signal1[0] && signal2[0];
assign result[1] = signal1[1] && signal2[1];
assign result[2] = signal1[2] && signal2[2];
または(連結して):しかし、あなたの表現で
assign result = {signal1[0] && signal2[0],signal1[1] && signal2[1],signal1[2] && signal2[2]}
、すべての信号は、1ビットあるとして(a
,b
および(|z)
)ですので、&
または&&
を同等に使用できます。
あなたシンプルな2入力ゲートを有する発現状態は以下の通りです何をして模式的:事業者とどのようにハードウェアでそれらを翻訳する上
詳しい情報はthis siteで見つけることができます。