To content | To menu | To search

antonblanchard/microwatt を動かした

OpenPOWER ISA を実装した antonblanchard/microwatt を動かした話。

ただ、Python のライブラリの依存関係がうまく解消できなかったので、OS にインストール済みの Python 関係のパッケージを一旦全部削除、という乱暴なことをしているので、この手順の実用性はいまいちかもしれない。

2019/Oct/28 追記:この点については Pipenv を使えばいいらしい。

あと、本来は bit ファイルのロードも自動でされるはずが、仮想マシンで行っているためか、デバイスが検出できなかったため途中でとまる。手動でロードすれば動作する。

antonblanchard/microwatt を github から取得したのは 2019/Oct/10 。
OS は Xubuntu 18.04 と Ubuntu 18.04 server を使った。Windows 上の VirtualBox 内にインストール。メモリは 4GB 割り当て。ストレージは Vivado を入れるので 100GB 確保。

ここではアカウントは user でセットアップしている。

先に /etc/resolv.conf を編集して nameserver にルーターなり DNS なり登録しておかないといけないと思う。

何はなくとも OS アップデート。

$ sudo apt update
$ sudo apt upgrade

Xubuntu なら SSH サーバーも起動。

$ sudo apt install -y openssh-server
$ sudo systemctl enable ssh
$ sudo systemctl restart ssh

必要なパッケージを取ってくる

$ sudo apt install build-essential git make gnat zlib1g-dev texinfo curl

Python のパッケージが、OS が提供するパッケージと pip で入れるパッケージで衝突して面倒だったので、OS のを削除。これでいいかは分からない。本当は Python3 本体は残しても良かったんだけど、消された。Python3 に依存しているその他のものも消されてしまう。

$ sudo dpkg -l | gawk '{print $2}' | grep -E "^python3-" | xargs sudo apt remove -y

Python3 関係を少しだけ入れ直す。

$ sudo apt install python3 python3-distutils
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo python3 get-pip.py

Xubuntu では Python2 も入っている。これも削除したけれど、きっとシステムに影響がある。

If it isn't available on your distro grab the powerpc64le-power8 toolchain from https://toolchains.bootlin.com

とあるので、リンク先からツールチェインを取得。
microwatt_1.png, Oct 2019

~/download/ にダウンロードした場合で。展開してパスを通しておく。

$ tar jvxf ./download/powerpc64le-power8--glibc--stable-2018.11-1.tar.bz2
$ export PATH="$PATH:/home/user/powerpc64le-power8--glibc--stable-2018.11-1/bin"

Build micropython. If you aren't building on a ppc64le box you will need a cross compiler.

とあるので、書かれているとおり micropython をビルドする。

$ git clone https://github.com/mikey/micropython
$ cd micropython
$ git checkout powerpc
$ cd ports/powerpc
$ make -j$(nproc)
$ cd ../../../

Microwatt uses ghdl for simulation. Either install this from your distro or build it.

とあるので GHDL をビルドしてインストールする。ここでは書かれていないけれど、GHDL は GCC backend のものが必要らしい。そのためには gcc のソースが必要。
この環境では gcc は 7.4.0 だったので、念のため gcc のソースも https://ftp.gnu.org/gnu/gcc/ ここから gcc-7.4.0.tar.gz をダウンロード。

$ tar zvxf ./download/gcc-7.4.0.tar.gz

GHDL のドキュメント の Hint にあるとおり、依存関係はスクリプトにお任せ。

$ cd gcc-7.4.0
$ ./contrib/download_prerequisites
$ cd ..

で本番。だいたいドキュメントどおり。

$ git clone https://github.com/ghdl/ghdl
$ cd ghdl
$ mkdir build
$ cd build
$ ../configure --with-gcc=/home/user/gcc-7.4.0 --prefix=/usr/local
$ make copy-sources
$ mkdir gcc-objs
$ cd gcc-objs
$ /home/user/gcc-7.4.0/configure --prefix=/usr/local --enable-languages=c,vhdl --disable-bootstrap --disable-lto --disable-multilib --disable-libssp --disable-libgomp --disable-libquadmath
$ make -j$(nproc)
$ sudo make install

