組み込みゲートプリミティブ
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 39/90。
Verilogには組み込みのプリミティブゲート(gate primitives)が用意されており、実際のゲートシンボルを使用して論理回路を記述できます。これは構造モデリング(structural modeling)と呼ばれ、回路図を描くようにゲートを接続して回路を構築します。
ゲート プリミティブ(gate primitive)は、基本論理ゲートをモデル化する定義済みのキーワードです。assign out = a & b のような式を記述する代わりに、ゲートをインスタンス化します。
and(out, a, b); // 出力 out、入力 a と b の AND ゲート基本構文
gate_type (output, input1, input2, ...);- 最初の引数は常に output です
- 続く引数は inputs です (gate に応じて1つ以上)
利用可能なゲートプリミティブ
| ゲートの種類 | キーワード | 入力の数 |
|---|---|---|
| AND | and | 2以上 |
| OR | or | 2以上 |
| NOT | not | 1 |
| NAND | nand | 2以上 |
| NOR | nor | 2以上 |
| XOR | xor | 2以上 |
| XNOR | xnor | 2以上 |
Gate Primitiveの仕組み
and(out, a, b) と記述すると、Verilogは a & b の result で out を continuous に駆動するAND gate を生成します。a または b が変化すると、実際の gate のように out が即座に更新されます。
ゲートプリミティブ vs 連続代入 (Continuous Assignment)
どちらの方法も同じハードウェアを生成します:
// ゲートプリミティブ
and(out, a, b);
// 連続代入(同じ結果)
assign out = a & b;Gate primitive は、回路をゲートの集合(structural スタイル)として記述したい場合に便利です。Continuous assignment は、behavioral スタイル(式)に適しています。
チャレンジ
作業内容:
- この回路を正しく動作させるために、適切な gate primitive を追加してください。この module は input である
aとbの AND を output する必要があります。output ポートは既にcという名前で定義されています。
自分で試してみよう
module gate_challenge (
input a,
input b,
output c
);
// TODO: 正しいゲートプリミティブを追加してください
// 出力 c は a AND b であるべきです
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。