【JRunner改】Raspberry PiでIntel製FPGAをコンフィグレーションする
この記事は何?
Intel(ALTERA)製FPGAはすべてJTAGインターフェイスを備えており、JTAG端子から任意のタイミングで内部のロジックを書き換えることができます。
この記事はRaspberry Piを使ってJTAG信号を制御し、FPGA内部の論理をコンフィグレーションするためのツール「JCONFIG」を紹介します。
JCONFIGについて
このツールはIntel(ALTERA)が公開している「JRunner」というツールをRaspberry Piに移植したものです。
JRunnerはパソコンのパラレルポートとIntel(ALTERA)のFPAGのJTAG端子を接続してコンフィグレーションを行うためのツールですが、下記の理由があり今となってはほぼ利用価値がないツールです。
- パラレルポートが付いていて正常稼働するパソコンは新品での入手は不可。
USB-パラレル変換もソフト的な互換がなく使えない。 - 対応OSがWindows XPまで。
とくにWindows 2000 〜 Windows XPのパソコンはマザーボード上の電解コンデンサに問題があるものが多く、電解液が漏れて起動しなくなっている個体が多いため実機での利用はほぼ絶望的と考えて良いでしょう。
…とはいえcdfファイルを解析してJTAGコンフィグレーションを行っているなど技術資料としての価値は高いので、試しにRaspberry Piに移植してみたものを「JCONFIG」として公開します。
I/O駆動部分はRaspberianのGPIO標準ドライバを利用していますが、この部分をただのI/O駆動に書き換えることで一般的なマイコンなどにも容易にポーティングが可能です。
ソースファイルなど
ソースファイルとコンパイル済みのバイナリはGithubで公開していますので、そちらをご覧ください。(かなり昔に作ったツールのため著作者表示が「Mi-ke neko Tools」になってますが気にしないで…。)
| リンク | |
|---|---|
| Github | jconfig_tmct |
ライセンス条項はJRunnerの条項に準拠します。著作権表示を消さない限り商用・私用問わず自由に利用して頂いて構いませんが、すべて自己責任にてご利用ください。
ポートアサイン
以下のようなポートアサインになっています。
このアサインは jb_io.c に定義しているので、ここを書き換えると別のポートにアサインすることもできます。
| Pin No. | ピン名 | 入出力方向 | 信号名 | 備考 |
|---|---|---|---|---|
| 29 | GPIO5 | IN | JTAG_TDO | TDO入力‥ターゲットFPGAのTDOに接続 |
| 31 | GPIO6 | OUT | JTAG_TDI | TDI出力‥ターゲットFPGAのTDIに接続 |
| 32 | GPIO12 | OUT | JTAG_TMS | TMS出力‥ターゲットFPGAのTMSに接続 |
| 33 | GPIO13 | OUT | JTAG_TCK | TCK出力‥ターゲットFPGAのTCKに接続 |
| 36 | GPIO16 | OUT | JTAG_INUSE | コンフィグレーション中のみ ‘H’ が出力される |
インストール方法
適当なフォルダにプログラムファイル本体を入れるだけです。とくに設定などは不要ですが、他のタスクにGPIOリソースを使われている場合は使用できません。
GPIO制御はRaspberian標準のデバイスドライバを使用しており、ほかには何も必要ありません。
使い方
コマンドライン専用ツールです。GUIはありません。
./mt_jconfig <<cdf filename>>
«cdf filename» にコンフィグレーション定義ファイル(*.cdf)を指定します。
コンフィグレーション定義ファイルはJTAGチェインと書き込み対象ファイルを定義したもので、QuartusII Programmerを使って作成するのが楽です。
なお、このツールには書き込み対象ファイルに下記の制約があります。
- ファイルパス・ファイル名とも小文字でないと正常に読み込めない
パス・ファイル名に大文字が含まれる場合は読み込みに失敗します。 - フォーマットは無圧縮のrbfファイルに限る
Quartusでファイルを生成させる際は「Generate compressed bit stream」のチェックを外しておく必要があります。
正常にコンフィグレーションが完了すると、以下のように表示されます。下記はCycloneIIに接続してコンフィグレーションを行った例です。
===================================
Mi-ke neko Tools :: JCONFIG Version 1.0
Copyright (c) 2015 Mi-ke neko Tools.
Based on JTAGRunner(JRunner) Version 2.6
Copyright (c) 1995-2015 Altera Corporation.
===================================
Info: Chain Description File: "test_rbf.cdf" opened..
Info: Parsing CDF...
family: CYCLONE II(12)
Info: Verifying device chain...
Info: Detected 1 device(s) in chain...
Info: Dev1: Altera: 0x20B10DD
Info: Configuration setup device #1
Info: Programming file #1: "test_rbf.rbf" opened...
Info: Programming file size: 158224
Info: Start configuration process. Please wait...
->8191/158224
->16383/158224
->24575/158224
->32767/158224
->40959/158224
->49151/158224
->57343/158224
->65535/158224
->73727/158224
->81919/158224
->90111/158224
->98303/158224
->106495/158224
->114687/158224
->122879/158224
->131071/158224
->139263/158224
->147455/158224
->155647/158224
Info: done.
Info: Checking Status
Info: Configuration of device #1 successful...
注意事項など
GPIOを単純にPIO制御しているため、非常に遅いです。
ハードウェアの機能を使えばもっと高速に書き込みが可能なので、他の機種に移植する場合はそれを考慮に入れると良いでしょう。