最近又做了一些后仿debug的工作,有两点是之前两篇没有提到太多的,趁假期有点时间记录下来。标题也照旧,加个
三
吧。
之前提到过,数字电路后仿的一个主要目的就是动态验证异步电路时序。异步电路的时序是目前STA
工具无法覆盖的。
例如异步复位的release
是同步事件,其时序是可以靠STA
保证的;但是reset
是异步事件,它的时序只能靠设计来保证、动态仿真来检查。产生reset
的逻辑可能来自多个时钟域,但是在送入异步复位电路的时候,还是需要在设计上做到最终是单独一个时钟域的触发器输出。这样才能保证异步复位信号本身无毛刺。
话说回来,现在的代码静态检查工具,已经能够很好的检查出类似的CDC
问题了。不过工具虽然强大,但决定工具发挥作用大小的还是站在工具背后的人。
所以后仿成了最后一道关口。
遗憾的是,在上面这个例子中,后仿这个关口也并不是百分百能截住所有问题。如果后仿侥幸发现了类似的设计问题,真是应该去买张彩 票、改行去捞鱼了。为什么捞鱼呢?因为整个设计流程肯定漏洞很多,说不定是一张上好的渔网。
后仿中,难免会碰到X
态的问题,而且波形工具还很贴心的用红色绘制出来,血淋淋的、吓你没商量。如果STA
都干净了,很多时候X
态还是异步电路造成的问题。
大家都知道,多bit信号跨时钟域的时候,除了用同步指示信号的方法外,常用的还是用异步FIFO。异步FIFO形成读数据的逻辑里,可以分为两部分。一部分是写数据,这部分是写时钟域的,是异步跨时钟域的。另一部分是读地址,这部分是读时钟域的,是同步的。大部分情况下,读数据中呈现的X
态,是因为写数据的异步造成的。而异步FIFO的设计,是需要保证写数据稳定足够的时间(多个读时钟周期),以便读时钟来稳定采样的。
所以在这样的情形中,读数据局部出现了X
态(时序违例),是不应该影响正常功能的。