深度解析create_clock与create_generated_clock的区别

深度解析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]

http://www.52-ic.com/100.html

你可能感兴趣的:(verilog)