目录
1.前言
由于安装的版本与网上用的使用的大多数的版本不太一样,又找不到一些例子,于是想写一篇来记录摸索过程,方便以后忘记了可以通过这个回忆起使用方法。我使用的是xilinx的2024.1的版本,hello word是所有学习代码的开始,所以写的稍微详细一点可以方便之后忘记了回头来看。其实这些买开发板附带的教程有更详细的。首次写csdn多有不足,请见谅。
2.创建工程
其实在硬件设计部分与之前的版本没有太大的差别我用的是vivado 2024.1但是为了方便就将操作流程完整的做一遍。
1点击Create Project创建一个新的工程
2.直接点击Next进入下一页面
3.填写工程信息
注意,工程名和路径只能由英文字母、数字和下划线组成,不能包含中文、空格以及特殊字符!
4.选择工程类型
由于不需要添加源文件和约束文件,所以勾选“Do not specify sources at this time”。
5.选择板子型号(由于我的xc7z020clg400-2)
6.查看对应信息点击flish创建完成
3.硬件设计
第一步:点击左侧的“Create Block Design”,创建一个 Block 设计,我们可以给将要进行的图像化设计模块更改名字和存储路径,直接点OK。(Design name里填写设计的名称,其他可以默认)
第二步:接下来在 Diagram 窗口中给设计添加 IP。点击上图中箭头所指示的加号“+”,会打开 IP 目录(IP Catalog),也可以通过快捷键 Ctrl + I,或者右键点击 Diagram 工作区中的空白位置,然后选择“ADD IP”。
在打开 IP 目录后,在搜索栏中键入“zynq”,找到并双击“ZYNQ7 Processing System”,将 ZYNQ7
处理系统 IP 添加到设计中。添加完成后,ZYNQ7 Processing System 模块出现在 Diagram 中,如右图所示:
双击所添加的 ZYNQ7 Processing System 模块,进入 ZYNQ7 处理系统的配置界面。界面左侧为页面导航面板,右侧为配置信息面板,如下图所示: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端的串口,所以将MIO14 和 MIO15配置成串口(根据不同板子的IO口不同具体选哪个得看原理图了,我这里是14,15,bank电压为3.3v)选择后会成绿色
点击左侧的 PS-PL Configuration 页面,我们可以在这里设置 UART0 串口通信的波特率。在General 目录下,可以看到 UART0 的波特率默认是 115200。通过下拉按钮可以选择其他波特率,一般保持默认设置。
然后在右侧展开 General 下的 Enable Clock Resets,取消勾选其中的 FCLK_RESET0_N。另外在当前界面中展开 AXI Non Secure Enablement 下的 GP Master AXI Interface,取消勾选其中的 M AXI GP0 interface,如下图所示:
点击左侧的 DDR Configuration 页面,在右侧 DDR Controller Configuration 下的“Memory Type”一栏选择 DDR 的类型配置 PS 的 DDR3 控制器。(根据板子的DDR的参数选取,我这里是MT41K256M16 RE-125)
点击左侧的 Clock Configuration 页面,该界面主要是配置 ZYNQ PS 中的时钟频率。比如输入时钟默认是 33.33333Mhz,对于 CPU 的时钟、DDR 的时钟以及其它外设的时钟,我们直接保持默认设置即可。如果想设置成其他的时钟频率,可以在 Requested Frequency一栏里输入想要的频率,只要保证输入的频率保持在 Range 一栏中的频率范围之内。然后在右侧展开 General 下的 Enable Clock Resets,取消勾选其中的 FCLK_RESET0_N。配置好的选项卡如下图所示:
点击OK就是这个样子了,这就是最小系统,我们可以跑RAM
我们点击下图中“Run Block Automation”,点击ok后此时 ZYNQ7 PS 模块引出了两组外部接口,分别是 DDR 和 FIXED_IO,引出的接口将会被分配到 ZYNQ器件具体的引脚上。
在 Sources 窗口中,选中 Design Sources 下的 sysetm.bd, 这就是我们刚刚完成的 Block Design 设计。右键点击 sysetm.bd,在弹出的菜单栏中选择“Generate Output Products”
弹出“Generate Output Products”对话框,Synthesis Options 选择 Out of context per IP,Run Setings保持默认,等 Generate 完成后,在弹出的对话框中点击“OK”。
(1)Global:对于顶层设计,Vivado 使用自顶向下的全局(Global)综合方式,将顶层之下的所有逻
辑模块都进行综合,会取消 OOC 的综合模式。在 Global 模式下,IP 核与顶层逻辑一起进行综合,对原始
文件的任何更改需要对整个工程和该 IP 进行重新综合。
(2)Out of Context per IP:为 BD 中的每一个 IP 生成输出结果,并且为每个 IP 生成 DCP(design checkpoint)
文件。如果勾选此选项,可以显著地减少综合的运行时间。这是因为 OOC 综合方式只运行一次,在特定的
IP 没有改变的情况下,可以防止 Vivado 在综合时重复的生成特定 IP 的输出结果。
(3)Out of context per Block Design:此选项可以独立于顶层设计而单独地综合完整的 BD,并且可以
为 BD 生成 DCP 文件,通常是在第三方综合时才会勾选此选项。
在 Sources 窗口中,点击“IP Source”标签页,可以看到 Generate 过程生成的输出结果。
在“Hierarchy(层级)”标签页再次右键点击 system.bd,然后选择“Create HDL Wrapper(创建
HDL 封装器)”,此步骤是用来创建 Block Design 的 HDL 封装器文件。
在菜单栏选择 File > Export > Export hardware。
在弹出的对话框中,因为没有用到 PL 端的资源,所以无需勾选“Include bitstream”,直接点击“Next”按钮,然后再选择 xsa 文件的导出路径。至此硬件设计完成。
4.软件设计
下面开始就是使用vitis开发软件设计了,2024.1版本的vitis与其他版本还是有差别的以下自己摸索如有更简单的方法可以分享一下,谢谢。
在菜单栏中选择 Tools > Launch Vitis,启动 Vitis 开发环境,或者直接启动vitis开发程序
点击Create Platform Component创建工作台
选择工作区名字以及路径点击ok
在Hardware Design (XSA)For lmplementation中点击后面的Browse选择之前生成的.xsa文件
这里保持默认点击ok后在进入检查确认页
在当前检查确认页中点击finish完成工作区的创建
由于本次使用为了展示hello world的串口所以直接采用示例程序点击Create Application component from Template创建
然后出现应用的名称和路径可以根据自己的填写点击next
在下图中选择之前创建的工作区点击next
这里直接next进入信息确认页面在信息确认页面点击finish完成应用创建
点击小房子就可以看到创建的工作区和应用了
然后点击build如果构建成功就会出现绿色的勾此时就可以运行程序了(要在开始连接开发板)
点击run如果下图表示可以成功输出。此次结束本次hello world实验
5.其他
如果想生成空白的应用用于自己编写代码的话可以点击Create Embedded Application...,其后面
Create Embedded Application from Example是应用示例程序
Create Empty Embedded Application就是生成空白的应用程序(后续操作相同)
在vitis中有其自带的串口助手可用于观察串口的输出如下图点击后选择端口和波特率后就可以在下面的窗口看到。