# Uart_tx 验证需求分析与验证规划

## 1. 验证需求分析

### 1.1 设计概述
Uart_tx 是一个符合标准 UART 协议的串行发送器模块，主要功能包括：
- 将 8 位并行数据转换为串行数据输出
- 内置 16x8-bit 同步 FIFO 缓冲器
- 支持高度可配置的数据帧格式（数据位宽、校验位、停止位）
- 提供状态指示信号（busy、FIFO 满/空标志）

### 1.2 验证目标

#### 1.2.1 功能验证目标
1. **FIFO 功能验证**：
   - FIFO 写入、读取操作的正确性
   - FIFO 空/满状态标志的正确性
   - FIFO 计数器的准确性
   - 并发读写操作的正确性

2. **串行传输验证**：
   - 起始位、数据位、校验位、停止位的正确生成
   - 数据位顺序（LSB first）的正确性
   - 波特率时序（每位 16 个时钟周期）的准确性

3. **可配置性验证**：
   - LCR 寄存器配置功能：
     - 数据位宽配置（5/6/7/8 位）
     - 停止位配置（1/1.5/2 位）
     - 奇偶校验配置（无/奇/偶/固定 1/固定 0）
   - 动态配置切换的正确性

4. **控制信号验证**：
   - enable 信号的暂停/恢复功能
   - busy 信号的指示准确性
   - 复位功能的完整性

5. **状态机验证**：
   - 状态转换逻辑的正确性
   - 各状态下 TXD 输出的正确性
   - 状态机与 FIFO 交互的正确性

#### 1.2.2 输入输出验证
**输入信号**：
- PCLK：系统时钟
- PRESETn：异步复位（低电平有效）
- PWDATA[7:0]：并行输入数据
- tx_fifo_push：FIFO 写使能
- LCR[7:0]：线控制寄存器
- enable：发送使能

**输出信号**：
- TXD：串行数据输出
- busy：发送忙标志
- tx_fifo_empty：FIFO 空标志
- tx_fifo_full：FIFO 满标志
- tx_fifo_count[4:0]：FIFO 数据计数

### 1.3 风险点识别

#### 1.3.1 边界条件风险
1. **FIFO 边界**：
   - FIFO 满时继续写入（可能数据丢失）
   - FIFO 空时尝试读取（可能指针错误）
   - FIFO 临界状态（count=0 或 count=16）

2. **数据位宽边界**：
   - 5 位数据时，高位的处理
   - 各种数据位宽下的校验位计算

3. **时序边界**：
   - bit_counter 边界值（0-15）
   - 状态转换边界条件

#### 1.3.2 并发操作风险
1. **FIFO 同时读写**：
   - push 和 pop 同时有效时的行为
   - 指针回绕处理

2. **配置动态切换**：
   - 发送过程中 LCR 改变的影响
   - 新配置生效时机

#### 1.3.3 控制信号风险
1. **enable 信号**：
   - 发送过程中 enable 拉低的影响
   - enable 恢复后的续传正确性
   - bit_counter 暂停/恢复的准确性

2. **复位时序**：
   - 发送过程中复位的处理
   - 异步复位的可靠性
   - 复位后状态的初始化

#### 1.3.4 协议正确性风险
1. **校验位计算**：
   - 不同校验模式的正确性
   - 未使用数据位对校验计算的影响

2. **停止位生成**：
   - 1.5 停止位的实现正确性
   - 停止位与下一帧起始位的间隔

3. **数据完整性**：
   - 从 FIFO 取出到发送完成的数据一致性
   - tx_buffer 的锁存时机

## 2. 验证策略与计划

### 2.1 验证方法
采用分层渐进式验证方法：
1. **单元级验证**：独立验证 FIFO 子模块和状态机
2. **功能级验证**：验证各配置组合下的发送功能
3. **集成验证**：验证完整的数据流和各种场景
4. **压力测试**：连续发送、边界条件、异常场景

### 2.2 验证计划

#### 阶段 1：FIFO 子模块验证
**测试点**：
- 基本读写操作
- 空/满标志正确性
- 计数器准确性
- 指针回绕处理
- 同时读写操作
- 边界条件（满时写、空时读）

#### 阶段 2：基础发送功能验证
**测试点**：
- 标准 8-N-1 格式发送
- 起始位、数据位、停止位时序
- busy 信号正确性
- FIFO 与状态机交互
- 单字节和多字节发送

#### 阶段 3：可配置性全面验证
**测试点**：
- 数据位宽配置（5/6/7/8 位）
- 停止位配置（1/1.5/2 位）
- 校验位配置（无/奇/偶/固定）
- 所有合法配置组合
- LCR 动态切换

#### 阶段 4：控制信号验证
**测试点**：
- enable 暂停/恢复功能
- 各状态下的 enable 控制
- 异步复位功能
- 发送过程中复位
- 复位后恢复正常工作

