Gowin EDAをM2 Macで動かす ver.3

Gowin EDAをM2 Macで動かそうの企画第二弾です。今回はDockerを使っていきたいと思います。Dockerを使うことでGowin EDAをGUIで操作することができるようになりました!

主に使った技術が以下になります。
- Docker
- Docker Desktop for Mac
- Rosetta 2
- X11

Gowin EDAはLinuxかWindowsでしか動かないので、OSを用意する必要があります。また、アーキテクチャもx86-64でしか動かないので、ArmであるM2ではエミュレータを用いる必要があります。そこで今回はOSとしてUbuntuのDockerイメージを使用し、エミュレータはRosetta 2を使用することで、Gowin EDAを動かせるようにしました。

Docker Desktop for Mac側で"Use Rosetta for x86/amd64 emulation on Apple Silicon"という項目にチェックを入れておき、M2 Mac側でRosetta 2を使用できるようにしておくと、x86アーキテクチャ用のDockerイメージを使用してコンテナを作成する際に勝手にRosetta 2を使用してくれるそうです。しかし、arm、x86両方に対応している場合、デフォルトではホストマシンの環境が指定されます。つまり、M2マックで何も指定せずにUbuntuのDockerイメージを使用してDockerコンテナを作成すると、作成されたコンテナでのアーキテクチャはarmになってしまいます。これはコンテナ作成時に以下のように --platformオプションをつけてDockerイメージが対応している中で任意のアーキテクチャを指定することで回避できます。

docker run --platform linux/amd64 --name ubuntu-x86 ubuntu:latest

これでx86アーキテクチャで動くUbuntuのDockerコンテナを作成することができました。
ようやくGowin EDAをダウンロードしてきて使えるかと思いきや、以下のようにX serverに接続できないというエラーが出ます。

root@5def3f6b9842:/gowin/IDE/bin# ./gw_ide
gw_ide: cannot connect to X server /private/tmp/com.apple.launchd.dRwq7Akxzk/org.xquartz:0

DockerコンテナではデフォルトではX serverに接続できないぽいです。そこでDockerコンテナ側からX serverにアクセスできるようにホスト側とコンテナ作成時に設定する必要があります。
ホストマシン側のXquartzの設定で"Allow connections from network clients."にチェックを入れてネットワークからの接続を許可します。(これはセキュリティ上あんまりやらない方がいいらしい、、、?)
そしてゲスト側、つまりDockerコンテナを作成するときに以下のオプションを指定します。

ip=$(ifconfig en0 | grep inet | awk '$1=="inet" {print $2}')
xhost + $ip
docker run -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-unix:ro --platform linux/amd64 ubuntu:latest

これでGowin EDAを操作できるようになりました。

FPGAに直接書き込みするためにDockerコンテナにusbを認識させたかったのですが、あんまり上手くいかなかったので、ホストマシンのディレクトリをマウントしておくことでホストマシン、ゲストマシン間のファイル共有をスムーズにすることにしました。また、データが永続化されるのも嬉しいです。これもコンテナ作成時に-v オプションを指定することで実現できるみたいです。

docker run -e DISPLAY=$ip:0 -v /tmp/.X11-unix:/tmp/.X11-unix:ro -it --platform linux/amd64 -v /Users/kohshi54/FPGA:/shared --name ubuntu-x86 ubuntu:latest


左側がDockerコンテナ側、右側がマウントされたディレクトリをホスト側で
開き、FPGAに書き込んでいます。

できた!

これでコンテナが削除されてもデータが残る上に、ホストマシン側でマウントされたディレクトリをVSCodeで開いて編集、DockerコンテナのGowin EDAに使用するということも可能になります。また、仮想環境上で論理合成し、ピン配置してできたfsファイルをFPGAに書き込む際に毎回ホストマシンにコピーしてこずとも使えることが何気にとても楽になった気がします。
それに加えて、UTMやVirtualBoxでエミュレータを用いるよりも格段にスムーズに動いて感動しました。
今回なんとかGowin EDAをM2 MacBook Airという本来Gowin EDAの動作がサポートされている環境とOSもアーキテクチャも違うマシンで動くようにできたことでOSが違うバイナリの解釈の仕方が違って動かないといった知識としては知っていたことを実感することができ、コンピュータアーキテクチャへの理解が深まった気がします。

よかった。

この記事が気に入ったらサポートをしてみませんか?