本方案主要是设计一个拥有Xilinx Zynq等的全可编程SoC高性能视频系统。 本设计是使用Xilinx Platform Studio(XPS)PlanAhead的14.2版本创建和构建的™ ISE®Design Suite系统版附带的工具。XPS有助于简化实例化、配置和连接IP核以形成复杂的嵌入式系统的任务。该设计还包括使用Xilinx软件开发工具包(SDK)构建的软件。软件运行在Zynq-7000 AP-SoC处理系统上,实现了控制功能。 根据这个板子,我们使用可用的Xilinx AXI IP核可以创建高性能视频系统。通过使用AXI互连、Zynq-7000 AP SoC上的AXI3端口和AXI VDMA IP核,可以构成能够处理多个视频流和共享一个DDR3 SDRAM内存的多个视频帧缓冲区的视频系统的基础。AXI是基于ARM AMB4和AMB3 AXI规范的标准化IP接口协议。本示例设计中使用的AXI接口由AXI4、AXI3、AXI4 Lite和AXI4流接口组成,如AMB4和AMB3 AXI规范所述[Ref 1]。这些接口为构建设计提供了一个通用的IP接口协议框架。Zynq-7000 AP SoC上的AXI Interconnect和AXI-HP端口一起实现了一个高带宽和高性能的内存系统,用于多个设备共享一个内存控制器的应用程序。在许多视频、嵌入式和通信应用程序中,这是一个要求,在这些应用程序中,来自多个源的数据通过一个公共存储设备(通常是ddr3sdram存储器)移动。AXI VDMA实现了一个高性能、视频优化的DMA引擎,具有帧缓冲、散射聚集和二维(2D)DMA功能。AXI-VDMA将视频数据流传输到内存中,并在动态软件控制或静态配置模式下运行。Zynq-7000 AP SoC PS为整个系统(包括PL)提供时钟和重置。系统的高级控制由Cortex-A9处理器和I/O外围设备(IOP)、片上存储器(OCM)和处理器支持的IP核在Zynq-7000 AP SoC PS中提供。为了优化系统以平衡性能和区域利用率,使用多个AXI接口核心来实现分段/分层的AXI接口网络,每个AXI接口核心分别进行调整和优化。 硬件要求参考系统的硬件要求如下: •Xilinx ZC702 Rev 1评估板(在JTAG模式下) •两条USB A型至Mini-B 5针电缆 •HDMI™ 电缆 •支持1080p分辨率(1920 x 1080分辨率,60帧/秒) 构建和下载此参考系统的已安装软件工具要求为: 参考系统的框图 •PlanAhead工具,版本14.2 •Platform Studio 14.2 •ISE Design Suite 14.2 •SDK 14.2 参考系统包括Zynq-7000 AP SoC PS、AXI互连、时钟发生器、AXI_VTC、AXI_TPG、AXI_VDMA、AXI_PERF峎MON、AXI_OSD和HDMI接口核心。Zynq-7000 AP-SoC PS中的处理器或DMA控制器(DMAC)可以通过AXI通用(GP)接口(32位AXI3主接口)访问PL中的AXI从接口。与S_AXI_HPx接口相比,S_AXI_GPx接口被视为性能较低的接口,因此在本设计中不使用。本设计仅使用一个AXI GP接口(M_AXI_GP0)作为从寄存器。 Zynq-7000 AP SoC PS配置为使用一个Cortex-A9处理器、一个IIC(MIO接口)、一个UART(MIO接口)和Zynq-7000 AP SoC内存接口(AXI3接口)。这些是由SDK工具创建的第一阶段引导加载程序(FSBL)启用的。Zynq-7000 AP SoC PS为PS和PL提供时钟和复位信号,本设计使用的时钟信号频率见下表。 参阅Zynq-7000 EPP技术参考手册(UG585),里面有详细的Zynq-7000 AP SoC PS中的时钟频率和互连。 视频相关IP核 参考设计实现了三条1080P60(1920x1080帧,60帧/秒)的视频管道。每帧每像素由4个字节组成,代表一个上限,高质量的视频流,如RGBA或YUV 4:4:4和alpha通道信息。每个视频管道需要497.6mb/s的带宽,大约是4gb/s。 视频流量由TPG IP核生成,OSD核显示。生成的总读/写带宽相当于6个视频流,需要近3gb/s(24gb/s)。 本应用说明使用六种高清视频流演示了AXI系统的性能。至少,视频系统必须包括一个源、一些内部处理和一个目的地。内部可以有多个阶段使用各种IP模块。标准视频系统如图2所示,表明大多数视频系统由输入、预处理、主处理、后处理和输出阶段组成。所示的许多视频阶段需要以视频速率访问内存。根据内部处理阶段的要求,将视频数据输入和输出内存。在本应用说明中,内部块内存流量由一系列测试模式生成器创建,以模拟典型条件 AXI Interconnect(AXI_Interconnect_GP0_MASTER)实例 AXI_Interconnect_GP0_主机实例通过使用共享总线拓扑进行区域优化,该拓扑允许Zynq-7000 AP SoC PS访问从寄存器。Cortex-A9处理器写入和读取设计中的所有AXI4 Lite从寄存器,以获取控制和状态信息。此外,这部分设计的时钟频率为75MHz,与系统的其他部分相比,这是一个较慢的时钟速率。AXI接口从机用于三个AXI_VDMA从接口实例、AXI_VTC、AXI_PERF_MON、3个实例AXI_TPG和AXI_OSD。 AXI Interconnect(AXI_Interconnect_HPx_SLAVE)实例 AXI_Interconnect_HP0_SLAVE、AXI_Interconnect_HP1_SLAVE和AXI_Interconnect_HP2_从实例用于高速主设备和从设备,包括高吞吐量和高FMAX优化。连接模式设置为crossbar模式以适应高吞吐量。这些实例为设计提供了最高的FMAX和吞吐量,其核心数据宽度为64位,运行频率为150mhz。每个实例将一个AXI VDMA(AXI MM2S和AXI S2MM主接口)连接到一个HP接口。请参阅AXI VDMA实例和Zynq-7000 AP SoC内存控制器,第6页,了解实现主从设备高性能的AXI接口设置。 AXI VDMA实例 AXI VDMA核心旨在提供从AXI4内存映射域到AXI4流的视频读写传输功能,反之亦然。AXI VDMA内核在系统内存和基于AXI4流的目标视频IP之间提供高速数据移动。 描述通过AXI接口获取。在这种设计中,寄存器直接模式用于缓冲区描述符,消除了系统中对SG接口的需要。 该设计结合了视频特定功能,如genlock和帧同步,用于完全同步的帧DMA操作以及二维DMA传输。除了同步,帧存储编号和分散/聚集或寄存器直接模式操作也可用,以便于中央处理器进行控制。 在本设计中,AXI VDMA的三个实例与AXI4 MM2S接口、AXI4 S2MM接口、AXI4流MM2S接口和AXI4流S2MM接口一起使用。此外,对于每个实例,初始化、状态和管理寄存器都可以通过AXI4 Lite从接口进行访问。 来自AXI VDMA实例的32位宽AXI MM2S和AXI S2MM接口连接到AXI_INTERCONNECT_HPx_从实例。AXI4流接口的时钟频率为148.5 MHz,这需要在IP核心中启用C_PRMRY_IS_ACLK_ASYNC参数。AXI VDMA主机的时钟频率为150 MHz,这不需要时钟转换器到150 MHz的AXI接口核心频率。但是,要将32位AXI4协议转换为64位AXI3协议,需要在AXI接口中使用协议转换器和向上扩展程序。 AXI VDMA实例的最大突发数设置为32。AXI3协议最多只支持16个突发。但是,由于Zynq-7000设备上连接的HP接口是64位的,因此该接口支持64位x 16个数据拍数(32位x 32个数据拍数)的传输大小。此外,用于读写侧的AXI VDMA内部的线路缓冲器被设置为容纳一条8 KB深的线路(1920 x 4字节=7680字节深)。 对于AXI VDMA的AXI接口设置,主接口的读写发行量为2,可向Zynq-7000设备提供适量的事务,读写FIFO深度为512,并支持存储和转发,以提高系统性能并降低系统节流风险。此外,在AXI主接口上启用了完全注册模式,以帮助150 MHz的会议计时。这些设置还遵循Xilinx AXI参考指南(UG761)中描述的AXI端点主机的性能建议。 ZC702板上的Zynq-7000 AP SoC内存控制器是一个32位DDR3控制器,时钟频率为533 MHz。使用的寻址方法是行、行、列。内存控制器寄存器设置由FSBL自动设置。 内存控制器有四个直接连接,分别是从AXI_HP到DDR接口(两个连接),从中央互连,以及从Zynq-7000设备中的二级缓存接口。此外,服务质量(QoS)优先级模块位于这四个源和到存储器控制器的连接之间,这使得能够通过限制请求来调节业务模式。HP0/HP1和HP2/HP3从接口通过AXI峎HP-DDR接口与内存控制器共享直接连接。 本设计采用HP0/HP1/HP2从机接口。有关这些接口的更多信息,请参阅Zynq-7000 EPP技术参考手册(UG585)。 每个HP从机接口都是64位的,读/写接受度为8,而且在HP接口中已经构建了FIFO。启用完全注册模式,以确保接口满足150 MHz的定时要求。这些设置有助于确保高度活跃的事务流水线以提高系统吞吐量。 为了实现内存控制器的最佳利用率,来自主接口的事务需要在不同的库中发生,并且必须与KB/MB边界对齐。有了视频设计,在视频设计过程中,需要在不同的存储库中访问帧缓冲区,并且在视频设计过程中必须尽量减少数据块的重叠。 这个设计演示了1080P60(1920x1080),每像素4个字节。每条水平线约为8kb(1920x4=7680),因此AXI-VDMA线跨距设置为8kb边界。 每个新行的开头都在8KB的边界上对齐。每个帧的垂直线(每帧1080行)与每个帧的2kb边界对齐。因此,本设计中的每个帧缓冲区在16mb边界(8kbx2kb)上对齐。 对于多个视频管道,N个视频设备使用相同的定时访问N个帧缓冲区。假设16MB帧缓冲区,这意味着来自不同视频设备的几乎同时的访问请求具有几乎相同的地址[23:0]。因为在默认地址映射中,bank select地址是位[14:12],它们也是相同的地址。 因此,请求访问同一个银行但来自不同的页面,每次都会造成整页丢失开销(预收费激活读/写)。这可能导致DRAM效率非常低(在40–50%范围内)。 使用此DDR地址配置,ZC702板上的内存控制器配置为行(13位)、库(3位)、列(10位)和字选择(2位): AXI主地址被重新排序,以确保每个帧缓冲区都在自己的库中。 因为每个帧缓冲区在16MB的边界上对齐,所以需要24位来表示地址空间[23:0],用3位来表示银行[26:24]。对于DDR地址,AXI地址位[26:24]移动到[14:12]。重新排序的AXI主地址看起来像:AXI_addr[31:27]AXI_addr[23:12]AXI_addr[26:24]AXI_addr[11:0]为此应用程序注释创建了一个附加的EDK IP核,以将AXI主地址重新排序到AXI接口。通过这种重新排序,处理器或软件必须处理地址重新排序。 当每个AXI-VDMA处于正常genlock模式时,两个帧缓冲区同时处于活动状态,并且通常延迟一个帧缓冲区(即,读/写操作不在同一帧缓冲区中发生)。为了在这个设计中创建一个确定的流量模式,所有的AXI-VDMA接口共享相同的FSYNC信号。这种设计总共使用了九个帧缓冲区,但是存储器控制器只有八个存储区。因为在这种设计中,一次只有六个帧缓冲区是活动的,所以必须仔细选择帧缓冲区的位置来限制或消除组重叠。
最后在重建项目之前,用户必须确保安装了AXI OSD和AXI VTC核心的许可证。要获得AXI VTC或AXI OSD核心的评估许可证,用户应访问这些网页并单击“评估”:http://www.xilinx.com/products/intellectual-property/EF-DI-VID-TIMING.htm http://www.xilinx.com/products/intellectual-property/EF-DI-OSD.htm 注:生成的比特流位于:<unzip dir>/zc702_video_3x_pipeline/PA/impl_1/系统位 1打开zc702_video_3x_pipeline/PA/PA_项目.ppr使用PlanAhead工具归档。 2在“设计运行”选项卡中,右键单击impl_1,然后单击“生成Bitstream”。 3单击“否实现结果可用”对话框中的“是”。 出现“启动运行关键消息”对话框,显示两个未找到的约束。这是一个已知的问题。单击“确定”。 4通过选择File>Export>Export Hardware for SDK…5,使用Hardware for SDK选项导出。导出到<Local to Project>。请确保选中“包含Bitstream”和“导出硬件”。单击“确定”。 我们通过SDK工具XAPP792(v1.0.1)编译软件并运行设计,通过SDK工具编译软件和运行设计用SDK工具。 1编译软件。启动SDK工具。在Linux中,键入xsdk。 2在工作区启动器中,选择以下工作区:<unzip dir>/zc702_video_3x_pipeline/SW /SDK_Workspace 。 3单击“确定”。 4要设置存储库,请单击Xilinx工具>存储库。 a、 对于本地存储库,请单击“新建…”。 b、 将目录更改为:<unzip dir>/zc702_video_3x_pipeline/SW/repository c。单击“确定”。 5必须导入电路板支持包(BSP)、硬件平台和软件应用程序。单击“文件”>“导入”>“常规”>“现有项目到工作区”。 6单击Next并浏览到<unzip dir>/zc702_video_3x_pipeline/SW目录。单击“确定”。 7确保选中所有复选框,包括axi_vdma_display、hw_platform_0、standalone_bsp_0和zynq_fsbl_0。单击“完成”。 注:编译BSP和软件应用程序。这需要2-5分钟。如果axi_vdma_显示软件应用程序包含生成错误,请右键单击“项目资源管理器”选项卡中的“axi_vdma_显示”,然后选择“更改引用的BSP”,然后选择“独立的”BSP“0”。 8此时,可以修改现有的软件应用程序,并且可以使用SDK工具创建新的软件应用程序。 通过SDK工具1运行硬件和软件。单击Xilinx工具>编程FPGA。 2单击程序即可。
|
加油啊