本篇文章,以配置一个PS端的UART外设,并打印一句话《hello ZYNQ7020,Author:liushuhe 2020.11.26》来演示

ZYNQ7020的基本开发流程,本篇文章需要一点点的C语言知识,不会也不影响实验的,跟着步骤做就行了。

一、任务分工

ZYNQ 芯片分为 PL 和 PS, PS 端的 IO 分配相对是固定的,不能任意分配,虽然 PS 端的 ARM 是硬核,但是在 ZYNQ 当中也要将 ARM 硬核添加到工程当中才能使用,FPGA 工程师负责把 Vivado 工程搭建好,提供好硬件给软件开发人员,软件开发人员便能在这个基础上开发应用程序 ,软件开发人员,不用关心FPGA的部分。

二、FPGA工程师搭建硬件平台

我们这里演示搭建一个带UART和arm A9处理器的硬件平台

1.1、建立vivado工程

创建一个“ps_uart”的工程,具体过程,参考我文章开头超链接文章;

1.2、点击“Create Block Design”,创建一个 Block 设计,也就是图形化设计

1.3、“Design name”可以不修改,我改成ps_uart便于识别

1.4、点击“Add IP”快捷图标

1.5、搜索“zynq”,在搜索结果列表中双击“ZYNQ7 Processing System

1.6、双击 Block 图中的“processing_system7_0”(直接双击蓝色区域),配置相关参数

1.7、首先出现的界面是 ZYNQ 硬核的架构图,可以很清楚看到它的结构,可以参考 官方文档,在官网搜索ug585 即可

1.8、图中绿色部分是可配置模块,可以点击进入相应的编辑界面

1.9、也可以在左侧的窗口进入编辑 ,下面分别介绍左侧选项代表的功能;

2.0、Zynq 块设计参数配置,单击绿色块右下角,可以进行参数配置

2.1、PS-PL Configuration  配置界面,主要是进行 PS 与 PL 之间接口的配置,主要是AXI 接口,这些接口可以扩展 PL 端的 AXI 接口外设

核。

2.2、我们这篇文章是PS开发流程,关于PS-PL Configuration  配置在这里保持默认,在后面的实验中我再补充

2.3、外设配置,ZYNQ 的 PS 端外设很多是复用的 ,同一引脚可以配置为不同的功能

zynq内部只有2个串口,UART0、UART1、我们看UART0可以接在(10、11)/(14、15)/(18、19)/(22、23)/(26、27)

2.4、配置串口,我们的ps_uart需要一个串口来打印消息,查看ZYNQ7020开发板的原理图

从原理图看出,ZYNQ的PS端的串口,连接的是MIO12、MIO13端口,并且电源是3.3v

2.5、从I/O分配看,MIO12、MIO13是串口1,在MIO12、MIO13引脚对应串口上单击,会看见该模块变为绿色,即代表分配成功

关于BANK0、BANK1的电压,由于创龙没有给核心板的原理图,但是给了一个WORD的描述文档,大家也要熟悉这个方式

国内很多厂家都是这样,属于技术保密

按照上述表格分配UART1电压和引脚

2.6、配置 QSPI, QSPI 可以作为 ZYNQ 的启动存储设备, ZYNQ 可以通过读取 QSPI 中存储的启动文件加载 ARM 和 FPGA

从核心板word表格和创龙给的例程,得知我们选择 Quad SPI Flash 为 Single SS 4bit IO

2.7、配置以太网,在 PS 端设计有以太网接口

1、根据原理图选择 Ethernet 0 到 MIO16-MIO27

电压是1.8v

2、配置PHY 寄存器配置接口,选择 MDIO 并配置到 MIO52-MIO53

      

2.8、配置 USB0 到 MIO28-MIO39

2.9、ZYNQ还可以SD卡启动

查看底板原理图,选择 SD 0,配置到 MIO40-MIO45,选择Card Detection MIO0,用于检测 SD 卡的插入。

