TB 文件理解文档¶
由 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 | 配置接口 |
使用示例
📝 注意: 模块支持写和读事务,但按顺序处理。写事务优先级高于读事务。
⚠️ 警告: 确保突发长度不超过配置的 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 功能测试模块 |
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 |
📄 TB 文件理解文档由 SvDoc 自动生成