念のため起動するかチェック。

$ ghdl -v

続き。

$ cd ..
$ make ghdllib
$ sudo make install
$ cd ~

これでやっと microwatt に進める。

$ git clone https://github.com/antonblanchard/microwatt
$ cd microwatt
$ make
$ ln -s ../micropython/ports/powerpc/build/firmware.bin simple_ram_behavioural.bin

で、シミュレーション?

$ ./core_tb > /dev/null
MicroPython v1.11-320-g7747411e9 on 2019-10-11; bare-metal with POWERPC
Type "help()" for more information.
>>> 1+2
3
>>> Terminated

ここで、/dev/null にちゃんとリダイレクトしておかないとよくわからないことになる。
1+2 はユーザー入力。しばらくすると 3 が返ってくる。
Ctrl+C や Ctrl+D がどうにも効かなかったので、他の端末を開いて、

$ pkill core_tb

終了させると Terminated になる。

順番を入れ替えて、先に FuseSoC を入れる。

$ sudo pip install fusesoc

Vivado を入れる。リポジトリのドキュメントに合わせて、2019.1 を入れる。
Vivado のセットアップは GUI が必要で、Ubuntu server 側は Windows に Xming を入れて対応。
C:\Program Files (x86)\Xming\X0.hosts に Ubuntu server の IP アドレスをセットして、

$ export DISPLAY=WindowsマシンのIPアドレス:0.0
$ sudo apt install libxrender-dev libxtst-dev

でセットアップ。

$ tar zvxf ./download/Xilinx_Vivado_SDK_2019.1_0524_1430.tar.gz
$ cd Xilinx_Vivado_SDK_2019.1_0524_1430
$ sudo ./xsetup

今回は無償で利用できる WebPACK を選択。
microwatt_2.png, Oct 2019

デバイス選択は、ひとまずありそうなものに絞ってみた。
microwatt_3.png, Oct 2019

最終的な設定はこんな感じ。
microwatt_4.png, Oct 2019

上の画像のとおりに UG973 を参考にケーブルドライバをインストールする。

$ cd /tools/Xilinx/Vivado/2019.1/data/xicom/cable_drivers/lin64/install_script/install_drivers/
$ sudo ./install_drivers
INFO: Installing cable drivers.
INFO: Script name = ./install_drivers
INFO: HostName = microwatt-u
INFO: Current working dir = /tools/Xilinx/Vivado/2019.1/data/xicom/cable_drivers/lin64/install_script/install_drivers
INFO: Kernel version = 4.15.0-65-generic.
INFO: Arch = x86_64.
Successfully installed Digilent Cable Drivers
--File /etc/udev/rules.d/52-xilinx-ftdi-usb.rules does not exist.
--File version of /etc/udev/rules.d/52-xilinx-ftdi-usb.rules = 0000.
--Updating rules file.
--File /etc/udev/rules.d/52-xilinx-pcusb.rules does not exist.
--File version of /etc/udev/rules.d/52-xilinx-pcusb.rules = 0000.
--Updating rules file.

INFO: Digilent Return code = 0
INFO: Xilinx Return code = 0
INFO: Xilinx FTDI Return code = 0
INFO: Return code = 0
INFO: Driver installation successful.
CRITICAL WARNING: Cable(s) on the system must be unplugged then plugged back in order for the driver scripts to update the cables.

ここでボードを接続しておこう。Nexys Video なら PROG と UART をつなぎ、JP4 は USB/SD、JP3 は USB にして電源を入れる。
VirtualBox の Device → USB で Digilent USB Device と FTDI FT232R USB UART を有効にする。

