发布时间:2022-12-17 09:00
文章目录
写在前面
磨刀不误砍柴工
什么是时序分析?
什么是时序约束?
什么是时序收敛?
时序约束与分析是FGPA开发过程中一项必备的技能,同时也是设计开发中相对较难的部分。很多人一谈起FPGA开发,言必称时序约束,搞得好像不会时序分析就不会进行FPGA开发一样。
举个例子:我以前面试某公司的硬件工程师职位,2面面试官是嵌入式软件出身的技术经理,聊天过程中偶然提到了我会点儿FPGA,结果他只问了我会不会做时序约束,得到我肯定的答复后,一口认定我的FPGA水平很高(实际半吊子水)。这样的看法虽然不够准确,但也代表了许多工程师的心声----FPGA的时序约束仍是一门较高级的技能。
这个专栏,我会从时序分析、时序约束和时序收敛3个方面来一起学习基于Xlinx FPGA和Vivado开发平台的FPGA时序相关内容。
正所谓磨刀不误砍柴工,在学习时序内容之前,有一些相关的概念有必要先学一下。
(1)时钟 Clock
理想的时钟模型是一个占空比为 50%且周期固定的方波。时钟是 FPGA 中同步电路逻辑运行的一个基准。如下图所示:
(2)时钟抖动 Clock Jitter
理想的时钟信号是完美的放波,但是实际的方波是存在一些时钟抖动的。那么什么是时钟抖动呢? 时钟抖动, Clock Jitter,是相对于理想时钟沿,实际时钟存在不随时间积累的、时而超前、时而滞后的偏移称为时钟抖动(时钟脉冲宽度发生暂时变化,也就是 T cycle【时钟周期】或大或小)。 如下图所示:
(3)时钟偏差 Clock Skew
时钟偏差,Clock Skew,是指同一个时钟域内的时钟信号到达数字电路各寄存器所用时间的差异。 时序分析的起点一般是源寄存器(reg1),终点一般是目标寄存器(reg2)。时钟
信号也会走线,那么和其它信号的传输一样,就会有延时。下图中,时钟信号从时钟源传输到源寄存器的延时我们定义为 Tc2s,传输到目标寄存器的延时我们定义为 Tc2d。如下图所示:
时钟网络延时 Tskew 就是 Tc2d 与 Tc2s 之差,即 Tskew=Tc2d-Tc2s。如下图所示:
第一个方波是时钟源,第二个方波为时钟到达 REG1 时的波形,第三个方波为时钟到达 REG2 时的波形,从图上可以看出 Tskew 是时钟到达两个寄存器时的相位偏差。
(4)时钟不确定性 Clock Uncertainty
Clock Uncertainty ,即时钟的不确定性。时钟的不确定性主要是由 Clock Skew 和 Jitter 构成。 因此 Clock Uncertainty = Clock Skew + Clock Jitter。大家搞明白什么是 Skew和 Jitter,那么也就明白什么是 Clock Uncertainty。
一般标准的时序约束文件中,都需要加 Clock Uncertainty 的约束,这个约束是为了让时序分析更贴近真实的电路设计。 对于 Uncertainty 的设置,每种工艺,或者每种设计来说,都不尽相同。
(5)同步电路和异步电路
简单来讲,FPGA 设计中寄存器全部使用一个时钟的设计是同步设计电路,FPGA 设计寄存器使用多个时钟的设计是异步设计电路。我们说的所有时序分析都是建立在同步电路的基础上的,异步电路不能做时序分析(或者说只能做伪路径约束)。
异步电路由于使用的时钟不同,导致上游寄存器的输出数据进入下游寄存器的时间是任意的,这非常可能导致不满足下游寄存器的建立时间要求和保持时间要求,从而导致亚稳态。同样的原因,由于两者时钟不同,所以也不法建立对应的模型来分析异步电路是否能满足时序要求。
(6)建立时间(Setup Time)和保持时间(Hold Time)
建立时间和保持时间是寄存器的固定属性,为了能够是寄存器稳定的采样到当前D端的数据,D端数据必须满足建立时间和保持时间的要求: