ICC图文流程——(四)时钟树综合Clock Tree Synthesis

ICC时钟树综合

时钟树综合就是指从某个clock的root点长到各个sink点的clock buffer/inverter tree。工具试图将某个clock所属的所有sinks做到相同长度,即尽可能的使一个时钟信号到达各个终端节点的时间相同。

               

在没有进行时钟树综合之前,时钟树暂未生成,时钟逻辑结构如左图所示,一个时钟源端(root)最终扇出到很多寄存器的时钟端。但是我们知道,时钟源到达不同寄存器所经历路径的驱动和负载的不同,使得时钟信号到达各个寄存器时钟端的时间也不一样,将到达不同寄存器的时间偏差称为偏差(skew),传统CTS就是为了减小skew。

 

                                                                                                

经过了时钟树综合,通过加入如右图中三种颜色三角形的三级buffer等方式形成一个时钟树,时钟信号会先到达各级buffer使得最终到达各个寄存器时钟端的时间几乎相同。

所以,时钟树综合的目的有两个:

                 1、clock skew尽量小,特别是对时钟质量要求比较高或者高频时钟;

                 2、clock latency尽量短。

 

首先对于一个设计,要进行时钟树综合,开始最重要的一步就是定义好时钟端,root和sink都需要知晓,软件根据定义计算延迟。

                                                            

首先定义时钟的root点,使用create_clock定义时钟的root点

如果是generated clock(生成时钟)需要使用create_generated_clock定义,它的master clock需要定义清楚。同时要求generate clock与master clock是可以trace通的。

                                                       

                                                               

如上图所示的Master clock,CLKP以及Generated clock 命名为CLKPDIV2,使用命令定义:

Icc_shell>create_clock -name CLKP  [get_pins UPLL0/CLKOUT]

Icc_shell>create_generated_clock  -name CLKPDIV2  -source UPLL0/CLKOUT   -add    -master_clock CLKP  -divide_by 2 [get_pins UFF0/Q]

master clock就是通过create_clock定义的主时钟,图中即为CLKP;通过命令将分频时钟定义为生成时钟。

在genereated clock的时候一定要明确generated clock与master clock的相位关系(rise->rise or rise->fall or fall->rise or fall->fall), 这些关系由桥梁source clock嫁接,所以有了generated clock和source clock,以及source clock和master clock的关系。

(个人理解:source)

上图中source clock即为master clock,但是如果根据声明找到的generated clock和master clock的关系和实际的关系不一致,否则会造成一些分析错误。

                                                

如图所示,master clock为CLK ,生成时钟为uDIV。

如果定义:create_clock -period 10 clk

                      create_generated_clock  -name CLKdiv2    -divide_by 2   -source clk  [get_pins Udiv/Q]

那么根据定义,master clock 和gerenated clock的相位关系如图所示:

                                                            

根据上面定义,generated_clock是定义在二分频的输出端Q上,其source为CLK。但是我们看到Udiv这个寄存器的时钟端CK与CLK是反相的(即相位差180度)。

实际上master clock 和gerenated clock的相位关系应为:

                                                             

修正的方法一是改变generated clock的source,即让generated clock和source clock的路径唯一且单一(单一是指,声明的相位边沿关系和实际的相位边沿关系一致)。一般做法就是将source clock设置在触发器的clock端。

对应的命令应为create_generated_clock -name CLKdiv2 -divide_by 2  -source [get_pins Udiv/Clk] [get_pins Udiv/Q]

二是直接声明generated clock和master clock的相位边沿关系。如下:

create_generated_clock  -name CLKdiv2   -edges {2 4 6}  -source CLK  [get_pins Udiv/Q]

考虑到后期review constraint的便利性,强烈建议使用第二种方式来实现(实际项目中都是采用这种方法)。

(个人想法。在ICC man page中,对于create_generated_clock的 -source master_pin选项
Specifies  the  master clock pin, which is either a master clock source pin or a pin in the fanout of the master clock and  driving  the  generated clock definition pin.  The clock waveform at the master pin is used for deriving the  generated  clock  waveform.

也就是说 -source 选项后面接的可以是驱动生成时钟的触发器的clock引脚?对于source clock的概念不是很理解。

                                

像这样的多级分频时钟,对于FFdiv3的定义为

Create_generated_clock -name CLK_mux_div3            -divide_by 3   -source FFdiv3/CK -master CLK_mux -add

Create_generated_clock -name CLKdiv2_mux_div3   -divide_by 3   -source FFdiv3/CK -master CLKdiv2_mux -add

Create_generated_clock -name CLKdiv4_mux_div3   -divide_by 3   -source FFdiv3/CK -master CLKdiv4_mux -add)

 

定义好了时钟源端之后,需要对时序路径的端点。

Pin类型

别名

解释

工具的处理

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值