【SRunner改】Raspberry PiでIntel製コンフィグレーションROMに書き込む
この記事は何?
IntelのSRAM系FPGAはコンフィグレーションROMとセットで使われることが多いですが、たいていROMへの書き込みはメーカー書き込み(=未書き込みのROMに業者で書き込んでから基板に実装する)か、何も書き込まない生ROMを基板に実装してFPGA経由で書き込むことがほとんどです。
この記事はRaspberry Piを使ってコンフィグレーションROMの信号を制御し、直接ROMに書き込むためのツール「SCONFIG」を紹介します。
SCONFIGについて
このツールはIntel(ALTERA)が公開している「SRunner」というツールをRaspberry Piに移植したものです。
SRunnerはパソコンのパラレルポートとIntel(ALTERA)のFPGAコンフィグレーションROM(EPCSシリーズ)を接続して書き込みを行うためのツールですが、下記の理由があり今となってはほぼ利用価値がないツールです。
- パラレルポートが付いていて正常稼働するパソコンは新品での入手は不可。
USB-パラレル変換もソフト的な互換がなく使えない。 - 対応OSがWindows XPまで。
とくにWindows 2000 〜 Windows XPのパソコンはマザーボード上の電解コンデンサに問題があるものが多く、電解液が漏れて起動しなくなっている個体が多いため実機での利用はほぼ絶望的と考えて良いでしょう。
…とはいえコンフィグレーションROMに書き込むツールを製作するための資料は非常に乏しく技術資料としての価値は高いので、試しにRaspberry Piに移植してみたものを「SCONFIG」として公開します。
I/O駆動部分はRaspberianのGPIO標準ドライバを利用していますが、この部分をただのI/O駆動に書き換えることで一般的なマイコンなどにも容易にポーティングが可能です。
ソースファイルなど
ソースファイルとコンパイル済みのバイナリはGithubで公開していますので、そちらをご覧ください。(かなり昔に作ったツールのため著作者表示が「Mi-ke neko Tools」になってますが気にしないでください…。)
| リンク | |
|---|---|
| Github | sconfig_tmct |
ライセンス条項はSRunnerの条項に準拠します。著作権表示を消さない限り商用・私用問わず自由に利用して頂いて構いませんが、すべて自己責任にてご利用ください。
ポートアサイン
以下のようなポートアサインになっています。
このアサインは bb_gpio.c に定義しているので、ここを書き換えると別のポートにアサインすることもできます。
| Pin No. | ピン名 | 入出力方向 | 信号名 | 備考 |
|---|---|---|---|---|
| 7 | GPIO4;GPIO_GCLK | OUT | EPCS_ASDI | ASDI出力‥EPCSのASDIに接続 |
| 11 | GPIO17;GPIO_GEN0 | OUT | EPCS_nCE | nCE出力‥FPGAのnCEに接続 |
| 12 | GPIO18;GPIO_GEN1 | OUT | EPCS_nCS | nCS出力‥EPCSのnCSに接続 |
| 13 | GPIO27;GPIO_GEN2 | OUT | EPCS_nCONFIG | nCONFIG‥FPGAのnCONFIGに接続 |
| 15 | GPIO22;GPIO_GEN3 | OUT | EPCS_DCLK | DCLK出力‥EPCSのDCLKに接続 |
| 16 | GPIO23;GPIO_GEN4 | IN | EPCS_CONFDONE | CONFDONE入力‥FPGAのCONFDONEに接続 |
| 18 | GPIO24;GPIO_GEN5 | IN | EPCS_DATAO | DATAO入力‥EPCSのDATAに接続 |
インストール方法
適当なフォルダにプログラムファイル本体を入れるだけです。とくに設定などは不要ですが、他のタスクにGPIOリソースを使われている場合は使用できません。
GPIO制御はRaspberian標準のデバイスドライバを使用しており、ほかには何も必要ありません。
使い方
コマンドライン専用ツールです。パラメータを省略することはできません。
./mt_sconfig -<<command>> -<<EPCS density>> <<filename>>
| Parameter | |
|---|---|
| «command» | EPCSに対して実行するコマンドを指定します。 program … 指定されたRPDファイルを書き込む read … EPCSの内容を指定されたRPDファイルに保存する verify … 指定されたRPDファイルの内容とEPCSの内容が一致することを確認する erase … EPCSをイレースする(本家SRunnerにはない機能) |
| «EPCS density» | EPCSのサイズを指定します。 EPCS4なら4、EPCS16なら16を指定します。 |
| «filename» | 書き込みターゲットとなるRPDファイルを指定します。 RPDファイルは標準では生成されないので、SOFファイルからQuartusのファイルコンバータで変換することで生成します。 |
正常に書き込みが完了すると、以下のように表示されます。下記はEPCS4に接続して書き込みを行った例です。
$ ./mt_sconfig -program -4 test_rbf.rpd
=======================================================
Mi-ke neko Tools :: SCONFIG Version 1.0
Copyright (c) 2015 Mi-ke neko Tools.
Based on SRunner(Windows) Version 1.2
Copyright (c) 1995-2015 Altera Corporation.
=======================================================
Operation: Programming EPCS
Info: Programming file: "test_rbf.rpd" opened.
Info: Driver opened.
Info: File size: 524288 bytes.
Info: Silicon ID - 0x12
Info: Serial Configuration Device - EPCS4
Info: Erasing. Please wait few minutes...
Info: Erase Done.
Info: Start programming process.
Info: Programming. Please wait few minutes...
Info: Programming successful.
Info: Driver closed.
Operation Completed!!!
注意事項など
GPIOを単純にPIO制御しているため、非常に遅いです。
ハードウェアの機能を使えばもっと高速に書き込みが可能なので、他の機種に移植する場合はそれを考慮に入れると良いでしょう。