本文主要介绍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等接口。
mig_dma案例
案例功能
案例功能:PS端通过AXI4-Lite总线控制AXI DMA,将数据在DDR与BRAM之间进行搬运,以测试DDR读写速率与误码率。
由于PS端Master GP接口上接有其他外设,因此PS端映射PL端DDR的内存空间最大为1GByte。
操作说明
加载PS端裸机程序、PL端程序后,即可看到PS端串口调试终端打印如下信息。
图 128
案例配置PL端DDR理论最大带宽为:533MHz*2*32bit=4264MByte/s。测试结果如下:
表 1
读/写速率 | 最小速率 | 最大速率 | 平均速率 |
---|---|---|---|
写速率 | 3821.32MByte/s | 3829.36MByte/s | 3824.52MByte/s |
读速率 | 3601.01MByte/s | 3607.63MByte/s | 3604.41MByte/s |
关键代码(PS端)
初始化并校准Timer。
图 129
初始化DMA设备,使用轮询模式,关闭DMA中断。
图 130
获取DDR实际有效容量。
图 131
DDR数据线测试。
图 132
DDR地址线测试。
图 133
启动DMA传输,使用Timer进行计时,等待DMA传输完成后计算数据传输速率。
图 134
进行DDR -> DMA -> BRAM的数据传输测试。
图 135
进行BRAM -> DMA -> DDR的数据传输测试。
图 136
传输完成后更新速率测试相关信息,包括最小值、最大值与平均值。
图 137
每次传输完成后,对传输数据进行校验。
图 138
Vivado工程说明
点击BLOCK DESIGN窗口下的"Address Editor"选项,查看IP核地址,地址分配如下图所示。
图 139
IP核配置
AXI DMA IP核
本案例使用AXI DMA IP核将数据在DDR与BRAM之间进行搬运。
AXI DMA(AXI Direct Memory Access) IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg021_axi_dma.pdf》,具体配置说明如下。
- 取消默认勾选的Enable Scatter Gather Engine选项,配置DMA工作模式为直接寄存器模式(Direct Register Mode)。
- Width of Buffer Length Register设置为23,则DMA单次传输最大寻址范围为2^(Width of Buffer Length Register),DMA单次传输最大数据量为2^(Width of Buffer Length Register)*8=8MByte。
- 读/写通道的Memory Map Data Width、Stream Data Width均设置为512,Max Burst Size均设置为64。
图 140
MIG 7 Series IP核
本案例使用MIG 7 Series IP核完成DDR的初始化与读写校验。
MIG(Memory Interface Generator) 7 Series IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《ds176_7Series_MIS.pdf》和《ug586_7Series_MIS.pdf》,具体配置说明如下。
Memory Selection选择DDR3 SDRAM。
图 141
通过Controller Options配置DDR3参数。
Clock Period设置为1875ps(即总线频率为533.33MHz),DDR传输速率为533.33x2≈1066Mb/s。
图 142
PHY to Controller Clock Ratio设置为4:1,通过该参数配置IP核的用户时钟ui_clk频率。DDR Clock Period为533.33MHz,如PHY to Controller Clock Ratio配置为4:1,则ui_clk时钟频率为533.33/4=133.33MHz。
Memory Part设置为MT41K512M16XX-107,兼容MT41K256M16XX-107。
Data Width设置为32。
Number of Bank Machines设置为8。
最大理论带宽为:533.33MHz*2*32bit/8≈4264MByte/s。
图 143
AXI位宽设置为256bit。
图 144
通过Memory Options配置IP核输入时钟。此处选择为200MHz,地址映射选择为RBC(ROW/BANK/COLUMN)模式。
图 145
图 146
FPGA Options配置选项,System Clock选择"No Buffer",Reference Clock选择"Use System Clock"。
图 147
IO Planning Options选择"Fixed Pin Out:Pre-existing pin out is known and fixed"。
图 148
Pin Selection配置选项,点击"Read XDC/UCF",选择工程"mig_dma.srcsconstrs_1importsconstraints"路径下的mig_dma_tl6678zh.ucf将其导入,再点击Vaildate对管脚进行校验,校验通过后点击OK。
图 149
点击Next,直至出现如下界面,选择Accept。
图 150
点击Next,直至出现如下界面,选择Generate即可完成IP核配置。
图 151
AXI BRAM Controller IP核
本案例使用AXI BRAM Controller IP核创建BRAM控制器。
AXI BRAM Controller IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg078-axi-bram-ctrl.pdf》,具体配置说明如下。
FCLK_CLK1输出200MHz时钟作为BRAM的工作时钟。
图 152
图 153
在BLOCK DESIGN界面的"Address Editor"选项中配置BRAM大小为1MByte。
图 154
配置数据位宽为256,BRAM接口数量为1。
图 155
Block Memory Generator IP核
本案例使用Block Memory Generator IP核创建BRAM资源。
Block Memory Generator IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg058-blk-mem-gen.pdf》,具体配置如下。
图 156
AXI Timer IP核
本案例使用AXI Timer IP核进行计数,用于计算数据传输速率。
AXI Timer IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg079-axi-timer.pdf》,具体配置如下。
图 157
AXI GPIO IP核
本案例使用AXI GPIO IP核读取MIG 7 Series IP核的init_calib_complete引脚的值,从而判断DDR的状态。当MIG 7 Series IP核完成DDR的初始化与读写校验后,init_calib_complete引脚将被拉高。
AXI GPIO IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg144-axi-gpio.pdf》,具体配置如下。
图 158
根据开发文档,通过寄存器GPIO_TRI可将GPIO配置为输入/输出模式;通过寄存器GPIO_DATA可将GPIO配置为高/低电平,以及可读取GPIO的电平状态。
图 159
图 160
图 161
aurora_dma案例
案例功能
案例功能:PS端通过AXI4-Lite总线控制AXI DMA,将数据在BRAM与SFP 光口之间进行搬运,以测试SFP 光口外部回环的数据传输速率与误码率,SFP 光口基于Aurora协议进行数据传输。
图 162 程序功能框图
操作说明
将评估板ZYNQ端启动方式选择拨码开关设置为00(1~2),此档位为JTAG模式。使用Micro USB线连接PC机和评估板CON9(USB TO UART)接口,并正确连接PS端调试串口。使用RS232交叉串口母母线、USB转RS232公头串口线,将评估板PL端调试串口CON19(RS232)连接到PC机的USB接口。
将一个SFP 多模双纤光模块接入SFP1光口,并使用一根光纤线缆将光模块的RX与TX相连接,形成外部回环。SFP1光口使用GTX Quad 110的MGTXRX_3、MGTXTX_3引脚。
图 163
基于PS端裸机测试
加载PS端裸机程序aurora_dma_a9.elf、PL端程序后,即可看到PS端串口调试终端打印SFP 光口外部回环的数据传输测试信息。本案例的GTX带宽配置为10Gbps,即理论速度为1250MB/s。
图 164
可从上图得到如下信息:
- SFP 光口外部回环的数据传输速率为1145MB/s。
- SFP 光口外部回环的数据传输误码率为0。
基于PL端MicroBlaze测试
将本案例PL端Vivado工程可执行文件aurora_dma_xxx.bin复制到评估板文件系统"/lib/firmware/"目录下,再将PL端"baremetal_demobin"目录下的MicroBlaze应用程序aurora_dma_microblaze.bin和PS端应用程序tl_devmem_rw复制到评估板文件系统任意相同路径下。
执行如下命令,加载MicroBlaze应用程序至PS端DDR的0x18000000地址。
Target# ./tl_devmem_rw -w -a 0x18000000 -s 100000 -o byte -f aurora_dma_microblaze.bin
图 165
执行如下命令,加载PL端Vivado工程可执行文件。
Target# echo aurora_dma_xc7z045.bin > /sys/class/fpga_manager/fpga0/firmware
执行上述命令后,可看到PL端串口调试终端打印SFP 光口外部回环的数据传输测试信息。本案例的GTX带宽配置为10Gbps,即理论速度为1250MB/s。
图 166
可从上图得到如下信息:
- SFP 光口外部回环的数据传输速率为1145MB/s。
- SFP 光口外部回环的数据传输误码率为0。
关键代码(PS端裸机/PL端MicroBlaze)
初始化并校准Timer。
图 167
初始化DMA设备。
图 168
使用轮询模式,关闭DMA中断。
图 169
开启基于Aurora协议的GTX数据传输速率与误码率测试,构建每次传输所要发送的数据包。
图 170
分别往DMA设备写入源地址、目的地址与数据量,并启动DMA传输。
图 171
启动DMA传输后,使用Timer进行计时,等待DMA传输完成后计算数据传输速率。
图 172
每次传输完成后,对传输数据进行校验。
图 173
图 174
计算数据传输平均速率与误码率。
图 175
Vivado工程说明
点击BLOCK DESIGN窗口下的"Address Editor"选项,查看IP核地址,地址分配如下图所示。
图 176
模块/IP核配置
AXI DMA IP核
本案例使用AXI DMA(AXI Direct Memory Access) IP核将数据在BRAM与SFP 光口之间进行搬运。
AXI DMA IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg021_axi_dma.pdf》,具体配置说明如下。
- 取消默认勾选的Enable Scatter Gather Engine选项,配置DMA工作模式为直接寄存器模式(Direct Register Mode)。
- Width of Buffer Length Register设置为23,则DMA单次传输最大寻址范围为2^(Width of Buffer Length Register),DMA单次传输最大数据量为2^(Width of Buffer Length Register)*8=8MByte。
- 读/写通道的Memory Map Data Width、Stream Data Width均设置为64,Max Burst Size均设置为256。
- m_axi_mm2s_aclk和m_axi_s2mm_aclk使用由Aurora 64B66B IP核usr_clk_out输出的156.25MHz时钟。
图 177
图 178
AXI BRAM Controller IP核
本案例使用AXI BRAM Controller IP核创建BRAM控制器。
AXI BRAM Controller IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg078-axi-bram-ctrl.pdf》,具体配置说明如下。
FCLK_CLK1输出200MHz时钟作为BRAM的工作时钟。
图 179
图 180
在BLOCK DESIGN界面的"Address Editor"选项中配置BRAM大小为512KByte。
图 181
配置数据位宽为512,BRAM接口数量为1。
图 182