verilog HDL基礎編:①コードの書き方(AND回路を作る)
今回はAND回路となる以下のプログラムを書いてみます。まずプロジェクトを作成して、verilog HDLを書き始める画面まで行ってみてください。プロジェクトの作成方法はこちらで紹介しています。
module TopModule(input SW0, input SW1, output LED);
// ワイヤの宣言
wire wsw0, wsw1, wled;
// ワイヤwsw0をSW0に接続
assing wsw0 = SW0;
// ワイヤwsw1をSW1に接続
assing wsw1 = SW1;
// LED出力にワイヤwledを接続
assign LED = wled;
//モジュール andModule に wsw0, wsw1, wledを接続
andModule u1(wsw0, wsw1, wled);
endmodule
// ANDモジュール
module andModule(input a, input b, output q);
// (a&b)のときにq=Highになるように設定
assign q = a & b;
endmodule
こちらのプログラムでは、ボード上のスライドスイッチのON/OFF状態に合わせてLEDのON/OFFが切り替わるようになっています。
ここではAND回路を記述しながら、verilog HDLの記述方法も説明していきます。まず上のプログラムで出てくる
・module
・wire
・assign
の意味を説明していきたいと思います。
module:モジュール定義
verilog HDLの回路の記述はmoduleを定義することが第一歩になります。モジュールは関数のように別のモジュールから呼び出すことも可能です。
module モジュール名(ポート宣言);
回路記述;
endmodule
上記のAND回路では、TopModuleの中でandModuleというモジュールを呼び出しています。
ただし、TopModuleという名前のモジュールが一つは必要です。TopModuleで宣言したポートだけ、ピンプランナーでボード上のピンと対応づけることができます。
もしTopModuleがない場合は「TopModuleが見つからない」というエラーが出てきます。
ポート宣言
ポートの宣言は、信号線の属性+ポート名 で書きます。ポート名は任意で、プログラムに合わせて使っていきます。
属性は output、input、inout の3種類が使用できます。
今回のAND回路では、スライドスイッチの値に応じてLEDを制御したいので入力(input)にスイッチを定義し、出力(output)にLEDを定義しています。
module TopModule(input SW0, input SW1, output LED);
wire:回路の記述方法
回路の宣言には wireもしくはreg を使います。
C言語などの言語だと、変数をintやstringとして定義すると思いますが、これがverilog HDLだと、wireやregになったと考えるとわかりやすいかもしれません。
wireはワイヤ(配線)で、信号どうしの接続やモジュールどうしの接続に用いられます。regはレジスタで、任意のビット数を記憶させられます。
AND回路ではwireのみを使用しました。
// ワイヤの宣言
wire wsw0, wsw1, wled;
assign:接続の定義
宣言したwire(もしくはreg)は、assign文を使って接続を定義します。
assign 信号名 = 論理式;
今回はwireとして定義した変数wsw0、wsw1、LEDを、ポートとして定義したSW0、SW1、LEDと接続します。
// ワイヤwsw0をSW0に接続
assing wsw0 = SW0;
// ワイヤwsw1をSW1に接続
assing wsw1 = SW1;
// LED出力にワイヤwledを接続
assign LED = wled;
またandModuleの中身を見てみると、出力qに入力a, bのand出力が定義されています。verilogではand以外にもいくつかの論理式が定義されています。
ORとNOTも例として示しておきます。
// AND 回路
assign q = a & b;
// OR 回路
assign q = a | b;
// NOT 回路(反転)
assign q = ~A;
コメントの書き方
コメントは /* */に挟まれた部分か、//のあと一行がコメントアウトされます。
/*
コメント1
*/
// コメント2
ピンプランナーの設定
ピンプランナーでは、以下のように設定してください。
上で設定したピンは、ボード上のLED0とスライドスイッチSW0、SW1に対応しています。ピンとボード上の配線との対応表はこちら。
ここまでの設定が終わったら、コンパイルしてボードに書き込んでください。コンパイルとボードへの書き込み方法はこちらのコンパイル以降を参考にしてください。
書き込んだら、2つのスライドスイッチをON、OFFしてLEDの動作を確認してみてください。スイッチを両方ともONにするとLEDもONになり、どちらか一方でもOFFにするとLEDも消灯すると思います。
以上でAND回路の実装は終わりです。
次もコードの基礎編として簡単なプログラムを作ってみたいと思います。
この記事が気に入ったらサポートをしてみませんか?