FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Debian on RISC-V情報

f:id:msyksphinz:20160605215109p:plain

f:id:msyksphinz:20161108015851p:plain

Twitterで知ったのだが、Debian GNU/LinuxRISC-Vへの移植プロジェクトが進んでいるようだ。先日、メーリングリストが公開された。

上記のMLはまだ殆ど動作していないようだ。アーカイブを見ても全く書き込みが無い。

Debian on RISC-Vのwikiは、以下からアクセスできる。

RISC-V - Debian Wiki

現在の状況は、まだ殆ど進捗が無い。ほぼ個人で移植を進めているような状態なのかなあ。

2016-02-19 The preparations for this port started in private a while ago, but nothing has been made public so far and nothing useful yet for users and developers. The main reason is the lack of official support for this architecture in fundamental pieces of the toolchain (binutils, gcc, glibc), the main OS kernel (linux) or even other software that might help with the port (e.g. qemu). All of the mentioned pieces have support in progress and are considered to submit for upstreaming, but nothing definitive has happened at the moment. In particular, a recent message informed about some upcoming changes to the supervisor specifications (the ABI), which will affect binutils at least. Starting a Debian port without the ISA being settled is not very > good, since the effort will need to be restarted from scratch. It is expected that this situation will change soon (within few months) and that progress on this port can be started.

ツールチェインのサポートが無く、QEMUなどの環境が無いということだが、これは別にオフィシャルのものがあるし、関係無いんじゃないのかなあ? また、ABIの変更なども上げられているが、binutilsもそれに合わせて改変が進んでいる。むしろそっちを追い掛けていかないと、発展途上中のアーキテクチャに対応するのは大変だろう。

まだ未成熟のプロジェクトなので、何か成果があるまでウォッチしておきたい。というか、こういうプロジェクトに貢献できるだけどLinuxの技術力が欲しいよう。。。

FreeBSD on ZedBoardを試行(3. PreBuild Imageをブートしたがpackageのインストールで失敗)

前回、FreeBSD on ZedBoardの起動に成功したのだが、パッケージをビルドしようとすると詰まってしまった。

msyksphinz.hatenablog.com

msyksphinz.hatenablog.com

apacheをインストールしてサーバを立ち上げてみようと思ったのだが、no space left on deviceと言わてしまった。

root@zedboard:~ # pkg install apache24
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:11:armv6/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
pkg-static: Warning: Major OS version upgrade detected.  Running "pkg-static install -f pkg" recommended
Installing pkg-1.8.7_3...
Extracting pkg-1.8.7_3: 100%
pkg: Warning: Major OS version upgrade detected.  Running "pkg-static install -f pkg" recommended
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01
Fetching packagesite.txz: 100%    4 MiB   1.2MB/s    00:04
pid 651 (pkg), uid 0 inumber 5 on /tmp: filesystem full

/tmp: write failed, filesystem is full
pkg: archive_read_extract(extract error): No space left on device
pkg: No signature found
Unable to update repository FreeBSD
All repositories are up-to-date.
pkg: Repository FreeBSD cannot be opened. 'pkg update' required
Updating database digests format: 100%
pkg: No packages available to install matching 'apache24' have been found in the repositories

dfで確認してみたのだが、マウントする場所がおかしいのかな。SDカードは16GBのものを使っているので、容量が足りないことなど無いと思うのだが…

root@zedboard:~ # df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
/dev/mmcsd0s2a     14G    797M     12G     6%    /
devfs             1.0K    1.0K      0B   100%    /dev
/dev/mmcsd0s1      64M    1.0M     63M     2%    /boot/msdos
/dev/md0           29M     24K     26M     0%    /tmp
/dev/md1           14M     56K     13M     0%    /var/log
/dev/md2          4.4M    8.0K    4.0M     0%    /var/tmp

f:id:msyksphinz:20161107023346p:plain

f:id:msyksphinz:20161107023314p:plain

「ゼロから作るディープラーニング」を買った

しばらくAmazonで品切れになっていたのだけれども、ふと見ると紀伊国屋で1冊だけ在庫があって、さっそく注文したら2日くらい発送に時間がかかって、そうこうしている内にAmazonで在庫復活という得したのか分からない状態で入手した。

最初のPythonのあたりは読み飛すとして、中身はじっくり読み込まなければ。今から電車の中で頑張って読む。

f:id:msyksphinz:20161105180425p:plain

FreeBSD on ZedBoardを試行(2. PreBuild Imageをダウンロードして試行)

前回、途中でビルドの方法が分からず詰まってしまったので、既にビルドされているSDカード用イメージをダウンロードし書き込みを行い、ZedBoardでブートの試行を行ってみた。

msyksphinz.hatenablog.com

ZedBoard用FreeBSDのプレビルドバイナリ

ZedBoard用FreeBSDバイナリは、以下から入手できる。

FreeBSD on Xilinx Zynq-7000 / Zybo / Zedboard

An SD card image for the Zedboard based upon FreeBSD 11.0-RELEASE-p1 is available here: FreeBSD-armv6-11.0-ZEDBOARD-306420.img.bz2.

