ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:342.72KB ,
资源ID:18669389      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18669389.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(AXI Stream协议及视频流格式文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

AXI Stream协议及视频流格式文档格式.docx

1、选择vdma缓存几帧图像,这里默认是写通道和读通道都设置相同的缓存帧数,具体设置多少帧合适一般根据应用来定,比如读写带宽相同,想用ddr作为一个乒乓buffer,那就可以设置成2帧,写第一个地址,读第二个地址,写第二个地址,读第一个地址。这里面设置几帧,就要在vdma寄存器配置的时候设置几个帧起始地址。Memory Map Data Width:代表数据到达AXI4总线上的位宽,比如这里设置成64,那就代表M_AXI_XX总线上的数据位宽是64bit,这时候如果stream上的数据是32bit,那vdma内部会有一个带宽转换模块,把数据拼成64bit。Burst Size : AXI总线上突发

2、传输的长度,一般设置为16Stream Data Width:vdma与pl逻辑部分通过axi stream协议交互数据,这里代表stream数据位宽Line Buffer Depth:vdma内部会有一个行缓存fifo,stream数据会先写入fifo,然后AXI总线逻辑会读出到总线上,这个深度就代表fifo的深度。设置原则(个人理解):如果AXI总线数据带宽是stream总线数据带宽的1.5倍以上,这个fifo深度可以设置的小一点,如果AXI总线带宽小于1.5倍的stream总线带宽,那fifo的深度至少要是图像一个有效行的一半。Advanced : 这里面只说一下Fsync Option

3、s,这个信号是什么意思呢,就是告诉vdma什么时候开始运行,一般s2mm通道选择tuser,就是说在tuser 拉高的时候开始传输。mm2s通道,可以选择none,也可以选择 mm2s_fsync,这里介绍一下这两个的区别。none : 就是没有同步信号,但这并不是说没有开始信号,而是只要mm2s_stream通道tready拉高,就开始传输,相当于free模式mm2s_fsync:当这个信号发生一个下降沿的时候开始传输,如果没有这个下降沿,即使mm2s_stream通道tready拉高也不会传输详细说明对于S2MM通道:之前在讲vdma配置的时候有一个Advanced选项,里面有Fsync

4、Options选项,可选none,s2mm_fsync,s2mm_tuer,三种同步模式。none就是只要vdma就绪,就立马准备接收数据,不需要同步信号。s2mm_fsync,当选择此。模式时,vdma 模块会有一个s2mm_fsync引脚,一般情况下是把视频帧同步信号连到这上面,当检测到s2mm_fsync引脚有一个下降沿的时候,vdma正式进入传输状态。s2mm_tuer,这个信号和s2mm_fsync这个信号类似,但他是在stream协议里面的,vdma检测到s2mm_tuer拉高以后(tuser只在一帧数据的第一个像素位置拉高),正式进入传输状态对于MM2S通道,同样在vdma配置的

5、Advanced选项里面有 none,mm2s_fsync两种选择模式。none不需要同步信号,只要axis_mm2s通道的tready拉高,就开始从ddr读取数据进行传输,选择这种模式一般主要是把ddr里面的数据读到pl里面进行处理,而不是转成视频mm2s_fsync,选择此同步模式,一般是把ddr的数据转成视频数据,注意,这里重点讲这个同步模式,当vdma的读通道选择此同步模式的时候,vdma模块会有一个mm2s_fsync信号,这个信号在读操作中非常重要。当vdma寄存器配置完成并开启传输,mm2s通道进入等待过程,一直等到mm2s引脚信号出现一个下降沿,这时候vdma启动读操作,会从d

6、dr预读一些数据到内部linebuffer,等到axis_mm2s通道的tready信号拉高,数据就开始传输,进入axis2video模块的fifo,当axis2video内部fifo满了以后,会拉低tready,这时候就会反馈到vdma,暂停读操作,一直等到axis2video模块的视频时序输入数据有效信号,这时候视频开始输出,axis2video内部fifo数据减少,axis_mm2s通道开始恢复传输,继续从vdma读出数据,vdma再通过axi总线从ddr读取数据,如此反复,完成ddr数据到video数据的转换下面是接口介绍:M_AXI_XX : axi4总线接口,用来与ddr交互数据M

7、_AXIS_XX , S_AXIS_XX : axi stream接口,用来与pl交互数据S_AXI_LITE :控制总线,接到ps的gp口或者写一个axilite master总线去配置其他接口不做介绍2、为什么要使用VDMA在讲解VDMA之前,先来探讨一下为什么要学习和使用VDMA,以明确学习目的。由于使用VDMA可以方便地实现双缓冲和多缓冲机制,所以本小节引入了帧缓存和缓冲机制的概念。另外,VDMA可以很好地契合Zynq内部架构,缩短开发周期。再加上VDMA本身能够高效地实现数据存取,所以在基于Zynq(也包括其他Xilinx FPGA)图像、视频处理系统中,VDMA可谓是必不可少的。3

8、、帧缓存缓冲存储器(Frame Buffer):简称帧缓存或显存,它是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。在开发者看来,FrameBuffer 是一块显示缓存,往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。所以说FrameBuffer就是一块画布,系统在画布上绘制好画面之后,就可以通知显示设备读取Frame Buffer进行显示了。注意,笔者这里所说的Frame Buffer和Linux的Frame Buffer不是同一个概念,这里仅指显示缓存(画布)本身,并不是Linux下的一个设备。

9、4、双缓冲机制最早解释多缓冲区如何工作的方式,是通过一个现实生活中的实例来解释的。在一个阳光明媚的日子,你想将水池里的水打满,而又找不到水管的时候,就只能用手边的木桶来灌满水池。水桶满了之后,关掉水龙头,将水提到水池旁边,倒进去,然后走回到水龙头。重复上述工作,如此往复直到将水池灌满。这就类似单缓冲工作过程,当你想将木桶里的水倒出的时候,你必须关掉水龙头。现在假设你用两个木桶来做上面的工作。你会注满第一个木桶然后将第二个木桶换到水龙头下面,这样,在第二个水桶注满的时间内,你就可以将第一个木桶里面的水倒进水池里面,当你回来的时候,你只需要再将第一个木桶换下第二个注满水木桶,当第一个木桶开始注水的

10、时候你就将第二个木桶里面的水倒进水池里面。重复这个过程直到水池被注满。很容易看得到用这种技术注满水池将会更快,同时也节省了很多等待木桶被注满的时间,而这段时间里你什么也做不了,而水龙头也就不用等待从木桶被注满到你回来的这段时间了。当你雇佣另外一个人来搬运一个被注满的木桶时,这就有点类似于三个缓冲区的工作原理。如果将搬运木桶的的时间很长,你可以用更多的木桶,雇佣更多的人,这样水龙头就会一直开着注满木桶了。在计算机图形学中,双缓冲是一种画图技术,使用这种技术可以使得画图没有(至少是减少)闪烁、撕裂等不良效果,并减少等待时间。双缓冲机制的原理大概是:所有画图操作将它们画图的结果保存在一块系统内存区域

11、中,这块区域通常被称作“后缓冲区(back buffer)”,当所有的绘图操作结束之后,将整块区域复制到显示内存中,这个复制操作通常要跟显示器的光栈束同步,以避免撕裂。双缓冲机制必须要求有比单缓冲更多的显示内存和CPU消耗时间,因为“后缓冲区”需要显示内存,而复制操作和等待同步需要CPU时间。基于双缓冲机制可以实现页交换,页交换初始状态如下图所示:如上图所示,此时由于处于初始状态,画图操作的结果都在后缓冲区中,而屏幕上显示的则是前缓冲区中的内容。此时画图操作尚未完成,画图操作完成之后,页转换操作开始执行,示意图如下图所示:如上图所示,画图操作结束,下一个画图操作的结果保存对象指向前缓冲区,屏幕

12、的显示对象指向后缓冲区,此时前缓冲区变成实际意义上的后缓冲区,后缓冲区变成实际意义上的前缓冲去,即实现“页交换”操作。有时候也在页交换链中设置多个“后缓冲区”,这是就需要多缓冲区机制的支持。5、Zynq硬件架构在Zynq芯片内部,PS和PL是共享DDR控制器的。PS访问DDR十分简单,只要操作DDR映射的虚拟地址即可。对于PL而言,要接入DDR,必须通过AXI_HP端口。Zynq共有四个AXI_HP通道,通道数据宽度可以配置为32位或64位,这些接口通过FIFO控制器连接PL到存储接口上,其中有两条连接到DDR存储控制器上,还有一条是连接到双端口的OCM上的,下图是AXI_HP访问DDR和OC

13、M的连接图。由上图可以看出,AXI_HP接口也是遵循AXI协议的,因此利用VDMA可以直接连接HP端口。除了使用VDMA,当然也可以自己开发出符合AXI协议的IP,但是综合考虑设计成本,没太有必要自己实现。此外,自己实现的IP功能也不见得比VDMA强大。6、VDMA的作用VDMA数据接口可以分为读、写通道,用户可以通过写通道将AXI-Stream类型的数据流写入DDR3,通过读通道可以从DDR3读取数据,并以AXI-Stream类型的格式输出。由此可知,VDMA本质上是一个数据搬运IP,为数据进、出DDR3提供了一种便捷的方案。将数据存入DDR之后,CPU就可以进行一些处理(缩放、裁剪等),然

14、后再送至显示设备,达到期望的应用目的。当然,也可能是简单地对捕获的视频进行解析,将数据存入帧缓存,以供显示。VDMA可以控制多达32个帧存,并可以自由地进行帧存切换,所以就能够轻松地实现双缓冲和多缓冲操作。这也是一个很重要的特性,在后续进行系统设计的时候,通常是采用多缓冲的方式实现显示。7、VDMA接口介绍7.1 时钟和复位各种总线都有自己的时钟信号,不用特别说明,需要指出的是,这些时钟是异步的,并不需要用同一个时钟。但在设计过程中,如无特别需求,可以使用相同的时钟,以降低设计难度。同步复位信号axi_resetn,同步时钟为s_axi_lite_aclk,低电平有效(至少要保持16个时钟周期

15、的低电平,才能够生效),有效时复位整个IP核。7.2 AXI总线相关信号l AXI4-Lite接口(S_AXI_LITE)l AXI4读接口(M_AXI_MM2S)l AXI4写接口(M_AXI_S2MM)l AXI4-Stream主接口(M_AXI_MM2S)l AXI4-Stream从接口(S_AXI_S2MM)前缀S_、M_分别表示Slave和Master;后缀MM2S、S2MM说明数据流向是从memory map到stream还是从stream到memory map。具体每个接口所包含的信号,在基础篇第20章已有介绍,此处不再介绍。7.3 视频同步接口信号信号名称方向详细描述mm2s_

16、fsyncFrame SyncMM2S帧同步输入。使能该信号后,VDMA操作开始于fsync每个下降沿。该信号至少要持续一个m_axis_mm2s_aclk时钟周期s2mm_fsyncS2MM帧同步输入。该信号至少要持续一个s_axis_s2mm_aclk时钟周期7.4 GenLock相关信号在下一节将详细介绍这些信号的作用和应用场合。mm2s_frame_ptr_in(5:0)输入输入的帧编号mm2s_frame_ptr_out(5:输出输出当前帧的编号s2mm_frame_ptr_in(5:s2mm_frame_ptr_out(5:8、读写通道工作时序清晰地理解VDMA读写通道的工作时序,

17、对以后的设计有很大的帮助,很多设计都是根据本小节所示的样例时序设计出来的。在下一章,读者就能够有所体会。8.1 读通道(MM2S)时序下图描述了读通道的时序,5行,每行16字节,跨度为32字节。从图中可以看出:在收到mm2s_fsync信号后,VDMA在m_axi_mm2s_araddr的起始地址处发出m_axi_mm2s_arvalid信号。M_axi_mm2s_arvalid总共有效5次,分别获取一帧的5行数据。从MM读取的数据存储在行缓存里,当收到来自axi-stream端的m_axis_mm2s_tvalid信号后,将数据发送到axi-stream端。每一行的结束,axi-stream

18、端会使m_axis_mm2s_tlast有效。8.2 写通道(S2MM)时序下图描述了写通道的时序,5行,每行16字节,跨度为32字节。在收到s2mm_fsync信号后,VDMA发出s2mm_fsync_out和s_axis_s2mm_tready表明已经准备好接收来自axi-stream端的数据。读取到的数据存储在行缓存里,m_axi_s2mm_awvalid有效后,紧接着有效m_axi_s2mm_wvalid信号,同时将数据放至m_axi_s2mm_wdata。9、寄存器VDMA的寄存器如下表所示。所有寄存器都被映射到非缓存内存空间。该内存空间必须按照AXI字(32位)进行对齐,换句话说,

19、寄存器偏移地址至少间隔4个字节。寄存器名称偏移地址MM2S_VDMACR00hMM2S VDMA控制寄存器MM2S_VDMASR04hMM2S VDMA状态寄存器保留08h10hN/AMM2S_REG_INDEX14hMM2S寄存器索引18h24hPARK_PRT_REG28hMM2S和S2MM Park指针寄存器VDMA_VERSION2ChVDMA版本寄存器S2MM_VDMACR30hS2MM VDMA控制寄存器S2MM_VDMASR34hS2MM VDMA状态寄存器38hS2MM_VDMA_IRQ_MASK3ChS2MM错误中断掩码寄存器40hS2MM_REG_INDEX44hS2MM寄

20、存器索引48h4ChMM2S_VSIZE50hMM2S垂直方向显示大小寄存器MM2S_HSIZE54hMM2S水平方向显示大小寄存器MM2S_FRMDLY_STRIDE58hMM2S帧延迟和跨度寄存器MM2S_START_ADDRESS(116)5Ch98hMM2S帧存起始地址(116)9ChS2MM_VSIZEA0hS2MM垂直方向显示大小寄存器S2MM_HSIZEA4hS2MM水平方向显示大小寄存器S2MM_FRMDLY_STRIDEA8hS2MM帧延迟和跨度寄存器S2MM_START_ADDRESS(116)AChE8hS2MM帧存起始地址(116)所有寄存器字节序都是小端格式,如下图所

21、示。各个寄存器的名称和大致作用从上表就可以看出,接下来,笔者会详细介绍重要寄存器的具体bit的作用。明白了每个bit的作用之后,自然就知道写入什么值能够达到自己的控制目的。从上表可以看出,寄存器可以分为两组,分别对应MM2S通道和S2MM通道,两组寄存器的功能是相似的,区别仅在于偏移地址和所服务的对象。因此,在学习完MM2S通道的所有寄存器之后,只要大致浏览一下S2MM通道对应的寄存器的关键位即可(个别位不相同),在使用高级功能时,再仔细查阅VDMA用户手册。9.1 MM2S VDMA 控制寄存器(00h)顾名思义,该寄存器用于控制VDMA,具体可以实现复位、使能锁相同步、设定帧存切换模式、启

22、动VDMA读写通道等操作。每一位作用如下图所示,低4位是最重要的,接下来会详细介绍。位名称默认值接入类型描述314非常用位,请参考VDMA使用手册自学3GenlockEn0h可读可写使能锁相同步或者动态锁相同步模式。0:关闭Genlock或动态Genlock同步1:开启Genlock或动态Genlock同步注:该位仅在通道被配置成锁相同步从接口或者动态锁相主、从接口时才起作用。配置成锁相同步主接口时,该位为保留位,值恒为0。2Reset正常操作;复位MM2S通道1Circular_Park1h指定帧存为循环模式还是停留模式停留模式-显示用缓存页将停留在PARK_PTR_REG.RdFrmPnt

23、rRef指定的帧存;循环模式-循环切换显示用缓存页RS运行/停止,控制VDMA通道的运行和停止。开始任何VDMA操作前,该位必须置1.停止;运行。9.2 MM2S VDMA 状态寄存器(04h)该寄存器用于获取VDMA工作状态。311Halted只读指示VDMA运行是否停止。运行;停止。9.3 PARK_PTR_REG停留指针寄存器(28h)该寄存器用于管理读、写通道的数据传输。31292824WrFrmStore用于存储写通道正在操作的帧的编号。指示S2MM通道正在操作的帧。23212016RdFrmStore用于存储读通道正在操作的帧的编号。指示MM2S通道正在操作的帧。1513128Wr

24、FrmPtrRef通过帧编号指定写通道操作的帧。当工作在停留模式,S2MM通道操作对象停留在WrFrmPtrRef指定的帧。7540RdFrmPtrRef通过帧编号指定读通道操作的帧。当工作在停留模式,MM2S通道操作对象停留在RdFrmPtrRef指定的帧。学习了这个寄存器之后,就可以发现:当VDMA工作在Parked模式下,通过操作该寄存器,就能够实现帧缓存的切换,建立自己想要的缓存切换机制。9.4 MM2S 帧存起始地址(0x5C0x98)有最多32个寄存器用于存放帧存起始地址,其分别存在于两个寄存器bank上:bank0和bank1,每个bank上有16个寄存器。这两个bank上有相同

25、的起始偏移地址(0x5C),选择这两个bank可以通过MM2S_REG_INDEX的值进行选择。假如想访问第1个寄存器,则给MM2S_REG_INDEX赋值为0,并设定偏移地址为0x5C;如果想访问第17个寄存器,需要将MM2S_REG_INDEX设为1,并设定初始偏移地址为0x5C。9.5 MM2S_FRMDLY_STRIDE MM2S帧延迟和跨度(58h)该寄存器有两个作用,第一是bit24bit28指定帧延迟,仅用于Genlock从模式,指定从接口比主接口至少要延迟多少个帧;第二是低16位指定水平方向的跨度,同样以字节为单位。所谓跨度是指每两行第一个像素之间间隔的数据个数,具体请参考22

26、.3.2小节,VDMA帧存格式。9.6 MM2S_HSIZE MM2S水平方向尺寸(54h)该寄存器的低16位用于指定每一行有多少字节的数据需要传输。例如显示分辨率为640*480,每个像素4个字节(RGB+Alpha),该值应该设定为640*4。9.7 MM2S_VSIZE MM2S垂直方向尺寸(50h)该寄存器有两个作用,第一是用低13位指定总共有多少行;第二是启动MM2S的传输。当MM2S_VDMACR.RS=1,对该寄存器的写操作会将所有设定参数传递给VDMA内部寄存器模块,用于VDMA控制。对某个通道进行配置时,必须在最后一步设置该寄存器。9.8 S2MM VDMA 控制寄存器(30h)顾名思义,该寄存器用于控制VDMA S2MM通道,具体可以实现复位、使能锁相同步、设定帧存切换模式、启动VDMA读写通道等操作。复位S2MM通道Circular_Pa

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1