2012年7月21日土曜日

FPGA FMトランスミッタ: フィルタのインパルス応答をみる

デジタルフィルタのデバッグを行うには、インパルス応答を確認するのがわかりやすい。ということで、まずは正常動作する15kHzローパスフィルタで試してみました。

テストベンチ
ISEが自動生成してくれるテストベンチに少し手を入れたものです。
動作としては、動作スタート後100nsでリセット解除し、入力256サンプル分までLチャンネルを 0 とし、その後に1サンプルのみ24ビット正の最大値 7FFFFF(インパルス)としています。
青字部分はデータをファイルとして書き出すための記述で、ISimでこのシミュレーションを実行するとファイル DATAOUT.txt ができます。$fdisplayには、フォーマットに関する引数を指定でき、 %d: 10進表記、%h: 16進表記、%o: 8進表記、%b: 2進表記です。詳しくは、参考書を見て下さい。

module lpf15k_tb;

  parameter CYCLE = 12*512;
  parameter STROBE = 12*512*0.8;
  integer dataout;

  // Inputs
  reg [23:0] l15k_l_i;
  reg [23:0] l15k_r_i;
  reg clk;
  reg reset;
  reg l15k_thru;

  // Outputs
  wire [23:0] l15k_l_o;
  wire [23:0] l15k_r_o;

  // Instantiate the Unit Under Test (UUT)
  lpf15k uut (
    .l15k_l_i(l15k_l_i), 
    .l15k_r_i(l15k_r_i), 
    .l15k_l_o(l15k_l_o), 
    .l15k_r_o(l15k_r_o), 
    .clk(clk), 
    .reset(reset), 
    .l15k_thru(l15k_thru)
  );

  initial
    begin
      dataout = $fopen("DATAOUT.txt");
      $fdisplay (dataout, "time, l15k_l_i, l15k_l_o");

      // Initialize Inputs
      l15k_l_i = 0;
      l15k_r_i = 0;
      clk = 0;
      reset = 1;
      l15k_thru = 0;

      #100;
      reset = 0;

      #(CYCLE*256);
      l15k_l_i = 24'h7FFFFF;

      #(CYCLE);
      l15k_l_i = 0;

      #(CYCLE*256);
      l15k_l_i = 24'h800000;
    end

  always #6 //77.824MHz
    begin
      clk = ~clk;
    end

  always
    begin
      #STROBE
      $fdisplay (dataout, "%0d,%h,%h", $time, l15k_l_i, l15k_l_o);
      #(CYCLE-STROBE); 
    end
    
endmodule

シミュレーション結果
シミュレーションにより作られたファイルの内容を示します。

time   l15k_l_i   l15k_l_o
4915  000000  000000
11059  000000  000000
17203  000000  000000
23347  000000  000000
29491  000000  000000

(中略)

1565491  000000  000000
1571635  000000  000000
1577779  7fffff  000000
1583923  000000  000000
1590067  000000  00000f
1596211  000000  00000f
1602355  000000  000000
1608499  000000  fffff0
1614643  000000  ffffe0
(以下略)

FIRフィルタでは、インパルス応答はフィルタ係数がそのまま出てきますから両者を比較して一致していれば正しく設計できているということになります。グラフは、フィルタ係数データとインパルス応答(正規化しています)を重ね合わせたもので一致していることがわかります。



参考資料
・鳥海佳孝 田原追仁治 横溝憲治(2002) 実用HDLサンプル記述集 CQ出版社

0 件のコメント:

コメントを投稿