讨论下STA analysis时的一个Error
时钟结构为:
这里IP输出的时钟可以两个可供变化的时钟,可以输出100M和50M,但是在ICG的输出端我们只希望输出一个准确的时钟,如50M,所以采用ICG中的Enable信号来控制,但是我需要在综合约束时,ClkG是按照50M去约束(因为这个时钟后面接的很多模块跑不到100M),而ClkS是按照100M去约束。(因为ClkS还需要给其他模块使用)。
我的约束为:
create_clock [get_pins uIP/ClkOut] -name ClkS -period 10 -waveform {0 5}
create_generated_clock [get_pins uICG/uCKLNQHVTD4/Q]-name ClkG-source [get_pins uIP/ClkOut]-master_clock ClkS-divide_by 2-add
在综合的时候没有报出任何关于这个时钟定义的error或warning,且拿综合网表进行STA时也没有报出任何error和warning。但是在进行PR时,却报出这样的错误。
**ERROR: (TA-152):A latency path from the 'Rise' edge of the master clock 'ClkS' at source pin uIP/ClkOut' to the 'Fall' edge of generated clock 'ClkG' at pin uICG/uCKLNQHVTD4/Q' cannot be found. You must modify your create_generated_clock constraint to be consistent with the network topology. The analysis will continue using 0ns source latency for generated clock 'ClkG'. For backward compatibility with earlier releases or to remove the edge-to-edge sufficiency checking, you should set the global 'timing_enable_genclk_edge_based_source_latency' to false
我没有去管这个error,生成PR网表,用这个网表使用PrimeTime进行STA时,发现也有报下面的error:
Error: Generated clock 'ClkG with source pin uICG/uCKLNQHVTD4/Q' 'fall_edge' is not satisfiable; zero source latency will be used. (UITE-461)
初步分析了下。由于我是在ICG后面定义的时钟,而且ICG是能够直接穿过时钟的,因此,即使定义时钟也不需要divide_by 2的。所以导致这里出现这个error?但是由于我的电路设计特点要求我在ICG的后面定义一个ClkS(100M)的二分频时钟,且ClkS也需要定义为100M,这个时钟应该怎么定义呢?
还有在STA分析时出现这个error是否有影响?因为我在时序报告时,发现时钟路径上是有从IP输出端经过ICG再到后面逻辑模块的时钟路径,所以看起来是不是不影响时序分析?
求帮助?
图上传有问题,看不清!
我也不知道图为什么上传成这样,我再描述下吧,我的电路中IP产生一个时钟源(它可以产生两个时钟频率,一个是100M,另一个是50M),这个时钟源头的时钟经过一个ICG给后面的逻辑模块使用,但是由于后面的逻辑模块不能工作在100M,所以不能按照100M去约束它,所以需要在ICG这个地方进行分频。注意这里的ICG的使能信号可以监测到IP输出的时钟是100M还是50M,如果是50M,那么ICG就不会进行分频,否则输出100M时,就通过ICG的使能信号产生一个分频的时钟,这是我们SOC上的应用,所以我这个地方就需要在ICG的后面定义为IP输出时钟的二分频。结果就出现了上述的ERROR。
大家有遇到这样的问题吗?
求问最后解决没有呀,也是一样的问题,不知道从哪里改
IP处创建50、100两个时钟,ICG处以IP50为Master Gen一个Comb时钟,100的时钟就自动不穿透ICG了。
icg 挡不住clk穿过去的,因此icg后面没必要创建generated clk,
前端总是希望clk越多描述的越清楚,但是后端希望clk越少越好,尽量简化
遇到同样的问题,该怎么破呢? 头疼!
后来怎么样了呢?
试试create_generated_clock 的选项 -combinational,还有你定义的generated_clock不需要-add,这个选项是在同一个object上定义多个时钟才需要。