セットアップが終わったら続き。

$ cd ~
$ source /tools/Xilinx/Vivado/2019.1/settings64.sh
$ mkdir microwatt-fusesoc
$ cd microwatt-fusesoc
$ fusesoc library add microwatt /home/user/microwatt/
$ fusesoc run --target=nexys_video microwatt --memory_size=8192 --ram_init_file=/home/user/microwatt/fpga/hello_world.hex

ただ、エラーになってしまった。デバイスが検出できないらしい。

****** Vivado v2019.1.3 (64-bit)
  **** SW Build 2644227 on Wed Sep  4 09:44:18 MDT 2019
  **** IP Build 2633630 on Wed Sep  4 12:30:14 MDT 2019
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

source microwatt_0_pgm.tcl
# set bit microwatt_0.bit
# set part xc7a200tsbg484-1
# open_hw
# connect_hw_server
INFO: [Labtools 27-2285] Connecting to hw_server url TCP:localhost:3121
INFO: [Labtools 27-2222] Launching hw_server...
INFO: [Labtools 27-2221] Launch Output:

****** Xilinx hw_server v2019.1.3
  **** Build date : Sep  4 2019 at 10:02:20
    ** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.


# set found 0
# foreach { hw_target } [get_hw_targets] {
#     current_hw_target $hw_target
#     open_hw_target
#     foreach { hw_device } [get_hw_devices] {
#       if { [string first [get_property PART $hw_device] $part] == 0 } {
#           puts "Found hardware target with a ${part} device."
#           current_hw_device $hw_device
#           set found 1
#           break
#       }
#     }
#     if {$found} {break}
#     close_hw_target
# }
INFO: [Labtoolstcl 44-466] Opening hw_target localhost:3121/xilinx_tcf/Digilent/210276689791
ERROR: [Labtools 27-2269] No devices detected on target localhost:3121/xilinx_tcf/Digilent/210276689791.
Check cable connectivity and that the target board is powered up then
use the disconnect_hw_server and connect_hw_server to re-register this hardware target.
ERROR: [Common 17-39] 'open_hw_target' failed due to earlier errors.

    while executing
"open_hw_target"
    ("foreach" body line 3)
    invoked from within
"foreach { hw_target } [get_hw_targets] {
    current_hw_target $hw_target
    open_hw_target
    foreach { hw_device } [get_hw_devices] {
        if { [strin..."
    (file "microwatt_0_pgm.tcl" line 11)
INFO: [Common 17-206] Exiting Vivado at Fri Oct 11 04:23:51 2019...
ERROR: Failed to run ::microwatt:0 : 'vivado' exited with an error code

vivado を起動して Hardware Manager を使っても1回目はデバイスが検出できなかったものの、もう一度トライしたら検出できた。ただスクリプトをもう一度動かしてもだめだった。

bit ファイルは build/microwatt_0/nexys_video-vivado/microwatt_0.bit として出力はされているので、これをロードすればどうさする、はず。ただ hello world は見えなかった。

micropython の方は動作が見える。

$ fusesoc run --target=nexys_video microwatt

相変わらず bit ファイルのロードはしてくれないものの、さっきと同じファイル名で出力されているので、vivado を起動してロードできる。

シリアルコンソールは例えば screen が使える。ここではシリアルポートは /dev/ttyUSB2 だった。

$ sudo screen /dev/ttyUSB2 115200
(Enter キーを押すとプロンプトがでてくる)
>>>
>>> 1+2
3

終了するときは、例えば Ctrl+a のあと k で kill できる。

Testing

一応、

$ cd ~/microwatt
$ make -j$(nproc) check

で実行できるらしい。ただ実機は使ってない模様。

Add a comment

HTML code is displayed as text and web addresses are automatically converted.

They posted on the same topic

Trackback URL : https://www.pseudomoon.jp/dotclear/index.php?trackback/101

This post's comments feed