新增功能实现:
- 输入捕获:基于实际时间戳计算
- 死区时间:使用传输延迟建模
- 从模式控制:事件驱动状态机
验证导向设计:
- 添加占空比数学验证
- 参数关系静态检查
- 时序约束断言
关键优势:
- 仿真效率提升:避免逐周期计算
- 早期错误检测:通过参数断言在配置阶段发现问题
- 物理时间感知:支持真实时间参数验证
- DUT实现解耦:不依赖特定实现方式
使用建议:
- 配合UVM的analysis port使用:
1
2
3
4
5
6
7// 在monitor中
always @(posedge PCLK) begin
if (reg_write) begin
ref_model.reg_write(addr, data);
analysis_port.write(ref_model.get_status());
end
} - 添加覆盖率收集:
1
2
3
4
5
6
7
8covergroup timer_cg @(reg_updated);
option.per_instance = 1;
CR1_EN: coverpoint cfg.CR1[0];
ARR_VS_CCR: coverpoint cfg.ARR - cfg.CCR1 {
bins zero = {0};
bins positive = {[1:$]};
}
endgroup
这种建模方式更符合验证需求,重点关注功能正确性而非实现细节,同时保持与DUT的时序独立性。
-->根据验证模型的设计原则,构建一个基于事务级建模的参考模型:
- 采用事件驱动而非时钟驱动
- 使用数学计算代替时序逻辑
- 增加抽象层次
- 强化断言验证
1 |
|
改进说明:
非时序建模方法:
- 使用
$realtime
代替时钟计数 - 基于时间差计算当前计数值
- 事件驱动代替时钟驱动
- 使用
抽象层次提升:
graph TD A[寄存器写入] -->|触发事件| B[计算时间差] B --> C[更新当前计数] C -->|事件触发| D[更新PWM状态] D --> E[生成断言检查]
新增功能实现:
- 输入捕获:基于实际时间戳计算
- 死区时间:使用传输延迟建模
- 从模式控制:事件驱动状态机
验证导向设计:
- 添加占空比数学验证
- 参数关系静态检查
- 时序约束断言
关键优势:
- 仿真效率提升:避免逐周期计算
- 早期错误检测:通过参数断言在配置阶段发现问题
- 物理时间感知:支持真实时间参数验证
- DUT实现解耦:不依赖特定实现方式
使用建议:
- 配合UVM的analysis port使用:
1
2
3
4
5
6
7// 在monitor中
always @(posedge PCLK) begin
if (reg_write) begin
ref_model.reg_write(addr, data);
analysis_port.write(ref_model.get_status());
end
} - 添加覆盖率收集:
1
2
3
4
5
6
7
8covergroup timer_cg @(reg_updated);
option.per_instance = 1;
CR1_EN: coverpoint cfg.CR1[0];
ARR_VS_CCR: coverpoint cfg.ARR - cfg.CCR1 {
bins zero = {0};
bins positive = {[1:$]};
}
endgroup
这种建模方式更符合验证需求,重点关注功能正确性而非实现细节,同时保持与DUT的时序独立性。
本文作者:
ICXNM-ZLin
本文链接: https://talent-tudou.github.io/2025/02/23/外设/timer的reference-model/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
本文链接: https://talent-tudou.github.io/2025/02/23/外设/timer的reference-model/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!