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までの遅延なのでしょう。