可编程逻辑
最近做项目遇到一个bug。
Bug的现象是这样的,假设我们跑一次test,结果正确为T,结果不正确为F。
那么如果连续跑多次test,开始几次的test结果都为T,从第N次开始,结果为F。
关键N不是一个固定的值。
考虑到单次test没有外部事件的干扰,N为一个随机值就让我感觉很像是因为时序出错的原因导致的。
这里的时序出错不是setup/hold violation,而是类似握手信号这样的时序关系。
后来检查出错部分相关的代码,发现果然是因为ready信号导致的时序错误。
ready信号会随机拉高,在某种case下便导致了时序错误。
再仔细想想,如果testbench写得完整一些,这个bug完全是可以避免的。
比如一个设计要发送一个TCP包,但是testbench只检查 TCP包的data部分,而不检查header部分。
那如果tcp checksum算错,testbench是发现不了的。
上板子测试才发现,去debug,花费的时间力气就不是一个量级的了。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !