SpinalHDL中如何优雅地实现寄存器总线读写

时间:2025-04-28  作者:Diven  阅读:0

对于FPGA系统设计里,寄存器控制通道的设计是系统控制中必不可少的部分。今日且看SpinalHDL中如何优雅地实现寄存器总线读写。

SpinalHDL中如何优雅地实现寄存器总线读写

Bus Slave Factory

在SpinalHDL里,其Libraries里提供了关于总线相关的库。包含AMBA3、AMBA4、AVALON等总线类型,并提供了bus slave factory工具

通过bus slave factory,我们可以方便地实现寄存器读写,其提供了一系列寄存器读写方法。这里列举几个常用的方法(完整的方法列表可参照SpinalHDL-Doc):

read(that,address,bitOffset)    

注册寄存器读操作到指定地址,比特偏移为bitOffset 。     

write(that,address,bitOffset)

注册寄存器写操作到指定地址,比特偏移为bitOffset。             

readAndWrite(that,address,bitOffset)

注册寄存器读写操作到指定地址,比特偏移为bitOffset 。            

readMultiWord(that,address)

注册大位宽寄存器(超过总线数据位宽)读操作到指定地址,其中address地址存放对应低比特,高比特地址向上累加。

writeMultiWord(that,address)

注册大位宽寄存器(超过总线数据位宽)写操作到指定地址,其中address地址存放对应低比特,高比特地址向上累加。

除此之外,bus slave factory还提供了printDataModel函数用于打印寄存器列表。而且在生成RTL时,其会自动检测寄存器地址是否存在冲突。

AXI4-Lite总线实现

这里以AXI4-Lite总线举例,通过AXI4-Lite总线读写三组寄存器:

en:单比特信号,可读可写。

plus:单比特信号,可读写,写1自动清零。

cnt:64比特信号,可读。

这里给出完整的代码结构:

这里代码5~10行代码声明模块端口,第12行代码规范AXI4-Lite端口名称。代码第15~18行通过slave factory实现AXI4-Lite寄存器读写。代码第19行打印输出寄存器列表。

由于plus写1清零,因此代码14行用于实现清零操作。

通过下面的语法生成RTL代码:

在生成RTL代码的会打印寄存器列表:

仿真结果

SpinalHDL里提供了AXI4-Lite总线的基础仿真库,这里直接调用其仿真库,完整的仿真代码如下:

通过gtkWave观察波形:

可以看到,功能符合我们的设计,写寄存器0x4信号plus拉高1个时钟周期后自动清零。     这里简单几行代码实现了AXI4-Lite总线控制寄存器读写,对于我们在真正的项目实现里,能够极大简化我们的工作量和bug产生。尽管现在各个大厂或许有专门的总线控制寄存器读写代码生成工具,但SpinalHDL这种形式从本质上解决了Verilog描述的重复性工作。

写在最后

虽然SpinalHDL这种slave factory工具能够让我们在工程中快捷的实现想要的功能,但对于初学者来说,理解掌握AXI4-Lite这些标准的总线协议时序还是非常有必要的(Verilog or SpinalHDL实现都行喽)~

审核编辑 :李倩

 

猜您喜欢

随着云计算,大数据和人工智能技术应用,单靠CPU已经无法满足各行各业的算力需求。海量数据分析、机器学习和边缘计算等场景需要计算架构多样化,需要不同的处理器架构和...
2020-01-16 17:26:00

周转箱是应用于物流和仓储的工具,主要用于物品的存放、运输和管理。根据不同的使用需求,周转箱可以分为几种主要类型。按材料分类,周转箱可以分为塑料周转箱、金属周转箱...
2013-02-04 00:00:00

现代电子产品的设计与制造中,封装类型的选择对电路板的性能、尺寸以及散热等方面都有着重要的影响。其中,TSSOP8(ThinShrinkSmallOutlineP...
2025-02-21 12:09:11

你是否好奇过,为什么手机电池能够在短时间内充满电,并且长时间使用?这背后,离不开一颗小小的芯片——电池充电管理芯片的默默守护。简单来说,电池充电管理芯片就像是一...
2024-07-13 00:00:00

现代电子设备中,精密贴片电阻以其体积小、精度高等优点被应用。对于工程师和电子爱好者来说,了解精密贴片电阻的阻值代码对照表是非常重要的,这不仅能够帮助在设计电路时...
2025-03-17 01:00:38

开关电源在现代电子设备中无处不在。能够高效地转换电压,满足不同设备的需求。电解电容在开关电源中起到了重要的作用。本文将探讨电解电容在开关电源中的几大核心作用。平...
2025-03-26 20:09:54

现代电子产品中,贴片电阻作为一种重要的无源元件,应用于各种电路设计中。对于设计工程师而言,理解贴片电阻的数字表示法是非常必要的。这种表示法不仅简洁明了,还能有效...
2025-03-18 12:00:34

贴片电阻电容,由于其微小的尺寸,上面的标识往往让人难以理解。别担心,这份实用指南将帮助你快速掌握贴片电阻电容的换算方法。对于电阻,通常采用三位数或四位数的标识。...
2024-11-26 11:29:23