本文转载自:亦梦云烟的博客
深度学习DPU IP最低配置下,至少需要38457 LUT,而ZYNQ 7010只有35500 LUT,本来笔者是有一块7Z010的开发板,奈何资源不够,无法使用Vitis的核心功能。由于笔者比较穷,买不起ZED Board这样的贵的开发板,因此,笔者花了180RMB在某鱼上淘了一块矿机上使用的ZYNQ控制板,板子上的芯片正好是ZYNQ 7020 (XC7Z020CLG400)。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219321-1.jpeg)
为了Bring up这块暂且称之为开发板的板子,取名为ANT开发板,本篇笔记以点亮图中所有的LED为目的,回顾下Vivado的使用,并且开始了解Vitis的开发流程(原来开发环境为SDK)。
开发环境
一. 构建硬件环境
1.1 创建Vivado工程
1.1.1 创建空白的工程
打开Vivado软件,File -> Project -> New创建一个空白的Vivado工程,工程名取名为ZYNQ7020Template,因为以后要用的工程以这个工程为模板进行添加新的硬件。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219322-2.jpeg)
点击 Next >,选择RTL Project
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219323-3.jpeg)
点击 Next >, Family选择Zynq-7000, Package选择clg400, Speed选择-1,在筛选出来的列表中选择xc7z020clg400-1。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219324-4.jpeg)
点击 Next >,在点Finish即可完成空白工程的创建。
1.1.2 添加ZYNQ IP核
在PROJECT MANAGER的IP INTEGRATOR中点击Create Block Design,创建一个硬件原理图文件。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219325-5.jpeg)
原理图取名为zynq7020_design,点击OK。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219326-6.jpeg)
在Diagram中点击+号图标或者在空白处右键单击,选择弹出菜单中的Add Ip...选项。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219327-7.jpeg)
输入ZYNQ
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219328-8.jpeg)
双击筛选出来的ZYNQ7 Processing System,则ZYNQ处理器IP添加到原理图中。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219329-9.jpeg)
点击弹出的Run Block Automation链接
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219330-10.jpeg)
直接点OK即可,这一步操作是为了添加DDR端口的硬件以及一些其它固定的IO,如下图所示。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219331-11.jpeg)
1.2 配置外设
由于这个开发板是自己淘的,没有官方标准的模板工程,相关的硬件配置都必须自己根据电路原理图进行设置。最基本的外设需要设置的有DDR,UART,LED,SD Card,其它外设例如Ethernet, Nandflash,Switch等在后续逐步添加完善。本文只只需要设置前面的四种外设即可点亮LED,输出打印信息。
1.2.1 配置 DDR
开发板上的DDR为两片16 bit数据位的MT41K256M16HA-125:E芯片。
双击ZYNQ7 IP核,在弹出的Re-Customize IP界面选择DDR Configuration->DDR Controller Configuration -> Memory Part
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219332-12.jpeg)
发现没有完全匹配的,那么选择最相似的MT41K256M16 RE-125。
1.2.2 配置UART
开发板上的串口接在了PS MIO 48和PS MIO 49引脚上,因此配置输出串口为UART1.
选择MIO Configuration->I/O Peripheral,勾选UART 1,MIO引脚选择48,49.
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219333-13.jpeg)
1.2.3 配置SD Card
根据开发板上的SD卡连线,配置SD Card的引脚。
选择MIO Configuratiion->I/O Peripherals,勾选SD0,MIO引脚选择MIO 40~45, CD引脚选择MIO 46, WP选择MIO 50, Power引脚无需选择。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219334-14.jpeg)
1.2.4 配置LED
ANT开发板上有7个可以用IO进行控制的LED,对应的引脚如下表所示:
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219335-15.png)
前三个LED使用的MIO,勾选GPIO MIO,后四个为PL的引脚,因此选择EMIO GPIO,width选择4,如下图所示:
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219336-16.jpeg)
配置了EMIO后,ZYNQ7 Processing System IP中多出了一个名为GPIO_O的端口,此时为这个端口引出IO,右键选择这个端口,选择Make External。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219337-17.jpeg)
添加IO引脚之后如下图所示:
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219338-18.jpeg)
可以考虑在左侧的属性栏度这些IO进行重命名,例如命名为GPIO_LED:
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219339-19.jpeg)
由于目前没有使用到GP0端口,暂时先关掉。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219340-20.jpeg)
1.3 编译Vivado
1.3.1 编译综合
第一次创建的原理图文件需要生成HDL文件,然后进行综合。右键选择zynq7020_design.bd文件,选择Create HDL Wrapper...,
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219341-21.jpeg)
生成完成后如下图:
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219342-22.jpeg)
再右键选择zynq7020_design.bd文件,选择Generate Output Products...
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219343-23.jpeg)
直接点击Generate,等待片刻。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219344-24.jpeg)
点击综合
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219345-25.jpeg)
1.3.2 分配引脚
由于LED5~LED8使用了EMIO,需要为其指定IO引脚。点击Open Synthesized Design下的Constraints Wizard。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219346-26.jpeg)
为目标平台添加并设置约束文件。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219347-27.jpeg)
创建一个名为zynq7020.xdc的约束文件。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219348-28.jpeg)
选择自己创建的文件,并点击OK。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219349-29.jpeg)
在菜单栏选择Window-> I/O Ports,
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219350-30.jpeg)
未分配的如下图所示:
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219351-31.jpeg)
在下方的I/O Ports中对GPIO分配引脚。注意,LED GPIO的引脚点平修改为3.3V。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219352-32.jpeg)
1.4 生成bit流并导出
先点击Run Implementation,成功之后,再点击Generate Bitstream。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219353-33.jpeg)
导出XSA文件,File->Export->Export Hardware...,Next,输出类型选择Include bitstream,点击Next。
此处切记,即使只使用了EMIO的引脚,也要包好bitstream,笔者在这里掉坑里了,因为没有勾选这个使用了EMIO的LED一直无法点亮,尝试过电压表测量电压,反复检查原理图等...
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219354-34.jpeg)
路径使用默认文件名即可,点击Next,完成导出。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219355-35.jpeg)
二. 构建Vitis软件
2.1 创建Platform工程
Vitis菜单栏File->New->Platform Project,输入自定义的Platform名称,下一步。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219356-36.jpeg)
选择Create a new platform from hardware(XSA),选择上一节从vivado导出的zynq7020_design_wrapper.xsa,其它默认。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219357-37.jpeg)
2.2 创建应用程序
Vitis菜单栏File->New->Application Project,选择从刚才导入的ZYNQ7020Template [custom]为平台创建应用程序。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219358-38.jpeg)
下一步,输入工程名,LED。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219359-39.jpeg)
操作系统选择裸机系统:
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219360-40.jpeg)
然后从Hello World模板工程创建应用程序,点击Finish完成。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219361-41.jpeg)
创建完成之后如下图所示。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219362-42.jpeg)
至此,基本的硬件与软件工程都以经创建完毕,剩下的就是自己的代码逻辑了。可以看出来,与Vivado2019版本之前的工程的使用上有些许的差异,这些差异列举如下:
1) 不在是从vivado启动SDK,已集成到Vitis IDE
2) 需要自己创建platform,之前的SDK会自动创建
2.3 编写LED程序
首先编译下Platform工程,这样Vitis IDE会生成bsp库。其中GPIO库为xgpiops.h
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219363-43.jpeg)
三. 调试运行
编译工程,编译完成之后在工程文件夹的Debug/sd_card目录下生成了BOOT.BIN的启动文件。可以让板子启动运行程序有两种方法,一中是SD卡启动,一种是仿真器运行。当然还可以从其他存储器启动,在此不做介绍。
启动串口终端,先监听者开发板的串口输出。
串口终端可以使用第三方的软件,也可以使用Vitis自带的串口终端,打开方式如下:Window->Show View...->Xilinx->Vitis Serial Terminal。
3.1 SD开启动
将BOOT.BIN放在FAT32格式的SD卡根目录下,插入到板子上复位板子即可。
效果是终端打印出"test for GPIO MIO"字符串,并且LED每隔1秒闪烁以下
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219364-44.jpeg)
3.2 JTAG启动
右键选择工程,点击Program Device,注意要勾选Partial Bitstream。
![](http://xilinx.eetrend.com/files/2021-09/%E5%8D%9A%E5%AE%A2/100553431-219365-45.jpeg)
然后点击Run As->Luanch Hardware。