#### 阶段 5：边界与异常场景验证
**测试点**：
- FIFO 满时连续写入
- FIFO 空到非空的转换
- 连续发送不间断
- 快速配置切换
- 极限时序场景

#### 阶段 6：协议一致性验证
**测试点**：
- 校验位计算准确性
- 各数据位宽下的校验
- 波特率时序精度
- 帧间间隔正确性
- 完整协议符合性

### 2.3 覆盖率目标
- **代码行覆盖率**：≥ 90%
- **功能覆盖率**：100%（所有配置组合）
- **状态机覆盖率**：100%（所有状态和转换）
- **边界值覆盖率**：100%（所有边界条件）

### 2.4 验证环境架构
```
┌─────────────────────────────────────────────────┐
│          Verification Environment               │
├─────────────────────────────────────────────────┤
│  Test Cases (pytest)                            │
│  ├─ FIFO Tests                                  │
│  ├─ Basic Transmission Tests                    │
│  ├─ Configuration Tests                         │
│  ├─ Control Signal Tests                        │
│  ├─ Boundary Tests                              │
│  └─ Protocol Compliance Tests                   │
├─────────────────────────────────────────────────┤
│  Verification APIs                              │
│  ├─ FIFO Push/Pop APIs                          │
│  ├─ Configuration APIs                          │
│  ├─ Transmission Control APIs                   │
│  └─ Monitor/Check APIs                          │
├─────────────────────────────────────────────────┤
│  DUT Wrapper & Bundles                          │
│  ├─ Clock/Reset Interface                       │
│  ├─ FIFO Interface                              │
│  ├─ Configuration Interface                     │
│  └─ Serial Output Interface                     │
├─────────────────────────────────────────────────┤
│  DUT (Uart_tx)                                  │
└─────────────────────────────────────────────────┘
```

### 2.5 验证成功标准
1. 所有测试用例通过
2. 代码行覆盖率达到目标（≥90%）
3. 功能覆盖率 100%
4. 所有已知边界条件测试通过
5. 协议符合性验证通过
6. 如发现设计缺陷，需详细记录和分析

### 2.6 潜在 Bug 假设
基于设计文档和风险分析，以下场景可能存在设计缺陷：
1. FIFO 满时写入的处理逻辑
2. FIFO 空到非空转换时的 pop 时机
3. enable 信号控制的 bit_counter 暂停/恢复逻辑
4. 5/6/7 位数据时高位清零的完整性
5. LCR 动态切换时的生效时机
6. 异步复位时的状态清理完整性
7. 1.5 停止位的实现细节
8. 同时读写 FIFO 时的指针更新

**验证原则**：遇到测试失败时，首先分析是否为设计缺陷，而非测试代码问题。需要深入源码分析根因，给出详细的 bug 报告和修复建议。

## 3. 验证执行流程

### 3.1 验证工具链
- **仿真框架**：UT_cocotb（基于 cocotb）
- **测试框架**：pytest
- **覆盖率工具**：内置覆盖率收集
- **编程语言**：Python

### 3.2 验证步骤
1. 理解 DUT 功能和接口
2. 定义功能点和检查点
3. 实现 DUT 封装和 fixtures
4. 实现覆盖率模型
5. 开发基础 API
6. 开发测试用例
7. 执行测试并分析结果
8. Bug 分析和记录
9. 覆盖率分析和提升
10. 验证总结和报告

### 3.3 交付物
- 验证规划文档（本文档）
- 功能点和检查点定义文档
- DUT 封装代码
- 验证环境代码（fixtures、APIs）
- 完整测试用例集
- Bug 分析报告
- 覆盖率报告
- 验证总结报告

## 4. 风险与缓解措施

### 4.1 验证风险
1. **复杂度风险**：配置组合众多，测试用例可能遗漏
   - 缓解：系统化的功能覆盖率模型
   
2. **时序风险**：异步复位和时钟关系复杂
   - 缓解：仔细设计时序场景，充分测试

3. **理解偏差**：对设计意图理解不准确
   - 缓解：详细分析设计文档，必要时与设计者确认

### 4.2 进度风险
- 采用分阶段验证，确保每个阶段完成后再进入下一阶段
- 使用 Check 工具持续验证进度
- 灵活调整验证计划

## 5. 总结

本验证规划覆盖了 Uart_tx 模块的所有关键功能点、边界条件和潜在风险点。通过系统化的分层验证方法，结合功能覆盖率和代码覆盖率分析，将全面验证设计的正确性。验证过程中会特别关注 FIFO 操作、配置动态切换、控制信号时序等高风险区域，发现设计缺陷并进行详细分析，确保 Uart_tx 模块的高质量交付。
