专栏首页ICSOC.TECH当我们做后仿时我们究竟在仿些什么(三)

当我们做后仿时我们究竟在仿些什么(三)

最近又做了一些后仿debug的工作,有两点是之前两篇没有提到太多的,趁假期有点时间记录下来。标题也照旧,加个吧。

异步电路之间必须消除毛刺

之前提到过,数字电路后仿的一个主要目的就是动态验证异步电路时序。异步电路的时序是目前STA工具无法覆盖的。

例如异步复位的release是同步事件,其时序是可以靠STA保证的;但是reset是异步事件,它的时序只能靠设计来保证、动态仿真来检查。产生reset的逻辑可能来自多个时钟域,但是在送入异步复位电路的时候,还是需要在设计上做到最终是单独一个时钟域的触发器输出。这样才能保证异步复位信号本身无毛刺。

话说回来,现在的代码静态检查工具,已经能够很好的检查出类似的CDC问题了。不过工具虽然强大,但决定工具发挥作用大小的还是站在工具背后的人。

所以后仿成了最后一道关口。

遗憾的是,在上面这个例子中,后仿这个关口也并不是百分百能截住所有问题。如果后仿侥幸发现了类似的设计问题,真是应该去买张彩票、改行去捞鱼了。为什么捞鱼呢?因为整个设计流程肯定漏洞很多,说不定是一张上好的渔网。

X 态的问题

后仿中,难免会碰到X态的问题,而且波形工具还很贴心的用红色绘制出来,血淋淋的、吓你没商量。如果STA都干净了,很多时候X态还是异步电路造成的问题。

大家都知道,多bit信号跨时钟域的时候,除了用同步指示信号的方法外,常用的还是用异步FIFO。异步FIFO形成读数据的逻辑里,可以分为两部分。一部分是写数据,这部分是写时钟域的,是异步跨时钟域的。另一部分是读地址,这部分是读时钟域的,是同步的。大部分情况下,读数据中呈现的X态,是因为写数据的异步造成的。而异步FIFO的设计,是需要保证写数据稳定足够的时间(多个读时钟周期),以便读时钟来稳定采样的。

所以在这样的情形中,读数据局部出现了X态(时序违例),是不应该影响正常功能的。

可以看出,芯片设计是一个系统工程,不但设计、验证和流程是紧密结合在一起的,而且还有许多设计者很少考虑到的因素也参与其中,比如进度要求,比如芯片运营(chip operation)等等,都会在我们芯片设计的整个过程中产生影响。最近这个芯片项目,做得真是很辛苦,也感触很多,希望能有时间做深入的思考和总结,分享给各位读者。

References

[1] 当我们做后仿时我们究竟在仿些什么 [2] 当我们做后仿时我们究竟在仿些什么(补充)

本文分享自微信公众号 - icsoc(ic-soc),作者:韩京飞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 增强tclsh的行编辑功能

    IC 设计这行的很多 EDA 工具都内嵌了tcl 解释器,所以日常工作免不了和 tcl 语言打打交道。如果想写两句 tcl 代码做个测试,当然可以新建一个脚本文...

    icsoc
  • 当我们做后仿时我们究竟在仿些什么(补充)

    自从上次关于后仿的文章发布以后,又陆续收集到了一些关于后仿的其它小技巧。这次整理出来作为前文的补充,希望对大家有所帮助。文中提到的仿真器默认是VCS.

    icsoc
  • 读书笔记 | Design Rot - 2

    设计边界这个概念,应该是被广泛认知和接受的,毕竟大家都是从module designer开始的。一个设计模块是有边界的,简单来说,一个模块的输入和输出应该都是预...

    icsoc
  • 分布式系统关注点(19)——深入浅出「异步」

    Z哥在前面的三篇文章里和你一起聊了「高性能」主题下与「缓存」相关的内容。这次和你来聊聊提高性能的另一个大招——「异步」。

    Zachary_ZF
  • c#异步编程

    *委托类型的BeginInvoke(<输入和输出变量>,AsyncCallback callback,object asyncState)方法 

    wfaceboss
  • 聊聊“异步”

    在我们编程的时候,经常会遇到一个概念——异步,诸如异步通信,异步线程,异步代码,异步调用,异步编程等等,那么

    半吊子全栈工匠
  • C#异步调用的方法

    最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下...

    逸鹏
  • 基于注解@Async的SpringBoot异步调用及使用场景

    首先要在springboot项目的启动上添加@EnableAsync开启异步监控,自动扫描。没有这个主角儿一切都是扯淡。

    用户1956326
  • 同步与异步 Python 有何不同?

    你是否听人们说过,异步 Python 代码比“普通(或同步)Python 代码更快?果真是那样吗?

    Python猫
  • 如何正确运用异步编程技术

    4.1、既然异步可以大大提供应用程序的响应能力?那么ASP.NET MVC 如果全部用异步控制器(Async Controller),会有什么效果?会成为高吞吐...

    跟着阿笨一起玩NET

扫码关注云+社区

领取腾讯云代金券