| | 108 | == インスタンス化について == |
| | 109 | VerilogHDLでモジュールを利用するには、その定義をするだけでなく、その実体を作り出す必要があります。 |
| | 110 | これをインスタンス化といいます。 |
| | 111 | |
| | 112 | 参考書では、18ページ「3.1.2 全加算器のHDL記述」に説明があります。 |
| | 113 | 図3.4がその例となっていて、ここではfull_adder回路の定義の中で、half_adder回路を2つインスタンス化しています。 |
| | 114 | "i0"と"i1"はインスタンスの名前で、他のインスタンスと重ならない任意の名前をつけることができます。 |
| | 115 | |
| | 116 | 図3.4では、明示的に信号の接続を記述していますが、以下のように省略して記述できます。 |
| | 117 | この場合には、並んでいる順番に信号が接続されます。 |
| | 118 | {{{ |
| | 119 | module full_adder(a, b, ci, s, co); |
| | 120 | input a, b, ci; |
| | 121 | output s, co; |
| | 122 | wire w0, w1, w2; |
| | 123 | |
| | 124 | assign co = w1 | w2; |
| | 125 | half_adder i0 (w1, w0, a, b); // half_adder i0 (.co(w1), .s(w0), .a(a), .b(b)); |
| | 126 | half_adder i1 (w2, s, w0, ci); // half_adder i1 (.co(w2), .s(s), .a(w0), .b(ci)); |
| | 127 | endmodule |
| | 128 | }}} |
| | 129 | |