本文主要介绍ZYNQ PS PL异构多核案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xilinx SDK 2017.4。其中测试板卡为TMS320C6678开发板,文章内容包含多个特色案例,如axi_gpio_led_demo案例、axi_timer_pwm_demo案例、axi_uart_demo案例、emio_gpio_led_demo案例、mig_dma案例等,由于篇幅过长,文章分为上下6个小节展示,欢迎大家按照顺序进行文章内容查看。
本次测试板卡为TMS320C6678开发板,它是一款基于TI KeyStone架构C6000系列TMS320C6678八核C66x定点/浮点DSP,以及Xilinx Zynq-7000系列XC7Z045/XC7Z100 SoC处理器设计的高端异构多核评估板,TMS320C6678开发板每核心主频可高达1.25GHz,XC7Z045/XC7Z100集成PS端双核ARM Cortex-A9 PL端Kintex-7架构28nm可编程逻辑资源,引出双路CameraLink、双路SFP 光口、四路千兆网口、双路SATA、双路PCIe、四路USB、双路CAN、双路CAMERA、HDMI IN/OUT、LVDS、LCD、RS485、RS232、Micro SD、HPC FMC等接口。
emio_uart_demo案例
案例功能
案例功能:PS端通过EMIO方式使用UART0串口进行数据收发。
本案例默认将UART1作为PS端调试串口。
Block Memory Generator IP核
本案例使用Block Memory Generator IP核创建BRAM资源。
Block Memory Generator IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg058-blk-mem-gen.pdf》,具体配置如下。
图 183
Aurora 64B66B IP核
本案例使用Aurora 64B66B IP核实现Aurora高速串行通信协议。
图 184
Aurora 64B66B IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg074-aurora-64b66b.pdf》和《ug476-7Series_Transceivers.pdf》,具体说明配置如下。
点击"Core Options",Line Rate(Aurora通信速率)设置为10Gbps,GT Refclk(GTX参考时钟)设置为125MHz,INIT clk、GT DRP clk设置为100MHz,Dataflow Mode(数据流模式)设置为Duplex(双工模式)。
图 185
点击"GT Selections",Lanes设置为1,表示使用单通道GTX。选择GTXQ1(QUAD_110)的GTXE2_X0Y7(MGTXRX_3、MGTXTX_3引脚),即对应SFP1光口。
图 186
图 187
AXI Timer IP核
本案例使用AXI Timer IP核进行计数,用于计算数据传输速率。
AXI Timer IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg079-axi-timer.pdf》,具体配置如下。
图 188
aurora_reset模块
本案例使用aurora_reset模块为Aurora 64B66B IP核提供reset_pd和pma_init复位信号。aurora_reset模块clk_in使用由Aurora 64B66B IP核init_clk输出的100MHz时钟。
图 189
aurora_reset模块源码为"aurora_dma_bd.srcssources_1importshdlaurora_reset.v",关键代码说明如下。
定义模块接口。
图 190
根据Aurora 64B66B IP核的复位时序进行复位信号配置。
图 191
图 192
axi_ethernet_demo案例
案例功能
案例功能:演示PL端千兆以太网的实现。
操作说明
评估板配备一个PL端千兆网口PL RGMII ETH,请使用网线将评估板PL端网口、PC机连接到同一个路由器,绿灯常亮、黄灯闪烁表示连接正常。
图 193
将本案例的动态设备树镜像文件pl.dtbo和PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载设备树文件和PL端可执行文件。
Target# mount -t configfs configfs /configfs
Target# mkdir /configfs/device-tree/overlays/ethernet
Target# echo pl.dtbo > /configfs/device-tree/overlays/ethernet/path
图 194
执行如下命令关闭PS端网口eth0,并使PL端网口eth1自动获取IP地址。PL端网口本次测试的IP地址为192.168.0.250。
Target# ifconfig eth0 down
Target# udhcpc -i eth1
图 195
如下使用Iperf工具测试评估板与PC机的网络通信速度。若未安装,可在Ubuntu中执行"sudo apt-get install iperf"安装。
UDP测试
在Ubuntu执行如下命令查看PC机IP地址并等待评估板连接。
Host# ifconfig
Host# iperf -s -u
图 196
在评估板文件系统执行如下命令测试网络通信速度,命令中192.168.0.134为PC机IP地址。测试完成后,Ubuntu和评估板均会打印测试结果。不同测试环境,测试结果将会有所差异。
Target# iperf -u -c 192.168.0.134 -b 1000M
图 197
TCP测试
在Ubuntu执行如下命令查看PC机IP地址并等待评估板连接。
Host# ifconfig
Host# iperf -s
图 198
在评估板文件系统执行如下命令测试网络通信速度,命令中192.168.0.134为PC机 IP地址。测试完成后,Ubuntu和评估板均会打印测试结果。不同测试环境,测试结果将会有所差异。
Target# iperf -c 192.168.0.134
图 199
Vivado工程说明
点击BLOCK DESIGN窗口下的"Address Editor"选项,查看IP核地址,地址分配如下图所示。
图 200
IP核配置
AXI DMA IP核
本案例使用AXI DMA IP核将数据在DDR与AXI Ethernet IP核之间进行搬运。
AXI DMA(AXI Direct Memory Access) IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg021_axi_dma.pdf》,具体配置说明如下。
- 启用SG(scatter-gather)模式和启用控制/状态流。
- Width of Buffer Length Register设置为16,则DMA单次传输最大寻址范围为2^(Width of Buffer Length Register),DMA单次传输最大数据量为2^(Width of Buffer Length Register)*8=64KByte。
- 读/写通道的Memory Map Data Width、Stream Data Width均设置为32,Max Burst Size均设置为16。
图 201
AXI Ethernet IP核
本案例使用AXI Ethernet IP核实现MAC层和物理层功能。
AXI Ethernet(AXI 1G/2.5G Ethernet Subsystem) IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg138-axi-ethernet.pdf》。
配置AXI Ethernet IP核链路速率为1Gbps,PHY接口类型为RGMII。
图 202
axi_mig_pcie_demo案例
案例功能
案例功能:评估板ZYNQ端作为PCIe EP(Endpoint)设备,处理PCIe RC(Root Complex)设备发起的PCIe BAR0空间读写事务。
本案例测试评估板ZYNQ端和DSP端的PCIe通信,其中DSP端PCIe为双通道链路(x2),ZYNQ端PCIe配置为四通道链路(x4),自适应DSP端的双通道链路。
DSP端测试程序为“4-软件资料DemoDSP_DemonoOS-demospcie_rc”,为便于测试,我司在本案例的bin目录下提供了DSP端测试程序可执行文件pcie_rc_noOS_FPGA.out。
操作说明
使用ADT-Link公司的R22SR公对母PCIe信号交换线连接评估板PCIe EP(ZYNQ)金手指和PCIe RC(DSP)插槽。
图 203
将本案例PL端.bin格式可执行文件复制到评估板文件系统"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。
Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware
图 204
通过仿真器加载评估板DSP端程序并运行,DSP端调试串口将打印PCIe通信速率(如下图所示)。本次总共传输64KByte数据,平均写速率约为702MByte/s,平均读速率约为640MByte/s。
图 205
Vivado工程说明
点击BLOCK DESIGN窗口下的"Address Editor"选项,查看IP核地址,地址分配如下图所示。
图 206
IP核配置
MIG 7 Series IP核
MIG(Memory Interface Generator) 7 Series IP核用于配置PL端DDR,说明见mig_dma案例IP核配置部分。
AXI Memory Mapped To PCI Express IP核
本案例使用AXI Memory Mapped To PCI Express IP核将PL端DDR映射为可被PCIe RC设备访问的内存。
AXI Memory Mapped To PCI Express IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg055-axi-bridge-pcie.pdf》,具体配置说明如下。
配置设备类型为PCIe Endpoint设备,参考时钟为外部RC端输入的100MHz。
图 207
Lane Width配置为x4,Link Speed配置为5.0GT/s。
图 208
配置PCIe设备信息。Base Class Menu配置为Memory controller,Vendor ID配置为0x10EE,Device ID配置为0x7024。
图 209
BAR容量设置。根据PCIe RC设备实际支持情况设置容量大小,此处设置BAR0为64KByte。
图 210
BAR0的地址设置为0x60000000。
图 211
emio_emac_demo案例
案例功能
案例功能:PS端通过EMIO方式使用GEM1进行网络数据收发。
操作说明
基于FreeRTOS测试
请使用Micro USB线连接PC机和评估板PS端调试串口CON9(USB TO UART),并使用网线将评估板PS端网口(PS RGMII0 ETH)、PL端网口(PL RGMII ETH)和PC机连接到同一个路由器,绿灯常亮、黄灯闪烁表示连接正常。
图 212
本小节简单演示如何将轻量级IP栈(IwIP)与FreeRTOS搭配使用。本次测试使用DHCP模式,如需设置为静态IP地址,请参考关键代码小节修改案例。
案例支持同时运行以下四个任务:
- PS端网口执行TCP echo server任务:PC主机通过网络调试工具向评估板发送数据,评估板将接收到的数据返回到PC主机。
- PS端网口执行UDP echo server任务:PC主机通过网络调试工具向评估板发送数据,评估板将接收到的数据返回到PC主机。
- PL端网口执行TCP echo server任务:PC主机通过网络调试工具向评估板发送数据,评估板将接收到的数据返回到PC主机。
- PL端网口执行UDP echo server任务:PC主机通过网络调试工具向评估板发生数据,评估板将接收到的数据返回到PC主机。
加载PS端FreeRTOS程序、PL端程序后,即可看到PS端串口调试终端打印如下信息。其中PS端网口IP地址为192.168.1.113,PL端网口IP地址为192.168.1.115。
图 213
双击打开产品资料“4-软件资料ToolsWindows”目录下的网络调试工具SocketTool_NoAD.exe。
- PS端网口TCP echo server任务测试
在弹出的界面中点击“TCP Client -> 创建”,在“对方IP”中输入评估板PS端网口IP地址:192.168.1.113,在“对方端口”中输入TCP echo server端口号:7,再点击确定。
图 214
点击“连接”,在“数据发送窗口”中输入需发送至评估板的数据,再点击“发送数据”。“数据接收及提示窗口”中将打印由PC机发送至评估板,以及由评估板发送至PC机的数据。
图 215
同时,串口调试终端将会打印如下信息。
图 216
PS端网口UDP echo server任务测试
在弹出的界面中点击“UDP Client -> 创建”,在“对方IP”中输入评估板PS端网口IP地址:192.168.1.113,在“对方端口”中输入UDP echo server端口号:8,再点击确定。
图 217
在“数据发送窗口”中输入需发送至评估板的数据,再点击“发送数据”。“数据接收及提示窗口”中将打印由PC机发送至评估板,以及由评估板发送至PC机的数据。
图 218
同时,串口调试终端将会打印如下信息。
图 219
PL端网口TCP echo server任务测试
在弹出的界面中点击“TCP Client -> 创建”,在“对方IP”中输入评估板PL端网口IP地址:192.168.1.115,在“对方端口”中输入TCP echo server端口号:7,再点击确定。
图 220
点击“连接”,在“数据发送窗口”中输入需发送至评估板的数据,再点击“发送数据”。“数据接收及提示窗口”中将打印由PC机发送至评估板,以及由评估板发送至PC机的数据。
图 221
同时,串口调试终端将会打印如下信息。
图 222
PS端网口UDP echo server任务测试
在弹出的界面中点击“UDP Client -> 创建”,在“对方IP”中输入评估板PL端网口IP地址:192.168.1.113,在“对方端口”中输入UDP echo server端口号:8,再点击确定。
图 223
在“数据发送窗口”中输入需发送至评估板的数据,再点击“发送数据”。“数据接收及提示窗口”中将打印由PC机发送至评估板,以及由评估板发送至PC机的数据。
图 224
同时,串口调试终端将会打印如下信息。
图 225
基于Linux测试
将本案例的动态设备树镜像文件emio-emac-demo-overlay.dtbo和PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载设备树文件和PL端可执行文件。
Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware
Target# mount -t configfs configfs /configfs
Target# mkdir /configfs/device-tree/overlays/emio_emac
Target# echo emio-emac-demo-overlay.dtbo > /configfs/device-tree/overlays/emio_emac/path
图 226
执行如下命令关闭PS端网口eth0,并使PL端网口eth1自动获取IP地址。PL端网口本次测试得IP地址为192.168.0.117。
Target# ifconfig eth0 down
Target# udhcpc -i eth1
图 227
如下使用Iperf工具测试评估板与PC机的网络通信速度。若未安装,可在Ubuntu中执行"sudo apt-get install iperf"安装。
UDP测试
在Ubuntu执行如下命令查看PC机IP地址并等待评估板连接。
Host# ifconfig
Host# iperf -s -u
图 228
在评估板文件系统执行如下命令测试网络通信速度,命令中192.168.0.134为PC机IP地址。测试完成后,Ubuntu和评估板均会打印测试结果。不同测试环境,测试结果将会有所差异。
Target# iperf -u -c 192.168.0.134 -b 1000M
图 229
TCP测试
在Ubuntu执行如下命令查看PC机IP地址并等待评估板连接。
Host# ifconfig
Host# iperf -s
图 230
在评估板文件系统执行如下命令测试网络通信速度,命令中192.168.0.134为PC机IP地址。测试完成后,Ubuntu和评估板均会打印测试结果。不同测试环境,测试结果将会有所差异。
Target# iperf -c 192.168.0.134
图 231
关键代码(PS端-FreeRTOS)
创建任务,任务函数为main_thread。
图 232
在任务函数main_thread中进行IwIP初始化,再创建任务netword_thread。
图 233
在任务network_thread中,调用xemac_add函数,添加设置好的网络接口信息,初始化PS端网口和PL端网口。
图 234
图 235
设置MAC地址,再根据评估板MAC地址的类型调用xemacpsif_init函数配置硬件。
图 236
获取评估板MAC地址类型信息。
图 237
图 238
在xemacpsif_init函数中,调用函数low_level_init来进行硬件设置。
图 239
在任务network_thread中,添加设置好的网络接口信息后,尝试自动获取IP地址。
图 240
成功获取IP地址后,建立TCP echo server和UDP echo server两个线程。
图 241
回显通过TCP协议发送至程序中的输入字符。
图 242
回显通过UDP协议发送至程序中的输入字符。
图 243
建立任务监控网口硬件连接状态(link up/link down)。
图 244
图 245
如需设置为静态IP地址,可参考如下说明。
修改宏定义,1表示自动获取IP地址,0表示使用静态IP地址。
图 246
设置静态IP地址、网关和子网掩码。
图 247
Vivado工程说明
通过GMII to RGMII IP核,将PS端的千兆以太网控制器(GEM1)的GMII接口转换为RGMII接口,实现对PL端网口的控制。
图 248