FPGAの内蔵温度センサーから値を得るMAX 10 FPGAで学ぶFPGA開発入門(13)(3/6 ページ)

» 2016年08月10日 09時00分 公開
[大原雄介MONOist]

ALTPLLの利用

  • 各コンポーネント同士を接続し、また“System” → “Assign Base Address”を行ってアドレス重複を解消する。
  • ここまで終了したら、“TEMP_LED2_QSYS”という名前を付けて保存し、その後にGenerate HDLを行って終了する
  • Quartus IIに戻り、TEMP_LED2_QSYS/synthesisの下にあるTEMP_LED2_QSYS.qipをプロジェクトに追加
  • TEMP_LED2.vを編集……の前に、もう1つ追加するものがある。

 前回のList1を見てもらうと分かるのだが、TerasicのSystem Builderを使うと無条件で50MHzのClock信号(MAX10_CLK1_50 / MAX10_CLK2_50 / MAX10_CLK3_50)と、それとは別にADC用に10MHzのクロック信号(ADC_CLK_10)が用意される。

 MAX 10のADCは10/20/40/80MHzのクロック信号入力が想定されており、CPUの50MHz信号をそのまま入れることは不可能。そこで、このADC_CLK_10をそのまま利用しようと思ったのだが、これがうまくうかない。そもそもTerasicのサイトを見ても、このADC_CLK_10の使い方が良く分からないありさまである。そこで素直に50MHzの信号から10MHzのクロック信号を生成することにした。

photo07 Photo07:一覧が1画面で入りきらなかったので、抜き出して表示。一応ADCからCPUに割り込みを掛けられるようにIRQも接続している(これを接続しなくてもGenerate HDLはできるもが、Warningが出るので)

 このために利用できるのが、Alteraが提供するMegaFunctionの1つである「ALTPLL」である。

 ということで、これを追加して利用できるようにする。

 まずQuartus IIのIP Catalogから“Installed IP” → “Basic Functions” → “Clocks; PLL and Resets” → “PLL” → “ALTPLL”を選択する(Photo08)。するとファイル名の入力になるので、適当な名前を入れる(Photo09)。

photo08 Photo08:下のログに、ADC_CLK_10をADC Clockとして接続した場合のエラーが見えている。そもそもMAX 10の上に10MHzのClock Sourceがある訳ではなさそうで、ではこれは何のためにあるのか、が謎
photo09 Photo09:当初"altpll"にしたら、さすがにそれは駄目だと怒られたのでaltpll_pllにしてみた。フォーマットはVHDLを選択する

 するとPlug-in Managerが立ち上がるので、まず入力クロックに50MHzを指定する(Photo10)。次の“Input/Lock”タブは、Lock Outputにチェックを入れておくだけでいい(Photo11)。その次の“Bandwidth/SS”タブでは、“Bandwidth Setting”を“High”にする(Photo12)。

photo10 Photo10:50MHzの指定以外は特に変更するところはなし
photo11 Photo11:デフォルトでこの設定になっているハズ

 その次の“Clock switchover”は無視して、上の“Output Clock”タブを選択、ここの“clk c0”で出力を10MHzに設定する(Photo13)。最後に“Summary”タブで確認してから「Finish」を押すと、qipファイルを生成したことが示されるので、これをプロジェクトに追加する。

photo12 Photo12:デフォルトでは"Auto"になっているので、これを“Preset”にして“High”を選ぶ
photo13 Photo13:いきなり“Requested Settings”には入力できないので、clock parameterで“multiplication factor”を1、“division factor”に5を入れてから“ << Copy ”ボタンを押すと10MHzに設定される

関連キーワード

アルテラ | FPGA関連 | FPGA


Copyright © ITmedia, Inc. All Rights Reserved.