目录

案例引入:

时序约束场景

亚稳态的产生


声明:本博文整理互联网上相关资料并加入个人的理解而成,参考文献见最后。

案例引入:

  • 何为建立时间和保持时间?

对于一个D触发器而言, 时钟上升沿触发,我们都知道在上升沿到来时刻,输出Q值等于输入D值,这是理想的情况下我们的通常认识,见博文:通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器),但实际情况是在上升沿到来之前的一段时间内D值必须保持稳定,不能存在跳变等不稳定的情况,这段时间称为建立时间,记为浅析FPGA时序相关问题_上升沿,简记为浅析FPGA时序相关问题_触发器_02,这还不够,在时钟上升沿到来后的一段时间内,D值也必须保持稳定,这段时间称为保持时间浅析FPGA时序相关问题_组合逻辑_03,简记为浅析FPGA时序相关问题_时序约束_04,满足这两个时间的要求,Q值的输出才能等于输入D值。

综上:输入管脚的数据必须在时钟有效之前提前出现的时间称为建立时间Tsu;保持时间Th是指在时钟上跳沿后,数据必须保持的最小时间。

如下图所示:

 

浅析FPGA时序相关问题_时序约束_05

浅析FPGA时序相关问题_时序约束_06

  • 触发器时钟到输出时间浅析FPGA时序相关问题_触发器_07

在时钟有效后,D的数据并不能立即传到Q端,这段等待的时间就是触发器的时钟到输出时间。

  • 组合逻辑延时

越多的门电路,所构成的组合逻辑延时越大,以ALTERA C4为例,FPGA实际上是用四输入查找表(LUT, Look-Up-Tables)的方式实现门电路的,变量数目小于4的所有组合逻辑延时相同,大于4时需要多个查找表组合,延时增加。

对于其他厂商以及不同系列的FPGA也是如此,例如

浅析FPGA时序相关问题_组合逻辑_08

7系列的FPGA的LUT是6输入的,那么变量数目小于6的所有组合逻辑延时相同,大于6时就需要多个查找表(LUT)组合,这样也就会增加延时。

这里给出7系列FPGA数据手册的地址:7 series FPGA Overview

  • 信号路经延时

路径延时是所有延时中最需要考虑的,甚至可以占到总延时的一半以上,一般EDA工具不会寻找最快的路径,需要施加时序约束。

  • 时钟偏移、抖动和延时

时钟传到每个触发器的时间会由于距离时钟源路径长度不同而有偏移,时钟偏移可以通过走时钟树的结构解决,但时钟偏斜永远存在,不可能消除。时钟抖动是由于温度分布,信号串扰等因素使得晶振、PLL等产生的时钟信号周期不会严格相等而造成的。

以上时间都是触发器固有时间,无法更改。

时序约束场景

在简单电路中,当频率较低时,数字信号的边沿时间可以忽略时,无需考虑时序约束。但在复杂电路中,为了减少系统中各部分延时,使系统协同工作,提高运行频率,需要进行时序约束。通常当频率高于50MHz时,需要考虑时序约束。

而上述所说的所有的时间都是限制FPGA最大频率的因素,不仅如此,还包括:

  • 功耗

合理的时序约束可以提高运行频率,但往往会使得功耗增加, 在性能要求不高的移动设备中,需要综合考虑。

  • 高扇出信号延时

高扇出信号是指带多负载的信号,在多负载情况下,信号的延时会增大,信号到达某些负载的时间增加,从而可能造成该信号相对时钟信号是一个晚到的信号。


亚稳态的产生

If the clock edge samples a data while it’s changing, the sampled data are not assumed as either stable 0 or 1 state. Metastability can never be eliminated, normally we just isolate them in between of flip flops so that it will not go further beyond to mess up subsequent logic states.

意思是如果在时钟有效沿采样一个变化的数据时(不满足建立时间),采样数据就会出现不确定状态(0 or 1?),亚稳态不可能被消除,通常我们会分离两个触发器,这就可以避免亚稳态就不会进一步传播(传播会影响接下来的逻辑状态)。

 

 

 

bclk上升沿到来时,adat正在变化,此时进行采样,就导致了亚稳态,但是下一个时钟上升沿到来时,这个问题就解决了,也就是采样值就能确定了。