• HLS学习2:使用ARM核点灯


    1、引言

    本系列博客主要用于记录学习过程,如有错误欢迎指点。

    芯片:xc7z020clg400-1;
    开发板:小熊猫7020开发板;
    开发环境:Vivado 18.3;
    系统环境:Windows 11;
    参考资料:小熊猫HLS文档、ug902、ug871、米联客HLS、黑金HLS等。

    尝试采用ZYNQ 7020的ARM核进行点灯。

    2、开发流程

    2.1、新建工程

    2.2、新建 block design

    2.3、添加ZYNQ核与配置

    双击ZYNQ IP,进行配置

    2.3.1、取消Clock Resets

    在这里插入图片描述

    2.3.2、取消AXI GP0接口

    在这里插入图片描述

    2.3.3、使能UART1

    确认是48、49管脚
    在这里插入图片描述

    2.3.4、取消PL Fabric clocks

    在这里插入图片描述

    2.3.5、配置DDR3

    将Memory Part 型号配置为MT41J256M16,将DRAM Bus Width配置为16Bit。
    在这里插入图片描述

    2.3.6、自动连线

    连线完成
    在这里插入图片描述

    2.4、 导出文件

    默认配置
    在这里插入图片描述
    生成完成后,继续导出HDL Wrapper(默认)
    在这里插入图片描述
    生成.V文件后,继续导出硬件描述文件
    在这里插入图片描述
    不调用PL端,所以不用生成bit文件(以下不用勾选)
    在这里插入图片描述

    2.5、ARM_SDK

    2.5.1、新建工程

    从Vivado中打开Xilinx SDK
    在这里插入图片描述
    新建工程
    在这里插入图片描述
    输入项目名称“hello world”,然后选择Hello World例程。
    在这里插入图片描述
    左侧可以看到例程的工程文件
    在这里插入图片描述

    2.5.2、Debug配置

    选择菜单栏的Debug图标
    在这里插入图片描述
    在弹出的对话框中,默认选择第一项,进行Debug
    在这里插入图片描述
    跳转到Debug 页面后,在Other中,选择terminal工具
    在这里插入图片描述
    在这里插入图片描述
    在右下角弹出的terminal串口中,选择connect
    在这里插入图片描述
    选择合适的端口和波特率。
    在这里插入图片描述
    连接成功后,运行仿真即可
    在这里插入图片描述

    2.5.3、仿真结果

    在这里插入图片描述
    从左上角可以切换界面
    在这里插入图片描述

    3、点灯

    3.1、Vivado开发

    删掉第二小节的Block Design,重新添加一个新的ZYNQ IP。

    3.1.1、ZYNQ IP配置

    在新IP 中,仅修改DDR——》将Memory Part 型号配置为MT41J256M16,将DRAM Bus Width配置为16Bit(与2.3.5一致)
    添加UART1,与2.3.3一致。
    在这里插入图片描述

    3.1.2、GPIO IP配置

    添加两个GPIO IP,一个配置为输入,一个配置为输出
    在这里插入图片描述
    在这里插入图片描述

    3.1.3、连线与其他设置

    点击自动连线
    在这里插入图片描述
    全选
    在这里插入图片描述
    连线完成后,可以看到多出了rst_ps7(这个是复位控制模块)、ps7_0_axi_periph(这个是AXI总线互联模块),
    再点击Run Block Automation,生成控制引脚。
    在这里插入图片描述
    弹出的对话框默认即可,生成完成。
    在这里插入图片描述
    生成输出产品Generate Output Products.
    创建HDL包装 Create HDL Wrapper.
    (参考2.4小节)

    3.1.4、配置管脚

    选择左侧菜单栏的RTL ANAYSIS——》Open Elaborated Design
    在这里插入图片描述
    按如下配置,配置完成后使用快捷键保存ctrl+s,自己命名。
    在这里插入图片描述

    3.1.5、导出硬件

    由于我们需要使用硬件,所以首先生成Bitestream,等待生成完成,可见资源使用情况。
    在这里插入图片描述
    然后在菜单栏选择导出硬件。勾选Include bitstream
    在这里插入图片描述

    3.2、SDK开发

    从Vivado中启动SDK。默认即可
    在这里插入图片描述
    新建一个工程,跟2.5.1一致,重命名一下,点击Next后,选择helloworld例程模板
    在这里插入图片描述
    删掉原始代码,添加如下代码

    #include 
    #include "platform.h"
    #include "xparameters.h"
    #include "xscugic.h"
    #include "xil_exception.h"
    #include "xgpio.h"
    #include  // usleep()
    #include   // bool
    
    #define LED_DEVICE_ID          XPAR_AXI_GPIO_1_DEVICE_ID
    #define KEY_DEVICE_ID          XPAR_AXI_GPIO_0_DEVICE_ID
    
    XGpio LEDInst;
    XGpio KEYInst;
    
    u8 key_value_pre=0;
    u8 key_value_now=0;
    int main()
    {
        init_platform();
        int status;
        status = XGpio_Initialize(&KEYInst, KEY_DEVICE_ID); // initial KEY
        if(status != XST_SUCCESS) return XST_FAILURE;
        status = XGpio_Initialize(&LEDInst, LED_DEVICE_ID);  // initial LED
        if(status != XST_SUCCESS)return XST_FAILURE;
        XGpio_SetDataDirection(&KEYInst, 1, 1); // set KEY IO direction as in
        XGpio_SetDataDirection(&LEDInst, 1, 0); // set LED IO direction as out
        XGpio_DiscreteWrite(&LEDInst, 1, 0x0);// at initial, all LED turn off
        printf(">>> Press PL KEY1 ~ KEY4 one by one, and check the PL LED1 ~ LED4\n");
        while(1)
        {
            usleep(100000); // 0.1s sleep, to debounce, in common, the meta-state will sustain no more than 20ms
            key_value_pre=key_value_now;
            key_value_now= XGpio_DiscreteRead(&KEYInst, 1) & 0x0F;
            XGpio_DiscreteWrite(&LEDInst, 1, key_value_now);
            if(key_value_pre!=key_value_now)  printf("key state_changed!\n");
        }
    
        cleanup_platform();
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    使用Ctrl+S保存后,编译器会自动编译。
    在这里插入图片描述
    Debug 配置
    在这里插入图片描述
    程序烧录进FPGA,按下按钮的同时,LED亮起

  • 相关阅读:
    【Python】列表、元组、字典的使用详解(增删改查)
    Abnova丨血液总核酸纯化试剂盒预装相关说明书
    什么是 mapState 助手?
    mysql5.7.35安装配置教程【超级详细安装教程】
    机器学习绪论
    上半年Java面试真题整理,一共343道,每一题都很经典,上半年就有89人拿到offer
    微机----------LED显示接口
    Java中Servlet的生命周期
    【AUTOSAR-Nm】-2.2-通过CAN/Lin...信号报告Nm状态机的跳转
    软件测试从业多年,自认为技术不错,裸辞:一晃 ,失业3个月了~
  • 原文地址:https://blog.csdn.net/u014798590/article/details/126223208