DIY向けFPGAブレークアウトボード「Fipsy」の開発環境立ち上げ完了。

過去記事にて紹介したLatticeのFPGAを書き込む環境を立ち上げた。

キックスターターでプロジェクトを立ち上げた張本人「Moco Makers」のページにも説明が書いてあるのだが、イマイチわかりにくい。だいぶ苦戦したので、先人の知恵として、活用してもらえたら嬉しい。ArduinoRaspberry Piのどちらを活用しても良いのだが、手元にあったArduinoを活用することにした。

検証環境


Mac OSではFPGAの開発環境が使えないため断念した。対応のLinuxを入れればMacでもたぶん可能だ。

ファイルを用意する。

こっちのGitHubArduinoRaspberry 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になっているっぽいのでたぶんスキップ可。

f:id:MasterKoda:20181209192959p:plain
Lattice Diamondの.jed出力後画面

もしかすると「5. Create a JEDEC file」では、指示通りに上手くいかない場合があるかもしれない。対処法の勘所として、"Return"を押す、作成済みの.jedファイルを別フォルダに移す、という対処がおそらく有効である。現象の原因も解決する理由もわからないけど、まぁそんなもん。

f:id:MasterKoda:20181209192822p:plain
.jedのsummary

以降は、Arduinoを活用した書き込み環境立ち上げのページを参照する。

回路は、電圧シフタのボードを持っていなかったため、抵抗分圧で実現した。

f:id:MasterKoda:20181209190144j:plain
Arduino+Fipsy

pythonの環境設定は苦戦した。

1 from Tkinter import Tk

2 import serial

と書かれているテストは結局うまく行かなかったと記憶している。テスト工程のデバッグが面倒だったのですっ飛ばした。

書き込みツールを立ち上げる

このあたりからようやく本題に入るのだが、書き込みツールの立ち上げ、書き込みの過程に入る。コマンドプロンプトを立ち上げ、FileChooser.pyが置いてあるフォルダ(フォルダ構成をいじっていなければ\Arduino-Fipsy-Programmer-master)に移動(Linuxと同じくcdで移動できる)。

python FileChooser.py

を実行すると下記の画面が立ち上がる。

f:id:MasterKoda:20181209190748p:plain
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経由で書きこみ。

f:id:MasterKoda:20181209191746p:plain
FileChooser.py書き込み途中

f:id:MasterKoda:20181209191829p:plain
FileChooser.py書き込み完了画面

バックグラウンドでは、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チカしなくなる。

以上!とりあえず動くことはわかりました。