在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3204|回复: 9

[求助] encounter 时钟树综合产生不了缓冲器

[复制链接]
发表于 2020-1-3 01:17:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
后端新手, 我的一个课题,一个主时钟 CLK, 由它产生反相的CLKB, 还有一些用 Counter 产生的由CLKB除以2,4, 8, 16 得到的 派生时钟, 我在DC中用 Create_generated_clock 定义CLKB和这些派生时钟, 在encounter 中产生时钟树后, 发现只有主时钟和CLKB加了Buffer, 其他派生时钟, 有的即使要驱动几百个寄存器,也没有一个Buffer 加上, 为什么呢, 恳请各位大神解惑, 附上 时钟及派生时钟语句:

create_clock -period 40 -waveform [list 0 20] -name clk [get_ports mclk]

create_generated_clock -source mclk -edges {2 3 4} -name clkb [get_pins {U1/clkb U2/sd_clk}]
create_generated_clock -source U1/clkb -edges {2 4 6} -name clk_div2 [get_pins {U1/clk_div2 U2/sd_clk_div2}]
create_generated_clock -source U1/clk_div2 -edges {2 4 6} -name clk_div4 [get_pins {U1/clk_div4 U2/sd_clk_div4}]
create_generated_clock -source U1/clk_div4 -edges {2 4 6} -name clk_div8 [get_pins U1/clk_div8]
create_generated_clock -source U1/clk_div8 -edges {2 4 6} -name clk_div16 [get_pins U1/clk_div16]

多谢指导!
发表于 2020-1-3 09:19:24 | 显示全部楼层
你怎么做的时钟树,tcl写的哪几句,clock spec内容是啥,才比较好debug
 楼主| 发表于 2020-1-3 10:34:34 | 显示全部楼层
谢谢回复, 我是在encounter window中选的命令, 在
Place->Place Standard Cell  完成以后,再优化一下 setup:
Optimize -> Optimize design  choose pre-CTS,  check 'setup'    OK,  完了后检查 setup 没有Violation, 就做clockTree:

Clock -> Synthesize clock Tree, 这之前要加什么Command吗?
发表于 2020-1-3 13:53:29 | 显示全部楼层
用GUI界面的“ Synthesize clock Tree” 是一个综合命令,你去看你的log的CMD痕迹,能看到它的步骤。是不用加什么了。但是你的clock spec长什么样子呢?你没先gen出来么?clock spec是tool的做时钟规则,一定要想办法倒出来看。
1. 如果你的spec里面一个“AutoCTSRootPin”, 那就是tool trace出来就一个,因为generated clock是没有AutoCTSRootPin ,都是长在create_clock下面的,相当于子树了。
2. 你说的“其他派生时钟, 有的即使要驱动几百个寄存器,也没有一个Buffer 加上“ 这个不太正常,理论上带不动的。但是出错的多是人,不会是tool,所以你要看clock spec,有没有一些节点被排除了。GlobalExcludedPin, 你看看是不是有一些子树被排除了,那就不做clock树了。
 楼主| 发表于 2020-1-3 15:18:59 | 显示全部楼层
太感谢了,我的 Clock Spec 是下面这样子:

#Excluded pin under mclk
GlobalExcludedPin
+ U14/I
+ U15/I
+ U1/U2/U4/A2
+ U2/U1/U0/intp1/cic0/rlc5_6/U11/A2
+ U2/U1/U0/intp1/cic0/rlc5_6/U34/A2
+ U2/U1/U0/intp1/cic0/rlc5_6/U35/A2
+ U2/U1/U0/intp1/cic0/rlc5_6/U36/A2
+ U2/U1/U0/intp1/cic0/rlc5_6/U29/A2
+ U2/U1/U0/intp1/cic0/rlc5_6/U30/A2
+ U2/U1/U0/intp1/cic0/rlc5_6/U32/A2
等等
。。。。。。
+ U2/U2/U4/A2




