🐯

ZYBO Z7によるZYNQ入門 (4)ベアメタル環境のlwIPでUDP通信

2021/11/09に公開

はじめに

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