跳转至

RTL 文件理解文档

由 SvDoc 自动生成

文件数:4

快速导航

序号 文件 模块/类数 链接
1 axi_master.v 1 查看
2 test_class.sv 3 查看
3 test_svdoc_features.sv 2 查看
4 axi_master_tb.v 1 查看

文件详情

axi_master.v

文件路径: /home/admin/.openclaw/workspace/chip-project/rtl/axi_master.v

目录: /home/admin/.openclaw/workspace/chip-project/rtl/

模块列表

模块名 类型 端口数 参数数 概要
axi_master module 32 4 AXI4 Master Interface - Full-f...

axi_master

AXI4 Master Interface - Full-featured AXI4 master controller

本模块实现完整的 AXI4 master 接口,支持以下特性: - 写/读事务支持 - 可配置长度的突发传输(1-16拍) - 地址对齐和字节选通生成 - 基于状态机的控制逻辑 - 可配置基地址用于动态事务启动

架构设计

模块使用 6 状态 FSM 管理 AXI4 事务: - IDLE: 等待配置使能 - AW: 写地址通道握手 - W: 写数据通道握手 - B: 写响应通道握手 - AR: 读地址通道握手 - R: 读数据通道握手

状态机转换图

stateDiagram-v2
[*] --> IDLE : 复位释放
IDLE --> AW_STATE : cfg_en=1
AW_STATE --> W_STATE : aw_valid && aw_ready
W_STATE --> B_STATE : w_valid && w_ready && w_last
B_STATE --> DONE_STATE : b_valid && b_ready
DONE_STATE --> IDLE : 事务完成
IDLE --> [*] : 系统关闭

写事务时序图

sequenceDiagram
participant M as AXI Master
participant S as AXI Slave
Note over M,S: 写地址通道
M->>S: aw_addr, aw_len, aw_size, aw_burst
M->>S: aw_valid=1
S-->>M: aw_ready=1
Note over M,S: 写数据通道
M->>S: w_data[0], w_strb, w_last=0
M->>S: w_valid=1
S-->>M: w_ready=1
M->>S: w_data[1], w_strb, w_last=0
M->>S: w_valid=1
S-->>M: w_ready=1
M->>S: w_data[N], w_strb, w_last=1
M->>S: w_valid=1
S-->>M: w_ready=1
Note over M,S: 写响应通道
M->>S: b_ready=1
S-->>M: b_valid=1, b_resp=OKAY, b_id
Note over M: cfg_done=1

读事务时序图

sequenceDiagram
participant M as AXI Master
participant S as AXI Slave
Note over M,S: 读地址通道
M->>S: ar_addr, ar_len, ar_size, ar_burst
M->>S: ar_valid=1
S-->>M: ar_ready=1
Note over M,S: 读数据通道
S-->>M: r_data[0], r_id, r_last=0
S-->>M: r_valid=1
M->>S: r_ready=1
S-->>M: r_data[1], r_id, r_last=0
S-->>M: r_valid=1
M->>S: r_ready=1
S-->>M: r_data[N], r_id, r_last=1
S-->>M: r_valid=1
M->>S: r_ready=1
Note over M: cfg_done=1

端口分组

端口组 信号 方向 描述
时钟/复位 clk, rst_n input 系统时钟和异步复位
写地址 aw_addr, aw_id, aw_len, aw_size, aw_burst, aw_valid, aw_ready output/input AXI4 写地址通道
写数据 w_data, w_strb, w_last, w_valid, w_ready output/input AXI4 写数据通道
写响应 b_id, b_resp, b_valid, b_ready input/output AXI4 写响应通道
读地址 ar_addr, ar_id, ar_len, ar_size, ar_burst, ar_valid, ar_ready output/input AXI4 读地址通道
读数据 r_data, r_id, r_resp, r_last, r_valid, r_ready input/output AXI4 读数据通道
配置 cfg_base_addr, cfg_en, cfg_done input/output 配置接口

使用示例

