Vitis AI修炼秘籍(2)——熟悉Vitis软件的使用之LED驱动

本文转载自:亦梦云烟的博客

深度学习DPU IP最低配置下,至少需要38457 LUT,而ZYNQ 7010只有35500 LUT,本来笔者是有一块7Z010的开发板,奈何资源不够,无法使用Vitis的核心功能。由于笔者比较穷,买不起ZED Board这样的贵的开发板,因此,笔者花了180RMB在某鱼上淘了一块矿机上使用的ZYNQ控制板,板子上的芯片正好是ZYNQ 7020 (XC7Z020CLG400)。

为了Bring up这块暂且称之为开发板的板子,取名为ANT开发板,本篇笔记以点亮图中所有的LED为目的,回顾下Vivado的使用,并且开始了解Vitis的开发流程(原来开发环境为SDK)。

开发环境

  • Windows 10 64 bit
  • Vivado 2020.2 & Vitis 2020.2 64 bit
  • XC7Z020-1-CLG400
  • 一. 构建硬件环境
    1.1 创建Vivado工程
    1.1.1 创建空白的工程
    打开Vivado软件,File -> Project -> New创建一个空白的Vivado工程,工程名取名为ZYNQ7020Template,因为以后要用的工程以这个工程为模板进行添加新的硬件。

    点击 Next >,选择RTL Project

    点击 Next >, Family选择Zynq-7000, Package选择clg400, Speed选择-1,在筛选出来的列表中选择xc7z020clg400-1。

    点击 Next >,在点Finish即可完成空白工程的创建。

    1.1.2 添加ZYNQ IP核
    在PROJECT MANAGER的IP INTEGRATOR中点击Create Block Design,创建一个硬件原理图文件。

    原理图取名为zynq7020_design,点击OK。

    在Diagram中点击+号图标或者在空白处右键单击,选择弹出菜单中的Add Ip...选项。

    输入ZYNQ

    双击筛选出来的ZYNQ7 Processing System,则ZYNQ处理器IP添加到原理图中。

    点击弹出的Run Block Automation链接

    直接点OK即可,这一步操作是为了添加DDR端口的硬件以及一些其它固定的IO,如下图所示。

    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

    发现没有完全匹配的,那么选择最相似的MT41K256M16 RE-125。

    1.2.2 配置UART
    开发板上的串口接在了PS MIO 48和PS MIO 49引脚上,因此配置输出串口为UART1.

    选择MIO Configuration->I/O Peripheral,勾选UART 1,MIO引脚选择48,49.

    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引脚无需选择。

    1.2.4 配置LED
    ANT开发板上有7个可以用IO进行控制的LED,对应的引脚如下表所示:

    前三个LED使用的MIO,勾选GPIO MIO,后四个为PL的引脚,因此选择EMIO GPIO,width选择4,如下图所示:

    配置了EMIO后,ZYNQ7 Processing System IP中多出了一个名为GPIO_O的端口,此时为这个端口引出IO,右键选择这个端口,选择Make External。

    添加IO引脚之后如下图所示:

    可以考虑在左侧的属性栏度这些IO进行重命名,例如命名为GPIO_LED:

    由于目前没有使用到GP0端口,暂时先关掉。

    1.3 编译Vivado
    1.3.1 编译综合
    第一次创建的原理图文件需要生成HDL文件,然后进行综合。右键选择zynq7020_design.bd文件,选择Create HDL Wrapper...,

    生成完成后如下图:

    再右键选择zynq7020_design.bd文件,选择Generate Output Products...

    直接点击Generate,等待片刻。

    点击综合

    1.3.2 分配引脚
    由于LED5~LED8使用了EMIO,需要为其指定IO引脚。点击Open Synthesized Design下的Constraints Wizard。

    为目标平台添加并设置约束文件。

    创建一个名为zynq7020.xdc的约束文件。

    选择自己创建的文件,并点击OK。

    在菜单栏选择Window-> I/O Ports,

    未分配的如下图所示:

    在下方的I/O Ports中对GPIO分配引脚。注意,LED GPIO的引脚点平修改为3.3V。

    1.4 生成bit流并导出
    先点击Run Implementation,成功之后,再点击Generate Bitstream。

    导出XSA文件,File->Export->Export Hardware...,Next,输出类型选择Include bitstream,点击Next。

    此处切记,即使只使用了EMIO的引脚,也要包好bitstream,笔者在这里掉坑里了,因为没有勾选这个使用了EMIO的LED一直无法点亮,尝试过电压表测量电压,反复检查原理图等...

    路径使用默认文件名即可,点击Next,完成导出。

    二. 构建Vitis软件
    2.1 创建Platform工程
    Vitis菜单栏File->New->Platform Project,输入自定义的Platform名称,下一步。

    选择Create a new platform from hardware(XSA),选择上一节从vivado导出的zynq7020_design_wrapper.xsa,其它默认。

    2.2 创建应用程序
    Vitis菜单栏File->New->Application Project,选择从刚才导入的ZYNQ7020Template [custom]为平台创建应用程序。

    下一步,输入工程名,LED。

    操作系统选择裸机系统:

    然后从Hello World模板工程创建应用程序,点击Finish完成。

    创建完成之后如下图所示。

    至此,基本的硬件与软件工程都以经创建完毕,剩下的就是自己的代码逻辑了。可以看出来,与Vivado2019版本之前的工程的使用上有些许的差异,这些差异列举如下:

    1) 不在是从vivado启动SDK,已集成到Vitis IDE

    2) 需要自己创建platform,之前的SDK会自动创建

    2.3 编写LED程序
    首先编译下Platform工程,这样Vitis IDE会生成bsp库。其中GPIO库为xgpiops.h

    三. 调试运行
    编译工程,编译完成之后在工程文件夹的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秒闪烁以下

    3.2 JTAG启动
    右键选择工程,点击Program Device,注意要勾选Partial Bitstream。

    然后点击Run As->Luanch Hardware。

    最新文章