ということで、イメージファイルをそのままダウンロードし、解凍した。

SDカードへの書き込みはWindowsから実施し、ツールはWin32DiskImagerというものを利用した。

ja.osdn.net

ダウンロードしたイメージファイルを、SDカードに書き込む。なお、実行には管理者権限が必要だ。

f:id:msyksphinz:20161105113431p:plain

では、このSDカードをZedBoardに差し込み、ZedBoardを起動させてみる。TeraTermが実行の様子を監視し、通信速度は115200を指定した。

f:id:msyksphinz:20161105113609p:plain

うまく起動したようだ。rootでログインできる。

f:id:msyksphinz:20161105113114p:plain

LANケーブルを接続しているため、pingも実行可能だ。おもしろいな。これを使っていろいろ遊べそうだ(その前にきちんと自分でイメージをビルドする方法を確立しなければ...)

f:id:msyksphinz:20161105113732p:plain

ZedBoard向けFreeBSDのビルド試行

https://www.freebsd.org/logo/logo-full-thumb.png

ZedBoard向けにFreeBSDをビルドすることができるらしい。つまり、ZynqのARM用にFreeBSDをビルドすることができるということか。

これまでいろいろ試行していたのは、RISC-V向けのFreeBSDのビルドだ。だが、FreeBSDをZynqのARMで動作させることができれば、これも面白いかもしれない。

FreeBSD/arm/Zedboard - FreeBSD Wiki

ZedBoard向けのFreeBSDビルド

とりあえずまずはgithubからFreeBSDのソースをチェックアウトしてきた。

github.com

git clone https://github.com/freebsd/freebsd.git

そのまま、ビルドする。

make TARGET_ARCH=armv6 KERNCONF=ZEDBOARD buildworld buildkernel

およそ3時間程度、やっとビルドが終了した。今日はここで時間切れ...

ctfconvert -L VERSION -g zlib.o
ld -d -warn-common -r -d -o zlib.kld zlib.o
ctfmerge -L VERSION -g -o zlib.kld zlib.o
:> export_syms
awk -f /home/vagrant/freebsd/sys/conf/kmod_syms.awk zlib.kld  export_syms | xargs -J% objcopy % zlib.kld
ld -Bshareable -d -warn-common -o zlib.ko.full zlib.kld
objcopy --only-keep-debug zlib.ko.full zlib.ko.debug
objcopy --strip-debug --add-gnu-debuglink=zlib.ko.debug  zlib.ko.full zlib.ko
--------------------------------------------------------------
>>> Kernel build for ZEDBOARD completed on Thu Nov  3 14:36:50 UTC 2016
--------------------------------------------------------------

u-boot.img と boot.bin のビルド

解説に書いてあるとおり、最初にXilinxのu-bootのリポジトリをダウンロードして、いくつか書き換える必要がある。

git clone https://github.com/Xilinx/u-boot-xlnx.git
curl https://raw.githubusercontent.com/Xilinx/embeddedsw/master/lib/sw_apps/zynq_fsbl/misc/zed/ps7_init.c -o u-boot-xlnx/board/xilinx/zynq/ps7_init.c
curl https://raw.githubusercontent.com/Xilinx/embeddedsw/master/lib/sw_apps/zynq_fsbl/misc/zed/ps7_init.h -o u-boot-xlnx/board/xilinx/zynq/ps7_init.h
sudo pkg install -y arm-none-eabi-binutils-2.27_4,1 arm-none-eabi-gcc-5.3.0_1 arm-none-eabi-gdb-7.10_4
gmake CROSS_COMPILE=arm-none-eabi- distclean
gmake CROSS_COMPILE=arm-none-eabi- zynq_zed_config
gmake CROSS_COMPILE=arm-none-eabi- HOSTCC=cc

で、ここから先?Building ubldr のところから、ディレクトリも無いしmakeもうまく行かないので詰まってしまった。

FreeBSDの慣習に慣れていないからかしら?良く分からない。

RISC-V BOOMプロセッサのRTLシミュレーションを実行(VCS用プロジェクトで試行)

前回は、Verilator用の生成ファイルおよび環境を移植して、VeritakでのRTLシミュレーションを試行しようとしたが、シミュレーションが始まらず失敗したのだった。

いろいろ調査していると、Verilator用だけでなく、SynopsysのRTLシミュレータであるVCSでのシミュレーション環境も用意されていた。 こちらを使うと、Veritakでもシミュレーションできるかもしれない。試行してみよう。

VCS用の環境を構築する

Rocket-Chipの環境には、vsimというVCS用のシミュレーション構築環境がある。ここでmakeを叩けば、VCS用のプロジェクトファイルが構築され、VCSがインストールされている環境ならばシミュレーションがスタートする。

cd rocket-chip/vsim
make CONFIG=BOOMConfig

mkdir -p /home/vagrant/rocket-chip/vsim/generated-src/
cd /home/vagrant/rocket-chip && java -Xmx2G -Xss8M -XX:MaxPermSize=256M -jar /home/vagrant/rocket-chip/sbt-launch.jar "run-main rocketchip.Generator /home/vagrant/rocket-chip/vsim/generated-src rocketchip TestHarness rocketchip BOOMConfig"
[info] Loading project definition from /home/vagrant/rocket-chip/project
...

