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