FTCJTAGのバグ取り
『Amontec JTAGkey-Tiny (FT2232) を Xilinx iMPACTから使う』という過去記事があります。これはUSBシリアルコンバータの半導体で有名なFTDIのチップFT2232を使って、FPGAやPROMなどのデバイスをJTAGでコンフィギュレーションしようというものなのですが、巷のツールと大きく異なりFPGAベンタのXilinxの純正書き込みツールであるiMPACTから扱えるため、意外と高評いただいています。それに関するお話です。
このツールですが、FTDIが提供しているJTAG制御ライブラリのFTCJTAGというものに依存しています。ところがこのFTCJTAG(現時点での最新バージョン2.0を元に話をします)には結果的にバグがありまして、PROMのコンフィギュレーションはうまくいくが、FPGAはうまくいかないことがある、という事態を引き起こしていました。ツールをより使いやすくするためにも、FTCJTAGのバグフィクスをしました。
問題はJTAGのTAPステートマシンに関するもので、例えばバッファを越えるような非常に長いビットを読み書きしたいがために、shift DR/IRの状態を維持したまま読み書き関数(JTAG_Write() / JTAG_Read() / JTAG_WriteRead())を抜けたいというところで発生します。通常の使い方は読み書きを抜ける際はさらに状態遷移を引き起こしてrun test idleまで遷移をするのが一般的でこの場合問題はおきないのですが、FPGAへビットストリームをダウンロードする際はビットストリームが長大であること、そしてその間どうやらshift DR状態を維持しなければならないこと(spartan3がそうでした)、というところで問題に気がつきました。そしてこの問題の症状は、関数呼び出し毎におけるデータストリームの最後1bitが、デバイスに送信されなくなります。
そこで上図のように、改修を加えました。読み書き関数が依存している大元の関数を修正してあります。FTDIで公開されているソースに改修を加えたソース、および差分パッチ(FTCJTAG_src_20.patch)を公開します。
※iMPACTから使うツールについても、この修正版FTCJTAGを同梱したものに更新しました。ついでに高速版のFT2232H/4232Hにも対応しています。
コメント
コメントする
- 匿名でのコメントは受け付けておりません。
- お名前(ハンドル名可)とメールアドレスは必ず入力してください。
- メールアドレスを表示されたくないときはURLも必ず記入してください。
- コメント欄でHTMLタグは使用できません。
- コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
- コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。
- 投稿ボタンを押してエラーがでなければ、投稿は成功しています。反映されるまでには少し時間がかかります。