贵安新区微信网站建设,页面设计感想,公司微网站建设方案,wordpress如何编辑目录
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解读#xff08;1#xff09;-CSDN博…目录
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 modes_axilite bundleBUS_A portreturn 便得到了这些寄存器
* S_AXILITE Registers
------------------------------------------------------------------------------------------------------------------------------------------------------
| Interface | Register | Offset | Width | Access | Description | Bit Fields |
------------------------------------------------------------------------------------------------------------------------------------------------------
| s_axi_BUS_A | CTRL | 0x00 | 32 | RW | Control signals | 0AP_START 1AP_DONE 2AP_IDLE 3AP_READY 7AUTO_RESTART 9INTERRUPT |
| s_axi_BUS_A | GIER | 0x04 | 32 | RW | Global Interrupt Enable Register | 0Enable |
| s_axi_BUS_A | IP_IER | 0x08 | 32 | RW | IP Interrupt Enable Register | 0CHAN0_INT_EN 1CHAN1_INT_EN |
| s_axi_BUS_A | IP_ISR | 0x0c | 32 | RW | IP Interrupt Status Register | 0CHAN0_INT_ST 1CHAN1_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 modes_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中断状态寄存器用于显示当前的中断状态。
位0ap_done中断状态可读读取后自清除COR。其他位保留。
0x10地址是reg_in数据信号的寄存器用于读写reg_in的值。
位7~0reg_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 协议下生成的寄存器进行解释我们了解了这些寄存器的作用和每个寄存器位的含义以及驱动程序中的控制过程。这种自动化的设计流程减少了手动编写驱动程序的工作量同时也降低了出错的可能性为硬件设计带来了更高的可靠性和稳定性。