ZYNQ 入门笔记(一):开发流程

本文详细介绍了ZYNQ开发的过程,包括使用Vivado创建硬件逻辑系统设计,如配置ZYNQIP核、设置GPIO和DDR,生成比特流,以及在Vitis中进行CPU软件程序设计,添加应用库和用户代码。此外,还提到了如何利用VSC进行编程以及Vivado联合Modelsim进行仿真,为ZYNQ系统的开发提供了全面的指导。

概述

ZYNQ 的工程设计大体上可以分为 对硬件逻辑系统的设计对 CPU 软件程序的设计

  • 硬件逻辑系统设计:搭建一个满足用户需求的硬件环境,通过 Vivado 实现
  • CPU 程序设计:通过用户程序控制 CPU 工作,使整个系统达到预定的效果,该部分通过 Vitis 实现

两者间的关系及具体设计步骤如下图所示

aaa

xsa 文件为硬件资源描述文件,可以通过生成比特流或生成模块设计产生

  • 涉及到 PL 端的设计:导出 xsa 文件时需要包含比特流,因此通常使用 生成比特流(Bitstream) 的方式产生 xsa 文件
  • 纯 PS 端的设计:导出时不需要比特流,因此两种方式皆可

接下来以按键控制 led 工程为例介绍 ZYNQ 开发的基本流程,本设计实现的功能如下

  • 按下 PS 端按键 SW3,PL 端小灯 LED1 亮起,松开则小灯熄灭
  • 按下 PL 端按键 SW1,PS 端小灯 LED5 亮起,松开则小灯熄灭

硬件逻辑系统设计

创建 Vivado 工程

双击打开 Vivado,点击 Create Project

20230417161026

填写工程名称并选择保存路径,勾选 Create project subdirectory 则项目保存在 {Project location}/{Project name} 文件夹下,点击 Next

0230417161107

选择 RTL Project,点击 Next

20230417161149

根据实际情况选择芯片,笔者所用开发板型号为 MZ7035FD,芯片型号为 xc7z035ffg676-2,点击 Next

20230417161244

点击 Finish,项目创建完成

20230417161317

创建模块设计

点击 Create Block Design 创建模块设计

20230417161452

在弹出的窗口中修改设计命名(注意不能包含中文及空格),点击 OK 完成创建

20230417161511

可以看到 Design 栏出现了我们刚创建好的 system 模块设计

构建硬件系统

此时我们的设计内没有任何内容,需要点击 + 为设计添加 IP 核

在弹出的搜索栏中输入 zynq,可以看到下方出现了 ZYNQ7 Processing System,双击该 IP 核添加

ZYNQ IP 核的配置通常有两个必需配置的部分:使能外设和配置 DDR 型号。双击 ZYNQ IP 核即可打开配置界面,如下图所示

右侧栏为 ZYNQ 的图形化向导界面,绿色部分为可配置界面,单击即可快速跳转到对应项设置。左侧栏为 ZYNQ IP 核配置的导航窗口,共分为 8 个部分,对应功能如下

  • ZYNQ Block Design:图形化向导界面
  • PS-PL Configuration:PS-PL 接口配置界面,可以对 AXI、HP、DMA 等总线接口进行配置
  • Peripheral I/O Pins:I/O 外设引脚配置界面,可对 I/O 外设引脚进行 MIO 以及 EMIO 的配置,配置时需要注意 Bank 电平
  • MIO Configuration:MIO 配置界面,相较于 I/O 外设引脚配置界面功能更为复杂
  • Clock Configuration:时钟配置界面,用于配置 PS 输入时钟、外设时钟、DDR 时钟和 CPU 时钟等
  • DDR Configuration:DDR 配置界面,控制 DDR 型号以及细节参数等
  • SMC Timing Calculation:SMC 时序计算界面,可进行 SMC 时序计算
  • Interrupts:中断控制界面,可对 PS 与 PL 间的中断进行配置

ZYNQ 中的外设接口由对应控制器控制,使用时需要先进行使能。点击图形化向导界面的 I/O Peripherals 中对应的外设接口便可以跳转到相应的配置界面,点击 GPIO 即可进入相应配置界面

本设计通过 PS 与 PL 侧的按键控制另一侧的 LED 灯,每个按键和 LED 灯都需要一个 GPIO 信号。GPIO 连接到 PS 部分使用的是 MIO 接口,连接到 PL 部分使用的则是 EMIO 接口,因此我们需要使能这两个外设接口。PS 端的引脚是固定的,我们不需要分配;PL 端的按键和 LED 灯都需要一个 EMIO 信号,因此我们将 EMIO 的位宽设置为 2

设置完成后检查电平状态,将 Bank1 的电平设置为 1.8V

使能完成后返回图形化向导界面,可以看到此时在 GPIO 外设后面已经打上 √ 了,代表我们已经使能该接口

接下来开始配置 DDR,DDR 全名为双速率同步动态随机存储器(Double Data Rate Synchronous Dynamic Random Access Memory),也就是我们常说的 内存。基于 PS 端的应用,大部分都需要基于片外存储外设 DDR 上允许。点击图像化界面的 DDR 控制器即可跳转到配置界面

使能 DDR 并选择 DDR 型号,笔者使用的是 MT41K256M16 RE-125

点击 OK,可以看到此时 ZYNQ 的 IP 核如图所示

点击上方的蓝色小字 Run Block Automation 系统就会自动帮我们导出引脚,勾选 All Automation 后点击 OK 即可

导出完成后可以看到软件帮我们导出了 ZYNQ 的两个引脚,但 GPIO_0 还未导出,因此我们需要手动将其导出

点击 GPIO_0 引脚,然后右键点击 Make External 导出引脚

该设计中 ZYNQ IP 核在配置时,有几个端口信号是没有被使用到的

  • FCLK_RESET0_N:全局复位信号,低电平有效
  • M_AXI_GP0:通用 AXI 接口信号,M 代表其作为主机信号
  • M_AXI_GP0_ACLK:M_AXI_GP0 的输入时钟信号
  • FCLK_CLK0:PS 输出时钟信号

其中,M_AXI_GP0_ACLK 虽然本设计中并未使用到,但如果不给其一个输入信号,软件便会报错

为了防止出现该现象,我们只需要将 FCLK_CLK0 和 M_AXI_GP0_ACLK 连接即可。连接时只需选中其中一个引脚按住鼠标左键拖动到对应的引脚即可

端口连接完成后使用快捷键 Ctrl+S 保存设计,随后点击上方的 √ 来对设计进行验证

当出现以下弹窗时证明设计无误

生成封装

点击 sources 资源栏我们创建的 system 模块设计,右键选择 Generate Output Products 生成输出

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值