単相同期回路で設計する理由触って学ぼう FPGA開発入門(4)(3/4 ページ)

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

シミュレーション(1)

 連載第3回「順序回路の基本! カウンタを作成しよう」では、「動作を遅くした10進カウンタ」のシミュレーションを実施しませんでした。今回は、きちんと単相同期回路にしたことですし、確実にシミュレーションを行うことにします。

 ここで前回使用したテストベンチにちょっと手を加えて(DECという信号を追加)、シミュレーションしてみましょう(リスト2)。


1  module TEST_UPDOWN10;
2  reg clk, reset, dec;
3  wire [3:0] count;
4  
5  parameter CYCLE = 100;
6  
7  UPDOWN i1(.RESET(reset), .CLK(clk), .DEC(dec), .COUNT(count));
8  
9  always #(CYCLE/2)
10          clk = ~clk;
11  
12  initial
13  begin
14          reset = 1'b0; clk = 1'b0; dec = 1'b1;
15          #CYCLE reset = 1'b1;
16          #(15*CYCLE) dec = 1'b0;
17          #(10*CYCLE) $finish;
18  end
19  
20  initial
21          $monitor($time,,"clk=%b reset=%b count=%b", clk, reset
, count);
22  
23  endmodule
リスト2 10進のアップ・ダウンカウンタのテストベンチ その1(T_UPDOWN10.v

 テストベンチの流れとしては、

  1. resetを「0」にすることで、10進カウンタを初期化
  2. resetを「1」にすることで初期化を解除して、15回アップカウントさせる(0→9→0→5)
  3. decを「0」にすることで、10回ダウンカウントさせる(5→0→9→5)

となります。一番検証したいアップカウント時の「9」→「0」の変化とダウンカウント時「0」→「9」の変化を確認できるはずです。

 このテストベンチを使用して、シミュレーションを行うと画面1のようになります(カウンタの出力はLEDが負論理であることを考慮して、反転して出力されます)。

波形表示によるシミュレーション結果の確認 画面1 波形表示によるシミュレーション結果の確認

 画面1にもあるようにリセットが正常に動作して、最初のカウンタの値を「0」(画面1では1111)にしていますが、その後はまったく動作していません。なぜでしょうか?

 それは、10進のアップ・ダウンカウンタを1秒動作にしたので、6000000クロック進まないと、この10進のアップ・ダウンカウンタが動作しないからです。つまり、クロック数が足りていないということです。

 単純に「分かった! クロック数を増やせば解決だ」とは決して思わないでください。これくらい小さい回路ですから、検証に必要なサイクル数(6000000クロック×(1+15+10)=156000000クロック)を行っても何とかシミュレーションできるかもしれません。しかし、このクロック数をまともにシミュレーションするとなるとかなり非効率的です。

 ここでは、まともに1秒のシミュレーションは行わないで「ENABLE信号がきちんと役目を果たしているのか?」そこに焦点を当ててシミュレーション行います。

 ここでポイントになるのが、前述した10進のアップ・ダウンカウンタのRTL記述内で使用したparameter文です。このparameterの値を減らせば、現実的な時間で10進のアップ・ダウンカウンタを動作できます。ここで、「そんなのRTL記述のparameter文を(以下のように)変更すれば簡単にできるよ」と思った方もいらっしゃるでしょう。

//parameter SEC1_MAX = 6000000; // 6MHz 
parameter SEC1_MAX = 4; // For Simulation

 確かにこうすればシミュレーションのときには下のparameter文を使用し、FPGAに回路を作成するときにはコメントアウトされている6MHz用のparameterを使用すればいいことになります。しかし、この方法では目的に応じて書き換えなければならないので、間違いが生じる(誤ってシミュレーション用のparameter文を使用するなど)可能性が高くなります。それではあまり効率的とはいえません。

Copyright © ITmedia, Inc. All Rights Reserved.