一、时序原理

1.建立时间和保持时间

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

时序约束原理 随笔 第1张

时序约束原理 随笔 第2张

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

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

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

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

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

2.电路的延时

(1)理论状态

时序约束原理 随笔 第3张

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

时序约束原理 随笔 第4张

(3)最高时钟频率

Tclk(min)= Tco + Tdata + Tsu,这是最快时间,其倒数即为最高时钟频率。

3.关键路径

时序约束原理 随笔 第5张

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

(2)关键路径是某个点到某个点之间的。如图红色线所示。

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

4.流水线设计

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

 时序约束原理 随笔 第6张

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

 时序约束原理 随笔 第7张

(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)该生产线实际上不能正常运转。

 

6.深刻理解建立时间和保持时间

时序约束原理 随笔 第8张

时序约束原理 随笔 第9张

信号

含义

信号

含义

clk

系统时钟

Tclk

时钟周期

clk_1

源寄存器对应时钟

Tclk1

时钟到源寄存器REG1的时间

clk_2

目的寄存器对应时钟

Tclk2

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

data2_D

目的寄存器D端数据

Tskew

时钟偏移时间:Tclk2 - Tclk1

data2_Q

目的寄存器Q端数据

Tco

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

Tsu

建立时间

Tdata

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

Th

保持时间

 

 

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

  2.上图Tco画在寄存器REG2中,只是为说明Tco的概念而已。实际寄存器REG1也有Tco,公式里的Tco指的是REG1里的Tco。

  3.上图描绘的是极端情况,即:时钟周期Tclk = 建立时间Tsu + 保持时间Th实际情况肯定要保证有时间富裕。

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

 时序约束原理 随笔 第10张

 

 

二、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...

时序约束原理 随笔 第11张

10.弄完约束后,将Sdc文件添加进主页面的Files里,再进行编译,再打开timequest建立网表重新一点点分析,看哪些符合了,哪些还不行。

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

 

 

三、时序约束步骤

  具体时序约束操作有很多,如creat clocks、input delays、output delays、set timing exceptions等,详细操作以后再更......

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