天天看点

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

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,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

然后,点击Next,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

设置工程名和工程路径,然后Next,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

选择RTL Project,勾选Do not specify sources at this time,即不需要添加源文件和约束文件,然后点击Next,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

选择芯片型号,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

点击Finish,完成工程创建,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

1.2.2 使用IP Integrator 创建 Processor System

Vivado 开发套件中提供了一个

图形化的设计开发工具

— —IP 集成器(IP Integrator),在 IP 集成器中可以非常方便的插入各种功能模块(IP)

如图所示,在Flow Navigator中,单击 IP Integrator 下的 Create Block Design,然后指定所创建的 Block Design 的名称,点击OK:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

在 Diagram 窗口中给设计添加 IP,点击 + ,打开 IP 目录:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

搜索zynq,找到并双击ZYNQ7 Processing System,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

添加完成后,ZYNQ7 Processing System 模块出现在 Diagram 中,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

双击所添加的 ZYNQ7 Processing System 模块,进入 ZYNQ7 处理系统的配置界面,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

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,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

PS 和外部设备之间的连接主要是通过

复用的输入/输出(Multiplexed Input/Output,MIO)来实现的

,MIO14 和 MIO15 下点击 UART0,方框的颜色会变成绿色,与此同时这两个 MIO也会变成绿色,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

点击左侧的 MIO Configuration ,在右侧展开 I/O Peripherals,选择UART0,可以看到更具体的引脚配置信息,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

点击左侧的 PS-PL Configuration ,可以在这里设置 UART0 串口通信的波特率,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

点击左侧的 DDR Configuration ,在Memory Part一栏选择 DDR 的器件,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

XC7Z020 的核心板选择 MT41J256M16RE-125 ,XC7Z010 的核心板选择 MT41J128M16 HA-125

点击左侧的 Clock Configuration,该界面主要是配置 ZYNQ PS 中的时钟频率,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

输入时钟默认是 33.33333Mhz

本实验是搭建 ZYNQ 的嵌入式最小系统,只需要使用 ZYNQ 中的 PS 端。因此将 PS 中与 PL 端交互的接口信号移除,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

接着展开 AXI Non Secure Enablement 下的 GP Master AXI Interface,取消勾选其中的 M AXI GP0 interface,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

返回到 Vivado 界面后,在 Diagram 中可以看到 ZYNQ7 Processing System IP 模块发生了变化,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

点击上图中箭头所指示的位置Run Block Automation,如图所示,左侧确认勾选processing_system7_0, 然后点击 OK:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

点击 ZYNQ7 PS 模块接口处的+,来展开这两组接口,观察其中都有哪些信号。然后点击箭头所指示的按钮,验证当前设计:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

验证完成后弹出对话框提示没有错误或者关键警告,点击OK:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

1.2.3 生成顶层HDL模块

在Sources 窗口中, 选中 Design Sources 下的 sysetm.bd, 右击 ,在弹出的菜单栏中选择Generate Output Products,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

弹出Generate Output Products对话框,如图所示,选择Global:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

Generate 完成后,在弹出的对话框中点击OK:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

在 Sources 窗口中,点击IP Source,可以看到 Generate 过程生成的输出结果:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

在Hierarchy标签页,再次右击 system.bd,然后选择Create HDL Wrapper:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

在弹出的对话框中确认勾选Let Vivado manage wrapper and auto-update,然后点击OK:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

1.2.4 生成比特流文件并导出到SDK

由于本次实验未用到 PL 部分,所以无需生成 Bitstream 文件,只需将硬件导出到 SDK 即可,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

在弹出的对话框中, 因为没有生成 bitstream 文件, 所以无需勾选Include bitstream”,直接点击OK:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

硬件导出完成后,启动 SDK 开发环境,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

在弹出对话框中,直接点击OK:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

1.3 软件设计

启动了软件开发环境(SDK,Software Development Kit),如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

1.3.1 在SDK中创建应用工程

新建一个 SDK 应用工程,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

在弹出的对话框中,输入工程名,点击Next:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

选择工程模版 Hello World,然后点击Finish:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

SDK 创建了一个 hello_world 应用工程和 hello_world_bsp 板级支持包(BSP)工程,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

双击打开 hello_world/src 工程目录下 helloworld.c 文件,可以看到源代码,在工具栏中点击Build All来编译工程,如图所示:

ZYNQ之嵌入式学习----开篇实验Hello World1 ZYNQ 嵌入式系统的开篇实验Hello World

1.4 下载验证

由于疫情,一直无法去实验室,故ZYNQ开发板不在身边,该步骤内容待更新

致谢领航者ZYNQ开发板,开启ZYNQ学习之路!

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

继续阅读