加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

对带有下降沿触发的电路进行综合

(2013-05-31 22:19:32)
分类: 数字后端
如果系统中只存在一个时钟,所有的时序都用的是时钟的下降沿,这样按照正常的综合就可以。但是如果有的用的是时钟下降沿,有的用时钟上升沿,就是两种沿混着用,这种情况下需要注意什么问题呢?
一、避免出现
昨天后端部门的Lint检查和综合检查都指出了这个问题,要求把设计中的所有时钟沿都统一为上升沿抽样。这样做的目的,据说是为了提高scan chain的覆盖率。因为没有经验,想在这里请教一下大家:
- 混用上升下降沿会对scan chain造成什么样的影响,能否具体解释一下;
- 如果代码在逻辑上必须用下降沿采样,怎样才能满足后端的要求(用上升沿采样),有无变通方法;
我的代码
我在上面提到了上升沿和下降沿混用,其实是表述不正确。不是混用,而是在代码中有些寄存器用posedge,有些则用negedge,对同一个寄存器同时使用两个边沿的情况没有。我的代码是这样的情况,比如
always @ (posedge i_clk or negedge i_rst_n)   begin
   .... // reg 1
end
always @ (negedge i_clk or negedge i_rst_n)   begin
   .... // reg 2
end
对于这样的情况,后端部门也建议尽量避免,也就是说所有寄存器全都采用上升沿,要怎么处理呢?
用下降沿采样的话,dft_drc会认为该寄存器有violation。因此不把他放到chain里边,所以覆盖率会降低

二、必须出现下降沿的情况处理
   如果有些path确实用到半周期, create_clock倒是不需要改。
   因为根据clock传播的规律, 有些path自然会用下降沿去采样下一个周期,也就是半周期,
比如memory出来的一些path,
create_clock -name clk -period 40 -waveform { 0 20 }  ; #缺省是上升沿半周期,
create_clock -name clk_b  -period 40 -waveform { 20 40} ; #已经是下降沿 开始的,
至于clock 有的path是上升沿,有的是下降沿,这个不是通过create_clock就控制了的,
timing path自己自然知道了,只要仿真能过就行了

下降沿综合分析路径的起点问题:
下降沿触发是单独用一个always来处理的。路径分析起点从input port开始,set_input_delay默认是上升沿开始的,所以每次总是从上升沿开始。现在只要在set_input_delay命令中加上-clock_fall,路径分析就可以从下降沿开始了,终点也是下降沿。这样分析路径会有一个周期。我用了一个很简单的代码,就一个时钟,采用下降沿触发。现在只要在set_input_delay命令中加上-clock_fall,DC综合后路径分析就可以从下降沿开始了,终点也是下降沿,这样分析路径是一个周期。如果没有加上-clock_fall,分析路径是从时钟上升沿到时钟下降沿,半个周期了。

至于半周期有很大的violation,你就要考虑了,是不是加一拍,或者改成普通1周期path,
否则是有可能没法过的,

还有个-phase 选项吧,create_clock ,还可以控制占空比,什么时候什么沿,
你man下看看

三、必须出现的情况处理      
    为了灵活在.v里用了下降沿触发,但是有时候在综合的时候路径上会出现冲突。
设计要求的input delay的max和min分别是时钟的55%和45%,这样综合后理论上都是无法满足的。
但是出现冲突的路径要在前一个上升沿触发以后的三个时钟周期后才需要到达需要侦测的下降沿触发的寄存器,看了一些帖子,说使用set_false_path在这些不可能发生的半个周期的路径上。
解决方法:
set_multicycle_path 3 -setup -from -to
set_multicycle_path 2 -hold -from -to

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有