前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(1)

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

原创
作者头像
创龙科技Tronlong
发布2022-07-25 10:59:21
1.2K0
发布2022-07-25 10:59:21
举报

本文主要介绍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开发界面。

图 1

可点击"Sources -> Constraints",双击打开.xdc约束文件。

图 2

处理器硬件资源详细开发说明可查阅产品资料“6-开发参考资料\数据手册\核心板元器件\ZYNQ\”目录下的《ug585-Zynq-7000-TRM.pdf》文档。

视频相关案例说明,请查阅视频案例开发手册。

axi_gpio_led_demo案例

案例功能

案例功能:PS端通过AXI4-Lite总线发送命令至PL端AXI GPIO IP核,IP核再根据命令控制评估底板PL端LED5的状态。

图 3

操作说明

基于裸机测试

加载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

图 4

由上图可知PL端实现的GPIO控制器为905。

请执行如下命令,配置GPIO为输出模式。

Target# ls /sys/class/gpio/

Target# echo 905 > /sys/class/gpio/export

Target# echo out > /sys/class/gpio/gpio905/direction

图 5

执行如下命令,即可控制评估底板LED5的亮灭。

Target# echo 1 > /sys/class/gpio/gpio905/value

Target# echo 0 > /sys/class/gpio/gpio905/value

图 6

Vivado工程说明

进入BLOCK DESIGN开发界面,双击IP核框图,可查看IP核的具体配置信息。

图 7

点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x41200000,PS端可通过该地址对IP核进行控制。

图 8

IP核配置

AXI GPIO IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg144-axi-gpio.pdf》。根据文档,通过寄存器GPIO_TRI可将GPIO配置为输入/输出模式;通过寄存器GPIO_DATA可将GPIO配置为高/低电平,以及可读取GPIO的电平状态。

图 9

图 10

图 11

axi_timer_pwm_demo案例

案例功能

案例功能:PS端通过AXI4-Lite总线发送命令至PL端AXI Timer IP核,IP核再根据命令通过PWM方式控制评估底板PL端LED5的状态。

图 12

操作说明

基于裸机测试

加载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

图 13

执行如下命令,通过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%

图 14

执行如下命令设置Timer 0与Timer 1为PWM向下计数模式。

Target# devmem 0x42800000 w 0x696

Target# devmem 0x42800010 w 0x696

图 15

命令执行后,即可看到评估底板的LED5每隔0.5s亮灭一次。

Vivado工程说明

点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x42800000,PS端可通过该地址对IP核进行控制。

图 16

IP核配置

AXI Timer IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的pg079-axi-timer.pdf。根据文档,通过寄存器TLR0(Timer 0)可配置PWM周期;通过寄存器TLR1(Timer 1)可配置PWM占空比。

图 17

图 18

如采用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%

图 19

图 20

axi_uart_demo案例

案例功能

案例功能:PS端通过AXI4-Lite总线发送命令至PL端AXI Uartlite IP核,IP核再根据命令控制评估底板PL端串口进行数据收发。

CON19(RS232)通过SP3232EEY串口电平转换芯片引出PL端串口,TX和RX引脚分别为K10、L10,电平为3.3V。

图 21

操作说明

基于裸机测试

请使用Micro USB线连接PC机和评估板PS端串口CON9(USB TO UART),使用USB转RS232公头串口线和RS232交叉串口母线连接评估板的PL端调试串口CON19和PC机。

图 22

打开设备管理器,确认评估板PS端和PL端调试串口对应的COM端口号。打开串口调试终端SecureCRT,选择对应的COM端口号,设置波特率为115200,8N1,无校验位,并建立串口连接。

加载PS端裸机程序、PL端程序后,即可看到PS端串口调试终端打印如下信息。

图 23

在PL端串口调试终端点击"View -> Command (Chat) Window",选中并打开"Command (Chat) Window"窗口。在窗口中输入十个字符,再按回车键进行发送。PS端接收到PL端串口的字符后,会将字符通过PL端串口调试终端进行回显。

图 24

图 25

此时,PS端串口调试终端将会打印通过PL端串口接收到的字符。

图 26

基于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

图 27

此时可在"/dev/"目录下看到串口设备节点ttyUL0。

Target# ls /dev/ttyUL0

图 28

在PS端串口调试终端执行如下命令,向PL端串口发送字符。

Target# echo "tronlong" > /dev/ttyUL0

图 29

此时,PL端串口调试终端显示PS端向PL端串口发送的字符。

图 30

在PS端串口调试终端执行如下命令,监听从PL端串口接收到的字符。

Target# cat /dev/ttyUL0

图 31 PS端串口

在PL端串口调试终端点击"View -> Command (Chat) Window",选中并打开"Command (Chat) Window"窗口。在窗口中输入字符,再按回车键进行发送。PS端接收到PL端串口的字符后,会将字符通过PL端串口调试终端进行回显。

图 32

图 33

此时,PS端串口调试终端将会打印通过PL端串口接收到的字符。

图 34

Vivado工程说明

AXI Uartlite IP核(axi_uartlite_0)设置的串口波特率为115200,数据位为8bit。

进入BLOCK DESIGN开发界面,双击IP核框图,可查看IP核的具体配置信息。

图 35

点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x42C00000,PS端可通过该地址对IP核进行控制。

图 36

IP核配置

AXI Uartlite IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg142-axi-uartlite.pdf》。根据文档,通过读寄存器Rx FIFO可获取PL端串口接收到的数据;通过写寄存器Tx FIFO向PL端串口发送数据。

图 37

图 38

图 39

axi_xadc_demo案例

案例功能

案例功能:PS端通过AXI4-Lite总线发送命令至PL端XADC Wizard IP核,IP核再根据命令通过内部XADC采集片上电压、温度等参数。

操作说明

基于裸机测试

加载PS端裸机程序、PL端程序后,即可看到PS端串口调试终端打印相关参数测量值。

图 40

评估底板电路已设计接入0.46875V的测试电压,与测试结果基本一致。

图 41

基于Linux测试

将本案例的PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。

Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware

图 42

将案例目录下的"sw\linux_system\image\xadc_app.sh"脚本文件复制到评估板文件系统,并执行如下命令显示参数测量值。

Target# ./xadc_app.sh

图 43

评估底板电路已设计接入0.46875V的测试电压,与测试结果基本一致。

图 44

温度、电压换算公式请查阅产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《ug480_7Series_XADC.pdf》。

图 45

图 46

  1. 片上内部温度:40454*503.975/65536–273.15=37.943211℃
  2. PL端内部核心电压:33347/65536*3=1.526505V

备注:由于寄存器读取的数据按16位进行换算,因此电压换算公式中分母的数值应该按65536(2的16次方),而非4096(2的12次方)。

Vivado工程说明

进入BLOCK DESIGN开发界面,双击IP核框图,可查看IP核的具体配置信息。

图 47

图 48

参数说明

  1. TEMPERATURE:片上内部温度。
  2. VCCINT:PL端内部核心电压。
  3. VCCAUX:PL端辅助电压。
  4. VCCBRAM:PL端BRAM电压。
  5. VCCPINT:PS端内部核心电压。
  6. VCCPAUX:PS端辅助电压。
  7. VCCDDRO:DDR工作电压。
  8. VP/VN:模拟输入引脚。

点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址为0x43C00000,PS端可通过该地址对IP核进行控制。

图 49

IP核配置

XADC Wizard IP核开发文档为产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《pg091-xadc-wiz.pdf》。根据文档,通过读寄存器可获取对应参数测量值。

图 50

emio_gpio_led_demo案例

案例功能

案例功能:PS端通过EMIO方式控制评估底板LED5的状态。

图 51

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。

图 52

操作说明

基于裸机测试

加载PS端裸机程序、PL端程序后,即可看到评估底板的LED5每隔0.5s亮灭一次。

图 53

基于Linux测试

将本案例的PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。

Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware

图 54

请执行如下命令,设置GPIO为输出模式。

Target# echo 960 > /sys/class/gpio/export

Target# echo out > /sys/class/gpio/gpio960/direction

图 55

执行如下命令,即可控制评估底板LED5的亮灭。

Target# echo 1 > /sys/class/gpio/gpio960/value

Target# echo 0 > /sys/class/gpio/gpio960/value

图 56

Vivado工程说明

进入BLOCK DESIGN开发界面,双击ZYNQ7 Processing System IP核框图,再点击"MIO Configuration -> GPIO",由于本案例使用一个EMIO引脚,因此可看到EMIO GPIO(Width)选项值为1,最大值可为64。

图 57

MIO0对应管脚编号为906,EMIO0对应管脚编号为960(906+54)。

图 58

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前 言
  • axi_gpio_led_demo案例
  • 案例功能
  • 操作说明
  • 基于裸机测试
  • 基于Linux测试
  • Vivado工程说明
  • IP核配置
  • axi_timer_pwm_demo案例
  • 案例功能
  • 操作说明
  • 基于裸机测试
  • 基于Linux测试
  • Vivado工程说明
  • IP核配置
  • axi_uart_demo案例
  • 案例功能
  • 操作说明
  • 基于裸机测试
  • 基于Linux测试
  • Vivado工程说明
  • IP核配置
  • axi_xadc_demo案例
  • 案例功能
  • 操作说明
  • 基于裸机测试
  • 基于Linux测试
  • Vivado工程说明
  • IP核配置
  • emio_gpio_led_demo案例
  • 案例功能
  • 操作说明
  • 基于裸机测试
  • 基于Linux测试
  • Vivado工程说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档