本文主要介绍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等接口。
emio_uart_demo案例
案例功能
案例功能:PS端通过EMIO方式使用UART0串口进行数据收发。
本案例默认将UART1作为PS端调试串口。
图 59
CON19(RS232)通过SP3232EEY串口电平转换芯片引出PL端串口(EMIO UART0),TX和RX引脚分别为K10、L10,电平为3.3V。
图 60
操作说明
基于裸机测试
请使用Micro USB线连接PC机和评估板PS端串口CON9(USB TO UART),使用USB转RS232公头串口线和RS232交叉串口母线连接评估板的PL端调试串口CON19和PC机。
图 61
打开设备管理器,确认评估板PS端和PL端串口对应的COM端口号。打开串口调试终端SecureCRT,选择对应的COM端口号,设置波特率为115200,8N1,无校验位,并建立串口连接。
加载PS端裸机程序、PL端程序后,即可看到PS端串口调试终端打印如下信息。
图 62
在PL端串口调试终端点击"View -> Command (Chat) Window",选中并打开"Command (Chat) Window"窗口。在窗口中输入十个字符,再按回车键进行发送。PS端接收到PL端串口的字符后,会将字符通过PL端串口调试终端进行回显。
图 63
图 64
此时,PS端串口调试终端将会打印通过PL端串口接收到的字符。
图 65
基于Linux测试
将本案例的PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。
Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware
图 66
UART0对应的设备节点为"/dev/ttyPS1"。
图 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个字符,再按回车键进行发送。
图 68
此时,PS端串口调试终端将会打印通过PL端串口接收到的字符。
图 69
在PS端串口调试终端执行如下命令,进行串口数据写操作,数据已在程序中定义。
Target# ./tl_uart_rw -d /dev/ttyPS1 -w -s 8
图 70
此时,PL端串口调试终端显示PS端向PL端串口发送的字符。
图 71
Vivado工程说明
进入BLOCK DESIGN开发界面,双击ZYNQ7 Processing System IP核框图,再点击"MIO Configuration",在I/O Peripherals下可看到UART0已配置成EMIO模式。
图 72
axi_video_display_demo案例
案例功能
案例功能:
- 支持从PS端使用GStreamer或PL端使用Video Test Pattern Generator IP核产生图像到显示屏上显示。
- PL端主要负责产生分辨率为1080P60的时序、将视频流转换成为并行的行场视频信号输出到显示屏上显示。
- PS端实现FrameBuffer驱动与触摸功能。
操作说明
如需测试LCD显示屏,请将创龙科技的7英寸LCD显示屏TL070A通过FFC软排线连接至评估板CON21接口。如需测试LVDS显示屏,请将LVDS显示屏的屏幕接口连接至评估板的LVDS插针处,并将LVDS显示屏的背光接口连接至评估板的Backlight插针处,同时评估板J1跳线帽选择2.5V档位,以配置FMC IO的BANK电压为2.5V。
图 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
图 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
图 75
命令执行后,可看到设备节点"/dev/fb0"与"/dev/input/touchscreen0"设备节点。
图 76
图 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
图 78
图 79
执行如下命令,使能环境变量并执行校准程序。
Target# source /etc/profile.d/tslib.sh
Target# ts_calibrate
命令执行命令后,LCD将会弹出校准界面。请依次点击校准准星,在连续点击五次之后,将会在评估板文件系统"/etc/"目录下生成触摸屏校准文件pointercal,校准后的信息记录在pointercal文件中。
图 80
图 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
图 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
图 83
加载完成后,文件系统将会生成"/dev/fb0"设备节点。
图 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
图 85
图 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。
图 87
点击BLOCK DESIGN开发界面下的"Address Editor"选项,可查看IP核分配的地址,PS端可通过对应地址对IP核进行控制。
图 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可选择输出的背景图像。
图 89
图 90
VTC IP核
VTC IP核用于产生分辨率为1080P60的时序。
VTC(Video Timing Controller) IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg016_v_tc.pdf》,具体配置如下。
图 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。
图 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。
图 93
配置VDMA为读写跟随模式。
图 94
Clocking Wizard IP核
Clocking Wizard IP核使能输出时钟频率动态配置功能。
Clocking Wizard IP核开发文档为产品资料“6-开发参考资料Xilinx官方参考文档”目录下的《pg065_clk_wiz.pdf》,具体配置如下。
图 95
clk_out配置默认输出频率为148.5MHz,可通过设备树进行动态修改。
图 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》,具体配置如下。
图 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》,具体配置如下。
图 98
lvds_n_x_1to7_sdr_tx模块配置为双通道,每个通道的数据差分对数量为4。
图 99
关键代码解释
定义模块接口。
图 100
调用时钟生成模块,生成74.25MHz的LVDS发送时钟。1/74.25MHz≈13.468ns,CLKIN_PERIOD配置为13.468。
图 101
调用LVDS SDR发送模块。
图 102
dual_pixel_24bpp_lvds_mapping模块
本案例使用dual_pixel_24bpp_lvds_mapping模块将色彩深度为8bit的RGB数据和行场同步信号,按LVDS视频标准的格式排列后输出并行数据。
图 103
关键代码解释
定义模块接口。
图 104
将视频的RGB数据和行场同步信号,按LVDS视频标准的格式排列。
图 105
图 106
合并奇偶像素的数据输出。
图 107
设备树配置说明
7英寸LCD显示屏显示功能的动态设备树源文件为案例目录"swlinux_systemsrcaxi-video-display-480p.dtsi"。
15.6英寸LVDS显示屏显示功能的动态设备树源文件为案例目录"swlinux_systemsrcaxi-video-display-1080p.dtsi"。
Clocking Wizard IP核配置如下图所示,支持多路时钟输出,并可动态配置输出时钟。
图 108
显示屏的时序配置如下图所示,如需使用其他显示屏,可修改为对应时序。
图 109 7英寸LCD显示屏
图 110 15.6英寸LVDS显示屏
FrameBuffer驱动基于Xilinx DRM框架实现,DRM配置如下图所示。详细说明可参考内核源码"Documentation/devicetree/bindings/drm/xilinx/"目录下的xilinx_drm.txt文档。
图 111
使用PS端TTC定时器通过EMIO方式输出PWM,频率为50KHz。
图 112
触摸功能的动态设备树源文件为案例目录"swlinux_systemsrcaxi-video-display-480p.dtsi",触摸中断管脚使用EMIO方式连接。
图 113
申请IP核License
如需重新编译工程或打开Video Test Pattern Generator IP核,需在Xilinx官网申请Video Test Pattern Generator IP核的免费License,并将其正确导入。License申请与导入方法,请查阅调试工具安装文档相关章节,其他IP核无需License。
图 114
成功导入后,可在View License Status窗口发现新添加的License。
图 115
emio_can_demo案例
案例功能
案例功能:PS端通过EMIO方式使用CAN0进行数据收发。
CON17通过CAN总线隔离芯片引出PL端IO,TX和RX引脚分别为J10、J9,电平为3.3V。
图 116
操作说明
使用USB转CAN模块连接评估板CAN接口和PC机USB接口,如下图所示。
图 117
参照调试工具安装文档安装USB转CAN驱动和ECAN Tools调试软件,双击打开ECAN Tools软件,选择设备类型,然后点击“打开设备”。
图 118
打开ECAN Tools,界面如下图所示。
图 119
将本案例的PL端.bin格式可执行文件复制到"/lib/firmware/"目录下,并将PL端可执行文件重命名为system_wrapper.bin,然后执行如下命令加载PL端可执行文件。
Target# echo system_wrapper.bin > /sys/class/fpga_manager/fpga0/firmware
图 120
CAN0对应的设备节点为"/sys/class/net/can0"。
图 121
进入评估板文件系统,使用文件系统自带的canconfig工具设置波特率,并启动CAN接口。
Target# canconfig can0 stop
Target# canconfig can0 bitrate 125000
Target# canconfig can0 start
图 122
请执行如下命令,评估板发送帧ID和数据。
Target# cansend can0 -i 0x123 0xaa 0x5a
图 123
ECAN Tools接收到评估板发送的帧ID和数据。
图 124
请执行如下命令,评估板等待接收数据。
Target# candump
图125
在ECAN Tools点击“发送”按钮,向评估板发送一帧数据。
图 126
评估板接收到ECAN Tools发送的帧ID和数据。
图 127
Vivado工程说明
进入BLOCK DESIGN开发界面,双击ZYNQ7 Processing System IP核框图,再点击"MIO Configuration -> CAN0",可看到CAN0已配置成EMIO模式。
图 128