Lattice XP2の書き込み対応
今日は丸一日、MITOUJTAGをLattice XP2の書き込みに対応させるための改良を行っていました。
LatticeのFPGAを論理合成するには、Latticeの出しているispLEVERというツールがあります。このツールには無償のスタータ版があるので、それを利用します。
ただし、ispLEVERには論理合成ツールがありません。
回路図やVHDL,Verilogでデザインを入力しても、その論理式を論理圧縮して合成してネットリストにすることができません。そこで、SnopsysのSynplifyというツールを使います。
幸いなことに、Lattice専用のバージョンが無償で利用できるようになっています。ただし、ダウンロードするためのキーの取得にものすごく時間がかかる(おそらく海外の人が手作業で認証していると思われるほど)ので、1日くらいの余裕を見てダウンロードしておいたほうがよいでしょう。
ispLEVERの使い方は富士エレクトロニクスさんの「ispLEVER、最初の一歩」が詳しいです。
ispLEVERとSynplifyをインストールして、VHDLでコードを書き、Generate Data File(JEDEC)というところをクリックすると、JEDECファイルが生成されます。
JEDECファイルをFPGAに書き込むのですが、標準ではispVMというJTAGコンフィグツールが用意されています。
しかし、ispVMは非常に使い方がわかりにくいです。iMPACTといい勝負。画面上の表で、デバイスごとにやりたい操作を登録して、GOボタンを押すというものですが、Eraseとか、Programとか、Verifyしたいと思っても、そのコマンドを発行するまでにものすごい手間がかかります。
ところが、なぜかispVMはJTAGの関連ファイルを生成する能力には非常に長けていて、SVFファイルやSTAPLファイル、ATE用のいろんなファイルをいとも簡単に出してくれます。しかも、SVFファイルの細かいバージョンが指定できたり、SVFファイルにLOOPというLattice独自の命令が追加されていたり、SVFデバッガとかが用意されています。使いやすさよりも、JTAGの細かいオプションやマイナーなファイル変換機能が優先されている感じですね。
これは、絶対にLatticeの中にJTAGマニアがいるに違いない!!
さて、コンフィギュレーションというのは、FPGAを開発する上での最重要項目だと思いますので、MITOUJTAGで対応させました。ボタン一発で、書き込み、読み出し、ベリファイ、ブランクチェック、リードバックができます。
とりあえず、XP2シリーズ(5,8,17,30,40)のすべてに対応させたつもりですが、確認はXP2-17Eしか行っておりません。消去に4秒、書き込み27秒、ベリファイ8秒でした。
さて、XP2の書き込みには、いくつかのモードがあります。
・通常モード ・・・ 内蔵FlashROMに書き込む。書き込み時はFPGAは動作停止
・バックグラウンドモード ・・・ 内蔵FlashROMに書き込む。書き込み時はFPGAは動作を継続する。
・SRAMモード ・・・ SRAMに書き込む。書き込み時はFPGAは動作を停止する。無限回書き換えられる。
内蔵フラッシュROMの書き換え可能回数は、1万回とか10万回とかです。ほぼ気にしなくて良いレベルでしょう。
上記の、「動作を停止」しているときには、なんと、バウンダリスキャンのEXTESTモードになるようです。バウンダリスキャンによってI/O端子の状態を固定し、書き込み前の状態でフリーズさせるためのようです。これが後述のTransFRという書き込みモードのようです。絶対に、Latticeの中にJTAGマニアがいるに違いない!
FlashROMに書き込んだ後、そのデータをSRAMに転送することでFPGAが動作を開始するのですが、その方法には2つ(もしくは3つ)あるようです。
・TransFR・・・転送時に端子の状態を、直前の状態でフリーズさせる。バックグラウンドモードでの書き込み時に使う。FPGAは本当に一瞬しか止まらない。
・Refresh・・・ROMからSRAMへ転送したのち、コンフィギュレーションシーケンスを再起動する。パワーオンリセットと同じレベルで再起動する。通常モードでの書き込み時に使う。FPGAはミリ秒程度停止する。
そのほかにも、いろいろなモードがあるようなのですが、本日の改良作業では、通常のフラッシュROMへの書き込みのみ作成しました。SRAMダウンロードモードなどは機会があれば試してみることにします。
さて、Latticeのツールでは、端子のピン配置などを固定するファイルは、lpfファイルというようです。
こんな感じのフォーマットでした。
LOCATE COMP "CLK_IP" SITE "22" ;
LOCATE COMP "LED_OP_0" SITE "92" ;
・・・
このファイルをMITOUJTAGで読み込めるようにしたところ、ちゃんとピン名が出るようになりました。
明日は、BLOGANAのLattice対応に挑んでみることにします。
| 固定リンク
コメント