08-27-2021

编者注:该内容由 MicroZed Chronicles 转载,获得作者许可。

  

Kria KV260 视觉 AI 入门套件非常适合嵌入式视觉应用与 AI 加速。但我的几位客户要么对在视觉应用和人工智能之外的应用的 SOM 感兴趣,要么对其中视觉/人工智能只构成整个应用一小部分的应用的 SOM 感兴趣。

因此,我认为演示如何使用 Vivado 和 Vitis 创建 Kria SOM 应用才有价值,就像我们可以针对任何其它 SOM 或电路板创建该应用一样。

本项目将在连接 Pmod 端口的 Kria SOM 的可编程逻辑中实现一个简单的 PWM 输出。如果应用需要电机控制或其它致动器控制,则需要类似的方法。

要启动设计,我们首先要做的是创建一个针对 Kria SOM 的新项目。我将 Vivado/Vitis 2020.1 用于该项目。

创建项目时,选择 Kria KV260 视觉 AI 入门套件作为目标板。这可从开发板选项卡中找到。选择该开发板不仅将确保 Vivado 能够识别目标板,而且还能正确配置 SOM 器件以供使用。

如果您不确定如何使用 Vivado 和 Vitis 获得简单的项目流程,请参阅我以前的帖子使用 Vivado 启动设计使用 Vitis 创建应用

创建项目后,Vivado 应用的开发就和平常一样了。创建一个框图,添加 MPSoC(运行模块自动化来配置用于 Kria 的 MPSoC 模块),并添加一个 AXI 定时器。将 AXI 定时器的 PWM 引脚置于外部。我将其命名为连接至 PMod 引脚 1 的 Kria SOM 引脚。

这可能会有一个问题,我怎么知道 SOM 上的哪个器件引脚连接该连接器,继而连接 Pmod。这些信息可通过 Xilinx 为 Kria Vision AI 载波卡提供的原理图获取。

在这些原理图中,HDA11 即为 Pmod 引脚 1。这表明它与 Kria 器件上的一个高密度 bank 相连。

这里我们需要使用两个 Xilinx 提供的 XDC 文件。第一个,载波卡 XDC 将本例中的 KRIA 连接器编号定义为 som240_1_a17。第二个 XDC 文件将器件上的实际引脚位置定义为 H12。这些 XDC 文件和原理图都可以从 Xilinx Kria 网页下载

我们可以将这两个 XDC 文件添加至我们的 Vivado 项目,并在我们的设计中为所需的 SOM 连接器引脚命名 IO。在本示例中,我将 PWM 输出端口命名为 som240_1_a17,以便将其连接至实际器件上的正确位置。

默认情况下,在 Kria 上配置 MPSoC 不启用 UART。对原理图 MIO 引脚 36 和 37 的检查主要用于连接 USB UART 的 TX 和 RX。我们需要在 MPSOC 器件中启用 UART1,以便能够通过 USB/UART 发送一条 Hello World 消息。

完成之后,我们可以创建 HDL 封装程序、构建项目并将其导出用于 Vitis。

使用 Vitis,我们不仅能导入导出的 XSA 而且还能创建一个新的 Hello World 项目。我们可在这个项目中添加几行简单的代码,其可配置 AXI 定时器,产生一个占空比为 500ms、时间为 25% 的 PWM 信号。

  

#include

#include "platform.h"

#include "xil_printf.h"

#include "xtmrctr.h"

#define TMRCTR_DEVICE_ID XPAR_TMRCTR_0_DEVICE_ID

#define PWM_PERIOD 500000000 /* PWM period in (500 ms) */

#define TMRCTR_0 0 /* Timer 0 ID */

#define TMRCTR_1 1 /* Timer 1 ID */

#define CYCLE_PER_DUTYCYCLE 10 /* Clock cycles per duty cycle */

#define MAX_DUTYCYCLE 100 /* Max duty cycle */

#define DUTYCYCLE_DIVISOR 4 /* Duty cycle Divisor */

  

XTmrCtr TimerCounterInst;

  

int main()

{

    u8 Div;

    u32 Period;

    u32 HighTime;

     init_platform();

  

    print("Hello World\n\r");

    print("Successfully ran Hello World application");

    XTmrCtr_Initialize(&TimerCounterInst, TMRCTR_DEVICE_ID);

  

    Div = DUTYCYCLE_DIVISOR;

    XTmrCtr_PwmDisable(&TimerCounterInst);

        Period = PWM_PERIOD;

        HighTime = PWM_PERIOD / Div--;

        XTmrCtr_PwmConfigure(&TimerCounterInst, Period, HighTime);

        XTmrCtr_PwmEnable(&TimerCounterInst);

        while(1){

   }

  

    cleanup_platform();

    return 0;

}

为了在 Kria SOM 上运行该应用,我通过 USB JTAG 连接,能够下载应用,并能使用 Vitis 的调试环境启动它。

将一款示波器连接至 Pmod 的引脚 1,可显示上面的图像,周期正确、占空比为正。

下次,我们将了解如何重新创建随 Kria 提供的设计示例!