PLLのIPでシステムクロック変更

ハードウェア

 Vivadoで作成したProject 「ClkGen」にPLL(MMCM)のIPを組み込みます。
 「FPGAの使い方」ではシステムクロックの12MHzを使用して発振回路を作成しました。
 12MHzでは、1KHzを出力するために設定するパラメータが1398でした。

 直感的にわかりにくいため、パラメータを1000と入力して、1KHzを出力できるように
したいと思います。

IPカタログからClocking Wizardを選ぶ

 ClkGenをClkGenIpという名前でコピーし、起動します。

 VivadoのFlow NavigatorのIP Catalogをクリックし、IP Catalogの検索窓で、clocking
と入力し、Clocking Wizardを選択します。

 Clocking Wizardをダブルクリックします。

MMCMで入力クロックを12.000[MHz]に設定します。

Output Clocksタブを開きます。

出力周波数を8.39011[MHz]に設定します。これは8.388608[MHz]に一番近く、設定可能な
周波数です。

Summaryタブを開きます。
clk_out1は、入力クロックを63.625倍し91で割った周波数に設定されています。
(clk_out = 12 * 63.625 / 91 = 8.39011)

OKボタンをクリックしてClocking Wizardを終了します。

IPをプロジェクトに組込む

IPコアが生成できましたので、プロジェクトのデザインに組込みます。

PROJECT MANAGERのSourcesペインでIP Source選択し、デザインに組込むための
テンプレートファイルclk_wiz_0.veoをダブルクリックして開きます。

開いたファイルにの以下の部分を、ソースファイルClkGen.vにコピーして貼り付け修正します。

ClkGen.vを以下のように追加、変更します。

テストベンチを変更

 テストベンチを以下のように変更します。

95行目をWrFreq(1398)からWrFreq(1000*2)に変更しています。 これはシステムクロックが
12[MHz]から8.39098[MHz](4.19549[MHz] * 2)に変更したためです。4.19549[MHz]であれば
WrFreq(1000*2)で1[KHz]が出力されます。

シミュレーション

このテストベンチでシミュレーションを行いました。

先頭部分


全体

OUT信号の周期が1[ms](正確には0.99977[ms])で1[KHz]になっているのがわかります。

正確に1[ms]にするためにはCLKを8.388608[MHz]にすれば良いのですが、Clocking Wizardでは
8.39098[MHz]までしか設定できませんで

ビットストリームファイルの生成と基板への書込み

「FPGAの使い方」の要領でビットストリームファイルを作成し、基板のFLASHへ書き込みます。

STM32マイコンボードから周波数を設定

「FPGAの使い方」の要領でSTM32マイコンボードから周波数を設定します。

STM32マイコンボードのプログラムを少し変更しています。
変更内容はSTM32マイコンボードの記事に記載しました。

ここでは結果を示します。

[立ち上げ時]

[USERボタンを1回押した時]

[USERボタンを2回押した時]

[USERボタンを10回押した時]

11回USERボタンを押すと1[KHz]へ戻ります。

タイトルとURLをコピーしました