階層構造を意識した設計スタイルとは?触って学ぼう FPGA開発入門(5)(3/4 ページ)

» 2007年05月18日 00時00分 公開
[鳥海佳孝 設計アナリスト,@IT MONOist]

テストベンチ記述の修正

 テストベンチは、10進アップ・ダウンカウンタで使用したものを流用します。RTL記述からの出力が「COUNT」から「LED」「SA」に変更されたので、その部分を変更します。変更した記述をリスト5に示します。


1   module TEST_UPDOWN10;
2   reg clk, reset, dec;
3   wire [7:0] led;
4   wire [3:0] sa;
5
6   parameter CYCLE = 100;
7   parameter SIM_SEC1_MAX = 4;
8
9   UPDOWN_7SEG #(.SEC1_MAX(SIM_SEC1_MAX)) i1(.RESET(reset), .CLK(clk), .DEC(dec), .LED(led), .SA(sa));
10
11  always #(CYCLE/2)
12      clk = ~clk;
13
14  initial
15  begin
16      reset = 1'b0; clk = 1'b0; dec = 1'b1;
17      #CYCLE reset = 1'b1;
18      #(15*CYCLE*SIM_SEC1_MAX) dec = 1'b0;
19      #(10*CYCLE*SIM_SEC1_MAX) $finish;
20  end
21  
22  initial
23      $monitor($time,,"clk=%b reset=%b count=%b", clk, reset, i1.COUNT);
24  
25  endmodule
リスト5 テストベンチの記述(T_UPDOWN10-2.v

 変更点は以下のとおりです。

3〜4行目

 ledとsaのポートに接続するためのwire宣言(複数bitあるので省略不可)

9行目

 LEDとSAポートにledとsaの信号の接続

23行目

 $monitorでカウンタの値を出力させている部分を、UPDOWN_7SEGモジュールの中のCOUNT信号に変更。具体的には「i1.COUNT」にする。

 以上で、テストベンチ記述の修正が完了しました。

シミュレーションの実行

 それでは、シミュレーションを実行しましょう! 基本的にシミュレーションの実行は、いままで解説してきたとおりです。

 必要なファイル4つ(T_UPDOWN10-2.vUPDOWN_7SEG.vUPDOWN10-2.vDECODER7.v)を用います。

 今回は、図1にもあるとおり7セグメントLEDの結果もさることながら、RTLの最上位に相当する「UPDOWN_7SEG」の内部信号である「COUNT」信号を波形表示させたいところです。

 基本的には画面左にある[Workspace]ウィンドウの[sim]タブにある、インスタンス名が出力されている部分「i1」を選択すると、[Objects]ウィンドウに「COUNT」信号が現れますので、これを右クリックしてショートカットメニュー[Add to Wave]−[Selected Signals]を選択し、波形表示[wave]ウィンドウに加えるだけです。以下のように「COUNT」が動作している様子を見ることができます(図2-1〜2-4)。

見たい信号のあるインスタンス名を選択 図2-1 見たい信号のあるインスタンス名を選択

「COUNT」信号を選択して波形表示ウィンドウに追加 図2-2 「COUNT」信号を選択して波形表示ウィンドウに追加

「COUNT」信号が波形表示ウィンドウに追加されている 図2-3 「COUNT」信号が波形表示ウィンドウに追加されている

「COUNT」信号の値が表示される 図2-4 「COUNT」信号の値が表示される

論理合成、配置配線、ダウンロード

 論理シミュレーションの結果特に問題がなければ、「ISE WebPACK」で論理合成配置配線を行います。セットアップ時の注意点は、ファイルを選択する際に図3-1のようにRTL記述に関連する下位のモジュール(UPDOWN10-2.vDECODER7.vUPDOWN_7SEG.v)をすべて選択することです。

回路作成に必要なファイルをすべて選択する 図3-1 回路作成に必要なファイルをすべて選択する

 画面左上の「Sources」ウィンドウに回路に必要なファイル(ピン固定のファイル含む)が、登録されます(図3-2)。

ISE WebPACKへの登録 図3-2 ISE WebPACKへの登録

 最上位のモジュール(UPDOWN_7SEG.v)を選択すれば、勝手に下位のモジュールを自動的に呼んできてくれるわけではありませんので注意してください。回路になるモジュールはすべて選択します。また、今回使用するピン固定のファイルをリスト6に示します。

1   NET "CLK"  LOC = "P39"  ;
2   NET "RESET"  LOC = "P17"  ;
3   NET "DEC"  LOC = "P16"  ;
4   NET "LED<0>"  LOC = "P41"  ;
5   NET "LED<1>"  LOC = "P40"  ;
6   NET "LED<2>"  LOC = "P31"  ;
7   NET "LED<3>"  LOC = "P30"  ;
8   NET "LED<4>"  LOC = "P22"  ;
9   NET "LED<5>"  LOC = "P21"  ;
10  NET "LED<6>"  LOC = "P20"  ;
11  NET "LED<7>"  LOC = "P19"  ;
12  NET "SA<0>"  LOC = "P46"  ;
13  NET "SA<1>"  LOC = "P45"  ;
14  NET "SA<2>"  LOC = "P44"  ;
15  NET "SA<3>"  LOC = "P43"  ;
リスト6 ピン固定ファイル(UPDOWN_7SEG.ucf

 後はいままでどおり論理合成、配置配線、FPGA用のデータ作成を行います。

 正常終了したらダウンロードを行い、動作を確認してみましょう。

 ここまでの作業が問題なく完了していれば、真ん中のプッシュスイッチを押していない間は、右側の7セグメントLEDが0〜9まで1秒ごとにカウントアップし、真ん中のプッシュスイッチを押している間は、右側の7セグメントLEDが9〜0まで1秒ごとにカウントダウンするはずです。

 いかがでしょうか? うまく動いたでしょうか?

Copyright © ITmedia, Inc. All Rights Reserved.