読者です 読者をやめる 読者になる 読者になる

FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

ZedBoard向けUbuntu Linuxのビルド(VivadoによるPLの作成)

ZedBoardを使ってARM上でUbuntu Linuxを動作させたい。数年前に FPGAの部屋のmarseeさんによって既に実現されているのだが、同じ過程を辿ろうとすると、当該記事ではPlatform BuilderとPlanAheadが使われており、現在のVivadoの環境では使えないことが分かった。

FPGAの部屋 ZedBoard用のUbuntu Linuxをビルド1(PLをビルド)

さらにオリジナル記事はこちら。

fpgacpu.wordpress.com

そこで、Vivadoの環境でもUbuntu Linuxをビルドできる方法を調査していこう。一番ネックになるのは、おそらくPlatform StudioとPlanAheadで構築していた場所をどのようにしてVivadoに移植するか、というところだと思われる。

いろいろ調べた結果、PLデザインのベースになっているADIのリファレンスHDLおよびプロジェクトが、Vivadoに既に移植されており、これを使えばうまく行きそうな雰囲気がしてきた。

1. ADIのプロジェクトをgithubからダウンロードする

ADIのFPGAボード向けのプロジェクトは、既にgithub上に公開されている。これらをダウンロードして、Vivadoでビルドすれば良い。 今回は、Programmable Logic(PL)とLinuxのビルドを同一環境で実行したいため、全てVagrant上のUbuntuで環境を構築した。 ちなみに、Vagrantは基本的にCUIでの環境を提供しているが、GUIを使いたいとき(というか、Vivadoは基本的にGUIが無いとデザインが確認できないので)は、僕はMobaXtermというツールを使っている。

mobaxterm.mobatek.net

あまり人様の作ったツールに対してケチを付けるつもりは無いのだが、このMobaXtermというツールはお世辞にも実用に耐えれるかというとそうではない。 実際、重要な作業中に何度かXを落とされてしまっているので、仕事では使わないようにしている。趣味でも、最低限のレイアウトの確認とかでXを立ち上げるときは使うけど、それ以外ではCUIで事を済ませるようにしている。

話は戻って、まずはADIのプロジェクトをダウンロードする。

github.com

tree -L 1
.
├── library
├── LICENSE
├── Makefile
├── projects
└── README.md

2 directories, 3 files

このリポジトリは、良く見てみると複数のブランチが存在し、ちゃんと自分の環境に合ったブランチを指定しないとライブラリの生成でコける。僕もこの環境に合わせるために、ADIがサポートしている最新であるVivado 2015.2.1をダウンロードしてインストールする必要があった。

git branch -a
* hdl_2015_r2
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/axi_dmac_sg
  remotes/origin/dev
  remotes/origin/dev_ad7616
  remotes/origin/hdl_2014_r1
  remotes/origin/hdl_2014_r2
  remotes/origin/hdl_2015_r1
  remotes/origin/hdl_2015_r2
  remotes/origin/master

ちなみに、2015_r2ブランチのページには「Vivado 2015.2.1」と書いてあるので、きちんと「2015.2.1」をインストールする必要があるので注意すること。 (2015.2だと、ライブラリのビルド時にバージョンが合わないとエラーが出る)。

git clone https://github.com/analogdevicesinc/hdl.git
cd hdl
git checkout hdl_2015_r2

2. ライブラリのビルド

ADIのページには、まずはライブラリをビルドを必要があるらしい。

ADI Reference Designs HDL User Guide [Analog Devices Wiki]

f:id:msyksphinz:20160225224403p:plain

どうやら、これらのIPのビルドをしなければならない。ZedBoardの場合はADV7511?そして必要なIPはこのあたりだろうか?

f:id:msyksphinz:20160225224513p:plain

このために、それぞれGUIを立ち上げてtclを走らせるのは面倒だ。tclを作成して、ライブラリ作成を自動化する。

  • build_zed.tcl
cd ./hdl/library/axi_clkgen/
source axi_clkgen_ip.tcl
close_project

cd ../../../hdl/library/axi_hdmi_tx
source axi_hdmi_tx_ip.tcl
close_project

cd ../../../hdl/library/axi_hdmi_rx
source axi_hdmi_rx_ip.tcl
close_project

cd ../../../hdl/library/axi_spdif_tx
source axi_spdif_tx_ip.tcl
close_project

cd ../../../hdl/library/axi_i2s_adi/
source axi_i2s_adi_ip.tcl
close_project

cd ../../../hdl/library/util_i2c_mixer/
source util_i2c_mixer_ip.tcl
close_project

以下で必要なライブラリをビルドする。

vivado -mode batch -source ./build_zed.tcl

3. ZynqのPL部をビルドする。

これは、上記のリポジトリのprojectディレクトリに格納されている。 ZedBoardのプロジェクトは以下に格納されている。また、Makefileも格納されているので、すぐにビルドできる。

cd ./hdl/projects/adv7511/zed
make

無事にコンパイルできたようだ。

$ make
#-----------------------------------------------------------
# Vivado v2015.2.1 (64-bit)
# SW Build 1302555 on Wed Aug  5 13:06:02 MDT 2015
# IP Build 1291990 on Mon Jul 27 03:18:52 MDT 2015
# Start of session at: Thu Feb 25 13:03:41 2016
# Process ID: 8865
# Log file: /home/vagrant/download/hdl/projects/adv7511/zed/vivado.log
# Journal file: /home/vagrant/download/hdl/projects/adv7511/zed/vivado.jou
#-----------------------------------------------------------
start_gui
source system_project.tcl
# source ../../scripts/adi_env.tcl
## set ad_hdl_dir  "../../.."
...
  A total of 55 instances were transformed.
  IOBUF => IOBUF (IBUF, OBUFT): 38 instances
  RAM32M => RAM32M (RAMD32, RAMD32, RAMD32, RAMD32, RAMD32, RAMD32, RAMS32, RAMS32): 16 instances
  RAM32X1D => RAM32X1D (RAMD32, RAMD32): 1 instances

open_run: Time (s): cpu = 00:00:12 ; elapsed = 00:00:12 . Memory (MB): peak = 6805.539 ; gain = 206.344 ; free physical = 1153 ; free virtual = 2115
INFO: [Timing 38-91] UpdateTimingParams: Speed grade: -1, Delay Type: min_max.
update_compile_order -fileset sim_1
exit
INFO: [Common 17-206] Exiting Vivado at Thu Feb 25 13:15:08 2016...

4. ビルド結果を確認する。

ビルド結果は、hdl/projects/adv7511/zed/adv7511_zed.runs/impl_1 に格納されている。どうやら、一番新しいdcpは、system_top_routed.dcpのようだ。オープンして結果を見てみる。

vivado system_top_routed.dcp

うまくいっているみたいだ?

f:id:msyksphinz:20160225225922p:plain

f:id:msyksphinz:20160225225958p:plain