記事ディレクトリ
9.ワイヤーの宣言 | ワイヤーデカール
問題:次の回路を実装してください。AND ゲートと OR ゲートを接続する 2 本の中間ワイヤ (任意の名前を付けます) を作成します。NOT ゲートに電力を供給するワイヤは実際にはワイヤアウトされているため、ここで 3 番目のワイヤを宣言する必要はないことに注意してください。ワイヤは 1 つのソース (ゲートの出力) によって駆動されますが、複数の入力を供給できることに注目してください。
図の回路構造に従っている場合、値を割り当てる必要がある信号が 4 つあるため、最終的には 4 つの assign ステートメントになるはずです。
`default_nettype none
module top_module(
input a,
input b,
input c,
input d,
output out,
output out_n );
wire ab_out;
wire cd_out;
wire abcd_out;
assign out = (a & b) | (c & d);
assign out_n = ~((a & b) | (c & d));
endmodule
注:
1. `default_nettype none については、Vectors で後述します。
2. 実行後、定義された 3 つの行 ab_out、cd_out、および abcd_out が使用されていないことに突然気づきました (当時は本当に何の意図もありませんでしたが、 (何も考えずに) ルールに従って実行しただけで、3 つのステートメントを削除した後、操作もパスしました。もちろん、論理的には、実行していなくてもこれは意味があります。ただし、これによりコード行数は節約されますが、後から回路図が続く場合、コードの各行のロジックは非常に複雑になり、モジュール性の概念に準拠しません。
予想されるコード行数は5行なので、以下のような改善となります。
`default_nettype none
module top_module(
input a,
input b,
input c,
input d,
output out,
output out_n );
wire ab_out, cd_out; //可以直接连续赋值
assign ab_out = a & b;
assign cd_out = c & d;
assign out = ab_out | cd_out;
assign out_n = ~out;
endmodule
単一の答えはありません。自分でさらに試してみることができます
10.7458チップ
問題:7458チップと同じ機能を持つモジュールを作成してください。10 入力と 2 出力を備えています。assign ステートメントを使用して各出力ワイヤを駆動することを選択することも、中間信号として使用する (4 つの) ワイヤを宣言することを選択することもできます。この場合、各内部ワイヤは AND ゲートの 1 つの出力によって駆動されます。さらに練習するには、両方の方法を試してください。
質問セクションには 2 つの方法が記載されているので、両方試してみましょう。
その場合、必要なのは 2 ~ 10 行です。
1. assign ステートメントを使用して各出力ワイヤを駆動することを選択できます。
それから試してください。前の質問と同様に、2 行のみを使用します。1 行で完全なロジックを直接表現できます。 。
assign p1y = (p1a & p1b & p1c) | (p1f & p1e & p1d);
assign p2y = (p2a & p2b) | (p2c & p2d);
2、または、中間信号として使用する (4 本の) ワイヤを宣言することもできます。各内部ワイヤは AND ゲートの 1 つの出力によって駆動されます。
wire and1, and2, and3, and4;
assign and1 = p1a & p1b & p1c;
assign and2 = p1f & p1e & p1d;
assign and3 = p2a & p2b;
assign and4 = p2c & p2d;
assign p1y = and1 | and2;
assign p2y = and3 | and3;