|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2011-9-23 10:03:40
|
显示全部楼层
本帖最后由 jun_dahai 于 2011-9-28 17:33 编辑
寻了个方法如下:
首先,在不设置TC(timing constraints)情况下,进行一次编译(compile)
然后,从生成的网表(netlist)中,找出相对应的寄存器,使用create_generated_clock设置时钟约束
最后,将这些约束添加进来,再进行一次编译(compile_ultra)
e.g. DFF div2_reg (.D(n0), .CK(Clk), .Q(div2), .QN(n0));
DFF div4_reg (.D(n1), .CK(div2), .Q(div4), .QN(n1));
Note: DFF -> posedge
div2_reg:
create_clock -name Clk -period 1000 -waveform {0 500} [get_ports Clk]
set_clock_uncertainty -setup 5 Clk
set_clock_uncertainty -hold 1 Clk
set_propagated_clock Clk
div4_reg:
create_generated_clock -name div2_reg -source Clk -edges {1 3 5} div2
set_clock_uncertainty -setup 4 div2_reg
set_clock_uncertainty -hold 0.5 div2_reg
set_propagated_clock div2_reg
Note:
1、先compile一次,再compile_ultra一次,一方面可以避免formal verification不通过,一方面可以减少一定的面积
2、对于复杂的异步逻辑,只能通过post-simulation确保时序没有问题 |
|