4.1.4 PLL


これもH8プロジェクトで使用を予定しているので、動作を確認しておきましょう。

4.1.4.1 Wizard


生成するソースをpll.vとします。

入力CLOCKを16MHzにしておきます。なお、後で設定は再編集可能ですので適当な値で構いません。



16MHzをとりあえず、4倍し,64MHzを生成してみましょう。


以上で設定は終わり、ファイルが生成されます。


4.1.4.2 RTLシミュレーション

合成対象ソース

module pll_module(clock,pllena,areset,c0,locked);
        input clock;
        input pllena;
        input areset;
        output c0;
        output locked;

         pll pll0(.inclk0(clock),.pllena(pllena),.areset(areset),.c0(c0),.locked(locked));

endmodule

テストベンチ
最初、アシンクロナスリセットをして、100ns後に解除、PLLをイネ-ブルします。PLLがロックしたら、1000ns後にシミュレーションを終わります。
なお、CLOCKは、Wizardで設定した値にします。(これが、合っていないとロックしないことがありました。)

`timescale 1ns/1ps
`define CYCLE (1./16/2*1000)
module pll_test;
        reg clock=0;
        reg pllena=0;
        reg areset=1;
        wire c0;
        wire locked;

        always #(`CYCLE) clock=~clock;

 pll_module pll0(.clock(clock),.pllena(pllena),.areset(areset),.c0(c0),.locked(locked));

        initial begin
                 #100;
                 areset=0;
                 pllena=1;
                 wait (locked);
                 #1000;
                 $finish;

        end
endmodule

RTL プロジェクト
例によって、RTLシミュレーションでは、altera_mf.vをプロジェクトに加えます。


RTLシミュレーション波形です。PLLがロックしたと言ってきた時点(黒カーソル)で、確かに位相0で4倍にロックしています。


4.1.4.3 ポストレイアウト遅延ゲートシミュレーション

遅延シミュレーションのプロジェクトです。例によって,ポストレイアウトでは、cyclone_atoms.v をプロジェクトに加えます。プロジェクトは、pll_module.voの位置に作成してください。

遅延シミュレーション波形です。確かにLockはしているのですが、位相は、0ではなく、2684ps遅れる結果になっています。ピンから内部PADまでの遅延なのでしょう。