vcs -full64 -notice -line +lint=all,noVCDE,noONGS,noUI -error=PCWM-L -timescale=1ns/10ps -quiet +rad +v2k +vcs+lic+wait +vc+list -CC "-I/include" -CC "-I/home/vagrant/riscv//include" -CC "-std=c++11" -CC "-Wl,-rpath,/home/vagrant/riscv//lib" -CC "-include /home/vagrant/rocket-chip/vsim/generated-src/consts.BOOMConfig.h" /home/vagrant/riscv//lib/libfesvr.so -sverilog +incdir+/home/vagrant/rocket-chip/vsim/generated-src +define+CLOCK_PERIOD=1.0 \
/home/vagrant/rocket-chip/vsim/generated-src/rocketchip.BOOMConfig.v \
/home/vagrant/rocket-chip/vsim/generated-src/rocketchip.BOOMConfig.behav_srams.v \
/home/vagrant/rocket-chip/vsim/generated-src/consts.BOOMConfig.vh \
/home/vagrant/rocket-chip/vsrc/TestDriver.v \
/home/vagrant/rocket-chip/vsrc/SimDTM.v \
/home/vagrant/rocket-chip/vsrc/DebugTransportModuleJtag.v \
/home/vagrant/rocket-chip/vsrc/jtag_vpi.v \
/home/vagrant/rocket-chip/vsrc/AsyncResetReg.v \
/home/vagrant/rocket-chip/csrc/SimDTM.cc \
/home/vagrant/rocket-chip/csrc/jtag_vpi.c \
+define+PRINTF_COND=TestDriver.printf_cond +define+STOP_COND=!TestDriver.reset +define+RANDOMIZE_MEM_INIT +define+RANDOMIZE_REG_INIT +define+RANDOMIZE_GARBAGE_ASSIGN +define+RANDOMIZE_INVALID_ASSIGN +libext+.v  +vpi -P /home/vagrant/rocket-chip/vsrc/jtag_vpi.tab -CC "-DVCS_VPI" -o ./simv-rocketchip-BOOMConfig

僕の環境にはVCSはインストールされていないので(ってか個人で持っている人なんていないと思うが)、ここまでで動作は終了だ。だが、必要なファイル群や定義などの情報は取得することができた。 これをVeritakに移植してみる。

f:id:msyksphinz:20161103002949p:plain

最上位のテストベンチは、TestDriver.v だ。昨日のブログにも紹介したとおり、コンパイルを通すためにいくつかVerilogファイルを変更する必要があるが、それほど大した話ではない。

ただし、これでもまだシミュレーションを動作させることは出来なかった。具体的には、コンパイルまでは通るのだけど、何故かシミュレーションの時間が経過しない。何でだろう?謎だ。

はてなブログ5周年ありがとうキャンペーンお題第1弾「はてなブロガーに5つの質問」

オリジナルボールペン&ミニノートほしいにゃー。

はてなブログ5周年ありがとうキャンペーンお題第1弾「はてなブロガーに5つの質問」

1.はてなブログを始めたきっかけは何ですか?

何かしら情報発信をしたくて。技術的な情報は、もちろん自分で勉強することも大切だけど、勉強したことを他人に説明することは、さらに勉強になる。

高校生の頃とか、頭の良い人って、自分で勉強もするのだけど、他の人にいろいろ教えてって言われるもんだから、人に説明するためにきちんと理解しておかなければらない。この結果自分の理解に磨きかがかり、より成績が良くなる訳だ。 こういるフィードバックループって大事だと思う。人に教える、自分の勉強したことを文章に纏めることは、とても大事だと思う。

2.ブログ名の由来を教えて!

いろいろ考えたけど、"FPGA"という言葉を入れるのは良かったのかなー、と少し思っている。だってこのブログ、殆どFPGAのことを喋っていないので。

いろんなことを書くと思うけど、大概のことはハードウェアの話だし、個人でハードウェアを触るといったら、一番手っ取り早いのはFPGAだ。だから、FPGAという名前を入れてみた。

3.自分のブログで一番オススメの記事

やっぱりこれかな。

msyksphinz.hatenablog.com

はてなブログを始めて、一番最初に書いた記事。RISC-Vで検索すると公式サイトの次に引っ掛かる。RISC-Vについてまとめた、僕のはてなブログを始めた最初のエントリだ。

4.はてなブログを書いていて良かったこと・気づいたこと

やはり、いろんな人に意見を貰えるとうれしいし、Twitterとかでブログ記事に対していいねがもらえるとうれしい。 もっといろんな人に見てもらって、辛辣な意見も含めいろんな人の意見や、教示を賜わりたい。それが、一番の勉強だから。

5.はてなブログに一言

いろんなブログサービスがあるけれども、はてなブログは何だかんだで書きやすいし、テーマもセンスが良いものが多いと思う。

これからも、面白いサービスを期待してますよ。

http://blog.hatena.ne.jp/-/campaign/hatenablog-5th-anniversary