1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. 【FPGAテストベンチ/検証ノウハウ】テストベンチによるクロック信号/リセット信号の生成(Verilog編)

TECHブログ

【FPGAテストベンチ/検証ノウハウ】テストベンチによるクロック信号/リセット信号の生成(Verilog編)

【FPGAテストベンチ/検証ノウハウ】テストベンチによるクロック信号/リセット信号の生成(Verilog編)

【3/15開催*10万ページビュー 記念特別無償開催*】ModelSimウェビナー ~ 一連の操作を学ぶ入門編 ~

第1回目は、一度作成しておくと汎用的に再利用が可能なテストベンチでクロック信号やリセット信号を生成する方法(Verilog編)を紹介します。
テストベンチによるクロック信号やリセット信号の生成は、一度作れば再利用が可能でとても便利です。
では、始めましょう。

目次

【10万ページビュー 記念特別無償開催】
ModelSimウェビナー
~ 一連の操作を学ぶ入門編 ~

『ModelSimの使い方 <GUI編>』TECHブログの10万ページビューを記念して、PALTEK保守契約者向けウェビナーを限定で一般公開します。

クロックの生成

まず、クロックは直感的に周波数を判断しやすくするためにパラメータ化しておくとよいでしょう。

156.25MHzのクロックを生成するサンプルを下記に示します。

`timescale 1ns / 1ps
module tb_clk (
    output  wire  CLK1
);

// Frequency Set (MHz)
localparam CLK1_FREQ = 156.25;

// Clock Generate
reg ck1 = 1'b0;
always ck1 = #(((1/CLK1_FREQ) / 2.0)*1000) ~ck1;
assign CLK1 = ck1;

endmodule


`timescale 1ns / 1ps
はテストベンチのみで使用される記述で、シミュレーション時間の単位と精度を設定しています。ここでは時間単位は1ns、精度は1psとしています。

次にlocalparamにて周波数を設定しています。ここでは156.25MHzを生成したいので156.25と設定しています。注意点としては例えば100MHzの場合には100ではなく、100.0と設定する必要があります。

always文にてクロックを生成していますが、ここでは下記の計算を行っています。

  • 1÷156.25 = 0.0064 (周期)
  • 0.0064÷2 = 0.0032 (周期の半分 この周期にてトグルすることでクロックとなる)
  • 0.0032×1000 = 3.2 (周期のns単位 `timescaleにて1ns/1psと設定しているため)


always文にて3.2ns単位で信号がトグルすることにより、156.25MHzのクロックを求めることができます。
同じ記述を追加することで、1つのモジュールから複数のクロックを出力することも可能です。またここでは内部パラメータのlocalparamを使用していますが、parameter宣言により上位から周波数を与えることでより汎用的に使用することも可能です。

リセットの生成

次に、リセットについても時間をより直感的に判断するために時間設定をパラメータ化しておくとよいでしょう。

下記にリセット信号を設定時間にてトグルするサンプルを示します。

`timescale 1ns / 1ps

module tb_rst (
    output  wire  RST1 
);

// Reset Time Set (ns)
localparam RST1_TIM1 = 100.0;
localparam RST1_TIM2 = 50.0;
localparam RST1_TIM3 = 100.0;

// Reset Generate
reg rt1 ;
initial begin
                     rt1 = 1'b1;
    #(RST_TIM1*1000) rt1 = 1'b0;
    #(RST_TIM2*1000) rt1 = 1'b1;
    #(RST_TIM3*1000) rt1 = 1'b0;
end

assign RST1 = rt1;

endmodule


`timescale 1ns / 1psはクロックと同様に1ns/1psでの設定です。

localparamにて信号をトグルさせたい時間を順番にns単位で設定しています。
ここではTIM1~3の3つのタイミングにて信号をトグルする設定としています。

initial begin以降で設定した時間により信号をトグルしています。
ここでは初期状態はHighとなっており、TIM1後にLow、さらにTIM2後にHigh、TIM3後に再度Lowとなります。


リセット生成もクロック生成と同様に複数個を設定することや、parameter宣言にて上位から時間設定を行うことでより便利に使うことができます。

以上でテストベンチによるクロック信号/リセット信号の生成(Verilog編)の説明を終わります。


デザインサービスお問合せ

最後までお付き合いいただきありがとうございました。

 


このブログのシリーズ

関連ブログ