開発環境
FPGA
zynq
xilinx
zybo

ZYBO (Zynq) 初心者ガイド (7) Boot Imageを作る

More than 1 year has passed since last update.

この記事の内容を2分で見る ( https://www.youtube.com/watch?v=tiS0v1DPRL0 )


環境


  • 開発用PC: Windows 10 64-bit


    • Vivado 2017.4 WebPACKライセンス

    • Xilinx SDK 2017.4



  • ターゲットボード: ZYBO (Z7-20)

Windows環境は1回目を参照。

使用するハードウェア(hdf)は6回目を参照。


Boot Imageを作る

これまで、バイナリファイルの書き込みはJTAGで行っていました。そのため、電源をOFF/ONするたびに書き込みが必要でした。今回は、ブートイメージを作成して、それを使ってSDカード/QSPIから起動するということをやります。

使用するプロジェクトは何でもいいのですが、前回のプロジェクトを使います。これは、PL単体だと全LEDがONになる。PSから制御するとLEDがチカチカするというものです。


Zynq起動の流れ

Boot Image作成に必要なファイルを理解するために、起動シーケンスについて簡単に説明します。詳細はZynqやZyboのリファレンスマニュアルに記載されています。

Zynqの起動は以下の3つのステージに分かれています。設定によって色々と変わりますが、典型例は以下の通りです。


  • Stage 0 (内蔵BootROMの起動コードが働く)


    • 内蔵BootROMの起動コードがCPU0で動く。これが、FSBL (First Stage Boot Loader)を読み込み、制御を移譲する。FSBLをどこから読むかはジャンパーで決まる。



  • Stage 1 (FSBLが働く)


    • FSBLがPS周辺回路(DDRなど)をコンフィギュレーションする

    • もしもビットストリームファイルがあれば、PLのコンフィギュレーションをする

    • もしもユーザーアプリケーションがあれば、ロードする



  • Stage 2


    • ユーザプログラムを実行する。 (もしもLinuxの場合は、U-BootなどのSecond Stage Boot Loaderが呼ばれる)




Boot Imageの構成

作成するブートイメージは、BOOT.binという1つのバイナリファイルです。この中に、以下のデータを格納します。


  • FSBLバイナリ (これから作る)

  • PL用のビットストリーム (Vivadoで作成済み)

  • PS用のユーザアプリケーションバイナリ (SDKで作成済み)


BOOT.binを作る


FSBLバイナリを作る

前回のプロジェクトの続きとして考えます。SDK上に、blinkというLEDチカチカ用のプロジェクトと、blink_bspプロジェクトが既にあります。ここに、FSBL用のプロジェクトを追加します。


  • Xilinx SDKのメニューバー -> File -> New -> Application Projectで新しいプロジェクトを作る


    • プロジェクト名は適当に、「fsbl」とする (何でもいい)

    • テンプレートとして、「Zynq FSBL」を選んでFinish



  • fsblプロジェクトをビルドして、fsbl/Debug/fsbl.elfを作っておく

01.jpg

02.jpg


BOOT.binを作る


  • Project Explorerで、搭載したいユーザアプリケーションプロジェクト(今回はblink)を選んでおく

  • メニューバー -> Xilinx -> Create Boot Image

  • BOOT.binに含めるバイナリを追加する。前述したように、以下のバイナリを含める。順番もこの通りにする必要がある。


    • FSBLバイナリ (さっき作った、fsbl.elf)

    • PL用のビットストリーム (Vivadoが出力した、design_1_wrapper.bit)

    • PS用のユーザアプリケーションバイナリ (SDKで作った、blink.elf)



  • Create Imageをクリックすると、blink\bootimage\BOOT.binが作られる

03.jpg


SDカードから起動する


  • FAT32でフォーマットしたSDカードにBOOT.binをコピー

  • JP5のジャンパピンで「SD」を選ぶ

  • 電源を入れなおすと、SDカード内のBOOT.binで起動する


QSPIから起動する


  • 念のため、JP5のジャンパピンで「JTAG」を選んで電源OFF/ONしておく

  • メニューバー -> Xilinx -> Program Flash

  • Image Fileに、blink\bootimage\BOOT.binを指定

  • FSBL Fileに、fsbl\Debug\fsbl.elfを指定

  • Programをクリック

(ここで、なぜfsbl.elfの指定が必要なのかが不明。バイナリ自体はBOOT.binに含まれているはずなのに。。。アドレス情報とかが必要なのかな?)

04.jpg

QSPIへの書き込み完了後、JP5のジャンパピンを「QSPI」にして、電源を入れなおすと、QSPI内のBOOT.binで起動する


おまけ: PLだけのプロジェクトの場合

PSで動くユーザアプリケーションがない場合(ZynqをFPGAとして使う場合)、必要なのはFSBLとビットストリームファイルだけになります。fsblプロジェクトを選んだ状態で、Create Boot ImageすればOKです。