1 ZYNQ 嵌入式系统的开篇实验Hello World
阅读本文需先学习: FPGA学习----Vivado软件使用
1.1 ZYNQ 嵌入式系统开发流程
- 创建Vivado工程
- 使用IP Integrator 创建 Processor System
- 生成顶层HDL
- 生成比特流,导出到SDK
- 在SDK中创建应用工程
- 板级验证
开篇实验任务是在 ZYNQ 开发板上搭建 ZYNQ 嵌入式最小系统, 并使用串口打印 Hello World 信息
1.2 实验硬件设计
1.2.1 创建Vivado工程
点击Quick Start栏的 Create Project,如图所示:
然后,点击Next,如图所示:
设置工程名和工程路径,然后Next,如图所示:
选择RTL Project,勾选Do not specify sources at this time,即不需要添加源文件和约束文件,然后点击Next,如图所示:
选择芯片型号,如图所示:
点击Finish,完成工程创建,如图所示:
1.2.2 使用IP Integrator 创建 Processor System
Vivado 开发套件中提供了一个
图形化的设计开发工具
— —IP 集成器(IP Integrator),在 IP 集成器中可以非常方便的插入各种功能模块(IP)
如图所示,在Flow Navigator中,单击 IP Integrator 下的 Create Block Design,然后指定所创建的 Block Design 的名称,点击OK:
在 Diagram 窗口中给设计添加 IP,点击 + ,打开 IP 目录:
搜索zynq,找到并双击ZYNQ7 Processing System,如图所示:
添加完成后,ZYNQ7 Processing System 模块出现在 Diagram 中,如图所示:
双击所添加的 ZYNQ7 Processing System 模块,进入 ZYNQ7 处理系统的配置界面,如图所示:
Zynq Block Design显示了 Zynq 处理系统(PS)的各种可配置块,其中灰色部分是固定的,绿色部分是可配置的
- PS-PL Configuration 能够配置 PS-PL 接口,包括 AXI、HP 和 ACP 总线接口
- Peripheral IO Pins 可以为不同的 I/O 外设选择 MIO/EMIO 配置
- MIO Configuration 可以为不同的 I/O 外设具体配置 MIO/EMIO
- Clock Configuration 用来配置 PS 输入时钟、外设时钟,以及 DDR 和 CPU 时钟等
- DDR Configuration 用于设置 DDR 控制器配置信息
- SMC Timing Calculation 用于执行 SMC 时序计算
- Interrupts 用于配置 PS-PL 中断端口
配置PS的UART,如图所示:
PS 和外部设备之间的连接主要是通过
复用的输入/输出(Multiplexed Input/Output,MIO)来实现的
,MIO14 和 MIO15 下点击 UART0,方框的颜色会变成绿色,与此同时这两个 MIO也会变成绿色,如图所示:
点击左侧的 MIO Configuration ,在右侧展开 I/O Peripherals,选择UART0,可以看到更具体的引脚配置信息,如图所示:
点击左侧的 PS-PL Configuration ,可以在这里设置 UART0 串口通信的波特率,如图所示:
点击左侧的 DDR Configuration ,在Memory Part一栏选择 DDR 的器件,如图所示:
XC7Z020 的核心板选择 MT41J256M16RE-125 ,XC7Z010 的核心板选择 MT41J128M16 HA-125
点击左侧的 Clock Configuration,该界面主要是配置 ZYNQ PS 中的时钟频率,如图所示:
输入时钟默认是 33.33333Mhz
本实验是搭建 ZYNQ 的嵌入式最小系统,只需要使用 ZYNQ 中的 PS 端。因此将 PS 中与 PL 端交互的接口信号移除,如图所示:
接着展开 AXI Non Secure Enablement 下的 GP Master AXI Interface,取消勾选其中的 M AXI GP0 interface,如图所示:
返回到 Vivado 界面后,在 Diagram 中可以看到 ZYNQ7 Processing System IP 模块发生了变化,如图所示:
点击上图中箭头所指示的位置Run Block Automation,如图所示,左侧确认勾选processing_system7_0, 然后点击 OK:
点击 ZYNQ7 PS 模块接口处的+,来展开这两组接口,观察其中都有哪些信号。然后点击箭头所指示的按钮,验证当前设计:
验证完成后弹出对话框提示没有错误或者关键警告,点击OK:
1.2.3 生成顶层HDL模块
在Sources 窗口中, 选中 Design Sources 下的 sysetm.bd, 右击 ,在弹出的菜单栏中选择Generate Output Products,如图所示:
弹出Generate Output Products对话框,如图所示,选择Global:
Generate 完成后,在弹出的对话框中点击OK:
在 Sources 窗口中,点击IP Source,可以看到 Generate 过程生成的输出结果:
在Hierarchy标签页,再次右击 system.bd,然后选择Create HDL Wrapper:
在弹出的对话框中确认勾选Let Vivado manage wrapper and auto-update,然后点击OK:
1.2.4 生成比特流文件并导出到SDK
由于本次实验未用到 PL 部分,所以无需生成 Bitstream 文件,只需将硬件导出到 SDK 即可,如图所示:
在弹出的对话框中, 因为没有生成 bitstream 文件, 所以无需勾选Include bitstream”,直接点击OK:
硬件导出完成后,启动 SDK 开发环境,如图所示:
在弹出对话框中,直接点击OK:
1.3 软件设计
启动了软件开发环境(SDK,Software Development Kit),如图所示:
1.3.1 在SDK中创建应用工程
新建一个 SDK 应用工程,如图所示:
在弹出的对话框中,输入工程名,点击Next:
选择工程模版 Hello World,然后点击Finish:
SDK 创建了一个 hello_world 应用工程和 hello_world_bsp 板级支持包(BSP)工程,如图所示:
双击打开 hello_world/src 工程目录下 helloworld.c 文件,可以看到源代码,在工具栏中点击Build All来编译工程,如图所示:
1.4 下载验证
由于疫情,一直无法去实验室,故ZYNQ开发板不在身边,该步骤内容待更新
致谢领航者ZYNQ开发板,开启ZYNQ学习之路!
希望本文对大家有帮助,上文若有不妥之处,欢迎指正
分享决定高度,学习拉开差距