ハードウェア設計において、論理シミュレータであらかじめ動作を検証することはとても重要です。
というわけで、ここでは無償の論理シミュレータ環境を構築してみましょう(なお、定番の論理シミュレータ「Modelsim」は、Linuxで動作する無償版がありませんので今回はパスします)。
以下のサイトからファイルをダウンロードしてください(保存先はrootのホームディレクトリの下とします)。
まずは波形表示ツール「GTKWave」からインストールしてみましょう。以下のように解凍し、インストールします。
# tar zxvf gtkwave-3.2.0R4.tar.gz # cd gtkwave-3.2.0RC4 # ./configure
ここで「gperf」というコマンドがないといわれてエラーになってしまいます。
configure: error: Couldn't find a usable gperf program. Please install gperf which is available from ftp://ftp.gnu.org/pub/gnu/gperf/
やはり……。しかし、もう愚痴はいいません!! 「gperf」というコマンドをインストールするために、上記のエラーメッセージにあるサイトからソースファイルをゲットして(やはり保存先はrootのホームディレクトリの下とします)、コンパイルを行います。
# tar zxvf gperf-3.0.3.tar.gz # cd gperf-3.0.3 # ./configure # make # make install
そして、以下のコマンドを入力し、
# which gperf
「/usr/local/bin」の下に「gperf」コマンドがインストールされたかどうかを確認します。
「gperf」コマンドのインストールが完了したら、GTKWaveのインストールを再度実行します。
# cd /root/gtkwave-3.2.0RC4 # ./configure
しかし、またもやエラーになります……。今度は「GTK+」がないといって文句をいっています。これについては、Vine Linuxのパッケージからインストールする必要があります。先ほど説明した[Synapticパッケージマネージャ]で「gtk2」を検索して、インストールしてください。その際、依存関係のあるファイルもインストールされます。
それでは、再びGTKWaveのインストールを行います。
# ./configure
今度は成功しました! 引き続き以下のコマンドを実行してインストールを続行します。
# make # make install
インストールが完了したら、念のため以下のコマンドで「/usr/local/bin」の下に無事インストールされているかどうかを確認してください。
# which gtkwave
次に、論理シミュレータ「iverilog」のインストールを以下のようにして行います。
# tar zxvf verilog-20081118.tar.gz # cd verilog-20081118 # ./configure # make # make install
今度はすんなりといきました!!(珍しい!?) そして、「which」コマンドで念のため確認します。
# which iverilog
こちらも「/usr/local/bin」の下にインストールされていればOKです。
以上の準備ができたところで、ダウンロードしたRTL(Register Transfer Level)とテストベンチをコンパイルしてみましょう。
リセットとインクリメント/デクリメントをコントロールする信号の論理が反転していますので、リスト3のようにテストベンチファイル「T_UPDOWN10-2.v」を書き換えます。また、波形表示をするためのシステムタスク($dumpvars)を追加します。
module TEST_UPDOWN10; reg clk, reset, dec; wire [3:0] count; parameter CYCLE = 100; parameter SIM_SEC1_MAX = 4; UPDOWN #(.SEC1_MAX(SIM_SEC1_MAX)) i1(.RESET(reset), .CLK(clk), .DEC(dec), .COUNT(count)); always #(CYCLE/2) clk = ~clk; initial begin $dumpvars; reset = 1'b1; clk = 1'b0; dec = 1'b0; #CYCLE reset = 1'b0; #(15*CYCLE*SIM_SEC1_MAX) dec = 1'b1; #(10*CYCLE*SIM_SEC1_MAX) $finish; end initial $monitor($time,,"clk=%b reset=%b count=%b", clk, reset, count); endmodule
リスト3 テストベンチファイル「T_UPDOWN10-2.v」(書き換え版) →ダウンロードはこちら |
ここまで準備できたところで、以下のようにコンパイルして実行します。
# cd /home/tori/UPDOWN10 # iverilog T_UPDOWN10-2.v UPDOWN10.v
コンパイルが成功すると「a.out」という実行ファイルが出来上がりますので、以下のように実行してみてください。
# ./a.out
標準出力にシミュレータの実行結果が出力されて、結果を確認できるはずです。また、テストベンチファイルに「$dumpvars」というシステムタスクを追加したので、カレントディレクトリに「dump.vcd」という名前の「VCD(Value Change Dump)」ファイルが出来上がっています。
それでは、以下のコマンドで波形表示をしてみましょう。
# gtkwave dump.vcd
GTKWaveの起動後、画面左上の[SST]ツリーの最上位階層にある「TEST_UPDOWN10」をクリックすると、同じく画面左の[Signals]ツリーに各種信号が表示されます。ここで波形表示させたい信号を選択([Shift]キーで複数選択可)し、画面左下の[Append]ボタンを押してください。
いかがでしょうか? 画面14のように波形表示されればOKです。
今回はハードウェアの開発環境を整えましたが、ソフトウェア編で開発環境を構築した際と同じような苦労をさせられました……。組み込みの神様は必ず試練を与えてくださるのですね。こうしたこともあり、今回は開発環境の構築に思いのほか、誌面を使ってしまいました。
というわけで次回こそ、ハードウェア側に追い出したソフトウェア部分を「どうやってハードウェア化するのか」「どうやってFPGAに肩代わりしてもらうのか」について具体的に見ていきます。また、「マイコンとFPGAボードをどうやって接続するのか」についても触れたいと思います。ご期待ください!(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.