在设计时钟约束问题之前,需要注意两个概念,一个是建立时间、一个保存时间。建立时间是指,对于一个D触发器来说,时钟到达之前,数据应该保持稳定的时间。保持时间是指,时钟到达之后,数据应该保持稳定的 时间。
我对于这个问题的理解是,建立时间,是在D触发器之前,需要进行组合逻辑计算的时间,包括线路的传输时间。
保持时间是指,当上升沿到达之后,需要多少时间保持数据的稳定,相关数据才能被稳定准确地输出。
在set_multicycle_path命令,需要明确两个概念,一个是setup requirement,建立时间需求。一个是hold requirement保持时间需求。建立时间需求很好理解,就是在源时钟控制寄存器到目的时钟寄存器之间传输数据的所用的时间。而然,一个源时钟发送数据的上升沿必须对应目的时钟接受数据的唯一一个上升沿。这就需要保持需求来维持。保持需要有以下两个原则:
1)当前发起沿发送的数据不能被前一个捕捉沿捕捉。
2)下一发起沿发送的数据不能被当前捕捉沿捕捉。
如下图所示,建立时间以及保持时间的组合,约束了目的时钟可以对数据进行捕捉的范围。
约束指令:
set_multicycle_path -from [get_clocks clk1] -to [get_clocks clk2] -setup -end 3
set_multicycle_path -from [get_clocks clk1] -to [get_clocks clk2] -hold -end 2
上述的两个约束,一个(-setup)是建立时间,一个(-holf)是保持时间。
-end以目的端口时钟作为时钟周期计数基准,如果是-start 表示以源时钟作为时钟周期计数标准。