#------------------------------------------------------------
# Clock Root   : mclk
# Clock Name   : mclk
# Clock Period : 40ns
# Clock Name   : mclk
# Clock Period : 40ns
#------------------------------------------------------------
AutoCTSRootPin mclk
Period         40ns
SrcLatency     1ns # set_clock_latency -source
MaxDelay       0.01ns # sdc driven default
MinDelay       0ns # sdc driven default
MaxSkew        1000ps # set_clock_uncertainty
SinkMaxTran    250ps # set_clock_transition
BufMaxTran     250ps # set_clock_transition
Buffer         BUFFD0BWP7T BUFFD10BWP7T BUFFD12BWP7T BUFFD1BWP7T BUFFD1P5BWP7T BUFFD2BWP7T BUFFD2P5BWP7T BUFFD3BWP7T BUFFD4BWP7T BUFFD5BWP7T BUFFD6BWP7T BUFFD8BWP7T CKBD0BWP7T CKBD10BWP7T CKBD12BWP7T CKBD1BWP7T CKBD2BWP7T CKBD3BWP7T CKBD4BWP7T CKBD6BWP7T CKBD8BWP7T CKND0BWP7T CKND10BWP7T CKND12BWP7T CKND1BWP7T CKND2BWP7T CKND3BWP7T CKND4BWP7T CKND6BWP7T CKND8BWP7T DEL015BWP7T DEL01BWP7T DEL02BWP7T DEL0BWP7T DEL1BWP7T DEL2BWP7T DEL3BWP7T DEL4BWP7T GBUFFD1BWP7T GBUFFD2BWP7T GBUFFD3BWP7T GBUFFD8BWP7T GINVD1BWP7T GINVD2BWP7T GINVD3BWP7T GINVD8BWP7T INVD0BWP7T INVD10BWP7T INVD12BWP7T INVD1BWP7T INVD1P5BWP7T INVD2BWP7T INVD2P5BWP7T INVD3BWP7T INVD4BWP7T INVD5BWP7T INVD6BWP7T INVD8BWP7T
NoGating       NO
DetailReport   YES
#SetDPinAsSync  NO
#SetIoPinAsSync NO
#SetASyncSRPinAsSync  NO
#SetTriStEnPinAsSync NO
#SetBBoxPinAsSync NO
RouteClkNet    YES
PostOpt        YES
OptAddBuffer   YES
#RouteType      specialRoute
#LeafRouteType  regularRoute
END


好像 AutoCTSRootPin 只有 mclk, 没有那些generated clock, 是不是就不能对那些clock产生Buffer了? 怎样添加那些clock呢。  
另外, 可不可以将GlobalExcludedPin  这一段整个去掉?
发表于 2020-1-3 15:30:11 | 显示全部楼层
本帖最后由 axxqql 于 2020-1-3 15:48 编辑

好像 AutoCTSRootPin 只有 mclk, 没有那些generated clock, 是不是就不能对那些clock产生Buffer了? 怎样添加那些clock呢。  
          我用”1...."回答你了啊,这样子的spec是对的,generated 那些都算子树的,理论上都会被build 上ckbuffer/ckinverter的。

另外, 可不可以将GlobalExcludedPin  这一段整个去掉?
          不可以乱去掉啊。你要去看这段里面,是不是有把你做树但是没做上的节点啊。这个是tool根据你的sdc加网表,trace出来给你看它要做树的规划,可以改,不能野蛮乱改。but,你就一个clock,又这么慢,也是可以全拿掉


3. 你这个spec里面buffer调用乱来啊。。。只用CKbuffer/CKinverter啊。

4. 你这个频率慢的,skew要求才1ns。。。讲真,还真可能不用塞太多buffer。。。你看你最后clock report吧,如果指标都满足了这个spec,你也别管塞buffer多少了。。。

5.。你这个太新手了还是先去学学clock tree咋回事吧。。

发表于 2020-1-3 15:53:40 | 显示全部楼层
report_clock -generated
This command shows what the tools accepts as valid generated clock.  

create_generated_clock -source mclk -edges {2 3 4} -name clkb [get_pins {U1/clkb U2/sd_clk}]Normally if you instantiate a clock inverter, you don't need to apply create_generated_clock for the inverted clock.  


create_generated_clock -source U1/clkb -edges {2 4 6} -name clk_div2 [get_pins {U1/clk_div2 U2/sd_clk_div2}]
This statement is a bit odd.  
Assume you have a counter div_cnt_r[2:0] running off mclk that generates the div2, div4, div8 clocks.  
The source pin is the CK pin of the flop driving the divided clock.  
create_generated_clock
-name clk_div2 -source div_cnt_r_reg[0]/CK -edges [1 3 5] -master_clock [get_clocks mclk] [get_pins div_cnt_r_reg[0]/Q]
The tool needs to be able to trace from the root of the generated clock, div_cnt_r_reg[0]/Q, to its source to check the the phase relationship.  
Tools may not be able to trace to hierarchical pin such as "U1/clkb".  

