MAX10のコンフィグをシリアルUARTで書き換える [FPGA]

MAX10のデュアルコンフィグ機能を使って内蔵フラッシュを書き換えるツールをリリースしました。
 → MAX10 Serial Config Updater

Githubリポジトリ
 → max10_config_updater


・仕掛けの解説

MAX10のCFM0にブートローダとなるQsysモジュールを書き込んでおき、CONFIG_SEL='0' でまずこのイメージがブートされる。
ブートローダのQsysはPERIDOTのコンフィグレーション層(のエミュレーション)とAvalonMMブリッジを内蔵していて、これでQsysのシステムIDやチップユニークIDの読み出し、内蔵フラッシュの読み書き、デュアルブートコアのアクセスなどを行う。
ホストPCからはASモードに設定された(FPGAコンフィグ機能が使えない)PERIDOTの派生ボードとして見えているので、Canarium.jsのavmメソッドで内部アクセスができる。

MAX10の内蔵フラッシュペリフェラルはAvalonMMスレーブとしてメモリアドレスにマップされている。フラッシュ書き込みの待ち時間もAvalonMMのwaitrequestでハード的に行われるので、Canarium.jsからは単にメモリ領域の読み書きを行っているだけで済んでいる。
コンフィグレーションデータは32ビット単位でビット順を入れ替える必要があるものの、こういうのはChromeアプリ側でやってしまえるので、ハードウェア側で特別に対応する必要はない。

欠点としてはデュアルコンフィグをベースとするので、M9Kの初期値が使えない、CONFIG_SELピンがI/Oとして使えない&外部からH/Lを選択できないといけない、CFMをユーザー領域に使えない、などがある。

あと、一番最初のブートローダーを書き込むのにはUSB-Blasterが必要、というのは変わらないので、ここはなんとかしたい。ので、今はブートローダー書き込み済みのボードを販売できるよう準備を進めているところ。
チップ単品売りも考えてはいるけど、これは手間とか管理コストがかかるので、どこかしら代理店になってくれるとこがあれば。

CZPMPLwWYAAA0oW.jpg
Chromebookからも使えます。