Vitis HLS 学习笔记--S_AXILITE 寄存器及驱动

目录

1. 简介

2. S_AXILITE Registers 寄存器详解 

2.1 “隐式”优势

2.2 驱动程序文件

2.3 硬件头文件

2.4 硬件头文件中 SC/COR/TOW/COH 的解释

2.5 驱动控制过程

3. 总结


1. 简介

回顾此博文《Vitis HLS 学习笔记--Syn Report解读(1)-CSDN博客》。

我们在代码中使用了如下指令:

#pragma HLS INTERFACE mode=s_axilite bundle=BUS_A port=return

便得到了这些寄存器:

* S_AXILITE Registers
+-------------+----------+--------+-------+--------+----------------------------------+----------------------------------------------------------------------+
| Interface   | Register | Offset | Width | Access | Description                      | Bit Fields                                                           |
+-------------+----------+--------+-------+--------+----------------------------------+----------------------------------------------------------------------+
| s_axi_BUS_A | CTRL     | 0x00   | 32    | RW     | Control signals                  | 0=AP_START 1=AP_DONE 2=AP_IDLE 3=AP_READY 7=AUTO_RESTART 9=INTERRUPT |
| s_axi_BUS_A | GIER     | 0x04   | 32    | RW     | Global Interrupt Enable Register | 0=Enable                                                             |
| s_axi_BUS_A | IP_IER   | 0x08   | 32    | RW     | IP Interrupt Enable Register     | 0=CHAN0_INT_EN 1=CHAN1_INT_EN                                        |
| s_axi_BUS_A | IP_ISR   | 0x0c   | 32    | RW     | IP Interrupt Status Register     | 0=CHAN0_INT_ST 1=CHAN1_INT_ST                                        |
| s_axi_BUS_A | reg_in   | 0x10   | 32    | W      | Data signal of reg_in            |                                                                      |
+-------------+----------+--------+-------+--------+----------------------------------+----------------------------------------------------------------------+

 本文将对这些寄存器进行详细解释。

2. S_AXILITE Registers 寄存器详解 

2.1 “隐式”优势

使用 Vitis HLS 工具进行硬件设计带来了额外的“隐式”优势,即在驱动程序的自动生成方面。

这极大地简化了硬件设计流程,为工程师省了大量的时间。

在传统的硬件设计过程中,FPGA逻辑工程师的RTL代码完成设计后,还需要手动编写与之配套的驱动程序。不仅包括编写驱动程序本身,还要精确指定硬件设计中各个模块的地址和偏移量。这一过程不仅耗时耗力,而且极易出错,因为任何地址或偏移量的错误指定都可能导致整个系统无法正常工作。

相比,Vitis HLS提供了一个自动化的解决方案。如果使用Vitis HLS进行设计,工具不仅能够将高层次的算法描述转换成高效的硬件实现,而且还能自动创建与之匹配的驱动程序,包含了地址和偏移量指定,大大降低了设计复杂性和出错的可能性。

2.2 驱动程序文件

如简介中说指出的,一旦使用了 s_axilite 协议,工具会自动创建一组 C 语言驱动程序文件。

#pragma HLS INTERFACE mode=s_axilite ...

这些驱动文件位于如下目录中:

<proj>/solution1/impl/ip/drivers/func_v1_0/data
<proj>/solution1/impl/ip/drivers/func_v1_0/src

文件路径

使用模式

描述

data/func.mdd

独立

驱动程序定义文件

data/func.tcl

独立

共 SDK 用于将软件集成到 SDK 工程中

src/xfunc_hw.h

独立 or Linux

定义所有内部寄存器的地址偏移

src/xfunc.h

独立 or Linux

API 定义

src/xfunc.c

独立 or Linux

标准化的 API 实现

src/xfunc_sinit.c

独立

初始化 API 实现

src/xfunc_linux.c

Linux

初始化 API 实现

src/Makefile

独立

Makefile

2.3 硬件头文件

在这几个文件中,对于硬件涉及最重要的文件就是这个 src/xfunc_hw.h 宏定义的硬件头文件了。它提供了存储器映射位置完整列表,对应分组到 AXI4-Lite 从接口内的所有端口。

