今回はハードウェア記述言語として有名なVerilogHDLの環境構築とサンプルコードの紹介をします。
環境構築については、Icarus Veriog と GTKWaveをインストールします。
用語確認
まずは用語の確認からしていきたいと思います。
・Verilog(ヴェリログ)
ハードウェア記述言語の一つである。
・ハードウェア記述言語(HDL)
英語で表すと、Hardware Description Languageとなる。デジタル回路を設計するためのコンピュータ言語。
デジタル回路設計をする際に回路図入力だと大規模な記述の場合に確認が難しくなるので、ハードウェア記述言語が使われます。
・プログラミング言語とハードウェア記述言語の違い
C言語などのようなプログラミング言語では命令の順番通りにCPUがプログラムを実行するが、ハードウェア記述言語は並列で同時に実行する
・Icarus Veriog
Icarus Veriogは、オープンソースで公開されているVerilogのコンパイラ、シミュレータ。
これをインストールすることでMac上でVerilogで記述したコードをコンパイルして実行することができるようになる。
・GTKWave
GTKWaveは、オープンソースで公開されているVerilogの波形ビューアである。
環境構築
(1)ターミナルを起動
(2)icarus verilogのインストール
1 2 3 |
$ brew install icarus-verilog |
(3)GTKWaveのインストール
1 2 3 |
$ brew install caskroom/cask/gtkwave |
(3)の際に
『Error: Cask ‘gtkwave’ requires XQuartz/X11, which can be installed using Homebrew Cask by running』
というエラーが出たら、
1 2 3 |
$ brew cask install xquartz |
で依存パッケージをインストールしてください。
実行方法とサンプルコード
環境構築が無事に終わったら、次はサンプルコードを書いてみましょう。
Hello worldを表示する
ファイル名: helloworld.v
1 2 3 4 5 |
module main (); initial $display("Hello, world!"); endmodule |
moduleとendmoduleで囲むことによってモジュールを定義することができます。
この場合、モジュール名はmainとなる。
1 2 3 |
iverilog helloworld.v |
でコンパイル
1 2 3 |
vvp a.out |
でコンパイルされた実行可能ファイルを実行することができます。
ハードウェアをシミュレートする
ファイル名: AND_gate.v
1 2 3 4 5 6 7 8 |
module AND_gate (a, b, c); input a, b; output c; wire a, b, c; assign c = a & b; endmodule |
ファイル名: main.v
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
`timescale 1ns/1ns module main (); reg a, b; wire c; AND_gate AND_gate(.a(a), .b(b), .c(c)); initial begin $dumpvars; a = 0; b = 0; #100 a <= 0; b <= 0; #100 a <= 0; b <= 1; #100 a <= 1; b <= 0; #100 a <= 1; b <= 1; #100 $finish; end endmodule |
まずはこれら二つのコードを用意します。
AND_gate.vにはANDゲートのモジュール(ハードウェア)が記述してあり、それをmain.vで使うという感じです。
ターミナルで以下のようにすると、結果を見ることができます。
1 2 3 4 5 6 |
$ iverilog -o main main.v AND_gate.v $ vvp main VCD info: dumpfile dump.vcd opened for output. $ open dump.vcd |
GTKWaveで結果を見るとこんな感じ