Similarly, other generated clocks can be defined.  
create_generated_clock -name clk_div4 -source
div_cnt_r_reg[1]/CK -edges [1 5 9] -master_clock [get_clocks mclk] [get_pins div_cnt_r_reg[1]/Q]



 楼主| 发表于 2020-1-3 16:06:49 | 显示全部楼层
多谢多谢, Very新手。
如果想看看是不是真不需要buffer, 还是某些地方set 错了, 我想把条件搞得苛刻一点,再看能不能加上buffer。
比如period 由40 ns变为  10ns,clock uncertainty 由1ns 变为 3ns,这样设可以吗, 再次感谢!
 楼主| 发表于 2020-1-3 16:18:00 | 显示全部楼层


jake 发表于 2020-1-3 15:53
report_clock -generated
This command shows what the tools accepts as valid generated clock.  


Thank you so much, very useful information! I'll try.
 楼主| 发表于 2020-1-3 16:34:21 | 显示全部楼层


jake 发表于 2020-1-3 15:53
report_clock -generated
This command shows what the tools accepts as valid generated clock.  


DC 好像可以理解, 没问题:dc_shell> report_clock -generated
Error: unknown option '-generated' (CMD-010)
dc_shell> report_clock

****************************************
Report : clocks
Design : MPW1_digi
Version: L-2016.03-SP1
Date   : Thu Jan  2 23:49:46 2020
****************************************

Attributes:
    d - dont_touch_network
    f - fix_hold
    p - propagated_clock
    G - generated_clock
    g - lib_generated_clock

Clock          Period   Waveform            Attrs     Sources
--------------------------------------------------------------------------------
U1/mclk        40.000   {0 20}              G p       {U1/mclk U2/mclk}
clk            40.000   {0 20}              p         {mclk}
clk_cic_first_dac
              640.000   {320 640}           G p       {U2/U1/clk_cic_first}
clk_ciccomp   1280.000  {640 1280}          G p       {U1/U1/clk_ciccomp}
clk_ciccomp_dac
              1280.000  {640 1280}          G p       {U2/U1/clk_ciccomp}
clk_div2       80.000   {40 80}             G p       {U1/U1/clk_div2 U1/U2/sd_clk_div2}
clk_div2_dac   80.000   {40 80}             G p       {U2/U1/clk_div2 U2/U2/sd_clk_div2}
clk_div4      160.000   {80 160}            G p       {U1/U1/clk_div4 U1/U2/sd_clk_div4}
clk_div4_dac  160.000   {80 160}            G p       {U2/U1/clk_div4 U2/U2/sd_clk_div4}
clk_div8      320.000   {160 320}           G p       {U1/U1/clk_div8}
clk_div8_dac  320.000   {160 320}           G p       {U2/U1/clk_div8}
clk_div16     640.000   {320 640}           G p       {U1/U1/clk_div16}
clk_div16_dac 640.000   {320 640}           G p       {U2/U1/clk_div16}
clk_div32_dac 1280.000  {640 1280}          G p       {U2/U1/clk_div32}
clk_div32_w   1280.000  {640 1280}          G p       {U1/U1/clk_div32_w}
clk_div64_dac 2560.000  {1280 2560}         G p       {U2/U1/clk_div64}
clk_div64_w   2560.000  {1280 2560}         G p       {U1/U1/clk_div64_w}
clk_div128_dac
              5120.000  {2560 5120}         G p       {U2/U1/clk_div128}
clk_div128_w  5120.000  {2560 5120}         G p       {U1/U1/clk_div128_w}
clk_halfband  2560.000  {1280 2560}         G p       {U1/U1/clk_halfband}
clk_halfband_dac
              2560.000  {1280 2560}         G p       {U2/U1/clk_halfband}
clkb           40.000   {20 40}             G p       {U1/U1/clkb U1/U2/sd_clk}
clkb_dac       40.000   {20 40}             G p       {U2/U1/clkb U2/U2/sd_clk}
deci_lrclk_in 2560.000  {40 1320}           G p       {deci_lrclk_in}
deci_sclk_in   40.000   {20 40}             G p       {deci_sclk_in}
intp_lrclk_in 2560.000  {40 1320}           G p       {intp_lrclk_in}
intp_sclk_in   40.000   {20 40}             G p       {intp_sclk_in}
--------------------------------------------------------------------------------