此头文件包含两部分:

  • 块级控制信号
  • 映射到 s_axilite 接口内的函数实参

以下是 xfunc_hw.h 的完整内容:

// ==============================================================
// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.1 (64-bit)
// Tool Version Limit: 2022.04
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
// ==============================================================
// BUS_A
// 0x00 : Control signals
//        bit 0  - ap_start (Read/Write/SC)
//        bit 1  - ap_done (Read/COR)
//        bit 2  - ap_idle (Read)
//        bit 3  - ap_ready (Read/COR)
//        bit 7  - auto_restart (Read/Write)
//        bit 9  - interrupt (Read)
//        others - reserved
// 0x04 : Global Interrupt Enable Register
//        bit 0  - Global Interrupt Enable (Read/Write)
//        others - reserved
// 0x08 : IP Interrupt Enable Register (Read/Write)
//        bit 0 - enable ap_done interrupt (Read/Write)
//        others - reserved
// 0x0c : IP Interrupt Status Register (Read/COR)
//        bit 0 - ap_done (Read/COR)
//        others - reserved
// 0x10 : Data signal of reg_in
//        bit 7~0 - reg_in[7:0] (Read/Write)
//        others  - reserved
// 0x14 : reserved
// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake)#define XFUNC_BUS_A_ADDR_AP_CTRL     0x00
#define XFUNC_BUS_A_ADDR_GIE         0x04
#define XFUNC_BUS_A_ADDR_IER         0x08
#define XFUNC_BUS_A_ADDR_ISR         0x0c
#define XFUNC_BUS_A_ADDR_REG_IN_DATA 0x10
#define XFUNC_BUS_A_BITS_REG_IN_DATA 8

代码中的注释部分已经描述了寄存器的作用,以及每个寄存器的用途和位字段的含义。

下面是对这些注释的详细解释:

0x00地址,是控制寄存器,包含启动、完成、空闲、准备等控制信号,以及自动重启和中断信号的标志位。

  • ap_start (bit 0):启动操作,可读写,自清除(SC)。
  • ap_done (bit 1):操作完成标志,可读,读取后自清除(COR)。
  • ap_idle (bit 2):表示设备空闲,只读。
  • ap_ready (bit 3):表示设备准备就绪,可读,读取后自清除(COR)。
  • auto_restart (bit 7):自动重启操作,可读写。
  • interrupt (bit 9):中断标志,只读。
  • 其他位保留。

0x04地址,是全局中断使能寄存器,用于控制是否允许全局中断。

  • 位0:全局中断使能,可读写。
  • 其他位保留。

0x08地址,是IP中断使能寄存器,用于控制特定中断的使能。

  • 位0:使能ap_done中断,可读写。
  • 其他位保留。

0x0c地址,是IP中断状态寄存器,用于显示当前的中断状态。

  • 位0:ap_done中断状态,可读,读取后自清除(COR)。
  • 其他位保留。

0x10地址,是reg_in数据信号的寄存器,用于读写reg_in的值。

  • 位7~0:reg_in[7:0]的值,可读写。
  • 其他位保留。

接下来的代码定义了宏,这些宏将上述寄存器地址映射到具体的常量,方便在软件中引用这些寄存器地址。

2.4 硬件头文件中 SC/COR/TOW/COH 的解释

  • SC - Self Clear

在写入操作中,当写入的寄存器位为1时,该位会被自动清除为0,而写入0时则不受影响。这通常用于只需要一次性设置某个寄存器位的情况

  • COR - Clear on Read

在读取操作中,当读取的寄存器位为1时,该位会被自动清除为0,而读取0时则不受影响。这通常用于需要清除某个中断标志的情况。

  • TOW - Toggle on Write

在写入操作中,当写入的寄存器位为1时,该位会被取反,即原来为0的变成1,原来为1的变成0。这通常用于切换某个功能或状态的情况。

  • COH - Clear on Handshake

在某个操作完成后,该寄存器位会自动清除为0。这通常用于需要等待某个操作完成的情况。

比如等待DMA传输完成后清除中断标志。

2.5 驱动控制过程