1、配置SD0

2、选择Card Detection MIO0,用于检测 SD 卡的插入

3.0、控制剩余未分配的 MIO,用作 GPIO ,打开GPIO MIO, PS 便可以配置

1、双击GPIO MIO当出现打钩的提示时,软件会自动把我们未使用到的IO分配为GPIO

2、到这里引脚分配全部完成,如果以后做实验需要配置其他外设,可以参考这个文章,作相应的修改即可

3.1、MIO 配置

修改 Enet0 的电平标准为 HSTL 1.8V, Speed 为 fast,这些参数非常重要,如果不修改,网络可能不通。其他部分保持默认。

3.2、时钟配置

在“Clock Configuration”选项卡中我们可以配置 PS 时钟输入时钟频率,这里默认是 33.333333,和板子上一致,不用修改,

CPU 频率改为 767Mhz,同时 PS 还可以给 PL 端提供 4 路时钟,频率可以配置,这里不需要,所以保持默认即可。

还有 PS 端外设的时钟等也可以进行配置,这里保持默认。

3.3、DDR3 配置

在“DDR Configuration”选项卡中可以配置 PS 端 ddr 的参数

根据创龙的例程,内存芯片我们选择《MT41K256M16 RE-125》,Effective DRAM Bus Width 选择《32bit》

其他部分保持默认,点击 OK

3.4、到这里ZYNQ核的配置完成,我们配置参数及导出硬件信息  

1、点击“Run Block Automation”, vivado 软件会自动完成一些导出端口的工作

2、按照默认点击“OK”

3、连接 FCLK_CLK0 到 M_AXI_GP0_ACLK,按 Ctrl+S 保存设计

4、选择 Block 设计,右键“Create HDL Wrapper...”,创建一个 Verilog 或 VHDL 文件,为ps_uart生成 HDL 顶层文件

5、在弹出对话框,选择让vivado软件自动更新 顶层文件

6、展开设计可以看到 PS 被当成一个普通 IP 来使用 ,之前生成那个顶层文件,其实就是为了把我们的硬件配置

生成一个IP核,供我们调用

7、选择 block 设计,右键“Generate Output Products”,此步骤会生成 block 的输出文件,包括IP,例化模板, RTL 源文件, XDC 约束,第三方综合源文件等等。供后续操作使用。

8、点击“Generate”

9、PS 端的引脚不需要绑定 ,因为在生成的IP文件包含了 PS 端引脚分配的 XDC 文件

在 IP Sources, Block Designs->ps_uart->Synthesis 中,可以看到处理器的 XDC 文件,绑定了 PS 端的 IO,因此不需要再新建 XDC 绑定这些引脚

10、在菜单栏“File -> Export -> Export Hardware...”导出硬件信息,这里就包含了 PS 端的配置信息。

11、在弹出的对话框中点击“OK”

12、因为我们这个实验仅仅是使用了 PS 的串口,不需要 PL 参与,这里就没有使能“Include bitstream” ,关于PS-PL的联合实验,我会另写一篇

13、此时会多出 xx.sdk 文件夹,并且有个 hdf 文件,这个文件就是这个文件就包含了 Vivado 硬件设计的信息,供软件开发人员使用。

14、到此为止, FPGA 工程师工作告一段落,剩下的工作交给ARM软件开发人员。

二、ARM软件编写C语言程序,在串口打印一句话《hello ZYNQ7020,Author:liushuhe 2020.11.26》

1、点击 Vivado 菜单“File -> Launch SDK”,启动 SDK

2、在弹出的对话框选择OK

3、启动 SDK 后我们会看到一个文件夹,有一个名为"system.hdf”文件,这个文件就包含了

Vivado硬件设计的信息,可以给软件开发使用,也可以看到 PS 端外设的寄存器列表。

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

4、在弹出的对话框中,“Project name”填写“ps_uart_hello”,硬件平台选择我们自己定义的ps_uart_wrapper_hw_platform

