サンプルレートコンバータに供給するクロックをDE0nanoで作ります。DE0nano基板に搭載された50MHzクロックモジュールの信号をFPGA内蔵のPLLで所要の周波数に変換します。PLLはFPGAに埋め込まれたハードマクロなので、利用するにはIPコア(IPメガファンクション)をインスタンシエートします。
まずは、練習としてサンプルレートコンバータから受け取ったそのままループバックして送信させてみます。
PLLを使うIPを生成
Quartus Primeのウインドウに表示されるIP Catalog(表示されていなければTools ⇒ IP Catalog)からALTPLLを選びます
IPの保存先を聞いてくるので適当な名前を付けて保存(ここではXPLL)
入力クロック周波数 50MHz
これはそのまま。リセットとロック検出があれば良いですね。
そんなに細かいこと聞かれても
これもそのまま
これもそのまま
出力周波数24.576MHzにします
clk c1~c4は使わないのでスルー
これもそのまま
インスタンシエーション テンプレートにチェック
プロジェクトに登録
作成済みIPの設定を変更するには
あとからPLLの周波数を変更するなど設定を変えるには、Project Navigator の IP Components タブで変更したいIPを右クリックして Edit in Parameter Editor を起動する。が、Parameter Editorが灰色で選べないときは、メモリ不足らしいのでQuartusの再起動や
設定変更で対応します。
IPを使う
具体的なコードは、記事の最後に示します。今回のPLLとasrc_ifモジュールを呼び出し、FPGAの外部ピンと接続しています。
コンパイルすると、例のごとくWarningがいくつか出てきます。
Warning (292013): Feature LogicLock is only available with a valid subscription license. You can purchase a software subscription to gain full access to this feature.
えっ!このIPコア有料!?まさか!!。どきりとしました。調べてるとLogicLock(下位階層モジュールごとに最適化していくコンパイル手法)機能を使うには、有料ライセンス買ってくださいねというメッセージでした。目障りならWarningのsuppress機能で表示を消すしかないみたいです。
Warning (15064): PLL "XPLL:XPLL24M576|altpll:altpll_component|XPLL_altpll:auto_generated|pll1" output port clk[0] feeds output pin "SRC_MCLK~output" via non-dedicated routing -- jitter performance depends on switching rate of other design elements. Use PLL dedicated clock outputs to ensure jitter performance
SRC_MCLKに割り当てたFPGAのピンは、PLL専用の配線領域を経由していないからジッタ特性が良くないかもという警告でした。是正するには、ピンアサインを変更しなくてはなりませんが今回の用途では問題視することでもないかと考えました。
module DE0nano
(
CLOCK_50,
KEY0,
LED,
SRC_RST,
SRC_MCLK,
SRC_LRCK,
SRC_BCK,
SRC_DOUT,
SRC_DIN,
SRC_LOCK
);