2017-01-29 9 views
0

Harrisが書いた "Digital design and computers architecture"という本を読んで、例4.13(遅延付き論理ゲート)に関する質問があります。Harris HDL example 4.13

この例では、式Y =!A *!B *!C + A *!B *!C + A *!B * Cのモデルを作成します。また、インバータには1ns、3入力ANDゲートに2nsの遅延があり、3入力ORゲートには4nsの遅延があります。

は今、以下.svコード:だから

*timescale 1ns/1ps 
module example(input a,b,c 
       output y); 
logic ab,bb,cb,n1,n2,n3; 
assign #1 {ab,bb,cb} = ~{a,b,c}; 
assign #2 n1 = ab & bb & cb; 
assign #2 n2 = a & bb & cb; 
assign #2 n3 = a & bb & c; 
assign #4 y = n1 | n2 | n3; 

endmodule 

、質問です:!!!のプログラミング3つのオペランド(A * B * C、*このような形のロジックは何ですか! B *!C、A *!B * C)。私は4から8までの行で何が起こっているのか分かりません。

誰でも説明できますか? ab、bb、cbのようなオペランドがあるのはなぜですか?

答えて

2

abbb、そしてcbab、およびc(すなわち、!A!B、そしてあなたの論理式から!C)のすべての論理反転です。 "b"または "_B"接尾辞は、逆アサーションレベルまたは逆アサーションレベルを示すためによく使用されます。

assign発現はそれぞれ、元のブール式から操作を表す:この式は出力abbbと、入力ab、及びcで3としてNOTゲートと考えることができる

assign #1 {ab,bb,cb} = ~{a,b,c}; 

、及びそれぞれcbです。 Verilogのビット単位の逆演算子~とVerilog連結演算子{}を使用して、3つの別々のassign式ではなく、1行ですべて逆行列演算を行います。

そこから、n1の割り当て、n2、及びn3全ては式3、3ウェイおよび操作に対応しており、単に式の中間値としての役割を果たす。 n1!A * !B * !Cn2A * !B * !Cn3A * !B * Cとなります。これらのそれぞれには、指定されたゲートの遅延が#nであり、反転は#1です。 n1n2n3最後にyは、その最終的な3ウェイOR論理積値n1のよう#4遅延、n2n3が割り当てられている出力を#2を取得し。

+0

したがって、 'ab'は' a'と 'b'のAND演算ではありませんか?このオペランドの 'b'は単なるシンボルで、逆を示していますか?この例の前にそのような説明はなかったので、それはとても奇妙です。この本に書かれている唯一の反転記号は '〜'だった。 –

+0

@AbrahamLincoln上記のコードでは、変数abは、aとbのANDではなく、逆です。実際、 'b'接尾辞はちょっと変わっています。私はどこから来たのかわからないが、私は確かにそこの歴史を知っている。他の記号には〜A、/ A、nA、A#(https://en.wikipedia.org/wiki/Logic_level#Active_stateを参照)が含まれていますが、Verilogでは、 '〜'は '!' Cのように論理演算子になります。 – Unn

+0

ご協力いただきありがとうございます。 –