IP验证最终回归到时序级建模

假设验证一个FIFO模块。设计的RTL代码严格按照时钟周期工作,第10个时钟上升沿写入数据,第15个时钟上升沿读出数据。而参考模型如果用Python写,内部用队列结构模拟,可能第1秒push数据,第2秒pop数据。

问题来了:比较器该怎么判断结果对不对?

更麻烦的是,这个时间差还不固定。FIFO里数据量不同,延迟就不同。有时DUT第20周期输出,有时第25周期输出,而参考模型的输出时间也在飘。两边的时间基准完全不同步,比较器根本没法建立稳定的对应关系。

有人会说,不关心时序不就可以了,这样很多复杂乱序处理、延迟变化、突发流量等各种情况就验证不够完备。

所以IP验证走到最后,大家发现最靠谱的办法还是:参考模型和DUT用同一个激励源,按同样的时序运行。

这就意味着参考模型不能完全脱离硬件时序,它需要理解时钟周期、握手信号、ready/valid协议这些底层概念。虽然还是可以用SystemVerilog或者高级语言写,但必须是时序级参考模型(Cycle-Accurate Model)。

时序级参考模型长什么样?

go 复制代码
// 简化的FIFO参考模型示例
class fifo_reference_model;
  logic [7:0] queue[$];
  
  task run(input logic clk, wr_en, rd_en, 
           input logic [7:0] wr_data,
           output logic [7:0] rd_data);
    @(posedge clk);  // 和DUT同步到时钟边沿
    if (wr_en) queue.push_back(wr_data);
    if (rd_en && queue.size() > 0) 
      rd_data = queue.pop_front();
  endtask
endclass

注意那个@(posedge clk),这就是时序同步的关键。参考模型和DUT共享同一个时钟,在相同的时钟边沿执行操作,输出自然就能对齐。

当然,时序级参考模型牺牲了一些灵活性。它不能像纯粹的算法模型那样随意组织逻辑,必须考虑握手、流控、延迟这些硬件细节。但这是必要的代价,因为验证的本质就是要在真实的时序环境下检查设计行为。

这里有个微妙的平衡。参考模型要足够抽象,避免陷入RTL实现细节,否则就失去了独立性。但又要足够贴近硬件时序,才能和DUT的输出建立可靠的对应关系。太抽象对不上,太具体又失去了验证意义。

实际项目中,验证团队通常会分层建模:

  • 顶层用事务级模型(Transaction-Level Model)快速验证功能正确性
  • 底层用时序级模型精确比对每个周期的输出
  • 两者配合使用,既保证效率又保证准确性
相关推荐
数据安全科普王17 分钟前
打破中心枷锁:P2P网络如何用“去中心化”重构互联网通信
网络·去中心化·p2p
爱吃烤鸡翅的酸菜鱼32 分钟前
CANN ops-nn激活函数与池化算子深度解析
网络·开源·aigc
saber_andlibert2 小时前
TCMalloc底层实现
java·前端·网络
飞凌嵌入式3 小时前
用「EN 18031认证」通关欧盟,这张 “网络安全护照” 已就位
网络·安全·能源
Trouvaille ~3 小时前
TCP Socket编程实战(三):线程池优化与TCP编程最佳实践
linux·运维·服务器·网络·c++·网络协议·tcp/ip
JoySSLLian5 小时前
手把手教你安装免费SSL证书(附宝塔/Nginx/Apache配置教程)
网络·人工智能·网络协议·tcp/ip·nginx·apache·ssl
Zach_yuan5 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
猫头虎5 小时前
如何解决 OpenClaw “Pairing required” 报错:两种官方解决方案详解
网络·windows·网络协议·macos·智能路由器·pip·scipy
南檐巷上学5 小时前
基于FPGA的正弦信号发生器、滤波器的设计(DAC输出点数受限条件下的完整正弦波产生器)
fpga开发·数字信号处理·dsp·dds
charlotte102410246 小时前
高并发:关于在等待学校教务系统选课时的碎碎念
java·运维·网络