做寄存器验证的时候,很多团队把精力放在抓读写不一致、复位值错误这些硬核bug上。这当然重要,芯片流片出去如果连基本的读写都不对,那就是灾难性的。
但真正让人头疼的,往往不是这些会直接导致功能失效的错误。更要命的是那些逻辑上没问题、功能上能跑,但用起来让人想骂街的设计缺陷。
举个实际案例。某芯片的中断状态位更新有500个时钟周期的延迟,还需要等待各种状态。仿真跑testcase时这个延迟完全符合时序要求,RTL代码也没有任何逻辑错误。但软件工程师在调试中断处理函数时,发现读到的状态总是”旧的”,需要加一堆等待和轮询,整个中断响应时间被拖得很长。