0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

时序违例的修正与时序优化的思考方向

电子工程师 来源:未知 作者:工程师李察 2018-09-15 08:23 次阅读

时序逻辑电路示意图如下。前后两级寄存器之间有一个组合逻辑运算电路。

时序违例的修正与时序优化的思考方向

假设寄存器的建立时间要求为tsetup, 保持时间要求为thold, 输出延时为tcq(这些参数只要工艺库或者器件确定了,就是确定的);组合逻辑电路的运算延时为tlogic; 两级寄存器之间的clk线路延时为tclk_delay;clk的随机抖动为tjitter;tcycle为时钟周期。故电路必须满足如下建立时间,保持时间要求:

tsetup_slack=tcycle-(tcq+tlogic) -tsetup+tclk_delay-tjitter>0

thold_slack=tcq+tlogic-thold-tclk_delay-tjitter>0

当tsetup_slack要求不满足时,我们可以选择增大tcycle。当然这就使得电路的整体时钟频率下降,从而速度下降。

从另一个角度考虑,我们可以通过减少tlogic来使得电路的建立时间裕量满足要求。 达到这个目的,只有两个办法:

第一是优化,简化组合逻辑电路,使得电路的延时下降。如果是ASIC设计,我们可以结合卡诺图,布尔逻辑等式代换,狄摩根定律等去对逻辑电路尽量做到优化。如果是FPGA设计,我们可以结合FPGA器件的底层单元(例如查找表(LUT))的基本逻辑功能去做逻辑优化。

例如,在做ASIC的时候,要实现如下逻辑功能:

输入 输出
A C D B
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0

经过卡诺图化简得到布尔表达式如下:

B=C’D+A’D+ACD’

还可以进一步化简

B=C’D+A’D+ACD’=(A’+C’)D+ACD’=(AC)’D+ACD’=(AC)^D

最后发现只要一个与门,后面跟一个异或门就可以实现这个逻辑。

(1)所以我们在写verilog的时候如果用门级电路去描述这个逻辑电路时:

assign B = (A&D)^D;

或者用结构化的方式去描述时:

and(AC,A,C);

xor(B,AC,D);

其综合对应出来的电路便可能是最简单的,当然这跟综合库有关。

(2)但是如果我们用行为级的方式去描述这个逻辑时,例如如下。

always @( * )

if( {A,C,D} == 3b001 || {A,C,D} == 3b011 || {A,C,D}==101 ||{A,C,D} == 3b110)

B = 1b1;

else

B = 0;

那么其综合得到的电路就是不可控的了,虽然EDA工具会对其做优化。因此这样综合出来的电路如果不是最简的,那么其延时就大。

所以在描述电路的时候,如果时序要求很高,最好要考虑逻辑化简和器件适应。

第二种方式便是利用流水线技术,使得两级寄存器之间组合逻辑电路的运算量减少,从而使得tlogic减少。

例如对于一个组合逻辑电路,其功能是实现8bit数的全加器。我们可以将其划分成两个4bit数的全加器。如下图,原本是要实现两个8bit数A[7:0],B[7:0],外加一个进位位c_in相加的,如下。

assign{c_out,sum[7:0]} =A[7:0] + B[7:0] +c_in ;

现在变成了前面一个全加器实现

assign {c_out1,sum1[3:0]} = A[3:0] + B[3:0] + c_in ;

后面一个全加器实现

assign{c_out,sum2[3:0]} = A[7:4] + B[7:4] + c_out1 ;

最后再将sum1,sum2合并得到sum,如下。

assign sum = {sum2,sum1};

时序违例的修正与时序优化的思考方向

第一个全加器算出{c_out1,sum1[3:0]} = A[3:0] + B[3:0] + c_in 之后,在时钟有效沿到来时,将c_out1,sum1[3:0],A[7:4],B[7:4] 送到中间一级寄存器暂存;然后第二个电路做{c_out,sum2[3:0]} = A[7:4] + B[7:4] + c_out1 运算,并将结果sum1,sum2合并得到sum。这样一来每两级寄存器之间的全加器变成了4bit的全加器,电路延时肯定得到降低了。从而tlogic降低。

当然还可以进一步优化,使得流水级数更多。一般来说保持时间不会出现违例情况,因为寄存器的输出延时tcq,一般要大于thold。如果出现违例,从式子

thold_slack=tcq+tlogic-thold-tclk_delay-tjitter>0

我们可以考虑适当增加tlogic,或者后端布局布线时去减少tclk_delay。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 逻辑电路
    +关注

    关注

    13

    文章

    468

    浏览量

    42204
  • 寄存器
    +关注

    关注

    30

    文章

    5027

    浏览量

    117711
  • 时序
    +关注

    关注

    5

    文章

    356

    浏览量

    36955

原文标题:时序违例的修正与时序优化的思考方向

文章出处:【微信号:LF-FPGA,微信公众号:小鱼FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    优化高速接口的时序裕量

    本文将对源同步定时如何优化高速接口时序裕量进行讨论。时序预算是对系统正常工作所需时序参数或时序要求的计算。
    发表于 03-20 10:46 2457次阅读
    <b class='flag-5'>优化</b>高速接口的<b class='flag-5'>时序</b>裕量

    静态时序的分析原理及详细过程

    静态时序分析是检查IC系统时序是否满足要求的主要手段。以往时序的验证依赖于仿真,采用仿真的方法,覆盖率跟所施加的激励有关,有些时序违例会被忽
    的头像 发表于 11-25 11:03 9044次阅读
    静态<b class='flag-5'>时序</b>的分析原理及详细过程

    UltraFast设计方法时序收敛快捷参考指南

    资源利用率、逻辑层次和时序约束。 2时序基线设定:在每个实现步骤后检查并解决时序违例,从而帮助布线后收敛时序。 3
    的头像 发表于 11-05 15:10 4658次阅读
    UltraFast设计方法<b class='flag-5'>时序</b>收敛快捷参考指南

    FPGA的时序优化高级研修班

    FPGA的时序优化高级研修班通知通过设立四大专题,帮助工程师更加深入理解FPGA时序,并掌握时序约束和优化的方法。1.FPGA静态
    发表于 03-27 15:20

    vivado:时序分析与约束优化

    能够有一些时序问题,我们再通过时序分析的方法对它进行优化。我们这里把原本的100M时钟改成了200M时钟,具体步骤如下: 一:更改时钟之后进行综合,并打开timing analysis 二:通过
    发表于 08-22 11:45

    静态时序优化策略有哪些?

    变则通,通则久。事物都有其运行的规律,把握好规律,就能更好的实现人的目的。在数字后端设计中,时序优化一直是关键问题,尤其追求高频高性能的设计中,时许问题常常贯穿始终。大大小小二十几个项目模块后端工作
    发表于 12-10 07:37

    出现时序违例的原因及解决办法

      如果出现了时序违例,我们会关注两点:  为什么会出现时序违例?  如何解决?  首先我们要搞清楚时序是在哪个阶段
    发表于 01-08 17:10

    后端时序修正基本思路

    后端时序修正基本思路,后端对时序的影响从0.18开始,在整体影响中的比重也在随着工艺的变化而变得敏感。
    发表于 10-26 09:28 2727次阅读
    后端<b class='flag-5'>时序</b><b class='flag-5'>修正</b>基本思路

    基于FPGA时序优化设计

    现有的工具和技术可帮助您有效地实现时序性能目标。当您的FPGA 设计无法满足时序性能目标时,其原因可能并不明显。解决方案不仅取决于FPGA 实现工具为满足时序要求而优化设计的能力,还取
    发表于 11-18 04:32 3018次阅读

    时序约束的步骤分析

    FPGA中的时序问题是一个比较重要的问题,时序违例,尤其喜欢在资源利用率较高、时钟频率较高或者是位宽较宽的情况下出现。建立时间和保持时间是FPGA时序约束中两个最基本的概念,同样在芯片
    的头像 发表于 12-23 07:01 1931次阅读
    <b class='flag-5'>时序</b>约束的步骤分析

    如何阅读时序报告?

    生成时序报告后,如何阅读时序报告并从时序报告中发现导致时序违例的潜在问题是关键。 首先要看Design Timing Summary在这个
    的头像 发表于 08-31 13:49 5448次阅读
    如何阅读<b class='flag-5'>时序</b>报告?

    一文知道时序路径的构成

    更为具体的时序报告信息如何从中获取,或者如何根据时序报告发现导致时序违例的潜在原因呢?
    的头像 发表于 09-04 10:24 1632次阅读

    Vivado时序案例分析之解脉冲宽度违例

    BY Hemang Divyakant Parikh 有多种类型的时序违例可归类为脉冲宽度违例。 - 最大偏差违例(详见 此处 ) - 最小周期违例
    的头像 发表于 11-19 13:48 4793次阅读
    Vivado<b class='flag-5'>时序</b>案例分析之解脉冲宽度<b class='flag-5'>违例</b>

    FPGA时序约束:如何查看具体错误的时序路径

        1、时序错误的影响       一个设计的时序报告中,design run 时序有红色,裕量(slack)为负数时,表示时序约束出现违例
    的头像 发表于 03-17 03:25 479次阅读

    时序约束出现时序违例(Slack为负数),如何处理?

    时序约束出现时序违例(Slack为负数),如何处理?
    的头像 发表于 07-10 15:47 3488次阅读