语言C、其他默认,点击“Next”

5、模板选择《hello world》,点击Finish

6、可以看到 SDK 创建了一个“ps_uart_hello”目录,还有一个“ps_usrt_hello_bsp”的目录,在“ps_usrt_hello_bsp”目录中可以找到很多有用的信息,软件开发人员比较清楚,BSP也就是 Board Support Package板级支持包的意思,里面包含了开发所需要的驱动文件,用于应用程序开发。

7、双击“system.mss”,还可以看到有些 PS 外设还提供了例程,这是用来了解学习这些外设的

第一手资料。驱动文档说明可以在 Documentation 中找到。通过 Import Examples 引入官方

例子,加快学习。

8、连接 JTAG 线到开发板、 UART 的 USB 线到 PC

9、打开串口终端调试工具,  串口根据电脑的COM口设置,波特率设置为115200

10、将开发板的启动模式设置到 JTAG 模式

开发板设置拨码为【 010101(1~6 JTAG 模式)】、【 100101(1~6 QSPI 模式)】、【101001(1~6 SD卡模式】

11、给开发板上电,准备运行程序

1、修改helloword.c,将printf打印修改为printf("hello ZYNQ7020,Author:liushuhe 2020.11.26\n");

      

2、编译代码,右键单击ps_uart_hello,在弹出的列表选择Build Project,编译完成可以看看没有报错

12、选择“ps_uart_hello”,右键“Run as”,选择第一个“Launch on Hardware(SystemDebuger)”,使用系统调试,直接运行程序。

13、可以看到串口没有任何输出

14、为了保证系统的可靠调试,需要添加一个配置,右键“Run As -> Run Configuration...”

15、选择“Reset entire system”复位整个系统,如果系统中还有 PL 设计,还必须选择“Program FPGA”,再次点击“Run”

16、点击“OK”,确认重新运行

17、这次就可以看到熟悉《hello ZYNQ7020,Author:liushuhe 2020.11.26》显示出来了

三、Debug调试

1、除了“Run As”,还可以“Debug As”,这样可以设置断点,单步运行

2、进入 Debug 模式 ,程序会自动运行到main函数处

3、和其他开发工具一样,我们也可以逐步运行、设置断点

4、窗口右上角,有2个按钮可以方便我们在debug和编辑模式之间进行切换

XLINX项目之ZYNQ7000系列之PS端串口打印相关推荐

  1. zynq系列之-----PS端iic使用

    本文主要讲述zynq的iic使用.此IIC只能作为主站,作为从站的不适合本文. Iic的接口在ps端.(iic的接口在pl端的情况下,不适合本文) 使用软件版本:vivado2018.3 pl端设置: ...

  2. 【一 zedboard】PS端实现打印hello world

    通过一个简单的实验,了解在zedboard上仅仅使用ps部分的基本方法和流程.使用的软件是vivado.这个记录不需要增加外设,这仅仅生成PS最小硬件系统. 1.zedboard板子的接线示意图 2. ...

  3. zynq7000创建fsbl启动_【转】Zynq启动过程探讨-进入main函数前不了解的事-Zynq-7000系列-米尔科技论坛...

    写在前面: 本人纯属菜鸟,不敢保证自己的观点正确,各位看官多指教. 本文讨论的主题是zynq启动过程. 阅读本文要对Zyna EPP有那么一点点了解,最好使用过Xilinx的PlanAhead.EDK ...

  4. zcu102自学 —— 第一个实验 (纯PS 串口打印 Hello world)

    实验项目  : 纯PS UART串口打印 Hello  world 板子:ZCU102 时间:2019.1.25 在第一个实验自己捣鼓了三天以后,得到师兄以及技术群热心朋友的帮助,想把自己遇到的问题写 ...

  5. Xilinx Zynq-7000系列XC7Z035/XC7Z045高性能SoC处理器评估板PS端ETH RJ45接口

    本文分享XINES DSP+FPGA异构评估板,其中Xilinx Zynq-7000系列XC7Z035/XC7Z045系列主要特性,资源框图及PS端ETHRJ45接口引脚说明.CPU架构:DSP+FP ...

  6. zynq7000系列PS端GPIO初始化函数XGpioPs_LookupConfig()和XGpioPs_CfgInitialize()详解

    前言    xilinx公司在设计这款芯片时就同步编写了ps端的函数库,我们在对zynq这款芯片进行开发,直接调用库函数就可以了.不过比较难过的是,官方虽然编写了函数驱动库,但并没有出版相应的类似于函 ...

  7. 基于Xilinx Zynq-7000系列XC7Z035/XC7Z045/XC7Z100高性能SoC处理器设计的高端核心板

    核心板简介 创龙SOM-TLZ7xH是一款基于Xilinx Zynq-7000系列XC7Z035/XC7Z045/XC7Z100高性能SoC处理器设计的高端核心板,处理器集成PS端双核ARM Cort ...

  8. zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED(SDK开发详解)

    axi_gpio是PL端gpio(FPGA资源搭建的软核),ps7_gpio是ps端gpio(硬核).打开Documentation的示例Examples,可知第二个是关于中断的示例.导入示例impo ...

  9. Xilinx Zynq-7000 PL端Kintex-7架构可编程逻辑资源,PS端主频可高达1GHz晶振、电源接口和拨码开关

    CPU CPU为Xilinx Zynq-7000 SOC,兼容XC7Z035/XC7Z045/XC7Z100,平台升级能力强,以下为Xilinx Zynq-7000特性参数: TLZ7xH-EasyE ...

最新文章

  1. Linux_Bash常用脚本
  2. Libusb交叉编译和移植
  3. 2018/7/8-纪中某C组题【jzoj1619,jzoj1620,jzoj1621,jzoj1622】
  4. 【剑指offer】面试题32:从上到下打印二叉树(java)
  5. JavaScript高级程序设计(第三版)学习笔记22、24、25章
  6. 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如RXXLRXRXL)中进行移动操作。一次移动操作指用一个LX替换一个XL,或者用一个XR替换一个RX。现给定起始...
  7. 本地化差分隐私(Local Differential Privacy)浅析
  8. 常见web中间件及其漏洞概述
  9. Python 程序员需要知道的 30 个技巧
  10. 4g全网通SMD贴片内置天线怎么选择?
  11. Linux-安装MongoDB(详细教程)
  12. 数据库表设置外键VS不设置外键,哪个更好?
  13. SUST OJ 1674: 入侵与反击(最长不下降子序列)
  14. 字符串--分类统计字符个数(心得+知识点)
  15. (四)JNI学习之C语言基础,构造类型
  16. 后端分页查询(模糊查询)
  17. CSS3:3D变换动画
  18. coreldraw错误代码14001_coreldraw错误1怎么解决-解决coreldraw提示错误1的方法 - 河东软件园...
  19. 凉凉!深扒那个有点“咪蒙”的阿里美女高管!
  20. VGA、DP、HDMI、DVI、Type-C和Thunderbolt等视频接口对比

热门文章

  1. 明日方舟系统拆解脑图
  2. 记一次 mac电脑 parallels desktop win10 虚拟机配置rsync文件同步功能(含mac 无法读写ntfs移动硬盘的解决方法)
  3. GeniE 实用教程(三)属性
  4. 【福利】2020年通信行业研究报告汇总下载(免费)
  5. 噪声系数测试之Y因子(二)
  6. Java 集合深入理解(17):HashMap 在 JDK 1.8 后新增的红黑树结构
  7. ARM+FPGA运动控制卡 运动控制卡方案 运动控制卡方案 运动控制卡
  8. 正在连接192.168.56.101...无法打开到主机的连接。 在端口 1521: 连接失败
  9. HAL库中断方式实现串口通信操作
  10. 基于RISC-V架构的开源处理器及SoC研究综述(一)