TE0720という、ドイツのTrenz Electronicsなる会社が作っているZynqボードを入手したので使ってみます。
5x4cmサイズでZ7020が動くというなかなかイケてるっぽいデバイスです。
http://www.trenz-electronic.de/products/fpga-boards/trenz-electronic/te0720-zynq.html
ちゃんとXilinxのパートナーらしいです。
日本の代理店はこちら:http://www.trenz.jp/
このサイトにPLだけでLチカさせるチュートリアル( http://www.trenz.jp/tutorial/led0/ )があるので、
ここではPSを使ってHello Worldしてみたいと思います。
環境・ハードウェア
- xubuntu 14.04
- Vivado 2015.2
- TE0720-02-1CF
- TE0703-04 (Carrier Card)
Board Part File のインストール
最初にTE0720のハードウェア情報が記されたファイルをVivadoに読み込ませます。
https://wiki.trenz-electronic.de/display/PD/Installation
のとおりです。
まず、
http://www.trenz-electronic.de/de/download/d0/Trenz_Electronic/d1/TE0720-GigaZee/d2/board_part_files.html
から
TE0720-BoardFiles-2014.4_V02.zipをダウンロードし、
(直リンク: http://www.trenz-electronic.de/fileadmin/docs/Trenz_Electronic/TE0720-GigaZee/board_part_files/TE0720-BoardFiles-2014.4_V02.zip )
適当な場所に解凍します。
次にVivadoにこのフィアルの場所を登録します。
- tclコマンドで解凍場所をVivadoに登録する方法
- Vivadoのインストールディレクトリ下に直接解凍する方法
の2つがあります。
tclコマンドで解凍場所をVivadoに登録する方法
これのやり方がさらに2つあります。
- Vivado起動後にtclコマンドで入力する方法
- 初期化スクリプト
init.tcl
に書いておく方法
結局どちらも同じことですが…
Vivado起動後にtclコマンドで入力する方法
vivado起動後、tclコンソールに
set_param board.repoPaths {/path/to/TE0720-BoardFiles-2014.4-V02/}
(/path/to
の部分は解凍した場所に合わせて変えてください)
と入力します。
(Vivadoのバージョンが古いと
set_param project.boardPartRepoPaths /path/to/TE0720-BoardFiles-2014.4-V02/
となるらしいです。)
これで、Create New Projectの設定画面では、BoardsにTE0720が現れます。
初期化スクリプトinit.tcl
に書いておく方法
Vivadoのインストールディレクトリ以下のscripts
ディレクトリにinit.tcl
を作成し、上記コマンドを書いておきます。
私の環境では、
/opt/Xilinx/Vivado/2015.2/scripts/init.tcl
になりました。
Vivadoのインストールディレクトリ下に直接解凍する方法
例えば
/opt/Xilinx/Vivado/2015.2/
にVivadoがインストールされているとき、
/opt/Xilinx/Vivado/2015.2/data/boards/
以下にファイルを解凍してしまいます。
つまり、最終的に、
/opt/Xilinx/Vivado/2015.2/data/boards/board_parts/zynq/TE0720-1CF
/opt/Xilinx/Vivado/2015.2/data/boards/board_parts/zynq/TE0720-1CR
/opt/Xilinx/Vivado/2015.2/data/boards/board_parts/zynq/TE0720-1QF
/opt/Xilinx/Vivado/2015.2/data/boards/board_parts/zynq/TE0720-2EF
/opt/Xilinx/Vivado/2015.2/data/boards/board_parts/zynq/TE0720-2IF
ができます。
これで完了です。
しかし、この方法はXilinx非推奨らしく、ユーザーの責任で行うようにとのことらしいです。
Hello World
プロジェクト作成
Create New Projectで新規プロジェクトを作ります。
上の設定のとおり、TE0720がdefault boardに追加されているはずなので、自分のボードに合わせて選択します。
ハードウェアデザイン
Create Block Design -> Add IP -> ZYNQ7 Processing SystemでPSを追加します。
次に、tclコンソールで
source path/to/TE0720-BoardFiles-2014.4_V02/board_parts/zynq/TE0720-1CF/0.2/ps7.tcl
apply_ps7_board_setting processing_system7_0
を実行します。path/to/TE0720-BoardFiles-2014.4_V02
の部分はBoard Part Fileをインストールした場所に合わせて変えてください。
ps7.tcl
を実行することでapply_ps7_board_setting
関数が定義され、それをprocessing_system7_0
に対して使う…って感じなんでしょうか。
ちなみにprocessing_system7_0
はPSのインスタンス名(?)です。
これでPSが設定されました。
(Zedboardとかだと、設定画面を開いてPresetsから選べばよかったのですが、TE0720はこのようになっています。
なんとかPresetsに追加できないものだろうか…)
次はRun Block Automationを実行します。Apply Board Presetのチェックを外すよう注意します。
最後にFCLK_CLK0をM_AXI_GP0_ACLKにつないでハードウェアデザイン完成です。
こんな感じになります:
Validate Designでエラーがないことを確認し、Generate Output Products, Create HDL Wrapperと普通に進めます。
Generate Bitstreamして、SDKにエクスポートまでやってしまいます。
SDK
普通にHello Worldプロジェクトを作って実行します。
この時、TE0703 (Carrier card)のトグルスイッチはすべてONにしておきます。
本来これはSDブートを示すのらしいですが、JTAGを使ったbitstream書き込みからHello world実行まで普通に動きます。