Gowin RUNBERボードV1.2のフラッシュ書き込み不具合の原因と対処法

2021年12月号別冊付録「5000円ボードで始めるFPGA開発」記事サポート

Gowin RUNBERボードV1.2のフラッシュ書き込み不具合の原因と対処法

井田  健太

本誌2021年12月号の別冊付録「5000円ボードで始めるFPGA開発」にてFPGAボードGowin RUNBERを紹介しました.今回このボードに搭載するFPGAの内蔵フラッシュ・メモリに書き込みを行うと,その後は書き込みができなくなる不具合が見つかりました. 記事の内容はSRAMへ書き込むことで試すことができるので,フラッシュ・メモリへの書き込みは行わず,SRAMへの書き込みによって実行するようにしてください.本稿では不具合の要因と,現象発生時の対策について説明します.

V1.2 ボードではコンフィグ・データをフラッシュに書き込むべからず

ボードに搭載されているFPGA GW1N-UV4LQ144(Gowin)には,コンフィグレーション用のフラッシュ・メモリが内蔵されています.ボードへの電源投入後,内蔵フラッシュ・メモリにコンフィグレーション・データが書かれている場合は自動的にロードされます.
内蔵フラッシュ・メモリへのコンフィグレーション・データの書き込みは,ボードに搭載されているUSBJTAG変換回路経由で,Gowin IDEに付属するソフトウェアのGowin Programmerを使って行います.

● バージョン1.2 に固有の問題
2021年12月現在,秋月電子通商などで購入できるGowin RUNBERはV1.2と呼ばれるバージョンです.このバージョンのUSB-JTAG変換回路に不具合があり,内蔵フラッシュ・メモリへの書き込み操作を行うと,内蔵フラッシュ・メモリの消去に失敗します.さらにフラッシュ・メモリどころかSRAMへの書き込みすら行えなくなります.記事執筆時点で使用したバージョン1.1のボードではこの問題は起こりません.

フラッシュ書き込みに失敗する理由

● JTAG インターフェースが変更された
バージョン1.1からの変更点として,FPGAの書き込みに用いるUSB-JTAGインターフェースが挙げられます.図1にそれぞれのバージョンのUSB-JTAGインターフェースを示します.

V1.1ではUSB-JTAGインターフェースとしてFT232HQ(FTDI)が使用されていました.これが,V1.2ではCH552T(Nanjing Qinheng Microelectronics)に変更されています.FT232HQはUSB 経由でSPI やJTAGといったプロトコルの信号をやり取りするMPSSEという機能を持っているIC です.一方,CH552Tは,USBデバイス機能を持つマイコンです.USB-JTAG変換の機能はマイコンのソフトウェアとして実装されています.

● 書き込み時のクロックに問題あり
GW1N-UV4LQ144を含むGowin FPGAにJTAG経由で書き込みする手順は,メーカが提供しているユーザ・ガイド(1)に記載されています.これによると,GW1N-UV4の内蔵フラッシュ・メモリの消去処理時には,TCKのクロックを1M ~ 5MHzの周波数の範囲で120msの間継続して出力する必要があります.このクロック出力についてボードのバージョンによる違いを示すため,フラッシュ・メモリ消去時のTCK の波形をそれぞれ図2図3に示します.V1.1 ではTCKのクロックが途切れずに連続しています.一
方,V1.2では8 クロックごとに,12.96μsの隙間が開いているため,内蔵フラッシュ・メモリの消去に失敗してしまいます.

書き込めなくなったボードの復旧方法

● コンフィグレーション・モードを変更する
フラッシュ・メモリの消去に失敗すると,異常な状態のフラッシュ・メモリからコンフィグレーション・データを読み出そうとして起動に失敗してしまいます.結果として一切のコンフィグレーションを受け付けなくなり
ます.
一方,Gowin FPGAには,内蔵フラッシュ・メモリからコンフィグレーション・データを読み出すモード以外にも,幾つかのコンフィグレーション・モードがあります.この起動モードは,MODE0,MODE1,MODE2というピンの入力によって設定できます.
表1にコンフィグレーション・モードとMODEピンの入力値の対応を示します.

MODEピンのうち,MODE2はGW1N-UV4LQ144には存在しません.このピンはパッケージ内部でGND に接続されています.MODE0,MODE1 は,1kΩでプルダウンされていので,デフォルトではコンフィグレーション・モードは000つまりAUTO BOOTとなっています.MODE0またはMODE1の値を1にすればコンフィグレーション・モードがAUTO BOOT以外に設定されます.これで内蔵フラッシュ・メモリからコンフィグレーションを行わないようになり,書き込みできない状態を回避できます.
MODE0, MODE1ピンはそれぞれ,基板裏面のパッドをショートすることにより,+3.3Vに接続できます(写真1).2つのうちのいずれかのパッドをショートすることにより,書き込めなくなったGowin RUNBERボードを再度,書き込みできる状態に戻せます.

● フラッシュの消去を行う
前述の通り,V1.2ではCH552T内で動くプログラムがUSB-JTAG変換処理を行っています.内蔵フラッシュ・メモリへの書き込みが失敗する原因は,GowinRUNBERの出荷時に書き込まれているプログラム(ファームウェア)では,フラッシュ・メモリ消去時に安定したTCKクロックを生成できないことです(図3).

これはTCKクロックの生成が8クロック単位で行われており,繰り返し呼ばれるデータ出力命令などのために,次のデータを出力するまでに時間がかかっていることが原因です.
Gowin Programmerでは,フラッシュ・メモリ消去時に固有のデータ出力命令を出力しています.今回この固有のデータを捕捉して,特定の処理に分岐するようにファームウェアを修正しました.これによってフ
ラッシュ・メモリ消去のためのTCKクロックをなんとか生成できるようになりました.また,修正後にフラッシュ・メモリ消去処理を行うと,書き込めなくなっていたボードに対して書き込みができるようになることを確認しています.
ただし,この修正を行った後も内蔵フラッシュ・メモリに対してコンフィグレーション・データの書き込みは行えません.これは,書き込み処理時にも消去と同様の安定したTCKクロック生成が必要なのですが,CH552TのCPUコアの性能などが原因となり,ファームウェアを修正してもFPGAが要求する信号を生成できないためです.
*  *  *
Gowin RUNBERボードを設計・製造しているメーカからも,ファームウェアの修正ではフラッシュ・メモリの書き込みを行えるようにすることは不可能との情報が得られました.筆者による解析結果と同じ結論です.現在,修正版のボードを設計中とのことです.また,既にボードを購入されたユーザへの対応は,設計完了後に何かしらの発表があると聞いています.

▪参考文献▪
(1) Gowin FPGA 製品プログラミング・コンフィギュレーショ
ン ユーザーガイド UG290J.
https://www.Gowinsemi.com/upload/database_doc/1130/document/615e89d772b10.pdf
(2) Gowin RUNBER Schematic.
https://files.seeedstudio.com/products/114992325/Runber_Development_Board_Schematics.pdf

いだ・けんた