时序约束原理
一、时序原理
1.建立时间和保持时间
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。(1)建立时间Tsu:set up time,触发器的时钟上升沿到来以前,数据必须准备好的时间,如果建立时间不足,数据将不能在这个时钟上升沿被稳定的打入触发器。
(2)保持时间Th:hold time,触发器的时钟上升沿到来以后,数据被锁存消化的时间。如果保持时间不足,数据将不能在这个时钟上升沿被稳定的打入触发器。
(3)建立/保持时间是D触发器的一个固有属性,是确定的、不变的。
(4)解决建立时间不足的方法是“减少延时”,而解决保持时间不足的方法是“增加延时”。
(5)FPGA所有时序问题,根本原因都是“建立时间和保持时间”的问题。(面试必考)
2.电路的延时
(1)理论状态
(2)实际状态,中间有时间富余
(3)最高时钟频率
Tclk(min)= Tco + Tdata + Tsu,这是最快时间,其倒数即为最高时钟频率。
3.关键路径
(1)关键路径:延时最长的路径,决定了能跑到的最高频率,A-E和B-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步骤并行工作,A要2小时,B要1小时,C要3小时,D要0.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.深刻理解建立时间和保持时间
信号 |
含义 |
信号 |
含义 |
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.按照上图时序,若要保证有时间富裕,可得建立时间和保持时间的满足公式:
二、用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等,详细操作以后再更......
