Zynq

一文了解Zynq里面的AXI总线

在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议。其中三种AXI总线分别为:

AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;

AXI4-Lite:(For simple, low-throughput memory-mapped communication )是 一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。

AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。

说AXI4总线和AXI4-Lite总线具有相同的组成部分:

(1)读地址通道,包含ARVALID, ARADDR, ARREADY信号;

(2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;

(3)写地址通道,包含AWVALID,AWADDR, AWREADY信号;

(4)写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;

(5)写应答通道,包含BVALID, BRESP, BREADY信号;

编写Linux下的应用程序时有时需要调用Linux的相关shell脚本,在这些脚本中通过调用Linux的相关函数实现对应的功能。比如使用ifconfig配置本地的IP地址,采用这种方式省去了自己编写应用程序去实现的麻烦。

Linux常见调用shell脚本的方式有三种,网上说明很多,最简单的是使用system调用shell文件,下午中就是采用这种做法。

1、编写应用程序

这里以配置IP地址举例,在应用程序中设置了IP地址,最后通过参数传入shell文件
void config_ip(unsigned int slot)
{
charcmdline[100];
intip1,ip2,ip3,ip4;
ip1=192;
ip2=168;
ip3=100;
ip4=200;
sprintf(cmdline,"shipaddr.sh %d %d %d %d",ip1,ip2,ip3,ip4);

在Arty Z7上入门Xilinx SDSoC开发工具

作者:阿Q 来源:开源硬件创客坊微信公众号

细心的小伙伴们可能早已留意到,在Digilent今年全新出品的Zynq评估板中,无论是第二代经典入门级的Zynq™ Board - ZYBO Z7,还是创客最爱的ARTY Z7,都全面支持Xilinx SDSoC开发环境。意味着如果你是一名系统或软件工程师,现在无需深度的硬件专业知识,就能广泛地利用Zynq® SoC,畅享超过100倍的软件性能加速。

本篇干货教程中,我们就将带你入门了解如何使用Xilinx SDSoC工具来创建嵌入式C/C++/OpenCL应用开发,并实现直接在ARTY Z7嵌入式视觉开发平台的器件上进行软件设计。

SDSoC软硬协同设计与其开发流程

由于集成了ARM处理器内核与可编程逻辑,对于众多应用开发而言,Zynq 非常的灵活。这意味着开发人员可以将设计按不同的元素来优化划分,例如将其中那些高层次决策的部分放入ARM内核(PS端),并将诸如图像处理流水线等需要加速的部分用可编程逻辑(PL端)来实现。

当然,传统的Zynq开发流程会将Vivado和SDK分离开来,这种方法很难在可编程逻辑(PL)和处理系统(PS)之间分配功能,因此无法获得最优的系统性能。

Xilinx Zynq开发--修改官方的根文件系统

#前段时间在做zynq702评估的时候,提出了一种省事的制作和修改根文件系统的方法:
#用dd命令将官方uramdisk----->ramdisk
#或者直接用官方的ramdisk ,解压后得到ramdisk.image
#1.将ramdisk 挂载到/mnt下
$mount ramdisk.image /mnt

#2.同步到/nfsroot下
$sudo rsync -a /mnt /nfsroot

#这样就可以通过nfs网络文件系统做开发了,但是最近发现了一个问题,就是官方给的文件系统,加载完之后,
#想去看/proc下的cpuinfo时, $cat /proc/cpuinfo 无任何反应,ls /proc 发现没有任何东西,这个显然是有问题的,
#理由是:proc文件系统是用来提供内核和进程信息的虚拟文件系统,使用内核自动生成的文件,加载完成一定要能
#查到很多信息才对。

#同样的利用这个nfs去开发内核驱动的时候,发现:利用 insmod XXX.ko可以正常插入内核模块,但是lsmod,
#和rmmod都出现了问题,提示/proc下缺东西,/lib/modules下缺东西

解决方法:

Xilinx Vivado Zynq Pldma APB控制线调试

在xilinx vivado zynq pldma PL部分ILA调试中,观测APB总线上的数据是正常的,但PLDMA没有成功,分析代码发现在HP_DMA模块中使用m_apb_pclk与m_apb_presetn为悬空状态。由于Avnet的例程建立在2014年,所以使用vivado版本较早,其使用的AXI Bridge上还存在m_apb_pclk与m_apb_presetn。在pg073文件中查看在AXI APB Bridge(2.0)模块上确实存在m_apb_pclk与m_apb_presetn信号。

但是到了vivado2015.1版本上使用AXI Bridge 3.0版就没有了,并且在综合后通过原理图文件也无法查找到这两个信号。

在2.0版APB Bridge在综合之后的原理图文件查看,APB bridge的m_apb_pclk信号与s_axi_aclk信号为直连状态;m_apb_presetn与s_axi_aresetn为直连状态。

Zynq VDMA 自测

首先,建立Zedboard的工程,创建如下Block Design:

VDMA设置一下读写通道,AXI-lite和MM2S 的时钟都采用同一个。

Processing 配置按图中所示,包含HP口。

添加ILA进行数据流入和数据流出测试。

运行工程...

最后,File->Export->Export Hardware —-File ->Launch SDK

VDMA 的S2MM和MM2S配置如下:
Xil_Out32(VDMA_BASEADDR + 0x30, 0x4); //reset S2MM VDMA Control Register
Xil_Out32(VDMA_BASEADDR + 0x30, 0x8); //genlock
Xil_Out32(VDMA_BASEADDR + 0xAC, 0x08000000);//S2MM Start Addresses

Zynq学习笔记——HLS FAST corner导出keypoints(二)

PC平台:WINDOWS 10 64位
Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4
开发板:ZedBoard
摄像头:OV5640

上一步导出HLS IP后,修改原来的硬件工程,其实升级一下hls_fast_corner IP就可以了,我这次用的不是USB摄像头了,直接在PL端接上了OV5640,实时输出720P视频到HDMI显示,可以看到FAST的实时效果

在SDK下测试,为了看到实际的效果,同样需要把keypoint画出来
if(XHls_fast_corner_IsDone(&fast_corner))
{
XHls_fast_corner_Read_keypoints_Words(&fast_corner, 0, &count, 1);
XHls_fast_corner_Read_keypoints_Words(&fast_corner, 1, keypoints, count);

Xilinx Zynq ZC702学习总结

Xilinx zynq zc702开发:

一、zynq开发整个生态系统搭建:
1.基础资料获取:
https://github.com/Xilinx/
(包括:交叉编译工具,linux kernel源码,u-boot源码, device-tree源码, qemu, gdb等等)

http://www.wiki.xilinx.com/
(提供 了几乎所有的学习资料,包括:创建FSBL,配置编译内核,配置编译u-boot,编译生成dtb,制作根文件系统,linux 设备驱动程序,设计例程等等)

http://china.xilinx.com/support
(xilinx 官方提供的技术文档,非常祥尽)

http://xilinx.eetrend.com/category/1210
(xilinx中文社区,包含了大量的问题的解决方案)

2.运行pre-build image
拿到板子的第一步当然是先跑一下Pre-built images看看,一者可以验证板子好坏,再者可以看看Linux已经完成了哪些功能,做到了哪一步。
(主:参考文档:http://wiki.xilinx.com/
源码:http://git.xilinx.com/

Zynq学习笔记——HLS FAST corner导出keypoints(一)

PC平台:WINDOWS 10 64位
Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4
开发板:ZedBoard

之前参照XAPP1167文档,使用HLS Video函数库里的FASTX跑了一下例子,当时的例子是直接把keypoint以mask方式画在了原始视频图像上,应用层并没有获取到keypoint的坐标信息,所以无法开展下一步的图像处理,比如获取keypoint的特征点信息进行图像匹配等,其实HLS FASTX提供了两个函数,一个是返回keypoint的mask图像,另一个是返回keypoint数组,所以如果需要获取到keypoint的坐标信息,必须得使用第二个函数

可以在Vivado HLS安装目录下找到FASTX的源代码,有两个地方,Xilinx\Vivado_HLS\2015.4\include\hls\hls_video_fast.h和Xilinx\Vivado_HLS\2015.4\common\technology\autopilot\hls\hls_video_fast.h

xilinx vivado zynq pldma PL部分ILA调试

通过前面的PL DMA设计,在SDK中运行,很正常的没有运行起来(block design与source desing都是自己手敲,明显的错误已经改正,能够生成bit文件启动SDK调试)。

首先在PL部分调试,作为PL DMA的控制APB总线,将其设置为Mark Debug,如下图所示。

然后重新综合,综合完成,不进行implemention,在综合菜单下面找到“Set Up Debug”,进行ILA配置,出现下图的设置窗口。

在上图中点击“more info”,出现提示,部分网表没有设定时钟。

同步内容