静态时序分析:无法满足的生成时钟(TIM-255警告、UITE-461或PTE-075错误)

发布于:2025-03-12 ⋅ 阅读:(11) ⋅ 点赞:(0)

相关阅读

静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482


        在阅读本文前,强烈建议首先阅读介绍生成时钟的文章,尤其是其中关于时钟极性和反相的相关内容。

静态时序分析:SDC约束命令create_generated_clock详解(上)https://chenzhang.blog.csdn.net/article/details/134236547        有时在Design Compiler中创建生成时钟并将主时钟设置为传播时钟后,使用update_timing或report_timing命令时会出现如下警告:

Warning: Sense relationship for generated clock (*** with source pin ***) (rise_edge) is not satisfied. (TIM-255)
Warning: Sense relationship for generated clock (*** with source pin ***) (fall_edge) is not satisfied. (TIM-255)

        这个警告在PrimeTime被升级为了如下两类更加细化的错误:

Error: Generated clock 'clk1' has no path to its master clock. (PTE-075)
Error: Generated clock '*** with source pin ***' 'rise_edge' is not satisfiable; zero source latency will be used. (UITE-461)
Error: Generated clock '*** with source pin ***' 'fall_edge' is not satisfiable; zero source latency will be used. (UITE-461)

        首先回顾一下create_generated_clock命令的-source选项,这个选项指明生成时钟是由哪个引脚或端口上的时钟派生的,这个原时钟被称为master clock(注意,这里不一定要master clock的源对象是该引脚或端口,该引脚或端口也不需要是生成时钟源的扇入,唯一的要求是:master clock要能传播至该引脚或端口,这里需要注意的是时钟无法穿过寄存器进行传播),该选项只是用于确定master clock及其极性。

第一种可能

图1 第一种情况

        第一种情况是最简单的,如图1所示。由于创建生成时钟并未要求master clock能传播至生成时钟的源对象,如果使用下面的命令创建时钟和生成时钟,创建时钟时并不会有任何问题,此时的时钟报告如图2所示。

create_clock -period 10 [get_port clk]
create_generated_clock -source [get_port out] -divide_by 2 [get_port clk1]

图2 时钟报告

        但这是有问题的,因为显然master clock源对象并不存在任何时序弧到生成时钟源对象(这里我们避免使用传播这个词,因为时钟无法穿过寄存器进行传播,但计算延迟可以穿过寄存器)。用set_propagated_clock命令将master clock设置为传播时钟后,静态时序分析器会尝试计算master clock到生成时钟的延迟,此时如果使用update_timing或report_timing命令时会出现警告或错误,对于Design Compiler,会出现TIM-255警告;而对于PrimeTime,则会出现PTE-075错误。

第二种可能

图3 第二种情况

        在第二中情况下,时钟路径上存在一个反相器,这就会导致出现时钟极性的翻转,此时-source选项指定的引脚或端口就会产生影响,如果使用端口clk,则使用了正极性的master clock;如果使用引脚U5/Y或引脚out1_reg/CK,则使用了负极性的master clock。

        这里存在一个隐性要求,如果使用了正极性的master clock,则要求从master clock源对象上升沿开始存在时序弧到生成时钟源对象;如果使用了负极性的master clock,则要求从master clock源对象下降沿开始存在时序弧到生成时钟源对象。

        使用下面的命令,使用正极性的master clock。

create_clock -period 10 [get_port clk]
create_generated_clock -source [get_port clk] -divide_by 2 [get_pin out1_reg/Q]

        但从图3中可得,master clock源对象上升沿并不能触发out1_reg。用set_propagated_clock命令将master clock设置为传播时钟后,静态时序分析器会尝试计算master clock到生成时钟的延迟,此时如果使用update_timing或report_timing命令时会出现警告或错误,对于Design Compiler,会出现TIM-255警告;而对于PrimeTime,则会出现UITE-461错误。

        使用下面的命令,使用负极性的master clock,则不会有任何问题。

create_clock -period 10 [get_port clk]
create_generated_clock -source [get_port U5/Y] -divide_by 2 [get_pin out1_reg/Q]

        需要注意的是,以上的讨论仅针对触发器为上升沿触发的情况,如果触发器为下降沿触发,则情况完全相反。 

        顺带一提,report_transitive_fanout -clock_tree命令可以显示时钟树的的传播过程及其中的极性。