Generated     Master         Generated      Master         Waveform
Clock         Source         Source         Clock          Modification
--------------------------------------------------------------------------------
U1/mclk       mclk           {U1/mclk U2/mclk}
                                            clk            edges( 1 2 3 )
clk_cic_first_dac
              U2/U1/clk_div16
                             {U2/U1/clk_cic_first}
                                            clk_div16_dac  edges( 1 2 3 )
clk_ciccomp   U1/U1/clk_div32_w
                             {U1/U1/clk_ciccomp}
                                            clk_div32_w    edges( 1 2 3 )
clk_ciccomp_dac
              U2/U1/clk_div32
                             {U2/U1/clk_ciccomp}
                                            clk_div32_dac  edges( 1 2 3 )
clk_div2      U1/U1/clkb     {U1/U1/clk_div2 U1/U2/sd_clk_div2}
                                            clkb           edges( 2 4 6 )
clk_div2_dac  U2/U1/clkb     {U2/U1/clk_div2 U2/U2/sd_clk_div2}
                                            clkb_dac       edges( 2 4 6 )
clk_div4      U1/U1/clk_div2 {U1/U1/clk_div4 U1/U2/sd_clk_div4}
                                            clk_div2       edges( 2 4 6 )
clk_div4_dac  U2/U1/clk_div2 {U2/U1/clk_div4 U2/U2/sd_clk_div4}
                                            clk_div2_dac   edges( 2 4 6 )
clk_div8      U1/U1/clk_div4 {U1/U1/clk_div8}
                                            clk_div4       edges( 2 4 6 )
clk_div8_dac  U2/U1/clk_div4 {U2/U1/clk_div8}
                                            clk_div4_dac   edges( 2 4 6 )
clk_div16     U1/U1/clk_div8 {U1/U1/clk_div16}
                                            clk_div8       edges( 2 4 6 )
clk_div16_dac U2/U1/clk_div8 {U2/U1/clk_div16}
                                            clk_div8_dac   edges( 2 4 6 )
clk_div32_dac U2/U1/clk_div16
                             {U2/U1/clk_div32}
                                            clk_div16_dac  edges( 2 4 6 )
clk_div32_w   U1/U1/clk_div16
                             {U1/U1/clk_div32_w}
                                            clk_div16      edges( 2 4 6 )
clk_div64_dac U2/U1/clk_div32
                             {U2/U1/clk_div64}
                                            clk_div32_dac  edges( 2 4 6 )
clk_div64_w   U1/U1/clk_div32_w
                             {U1/U1/clk_div64_w}
                                            clk_div32_w    edges( 2 4 6 )
clk_div128_dac
              U2/U1/clk_div64
                             {U2/U1/clk_div128}
                                            clk_div64_dac  edges( 2 4 6 )
clk_div128_w  U1/U1/clk_div64_w
                             {U1/U1/clk_div128_w}
                                            clk_div64_w    edges( 2 4 6 )
clk_halfband  U1/U1/clk_div64_w
                             {U1/U1/clk_halfband}
                                            clk_div64_w    edges( 1 2 3 )
clk_halfband_dac
              U2/U1/clk_div64
                             {U2/U1/clk_halfband}
                                            clk_div64_dac  edges( 1 2 3 )
clkb          U1/mclk        {U1/U1/clkb U1/U2/sd_clk}
                                            U1/mclk        edges( 2 3 4 )
clkb_dac      U2/mclk        {U2/U1/clkb U2/U2/sd_clk}
                                            U1/mclk        edges( 2 3 4 )
deci_lrclk_in U1/U1/clkb     {deci_lrclk_in}
                                            clkb           edges( 2 66 130 )
deci_sclk_in  U1/U1/clkb     {deci_sclk_in} clkb           edges( 1 2 3 )
intp_lrclk_in U2/U1/clkb     {intp_lrclk_in}
                                            clkb_dac       edges( 2 66 130 )
intp_sclk_in  U2/U1/clkb     {intp_sclk_in} clkb_dac       edges( 1 2 3 )
--------------------------------------------------------------------------------
1
dc_shell>


Encounter 用 report_clocks 命令, 也能显示那些generated clocks。




您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-2 16:08 , Processed in 0.028360 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表