# ALU754 验证需求与验证计划

## 1. 验证目标

ALU754 是一个 IEEE 754 单精度浮点数运算单元，支持加法、减法、乘法、除法和比较操作，并集成了溢出和下溢处理。

### 1.1 功能验证目标
- 验证加法、减法、乘法、除法和比较操作的正确性
- 验证溢出(overflow)和下溢(underflow)标志位的正确性
- 验证比较操作的输出(gt, lt, eq)的正确性
- 验证特殊值处理：正负无穷、NaN、零、负零等

### 1.2 输入输出定义
- 输入：
  - `a[31:0]`: 32位IEEE 754单精度浮点数A
  - `b[31:0]`: 32位IEEE 754单精度浮点数B
  - `op[2:0]`: 3位操作码，定义如下：
    - `3'b000` (ADD): 加法
    - `3'b001` (MUL): 乘法
    - `3'b010` (DIV): 除法
    - `3'b011` (CMP): 比较
- 输出：
  - `result[31:0]`: 运算结果
  - `overflow`: 溢出标志
  - `underflow`: 下溢标志
  - `gt`: 比较结果A>B
  - `lt`: 比较结果A<B
  - `eq`: 比较结果A==B

## 2. 风险点分析

### 2.1 IEEE 754 标准符合性风险
- 特殊值处理不规范：无穷、NaN、零/负零等
- 溢出/下溢条件判断可能不完整
- 舍入模式可能未正确实现

### 2.2 模块内部风险
- **加法模块(`ieee_add.v`)**：
  - 指数对齐和尾数移位可能引入精度损失
  - 正负数加减法处理逻辑复杂，可能有边界情况未覆盖
  - 规约化/非规约化数转换可能有误
- **乘法模块(`ieee_mul.v`)**：
  - 尾数乘法后规约化处理可能不准确
  - 指数计算可能因溢出/下溢判断边界错误
- **除法模块(`ieee_div.v`)**：
  - 除法算法实现可能有精度问题
  - 被除数为零时的处理
  - 指数计算和移位操作可能有误
- **比较模块(`ieee_comp.v`)**：
  - NaN比较可能不符合IEEE标准（NaN与任何数比较都应返回false）
  - 正负零比较可能有误

### 2.3 ALU顶层集成风险
- 不同操作间的切换可能有状态残留
- 操作码解码可能不完整或错误
- 比较操作时`result`输出为0的处理

## 3. 验证计划

### 3.1 验证策略
采用基于约束的随机验证方法，结合定向测试用例验证边界条件和特殊值处理。

### 3.2 测试用例设计

#### 3.2.1 基础功能测试
- **加法测试**：验证基本加法运算，包括正数+正数、正数+负数、负数+负数
- **减法测试**：验证减法运算（通过a+(-b)实现）
- **乘法测试**：验证基本乘法运算
- **除法测试**：验证基本除法运算
- **比较测试**：验证A>B, A<B, A==B的正确性

#### 3.2.2 特殊值处理测试
- **零值测试**：0 + x, 0 * x, x/0, 0/x, 0==0, 0==-0 等
- **无穷值测试**：∞ + x, ∞ * x, ∞/∞, x/0 等
- **NaN值测试**：NaN + x, NaN * x, NaN == NaN 等 (比较结果应为false)
- **极大/极小值测试**：接近±3.4e38 的值运算

#### 3.2.3 边界条件测试
- **溢出测试**：大数相加/相乘导致溢出
- **下溢测试**：小数相除导致下溢
- **规约化/非规约化转换测试**：接近2^-126的值运算
- **精度测试**：极小差值比较，如1.0 vs 1.0+ε

#### 3.2.4 交叉操作测试
- 验证不同操作之间的切换是否会引入错误状态

### 3.3 验证环境
- 使用Python编写测试用例，与Verilog DUT进行交互
- 实现黄金模型(参考模型)用于结果比对
- 集成覆盖率收集机制

### 3.4 验证流程
1. 编写基础功能测试用例
2. 开发黄金模型(参考模型)
3. 实现随机测试生成器
4. 执行定向测试覆盖特殊值和边界条件
5. 分析测试结果，记录发现的bug
6. 完善测试用例以提高覆盖率

## 4. 预期结果
- 所有基础功能测试通过
- 特殊值和边界条件得到正确处理
- 发现并记录所有发现的bug
- 实现高代码覆盖率