ZYBO Z7によるZYNQ入門 (4)ベアメタル環境のlwIPでUDP通信
- (1)Vivado, Xilink SDK開発環境構築
- (2)Hello Worldプログラムによる動作確認
- (3)Ubuntu, PetaLinuxツール環境構築
- (4)ベアメタル環境のlwIPでUDP通信
- (5)PetaLinuxツールでLinuxイメージを作成
- (6)Linux環境でUDP通信(iperf)
- (7)Linux環境でUDP通信(ユーザアプリ)
- (8)Audio Codec
- (9)AXI DMAを使用したPL-PS間のデータ転送
はじめに
OSなしの環境(ベアメタル環境)でZYBOのEthernetからホストPCへのUDP通信をlwIPを使用して行います。
環境
- PC: Windows 10 64bit
- Vivado 2019.1 WebPACKライセンス
- Xilinx SDK 2019.1
- Tera Term
- PC (Linux): Ubuntu 18.04
- ボード: ZYBO (Z7-10)
- micro USBケーブル
- Ethernetケーブル
lwIP (lightweight IP)とは
lwIPは組み込みシステム向けのオープンソースのTCP/IPのプロトコルスタックです。Xilinx SDKはlwIPに対応しています。
PL部の作成(Vivado)
(2)Hello Worldと同じくPSだけのデザインとなるため、Vivadoで作成済みのproject_1をオープンします。
PS部の作成(Xilinx SDK)
Vivado上のメニューバー -> File -> Launch SDK -> OKで、project_1用のソフトウェア開発環境が起動します。
SDK上のメニューバー -> New -> Application Project で、新しいソフトウェアプロジェクトを作成します。
- Project name: project_2
- OS Platform: standalond
- Hardware Platform: design_1_wrapper_hw_platform_0
- Processor: ps7_cortexa9_0
- Language: C
TemplatesにはlwIP UDP Perf Clientを使用します。
プログラムの実行
ボードの準備
ZYBOのボード上でJP5のジャンパ接続をJTAGにします。ボード上のマイクロUSB端子(J12)にUSBケーブルを刺して、Windows PCと接続します。ZYBOの電源をONにします。
PC側でTera Termを起動して、USB Serial Portに接続します。ボーレートは115200にします。
Server PCの準備
Ubuntu PCをServer PCとして、ZYBOとEthernetケーブルで接続します。
- Ubuntu PC : 192.168.1.12 (前回設定済み)
- ZYBO : 192.168.1.10 (lwIP UDP Perf Clientの初期値)
Ubuntu PCではUDPデータ受信に備えて、下記のiperfコマンドを実行しておきます。
$ iperf -s -i 5 -u
PLプログラムの書き込み
ハードウェア情報(ビットストリームファイル)をZYBOに書き込みます。
メニューバー -> Xilinx -> Program FPGAを実行します。
PSプログラム実行
project_2のsrcの下にあるudp_perf_client.hのServer PCのIPアドレスをUbuntu PCのアドレスに設定します。
/* Server to connect with */
#define UDP_SERVER_IP_ADDRESS "192.168.1.12"
Project Explorer上でproject_2を選択して、メニューバー -> Run As -> Launch on Hardware (System Debugger)を実行します。
プログラムを実行するとTerminalには次のように表示されます。
Ubuntu PCではUDPを受信して、次のように表示されます。
Discussion