原创 【博客大赛】Zynq构建SoC系统深度学习笔记-01_利用IP集成器构建嵌入式SoC系统(01)

2016-1-20 20:00 2180 9 10 分类: FPGA/CPLD 文集: Zynq构建SoC系统深度学习笔记

【声明】纯属原创,未经允许,禁止转载。

0. 引言
    任何最初的入门学习都是以官方参考文档为基础的,所以我的第一个实验也是参考Xilinx公司的官方实验手册为出发点的。

1.jpg


    但是官方的文档只是操作手册,只是“授人以鱼”,“使人知其然”,而我这是深入学习笔记,希望“授人以渔”,“使人知其所以然”,不知能否达到这个目的。
    这一篇学习笔记在我电脑中的word版的就有96页(当然为了直观形象,图比较多),因此可能要发多个帖子才能发完。请注意标题编号。

1. 任务描述
  引用官方实验指导书上的图。

2.jpg


  本实验所需构建的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工程
   这一节均为看图说话,有点啰嗦,但是对于初学者还是有帮助的,大侠请跳过。

3.jpg


    首先,创建一个新的工程。

4.jpg

    为工程起个名字,同时选择工程的存放地址。勾选"Create Project subdirectory"将会创建工程的目录结构。

图片1.jpg

    设计的工程,均选择“RTL Project”项,无论是SoC工程还是纯Verilog开发的传统FPGA工程。其余几项以后再研究。

图片2.jpg

    如果有部分模块的HDL源代码,可以在上图所示的Add Source页面进行添加,如果是完全重新设计的工程,一点积累都没有,可以点击Next按钮忽略该步骤。
    注意:即使已经有了部分模块的HDL源代码,在创建工程时也可以忽略该步骤,在后继介绍的Vivado的Project Manager中也可以随时添加。

图片3.jpg

    如果存在存在封装好的用户IP核,可以在上述界面中进行添加,同样也可以在工程开发时随时添加。此处添加的用户IP核,将会出现在工程中的IP Catalog页面中。
    注意:本专题进行SoC开发本质上就是开发一个个符合特定要求的用户IP核,后面就干这个事情。不要着急,慢慢来。。。。

图片4.jpg

    上面的页面是为了添加约束文件的,在Vivado中约束文件的格式与我以前掌握的完全不同。有空要再好好研究研究了。

图片5.jpg

    选择开发板,软件中有的都是官方开发板,由于我是用的是ZedBoard开发板,库中存在,因此可以选择。否则的话就忽略该步骤,这一步的唯一好处,应该就是省了部分管脚约束的问题。其实管脚约束是约束中最简单的。

图片7.jpg

    最后给个综合信息,让用户确认一下,如果没问题点击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内核的最小硬件系统,只不过可以通过配置进行裁剪。

图片8.jpg

    上图就是一个完整的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)正确连接起来,构成一个满足用户需求的电路。

图片9.jpg

    在下图页面中,为这个将来要设计完成的完整电路起个名字。

图片10.jpg

    此时,打开了一个空白的原理图设计页面,需要点解页面上方提示条中的“Add IP”按钮往设计页面中添加可以使用的IP核。

图片11.jpg

    c语言只能在CPU上运行,所以本工程首先要添加单片机IP核,前文已经分析了,该CPU子系统就是Zynq。因此查找Zynq。如图所示,资源库中存在两个名字中包含zynq的IP核。

图片12.jpg

    双击图中所示的IP核,将会在设计页面中摆放一个该模块。

图片13.jpg

    双击该IP核图标,将会打开Zynq子系统的配置操作页面,如下所示。官方实验文档中讲到,通过“Import XPS Settings”按钮导入之前做好的配置文件,从而完成Zynq子系统的配置。
    但是如果是新手,以前也没有积累的配置文件,可以完全不用管这一步,完全可以通过该配置页面进行手工配置Zynq子系统,当然配置完成之后,可以自行导出一个设计好的配置文件,以后就可以导入了,免得每次都要手动配置。
    具体如何手动配置,后面会讲到。慢慢来。。。。

图片14.jpg
图片15.jpg



【个人理解】
    其实这个xml就是保存这个页面的配置信息的,如果没有也没关系,可以点击“Presets”选择相应的开发板,比如这里用的zedboard,就会将软 件自带的官方配置给载入,该配置仅是一个通用配置,不一定完全符合用户的要求,第一次实验先用官方的跑起来再说,后面我们将会完全自行配置的。
    指定开发板,调用官方配置唯一的一个好处就是能够避免最麻烦的时钟配置,这一点后面会讲到。如果自己配置好了,可以通过Save Configuration...保存成自己的xml文件。

图片16.jpg

    选择默认配置后,Zynq子系统配置页面中打勾的模块就是官方配置中被激活使用的。如下所示。

图片17.jpg


【未完待续】操作示意图比较多,这一篇就到这吧,另开一篇继续。

文章评论1条评论)

登录后参与讨论

用户3640748 2016-4-20 08:09

相关推荐阅读
用户1472402 2016-01-23 19:22
【博客大赛】Zynq构建SoC系统深度学习笔记-01-利用IP集成器构建嵌入式SoC系统(11)
【声明】纯属原创,未经允许,禁止转载。       如果修改嵌入式程序后,想重新下载,首先需要断开当前的链接,操作如下: (1)点击“Teminate”工具图标,此时Console不再...
用户1472402 2016-01-23 18:06
【博客大赛】Zynq构建SoC系统深度学习笔记-01-利用IP集成器构建嵌入式SoC系统(10)
【声明】纯属原创,未经允许,禁止转载。   4.5 下板测试     硬件和嵌入式软件都设计完毕,并且编译成功之后,就需要下板测试了。     首先保证硬件电路连接正确,下载器驱动...
用户1472402 2016-01-23 17:50
【博客大赛】Zynq构建SoC系统深度学习笔记-01-利用IP集成器构建嵌入式SoC系统(09)
【声明】纯属原创,未经允许,禁止转载。   【接前文】 查找到函数的定义,相当复杂,以下是函数说明:     ...
用户1472402 2016-01-23 17:35
【博客大赛】Zynq构建SoC系统深度学习笔记-01-利用IP集成器构建嵌入式SoC系统(08)
【声明】纯属原创,未经允许,禁止转载。   5.嵌入式软件设计嵌入式软件设计 5.1 将硬件信息导入到SDK嵌入式软件工程中     由于嵌入式软件必须依赖于设计的硬件系统结构,因...
用户1472402 2016-01-20 22:29
【博客大赛】Zynq构建SoC系统深度学习笔记-01-利用IP集成器构建嵌入式SoC系统(07)
【声明】纯属原创,未经允许,禁止转载。 【接前文】     前文介绍了通过I/O Planning界面配置的方式创建约束文件的方法。     下面介绍直接创建文件的方法。     直接点击...
用户1472402 2016-01-20 22:08
【博客大赛】Zynq构建SoC系统深度学习笔记-01-利用IP集成器构建嵌入式SoC系统(06)
【声明】纯属原创,未经允许,禁止转载。3.5 将硬件集成设计方案转变成verilog封装形式     到此为止,对于SoC的设计是存储在.bd格式的文件中的,这种格式应该是便于配置和图形化显示...
我要评论
1
9
关闭 站长推荐上一条 /2 下一条