在软件中可使用 API 函数来控制硬件块,驱动的基本流程

  • 1. 创建硬件实例

XFunc HlsXFunc

  • 2. 查找器件配置

XFunc_LookupConfig(DeviceId)

  • 3. 初始化器件

XFunc_CfgInitialize(InstancePtr, ConfigPtr)

  • 4. 设置 HLS 块的输入参数

XFunc_Set_reg_in(InstancePtr, Data)

  • 5. 启动器件并读取结果

XFunc_Start(InstancePtr)

XFunc_Get_reg_in(InstancePtr)
 

初始化函数合并,在src/xfunc_sinit.c中:

XFunc_Initialize(InstancePtr, DeviceId)

=

    XFunc_LookupConfig(DeviceId)

+

    XFunc_CfgInitialize(InstancePtr, ConfigPtr)

所以使用XFunc_Initialize()可以一步实现查找和配置器件,完成初始化。

3. 总结

本文重点关注了 Vitis HLS 在设计过程中自动生成的驱动程序及其相关文件。通过对 s_axilite 协议下生成的寄存器进行解释,我们了解了这些寄存器的作用和每个寄存器位的含义,以及驱动程序中的控制过程。这种自动化的设计流程减少了手动编写驱动程序的工作量,同时也降低了出错的可能性,为硬件设计带来了更高的可靠性和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/830909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瘦身秘籍:如何使用 PyInstaller 打造超小型 Python 可执行文件

你是否曾经尝试过将你的 Python 程序打包成一个可执行文件&#xff0c;却发现生成的文件大得惊人&#xff1f;别担心&#xff0c;本文将教你如何使用 PyInstaller 尽可能减小生成的 onefile 大小&#xff0c;让你的程序轻盈如风&#xff01; 1. 使用虚拟环境 首先&#xff0c…

Python 与 TensorFlow2 生成式 AI(二)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第四章&#xff1a;教授网络生成数字 在前一章中&#xff0c;我们涵盖了神经网络模型的构建基块。在这一章中&#xff0c;我们的第一个项目…

电商技术揭秘四十一:电商平台的营销系统浅析

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 文章目录 引言一、用户画像与精准营销用户画像与精准营销的概念用户画像在精准营销中…

正则表达式.java

目录 1.1 正则表达式的概念及演示 正则表达式的作用&#xff1a; 1.2 正则表达式-字符类 1.3 正则表达式-逻辑运算符 1.4 正则表达式-预定义字符 1.5 正则表达式-数量词 1.6 正则表达式练习1 1.7 正则表达式练习2 小结 &#xff1a; ①可以校验字符串是否满足一定的规…

免费通配符证书的申请指南——从申请到启动https

如果您的网站拥有众多二级子域名&#xff0c;那么通配符证书证书是最好的选择。 免费通配符申请流程如下&#xff1a; 1 创建证书服务商账号 首先选择一个提供免费通配符的服务商&#xff0c;打开国产服务商JoySSL官网&#xff0c;创建一个账号&#xff08;注册账号时填写注册…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

Apktool 反编译、修改、重打包学习使用及问题处理

反编译 $ apktool d app.apk -r --only-main-classes -o destDir d 表示反编译 app.apk 是目标apk文件路径-r 表示不反编译资源文件 --only-main-classes 表示不反编译某些资源文件目录下的dex文件&#xff0c;这些dex文件通常是被加固的dex.-o 反编译后代码存放目录 修改 …

GPG的使用

这里写自定义目录标题 安装加密程序生成加密密钥怎么备份自己的密钥就可以使用公钥加密邮件信息了 安装加密程序 下载gpg4win&#xff1a; https://www.gpg4win.org/index.html 免费的&#xff0c;如果使用的是苹果电脑&#xff0c;使用https://gpgtools.org/。 如果是linux&a…

中建三局,宁德时代,金证科技,途游游戏,得物,蓝禾,顺丰,康冠科技24春招内推

中建三局&#xff0c;宁德时代&#xff0c;金证科技&#xff0c;途游游戏&#xff0c;得物&#xff0c;蓝禾&#xff0c;顺丰&#xff0c;康冠科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;供应链&#xff0c;风控&#xff0c;产品&#xff0c;运营&#xf…

