沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

 


目录

一、概述

二、逻辑输出“Hello World”

2.1 新建工程

2.2 创建block设计

2.3 SDK开发


一、概述

这是开启ZYNQ学习的第一章,在接下来就要学习ZYNQ的相关设计方法了。本章不涉及任何程序的设计,就是操作,搭建ZYNQ开发平台的基本操作,这些操作是不需要刻意的联系,忘了翻翻看就好。其中这些内容是不应该去整理的,因为买的开发板附带教程都有的。

如下图为zynq架构图

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

对于刚接触的咱们来说,就知道三件事即可

  1. zynq其实就是把FPGA和ram结合起来了,FPGA和RAM对应的开发套路是没变的
  2. FPGA(PL侧)和RAM(PS侧)的互联方式可以说是zynq固有的,也是着重需要学习的,了解PS、PL的互联模式。才能在接下来的开发中真正的将ZYNQ用起来
  3. FPGA开发软件Vivado,RAM开发分裸机开发和linux开发,裸机开发软件是vivado里面的套件SDK,跑系统还要有嵌入式开发那一堆工具

二、逻辑输出“Hello World”

2.1 新建工程

下面就是一步一步的实现ZYNQ的PS侧裸机输出“hello world”,在串口打印

我用的是vivado 2017.4

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

1)打开vivado点击“create project”

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

2)直接next

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

3)给工程起好名字,选好位置,我这里为了通用性,工程名字prj

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

4)先不添加程序文件,红框打钩NEXT

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

5)选择芯片类型,我这里是7015,然后next

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

6)这就建好了,直接finish

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

7)如下图,一个空白工程,所在目录有了文件

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程


2.2 创建block设计

ZYNQ的设计就是模块的连线,我们写的verilog可以说就是一个模块,在这里主要是搭建RAM开发的硬件环境,例如有什么外设,时钟是多少等等

第一步:点击左侧的“Create Block Design”,创建一个 Block 设计,也就是图形化设计,我们可以给将要进行的图像化设计模块更改名字和存储路径,这里先默认,直接点OK

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程 沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

这就是图形化设计界面

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第二步:添加模块

         添加模块实则就是添加IP,我们可以把ZYNQ开发的任何功能都视为一个模块,不同模块的相互配合就实现我们想要的功能,这些模块我们称之为IP,试想,平时的开发不也是模块开发么?只不过有的模块划分比较糟糕

         首先,点击“+”添加IP会有众多模块供我们选择,

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

如下图,现在搜索ZYNQ,这个包含了PS侧的所有内容以及和PL的接口配置等等

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程 沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

我们双击即可添加如下模块,我们可以在左侧这个窗口改名字,目前默认吧

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程 沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第三步:模块配置简介

         当我们双击这个模块,会弹出下面这个界面,这个界面就是对ZYNQ的PS侧以及与PL接口等配置。

下面简单介绍一下

  1. 就是现在选的右图,这就是PS侧内容,绿色区域是可配置的,我们把数据放上去显示箭头时单击鼠标即可转到对应页面进行相关配置
  2. PS-LP Configuration这里包括PS和PL之间互联的接口配置,之间可以通过不同模式进行数据交换
  3. Peripheral I/O Pins 这是对PS侧的外设配置,也就是ram的外设,通常ram的外设是固定引脚的,那个引脚的复用功能是固定的,对于zynq来说,可以在一定范围内的配置,根据硬件设计来决定
  4. MIO Configuration 和3)类似
  5. Clock Configuration 系统时钟、PL侧时钟、DDR时钟等各种设备的时钟配置
  6. DDR Configuration RAM执行程序需要先把程序写到DDR,然后再读指译码,所以配置DDR类型等
  7. SMC Timing Calcultion 静态存储器控制器的时序配置,比如NAND、NOR等,无需过多了解
  8. Interrrupts 中断,PL和PS侧的中断配置,有好多中断,用时再说

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第四步:RAM最小系统配置

         RAM最小系统配置就是能让RAM工作的最小系统,其中有RAM就行了,但为了打印信息,还需要串口。

1)在PS-LP Configuration页面把勾选的都取消了,最小其他不需要,如下图

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

2)Peripheral I/O Pins,点击UART1,变成绿色就选中,具体选哪个得看原理图了,BANK1选中1.8V,

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程 沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

3)Clock Configuration PL侧时钟和复位取消了

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

4) DDR Configuration配置,根据自己板类型选中

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

5)点击OK就是这个样子了,这就是最小系统,我们可以跑RAM

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第五步:点击“Run Block Automation

  1. 自动连接,将引脚引出

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

         2)再弹出界面点击OK

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

         如下图,然后保存

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第六步:生成配置文件,

1)可以说是个大的IP,生成顶层配置文件

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

         2)点击OK,界面变成如图右所示

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程 沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

         3)生成IP作为系统的一部分,当然,对于FPGA来说是这样

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第七步:编译

其实对于本章,没有用到PL侧是不用生成bit文件的,但还是生成吧

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程


2.3 SDK开发

下面就开始SDK的开发流程了,就是RAM(PS)侧的程序设计

第一步:新建SDK

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

……

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

        如果有PL端程序,则需要勾选Include bitstream,点击OK

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

        在该文件生成如下文件

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第二步:新建SDK

        点击如下选项

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

SDK位置可以是默认位置

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

如下就打开SDK界面,可以进行SDK开发

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

启动硬件设计的信息,可以给软件开发使用,也可以看到SDK 后我们会看到一个文件夹,有一个名为"system.hdf”文件,这个文件就包含了PS 端外设的寄存器列表。

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

第二步:新建工程

在SDK 的菜单“New -> Application Project”,建立一个 APP 工程

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

         在弹出界面填写工程名字“hello_world”下面会自动填充一个“_bps”。

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

        点击next选择一个工程模板,Finish

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

        如下图就有了工程,bps里面包括了很多库开发模块,我们可以直接调用

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

点小锤子编译一下

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程


2.4 程序烧写

右键工程,配置烧写

         沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

弹出界面双击红框内容

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

打钩

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程

打印内容

沧小海学ZYNQ——第一节 通过PS端输出“hello world”体验ZYNQ开发流程