VIVADO 时序约束3

发布时间 2024-01-11 20:19:33作者: tonyxpy

1.查看时序报告
对于intra-clock 小于300ps,inter-clock小于500ps
2.如果异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败?
3.亚稳态发生概率
由上面分析得知,系统亚稳态发生的都是由于clk的Tsu和Th不满足,又或者是复位信号的移除和恢复时间不满足。常用FPGA器件的Tsu+Th约等于1ns,复位移除和恢复时间相加约等于1ns。
当异步信号不是一组数据,或者信号量较少,那就需要对异步信号进行同步处理,例如对一个异步脉冲信号进行采集,只要脉冲信号变化发生在时钟Tsu和Th窗口内,那就很可能会产生亚稳态,亚稳态产生的概率大概为:
概率 = (建立时间 + 保持时间)/ 采集时钟周期 (公式3-1)
由公式3-1可以看出,随着clk频率的增加,亚稳态发生的几率是增加的。
例如,为系统采用100M时钟对一个外部信号进行采集,采集时钟周期为10ns,那采集产生亚稳态的概率为:1ns/10ns = 10%
同理采用300M时钟对一个外部信号进行采集,那产生亚稳态的概率为:1ns/3.3ns = 30%
如果采用三相相位差为120°的时钟对一个外部信号进行采集,那产生亚稳态的概率接近90%
所以在异步信号采集过程中,要想减少亚稳态发生的概率:
(1) 降低系统工作时钟,增大系统周期,亚稳态概率就会减小;
(2) 采用工艺更好的FPGA,也就是Tsu和Th时间较小的FPGA器件;

4.在Vivado中通过set_clock_groups来约束不同的时钟组,它有三个选项分别是-asynchronous,-logically_exclusive和-physically_exclusive。

-asynchronous应用于异步时钟,如下图所示,CLKA和CLKB由两个外部独立的晶振提供,那么跨时钟域路径即REGA到REGB0之间的路径可采用如下约束:

create_clock–name CLKA –period 10.0 [get_ports CLKA]
create_clock–name CLKB –period 5.0 [get_ports CLKB]
set_clock_groups –async –group CLKA –group CLKB

上述约束等效于
set_false_path–from [get_clocks CLKA] –to [get_clocks CLKB]
set_false_path–from [get_clocks CLKB] –to [get_clocks CLKA]
但通常建议采用前者。

如果是如下图所示情形,即CLKA和CLKB由外部晶振提供,分别通过MMCM生成各自的时钟,此时{CLKA, clk0, clk1, clk2}与{CLKB, clka, clkb, clkc}是异步的,从而相应的约束变为:

create_clock–name CLKA –period 10.0 [get_ports CLKA]
create_clock–name CLKB –period 5.0 [get_ports CLKB]
set_clock_groups–async
-group[get_clocks –include_generated_clocks CLKA]
-group[get_clocks –include_generated_clocks CLKB]
考虑另一种情形:
Clk50与clk100为同步时钟,clk33和clk66为同步时钟,而两组同步时钟之间均为异步时钟,相应的约束该如何描述呢?
set_clock_groups–async –group {clk50 clk100} -group {clk33 clk66}
在set_clock_groups中-asynchronous可简写为-async。