【問題2】 4ビット加算器をVerilog HDLで記述しよう:完全マスター! 電子回路ドリル III(2)
今回は、Verilog HDLの記述スタイルについて解説。回路は“モジュール”の枠に収めて定義し、信号は“ポート”として定義する。
【問題1】の解答
前回の宿題【問題1】は、“デジタル回路をVerilog HDLに置き換える”問題でした。
皆さん解けましたでしょうか? Verilog HDLについてあまり知識のない方は、かなり戸惑われたのではないでしょうか? 今回の解説で、Verilog HDLの記述スタイルについて詳しく解説しておりますので参考にしてください。
自信のある方もない方もまずは、答え合わせをしてみましょう。そして、次項の解説を読んで、ハードウェア記述言語による“新しいデジタル回路の設計技術”を身に付けてください。
それでは、解答を発表します!
【問題1】の解説
はじめに、Verilog HDLの記述スタイルについて解説します。
Verilog HDLでは回路をモジュール(module)単位で構成します。つまり、【問題1】では、図1のように回路を“モジュール”の枠に収めて定義します。そして、モジュールに接続する信号を“ポート”として定義します。
図1のモジュール名“bgate”や、ポート名“A”“B”“C”“X”は、ほかのプログラム言語と同様に「識別子」と呼ばれます。Verilog HDLの識別子は、
- アルファベット(“a”〜“z”、または“A”〜“Z”)、数字(“0”〜“9”)、アンダースコア(“_”)、ダラー(“$”)を使う
- 先頭の文字はアルファベット、またはアンダースコアにする
- 予約語は使えない
ことになっています。
それでは【問題1】の回路をVerilog HDLで表してみましょう。
Verilog HDLは、次の記述スタイルでコーディングします。
module モジュール名 ( ポート名 , ポート名 , ・・・ ); ポートの入出力の宣言; モジュール内信号の宣言; 回路機能の定義; endmodule
まず、予約語“module”でモジュール定義を開始します。
module bgate(A, B, C, X);
ここで予約語“module”に続き、モジュール名“bgate”を記述します。その後、括弧(“(”と“)”)で囲み、ポート名をカンマ(“,”)で区切って記述します。また、記述の最後はセミコロン(“;”)で閉じます。
次に、ポートの入出力を宣言します。
input A, B, C; output X;
予約語“input”は入力を、予約語“output”は出力を意味します。ポート名の宣言の順序は任意ですが、すべて入出力の宣言をしなければなりません。
次に、モジュール内で使う信号を宣言します。
wire A, B, C, X;
予約語“wire”により宣言された識別子は「信号線」を意味し、Verilog HDLでは“ネット型”のデータと呼ばれます。信号の宣言は省略できる場合もありますが、基本的にすべて宣言するようにしましょう。
そして、回路機能の定義です。回路を“論理式”として表すことができる場合には、次の“assign”文を使います。
assign ネット型データ = 式 ;
予約語“assign”に続き、等号(“=”)による代入式を書きます。 「AND」「OR」「NOT」の基本論理演算は、表1の演算子を使います。 各演算子には優先順位がありますので注意が必要です。
演算子記号 | 例 | 意味 | 優先順位 ※ |
---|---|---|---|
˜ | ˜a | aのNOT演算 | 高 |
& | a & b | aとbのAND演算 | 中 |
| | a | b | aとbのOR演算 | 低 |
表1 Verilog HDLの基本論理演算子 ※表内の演算子の優先順位を示す |
【問題1】の回路は、次のassignで表すことができます。ここでは、ORをANDよりも優先させるため括弧で囲んでいます。
assign X = (A | B) & ~C;
最後は、予約語“endmodule”でモジュール定義を終了します。
endmodule
Verilog HDLは一見プログラムのようですが、実は回路を作っています。図1のような構成図を思い浮かべながらコーディングするとよいでしょう。
次回までの宿題 ― 【問題2】
Copyright © ITmedia, Inc. All Rights Reserved.