テストベンチは、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) |
変更点は以下のとおりです。
ledとsaのポートに接続するためのwire宣言(複数bitあるので省略不可)
LEDとSAポートにledとsaの信号の接続
$monitorでカウンタの値を出力させている部分を、UPDOWN_7SEGモジュールの中のCOUNT信号に変更。具体的には「i1.COUNT」にする。
以上で、テストベンチ記述の修正が完了しました。
それでは、シミュレーションを実行しましょう! 基本的にシミュレーションの実行は、いままで解説してきたとおりです。
必要なファイル4つ(T_UPDOWN10-2.v、UPDOWN_7SEG.v、UPDOWN10-2.v、DECODER7.v)を用います。
今回は、図1にもあるとおり7セグメントLEDの結果もさることながら、RTLの最上位に相当する「UPDOWN_7SEG」の内部信号である「COUNT」信号を波形表示させたいところです。
基本的には画面左にある[Workspace]ウィンドウの[sim]タブにある、インスタンス名が出力されている部分「i1」を選択すると、[Objects]ウィンドウに「COUNT」信号が現れますので、これを右クリックしてショートカットメニュー[Add to Wave]−[Selected Signals]を選択し、波形表示[wave]ウィンドウに加えるだけです。以下のように「COUNT」が動作している様子を見ることができます(図2-1〜2-4)。
論理シミュレーションの結果特に問題がなければ、「ISE WebPACK」で論理合成、配置配線を行います。セットアップ時の注意点は、ファイルを選択する際に図3-1のようにRTL記述に関連する下位のモジュール(UPDOWN10-2.v、DECODER7.v、UPDOWN_7SEG.v)をすべて選択することです。
画面左上の「Sources」ウィンドウに回路に必要なファイル(ピン固定のファイル含む)が、登録されます(図3-2)。
最上位のモジュール(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.