1. 引言

图 1 axi4-lite总线系统
如图 1所示,在FPGA和SoC系统设计中,AXI4-Lite总线协议因其结构简单、易于实现而广泛应用于寄存器配置等低速场景。然而传统的AXI4-Lite从接口(Slave)开发往往需要手动处理地址译码、读写响应、寄存器映射等底层逻辑,不仅代码冗长,还容易引入时序或功能错误。如何通过模块化设计,来简化这一过程,成为提升开发效率的关键。本文将探讨AXI4-Lite Slave接口(下图红色部分)的简化方法,包括利用现有xilinx 模版和开源模版加速开发,帮助开发者减少重复劳动,聚焦核心功能user_loigc(下图的灰色部分)的实现。

图 2 axi4-lite IP结构
2. 接口简化方法
AXI4-Lite总线协议这里不做介绍,下面主要介绍三种方法简化AXI4-Lite Slave接口实现的方法。
2.1 基于xilinx模版


直接通过vivado的create and package new ip,会生成一个模版,我们只需要简单添加自己的用户接口寄存器,就可以做成一个axi4_lite_slave标准模块。例如,我们想添加2个输入gpio寄存器和2个输出gpio寄存器,修改部分如下:
- 添加接口寄存器i_gpio0,i_gpio1,o_gpio0,o_gpio1

- slv_reg2,slv_reg3用作只读,连接i_gpio0和i_gpio1,删除写操作逻辑


- 将寄存器slv_reg0~slv_reg3连接到用户接口

2.2 基于alexforencich开源
开源网址:https://github.com/alexforencich/verilog-axi,我们只需要找到下面3个文件,接口原理就是将axi lite slave接口转换成了简单的类似ram操作的接口,用户不再关心axi4- lite协议,只需要关注简单的类似ram操作接口即可。

我们只需要对axil_reg_if.v稍微做修改,添加用户寄存器接口即可:
- 将原先的端口信号定义成内部信号,添加接口寄存器i_gpio0,i_gpio1,o_gpio0,o_gpio1


- 写操作

- 读操作


上面模版和xilinx的的最大区别,就是支持读或写超时,通过reg_rd_wait和reg_wr_wait这个2个信号实现。
2.3 基于ADI开源
开源网址:https://github.com/analogdevicesinc/hdl/tree/main/library/common,我们只需要用到up_axi.v,这个接口和alexforencich的思路一样,将axi lite slave转换成了简单的类似ram操作的接口,同时也支持超时机制。

具体封装可以参考:
https://github.com/analogdevicesinc/hdl/tree/main/library/axi_clock_monitor
3. 总结
本文将探讨AXI4-Lite Slave接口(下图红色部分)的简化方法,包括利用现有xilinx 模版和开源模版加速开发,帮助开发者减少重复劳动,聚焦核心功能user_loigc(下图的灰色部分)的实现。其中alex和adi开源都是支持超时机制,xilinx的不支持。xilinx和alex模版支持字节选通操作,adi不支持。

3257

被折叠的 条评论
为什么被折叠?



