(C) by T.IZUMI, Sep 2015
Ver. 2017.7.13.a

組込みシステム開発トレーニング課題

Xilinx Zynq による ARM と周辺回路、ソフトウェアの開発サンプル Vivado版

ソースコードを含むアーカイブ一式はこちら: http://www.ritsumei.ac.jp/se/re/izumilab/lecture/15ZyboVivado.zip

ターゲットボードとFPGA
ZYBO & XC7Z010-1CLG400C   (or ZedBoard & XC7Z020-1CLG484C)

ZYBOZedBoard
zybo.xdczedboard.xdc
zybo_top.vzedboard_top.v
zybo_test.czedboard_test.c
PS-SRSTPS-RST
LD10 DONELD12 DONE
PROG UART(1本)PROG と UART(2本)
BTN3BTNL
BTN2BTNR
BTN1BTNU
BTN0BTND

開発環境
Xilinx Vivado 2015.2
Xilinx SDK 2015.2
※バージョンは 2014.?, 2015.? であれば詳細は異なってもほぼ同じように設計できるはず

1. プロジェクトの生成(Vivado)

1-1. プロジェクト生成

1-2. 画面の確認

1-3. ソースファイルの登録


2. システム構築(Vivado)

2-1. Block Design の生成と登録

2-2. Zynq PS(ARM) の配置と設定

Customize Block では、 Vivadoの初期設定時に ZYBO や ZedBoard のボード定義ファイルを指定していれば 自動でそれらのボードにあった設定になっているはず。 でなければ、手動で設定する。

方法1
Presets メニューからボード(例 ZedBoard)を選択する。
方法2
Import XPS Settings から定義ファイル(例 ZYBO_zynq_def.xml)をインポートする。
方法3
個別に設定する。以下は ZedBoard を個別に設定する場合の例。

個別に設定した場合には Run Block Automation で Apply Board Preset [ ] のチェックを外すこと。

 MIO Configration
 Bank0 I/O Voltage (LVCMOS3.3V) Bank1 I/O Voltage (LVCMOS1.8V)
 + Memory Interfaces
  +[*] Quad SSPI Flash (MIO1..6)
   +[*] Single SS 4-bit IO
    + Quad SPI Flash .... LVCMOS 3.3V, fast, disabled, ...
 + I/O Peripherals
  +[*] ENET0 (MIO16..27) (UG:p.21 Table15参照)
   +[*] MDIO (MIO52..53)
    MIO52,53 1.8V, slow, dsabled
    MIO16-27 1.8V, fast, dsabled
  +[*] USB0 (MIO28..39)  (UG:p.11 Table5参照)
    MIO28-39 1.8V, fast, dsabled
  +[*] SD0 (MIO40..45)   (UG:p.10 Table4参照)
   +[*] CD (MIO47)
   +[*] WP (MIO46)
    MIO46-47 1.8V, slow, dsabled
    MIO40-45 1.8V, fast, dsabled
  +[*] UART1 (MIO48..49) (UG:p.12 Table6参照)
    MIO48,49 1.8V, slow, dsabled
  + GPIO
   +[*] GPIO MIO         (UG:p.19 Table12, p.20 Table14, p.23 Table16参照)
    MIO0,7,9-15  3.3V, slow, disabled
    MIO8       3.3V, fast, disabled
    MIO50,51     1.8V, slow, disabled
   +[*] ENET Reset (Share reset pin)
   +[*] USB Reset (Share reset pin)
   +[*] I2C Reset
 + Application Processor Unit
  +[*] Timer0 (EMIO)
 Clock Configuration
 + PL Fabric Clocks
 | +[*] FCLK_CLK0 (IO PLL) (100)

2-3. 基本モジュールの配置

2-4. プロセッサのクロック、リセットを出力

2-5. GPIO の追加

2-6. アドレス空間の設定

2-7. システム生成

2-8. 構成の確認

ソースコードzybo_top.vのここ↓を確認して上図のような構成になっていることを理解すること。

zybo_top.v
        :

   IBUFG ibuf_clk(.I(CLK125M), .O(CLK125M_ibuf));
   BUFG  buf_clk(.I(CLK125M_ibuf),.O(clk0));

        :

   assign 	clk=arm_clko;

        :

   Zynq_PS Zynq_PS_i
     (.DDR_addr(DDR_addr),
        :
      .clko(arm_clko),
      .gpi0(arm_gpi0),
      .gpi1(arm_gpi1),
      .gpi2(arm_gpi2),
      .gpi3(arm_gpi3),
      .gpo0(arm_gpo0),
      .gpo1(arm_gpo1),
      .gpo2(arm_gpo2),
      .gpo3(arm_gpo3),
      .rstno(arm_rstno));

       :

   always @(posedge clk0)
     counter0<=counter0+1;

       :

   always @(posedge clk)
     if (!rstn) counter<=0;
     else counter<=counter+1;

       :

   assign led={btn[3],counter0[24],counter[24],arm_gpo0[0]};

        :

   assign 	arm_gpi0={29'b0,btn2_r,btn1_r,btn0_r};
   assign 	arm_gpi1={28'b0,sw_r};
   assign 	arm_gpi2=counter;
   assign 	arm_gpi3={8'b0,uartrxdata,uartrxcount,uarttxcount};

        :

3. コンパイル(Vivado)


4. プロセッサシステム情報のエクスポート(Vivado)

ソフトウェア開発のためにプロセッサシステムの情報をエクスポートする。

5. ソフトウェア開発プロジェクトの設定(SDK)

Xilinx SDK 上でのソフトウェア開発環境をセットアップする。

SDK の起動

プロジェクトの生成


6. 動作確認(Hello World)(SDK)

FPGAの書き込み

コンパイル

標準入出力とUARTの接続

実行

実行でトラブルが発生するときの対処療法


7. ソースコードの登録(SDK)


8. コンパイルと実行(SDK)

文字表示器を使ったテスト

共立電子産業 SO1602AWWB-UA-WB-U+OLED_DRV-S1
http://www.kyohritsu.jp/eclib/SIKIT/MANUAL/so1602awwboleddrvs1.pdf
http://www.siliconhouse.jp/drv-s1.pdf
http://eleshop.jp/shop/g/gC9B362/

99. その他

Verilog デバグ〜埋もれたタイプミスを見つける

Verilog では、信号を宣言せずに使用してもよい。 なので、タイプミスをしてもエラーにならない。 そのようなバグを見つけるためには、 Messages から次の Warning を検索して確認するとよい。

Zynq の実機での再実行について

何故かうまくいかない。経験的に成功率の高い方法は… その他の対処として…

Zynq の実機デバッグ時の実行

PL側に回路をコンフィグしただけではデバッグモジュール(ILA)が認識されないようだ。 PS側でソフトウェアを実行すると認識される。 経験的に成功率の高い方法は…

Zynq の COMポートが認識できない

いちど削除して、ドライバをインストールしなおすと認識することがあるかもしれなくもない…。

SDK インストール状況の確認と追加インストール

Windows の COM ポート番号について

Windows は接続したことのあるデバイスを覚えていて、 COM ポート番号を使いまわす。 そのため、新しいデバイスを接続するたびにポート番号が増えていく。 ツールによっては COM ポートの番号が一桁でなければ正常動作しないものがある。 番号を振り直すには、不使用ポートを削除して接続し直す。