我与赛灵思FPGA的故事ZYN使用总结概述
集团档案编码:[YTTR-YTPT28-YTNTL98-UYTYNN08]
2015-01-21 15:07?3496人阅读?(0)?
?分类:
?
FPGA(15)?
由??于 星期四, 06/19/2014 - 17:03 发表
因为马上要离职的原因,需要将一些东西整理一下做交接。就将Xilinx ZYNQ-7000的使用经验做一下总结,希望对刚接触的人有一点帮助。需要说明的是,在接触到ZYNQ-7000之前,我并没有做过FPGA的设计,这一部分的基础可以说是零。而这一年的工作重心也并不是FPGA设计,所以这一系列文章的重点是工具的使用,以及ZYNQ-7000的设计流程,而不是具体如何设计。该系列文章的硬件平台是:ZC702(XC7Z020-1CLG484CES )。所用软件包括:PlanAhead、Xilinx Platform Studio、Xilinx Software Development Kit,版本均为。串口工具为Tera Term。
ZYNQ-7000是Xilinx推出的一款全可编程片上系统(All Programmable SoC),该芯片集成了ARM Cortex A9双核与FPGA,所以ZYNQ是一款SoPC芯片。其如下图:
图中的Processing System(一般简称为PS)即为处理器(ARM Cortex A9 MPCore)部分,里面资源非常的丰富,具体可参看Xilinx官方文档。Programmable Logic(一般简称为PL)即可编程部分(FPGA),该部分的资源随SoC芯片级别高低不同而不同,最低的是Artix-7(Zynq-7010和Zynq-7020),最高的是Kintex-7(Zynq-7030和Zynq-7045)。当然,后续可能SoC中的FPGA会使用更高的Virtex系列,这个就不得而知了。 PS和PL的关系:
PS的实质就是一个ARM Cortex A9 MPcore,所以如果我们不使用可编程部分,我们完全可以只使用PS部分。也就是说,对于ZYNQ芯片,PS部分可以完全独立使用,不依赖PL部分。
PL部分的实质是Xilinx FPGA。在ZYNQ中,我们可以把PL看成是PS的另一个具有可重配置特点的“外设”,它可以作为PS部分的一个从设备,受ARM处理器控制。比如ARM(PS)的串口数量不够时,以太网接口不够时,或者需要视频接口时都可以用PL部分扩展。当然我们也可以把PL部分看成一个不受ARM处理器控制,与ARM处理器对等的主设备,主动完成与外部芯片、接口的数据交互。更甚至PL部分也可以作为整个系统的主设备,主动从APU部分的存储器中获取、存储数据,并可控制ARM处理器的运算。所以,理论上PL部分也可以像PS部分那样独立运行。但限制是必须使用JTAG接口对PL部分进行配置。如果没有JTAG接口,就无法独立运行,因为ZYNQ的PS部分和PL部分都必须依靠PS来完成芯片的初始化配置。
随着嵌入式系统越来越复杂,功能越来越强大,往往在设计中既需要非常灵活的FPGA,又需要处理器去做一些控制,以及配合使用。传统的方法是使用一个FPGA芯片和一个处理器芯片,比如FPGA+ARM这种模式。不过在这种模式中,FPGA和ARM之间的通信往往会成为系统的瓶颈。但在ZYNQ7000中,将FPGA和ARM集成在一个芯片内部,两者之间的通信使用AXI_HP、AXI_GP、AXI_ACP三种接口通信,带宽可达吉比特,基本上不会存在二者通信带宽不足的问题。当然,传统上也有在FPGA上实现一个软核(比如Altera 的 Nios II,Xilinx的Picoblaze 、Micoblaze等),这样对于一些对处理器要求不高的场合是可以胜任的,但如果对于处理器要求比较高的场景,这种软核的性能往往是捉襟见肘。而且软核会占用一部分PFGA的资源。所以ZYNQ系列实现FPGA和硬核的集成,对于设计可以说是具有里程碑意义的一件事。
Xilinx为ZYNQ的开发提供了三个主要软件:PlanAhead、Xilinx Platform Studio(XPS)、Xilinx Software Development Kit(SDK)。当然,关于这三个软件的定位以及作用,Xilinx以及网上都有很详细很官方的说明,我就不赘述了。我个人理解PlanAhead就是做整个硬件环境搭建,系统集成的。XPS可以从PlanAhead直接调用,主要用于处理器部分的开发设计。SDK是Xilinx对Eclipse的改装,主要用于软件部分的设计。当然,目前Xilinx已经推出了新一代的设计软件Vivado,详情可参加Xilinx官网。
当然,ZYNQ系列的芯片本身的设计与结构就很复杂,其涉及到的技术更是非常之多,因为本系列文章的定位,不会对这些进行总结。而且其实也没有必要,这些东西都可以在Xilinx官方提供的文档中找到。我只会总结一些文档中没有提到的,或者没有系统概括总结的东西。
PS:该系列文章不涉及任何与我具体工作内容有关的东西,也请勿问