Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Ultra96 向け Debian GNU/Linux (v2018.2版) の構築(Sample FPGA Design編)

はじめに

Ultra96 に Debian GNU/Linux (v2018.2版) を構築する方法について、具体的な方法をいくつかに分けて説明します。

この記事では、ZynqMP の Boot Loader で使うための Sample FPGA Design の構築について説明をします。

Sample FPGA Design を構築する目的

Vivado SDK では FSBL(First Stage Boot Loader) および PMUFW(Platform Manager Unit Firmware) をビルドするのにハードウェア情報が必要になります。また、Ultra96 では Bluetooth を使うために PS の UART0 の CTS と RTS を PL 側の I/O ピンに接続する必要があります。そのため、ここでサンプルとなるデザインを構築します。

注意: 2018年10月26日現在、Bluetooth と GPIO の動作確認が済んでいません。このサンプルデザインを使って U-Boot と Linux が起動出来ることだけ確認しています。ご了承ください。

Sample FPGA Design の構成

Bluetooth を使うために PS の UART0 の CTS と RTS を PL 側の I/O ピンに接続しています。ついでに Ultra96 の GPIO も実装してしまいます。

Fig.1 Ultra96 Sample Design

Fig.1 Ultra96 Sample Design

必要な環境

  • Vivado 2018.2
  • Vivado SDK 2018.2

また、Ultra96 用のボード設定ファイルが必要です。Vivado にもとから入っている Ultra96 のボード設定ファイルは問題があるようなので Avnet が github で提供しているボードファイルを使います。次のように Avnet の github からダウンロードして Vivado がインストールされたディレクトリの data/boads/board_files にコピーしてください。

shell$ git clone git://github.com/Avnet/bdf
shell$ sudo cp -R bdf/* /opt/xilinx/Vivado/2018.2/data/boards/board_files/

なお、github/Avnet/bdf には現在 ultra96v1/1.2 と ultra96v2/1.0 がリリースされていますが、私がこのプロジェクトを構築した時は ultra96v1/1.2 しか無かったので、このプロジェクトでは ultra96v1/1.2 を使っています。

Sample FPGA Design の構築

次の URL から git clone でリポジトリをダウンロードして v2018.2.1 をチェックアウトします。

shell$ git clone git://github.com/ikwzm/ZynqMP-FPGA-Linux
shell$ cd ZynqMP-FPGA-Linux
shell$ git checkout v2018.2.1

ここでは Vivado の XST(Xilinx Software Command Line Tool) を使って構築する方法を示します。GUI を使って手で入力するのは面倒なので Tcl スクリプトファイルを用意しています。

  • target/Ultra96/build-v2018.2/
    • fpga/
      • create_project.tcl
      • design_1_bd.tcl
      • implementation.tcl
      • export_hardware.tcl
      • design_1_pin.xdc

Project を作る

create_projet.tcl を Vivado で実行してプロジェクトを作ります。

vivado% cd target/Ultra96/build-v2018.2/fpga/
vivado% vivado -mode batch -source create_project.tcl

この FPGA デザインでは、次の図のように I/O Configuration / Low Speed / I/O Peripherals / UART / UART0 を MODEM モードにして CTS と RTS を PL 側に出しています。

Fig.2 ZynqMP UART0 Setting

Fig.2 ZynqMP UART0 Setting

design_1_pin.xdc ファイルで PL 側の I/O ポートに接続するピン番号を指定しています。

design_1_pin.xdc
## UART0
set_property -dict { PACKAGE_PIN B7   IOSTANDARD LVCMOS18 } [get_ports { UART0_CTS }]; 
set_property -dict { PACKAGE_PIN B5   IOSTANDARD LVCMOS18 } [get_ports { UART0_RTS }]; 

## GPIO
set_property -dict { PACKAGE_PIN D7   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[0]  }]; 
set_property -dict { PACKAGE_PIN F8   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[1]  }]; 
set_property -dict { PACKAGE_PIN F7   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[2]  }]; 
set_property -dict { PACKAGE_PIN G7   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[3]  }]; 
set_property -dict { PACKAGE_PIN F6   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[4]  }]; 
set_property -dict { PACKAGE_PIN G5   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[5]  }]; 
set_property -dict { PACKAGE_PIN A6   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[6]  }]; 
set_property -dict { PACKAGE_PIN A7   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[7]  }]; 
set_property -dict { PACKAGE_PIN G6   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[8]  }]; 
set_property -dict { PACKAGE_PIN E6   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[9]  }]; 
set_property -dict { PACKAGE_PIN E5   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[10] }]; 
set_property -dict { PACKAGE_PIN D6   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[11] }]; 
set_property -dict { PACKAGE_PIN D5   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[12] }]; 
set_property -dict { PACKAGE_PIN C7   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[13] }]; 
set_property -dict { PACKAGE_PIN B6   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[14] }]; 
set_property -dict { PACKAGE_PIN C5   IOSTANDARD LVCMOS18 } [get_ports { GPIO_tri_io[15] }];

ビットストリームの生成

implementation.tcl を Vivado で実行して、デザインの論理合成、配置配線、ビットストリームの生成を行います。

vivado% cd target/Ultra96/build-v2018.2/fpga/
vivado% vivado -mode batch -source implementation.tcl

ハードウェア情報の生成

export_hardware.tcl を Vivado で実行してハードウェア情報を生成します。

vivado% cd target/Ultra96/build-v2018.2/fpga/
vivado% vivado -mode batch -source export_hardware.tcl

このスクリプトを実行することにより、target/Ultra96/build-v2018.2/fpga/project.sdk/design_1_wrapper.hdf が生成されます。

謝辞

Ultra96 のボード設定ファイルや Bluetooth で UART0 の CTS/RTS を I/O ピンに接続する件に関しては以下のページと書籍を参考にしました。作者の @hidemi_ishihara さんに感謝します。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?