有三四个月没有记录blog了,这段时间也参加了一些比赛,以及上课。Vivado的资料还没有记录完,不过还是先记录下这段日子用的比较多的Zynq, 也为接下来的项目做做准备。学习主要还是看官方资料,还有黑金米联的一些教程(虽然一些细节、概念有错误,但能让入门更快也是好事)。
使用Xilinx FPGA进行嵌入式设计有两种解决方案:(1).使用MicroBlaze软核处理器进行设计,适用于纯FPGA平台;(2).基于Zynq-7000 AP SoC处理器进行设计,只适用于Zynq系列FPGA。Zynq芯片内部包括ARM处理器(通常称为PS部分)与可编程逻辑部分(通常称为PL部分)。
本系列将讲述如何使用Vivado完成基于Zynq平台的嵌入式系统设计。一个完整的嵌入式系统设计要考虑硬件、软件、FPGA设计三个部分。Xilinx为了尽量简化设计流程,提供如下两个主要设计工具:
Vivado IDE中的IP Integrator,将基于处理器的设计连接在一起,以图形化的方式设置器件、选择外设、配置硬件设置。
Vivado开发套件中的另一款软件开发工具SDK(Software Development Kit),对基于微处理器的系统和嵌入式软件应用进行设计、调试。
目前Zynq包含Zynq UltraScale+ MPSoC系列(内置Cortex-A53)和Zynq 7000 SoC系列(内置Cortex-A9双核)。本博客系列主要以Zynq 7000系列为主,其嵌入式开发流程相对比较简单,开发板采用米联的MZ7X(淘宝可购买,适合新手)和火龙果、ZedBoard(适合进阶阶段,较贵)。相关学习资料可以参考官方文档UG898、UG940、UG585、UG821、UG782。
Xilinx提供的工具,既支持开发无需操作系统的裸机应用,也支持开发基于开源Linux操作系统的应用。下图给出了一个大致流程:
配置好Zynq处理器后,通常还要添加一些其它IP。IP Integrator中的设计助手(Designer Assistance)特性可以帮助设计者完成系统搭建与端口之间的连线,主要包括如下两个功能:
当然,连线也可以手工完成。当工具检测到某些工作可以通过设计助手完成时,会在窗口上方给出提示,如下图:
本节具体讲述下设计步骤的3、4步。生成输出产品会产生IP核的源文件与约束文件。导出文件的语言由工程设置决定,如果某IP核不支持该语言,导出时会提示相关信息。源窗口中选中IP Integrator验证好的块设计,右键->Generate Output Products,或在左侧Flow Navigator中点击IP INTEGRATOR->Generate Block Design,可导出该块设计中所有IP的输出文件。
当把IP Integrator中的处理器硬件设计导出到SDK时,会生成下表中格式的一些文件。
文件名 | 功能 |
---|---|
system.xml | 运行SDK时默认打开,显示系统的地址映射相关信息 |
Ps<#>_init.c Ps<#>_init.h | 包含Zynq处理器系统的初始化代码,还有DDR、时钟、PLL和MIO的初始化设置信息 |
PS<#>_init.tcl | 初始化文件的Tcl版本 |
PS<#>_init.html | 描述初始化数据 |
SDK提供了为Xilinx嵌入式处理器创建软件应用的完整开发环境,具体包括:基于GNU的编译工具链(GCC编译器、TCF系统调试器、相关单元和库)、JTAG调试器、Flash编程器、Xilinx IP和裸机板级支持包的驱动、使用C/C++进行裸机开发或Linux应用开发的IDE。SDK基于开源的Eclipse平台开发,还包含了C/C++开发工具箱。
当设计已经实现并生成了bit流时,通常都需要将设计导出到SDK中进行软件应用开发。某些设计中PL部分可能不包含任何逻辑(即单纯地把Zynq当作ARM来使用),无需实现和生成bit流便可导出设计。先点击File->Export->Export Hardware,弹出如下窗口:
本文前面介绍了一些FPGA嵌入式开发的基本知识和软件特性,本小节将以一个完整的Hellow World实例熟悉如何搭建Zynq-700 AP SoC处理器。这个过程中将运用到上述特性,也会出现一些大家不熟悉的概念。本节着重体会一个大致的流程,具体概念在下一篇着重讲述。
至此便完成了一个简单的嵌入式开发实例,接下来的文章将介绍整个流程中设计到的很多概念,以及一些选项的具体配置方法。本文实验使用的是SDK自带例程,后面的文章中也会讲述如何自己在SDK中编程。
联系客服