网站首页 > 技术文章 正文
本文主要介绍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等接口。
前 言
本文案例位于产品资料“4-软件资料\Demo\ZYNQ_Demo\All-Programmable-SoC-demos\”目录下。案例包含PL端Vivado工程,主要使用Xilinx提供的标准IP核配置PL端资源实现接口扩展,同时包含PS端裸机/Linux程序、PL端MicroBlaze应用程序。案例目录详细说明见下表:
表 1
目录 | 目录 | 文件/目录 | 说明 |
hw | bin | xxx_xc7z045.bin/xxx_xc7z045.bit | xc7z045 PL端可执行文件 |
xxx_xc7z100.bin/xxx_xc7z100.bit | xc7z100 PL端可执行文件 | ||
project | xxx_xc7z045 | xc7z045 PL端Vivado工程 | |
xxx_xc7z100 | xc7z100 PL端Vivado工程 | ||
sw | baremetal_demo/FreeRTOS | bin | PS端裸机/PS端FreeRTOS/PL端MicroBlaze可执行文件 |
project | PS端裸机/PS端FreeRTOS/PL端MicroBlaze工程 | ||
linux_system | image | Linux脚本程序、动态设备树镜像文件 | |
src | 动态设备树源文件 |
在进行本文操作前,请先参考“ZYNQ PS端裸机与FreeRTOS案例开发手册”、“ZYNQ PL端案例开发手册”、“ZYNQ PL端功能动态设备树使用方法”,熟悉工程编译、程序加载与固化、动态设备树加载等方法。
案例使用Block Design + Verilog语言方式进行开发,可在Vivado界面点击"IP INTEGRATOR -> Open Block Design"打开BLOCK DESIGN开发界面。
可点击"Sources -> Constraints",双击打开.xdc约束文件。
处理器硬件资源详细开发说明可查阅产品资料“6-开发参考资料\数据手册\核心板元器件\ZYNQ\”目录下的《ug585-Zynq-7000-TRM.pdf》文档。
视频相关案例说明,请查阅视频案例开发手册。
axi_gpio_led_demo案例
案例功能
案例功能:PS端通过AXI4-Lite总线发送命令至PL端AXI GPIO IP核,IP核再根据命令控制评估底板PL端LED5的状态。
操作说明
基于裸机测试
加载PS端裸机程序、PL端程序后,即可看到评估底板的LED5每隔0.5s亮灭一次。
基于Linux测试
将本案例的动态设备树镜像文件pl.dtbo和PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载设备树文件和PL端可执行文件。
Target# mount -t configfs configfs /configfs
Target# mkdir /configfs/device-tree/overlays/full
Target# echo pl.dtbo > /configfs/device-tree/overlays/full/path
由上图可知PL端实现的GPIO控制器为905。
请执行如下命令,配置GPIO为输出模式。
Target# ls /sys/class/gpio/
Target# echo 905 > /sys/class/gpio/export
Target# echo out > /sys/class/gpio/gpio905/direction
执行如下命令,即可控制评估底板LED5的亮灭。
Target# echo 1 > /sys/class/gpio/gpio905/value
Target# echo 0 > /sys/class/gpio/gpio905/value
Vivado工程说明
进入BLOCK DESIGN开发界面,双击IP核框图,可查看IP核的具体配置信息。
点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x41200000,PS端可通过该地址对IP核进行控制。
IP核配置
AXI GPIO IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg144-axi-gpio.pdf》。根据文档,通过寄存器GPIO_TRI可将GPIO配置为输入/输出模式;通过寄存器GPIO_DATA可将GPIO配置为高/低电平,以及可读取GPIO的电平状态。
axi_timer_pwm_demo案例
案例功能
案例功能:PS端通过AXI4-Lite总线发送命令至PL端AXI Timer IP核,IP核再根据命令通过PWM方式控制评估底板PL端LED5的状态。
操作说明
基于裸机测试
加载PS端裸机程序、PL端程序后,即可看到评估底板的LED5约每隔0.5s亮灭一次。
基于Linux测试
将本案例的PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。
Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware
执行如下命令,通过IP核寄存器配置PWM周期和PWM占空比。
Target# devmem 0x42800004 w 100000000 //配置TLR0寄存器的值为100000000,则PWM周期=(100000000+2)x(1/100MHz),约为1s
Target# devmem 0x42800014 w 50000000 //配置TLR1寄存器的值为50000000,则则PWM占高值=(50000000+2)x(1/100MHz),约为0.5s,PWM占空比=(1-0.5s/1s)x100%,约为50%
执行如下命令设置Timer 0与Timer 1为PWM向下计数模式。
Target# devmem 0x42800000 w 0x696
Target# devmem 0x42800010 w 0x696
命令执行后,即可看到评估底板的LED5每隔0.5s亮灭一次。
Vivado工程说明
点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x42800000,PS端可通过该地址对IP核进行控制。
IP核配置
AXI Timer IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的pg079-axi-timer.pdf。根据文档,通过寄存器TLR0(Timer 0)可配置PWM周期;通过寄存器TLR1(Timer 1)可配置PWM占空比。
如采用PWM向下计数模式(count down),PWM周期与占空比的计算公式如下,公式中的100MHz为IP核所接的s_axi_aclk时钟。
- PWM周期=(TLR0+2)x(1/100MHz)
- PWM占高值=(TLR1+2)x(1/100MHz)
- PWM占空比=(1-PWM占高值/PWM周期)x100%
axi_uart_demo案例
案例功能
案例功能:PS端通过AXI4-Lite总线发送命令至PL端AXI Uartlite IP核,IP核再根据命令控制评估底板PL端串口进行数据收发。
CON19(RS232)通过SP3232EEY串口电平转换芯片引出PL端串口,TX和RX引脚分别为K10、L10,电平为3.3V。
操作说明
基于裸机测试
请使用Micro USB线连接PC机和评估板PS端串口CON9(USB TO UART),使用USB转RS232公头串口线和RS232交叉串口母线连接评估板的PL端调试串口CON19和PC机。
打开设备管理器,确认评估板PS端和PL端调试串口对应的COM端口号。打开串口调试终端SecureCRT,选择对应的COM端口号,设置波特率为115200,8N1,无校验位,并建立串口连接。
加载PS端裸机程序、PL端程序后,即可看到PS端串口调试终端打印如下信息。
在PL端串口调试终端点击"View -> Command (Chat) Window",选中并打开"Command (Chat) Window"窗口。在窗口中输入十个字符,再按回车键进行发送。PS端接收到PL端串口的字符后,会将字符通过PL端串口调试终端进行回显。
此时,PS端串口调试终端将会打印通过PL端串口接收到的字符。
基于Linux测试
将本案例的动态设备树镜像文件pl.dtbo和PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载设备树文件和PL端可执行文件。
Target# mount -t configfs configfs /configfs
Target# mkdir /configfs/device-tree/overlays/full
Target# echo pl.dtbo > /configfs/device-tree/overlays/full/path
此时可在"/dev/"目录下看到串口设备节点ttyUL0。
Target# ls /dev/ttyUL0
在PS端串口调试终端执行如下命令,向PL端串口发送字符。
Target# echo "tronlong" > /dev/ttyUL0
此时,PL端串口调试终端显示PS端向PL端串口发送的字符。
在PS端串口调试终端执行如下命令,监听从PL端串口接收到的字符。
Target# cat /dev/ttyUL0
在PL端串口调试终端点击"View -> Command (Chat) Window",选中并打开"Command (Chat) Window"窗口。在窗口中输入字符,再按回车键进行发送。PS端接收到PL端串口的字符后,会将字符通过PL端串口调试终端进行回显。
此时,PS端串口调试终端将会打印通过PL端串口接收到的字符。
Vivado工程说明
AXI Uartlite IP核(axi_uartlite_0)设置的串口波特率为115200,数据位为8bit。
进入BLOCK DESIGN开发界面,双击IP核框图,可查看IP核的具体配置信息。
点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x42C00000,PS端可通过该地址对IP核进行控制。
IP核配置
AXI Uartlite IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg142-axi-uartlite.pdf》。根据文档,通过读寄存器Rx FIFO可获取PL端串口接收到的数据;通过写寄存器Tx FIFO向PL端串口发送数据。
axi_xadc_demo案例
案例功能
案例功能:PS端通过AXI4-Lite总线发送命令至PL端XADC Wizard IP核,IP核再根据命令通过内部XADC采集片上电压、温度等参数。
操作说明
基于裸机测试
加载PS端裸机程序、PL端程序后,即可看到PS端串口调试终端打印相关参数测量值。
评估底板电路已设计接入0.46875V的测试电压,与测试结果基本一致。
基于Linux测试
将本案例的PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。
Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware
将案例目录下的"sw\linux_system\image\xadc_app.sh"脚本文件复制到评估板文件系统,并执行如下命令显示参数测量值。
Target# ./xadc_app.sh
评估底板电路已设计接入0.46875V的测试电压,与测试结果基本一致。
温度、电压换算公式请查阅产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《ug480_7Series_XADC.pdf》。
- 片上内部温度:40454*503.975/65536–273.15=37.943211℃
- PL端内部核心电压:33347/65536*3=1.526505V
备注:由于寄存器读取的数据按16位进行换算,因此电压换算公式中分母的数值应该按65536(2的16次方),而非4096(2的12次方)。
Vivado工程说明
进入BLOCK DESIGN开发界面,双击IP核框图,可查看IP核的具体配置信息。
参数说明
- TEMPERATURE:片上内部温度。
- VCCINT:PL端内部核心电压。
- VCCAUX:PL端辅助电压。
- VCCBRAM:PL端BRAM电压。
- VCCPINT:PS端内部核心电压。
- VCCPAUX:PS端辅助电压。
- VCCDDRO:DDR工作电压。
- VP/VN:模拟输入引脚。
点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x43C00000,PS端可通过该地址对IP核进行控制。
IP核配置
XADC Wizard IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg091-xadc-wiz.pdf》。根据文档,通过读寄存器可获取对应参数测量值。
emio_gpio_led_demo案例
案例功能
案例功能:PS端通过EMIO方式控制评估底板LED5的状态。
Zynq-7000的GPIO分为MIO(multiplexed I/O)和EMIO(extended multiplexed I/O)两种。
MIO:PS端多功能IO接口,IO与PS端连接,每个IO可根据需求配置为GPIO、SPI、UART、TIMER、Ethernet、USB等多种不同功能。由于MIO对PL端不可见,因此PL端无法使用MIO引脚。
EMIO:MIO扩展接口,IO与PL端连接。由于EMIO对PS端、PL端均可见,因此两者均可使用EMIO引脚。一般情况下,如PS端MIO资源无法满足需求时,PS端可通过EMIO方式进行接口拓展。EMIO的使用与MIO相似,区别在于EMIO需使用Vivado约束文件对管脚进行分配。
MIO分配在Bank0和Bank1,EMIO分配在Bank2和Bank3。Bank1是22bit,其他Bank都是32bit,因此MIO有54个管脚,EMIO有64个管脚。MIO管脚号为0~53,EMIO的管脚号为54~117。
操作说明
基于裸机测试
加载PS端裸机程序、PL端程序后,即可看到评估底板的LED5每隔0.5s亮灭一次。
基于Linux测试
将本案例的PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。
Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware
请执行如下命令,设置GPIO为输出模式。
Target# echo 960 > /sys/class/gpio/export
Target# echo out > /sys/class/gpio/gpio960/direction
执行如下命令,即可控制评估底板LED5的亮灭。
Target# echo 1 > /sys/class/gpio/gpio960/value
Target# echo 0 > /sys/class/gpio/gpio960/value
Vivado工程说明
进入BLOCK DESIGN开发界面,双击ZYNQ7 Processing System IP核框图,再点击"MIO Configuration -> GPIO",由于本案例使用一个EMIO引脚,因此可看到EMIO GPIO(Width)选项值为1,最大值可为64。
MIO0对应管脚编号为906,EMIO0对应管脚编号为960(906+54)。
猜你喜欢
- 2024-11-24 「论文集锦」激光技术应用——《电子技术应用》优秀论文集锦
- 2024-11-24 基于MCAPI的多核软件开发方法
- 2024-11-24 硬件工程师必读!多款ARM、FPGA、DSP开发板/核心板测试使用大全
- 2024-11-24 基于多核DSP互联架构的SAR处理研究与设计
- 2024-11-24 基于TL6678F-EasyEVM评估板——DSP算法案例开发手册
- 2024-11-24 「方案分享」基于C6678+Zynq-7045 目标追踪视觉技术
- 2024-11-24 SAR成像的距离多普勒算法(RDA)的硬件实现
- 2024-11-24 AD9361、AD9613高速AD采集处理开发案例,基于C6678+Kintex-7
- 2024-11-24 基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(3)
- 2024-11-24 TMS320C6678开发板 ZYNQ PS + PL异构多核案例开发手册(4)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)