首先写在最前面,关于我的个人博客只是一个学习记录,方便我在需要回顾时可以更快的找出这些知识点来回顾,而不是单纯的为了记录而记录。各位共勉!
问题描述
- 动态、静态的功能验证和时序验证明辨。
- 建立时间和保持时间的明确定义以及如何去修正这些violation。
- 跨时钟域后对亚稳态的处理方法。
分析与解答
- 四种验证或分析的辨析
动态功能验证 | 最为常见的验证,输入激励根据输出进行验证功能是否正确 |
---|---|
动态时序验证 | 加入综合后的sdc文件来进行验证,也就是所谓的后仿,一般只验证主要功能 |
静态功能验证 | 前提是做完动态验证,也就是形式验证。 |
静态时序验证 | 所谓的STA,根据foundry厂的工艺库进行setup和hold的仿真,能仿真全部路径,速度快。 |
- 建立时间与保持时间的理解
这个概念实际上比较基础,不能说简单,很多人对其的概念并不到位,会导致后续一系列的概念出问题,我找到比较合适的解释是在菜鸟教程,贴出网址:setup_hold_time
主要说一下建立时间和保持时间的修的方法,这里不是说在版图工程师那边根据布局布线进行的预留进行修,而是说单纯我们设计端的问题,总结就三种方法,常见的两种先说一下,第一种,加BUF,这个乍看不太理解,加buf岂不是增加延迟了,而实际上BUF的延迟在低于几个G的时钟下的延迟是非常小的,但由于BUF阻断,导致了将线延迟拆解开来,再根据单位长度的寄生电容和电阻的数量不变的特性,这样的打断下,隔断下的寄生电容和电阻是相乘之后再乘一个系数来计算延迟的。因此打断可以得到更小的延迟。这样就留出了时间给setup时间。第二种,使用驱动能力更强的cell,根据器件库来选择,这个事一般版图工程师也会采用这个办法来修。这两种办法均是属于面积换速度的方法。这个就突出一个鱼和熊掌不可兼得。第三种方法,useful skew,简单来讲就是将我们capture register上时钟路径后延,给本来不满足的setup腾时间。总体来讲设计端常见的就这三种方法,第三种一般用不到,第一种和第二种非常常见,务必熟练掌握。 - 跨时钟域后对亚稳态的处理方法。
三种方法,第一种,使用异步FIFO,并且用格雷码进行编码。第二种,根据数据的方向,如果是慢时钟往快时钟传,那么打两拍即可。第三种,快传慢,那么需要一个握手信号来确认,让握手信号保持一段时间,确保慢时钟正确收到数据信号。
每日总结
- 最近的时间给的比较紧张,总之就是又到了忙的不可开交的时候了,尽量保持每日锻炼,每日学习记录吧。
- 怕死,先睡了,晚安自己。