• 注册
  • 查看作者
  • 深度解析create_clock与create_generated_clock的区别

    吾爱IC社区将用本文为各位揭秘create_clock与create_generated_clock之间的联系和区别,为何要单独create一个generated_clock,以及这两种方式create的clock,它们clock之间的联系以及timing check。

     

    create_generated_clock 是用来说明generated clock与source clock的相位(边沿)关系,同时根据source  clock找到master clock以及source clock 和master clock的关系,
    最终会确定generated clock和master clock的相位(边沿)关系。

    所以在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的关系,如果根据声明找到的generated clock和master clock的关系和实际的关系不一致,否则会造成一些分析错误。

    如:sta的时候找不到generated clock和source clock相位关系,会将generated clock的source latency 设置为0

    如下图:

    如果直接声明如下,

    create_clock -period 10 clk

    create_generated_clock -name CLKdiv2 \

    -divide_by 2 \

    -source clk \

    [get_pins Udiv/Q]

    那么根据声明,generated 和master clock的关系如下(工具会根据source clock 找到master clock,并确定source clock 和master clock的关系,当前source clock即master clock)

    上面的STA 分析其实是错误,可以看到timing report:

    而实际上的,generated 和 master clock的关系如下

    对应的timing report:

    解决方法有2种:
    1.  改变generated clock的source,即让generated clock和source clock的路径唯一且单一(单一是指,声明的相位边沿关系和实际的相位边沿关系一致)。一般做法就是将source clock设置在触发器的clock端。如下:

    create_generated_clock -name CLKdiv2 \

    -divide_by 2 \

    -source [get_pins Udiv/CP] \

    [get_pins Udiv/Q]

    这样generated clock和source clock的关系和声明的一直。工具会根据声明的source clock 找到它的master clock,同时确定source clock和master clock相位相反的关系,由此就确定了generated clock和master clock的关系。

    2. 直接声明generated clock和master clock的相位边沿关系。如下:
    create_generated_clock \
    -name CLKdiv2 \
     -edges {2 4 6}
     -source CLK \
    [get_pins Udiv/Q]

  • 0
  • 3
  • 0
  • 1.7k
  • 0
    好文章!666,学习了
  • 0
    Thanks for finally talking about >深度解析create_clock与create_generated_clock的区别 - 吾爱IC社区 <Loved it! 网站链接
  • 单栏布局 侧栏位置: