网络知识 娱乐 基于TMS320C6678开发板的ZYNQ PS + PL异构多核案例开发手册(2)

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

本文主要介绍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开发板的ZYNQ PS + PL异构多核案例开发手册(2)

本次测试板卡为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端调试串口。

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

图 59


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

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

图 60

操作说明

基于裸机测试

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

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

图 61

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

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

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

图 62

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

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

图 63


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

图 64


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

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

图 65


基于Linux测试

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

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

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

图 66


UART0对应的设备节点为"/dev/ttyPS1"。

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

图 67


将产品资料“4-软件资料DemoZYNQ_Demotl-linux-applicationbase-demostl_uart_rwbin”目录下的可执行程序tl_uart_rw复制到评估板文件系统。

在PS端串口调试终端执行如下命令,进行串口数据读操作。

Target# ./tl_uart_rw -d /dev/ttyPS1 -r -s 8

在PL端串口调试终端点击"View -> Command (Chat) Window",选中并打开"Command (Chat) Window"窗口。在窗口中输入8个字符,再按回车键进行发送。

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

图 68


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

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

图 69


在PS端串口调试终端执行如下命令,进行串口数据写操作,数据已在程序中定义。

Target# ./tl_uart_rw -d /dev/ttyPS1 -w -s 8

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

图 70


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

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

图 71


Vivado工程说明

进入BLOCK DESIGN开发界面,双击ZYNQ7 Processing System IP核框图,再点击"MIO Configuration",在I/O Peripherals下可看到UART0已配置成EMIO模式。

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

图 72


axi_video_display_demo案例

案例功能

案例功能:

  1. 支持从PS端使用GStreamer或PL端使用Video Test Pattern Generator IP核产生图像到显示屏上显示。
  2. PL端主要负责产生分辨率为1080P60的时序、将视频流转换成为并行的行场视频信号输出到显示屏上显示。
  3. PS端实现FrameBuffer驱动与触摸功能。

操作说明

如需测试LCD显示屏,请将创龙科技的7英寸LCD显示屏TL070A通过FFC软排线连接至评估板CON21接口。如需测试LVDS显示屏,请将LVDS显示屏的屏幕接口连接至评估板的LVDS插针处,并将LVDS显示屏的背光接口连接至评估板的Backlight插针处,同时评估板J1跳线帽选择2.5V档位,以配置FMC IO的BANK电压为2.5V。

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

图 73


LCD显示屏测试

将本案例的动态设备树镜像文件axi-video-display-480p.dtbo(显示功能)、touch-screen-ads7846.dtbo(触摸功能)和PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载设备树文件axi-video-display-480p.dtbo和PL端可执行文件。

Target# mount -t configfs configfs /configfs

Target# mkdir /configfs/device-tree/overlays/lcd

Target# echo axi-video-display-480p.dtbo > /configfs/device-tree/overlays/lcd/path

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

图 74


再执行如下命令,加载设备树文件touch-screen-ads7846.dtbo。

Target# mkdir /configfs/device-tree/overlays/touch-screen

Target# echo touch-screen-ads7846.dtbo > /configfs/device-tree/overlays/touch-screen/path

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

图 75


命令执行后,可看到设备节点"/dev/fb0"与"/dev/input/touchscreen0"设备节点。

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

图 76


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

图 77


执行如下命令进行显示测试,使用的工具为GStreamer的gst-launch,设置的分辨率为480P(800*480),输出为mode0测试图像。

Target# gst-launch-1.0 -v videotestsrc pattern=0 num-buffers=1 ! 'video/x-raw, format=(string)BGRA, width=(int)800, height=(int)480' ! filesink location=/dev/fb0

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

图 78


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

图 79


执行如下命令,使能环境变量并执行校准程序。

Target# source /etc/profile.d/tslib.sh

Target# ts_calibrate

命令执行命令后,LCD将会弹出校准界面。请依次点击校准准星,在连续点击五次之后,将会在评估板文件系统"/etc/"目录下生成触摸屏校准文件pointercal,校准后的信息记录在pointercal文件中。

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

图 80


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

图 81


LCD屏幕的背光支持8级变化,亮度级数为1~8,关闭为0,最亮为8。

执行如下命令,查看当前亮度。

Target# cat /sys/class/backlight/backlight/brightness

执行如下命令,调整背光亮度。

Target# echo 5 > /sys/class/backlight/backlight/brightness

执行如下命令,查看最高亮度级数。

Target# cat /sys/class/backlight/backlight/max_brightness

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

图 82


LVDS显示屏测试

将本案例的动态设备树镜像文件axi-video-display-1080p.dtbo(显示功能)和PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载设备树文件axi-video-display-1080p.dtbo和PL端可执行文件。

Target# mount -t configfs configfs /configfs

Target# mkdir /configfs/device-tree/overlays/lvds

Target# echo axi-video-display-1080p.dtbo > /configfs/device-tree/overlays/lvds/path

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

图 83


加载完成后,文件系统将会生成"/dev/fb0"设备节点。

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

图 84


执行如下命令进行显示测试,使用的工具为GStreamer的gst-launch,本次测试使用友达光电的15.6英寸LVDS显示屏G156HTN02.0,设置的分辨率为1080P(1920*1080),输出为mode0测试图像。

Target# gst-launch-1.0 -v videotestsrc pattern=0 num-buffers=1 ! 'video/x-raw, format=(string)BGRA, width=(int)1920, height=(int)1080' ! filesink location=/dev/fb0

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

图 85


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

图 86


Vivado工程说明

VTC IP核默认产生分辨率为1080P60的时序,Video Test Pattern Generator IP核用于产生测试视频,AXI VDMA IP核用于搬运Video Test Pattern Generator IP核产生的或用户的视频数据,AXI-Stream to video out IP核将Video Timing Controller和AXI VDMA IP核输出的视频流转换成为并行的行场视频信号,行场视频信号通过LCD接口输出到显示屏。

SPI总线通过EMIO方式与显示屏的触摸芯片进行连接,PS端TTC定时器通过EMIO方式输出显示屏的背光PWM。

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

图 87


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

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

图 88


模块/IP核配置

Video Test Pattern Generator IP核

本案例使用Video Test Pattern Generator IP核产生测试视频。

Video Test Pattern Generator IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg103-v-tpg.pdf》。根据文档,通过寄存器control可使能IP核;通过寄存器active_height可设置视频信号高度;通过寄存器active_width可设置视频信号位宽;通过寄存器background_pattern_id可选择输出的背景图像。

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

图 89


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

图 90


VTC IP核

VTC IP核用于产生分辨率为1080P60的时序。

VTC(Video Timing Controller) IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg016_v_tc.pdf》,具体配置如下。

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

图 91


AXI-Stream to Video Out IP核

本案例使用AXI-Stream to video out IP核将视频流转换成为并行的行场视频信号。

AXI-Stream to Video Out IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg044_v_axis_vid_out.pdf》。AXI-Stream to Video Out IP核配置Video Format为RGB、Pixels Per Clock为1,数据位宽为24bit。

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

图 92


AXI VDMA IP核

本案例使用AXI VDMA IP核进行视频数据缓存。

AXI VDMA(AXI Video Direct Memory Access) IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg020_axi_vdma.pdf》。AXI VDMA IP核中的S2MM将视频传到DDR中,MM2S从DDR中获取视频。本案例IP核使用3个Frame Buffers,Stream数据位宽为32bit,Memory Map数据位宽为64bit。

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

图 93


配置VDMA为读写跟随模式。

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

图 94


Clocking Wizard IP核

Clocking Wizard IP核使能输出时钟频率动态配置功能。

Clocking Wizard IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg065_clk_wiz.pdf》,具体配置如下。

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

图 95


clk_out配置默认输出频率为148.5MHz,可通过设备树进行动态修改。

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

图 96


AXI4 Subset Converter IP核

本案例使用AXI4 Subset Converter IP核将32bit ARGB视频格式数据转换为24bit RGB,并输出给v_axi4s_vid_out IP核。

AXI4 Subset Converter IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg085-axi4stream-infrastructure.pdf》,具体配置如下。

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

图 97


lvds_n_x_1to7_sdr_tx模块

本案例使用lvds_n_x_1to7_sdr_tx模块将并行数据转化成差分数据,使用SDR模式,在时钟的单边沿传输数据。

lvds_n_x_1to7_sdr_tx模块开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《xapp585-lvds-source-synch-serdes-clock-multiplication.pdf》,具体配置如下。

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

图 98


lvds_n_x_1to7_sdr_tx模块配置为双通道,每个通道的数据差分对数量为4。

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

图 99


关键代码解释

定义模块接口。

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

图 100


调用时钟生成模块,生成74.25MHz的LVDS发送时钟。1/74.25MHz≈13.468ns,CLKIN_PERIOD配置为13.468。

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

图 101

调用LVDS SDR发送模块。

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

图 102


dual_pixel_24bpp_lvds_mapping模块

本案例使用dual_pixel_24bpp_lvds_mapping模块将色彩深度为8bit的RGB数据和行场同步信号,按LVDS视频标准的格式排列后输出并行数据。

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

图 103


关键代码解释

定义模块接口。

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

图 104

将视频的RGB数据和行场同步信号,按LVDS视频标准的格式排列。

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

图 105


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

图 106


合并奇偶像素的数据输出。

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

图 107


设备树配置说明

7英寸LCD显示屏显示功能的动态设备树源文件为案例目录"swlinux_systemsrcaxi-video-display-480p.dtsi"。

15.6英寸LVDS显示屏显示功能的动态设备树源文件为案例目录"swlinux_systemsrcaxi-video-display-1080p.dtsi"。

Clocking Wizard IP核配置如下图所示,支持多路时钟输出,并可动态配置输出时钟。

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

图 108


显示屏的时序配置如下图所示,如需使用其他显示屏,可修改为对应时序。

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

图 109 7英寸LCD显示屏


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

图 110 15.6英寸LVDS显示屏


FrameBuffer驱动基于Xilinx DRM框架实现,DRM配置如下图所示。详细说明可参考内核源码"Documentation/devicetree/bindings/drm/xilinx/"目录下的xilinx_drm.txt文档。

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

图 111

使用PS端TTC定时器通过EMIO方式输出PWM,频率为50KHz。

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

图 112

触摸功能的动态设备树源文件为案例目录"swlinux_systemsrcaxi-video-display-480p.dtsi",触摸中断管脚使用EMIO方式连接。

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

图 113

申请IP核License

如需重新编译工程或打开Video Test Pattern Generator IP核,需在Xilinx官网申请Video Test Pattern Generator IP核的免费License,并将其正确导入。License申请与导入方法,请查阅调试工具安装文档相关章节,其他IP核无需License。

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

图 114


成功导入后,可在View License Status窗口发现新添加的License。

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

图 115


emio_can_demo案例

案例功能

案例功能:PS端通过EMIO方式使用CAN0进行数据收发。

CON17通过CAN总线隔离芯片引出PL端IO,TX和RX引脚分别为J10、J9,电平为3.3V。

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

图 116


操作说明

使用USB转CAN模块连接评估板CAN接口和PC机USB接口,如下图所示。

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

图 117


参照调试工具安装文档安装USB转CAN驱动和ECAN Tools调试软件,双击打开ECAN Tools软件,选择设备类型,然后点击“打开设备”。

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

图 118


打开ECAN Tools,界面如下图所示。

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

图 119


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

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

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

图 120


CAN0对应的设备节点为"/sys/class/net/can0"。

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

图 121


进入评估板文件系统,使用文件系统自带的canconfig工具设置波特率,并启动CAN接口。

Target# canconfig can0 stop

Target# canconfig can0 bitrate 125000

Target# canconfig can0 start

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

图 122

请执行如下命令,评估板发送帧ID和数据。

Target# cansend can0 -i 0x123 0xaa 0x5a

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

图 123


ECAN Tools接收到评估板发送的帧ID和数据。

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

图 124


请执行如下命令,评估板等待接收数据。

Target# candump

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

图125

在ECAN Tools点击“发送”按钮,向评估板发送一帧数据。

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

图 126


评估板接收到ECAN Tools发送的帧ID和数据。

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

图 127


Vivado工程说明

进入BLOCK DESIGN开发界面,双击ZYNQ7 Processing System IP核框图,再点击"MIO Configuration -> CAN0",可看到CAN0已配置成EMIO模式。

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

图 128