关于同步多时钟网络的综合
时间:10-02
整理:3721RD
点击:
下面这种情况该在后端应该如何处理?
如图,clk_div2,clk_div4皆由clk分频出来,由此形成三个clock group(clk_div4,clk_div2,clk),且时钟频率依次加倍。
问题在于三个clock group之间存在数据的传递,在这种情况下该如何约束时序呢?
我所知的前面一些方法如下:
create_clock -name clk -period 2 [get_ports clk]
set_ideal_network [get_nets clk]
set_dont_touch [get_clocks clk]
create_generated_clock -name clk_div2 -divide_by 2 -source [get_clocks clk] [get_pins i_clk_div/clk_div2]
create_generated_clock -name clk_div4 -divide_by 4 -source [get_clocks clk] [get_pins i_clk_div/clk_div4]
这样做之后,还存在一个问题就是两个时钟域之间的路径还没有得到约束,那该如何解决呢?
如图,clk_div2,clk_div4皆由clk分频出来,由此形成三个clock group(clk_div4,clk_div2,clk),且时钟频率依次加倍。
问题在于三个clock group之间存在数据的传递,在这种情况下该如何约束时序呢?
我所知的前面一些方法如下:
create_clock -name clk -period 2 [get_ports clk]
set_ideal_network [get_nets clk]
set_dont_touch [get_clocks clk]
create_generated_clock -name clk_div2 -divide_by 2 -source [get_clocks clk] [get_pins i_clk_div/clk_div2]
create_generated_clock -name clk_div4 -divide_by 4 -source [get_clocks clk] [get_pins i_clk_div/clk_div4]
这样做之后,还存在一个问题就是两个时钟域之间的路径还没有得到约束,那该如何解决呢?
就是同源clock之间啊, 确实是real path,
不用特别约束吧,后端balance clock latency了后,就像是一个domain的一样了,
但实际上我检查过时序报告,该路径确实是没有约束的。后端做时钟树之后也是没有时序约束的吧?另外,我这个问题是简化出来的,实际上还要考虑另外一个问题,在我的另一个帖子中,希望也帮忙解答:时钟又作为数据输入
report_timing -from xxx -to xxx是unconstrained path ?
是的,因为这是属于不同的clock group的,如果分开来综合的话倒是有两种方法处理,但是不够准确:1. 首先设置一个与前一个时钟相同频率的虚拟时钟,然后在用这个虚拟时钟去约束第二个模块的输入延迟,这样可以约束到该路径;
2. 直接约束该路径的组合逻辑延迟,但这样对于多bit的来说显得复杂,而且也没有考虑进去时钟的非理想性。
用多周期路径约束比较好,这三个时钟是同一个时钟源,切相位固定。