一、Zynq的开发四种方式
ZYNQ中包含了两个部分,双核的arm和FPGA。根据XILINX提供的手册,arm模块被称为PS,而FPGA模块被称为PL。ZYNQ内部包含PS和PL两部分,ZYNQ开发有一下四种方式:
1、纯PS开发
PS中包含2个ARMCortex-9的内核,一些基本的外设扩展口以及Memory接口。PS中包含以下4个主要功能模块:
Applicationprocessorunit(APU)
Memoryinterfaces
I/Operipherals(IOP)
Interconnect
PS开发有两种方式:即传统的arm的方式和xilinx方法(这个是生成一个elf文件,这个elf文件包括了硬件配置信息(xmp)和裸跑程序(c文件))。
2、纯PL开发
PL即FPGA,这个和一般的xilinx的FPGA没有很大的区别。
3、PS+PL(不跑操作系统)开发
生成elf文件包括了硬件配置信息(xmp)和裸跑程序(c文件),还有一个.bit文件。
4、PS+PL(跑操作系统)开发
这个就需要BOOT.BIN,设备树,linux内核镜像,文件系统了。
其中BOOT.BIN是由3部分组成的(boot.elf,.bit,fsbl.elf),boot.elf这个是由交叉编译环境产生的,相当于ssbl,.bit文件是PL使用文件,fsbl.elf这个是fsbl。
二、开发工具
2.1独立开发环境
PL—Vivado
PS(ARM)–SDK(Xilinx)或者第三方ARM开发工具
2.2集成开发环境
SDSoC
2.3独立开发环境的四个步骤
(1)系统架构师确定硬件、软件分区方案;
(2)硬件工程师处理被分配到硬件中的功能,并将其转换或设计成IP核(Verilog/VHDL,也可用VivadoHLS实现C/C++高层次综合);
(3)利用VivadoIPIntegrator创建整个嵌入式系统的模块化设计。包括开发需要的数据移动工具(AXI-DMA、AXIMemoryMaster、AXI-FIFO等),以及连接PLIP与PS的AXI接口(GP、HP和ACP),之后将此项目导入到SDK中;
(4)软件工程师使用SDK,开发PS中ARM处理器的驱动程序和应用。
对于以硬件为中心的优化流程,矛盾往往出现在不同的数据移动工具和PL-PS接口以及写入和调试驱动程序与应用,为避免重构硬件造成软件的变化,使得PS-PL开发更加紧密,赛灵思推出了SDSoC开发环境。将上述步骤(2)、(3)和(4)实现高度自动化,以缩短开发时间。该开发环境会生成必要的硬件和软件组件,用以同步硬件和软件并保存源程序语义,同时支持任务级并行处理和流水线化的通信与计算,从而实现高性能。SDSoC环境会自动安排所有必要的赛灵思工具(Vivado、IPIntegrator、HLS和SDK),以生成针对ZynqSoC的完整软硬件系统,而且所需的用户介入程度很小。
一个SDSoC设计项目是建立在一个“平台”之上的。所谓“平台”,包含硬件平台和软件平台两个部分,是一个设计开发可以复用的基础性系统。
平台是利用标准的Vivado、SDK和OS工具创建的。硬件平台(HPFM)定义了诸如处理系统(PS,ProcessingSystem)、I/O子系统、存储器接口等,这些工作都基于一个定义明确的端口接口(AXI、AXI-S,、时钟、复位、中断)。软件平台(SPFM)定义了OS、设备驱动、启动加载程序(bootloaders)、文件系统、库等。
基于C/C++源代码的定制和专用硬件和软件,用户可以扩展平台。
SDSoC将平台作为独立的解决方案空间,基于平台提供的资源去生成用于解决方案的IP。每个解决方案都是为一个平台裁剪而成的。
一个扩展名为xpfm的文件包含了硬件描述符XML文件(HPFM)和软件描述符XML文件(SPFM)位置的参考。
2.4Vivado
Vivado是基于IP的设计,称为blockdesign(BD),调用已有的IP,用户自己编写的逻辑模块也可以封装成IP,然后在模块blcok中连线。逻辑开发完毕,再转到SDK,SDK会根据Vivado的硬件设计设置调用相应的内部驱动代码。(PL部分就如同ARM的总线AXI等挂的外设)
2.5SDK
SDK根据生成的.hdf文件匹配FSBL,只需添加main.c文件即可。
三、类似嵌入式C/C++/OpenCL应用开发的体验–SDSoC
SDSoC开发环境可为异构ZynqAllProgrammableSoC及MPSoC部署提供类似嵌入式C/C++/OpenCL应用的开发体验,其中包括简单易用的EclipseIDE和综合设计环境。SDSoC提供业界首款C/C++/OpenCL全系统优化编译器,可实现系统级的特性描述、可编程逻辑中的自动软件加速、自动系统连接生成以及可加速编程的各种库。此外,它还可帮助最终用户及第三方平台开发人员快速定义、集成和验证系统级解决方案,为其最终用户实现定制化编程环境。(软件工程师能够对ZynqSoC中的可编程逻辑和ARM处理系统进行编程)
简单易用的EclipseIDE可用于开发支持嵌入式C/C++/OpenCL应用的全面ZynqAllProgrammableSoC和MPSoC系统。
只需一点按钮,就可对可编程逻辑(PL)中的功能进行加速。
支持作为目标OS的裸机、Linux与FreeRTOS。
Xilinx库作为VivadoHLS的一部分,由联盟成员提供,是可选硬件优化的库。
OpenCL在.3版中为早期的测试版。请联系您的当地销售代表提出申请。
下图展示的是一个基于基础平台的完整SDSoC设计的整体结构。需要加速的C/C++/SystemC功能成为了FPGA可编程逻辑(PL)中的IP,而其他功能保留在处理器系统(PS)中。同时,SDSoC会在那些IP和PS系统间自动生成互连。
3.1系统级的特性描述
快速性能估算与面积估算可在几分钟内完成,包括PS、数据通信以及PL
高速缓存、存储器以及总线利用率的自动运行时仪表
可实现最佳总体系统架构的便捷生成与探索
3.2全系统优化编译器
可将C/C++/OpenCL应用编译成全功能ZynqSoC与MPSoC系统。
可在生成ARM软件与FPGA比特流的可编程逻辑中实现自动功能加速。
不仅可优化系统连接,而且还支持吞吐量、时延以及面积权衡的快速系统探索。
3.3SDSoC开发流程
①SDSoC环境使用快速估算流程(通过调用内含的VivadoHLS)构建应用项目。这样在数分钟内就能大致估算出性能和资源情况。
②如果有必要,用适当的指令优化C/C++应用和硬件功能,并重新运行估算直到实现所需的性能和占位面积。
③然后,SDSoC环境构建整个系统。该过程会生成完整的VivadoDesignSuite项目和比特流,以及一个针对Linux、FreeRTOS或裸机的可引导的运行时间软件映像。