axi_master #(
.DATA_WIDTH(64),
.ADDR_WIDTH(32),
.ID_WIDTH(4),
.BURST_LEN(16)
) u_axi_master (
.clk(clk),
.rst_n(rst_n),
// ... 连接 AXI 信号
.cfg_base_addr(32'h1000_0000),
.cfg_en(1'b1),
.cfg_done(cfg_done)
);

📝 注意: 模块支持写和读事务,但按顺序处理。写事务优先级高于读事务。

⚠️ 警告: 确保突发长度不超过配置的 BURST_LEN 参数,以避免数据损坏。

🔗 参见: AXI4 Specification, ARM IHI 0022E

🔗 参见: axi_master_tb.v 测试平台和验证环境

端口定义:

信号名 方向 类型 位宽 描述
clk input wire - 系统时钟输入,上升沿有效
rst_n input wire - 低电平有效的异步复位
aw_addr output wire [ADDR_WIDTH-1:0] 写地址:突发传输中第一拍的地址 [ADDR_WIDTH-1:0]
aw_id output wire [ID_WIDTH-1:0] 写 ID:写地址通道的事务标识符 [ID_WIDTH-1:0]
aw_len output wire [7:0] 写突发长度:拍数减 1(1-16 拍对应 0-15)[7:0]
aw_size output wire [2:0] 写突发大小:每拍字节数(3'b011 = 8 字节)[2:0]
aw_burst output wire [1:0] 写突发类型:2'b01 = INCR(递增地址)[1:0]
aw_valid output wire - 写地址有效:当地址和控制信号有效时断言
aw_ready input wire - 写地址就绪:从机准备好接收地址时断言
w_data output wire [DATA_WIDTH-1:0] 写数据:要写入内存的数据 [DATA_WIDTH-1:0]
w_strb output wire [DATA_WIDTH/8-1:0] 写选通:指示哪些字节通道包含有效数据 [DATA_WIDTH/8-1:0]
w_last output wire - 写最后:在写突发最后一拍时断言
w_valid output wire - 写数据有效:当写数据有效时断言
w_ready input wire - 写数据就绪:从机准备好接收数据时断言
b_id input wire [ID_WIDTH-1:0] 响应 ID:与对应写地址的 ID 匹配 [ID_WIDTH-1:0]
b_valid input wire - 响应有效:当写响应有效时断言
b_ready output wire - 响应就绪:主机准备好接收响应时断言
ar_addr output wire [ADDR_WIDTH-1:0] 读地址:读突发中第一拍的地址 [ADDR_WIDTH-1:0]
ar_id output wire [ID_WIDTH-1:0] 读 ID:读地址通道的事务标识符 [ID_WIDTH-1:0]
ar_len output wire [7:0] 读突发长度:拍数减 1 [7:0]
ar_size output wire [2:0] 读突发大小:每拍字节数 [2:0]
ar_burst output wire [1:0] 读突发类型:2'b01 = INCR(递增地址)[1:0]
ar_valid output wire - 读地址有效:当读地址和控制信号有效时断言
ar_ready input wire - 读地址就绪:从机准备好接收地址时断言
r_data input wire [DATA_WIDTH-1:0] 读数据:从内存读取的数据 [DATA_WIDTH-1:0]
r_id input wire [ID_WIDTH-1:0] 读 ID:与对应读地址的 ID 匹配 [ID_WIDTH-1:0]
r_last input wire - 读最后:在读突发最后一拍时断言
r_valid input wire - 读数据有效:当读数据有效时断言
r_ready output wire - 读数据就绪:主机准备好接收数据时断言
cfg_base_addr input wire [ADDR_WIDTH-1:0] 配置基地址:事务的起始地址 [ADDR_WIDTH-1:0]
cfg_en input wire - 配置使能:启动新事务
cfg_done output wire - 配置完成:事务成功完成

参数定义:

参数 类型 默认值 说明
DATA_WIDTH parameter 64 数据总线宽度(位)。必须是 2 的幂(32/64/128/256)
ADDR_WIDTH parameter 32 地址总线宽度(位)。通常为 32 或 64
ID_WIDTH parameter 4 ID 信号宽度,用于事务标识
BURST_LEN parameter 16 最大突发长度(每事务的拍数)

内部信号:

名称 类型 位宽 说明
current_state reg [2:0] AXI 事务状态机的当前状态 [2:0]
next_state reg [2:0] AXI 事务状态机的下一状态 [2:0]
addr_reg reg [ADDR_WIDTH-1:0] 地址寄存器,存储事务地址 [ADDR_WIDTH-1:0]
data_reg reg [DATA_WIDTH-1:0] 数据寄存器,存储写数据 [DATA_WIDTH-1:0]
burst_count reg [7:0] 突发计数器:跟踪已传输的拍数 [7:0]
transfer_active reg - 传输活动标志:指示正在进行的事务

test_class.sv

文件路径: /home/admin/.openclaw/workspace/chip-project/rtl/test_class.sv

目录: /home/admin/.openclaw/workspace/chip-project/rtl/

模块列表

模块名 类型 端口数 参数数 概要
test_class_module module 0 0 Class 功能测试模块

类列表

类名 继承 成员数 方法数 概要
axi_base_class - 2 3 AXI 基类
axi_driver axi_base_class 5 6 AXI 驱动类

test_class_module

Class 功能测试模块

测试 axi_driver 类的各种功能

内部信号:

名称 类型 位宽 说明
clk logic -
rst_n logic -

axi_base_class

AXI 基类

所有 AXI 相关类的基类,提供基本的属性和方法

成员变量:

名称 类型 位宽 默认值 修饰符 说明
name string - `` - 名称属性
count int - 0 static 计数器(静态)

成员方法:

function new

构造函数 初始化基类实例,设置名称并增加计数器

virtual function reset

虚方法:复位 复位所有内部状态,子类可重写此方法

时序图

sequenceDiagram
participant T as Test
participant B as axi_base_class
T->>B: reset()
B->>T: 完成复位

virtual function print

虚方法:打印信息 打印类名称和实例计数

流程图

flowchart TD
A[开始] --> B[获取 name]
B --> C[获取 count]
C --> D[打印信息]
D --> E[结束]

axi_driver

AXI 驱动类

继承自 axi_base_class,实现具体的 AXI 驱动功能

类继承关系图

classDiagram
class axi_base_class {
+string name
+static int count
+new(string)
+virtual reset()
+virtual print()
}
class axi_driver {
-protected axi_bus_if vif
+rand bit[7:0] rand_data
+rand bit[31:0] rand_addr
+axi_state_e current_state
+axi_transaction_t transaction_queue[$]
+new(string)
+virtual reset()
+send_write_transaction()
+send_read_transaction()
+get_transaction_count()
+static get_driver_count()
}
axi_base_class <|-- axi_driver

继承: axi_base_class

成员变量:

名称 类型 位宽 默认值 修饰符 说明
vif axi_bus_if - `` protected AXI 接口句柄
rand_data bit [7:0] `` - 随机数据
rand_addr bit [31:0] `` - 随机地址
current_state axi_state_e - `` - 当前状态
transaction_queue[$] axi_transaction_t - `` -

成员方法:

function new

构造函数 初始化驱动类实例,调用父类构造函数并设置初始状态

virtual function reset

虚方法:复位(重写基类方法) 复位所有内部状态,包括随机变量、状态机和事务队列

时序图

sequenceDiagram
participant T as Test
participant D as axi_driver
participant B as axi_base_class
T->>D: reset()
D->>B: super.reset()
B->>D: 完成基类复位
D->>D: rand_data = 0
D->>D: rand_addr = 0
D->>D: current_state = IDLE
D->>D: transaction_queue.delete()
D->>T: 完成复位

task send_write_transaction

参数 方向 说明
addr input 写地址 [31:0]
data input 写数据 [63:0]
len input 突发长度 [7:0](0 表示单拍传输)

将写事务加入队列,并打印调试信息

function send_read_transaction

参数 方向 说明
addr input 读地址 [31:0]
len input 突发长度 [7:0]

发送读事务 创建读事务并返回模拟的读数据

function get_transaction_count

获取事务数量 返回当前事务队列中的事务数量 @return 事务数量(整型)

状态图

stateDiagram-v2
[*] --> 调用函数
调用函数 --> 获取队列大小
获取队列大小 --> 返回结果
返回结果 --> [*]

static function get_driver_count

静态方法:获取驱动实例数 返回已创建的驱动类实例总数(静态方法,无需实例化) @return 驱动实例数(整型)

📝 注意: 这是一个静态方法,可以通过类名直接调用:axi_driver::get_driver_count()

test_svdoc_features.sv

文件路径: /home/admin/.openclaw/workspace/chip-project/rtl/test_svdoc_features.sv

目录: /home/admin/.openclaw/workspace/chip-project/rtl/

模块列表

模块名 类型 端口数 参数数 概要
axi_bus_if interface 2 3 AXI4 接口定义
test_svdoc_features module 0 0 SvDoc 功能测试模块

类型定义

名称 类型 说明
byte_t Typedef Typedef: logic [7:0]
axi_state_e Enum Enum with 3 members: IDLE_STATE, ACTIVE_STATE, DONE_STATE
axi_transaction_t Struct Struct with 4 fields: addr, data, valid, last

axi_bus_if

AXI4 接口定义

包含写地址、写数据、写响应、读地址、读数据通道

端口定义:

信号名 方向 类型 位宽 描述
clk input - - 系统时钟
rst_n input - - 异步复位

参数定义:

参数 类型 默认值 说明
DATA_WIDTH parameter 64 数据宽度
ADDR_WIDTH parameter 32 地址宽度
ID_WIDTH parameter 4 ID 宽度

内部信号:

名称 类型 位宽 说明
aw_addr logic [ADDR_WIDTH-1:0]
aw_id logic [ID_WIDTH-1:0]
aw_len logic [7:0]
aw_size logic [2:0]
aw_burst logic [1:0]
aw_valid logic -
aw_ready logic -
w_data logic [DATA_WIDTH-1:0]
w_strb logic [DATA_WIDTH/8-1:0]
w_last logic -
w_valid logic -
w_ready logic -
b_id logic [ID_WIDTH-1:0]
b_resp logic [1:0]
b_valid logic -
b_ready logic -
ar_addr logic [ADDR_WIDTH-1:0]
ar_id logic [ID_WIDTH-1:0]
ar_len logic [7:0]
ar_size logic [2:0]
ar_burst logic [1:0]
ar_valid logic -
ar_ready logic -
r_data logic [DATA_WIDTH-1:0]
r_id logic [ID_WIDTH-1:0]
r_resp logic [1:0]
r_last logic -
r_valid logic -
r_ready logic -

test_svdoc_features

SvDoc 功能测试模块

本模块包含 function 和 task 定义,用于测试 SvDoc 解析

内部信号:

名称 类型 位宽 说明
clk logic -
rst_n logic -

axi_master_tb.v

文件路径: /home/admin/.openclaw/workspace/chip-project/tb/axi_master_tb.v

目录: /home/admin/.openclaw/workspace/chip-project/tb/

模块列表

模块名 类型 端口数 参数数 概要
axi_master_tb module 0 4 测试 AXI4 Master 接口的突发传输和地址对齐功能

axi_master_tb

测试 AXI4 Master 接口的突发传输和地址对齐功能

参数定义:

参数 类型 默认值 说明
CLK_PERIOD localparam 10
DATA_WIDTH localparam 64
ADDR_WIDTH localparam 32
ID_WIDTH localparam 4

内部信号:

名称 类型 位宽 说明
clk reg -
rst_n reg -
cfg_base_addr reg [ADDR_WIDTH-1:0]
cfg_en reg -
cfg_done wire -
aw_addr wire [ADDR_WIDTH-1:0]
aw_id wire [ID_WIDTH-1:0]
aw_len wire [7:0]
w_data wire [DATA_WIDTH-1:0]
w_strb wire [DATA_WIDTH/8-1:0]
w_last wire -
aw_valid wire -
aw_ready wire -
w_valid wire -
w_ready wire -
b_id wire [ID_WIDTH-1:0]
b_resp wire [1:0]
b_valid wire -
b_ready wire -

子模块实例化:

实例名 模块名
dut axi_master

📄 RTL 文件理解文档由 SvDoc 自动生成