create_generated_clock
clk_usart是外部输入时钟,clk_cnt32[4]是由clk_usart经32分频后的时钟(计数器分频),clk_cnt20[3]是由clk_cnt32[4]经20分频后的时钟(计数器分频),clk_usart_div2是由clk_usart经2分频后的时钟,在用design compiler 进行综合时,我写的部分脚本如下:
create_clock -period 10 -waveform {0 5} clk_usart
set_clock_latency 0.1 clk_usart
set_clock_uncertainty -setup 0.5 clk_usart
set_clock_uncertainty -hold 0.2 clk_usart
set_clock_transition 0.3 clk_usart
set_dont_touch_network clk_usart
create_generated_clock -name clk_cnt32[4] -source clk_usart -divide_by 32 [get_pins clk_cnt32_reg[4]/Q]
create_generated_clock -name clk_cnt20[3] -source [get_attribute [get_clocks clk_cnt32[4]] sources] -master_clock clk_cnt32[4] -divide_by 20 [get_pins clk_cnt20_reg[3]/Q]
create_generated_clock -name clk_usart_div2 -source clk_usart -divide_by 2 [get_pins clk_usart_div2_reg/Q]
set_dont_touch_network clk_cnt20[3]
set_dont_touch_network clk_cnt32[4]
set_dont_touch_network clk_usart_div2
综合时出现如下警告,该如何处理呢:
Warning: A non-unate path in clock network for clock 'clk_cnt32[4]'
from pin 'add_16/*cell*12/Y' is detected. (TIM-052)
Warning: A non-unate path in clock network for clock 'clk_cnt20[3]'
from pin 'add_24/U1_1_3/S' is detected. (TIM-052)
Warning: A non-unate path in clock network for clock 'clk_cnt20[3]'
from pin 'add_24/*cell*56/Y' is detected. (TIM-052)
Warning: A non-unate path in clock network for clock 'clk_cnt32[4]'
from pin 'add_16/*cell*12/Y' is detected. (TIM-052)
Warning: A non-unate path in clock network for clock 'clk_cnt20[3]'
from pin 'add_24/U1_1_3/S' is detected. (TIM-052)
Warning: A non-unate path in clock network for clock 'clk_cnt20[3]'
from pin 'add_24/*cell*56/Y' is detected. (TIM-052)
代码有问题。理论上最好时钟电路只有寄存器,buffer,inverter,如果有别的多输入组合逻辑,分析的时候不知道怎样trace clock
谢谢linuxluo的帮忙,再问一下,这种警告严重吗?如果严重的话,像我这种情况,该如何修改呢?(我现在用的是计数器,分别进行了32分频和20分频),麻烦各位帮帮忙。
基本同意2楼的看法.
请小编仔细查下rtl, 分析一下为什么时钟路径上会有多输入的组合逻辑, 如果是功能上的需要的话, 这些warning是可以waive的.
路过!
飘过~
正在研究……
引用静态时序分析的一段话或许能指出你的问题所在:
a generated clock an have another generated clock as its source, that is, one can have generated clocks of generated clocks, and so on. however, a generated clock can have only one master clock.
DC\PT能够对付gated clock,但是不能对付non_unate gated clock.因为这样会产生不可预计的clock.我会发个东芝的pt文档,仅供参考。
[quote][/quote]
我记得有个命令直接可以压制的
我也碰到了这样的问题 不知道怎么办
能传我一份看看嘛?
学习一下
stay tune
恩,还是有启发的
出现这种问题是工具不能确认到底该走哪一条路径了
没关系
学习。
应该是RTL有问题。用counter做分频是没有问题的。
请问一下
create_generated_clock -name clk_cnt32[4] -source clk_usart -divide_by 32 [get_pins clk_cnt32_reg[4]/Q]命令中红色clk_cnt32_reg[4]/Q指示的位置是rtl code中定义的clk_cnt32_reg的输出端Q,还是生成的网表中的位置?
谢谢!
见到过set_dont_touch_network [get_pins MUX2/Y], 同样get_pins后面的位置MUX2/Y不清楚是rtl code中的还是网表中的?
网表中的位置
在DC综合前这么写好像也可以被接受
1)2个clk之间的关系不正确
2)查u9到clk256_reg之间为什么这么大的延迟
你的rtl的20分频会不会逻辑太复杂了,32分频应该是直接从counter上面抽出来的,应该是没有什么问题吧。
而且从警告来看,是你的32分频的时钟和20分频的两个时钟之间有问题,会不会是你在脚本的source时钟定义上面有什么问题;
整个设计的master时钟应该是只有一个就是你的clk_usart
小编的这个写法也比较特殊,可能你是在综合一次后才可以这么写吧,不然rtl里面很难考虑到综合后的这个说明情况,小编可以尝试下对所有的时钟约束用rtl中的名字来写。
这是时序太离谱了点
会不会是数据的触发上是posedge或者negedge的问题,我以前也遇到这个问题。
我的情况好像是rise-fall的时序检查,也有这个问题。
但是我是因为分频的时候把一个8分频的时钟取反输出,后来我去掉了这个取反,rise-fall检查就没有slack的违背问题。
man TIM-052是具体是怎么说的
在不影响你设计的functional mode的情况下
可以用set_clock_sense和set_case_analysis解决
man TIM-052是具体是怎么说的
在不影响你设计的functional mode的情况下
可以用set_clock_sense和set_case_analysis解决
你好,问问你为什么要给每个时钟都设置dont_touch_network属性?
小编,最后怎么处理掉这个问题?