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

news2024/11/18 11:46:29

目录

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.coloradmin.cn/o/1637256.html

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

相关文章

程序员与土地的关系

目录 一、土地对人类的重要性 二、程序员与土地的关系 二、程序员如何利用GIS技术改变土地管理效率&#xff1f; 四、GIS技术有哪些运用&#xff1f; 五、shapely库计算多边形面积的例子 一、土地对人类的重要性 土地资源对人类是至关重要的。土地是人类赖…

国产操作系统上如何比较软件版本 _ 统信UOS _ 麒麟KOS _ 中科方德

原文链接&#xff1a;国产操作系统上如何比较软件版本 | 统信UOS | 麒麟KOS | 中科方德 Hello&#xff0c;大家好啊&#xff01;在国产操作系统上管理软件版本是确保系统安全性和功能稳定性的关键一环。今天&#xff0c;我将向大家展示如何通过编写脚本在国产操作系统上检查软件…

JAVASE练手项目-ATM

此项目使用到的技术主要是面向对象和JAVA的常用API和ArrayList实现。可以用来做JAVA的基础练手或者是期末作业。 主要功能是&#xff1a;用户开户&#xff0c;登录&#xff0c;存钱&#xff0c;取钱&#xff0c;转账&#xff0c;注销&#xff0c;修改密码。 注&#xff1a;下…

【消息队列】RabbitMQ五种消息模式

RabbitMQ RabbitMQRabbitMQ安装 常见的消息模型基本消息队列SpringAMQPWorkQueue消息预取发布订阅模式Fanout ExchangeDirectExchangeTopicExchange 消息转换器 RabbitMQ RabbitMQ是基于Erlang语言开发的开源消息通信中间件 官网地址&#xff1a;https://www.rabbitmq.com/ R…

python 反引号怎么打

切换到英文输入法模式下。 找到电脑键盘 Esc 下面的键。 敲两下就出现反引号了。

在一台交换机上配置VLAN

实验环境 实验拓扑图结构如图12.12所示&#xff0c;其中PC1和PC3属于VLAN 2&#xff0c;PC2属于 VLAN 3&#xff0c;PC1的IP地址为192.168.0.2/24&#xff0c;PC2的IP地址为192.168.1.2/24&#xff0c;PC3的 IP地址为192.168.0.3/24。 图12.12 需求描述 要求处于相同VLAN中的主…

正版Office-Word使用时却提示无网络连接请检查你的网络设置 然后重试

这是购买电脑时自带的已经安装好的word。看纸箱外壳有office标记&#xff0c;但是好像没有印系列号。 某天要使用。提示&#xff1a;无网络连接请检查你的网络设置。 经过网上高手的提示&#xff1a; 说要勾选勾选ssl3.0、TLS1.0、1.1、1.2。 我的截图 我电脑进去就缺1.2. …

【数据结构】串?在计算机中还有这样一种数据结构

串的基本概念与基本操作 导言一、串的定义及其重要术语1.1 串的定义1.2 串的重要术语1.3 ASCII码值1.4 转义字符 二、串的三要素2.1 串的逻辑结构2.2 串的存储结构2.3 串的运算 结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 看到今…

手把手实现一个简约酷美美的版权声明模块

1. 导语 版权声明在很多网站都有用到&#xff0c;出场率还是很高的。所以今天就实现一个属于自己分风格的版权声明模块&#xff0c;技术上采用原生的前端三剑客: HTMLCSSJavaScript(可能会用到) 比如CSDN的版权声明是这样的 2. 需求分析 先看看成品吧&#xff0c;这篇文字结…

初始计算机网络

TCP/IP TCP/IP模型 TCP/IP网络模型&#xff1a;对于不同设备之间的通信&#xff0c;就需要网络通信&#xff0c;而设备是多样性的&#xff0c;所以要兼容多种多样的设备&#xff0c;就协商出了一套通用的网络协议。 TCP/IP分层 这个网络协议是分层的&#xff0c;每一层都有…

向gitee推送项目

步骤很详细&#xff0c;直接上教程 在gitee新建项目并复制链接 在当前项目目录打开git bash 输入以下指令进行初始化 git init配置个人信息 git config --global user.name 你的昵称 git config --global user.email 账号绑定的邮箱 5. 绑定远程仓库地址 git remote add ori…

机器人正反向运动学(FK和IK)

绕第一个顶点可以沿Z轴转动&#xff0c;角度用alpha表示 绕第二个点沿X轴转动&#xff0c;角度为Beta 第三个点沿X轴转动&#xff0c;记作gama 这三个点构成姿态&#xff08;pose&#xff09; 我们记第一个点为P0&#xff0c;画出它的本地坐标系&#xff0c;和世界坐标系一样红…

Java面试八股之Java中数组有没有length()方法?String呢?为什么?

Java中数组有没有length()方法&#xff1f;String呢&#xff1f;为什么&#xff1f; 数组&#xff1a; 数组没有名为length()的方法&#xff0c;但有一个属性叫做length。可以通过数组名直接访问这个属性来获取数组的长度&#xff08;即元素个数&#xff09;。这是一个整数值&…

3-2 STM32c8t6实现流水灯

实物接线如下&#xff1a; 软件代码 #include "stm32f10x.h" // Device header #include "delay.h" int main(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_Init…

中国移动首批12个智算中心节点投产暨移动云智算产品体系正式发布

4月28日&#xff0c;中国移动在苏州隆重举办了2024中国移动算力网络大会。其中&#xff0c;以“智算凌云 慧联九州”为主题的一体化算力网络新基建论坛上&#xff0c;中国移动重磅发布了首批12个智算中心节点投产和智算产品体系。 中国移动响应国家号召&#xff0c;依托算力网络…

深度学习之基于YOLOv5智慧交通拥挤预警检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着城市化进程的加速和人口规模的不断增长&#xff0c;交通拥挤问题日益严重。传统的交通拥挤预警方…

goget配置多个golang 运行环境

一台主机安装多个golang 运行环境 本环境 windows10 为 基础 mac linux也可以按照此方法操作 背景 开发不同的运维工具会用到不同版本的golang&#xff0c;但是开发者不能一直进行重装来处理 &#xff0c;因此 需要一个工具进行golang版本的管理 go管理工具介绍 gvm (Go V…

【报错处理】ib_write_bw执行遇到Couldn‘t listen to port 18515原因与解决办法?

要点 要点&#xff1a; ib默认使用18515端口 相关命令&#xff1a; netstat -tuln | grep 18515 ib_write_bw --help |grep port# server ib_write_bw --ib-devmlx5_1 --port88990 # client ib_write_bw --ib-devmlx5_0 1.1.1.1 --port88990现象&#xff1a; 根因&#xff…

蓝桥杯如何准备国赛?

目录 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&#xff1f; 2、记录&#xff08;主要看个人习惯&#xff09; CSDN博客 写注释 3、暴力骗分 4、从出题人的角度出发&#xff0c;应该如何骗分 二、赛中注意事项 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&…

24.什么是跨域?解决方案有哪些?

为什么会出现跨域问题 存在浏览器同源策略&#xff0c;所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到&#xff0c;跨域限制主要的目的就是为了用户的上网安全。 同源策略导致的跨域是浏览器单方面拒绝响应数据&#xff0c;服务器端是处理完毕…