Python 与 TensorFlow2 生成式 AI(四)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章&#xff1a;文本生成方法的崛起 在前几章中&#xff0c;我们讨论了不同的方法和技术来开发和训练生成模型。特别是在第六章“使用 …

vue3 依赖-组件tablepage-vue3 项目公共配置封装

github求⭐ 可通过github 地址和npm 地址查看全部内容 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例-汇总 vue3 依赖-组件tablepage-vue3说明文档&#xff0c;列表页快速开发&#xff0c;使用思路及范例&#xff08;Ⅰ&#…

常用网络知识点(网管网工需掌握)

前言 最近在学习网络方面的内容时&#xff0c;看到很多知识点重复出现&#xff0c;不管在任何地方都能利用&#xff0c;我也就加班整理出一份针对于网络管理员/网络工程师等从业网络方面的知识点汇总 有需要的可以点赞搜藏慢慢看&#xff01;后续还会更新常见配置命令 BGP BGP…

【C++】匿名对象超详细详解(什么是匿名对象?对象可以是哪些类型呢?)

目录 一、前言 二、匿名对象的概念详解 &#x1f95d; 语法结构 &#x1f34d;概念理解 三、匿名对象的对象类型 四、匿名对象的使用 &#x1f347;简单场景的使用 &#x1f349;复杂场景的使用 五、总结 六、共勉 一、前言 在C中&#xff0c;匿名对象&#xff08;Ano…

一文解决ArcGIS生成点和管段 含案例讲解

背景 在工作中&#xff0c;我们经常遇到要将坐标数据导入 GIS&#xff0c;生成点位&#xff0c;若是地理坐标系&#xff08;经纬度&#xff09;&#xff0c;那么直接用 arcgis或者QGIS 导入数据就行了&#xff0c;可实际中总会遇到各种问题&#xff1a; 坐标数据集为大地 200…

《大数据最全面试题-Offer直通车》目录

大数据时代已经到来&#xff0c;数据科学家、大数据工程师、数据分析师等岗位成为了热门职业。如果你正准备面试&#xff0c;想要脱颖而出&#xff0c;那么《大数据最全面试题-Offer直通车》是你的不二选择。 本书汇集了多篇超过1万字的精华内容&#xff0c;包括程序员入职新公…

如何使用Go语言进行基准测试(benchmark)?

文章目录 一、基准测试的基本概念二、编写基准测试函数三、运行基准测试四、优化代码性能五、注意事项总结 在Go语言中&#xff0c;基准测试&#xff08;benchmark&#xff09;是一种评估代码性能的有效方式。通过基准测试&#xff0c;我们可以测量代码执行的时间、内存使用情况…

requestbody无法将json字符串转为相应类

报错问题&#xff1a;"requestbody无法将json字符串转为相应类" 通常意味着在使用Spring框架的REST API时&#xff0c;客户端发送的JSON数据无法被正确地解析为服务器端预期的Java对象。 可能的原因和解决方法&#xff1a; JSON格式错误&#xff1a;确保客户端发送的…

【Linux】详解core dump文件的作用以及用法ubuntu20.04下无法形成core dump文件的解决办法

说明 从第三大点开始讲解ubuntu20.04下无法形成core dump文件的解决办法。 一、core与term的区别 在之前讲过的信号中&#xff0c;终止进程的信号的动作分为两种&#xff0c;一种是core&#xff0c;一种是term。term&#xff08;全称termination&#xff09;是直接终止进程&am…

HTML_CSS学习:CSS像素与颜色

一、像素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>像素</title> </head><style>.atguigu1{/*单位可以是cm&#xff0c;但不能是m,dm*/width: 1cm;height: 1cm;background-c…

Java语法day1

Java语法day1 一、选择题二、编程题 一、选择题 1、派生类调用基类的构造器必须用到的关键字&#xff08;C&#xff09; A: this B: final C: super D: static 说明&#xff1a;调用父类的构造器或者父类的方法&#xff0c;要用关键字super 2、以下哪个接口的定义是正确的&am…