【声明】纯属原创,未经允许,禁止转载。
0. 引言
任何最初的入门学习都是以官方参考文档为基础的,所以我的第一个实验也是参考Xilinx公司的官方实验手册为出发点的。
但是官方的文档只是操作手册,只是“授人以鱼”,“使人知其然”,而我这是深入学习笔记,希望“授人以渔”,“使人知其所以然”,不知能否达到这个目的。
这一篇学习笔记在我电脑中的word版的就有96页(当然为了直观形象,图比较多),因此可能要发多个帖子才能发完。请注意标题编号。
1. 任务描述
引用官方实验指导书上的图。
本实验所需构建的SoC硬件系统需要包含下列功能模块:
1)ARM Cortex A9的CPU内核(PS)
2)UART串口通信模块(用于输出信息)
3)DDR3控制器,用于对FPG**外的DDR3_SDRAM内存进行交互控制,用作PS的内存空间
4)AXI总线接口控制模块,用于实现CPU与AXI总线外设之间的数据交互
5)创建2个AXI GPIO模块的实例,分别用来接收拨码开关和按键开关的输入信息。
2.操作流程
Step 1:创建Vivado工程
Step 2:使用IP Integrator创建一个包含ARM内核的SoC系统
Step 3:实例化2个Xilinx公司提供的AXI GPIO模块
Step 4:创建GPIO模块的外设连接管脚
Step 5:生成BitStream文件并将该文件导入到SDK工程中
Step 6:在SDK工程中创建嵌入式系统工程
Step 7:软硬件联合调试,下板测试验证。
3. 硬件系统集成配置流程
【说明】:下文对应的实验流程使用的Vivado版本为2014.4。
3.1 创建Vivado工程
这一节均为看图说话,有点啰嗦,但是对于初学者还是有帮助的,大侠请跳过。
首先,创建一个新的工程。
为工程起个名字,同时选择工程的存放地址。勾选"Create Project subdirectory"将会创建工程的目录结构。
设计的工程,均选择“RTL Project”项,无论是SoC工程还是纯Verilog开发的传统FPGA工程。其余几项以后再研究。
如果有部分模块的HDL源代码,可以在上图所示的Add Source页面进行添加,如果是完全重新设计的工程,一点积累都没有,可以点击Next按钮忽略该步骤。
注意:即使已经有了部分模块的HDL源代码,在创建工程时也可以忽略该步骤,在后继介绍的Vivado的Project Manager中也可以随时添加。
如果存在存在封装好的用户IP核,可以在上述界面中进行添加,同样也可以在工程开发时随时添加。此处添加的用户IP核,将会出现在工程中的IP Catalog页面中。
注意:本专题进行SoC开发本质上就是开发一个个符合特定要求的用户IP核,后面就干这个事情。不要着急,慢慢来。。。。
上面的页面是为了添加约束文件的,在Vivado中约束文件的格式与我以前掌握的完全不同。有空要再好好研究研究了。
选择开发板,软件中有的都是官方开发板,由于我是用的是ZedBoard开发板,库中存在,因此可以选择。否则的话就忽略该步骤,这一步的唯一好处,应该就是省了部分管脚约束的问题。其实管脚约束是约束中最简单的。
最后给个综合信息,让用户确认一下,如果没问题点击Finish结束创建工程向导,进入工程开发页面。
3.2 使用IP Integrator创建一个包含ARM内核的SoC系统(定制Zynq子系统)
(1)Zynq处理器系统说明
对于Zynq系列的芯片,Xilinx官方定义分为PL和PS,其中PL(Programmable Logic)即为传统意义上的由Logic Cell组成的用户可编程逻辑,即HDL语言的实施载体,也可以称之为狭义上的传统FPGA。
PS(Processing system)文字翻译是处理器系统,注意是一个系统,而不像VII Pro系列中那样直接就是一个Power PC的处理器核,PS这个处理器系统就是Zynq,Zynq是Xilinx公司集成好的一个基于ARM内核的最小硬件系统,只不过可以通过配置进行裁剪。
上图就是一个完整的Zynq子系统,里面所有的模块均为硬核(至少逻辑上是硬核,没经考证),里面绿色的表示可以通过配置裁剪掉的,灰色的为固定存在不能省略掉的。
如果单看这个zynq子系统,其实已经是一个完备的普通意义上的ARM芯片了。因此网上才会看到基于ZedBoard板子的智能小车系统,其实它就是把Zynq-7000芯片只配置PS端,不用PL端,它就是一个普通意义上的ARM芯片。
【个人理解】
对于嵌入式开发中常说的ARM芯片,我的认识是,没有一片ARM公司生产的ARM芯片,所有市面上的ARM芯片都是由生产公司从ARM公司买来CPU Core的版图,然后结合自身储备的外设IP集成一个最小的芯片系统。因此所谓的ARM芯片应该看成一个单片机。
举个不恰当的例子,无论是ST,飞思卡尔,高通骁龙,华为海思都可以类比称DELL,HP,联想这样的电脑公司。联想们从Intel买来CPU,而高通骁 龙们从ARM买来CPU的Core;联想们从希捷等厂家买来硬盘,而高通骁龙们买来DDR的IP核;联想们从Realtek等厂家买来网卡芯片,而高通骁 龙从自己公司拿来CDMA的通信IP核....等等,材料准备好了,联想们自己设计主板,将外设通过南北桥总线与CPU相连,而高通骁龙们自己绘制版图, 通过AMBA总线将IP核与ARM Core直接的通路打通;联想们做个机箱,高通骁龙们做个封装。
所以我说SoC系统重在集成,需要注重的是功能和接口,需要培养系统层面的视野。而功能IP才是设计开发,重点在于人无我有,人有我精的功能or参数。
所以说Zynq把常用的基本IP核都通过硬核的方式设计完成了,减少了开发人员进行重复劳动的时间,但是匹配的PL能让用户实现自己的特殊功能。这个真是太伟大了。
Intel收购Altera,难道真是要在通用芯片中开辟一个小区域放一些Logic Cell(Altera的技术架构是这么叫吗,有点忘了,毕竟不怎么用A家的产品。我是Xilinx粉呵呵),能够供用户定制一些小的特殊外设吗?如果是 这样,将来的嵌入式开发将会打破ARM开发和FPGA开发的界限。交叉融合啊!?!?
所以,PS指的是Zynq,而Zynq内包含两个ARM Core和其他一些固有的外设硬IP。我讲过之后,还有学生说PS就是ARM,被我批了,我说这是文科生写科技文档时说的,作为学这个的,一定要把层次概念整明确了,因为只有理解了层次关系,才能更好的应用,
(2)裁剪定制Zynq处理器系统
Linux开发有裁剪内核一说,我们这里更高级,能裁剪硬件了,创建一个新的不容易,但是去除一些已有的很简单。
我们这里就是根据任务要求,仅保留最小系统,上图绿色的模块可以被裁剪,但是灰色的只能保留,对我们来说连配置的接口都没有。
首先,点击下图所示的Create Block Design按钮,创建一个Block Design。
所谓Block Design,个人理解就是电路板开发阶段的原理图设计,前面说过SoC设计中,将一个一个的Module封装成IP核,就相当于电路板设计时面对的一个一个黑色的集成电路芯片,通过画原理图把这些芯片(IP)正确连接起来,构成一个满足用户需求的电路。
在下图页面中,为这个将来要设计完成的完整电路起个名字。
此时,打开了一个空白的原理图设计页面,需要点解页面上方提示条中的“Add IP”按钮往设计页面中添加可以使用的IP核。
c语言只能在CPU上运行,所以本工程首先要添加单片机IP核,前文已经分析了,该CPU子系统就是Zynq。因此查找Zynq。如图所示,资源库中存在两个名字中包含zynq的IP核。
双击图中所示的IP核,将会在设计页面中摆放一个该模块。
双击该IP核图标,将会打开Zynq子系统的配置操作页面,如下所示。官方实验文档中讲到,通过“Import XPS Settings”按钮导入之前做好的配置文件,从而完成Zynq子系统的配置。
但是如果是新手,以前也没有积累的配置文件,可以完全不用管这一步,完全可以通过该配置页面进行手工配置Zynq子系统,当然配置完成之后,可以自行导出一个设计好的配置文件,以后就可以导入了,免得每次都要手动配置。
具体如何手动配置,后面会讲到。慢慢来。。。。
【个人理解】
其实这个xml就是保存这个页面的配置信息的,如果没有也没关系,可以点击“Presets”选择相应的开发板,比如这里用的zedboard,就会将软 件自带的官方配置给载入,该配置仅是一个通用配置,不一定完全符合用户的要求,第一次实验先用官方的跑起来再说,后面我们将会完全自行配置的。
指定开发板,调用官方配置唯一的一个好处就是能够避免最麻烦的时钟配置,这一点后面会讲到。如果自己配置好了,可以通过Save Configuration...保存成自己的xml文件。
选择默认配置后,Zynq子系统配置页面中打勾的模块就是官方配置中被激活使用的。如下所示。
【未完待续】操作示意图比较多,这一篇就到这吧,另开一篇继续。
用户3640748 2016-4-20 08:09