# verilog-axi **Repository Path**: gjm9999/verilog-axi ## Basic Information - **Project Name**: verilog-axi - **Description**: https://github.com/alexforencich/verilog-axi/tree/master 本地副本 - **Primary Language**: Verilog - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-06-07 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Verilog AXI组件自述文件 [![构建状态](https://github.com/alexforencich/verilog-axi/workflows/回归测试/badge.svg?branch=master)](https://github.com/alexforencich/verilog-axi/actions/) 更多信息和更新:http://alexforencich.com/wiki/en/verilog/axi/start GitHub代码库:https://github.com/alexforencich/verilog-axi ## 介绍 AXI4和AXI4 Lite总线组件的集合。大多数组件都可以在接口宽度上进行完全参数化。包括完整的cocotb测试台,这些测试台利用了[cocotbext-axi](https://github.com/alexforencich/cocotbext-axi)。 ## 文档 ### `axi_adapter`模块 具有可参数化数据和地址接口宽度的AXI宽度适配器模块。 支持INCR突发类型和狭窄突发。是`axi_adapter_rd`和`axi_adapter_wr`的包装器。 ### `axi_adapter_rd`模块 具有可参数化数据和地址接口宽度的AXI宽度适配器模块。 支持INCR突发类型和狭窄突发。 ### `axi_adapter_wr`模块 具有可参数化数据和地址接口宽度的AXI宽度适配器模块。 支持INCR突发类型和狭窄突发。 ### `axi_axil_adapter`模块 AXI到AXI Lite转换器和宽度适配器模块,具有可参数化的数据和地址接口宽度。 支持INCR突发类型和狭窄突发。是`axi_axil_adapter_rd`和`axi_axil_adapter_wr`的包装器。 ### `axi_axil_adapter_rd`模块 AXI到AXI Lite转换器和宽度适配器模块,具有可参数化的数据和地址接口宽度。 支持INCR突发类型和狭窄突发。 ### `axi_axil_adapter_wr`模块 AXI到AXI Lite转换器和宽度适配器模块,具有可参数化的数据和地址接口宽度。 支持INCR突发类型和狭窄突发。 ### `axi_cdma`模块 AXI到AXI DMA引擎,具有可参数化的数据和地址接口宽度。 只生成全宽INCR突发,最大突发长度可参数化。 支持未对齐传输,可以通过参数禁用以节省资源消耗。 ### `axi_cdma_desc_mux`模块 AXI CDMA模块的描述符多路复用器/解复用器。 支持在多个请求源之间共享AXI CDMA模块,交错请求和分发响应。 ### `axi_crossbar`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI非阻塞交叉互连。 支持所有突发类型。完全非阻塞,具有完全独立的读写路径; 基于ID的事务排序保护逻辑;每个端口的地址解码、准入控制以及解码错误处理。是`axi_crossbar_rd`和`axi_crossbar_wr`的包装器。 可以使用`axi_crossbar_wrap.py`生成包装器。 ### `axi_crossbar_addr`模块 AXI非阻塞交叉互连的地址解码和准入控制模块。 ### `axi_crossbar_rd`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI非阻塞交叉互连。 仅限读接口。 支持所有突发类型。完全非阻塞,具有完全独立的读写路径; 基于ID的事务排序保护逻辑;每个端口的地址解码、准入控制以及解码错误处理。 ### `axi_crossbar_wr`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI非阻塞交叉互连。 仅限写接口。 支持所有突发类型。完全非阻塞,具有完全独立的读写路径; 基于ID的事务排序保护逻辑;每个端口的地址解码、准入控制以及解码错误处理。 ### `axi_dma`模块 AXI到AXI流DMA引擎,具有可参数化的数据和地址接口宽度。 只生成全宽INCR突发,最大突发长度可参数化。 支持未对齐传输,可以通过参数禁用以节省资源消耗。是`axi_dma_rd`和`axi_dma_wr`的包装器。 ### `axi_dma_desc_mux`模块 AXI DMA模块的描述符多路复用器/解复用器。 支持在多个请求源之间共享AXI DMA模块,交错请求和分发响应。 ### `axi_dma_rd`模块 AXI到AXI流DMA引擎,具有可参数化的数据和地址接口宽度。 只生成全宽INCR突发,最大突发长度可参数化。 支持未对齐传输,可以通过参数禁用以节省资源消耗。 ### `axi_dma_wr`模块 AXI流到AXI DMA引擎,具有可参数化的数据和地址接口宽度。 只生成全宽INCR突发,最大突发长度可参数化。 支持未对齐传输,可以通过参数禁用以节省资源消耗。 ### `axi_dp_ram`模块 具有可参数化数据和地址接口宽度的AXI双端口RAM。 支持FIXED和INCR突发类型以及狭窄突发。 ### `axi_fifo`模块 具有可参数化数据和地址接口宽度的AXI FIFO。 支持所有突发类型。 可以选择在写数据完全移位进入FIFO或读数据FIFO有足够的容量以容纳整个突发之前延迟地址通道。是`axi_fifo_rd`和`axi_fifo_wr`的包装器。 ### `axi_fifo_rd`模块 具有可参数化数据和地址接口宽度的AXI FIFO。 仅限AR和R通道。 支持所有突发类型。 可以选择在读取数据FIFO为空或有足够的容量以容纳整个突发之前延迟地址通道。 ### `axi_fifo_wr`模块 具有可参数化数据和地址接口宽度的AXI FIFO。 仅限WR、W和B通道。 支持所有突发类型。 可以选择在写数据完全移位进入写数据FIFO,或当前突发完全填满写数据FIFO之前延迟地址通道。 ### `axi_interconnect`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI共享互连。 支持所有突发类型。 面积小,但不支持并发操作。 可以使用`axi_interconnect_wrap.py`生成包装器。 ### `axi_ram`模块 具有可参数化数据和地址接口宽度的AXI RAM。 支持FIXED和INCR突发类型以及狭窄突发。 ### `axi_ram_rd_if`模块 具有可参数化数据和地址接口宽度的AXI RAM读接口。 处理突发并呈现简化的内部存储器接口。支持FIXED和INCR突发类型以及狭窄突发。 ### `axi_ram_wr_if`模块 具有可参数化数据和地址接口宽度的AXI RAM写接口。 处理突发并呈现简化的内部存储器接口。支持FIXED和INCR突发类型以及狭窄突发。 ### `axi_ram_wr_rd_if`模块 具有可参数化数据和地址接口宽度的AXI RAM读写接口。 处理突发并呈现简化的内部存储器接口。 支持FIXED和INCR突发类型以及狭窄突发。是`axi_ram_rd_if`和`axi_ram_wr_if`的包装器。 ### `axi_register`模块 具有可参数化数据和地址接口宽度的AXI寄存器。 支持所有突发类型。 在所有通道中插入简单缓冲区或滑移缓冲区。 可以单独更改或绕过通道寄存器类型。是`axi_register_rd`和`axi_register_wr`的包装器。 ### `axi_register_rd`模块 具有可参数化数据和地址接口宽度的AXI寄存器。 仅限AR和R通道。 支持所有突发类型。 在所有通道中插入简单缓冲区或滑移缓冲区。 可以单独更改或绕过通道寄存器类型。 ### `axi_register_wr`模块 具有可参数化数据和地址接口宽度的AXI寄存器。 仅限WR、W和B通道。 支持所有突发类型。 在所有通道中插入简单缓冲区或滑移缓冲区。 可以单独更改或绕过通道寄存器类型。 ### `axil_adapter`模块 具有可参数化数据和地址接口宽度的AXI Lite宽度适配器模块。 是`axi_adapter_rd`和`axi_adapter_wr`的包装器。 ### `axil_adapter_rd`模块 具有可参数化数据和地址接口宽度的AXI Lite宽度适配器模块。 ### `axil_adapter_wr`模块 具有可参数化数据和地址接口宽度的AXI Lite宽度适配器模块。 ### `axil_cdc`模块 具有可参数化数据和地址接口宽度的AXI Lite时钟域交叉模块。 是`axi_cdc_rd`和`axi_cdc_wr`的包装器。 ### `axil_cdc_rd`模块 具有可参数化数据和地址接口宽度的AXI Lite时钟域交叉模块。 ### `axil_cdc_wr`模块 具有可参数化数据和地址接口宽度的AXI Lite时钟域交叉模块。 ### `axil_crossbar`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI Lite非阻塞交叉互连。 完全非阻塞,具有完全独立的读写路径;基于FIFO的事务排序保护逻辑; 每个端口的地址解码、准入控制和解码错误处理。是`axil_crossbar_rd`和`axil_crossbar_wr`的包装器。 可以使用`axil_crossbar_wrap.py`生成包装器。 ### `axil_crossbar_addr`模块 AXI Lite非阻塞交叉互连的地址解码和准入控制模块。 ### `axil_crossbar_rd`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI Lite非阻塞交叉互连。 仅限读接口。 完全非阻塞,具有完全独立的读写路径;基于FIFO的事务排序保护逻辑; 每个端口的地址解码、准入控制和解码错误处理。 ### `axil_crossbar_wr`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI Lite非阻塞交叉互连。 仅限写接口。 完全非阻塞,具有完全独立的读写路径;基于FIFO的事务排序保护逻辑; 每个端口的地址解码、准入控制和解码错误处理。 ### `axil_interconnect`模块 具有可参数化数据和地址接口宽度以及主从接口计数的AXI Lite共享互连。 面积小,但不支持并发操作。 可以使用`axil_interconnect_wrap.py`生成包装器。 ### `axil_ram`模块 具有可参数化数据和地址接口宽度的AXI Lite RAM。 ### `axil_reg_if`模块 具有可参数化数据和地址接口宽度的AXI Lite寄存器接口。 可用于在多个模块和层次结构级别组装一组控制寄存器,而无需复杂的仲裁逻辑。 是`axil_reg_if_rd`和`axil_reg_if_wr`的包装器。 ### `axil_reg_if_rd`模块 具有可参数化数据和地址接口宽度的AXI Lite寄存器接口。 仅限读方向。 可用于在多个模块和层次结构级别组装一组控制寄存器,而无需复杂的仲裁逻辑。 ### `axil_reg_if_wr`模块 具有可参数化数据和地址接口宽度的AXI Lite寄存器接口。 仅限写方向。 可用于在多个模块和层次结构级别组装一组控制寄存器,而无需复杂的仲裁逻辑。 ### `axil_register`模块 具有可参数化数据和地址接口宽度的AXI Lite寄存器。 在所有通道中插入滑移缓冲区。可以单独绕过通道寄存器。 是`axil_register_rd`和`axil_register_wr`的包装器。 ### `axil_register_rd`模块 具有可参数化数据和地址接口宽度的AXI Lite寄存器。 仅限AR和R通道。 在所有通道中插入简单缓冲区。可以单独绕过通道寄存器。 ### `axil_register_wr`模块 具有可参数化数据和地址接口宽度的AXI Lite寄存器。 仅限WR、W和B通道。 在所有通道中插入简单缓冲区。可以单独绕过通道寄存器。 ### 通用信号 awid : 写地址ID awaddr : 写地址 awlen : 写突发长度 awsize : 写突发大小 awburst : 写突发类型 awlock : 写锁定 awcache : 写缓存处理 awprot : 写保护级别 awqos : 写QoS设置 awregion : 写区域 awuser : 写用户侧带信号 awvalid : 写地址有效 awready : 写地址就绪(来自从设备) wdata : 写数据 wstrb : 写数据存位(字节选择) wlast : 突发中最后的写数据传输 wuser : 写数据用户侧带信号 wvalid : 写数据有效 wready : 写数据就绪(来自从设备) bid : 写响应ID bresp : 写响应 buser : 写响应用户侧带信号 bvalid : 写响应有效 bready : 写响应就绪(来自主设备) arid : 读地址ID araddr : 读地址 arlen : 读突发长度 arsize : 读突发大小 arburst : 读突发类型 arlock : 读锁定 arcache : 读缓存处理 arprot : 读保护级别 arqos : 读QoS设置 arregion : 读区域 aruser : 读用户侧带信号 arvalid : 读地址有效 arready : 读地址就绪(来自从设备) rid : 读数据ID rdata : 读数据 rresp : 读响应 rlast : 突发中最后的读数据传输 ruser : 读数据用户侧带信号 rvalid : 读响应有效 rready : 读响应就绪(来自主设备) ### 通用参数 ADDR_WIDTH : awaddr和araddr信号的宽度 DATA_WIDTH : wdata和rdata信号的宽度 STRB_WIDTH : wstrb信号的宽度 ID_WIDTH : *id信号的宽度 AWUSER_ENABLE : 启用awuser信号 AWUSER_WIDTH : awuser信号的宽度 WUSER_ENABLE : 启用wuser信号 WUSER_WIDTH : wuser信号的宽度 BUSER_ENABLE : 启用buser信号 BUSER_WIDTH : buser信号的宽度 ARUSER_ENABLE : 启用aruser信号 ARUSER_WIDTH : aruser信号的宽度 RUSER_ENABLE : 启用ruser信号 RUSER_WIDTH : ruser信号的宽度 ### 源文件 RTL/arbiter.v : 可参数化的仲裁器 RTL/axi_adapter.v : AXI Lite宽度转换器 RTL/axi_adapter_rd.v : AXI Lite宽度转换器(读) RTL/axi_adapter_wr.v : AXI Lite宽度转换器(写) RTL/axi_axil_adapter.v : AXI到AXI Lite转换器 RTL/axi_axil_adapter_rd.v : AXI到AXI Lite转换器(读) RTL/axi_axil_adapter_wr.v : AXI到AXI Lite转换器(写) RTL/axi_cdma.v : AXI中央DMA引擎 RTL/axi_cdma_desc_mux.v : AXI CDMA描述符复用器 RTL/axi_crossbar.v : AXI非阻塞交叉互连 RTL/axi_crossbar_addr.v : AXI交叉互连地址模块 RTL/axi_crossbar_rd.v : AXI交叉互连(读) RTL/axi_crossbar_wr.v : AXI交叉互连(写) RTL/axi_dma.v : AXI DMA引擎 RTL/axi_dma_desc_mux.v : AXI DMA描述符复用器 RTL/axi_dma_rd.v : AXI DMA引擎(读) RTL/axi_dma_wr.v : AXI DMA引擎(写) RTL/axi_dp_ram.v : AXI双端口RAM RTL/axi_fifo.v : AXI FIFO RTL/axi_fifo_rd.v : AXI FIFO(读) RTL/axi_fifo_wr.v : AXI FIFO(写) RTL/axi_interconnect.v : AXI共享互连 RTL/axi_ram.v : AXI RAM RTL/axi_ram_rd_if.v : AXI RAM读接口 RTL/axi_ram_wr_if.v : AXI RAM写接口 RTL/axi_ram_wr_rd_if.v : AXI RAM读写接口 RTL/axi_register.v : AXI寄存器 RTL/axi_register_rd.v : AXI寄存器(读) RTL/axi_register_wr.v : AXI寄存器(写) RTL/axil_adapter.v : AXI Lite宽度转换器 RTL/axil_adapter_rd.v : AXI Lite宽度转换器(读) RTL/axil_adapter_wr.v : AXI Lite宽度转换器(写) RTL/axil_cdc.v : AXI Lite CDC RTL/axil_cdc_rd.v : AXI Lite CDC(读) RTL/axil_cdc_wr.v : AXI Lite CDC(写) RTL/axil_crossbar.v : AXI Lite非阻塞交叉互连 RTL/axil_crossbar_addr.v : AXI Lite交叉互连地址模块 RTL/axil_crossbar_rd.v : AXI Lite交叉互连(读) RTL/axil_crossbar_wr.v : AXI Lite交叉互连(写) RTL/axil_interconnect.v : AXI Lite共享互连 RTL/axil_ram.v : AXI Lite RAM RTL/axil_reg_if.v : AXI Lite寄存器接口 RTL/axil_reg_if_rd.v : AXI Lite寄存器接口(读) RTL/axil_reg_if_wr.v : AXI Lite寄存器接口(写) RTL/axil_register.v : AXI Lite寄存器 RTL/axil_register_rd.v : AXI Lite寄存器(读) RTL/axil_register_wr.v : AXI Lite寄存器(写) RTL/priority_encoder.v : 可参数化的优先级编码器 ### AXI4-Lite接口示例 写 ___ ___ ___ ___ ___ 时钟 ___/ \___/ \___/ \___/ \___/ \___ _______ awid XXXX_ID____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ awaddr XXXX_ADDR__XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ awlen XXXX_00____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ awsize XXXX_0_____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ awburst XXXX_0_____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ awprot XXXX_PROT__XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ awvalid ___/ \_______________________________ awready \_______/ _______________ wdata XXXX_DATA__________XXXXXXXXXXXXXXXXXXXXXXXX _______________ wstrb XXXX_STRB__________XXXXXXXXXXXXXXXXXXXXXXXX _______________ wvalid ___/ \_______________________ _______ wready ___________/ \_______________________ _______ bid XXXXXXXXXXXXXXXXXXXXXXX_ID____XXXXXXXX _______ bresp XXXXXXXXXXXXXXXXXXXXXXX_RESP__XXXXXXXX _______ bvalid ___________________________/ \_______ ___________________________________________ bready 读 ___ ___ ___ ___ ___ 时钟 ___/ \___/ \___/ \___/ \___/ \___ _______ arid XXXX_ID____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ araddr XXXX_ADDR__XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ arlen XXXX_00____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ arsize XXXX_0_____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ arburst XXXX_0_____XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ arprot XXXX_PROT__XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _______ arvalid ___/ \_______________________________ arready _______ rid XXXXXXXXXXXXXXXXXXXXXXX_ID____XXXXXXXX _______ rdata XXXXXXXXXXXXXXXXXXXXXXX_DATA__XXXXXXXX _______ rresp XXXXXXXXXXXXXXXXXXXXXXX_RESP__XXXXXXXX _______ rvalid ___________________________/ \_______ ___________________________________________ rready ## 测试 运行包含的测试台需要[cocotb](https://github.com/cocotb/cocotb)、[cocotbext-axi](https://github.com/alexforencich/cocotbext-axi)和[Icarus Verilog](http://iverilog.icarus.com/)。 测试台可以直接使用pytest运行(需要[cocotb-test](https://github.com/themperek/cocotb-test)),通过tox使用pytest,或者通过cocotb makefiles运行。