Menu
Coddy logo textTech

組み込みゲートプリミティブ

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 39/90。

Verilogには、実際のゲート記号を使用して論理回路を記述できる組み込みのゲートプリミティブがあります。これは構造モデリングと呼ばれます。回路図を描くのと同じように、ゲートを接続して回路を構築します。

ゲートプリミティブは、基本的な論理ゲートをモデル化する、事前に定義されたキーワードです。assign out = a & b のような式を書く代わりに、次のようにゲートをインスタンス化します:

and(out, a, b);   // 出力 out、入力 a および b を持つ AND ゲート

一般的な構文

gate_type (output, input1, input2, ...);
  • 第1引数は常に出力となります
  • 後続の引数は入力です(ゲートに応じて1つ以上)

利用可能なゲートプリミティブ

ゲートタイプキーワード入力数
ANDand2以上
ORor2以上
NOTnot1
NANDnand2以上
NORnor2以上
XORxor2以上
XNORxnor2以上

ゲートプリミティブの仕組み

and(out, a, b) と記述すると、Verilogは a & b の結果で out を継続的に駆動するANDゲートを作成します。a または b が変化するたびに、実際のゲートと同じように out が即座に更新されます。

ゲートプリミティブ vs 継続的代入

どちらの方法も同じハードウェアを生成します:

// ゲートプリミティブ
and(out, a, b);

// 継続的代入(同じ結果)
assign out = a & b;

ゲート・プリミティブは、回路をゲートの集合(構造スタイル)として記述したい場合に有用です。継続的代入は、動作スタイル(式)に適しています。

challenge icon

チャレンジ

実行すること:

  1. この回路を動作させるために、正しいゲートプリミティブを追加してください。モジュールは入力 ab の AND を出力する必要があります。出力ポートの名前は既に c となっています。

チートシート

Verilogのゲートプリミティブを使用すると、論理ゲートを直接インスタンス化することで構造モデリングを行うことができます。

構文: 最初の引数は常に出力で、その後に入力が続きます。

gate_type(output, input1, input2, ...);

利用可能なプリミティブ:

ゲートキーワード入力数
ANDand2以上
ORor2以上
NOTnot1
NANDnand2以上
NORnor2以上
XORxor2以上
XNORxnor2以上

ゲートプリミティブとassignは、同等のハードウェアを生成します。

and(out, a, b);       // 構造的 (ゲートプリミティブ)
assign out = a & b;   // 振る舞い的 (継続的代入)

自分で試してみよう

module gate_challenge (
  input a,
  input b,
  output c
);
  
  // TODO: 適切なゲート・プリミティブを追加してください
  // 出力 c は a AND b である必要があります

endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン