后端面试--每日一题(024)
如何设定multicycle path?
难度:1
提示:在一般情况下,multicycle -setup 和 -hold 要成对使用
clock path:
fast-slow:set_multicycle_path num -setup -from clk1 -to clk2 -start
set_multicycle_path num-1 -hold -from clk1 -to clk2 -start
slow-fast:set_multicycle_paht num -setup -from clk2 -to clk1 -end
set_multicycle_path num-1 -hole -from clk2 -to clk1 -end
data path:
set_multicycle_path num -setup -from data1 -to data2
set_multicycle_path num-1 -hold -from data1 -to data2
2楼正确!
谁来讲讲,为什么-hold一般是-setup的n-1?如果只有-setup木有-hold会怎样?
hold 是对前后两个flip flop在相同时钟沿的检查.设了n-1就是返回n-1个周期做hold的检查,满足了两个flip flop在同一个时钟沿。如果没有-hold 默认是检查n前一个有效时钟沿,如果n>=2,hold的检查就不是在同一个时钟效沿。表述有点不清楚!
对,就是这个意思
如果没有-hold n-1的话,对hold的要求就要多n-1个周期,那样太苛刻了,一般无法实现
有一点问题想确认一下。如果没设multicycle时,假设查hold时launch和capture clk都是在0时刻的。
如果我加-hold n-1,那么相当于capture clk到达时间是0+(n-1)*period, 不加-hold n-1, capture clk到达时间是0.
这样不加-hold n-1,capture clk到达时间比较早,对于查hold来说应该是过于乐观才对啊。
-hold n-1 不是把capture clock在时间轴上加(n-1)*period,而是减(n-1)*period
哦 清楚了,多谢陈总!
这个约束,先要搞清楚真假Multicycle。
比如对MultiCycle 2:
真Multicycle 2:总是采样下下个周期的数据,每拍出一个数,带宽不变。
假MultiCycle 2:总是采样下下个周期的数据,每2拍出一个数,带宽减半。
默认的设置是真Multicycle的,所以hold会紧跟setup移动。但我们常用的是假MultiCycle,所以要把Hold往后推。