半分必要に迫られて,半分は趣味でFPGAを始めてみました.
最近トラ技あたりでもいろいろと話題のFPGAですが,なかなか敷居が高いので躊躇していましたが,マクニカのオンライストアを覗くとImpression 製 Odyssey MAX10 評価キットがキャンペーンで安くなっている(在庫限り5480円)のと,このキットはUSBをつないだだけでとりあえずプログラムを書き込むことができそうだったので購入しました.(マルツオンラインでは6980円で常時販売しています)
記述言語はC言語ライクにかけるとのことなのでVerilog HDLにしています.
ここではとにかくミニマムでプログラムを書いてボードに転送して,
「ボタン押したらボードの上のLEDが光る」
を紹介しようと思います.
これができれば最初の敷居はまたげるとおもうので.
ここでは使用OSは Windowsです.
私はMacOSX10.11.5にVMWare Fusionいれてその上でWindows10の仮想環境を構築しています.
まずは.ものを買わなくてはいけません.次の2点を用意します.
1) FPGAボード
Impression 製 Odyssey MAX10 評価キット
このボードはUSBケーブル経由でプログラムが書き込める機能があるので手っ取り早く何となく感触をつかむPDCAを回すのには適当かもしれません.(通常データの書き込みには別途そこそこお値段のするUSB Blasterケーブルが必要です)
2) micro-USBケーブル
PCと接続する,もしくは電源を供給するために必要です.スマホやラズパイで使っているmicro-USBケーブルを流用しました.
この2つがあればとりあえずOK
次にソフトです.
何はともあれAlteraの開発環境Quartus Primeが必要です.
1. Quartus Primeのダウンロード
AlteraのダウンロードセンターのWebページから”Quartus Prime ライト・エディション”のダウンロードボタンをクリック.このバージョンは無償です.Version 15.1以降名前がQuartus Primeに変わったようです.以前の名前はQuartus II ウェブエディションなのでちょっと前の記事やウェブ情報はそうなっています.
OSとダウンロード方法を選んだら
2. インストール
インストール内容の確認の際,図1のようにDevicesにMAX10 FPGAが入っていることを確認しておきましょう(細かい表示は違うかもしれません).
これで通常の開発は可能です.
3. TeraTermのインストール
Odysseyの機能を使ってUSBケーブル経由でプログラム書き込みを行う場合はもうちょっと手順が増えます.このプログラム書き込みにターミナルが必要になるのでTeraTermもインストールします.
1. TeraTermのダウンロードとインストール
こちらからどうぞ
2.ドライバのダウンロード
Odyssey Software DownloadsにアクセスしてUtilitiesにある”SiLabs USB Virtual Serial Port Driver”をダウンロードしてインストールします.
3. 設定ファイルのダウンロード
同じく”Utilities”にある”TeraTerm initialization file”も合わせてダウンロードしておきましょう.
これでソフトの準備は完了です.
4. プログラムの作成
1. Quartusを起動し,[File]から[New Project Wizard…]を選びます.
2. 図のようなウィンドウが表示されるので適当なディレクトリを指定します.
次にprojectの名前とtop-level design entityを入力します.
ここで入力するtop-level design entityは後でコードを書く際のmodule名前と一致する必要があります.あとでmodule名にled_testという名前を使いますので,揃えておいてください.適当な例文を取ってくるときはtop-level design を例文と揃えて下さい.(コンパイル時にエラーが出てはまります)
3. Project Typeを聞かれるので[Empty project]を選びます
4. Add Filesのウィンドウでプロジェクトに追加するファイルを聞かれますが,そのまま次へ進みます
5. チップの名前を選びます.
m-pressの回路図には”10M08SAU”とあるので近いものを選んでおきましょう(チップの上にセンサー基板がくっついているので外さないとチップが読めません.めんどくさいのでとりあえず近いものを選んでます.)
5. EDA Tool設定の画面も何も変更せずに次に進みます
6. 最後の確認が表示されるのでそのまま[finish]を押します.
6. これでプロジェクトは完成です.次にソースコードを追加します.
メニューの[File]から[New]を選びます.
すると追加するFileの種別を選ぶウィンドウが出てくるので”Verilog HDL File”を選んで,”OK”を押してください.
新たに白紙のソースファイルが作成されるので
ボタンを押したらLEDが光る.ただそれだけのコードを書きます
以下の5行を記入して下さい.
input と outputをつないだだけで, inputにはスイッチPB0, outputにはLED0を指定するつもりです.
module led_test(in_sw, out_led);
input in_sw;
output out_led;
assign out_led = in_sw;
endmodule
(注)ここのモジュールの名前と前出のTOP_level designは同じ名前にしておいてください.
保存すると名前を聞かれますが,デフォルトのまま保存して下さい.
(プロジェクトに追加するチェックボックスが入っているのでそのままプロジェクトにも追加されます)
7. コンパイルをします
[Processing]から[Start] →[Start Analysis & Elaboration]を選んでコンパイルを実行してください.
エラーがなければOKです.
8. 次にピンのアサインをします.
MAX10の搭載されているボードのドキュメントを確認します.回路図と部品配置図からS1(PB0)を押して, D8(LED0)を光らせるようにします.S1(PB0)はK13, D8(LED0)はL13に接続されていることがわかります.
先ほどのソースコードの”in_sw”をK13に, “out_led”をL13に接続すればよさそうです.
メニューの[Assignments]から[Pin Planner]を選びます.
画面の下にin_swとout_ledが表示されていますが,これはソースコードに記入したinputとoutputが表示されています.
あとはFPGAのピンを”location”で選択します.ここではそれぞれ”PIN_K13″と”PIN_L13″です.
あとはI/Oのタイプを”3.3V LVTTL”とすればOKです.
9.再度コンパイルを行っておきましょう.これでsofファイルができています.
5. データの転送
ここからは通常はBluster Cableを使用するところですが,odysseyの機能を使ってプログラムをUSBケーブルで転送します.この機能の詳細はマクニカの技術情報[1, 2]で詳しく紹介されているのでそちらを参考にしてください.
ここでは理屈はあとで勉強するとしてとにかく最後までやりきりましょう.
1. 転送できる形式にデータを書き換えます.
メニューの[Tools]から[Programmer]を選びます.
新しく起動したウィンドウのメニューの[Edit]から[Add File]を選びます
5. 次にodysseyをUSBケーブルでPCに接続してTera Termを起動します.
起動したら接続をしようとしますが,一旦キャンセルして設定ファイルを読み込ませます.
メニューの[設定]→[設定の読み込み]を選んで, 事前準備でダウンロードしていた”TeraTerm initialization file”を読み込みます.(手続きが鬱陶しい方はデフォルトに設定した方が良いかもしれません)
メニューが英語になりますが,続いて
[File]から[New connection]
を選びます.
図のように
“Serial Port”で”Silicon Labs CDC….”
を選択します.
これが表示されないときは”SiLabs USB Virtual Serial Port Driver”のインストールができていません.再度やり直してください.
6. Tera Termが起動したら一番左に並んでいるスイッチの上から三番目(S3)を一回押します.
するとTeraTerm上に”Press Enter to continue”と表示されるのでEnterキーを押します.
メニューが表示されるはずです.
7. プログラムの転送
はじめに転送ツールを使ってjbcファイルをodysseyのFlashに送ります.
6までの作業がうまく終わっていればメニューが表示されているので
“5: Download a MAX 10 .jbc file to a specific personality”
を選びます.
“Select File & Send File – in Tera Term and make sure
Binary option box is checked before pressing OK.”
と表示されるので指示通り[File]から[Send File]を選んで先ほど作成したjbcファイルを選びます(ファイルは通常output_filesのディレクトリの中です)
ここで[binary]のチェックを入れるのがポイントです.
(入れ忘れると通信が帰ってこなくなるので,TeraTermを閉じて,一旦ケーブルを抜き,はじめからやり直します.)
うまくいけば
“Enter two digit Personality number (01 through 10)”
と表示されているのでMax10へのプログラム書き込みを指定します.
ここではデフォルトで空いている7番目に書き込みます.
“07”と入力してEngterを押してください.
(出荷段階で7~10は空いているようです.)
終われば”File loaded”と表示されます.
7. プログラムのConfigure
メニューに戻るので次にプログラムを使用可能にします.
“6: Program MAX 10 using .jbc file from a specific personality”
を選びます.
Enter two digit Personality number (01 through 10)
と表示されるので先ほど保存した07を選ぶため
07
と入力します
すると
などと表示されるのでConfigureを行うため
0
を入力します.
これで
Device #1
IDCODE is 031820DD
configuring SRAM device(s)…
DONE
Exit code = 0… Success
Elapsed time = 00:00:11
Complete
などと表示されればOKです.
全て完了です.
6. push the button !
S1を押してみてください.LEDが光るはずです.
ちなみに今回の回路は揮発メモリに書いているので電源を落とすと消えます.
Flashには残っているので,手順17のConfigureをやり直せば再度実行できます.
電源消えても消えないように書き込むこともできます.[2]を参考にしてみてください.
長い道のりでしたがなんとかたどり着きました.
動いてみるとFPGA結構楽しくなってきますね.
参考文献
[1]マクニカオンライン, [操作編] MAX 10 評価キット Odyssey の FPGA に microUSB ポート経由でコンフィギュレーション・データを転送してLチカ!”
[2]マクニカオンライン, “[概要編] MAX 10 評価キット Odyssey の FPGA に microUSB ポート経由でコンフィギュレーション・データを転送してLチカ!
コメント