zoukankan      html  css  js  c++  java
  • 时序分析(1):时序约束原理(旧版、可能有错)

    一、时序原理

    1.建立时间和保持时间

    (1)建立时间Tsu:set up time,触发器的时钟上升沿到来以前,数据必须准备好的时间,如果建立时间不足,数据将不能在这个时钟上升沿被稳定的打入触发器。

    (2)保持时间Th:hold time,触发器的时钟上升沿到来以后,数据被锁存消化的时间。如果保持时间不足,数据将不能在这个时钟上升沿被稳定的打入触发器。

    (3)建立/保持时间是D触发器的一个固有属性,是确定的、不变的。

    (4)解决建立时间不足的方法是“减少延时”,而解决保持时间不足的方法是“增加延时”。

    (5)FPGA所有时序问题,根本原因都是“建立时间和保持时间”的问题。

      现在来仔细分析一下:

    信号

    含义

    信号

    含义

    clk

    系统时钟

    Tclk

    时钟周期

    clk_1

    源寄存器对应时钟

    Tclk1

    时钟到源寄存器REG1的时间

    clk_2

    目的寄存器对应时钟

    Tclk2

    时钟到目的寄存器REG2的时间

    data2_D

    目的寄存器D端数据

    Tskew

    时钟偏移时间:Tclk2 - Tclk1

    data2_Q

    目的寄存器Q端数据

    Tco

    数据在寄存器内部传输的时间

    Tsu

    建立时间

    Tdata

    数据的组合逻辑传输的时间

    Th

    保持时间

     

    注: ①实际时序还涉及“启动沿”、“锁存沿、”“数据到达时间”、“数据需求时间”等概念,但是不方便绘图了,而且上图已经能够粗略解释建立时间和保持时间了。

        ②上图Tco画在寄存器REG2中,只是为了方便理解概念而已,实际上寄存器REG1也有Tco。

        ③上图描绘的是极端情况,即:时钟周期Tclk = 建立时间Tsu + 保持时间Th。

        ④去除时钟偏移Tskew,可得最小时钟周期Tclk(min) = Tco + Tdata + Tsu,这是最快时间,其倒数即为最高时钟频率。

        ⑤按照上图时序,若要保证有时间富余,可得建立时间和保持时间的满足公式:

    2.电路的延时

    (1)理论状态

    (2)实际状态,中间有时间富余

    3.关键路径

    (1)关键路径:延时最长的路径,决定了能跑到的最高频率,A-EB-E都是关键路径

    (2)关键路径是某个点到某个点之间的。

    (3)思考:我一定要跑300M,怎么办?

    4.流水线设计

    (1)设计时优化:举例s = a * b * c * d,没有增加硬件资源,但得到了优化

     

    (2)继续优化,形成流水线设计。(中间加了一个寄存器进行暂存)

     

    (3)继续优化,乘法器变成加法器。

    举例:设reg[3:0] a,reg[1:0] b,求f = a*b。

    做法:乘法变加法,f = a*b = a*b[0] + {a,1’b0}*b[1]

    (4)继续优化,加法器分成门级电路等,不断细分,时钟频率得到很大提高。

    (5)优化举例:

    //原设计:
    a <= A + B + C + D;
    b <= a + E;
    -----------------------
    //优化设计1:
    a_tmp1 <= A + B;
    a_tmp2 <= C + D;
    a      <= a_tmp1 + a_tmp2;
    b      <= a + E;
    -----------------------
    //优化设计2,使用assign:
    assign a_tmp1 = A + B;
    assign a_tmp2 = C + D;
    a <= a_tmp1 + a_tmp2;
    b <= a + E;

    5.通俗理解

    某生产线分成4步骤并行工作,A2小时,B1小时,C3小时,D0.5小时。规定每隔3小时交接一次,要求到点前5分钟交接,到点后10分钟才能工作。那么:

    (1)到点前5分钟,类似于FPGA的建立时间。

    (2)到点后10分钟,类似于FPGA的保持时间。

    (3)每隔3小时交接一次,类似于FPGA的时钟周期。

    (4)2小时、1小时等,类似于FPGA的路径延时(Tco+Tdata)。

    (5)C花费时间最长,类似于FPGA的关键路径。

    (6)为了优化,可以将C的1小时工作,交给D来做。

    (7)该生产线实际上不能正常运转。

    二、quartus II分析时序

    1.建立工程,进行编译

    2.打开时序分析窗口:Tools ---> TimeQuest Timing Analyzer

    3.创建网表:Tasks窗口 ---> Netlist Setup ---> Create Timing Netlist

    4.创建时钟信号

    (1)Constraints ---> Creat Clock

    (2)设置时间,周期,占空比时间

    (3)Targets ---> List中找到时钟信号,添加进来

    (4)RUN

    5.Tasks窗口---> Macros ---> Report All Summaries,可看到所有情况,标红的为不满足的。

    6.Tasks窗口---> Macros ---> Report Top Failing Paths,会把所有不满足的路径报告出来。Slack就是我们要注意研究的,可以知道我们超过了多少时间。

    7.保存:Constraints ---> Write SDC File...

    8.可点击Files ---> Open...打开刚刚保存的文件,查看里面代码,能看到设置的时钟,可直接对代码进行更改来改变时钟频率。

    9.读取:Tasks窗口 ---> Netlist Setup ---> Constraints ---> Read SDC File...

    10.弄完约束后,将Sdc文件添加进主页面的Files里,再进行编译,更新timequest网表重新分析。

    11.如果哪个路径是我们认定不需要分析的,是我们异步处理不关心的,则可以右键选择 Set False Path (clocks) 这样语句就会改变,重新编译导表就OK了。

    三、时序约束步骤

      具体时序约束操作有很多,如creat clocks、input delays、output delays、set timing exceptions等,具体内容太多,由于没有真正做过这方面的项目,所以懂的不多,结合所学简要写一点。

      1 //----------------------------------------------------
      2 //-- Time Information
      3 //----------------------------------------------------
      4 
      5 1.时间精度设置,默认值为3
      6 
      7 //----------------------------------------------------
      8 //-- Create Clock
      9 //----------------------------------------------------
     10 
     11 1.输入时钟
     12     A.输入管脚clk(P38)
     13         a.直接输入,最常见
     14         b.经过时钟管理单元(mmcm)
     15     B.差分时钟(P36)
     16         a.N端和P端两个口,只需要约束P端
     17     C.GT或恢复的时钟(P39)
     18         a.进来时无时钟,但因为ip核自行恢复了
     19 
     20 2.虚拟时钟(P145)
     21     A.无[get_ports]所以称为虚拟
     22     B.典型应用如复位信号
     23 
     24 //----------------------------------------------------
     25 //-- Create Generated Clock
     26 //----------------------------------------------------
     27 
     28 1.衍生时钟(P36)
     29     A.工具自动推导无需约束但建议更改名称
     30     B.Altera自动推导需写上:derive_pll_clocks
     31 
     32 2.自分频时钟(P36)
     33     A.一般不建议自分频
     34     B.自定义约束会覆盖工具推导约束
     35 
     36 3.随路时钟
     37     A.调整好随路时钟相位就能不约束input或output
     38 
     39 //----------------------------------------------------
     40 //-- Set Clock Latency
     41 //----------------------------------------------------
     42 
     43 时钟源(晶振)到触发器时钟输入端的延时,分两种
     44    A.时钟源延迟(clock source latency)
     45    B.时钟网络的延迟( clock network latency)
     46 
     47 //----------------------------------------------------
     48 //-- Set Clock Uncertainty
     49 //----------------------------------------------------
     50 
     51 1.时钟偏差,分两种去相加:
     52     A.clock jitter
     53     B.clock skew
     54 2.可用derive_clock_uncertainty自行生成就不用自己算数
     55 
     56 //----------------------------------------------------
     57 //-- Set Input Delay
     58 //----------------------------------------------------
     59 
     60 1.参数说明
     61     A. min for hold analysis
     62     B. max for setup analysis
     63 
     64 2.System系统同步(P112)
     65     A.FPGA与Source Device共用时钟,二者延时相同
     66     B.大部分情况仅仅用于SDR方式
     67         a.查数据手册,套公式
     68             min = Tco(min) + Tdata(min)
     69             max = Tco(max) + Tdata(max)
     70         b.示波器测量,套公式
     71             min = DV_after
     72             max = Period - DV_before
     73 
     74 3.Source源同步(P114)
     75     A.时钟和数据一起过来
     76     B.SDR
     77         a.查数据手册,套公式
     78             min = Tco(min) + Tdata(min)
     79             max = Tco(max) + Tdata(max)
     80         b.示波器测量,套公式
     81             min = DV_after
     82             max = Period - DV_before
     83     C.DDR,一般只用示波器测量,分为rise和fall
     84         a.中心对齐
     85             1.rise(未标明的就是rise)
     86                 min = DV_after_re
     87                 max = 0.5*Period - DV_before_fe
     88             2.fall(添加-clock_fall-add_delay)
     89                 min = DV_after_fe
     90                 max = 0.5*Period - DV_before_re
     91         b.边沿对齐(边沿前取负数)
     92             1.rise(未标明者即为rise)
     93                 min = -skew_before_re
     94                 max =  skew_after_re
     95             2.fall(添加-clock_fall-add_delay)
     96                 min = -skew_before_fe
     97                 max =  skew_before_fe
     98 
     99 4.有数据无时钟(P145)
    100     A.设置虚拟时钟,再用虚拟时钟约束此信号
    101     B.随便设个both值即可
    102 
    103 //----------------------------------------------------
    104 //-- Set Output Delay
    105 //----------------------------------------------------
    106 
    107 1.参数说明
    108     A.min for hold analysis
    109     B.max for setup analysis
    110 
    111 2.System系统同步(P130)
    112     min = Tdata(min) - Th
    113     max = Tdata(max) + Tsu
    114 
    115 3.Source源同步(P131),与随路时钟搭配约束
    116     A.两种理论计算方法
    117     B.SDR
    118         a.Setup/Hold理论
    119             min = Tdata(min) - Th
    120             max = Tdata(max) + Tsu
    121         b.Skew理论
    122             min = before_re_skew
    123             max = Period - afer_re_skew
    124     C.DDR,一般只用示波器测量,分为rise和fall
    125         a.中心对齐,用Set/Hold理论
    126             1.rise(未标明的就是rise)
    127                 min = -thd_r
    128                 max =  tsu_r
    129             2.fall(添加-clock_fall-add_delay)
    130                 min = -thd_f
    131                 max =  tsu_f
    132         b.边沿对齐,用skew理论
    133             1.rise(未标明者即为rise)
    134                 min = before_re_skew
    135                 max = 0.5*period - after_fe_skew
    136             2.fall(添加-clock_fall-add_delay)
    137                 min = before_fe_skew
    138                 max = 0.5*period - after_re_skew
    139 
    140 //----------------------------------------------------
    141 //-- Set Clock Groups
    142 //----------------------------------------------------
    143 
    144 不同时钟之间也可以在这里约束
    145 
    146 //----------------------------------------------------
    147 //-- Set False Path 
    148 //----------------------------------------------------
    149 
    150 1.常量或伪常量(P172)
    151 2.互斥路径(P173)
    152     A.例如双向端口
    153 3.异步时钟(P174)
    154     A.先处理再约束
    155     B.打两拍来同步信号和处理亚稳态
    156     C.用异步fifo起到隔离时钟
    157 
    158 //----------------------------------------------------
    159 //-- Set Multicycle path
    160 //----------------------------------------------------
    161 
    162 1.两个寄存器间的数据传输在一个周期内没法完成时,可以
    163   通过本命令改变建立值和保持值让其满足时序要求。
    164 2.不建议使用多周期路径(P157-P164)
    165 
    166 //----------------------------------------------------
    167 //-- Set Maximum Delay
    168 //----------------------------------------------------
    169 
    170 纯组合逻辑路径,很少使用(P178)
    171 
    172 //----------------------------------------------------
    173 //-- Set Minimum Delay
    174 //----------------------------------------------------
    175 
    176 纯组合逻辑路径,很少使用(P178)
    177 
    178 //----------------------------------------------------
    179 //-- Set Input Transition
    180 //----------------------------------------------------
    181 
    182 很少用到

      上述是Altera中常用到的约束方法,实际上里面的每一点都有很大的学问。里面的页数是一篇《timing》的文档,这样就不用记忆语句,直接查阅文档就行了。

    四、小技巧

    //-- pll时钟改名
    //----------------------------------------------------
    1.编译工程,打开timing_quest,创建网表。
    2.创建时钟后生成sdc文件,打开sdc文件并在衍生时钟处写上
      derive_pll_clocks并保存,回到timing_quest重读该sdc文
      件,发现pll时钟已经自动约束好,但是名字很复杂。
    3.退出timing_quest,打开sdc文件,将pll时钟的名字改成需要
      的名字并保存。回到quartus ii进行编译,打开timing_quest
      并更新网表,看到pll时钟改名成功。
    
    //-- 关于false path:
    //----------------------------------------------------
    1.异步时钟之间一般要进行false path
    2.false path前,必须确定已经进行了处理,如打拍或FIFO隔离。
    3.不一定都是clock之间的false,有时node之间的就可以。
    4.Set Clock Groups中也可以担任跨时钟域的时序约束。

    参考资料:[1]明德扬FPGA教程

  • 相关阅读:
    liferay常用api总结
    liferay增删改简单小练习
    MD5加密
    日期的工具类
    java生成随机六位数的验证码&随机生成十位数ValidCode码,用于邮件的验证&检查是不是符合为合法的中国的手机号码
    MyBaties
    网页的外观---CSS层叠样式表---03
    还在买鲜花送女神?手把手教你搭建3D立体相册网站,包女神稀饭
    Vue入门——常见指令及其详细代码示例
    什么是可串行化MVCC
  • 原文地址:https://www.cnblogs.com/xianyufpga/p/10769957.html
Copyright © 2011-2022 走看看