在最近的一个项目中,流片后发现了一个bug。
设计是通过一个三十二位的数据线写一个数据位宽为108位的ram,写三次可以写满108位,这里地址位最低两位为11是无效的。
但是实际的片子出来后却是对一个ram地址最低二位为11的地址写全零后,所有这108位数据全为零,也就是说写了这个地址后影响到了前面写过的数据,看了代码,发现是由于没有考虑到数据最低位为11的情况造成的。
但是,为什么没有通过仿真提前查出这个问题呢?
我们的memory模块验证方式是写一个地址读一个地址,这样势必查不出这个问题,这也是提前没有预见的。
我想如果加入随机化就会发现这个问题:写的时候在所有地址中随机写,每个地址仅写一次,读的时候在已写过的这些地址中随机的选一个读,每个地址仅读一次。
我的教训是验证的时候我的验证思想实在是太水了,才会出现这么大的bug。谨记!
用户394057 2012-8-17 17:53
用户377235 2012-8-16 17:21