Ryuz's tech blog

FPGAなどの技術ブログ

Windows版 GOWIN EDA を WSL2のコマンドラインから使う工夫とか

はじめに

GOWIN の FPGA は低価格で買えるものも多いため、夏休みの自由研究的に使う方も多いのではないでしょうか?

GOWIN EDA はユーザー登録を行って、ライセンスファイルを発行してもらわないと使う事が出来ません。 私は、USBを繋いでプログラムを行ったり、埋め込みロジアナ(Gowin Analyzer Oscilloscope)を使うことなどと、WSL2内のMACアドレスが固定されないことなどを考慮して、あまり深く考えずに WindowsMACアドレスでライセンスを申請してしまいました。

一方で、普段の開発は殆ど WSL2 で、しかも極力コマンドラインで済ませようとする派です。

そこで前々から WSL2 から Windows版 の GOWIN EDA を使う工夫をいくつか行っていましたので、一度整理しておこうと思います。

どこかに書いておかないと、主に自分が困るというのが一番の理由ですが(笑)

WSL から Windows 版のコマンドを呼び出せるようにする

コマンドライン派の方が一番よく使うコマンドは gw_sh かと思います。

そこで下記のようなスクリプトを作って、パスの通ったところ(例えば ~/.local/bin とか)に投げ込みます。

#!/usr/bin/bash
/mnt/c/Gowin/Gowin_V1.9.11.03_x64/IDE/bin/gw_sh.exe $@

これで WSL の中から gw_sh コマンドが使えるようになります。alias とかでもいいかもしれません。 もうちょっと頑張れば、環境変数でバージョンを切り替えたりもできそうな気がします。

次に、programmer_cli も同じように使おうとしたのですが、どういうわけか、こちらはディレクトリを移動しないとうまく動いてくれませんでした。

#!/usr/bin/bash
cd /mnt/c/Gowin/Gowin_V1.9.11.03_x64/Programmer/bin/
./programmer_cli.exe $@

上記のままだと、fs ファイルは絶対パスでしてしないといけません。

私は Makefile の中から programmer_cli を呼んでいたので

run_wsl: $(FS_FILE)
    programmer_cli --device GW5AST-138C --run 2 --fsFile '$(shell wslpath -w $(FS_FILE))' --location 11585

のような wslpathWindowsから見た絶対パス に変換してから呼び出すようにしました。

openFPGAloader

zadig によるデバイスドライバの入れ替えが必要なので、GOWIN の programmer と共存できませんが、openFPGAloader も良く使います。

こちらも、USB は Windows 側のまま使う方が楽であるため、Windows版のopenFPGAloader を使う事も多いです。

手っ取り早くはこちら のものをインストールすることなのですが、私は Tang Mega 138K Pro Dock を使うときにより新しいバージョンが必要となってしまい msys2 をインストールして pacman でインストールしました。

当時の入れ方を忘れてしまったのですが、今 Gemini さんに聞くと

pacman -Syu
pacman -S git make mingw-w64-x86_64-gcc mingw-w64-x86_64-libusb

で入るようです。

そして、また同様に WSL2 で

#!/usr/bin/bash
/mnt/c/msys64/mingw64/bin/openFPGALoader.exe $@

というファイルを作りました。

コマンドラインでプロジェクトをビルド

プロジェクトのビルドもコマンドラインだけでやりたくなります。

gw_sh に tcl スクリプトを渡せば、ある程度コントロールできるようです。

私は Makefile から環境変数経由で tcl スクリプトに値を渡して合成するために gowin_build.tclいうファイルを作りました。

使い方はこちらの Makefile などにありますが、WSL2 の場合は WSLENV という環境変数を用意しておけば、WSL から Windows 版の gw_sh に環境変数が渡せます。

絶対パス相対パスに変換

GOWIN EDA を使っていると IP を生成したり、Analyzer Oscilloscope を設定したりするのに、GUI 版のプロジェクトの作成も避けられません。

幸い、WLS のディスク領域(\\wsl.localhost で始まるパス)にプロジェクトを作っても Windows 版の EDA は問題な開いてくれます。

しかしながらプロジェクトファイル内でプロジェクトの外のディレクトリを参照するとファイルのパスが絶対パスになってしまうようです。

私は、いろいろな RTL を異なるプロジェクトで使いまわす関係上、プロジェクトの外のパスを多用しています。

一方で、プロジェクトのなかのソースファイルが埋まっている .gprj ファイルは XML 形式のようです。

そこで、中の絶対パス相対パスに書き換えるツールを AI に作ってもらったのが こちら になります。

この手のものは、日本語で指示するだけで AI が一瞬で作ってくれるので、ホント凄い時代になったものです。

試したところ、開くだけなら問題なく開ける(保存するとまた絶対パスに戻る)ようですので、git commit 前に相対パスにしておけば、別の場所で clone しても大丈夫になりそうです。

おわりに

以上、どこかにメモを書いた気もするのですが検索しても出てこないので、ここにノウハウを纏めておきます。 割と行き当たりばったりで整備してきたので、「もっといい方法あるよ」というのはいろいろご意見ありそうには思いますが。

なお、今更ですが、申請すればフローティングライセンスももらえるという噂を聞きました(笑)。 ただし、仮にそうだとしても「FLEXlm などの設定が面倒」という理由も発生しそうですので、きっと少しは需要がある事でしょう。