FPGAのコンフィグ回路や方法は先輩から代々受け継がれているものを利用する秘伝のタレのようなものだけど、新しいデバイスを使おうとすると一気に分からなくなる。Lattice Crosslinkは、比較的新しいデバイスなのでコンフィグ回路の構成や方法で少し迷った。調べた内容をまとめていきます。
CrossLinkのコンフィグの種類
CrossLinkのコンフィグの種類には以下の方法がある。
- ダウンロードケーブルからの一時書き込み
- NVCM(ワンタイムプログラマブルメモリ)からのコンフィグ
- SPIフラッシュからのコンフィグ
- マイコン等メインプロセッサからのI2C, からのコンフィグ
最もよく使われるのはSPIフラッシュからのコンフィグ。
NVCMはおそらく量産時に使用するコンフィグのモードで、NVCMに一度書き込んだら書き換えることができないので注意が必要。
マイコンからのコンフィグに関してはCのソースコードがLatticeから提供されていて、それを元に設計を行うことができる。あまりメジャーなやり方ではないと思うのでここでは説明しない。
コンフィグレーションファイルの種類
コンフィグレーションファイルには以下の種類がある。
- bitstreamファイル(.bit, .rbt)
- jedecファイル(.jed)
- promファイル(.mcs)
bitstreamファイルはダウンロードケーブルからの一時書き込みで使用する。
jedecファイルはNVCMへの書き込みを行うときに使用する。
promファイルは外部フラッシュにコンフィグファイルを格納する際に使用する。
コンフィグレーション順序について
CrossLinkはデフォルトでNVCMからコンフィグする設定になっている。この設定は、Lattice DiamondのSpreadSheet Viewから設定することができる。
- NVCM
- EXT
- NVCM-EXT
- EXT-NVCM
- EXT-EXT
“NVCM”はNVCMからのコンフィグレーション。”EXT”は外部フラッシュからのコンフィグレーションを示す。
“NVCM-EXT”では、まずNVCMからコンフィグレーションを試みる。これが何らかの原因でエラーとなった場合、外部フラッシュからのフェッチを試みる。
“EXT-NVCM”は上記の逆になる。
“EXT-EXT”は外部フラッシュに2つのコンフィグレーションがある場合に使用する。
最後の3つのは2つのコンフィグファイルをフェッチすることになる。2つのコンフィグのうち、1つがフェイルセーフ用、もう一つが通常動作用 というように安全動作を想定したものらしい。
SPIフラッシュからコンフィグレーションする際の設定
SPIフラッシュを使ったコンフィグを使用する場合は、Lattice Diamondにおいてプロジェクトをコンパイルするときにいくつか設定を行う必要がある。
SPIポートの設定
CrossLinkはマルチファンクションピンを持っていて、コンフィグレーションピンもマルチファンクションピンとなっている。
そのため、対象のピンについてコンフィグレーション端子として利用することを明示的に設定する必要がある。
Lattice DiamondのSpreadSheetView -> Global Preferenceを開く。
sysConfigの項目のMASTER_SPI_PORTをENABLEに設定する。
これによって、コンフィグレーション回路がピンに接続され、外部フラッシュとのSPI通信が行えるようになる。
コンフィグレーション順序の設定
次に、Global PreferenceのsysConfigからBOOT_UP_SEQUENCEをEXTに設定する。
その後コンパイルを行なってコンフィグレーションファイルを作成する。