(C) by T.IZUMI, Sep 2015
Ver. 2017.11.06

立命館いずみ研的
memory mapped I/O ⇔ stream
接続インターフェース

特長
Xilinx Zynq の PS と PL を接続します。
ソフトウェアからの読み書きがハードウェア上の FIFO の読み書きに変換されます。
回路規模が小さく簡単に使用できます。
Vivado IP Integrator の GUI でプロセッサに接続し、使用することができます。
IP archive file
RitsIzm_rizm_rizm_axilite_fifo_2.0.zip
参考資料
國川大輝、小森和希、泉知論: “Zynq上のプロセッサ‐ロジック間のストリーム接続のトレードオフ評価”, 電子情報通信学会 技術研究報告, vol. 117, no. 279, RECONF2017-47, pp.61-66, 2017年11月.
※信学技報中のモジュール名や詳細仕様など若干異なりますがほぼ同じです。 適宜読み替えてください。
Sample Design
以下のトレーニング課題参照

問合せ先
立命館大学 理工学部 電子情報工学科   泉知論


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

Xilinx Zynq の ARM と周辺回路を中低速ストリームで接続する設計例〜いずみ研独自IP版

ターゲットボード
ZYBO   (or ZedBoard)
ターゲットFPGA
XC7Z010-1CLG400C   (or XC7Z020-1CLG484C for ZedBoard)
ZYBOで実行する場合はボード定義ファイルをインストールしておくこと。
https://reference.digilentinc.com/vivado:boardfiles
このとき古いボード定義ファイル (Xilinx/Vivado/????.?/data/boards/board_parts/zynq/zybo 以下)は 削除すること。
ZedBoardを用いる場合は次のとおり読み替えること。 それ以外のボードでトライする場合は、ボードの仕様に合わせてxdcファイルとトップ記述、およびIP Integrator でのProcessor Systemの設定を書き換えるべし。
ZYBOZedBoard
zybo.xdczedboard.xdc
zybo_top.vzedboard_top.v
PS-SRSTPS-RST
BTN3BTNL
BTN2BTNR
BTN1BTNU
BTN0BTND
Pmod JEPmod JB
その他の必要機材
追加のUART接続が必要(sparkfun FTDI Basic, aitendo USB2UART-CP2102 等)
開発環境
Xilinx Vivado 2015.2
Xilinx SDK 2015.2
※バージョンは 2014.?, 2015.?, 2016.? であれば詳細は異なってもほぼ同じように設計できるはず

0. 準備

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

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

1-2. 画面の確認

1-3. ファイルの確認

1-4. IPの追加


2. システム構築(Vivado)

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

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

2-3. GPIOの配置・接続

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

2-5. GPIO ポートの追加

2-6. AXI - AXIS インターフェースの追加と設定

2-7. ブロック図の確認

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

2-9. システム生成


3. 仮合成と実機デバグの準備

実機デバッグでは、いったん論理合成を通してから、 観測したい信号やレジスタをマークし、 さらにデバッグ用のモジュールを設定登録する。 そして、再合成する。

3-1. 観測対象のマーク

3-2. 論理合成

3-3. デバッグモジュールの設定と観測信号の登録

(*1)   ここで(画面B1)Netlistから信号やレジスタを右クリックして Mark Debug することもできる。しかし、ソースコード中の信号やレジスタは論理合成の最適化により名前が代わったり、縮退して消えてしまったりする。 また、 xdc ファイルの中で set_property MARK_DEBUG true [get_nets {uartrx/datao[*]}] などとすると予めマークできそうなものだが、それでも信号&名前の保存は保証されないようだ。


4. コンパイル(Vivado)


5. コンフィグレーション(Vivado)


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

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

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

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

7-1. SDK の起動

7-2. プロジェクトの生成


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

8-1. コンパイル

8-2. 標準入出力とUARTの接続

8-3. 実行と動作確認

8-4. 再実行


9. 動作確認 (psloopback) (SDK)

ここでは、PC から ZYNQ のプロセッサへデータを送り、そこで処理して PC に送り返す動作の確認を行う。 具体的にはターミナルエミュレータから文字を送り、大文字⇔小文字変換をして送り返す。 ※SDK上のターミナルは使わない!

9-1. ソースコードの登録

9-2. コンパイル

9-3. SDK上のターミナルを切る

9-3. ターミナルエミュレータの起動

9-4. 実行と動作確認

※SDK上のターミナルからは文字は送れないようだ。別途ターミナルエミュレータを開くこと。


10. コードの登録、コンパイル、実行

10-1. ソースコードの登録

10-2. コンパイル(SDK)

10-3. UARTの追加

この動作テストでは、追加のUARTを必要とする。

10-4. ターミナルエミュレータの起動

10-5. 実行


11. 動作確認(SDK,Vivado)

11-0. 信号観測の準備

11-1. 直接接続 M0, S0 ポートの動作テスト(SDK)

発展:zybo_top.v の AXIS_LB_THROUGH を 1 にして ハードウェアをコンパイルしなおすと、 valid, ready を無視したレジスタ型の動作を確認できる。

11-2. M1 ポートの1文字書き出し動作テスト

※人がボタンを押す速度は UART に比べて充分に遅いので、ここでは M1 Busy で待たされることはない

11-3. M1 ポートの複数文字書き出し動作テスト

※SWを1111にすると、FIFOの残容量以上のデータを連続して送る。UARTの速度はプロセッサの書き込み速度に比べてとても遅いので、書き込めなかったデータは無視され、捨てられる。なお、M1から出た先のレジスタやFIFOのため、FIFO残容量以上のデータが書きこまれることもあるが、それは保証されない。

11-4. S1 ポートの1文字読み込み動作テスト

※人がボタンを押す速度は UART に比べて充分に遅いので、ここでは M1 Busy で待たされることはない

11-5. S1 ポートの複数文字読み込み動作テスト

※SWを1111にすると、FIFO内のデータ数以上を連続して読む。UARTの速度はプロセッサの書き込み速度に比べてとても遅いので、読み出せなかったデータは不正なものとなる。なお、S1以前のレジスタやFIFOのため、FIFO内のデータ数以上のデータが読めることもあるが、それは保証されない。


99. その他

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

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

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

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

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

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

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

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

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

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

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