前回までの記事で、DE10-nanoの開発に使用するソフトウェア「Quartus」の準備とDE10-nanoの簡単な起動確認を行いました。今回の記事では実際にHDLコードで記述したプログラムによりDE10-nanoを動作させていきたいと思います。
プロジェクトファイル
前々回の記事でプロジェクトファイルを生成しましたので、生成したプロジェクトファイルを開きます。プロジェクト名は「DE10-Nano_golden_top」となっており、topのHDLファイル(.v)と制約ファイル(.sdc)がすでに用意されています。


topファイルはADコンバータ、Aruduino、クロック、GPIO、HDMI、HPS、KEY、LED、スイッチの入出力のみ記述されています。HPSに関しては「’define」のコメントアウトでポートを使用するかどうか切り替えられるような記述になっています。デフォルトではHPSは無効になっており、著者もしばらくはHPSの利用は考えていないので、このまま利用していきます。
sdcファイルはありがたいことにクロック周りの制約がすでに記述されていました。回路図を確認するとFPGA_CLK1_50~FPGA_CLK3_50のクロックはすべて周波数50MHz(周期20ns)で、sdcファイルで記述されている制約文は周期をあらわす「-period 20」(単位ns)となっているためそのままの利用で問題無さそうです。

オリジナルのテストプログラムの内容
まずはオリジナルのテストプログラムでFPGAが動かせるか確認をしていきたいと思います。今回のテストでは以下のようにFPGAに回路を実装します。
- PLLを使用して50MHz入力クロックから10MHzクロックを生成
- PLLから出力されるLock信号をLEDの1bit目に出力
- 10MHzクロックを使用して、500ms周期でトグルする信号を生成しLEDの2bit目に出力
- 2bitのボタン入力KEY[1:0]をLEDの3~4bit目に出力
- 4bitのスイッチ入力SW[3:0をLEDの5~8bit目に出力
Quartusでのテストプログラム記述
まずはQuartusの画面右側にあるIP CatalogからLibrary → Basic Functions → PLLと選択していき、 PLL Intel FPGA IPをダブルクリック。今回はプロジェクトフォルダ内に「PLL」というフォルダを作成し、そのフォルダのなかに「pll_10MHz」という名前でPLLを作成します。


PLL生成画面ではReference Clock Frequencyを50MHz、outclk0を10MHzに設定し、その他の設定は初期状態のままFinishをクリックします。この操作で設定したフォルダ内にPLLのファイルが生成されます。

今回PLLのファイルは生成されていたものの生成時にエラーが発生していました。また、一度生成したPLLを後から設定を変更しようとしてもウィザードが起動しない問題も発生します。ウィザードが起動しない問題は、Webで検索したところマクニカのWebページに類似の問題の解決方法が記載されていました。Quartusのインストールフォルダから「\ip\altera\altera_pll」と辿っていき、pll_wizard.lstを管理者権限のあるテキストエディタで修正します。「PLL Intel FPGA IP v22.1」の行の下に「PLL Intel FPGA IP v23.1」を追記し、これによりPLL再設定時にウィザードが起動しない問題は解決できました。ただし、相変わらずPLL生成時に発生しているエラーは解消できませんでしたので、今後追加で調べていきたいと思います。

PLLを生成したあとはtopファイルにソースコードを記述していきます。pllの入出力は、生成されたpll_10MHz.vの入出力ポート記述を参考にします。PLLのリセットは、外部リセット信号がなかったので固定値0を入力します。

ソースコードを記述したあとは、プロジェクトのコンパイルを実行します。コンパイルが成功すると、「output_files」フォルダにtop.sofが生成されました。このsofファイルをFPGAに書き込むことで、記述したプログラムでFPGAが動作します。

なお、sofファイルはFPGAに書き込んでも、電源OFFしてしまうとFPGAにはプログラムが残りません。次に電源をONしたときに作成したプログラムを動作させるようにするには、基板上のROMにFPGAのプログラムファイルを保存しておく必要があるのですが、また別の操作が必要なため、今後記載したいと思います。
sofの書き込み
生成したsofファイルをFPGAに書き込みます。DE10-nano側は、起動時にSDカードからARMコアが動作しないようにするためモードスイッチをASモードに設定しておきます。
DE10-nanoの電源を投入して、USB BLASTERの端子をパソコンとUSBケーブルで接続します。

パソコン側ではAlteraのProgrammerというソフトを起動します。ProgrammerはQuartusインストール時に一緒にインストールされます。

ProgrammerではHardware Setupのボタンから「DE-SoC[USB-1]」を選択し、ModeをJTAGに設定します。Auto DetectをクリックするとSelect Deviceのウインドウが表示されるので、「5CSEBA6」を選択しOKをクリックします。

画面に表示された2つ目のデバイス「5CSEBA6U23」を選択して、右クリックのメニューから「Change File」を選び、コンパイルで生成できたtop.sofファイルを選択します。Program/ConfigureにチェックをいれてStartをクリックするとFPGAへのプログラム書き込みが開始されます。

FPGAへの書き込みが完了すると、ソースコードに記述したようにDE10-nanoのLEDが点灯しています。Quartus上でPLL生成時に何かしらのエラーが発生していましたが、ひとまずはテスト用に用意したプログラムがFPGA上で動作することを確認できました。

次回以降
次回以降は、実際に6足歩行ロボのフォロをDE10-nanoで動作させるためブレッドボード等を使用してDE10-nanoに配線をしていきたいと思います。あわせて今回対応できなかった基板上のROMへのFPGAファイル書き込みを行い、電源をOFFしても書き込んだFPGAプログラムが消えないように対応していきたいと思います。
今回はここまでになります。
コメント