DIY向けFPGAブレークアウトボード「Fipsy」の開発環境立ち上げ完了。
過去記事にて紹介したLatticeのFPGAを書き込む環境を立ち上げた。
キックスターターでプロジェクトを立ち上げた張本人「Moco Makers」のページにも説明が書いてあるのだが、イマイチわかりにくい。だいぶ苦戦したので、先人の知恵として、活用してもらえたら嬉しい。ArduinoとRaspberry Piのどちらを活用しても良いのだが、手元にあったArduinoを活用することにした。
検証環境
- Windows7 64bit
- Let's note
Mac OSではFPGAの開発環境が使えないため断念した。対応のLinuxを入れればMacでもたぶん可能だ。
ファイルを用意する。
こっちのGitHubにArduinoとRaspberry Piのどちらを使用する場合でも必要なファイルがあるのでダウンロードする。
こっちのGitHubにはArduinoを使用する場合に必要なファイルがある。
Arduinoにプログラムを書き込む
まずは、FPGAに対してではなく、FPGAにSPI経由でバイナリーを書き込むために使うArduinoの設定をする。ダウンロードした、Arduino-Fipsy-Programmer-masterの中にある、Arduino_Programmer.inoをArduino IDEから書き込む(もちろん、他の統合開発環境からでも大丈夫だと思う)。この時、MachXO2.hも同じフォルダにないといけないらしいので注意。
Lattice Diamondで.jedファイルを出力する
FPGAの書き込みにはLatticeの専用ツールが必要なので、こちらから準備しておく。このツールのダウンロード自体は訳ないのだが、ライセンスの申請で数日かかる。師匠は数ヶ月たってもライセンスの許諾が降りないようだ。ここはどうしようもない。
Lattice Diamond Softwareがダウンロードできたら、こちらの「3. Open the Lattice Project File」で書かれている指示通りにLattice Project Fileを開く。FipsyBaseline.ldfという名前のファイルがProject Fileのようだ。Fileを開くのではなく、Project Fileを開く必要があるので注意。4のSPIのEnableはデフォルトでEnableになっているっぽいのでたぶんスキップ可。
もしかすると「5. Create a JEDEC file」では、指示通りに上手くいかない場合があるかもしれない。対処法の勘所として、"Return"を押す、作成済みの.jedファイルを別フォルダに移す、という対処がおそらく有効である。現象の原因も解決する理由もわからないけど、まぁそんなもん。
以降は、Arduinoを活用した書き込み環境立ち上げのページを参照する。
回路は、電圧シフタのボードを持っていなかったため、抵抗分圧で実現した。
pythonの環境設定は苦戦した。
1 from Tkinter import Tk
2 import serial
と書かれているテストは結局うまく行かなかったと記憶している。テスト工程のデバッグが面倒だったのですっ飛ばした。
書き込みツールを立ち上げる
このあたりからようやく本題に入るのだが、書き込みツールの立ち上げ、書き込みの過程に入る。コマンドプロンプトを立ち上げ、FileChooser.pyが置いてあるフォルダ(フォルダ構成をいじっていなければ\Arduino-Fipsy-Programmer-master)に移動(Linuxと同じくcdで移動できる)。
python FileChooser.py
を実行すると下記の画面が立ち上がる。
書き込む
Mocoのページの下の方にも書かれているが、GUIに書かれている通りに必要な設定をしていく。
Select a port → USBポートの選択(Arduono IDE上と同じ)
Select your file → .jed fileの選択
Check Device ID → ArduinoのデバイスIDが正しく読めているかの確認。FFが並ぶ結果にならなければOK
Erase Device → 使ったことない。
Program Device → 確認と設定が終わったらここを押してArduino経由で書きこみ。
バックグラウンドでは、Pythonが.jedをバイナリーに書き換え、Arduinoでシリアル to SPI変換をしているっぽい。
書き込み完了を確認する
上記の手段で書き込めているはずだが、確認が必要であれば、下記のコードを少し書き換えてみるといい。
begin if(RESET) count <= 0; else count <= count + 1; end
// Connect the output assign MSB = count[19]; ここの配列は19が正しい。例えば、20にすると、MSBの指定がされないため、Lチカしなくなる。
以上!とりあえず動くことはわかりました。