最初の一歩:FPGAでLチカ(2)

はじめに

この記事は以下の記事の続きです。

hikalium.hatenablog.jp

Verilog HDLのソースファイルを作成しよう

というわけで、次はついにVerilog HDLのソースを書いてゆきます。

File->New のメニューからVerilog HDL Fileを選択します。

f:id:hikalium:20170528160243p:plain

すると、Verilog1.vというファイルが開かれた状態になります。

f:id:hikalium:20170528160255p:plain

とりあえず、ここに以下のソースを打ち込んでみてください。

できましたか?

VirtualBoxを使っている方は、デバイス->クリップボードの共有->双方向のチェックを入れると、ホストOSでコピーしたものを貼り付けられるので覚えておいてください。

では、このファイルを保存します。Ctrl-SもしくはFile->Saveを押してください。

f:id:hikalium:20170528160312p:plain

すると、ファイルの保存先を聞かれます。保存先ディレクトリがプロジェクトのルートディレクトリ、ファイル名がled.vとなっていることを確認して、Saveを押してください。

これでソースファイルはできあがりました!

とりあえずコンパイルしてみよう

では、今打ち込んだソースをコンパイルしてみます。

Ctrl-LもしくはProcessing->Start Compilationを押してください。

f:id:hikalium:20170528160332p:plain

すると、左下のTasksというところの進捗状況が進んで、下のMessagesウィンドウに色々と流れてきます。

全部うまくいくと、こんな感じになります。

f:id:hikalium:20170528160344p:plain

次は、ピン割り当てをしましょう。

ピン割り当てをする

先のコンパイルで、FPGA内に論理回路を構成することはできました。しかし、これだけでは使い物になりません。

というのも、FPGAにはたくさんのピンがあるわけですが、どのピンに論理回路のどの入出力を割り当てるのか、Quartusさんは知りません。なので、内部の論理回路は正しくても、FPGAの外の世界と正しくつながっているかは、神のみぞ知る、といった状態です。それでは困りますよね。

今回の場合は、2つのLED(led1, led2)と1つのスイッチ(btn)、そして1つのクロック信号(clk)が必要ですから、その4つの信号を適切なピンに割り当てなければいけません。 そうしないと、意図したLEDが光らなかったり、スイッチだと思ったらLEDだったり、下手をするとショートして回路が壊れてしまったりするわけです。

ちなみに、この指定をしないでコンパイルした場合(さっきのコンパイル)は、Quartusさんが都合のいいように適当にピン配置を決めてくれてしまいます。 では早速、Quartusさんに適切なピン配置を教えてあげましょう。

Assignments->Pin Plannerを開いてください。

f:id:hikalium:20170528160519p:plain

すると、このような画面が出てきます。上半分にでている大きな正方形は、FPGAのイメージです。

そして、下の方にある表が、ピン配置の表です。Node Nameが、先ほど打ち込んだソース上での信号名を指しています。そして、今回設定するのはLocationの列です。

ここで、今回のボードにおける、各ピンとその先につながっているデバイスの表を見てみましょう。

ピン番号 つながっているもの
23 クロック(50MHz)
88 プッシュスイッチ1
87 LED1
86 LED2

なるほど。では早速これをPin Plannerで設定してゆきましょう!

といっても、作業は非常に単純です。変更したいLocationのセルをダブルクリックして、横に出てくる下矢印を選択すると、選択可能な信号の一覧が出てきます。この中から、適切な信号を選ぶだけです。

f:id:hikalium:20170528160550p:plain

すべて設定すると、こんな感じになります。できあがったら、Pin Plannerは閉じてしまってかまいません。

f:id:hikalium:20170528160603p:plain

再度コンパイルする

元の画面に戻ってくると、左側のTasksウィンドウに?がたくさん浮かんでいることに気づきます。これは、ピン配置を変更したため、配置配線(Place & Route)からやり直す必要があるためです。

というわけで、もう一回コンパイルしてあげましょう。

うまくいけば、また全て緑のチェックマークになります。

次はついに書き込みです!

FPGAに書き込む!

ここまでの手順で、FPGAに書き込むデータまでは完成しました!もうあとは書き込むだけです。

Tools->Programmerを開いてください。

f:id:hikalium:20170528160648p:plain

この段階で、USB BlasterをPCに接続し、FPGAボードの電源もオンにしておきましょう。

Virtual Boxを使っている方は、デバイス->USB->Altera USB Blasterにチェックを入れておきましょう。これにより、仮想マシンにUSB Blasterが接続されます。

次に、左上のHardware Setup ...ボタンを押してください。ここで、どの書き込み器を使用するか選択します。

f:id:hikalium:20170528160708p:plain

Available hardware items のところに、USB-Blasterという表示があれば、その名前をダブルクリックしてください。すると、その書き込み器が選択された状態になります。

f:id:hikalium:20170528160802p:plain

何も出てこない場合は、接続やVirtualBoxの設定等を確認し、Hardware Setupのウィンドウを再度開いたり、根気よく試してみてください。

どうしてもだめな場合は、書き込み器が壊れている場合があります(私も壊れたUSB-Blasterに当たってしまって困り果てました…)。

さて、うまくいったら、Hardware Setupのウィンドウは閉じてOKです。

次に、左にあるAuto Detectというボタンを押しましょう。

ここでも、よくコケます。根気よくいきましょう…。

うまくいくと、エラーが出ずにAuto Detectが終了します。

そうしたら、左上のStartというボタンを押して、書き込みましょう!

f:id:hikalium:20170528160733p:plain

うまくいけば、右上のProgressが100%(Successful)になり、ボード上ではあなたの書いたプログラムが動いています!!!

ちなみに、こんな感じに動けばOKです。

おつかれさまでした!これでもうなんでも作れますね!(さすがにきつい…。)