专栏首页FPGA/ARM/DSP技术专栏基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(3)
原创

基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(3)

本文主要介绍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》,具体配置说明如下。

  1. 取消默认勾选的Enable Scatter Gather Engine选项,配置DMA工作模式为直接寄存器模式(Direct Register Mode)。
  2. Width of Buffer Length Register设置为23,则DMA单次传输最大寻址范围为2^(Width of Buffer Length Register),DMA单次传输最大数据量为2^(Width of Buffer Length Register)*8=8MByte。
  3. 读/写通道的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.srcs\constrs_1\imports\constraints\"路径下的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

可从上图得到如下信息:

  1. SFP+光口外部回环的数据传输速率为1145MB/s。
  2. SFP+光口外部回环的数据传输误码率为0。

基于PL端MicroBlaze测试

将本案例PL端Vivado工程可执行文件aurora_dma_xxx.bin复制到评估板文件系统"/lib/firmware/"目录下,再将PL端"baremetal_demo\bin\"目录下的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

可从上图得到如下信息:

  1. SFP+光口外部回环的数据传输速率为1145MB/s。
  2. 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》,具体配置说明如下。

  1. 取消默认勾选的Enable Scatter Gather Engine选项,配置DMA工作模式为直接寄存器模式(Direct Register Mode)。
  2. Width of Buffer Length Register设置为23,则DMA单次传输最大寻址范围为2^(Width of Buffer Length Register),DMA单次传输最大数据量为2^(Width of Buffer Length Register)*8=8MByte。
  3. 读/写通道的Memory Map Data Width、Stream Data Width均设置为64,Max Burst Size均设置为256。
  4. 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

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注作者,阅读全部精彩内容
登录 后参与评论
0 条评论

相关文章

  • 基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(2)

    本文主要介绍ZYNQ PS + PL异构多核案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xil...

    创龙Tronlong123
  • 基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(1)

    本文主要介绍ZYNQ PS + PL异构多核案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xil...

    创龙Tronlong123
  • TMS320C6678开发板 ZYNQ PS + PL异构多核案例开发手册(4)

    本文主要介绍ZYNQ PS + PL异构多核案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xil...

    创龙Tronlong123
  • 「干货」基于TMS320C6678开发板,ZYNQ Linux应用案例开发手册分享

    本篇文章与大家分享基于TMS320C6678开发板的ZYNQ Linux应用案例开发测试分享,内容包含有开发案例基础说明、Linux常用开发案例和Python开...

    创龙Tronlong123
  • TMS320C6678开发板( DSP+Zynq )RTOS综合功能案例,嵌入式必看!

    减少在产品开发过程中对DSP外设接口程序进行整合的难度,我们提供对DSP主要外设接口实现底层初始化的RTOS综合功能测试IFD(Integrated Funct...

    创龙Tronlong123
  • 嵌入式必看!基于TMS320C6678开发板的DSP多核IPC通信开发案例

    分享DSP多核IPC通信案例开发手册,本篇文章内容包含有shmIpcBenchmark案例、qmssIpcBenchmark案例、srioIpcBenchmar...

    创龙Tronlong123
  • 第4章:PS端裸机与FreeRTOS案例开发之led-flash案例

    本次案例用到的是创龙科技的TLZ7x-EasyEVM-S开发板,它是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器...

    创龙Tronlong123
  • 嵌入式硬件开发学习教程——Xilinx Vivado HLS案例 (3)

    本文主要介绍HLS案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xilinx Vivado HL...

    创龙Tronlong123
  • 第6章:PS端裸机与FreeRTOS案例开发之uart-echo案例

    本次案例用到的是创龙科技的TLZ7x-EasyEVM-S开发板,它是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器...

    创龙Tronlong123
  • 第5章:PS端裸机与FreeRTOS案例开发之key-led-demo案例

    本次案例用到的是创龙科技的TLZ7x-EasyEVM-S开发板,它是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器...

    创龙Tronlong123
  • 第12章:PS端裸机与FreeRTOS案例开发之lwIP_Demo案例

    本次案例用到的是创龙科技的TLZ7x-EasyEVM-S开发板,它是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器...

    创龙Tronlong123
  • Xines广州星嵌电子DSP+ARM+FPGA异构多核处理平台C6657 ZYNQ7035/45

    Xines广州星嵌电子研制的XQ6657Z45-EVM 是一款基于 TI KeyStone 架构 C6000 系列 TMS320C6657双核C66x 定点/浮...

    Xines广州星嵌
  • 第7章:PS端裸机与FreeRTOS案例开发之裸机qspi-flash案例

    本次案例用到的是创龙科技的TLZ7x-EasyEVM-S开发板,它是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器...

    创龙Tronlong123
  • 源码公开!基于C6678+Zynq-7045的目标追踪视觉方案分享

    随着现代科技的高速发展,机器视觉技术在无人机、安防监控、工业检测、ADAS高级驾驶辅助系统、医疗诊断等方面有着广泛的应用,并且更多的场合中要求能实现高算力、高速...

    创龙Tronlong123
  • 嵌入式硬件开发学习教程——Xilinx Vivado HLS案例 (流程说明)

    本文主要介绍HLS案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xilinx Vivado HL...

    创龙Tronlong123
  • PYNQ上手笔记 | ②PL端和PS端的独立开发

    在上一篇中提到,Pynq是为了降低开发人员的门槛,但是作为一个学习嵌入式开发的学生,当然要一步一个脚印打好基础,所以选择从Zynq入手学习,等跑起来Linux系...

    Mculover666

扫码关注腾讯云开发者

领取腾讯云代金券