3.4 时序模型 - 时序逻辑单元

考虑如下图 3-8 所示的时序逻辑单元的时序弧:

 

图 3-8

 

对于同步(synchronous)输入,例如引脚 D(或 SI,SE),存在以下时序弧:

 

  • 建立(Setup)时间检查时序弧(包括上升沿和下降沿)保持(Hold)时间检查时序弧(包括上升沿和下降沿)

 

对于异步(asynchronous)输入,例如引脚 CDN,存在以下时序弧:

  • 恢复(Recovery)时间检查时序弧撤销(Removal)时间检查时序弧

 

对于触发器的同步输出,例如引脚 Q 或 QN,存在以下时序弧:

  • 时钟引脚(CK)到输出端口(Q 或 QN)的传播延迟时序弧(包括上升沿和下降沿)

 

所有同步时序弧均相对于时钟的有效沿(active edge),即时序逻辑单元捕获数据的时钟沿。此外,时钟引脚和异步引脚(如复位引脚)还需要进行脉冲宽度(pulse width)时序检查。各种时序检查如下图 3-9 所示:

 

图 3-9

 

3.4.1 同步时序检查:建立时间与保持时间

需要进行建立时间和保持时间的同步时序检查,才能确保数据能够正确通过时序单元传播。这些时序检查可验证输入的数据在时钟有效沿上是否为确定的逻辑状态,并且在有效沿上将正确的数据锁存下来。这些时序检查也可以验证输入的数据在有效时钟沿附近是否稳定:输入的数据必须在有效时钟沿之前保持稳定的最短时间称为建立时间(setup time)。这是根据最晚的(the latest)数据信号超过其阈值(通常为 Vdd 的 50%)到有效时钟沿超过其阈值(通常为 Vdd 的 50%)的时间间隔测量的。同样,保持时间(hold time)是在时钟有效沿之后输入的数据必须保持稳定的最短时间,这也是根据有效时钟沿超过其阈值到最早的(the earliest)数据信号超过其阈值的时间间隔来度量的。如前文所述,时序单元的时钟有效沿是指使时序单元捕获数据的上升沿或下降沿。

 

建立时间与保持时间检查示例

时序单元同步引脚的建立时间和保持时间约束通常用二维表格来描述,如下所示。下面的例子展示了触发器数据引脚的建立时间和保持时间时序信息:

 

 

上面的例子展示了相对于时序单元时钟引脚 CK 的上升沿,在输入引脚 D 上的建立时间和保持时间约束。二维表格模型是根据约束引脚 constrained_pin(D)和相关引脚 related_pin(CK)处的过渡时间确定的,二维表格的查找是基于库中描述的模板 setuphold_template_3x3 的。对于上述示例,查找表模板 setuphold_template_3x3 如下所示:

 

 

与前面示例中一样,表中的值如嵌套循环一样被指定,其中第一个索引 index_1 是外部循环变量,第二个索引 index_2 是内部循环变量, 以此类推。因此,当 D 引脚的上升沿过渡时间为 0.4ns,CK 引脚的上升沿过渡时间为 0.84ns 时,D 引脚上升沿的建立时间约束为 0.112ns,该值是从 rise_constraint 表中读取的。对于 D 引脚的下降沿,建立时间约束将检查建立时间表中的 fall_constraint 表。在表中查找过渡时间不与索引值相对应的建立时间和保持时间约束时,可使用章节 3.2 中所描述的非线性模型查找的一般过程。

 

请注意,建立时间约束的 rise_constraint 和 fall_constraint 表是指 constrained_pin。所用的时钟过渡时间由 Timing_type 决定,它会指定该时序逻辑单元是上升沿触发还是下降沿触发。

 

建立时间和保持时间检查里的负值

请注意,上面示例中的某些保持时间值是负数。这是可以接受的,这种情况通常发生在触发器的引脚到数据内部锁存点的路径长于相应的时钟路径时。因此,负的保持时间检查意味着触发器的数据引脚可以在时钟引脚之前改变,并且仍然满足保持时间的检查要求。

 

触发器的建立时间值也可以为负。这意味着触发器的数据引脚可以在时钟引脚之后改变,并且仍然满足建立时间的检查要求。

 

建立时间和保持时间可以都为负吗?不行!为使建立时间和保持时间检查相一致,建立时间和保持时间的数值总和应为正。因此,如果建立(或保持)时间检查包含负值,则相应的保持(或建立)时间检查应为正值,且足够大,以使建立时间加上保持时间之和是一个正数。具有负的保持时间值的示例如图 3-10 所示,由于建立时间检查会先于保持时间检查,所以此时的建立时间加上保持时间显然是一个正数。建立时间加上保持时间即为要求数据信号稳定的区域的宽度。

 

图 3-10

 

对于触发器,在扫描数据(scan data)输入引脚上设置一个负的保持时间会很有帮助,这样可以给予时钟偏斜(clock skew)一定的灵活性,并且可以消除当扫描模式(scan mode)下保持时间发生违例时插入缓冲器(buffer)的需要(扫描模式是将触发器串联在一起形成一条扫描链的模式,触发器的输出通常连接到串联的下一个触发器的扫描数据输入引脚,这些连接是用于芯片测试的)。

 

与同步数据输入引脚上的建立时间或保持时间检查类似,对异步引脚进行的时序约束检查将在下个小节中介绍。

 

3.4.2 异步时序检查

恢复时间和撤销时间检查

诸如异步复位(clear)或异步置位(set)之类的异步引脚会覆盖单元的任何同步行为。当异步引脚处于有效(active)状态时,输出将由异步引脚控制,而不是由时钟锁存到的输入数据控制。但是,当异步引脚变为无效(inactive)状态时,时钟的有效边沿将开始锁存输入的数据。异步恢复(recovery)时间和撤销(removal)时间约束检查将验证异步引脚在下一个时钟有效沿处是否已明确返回到了无效状态。

 

恢复时间是指异步输入被置为无效(de-asserted)后在下一个时钟有效沿之前需要保持稳定的最短时间。

 

同样,撤销时间是指在一个有效的时钟沿之后,异步引脚必须保持有效状态的最小时间,即在有效时钟沿之后必须经过一段撤销时间才能够将异步引脚置为无效状态。

 

异步恢复时间和撤销时间检查将分别在 8.6 节和 8.7 节中介绍。

 

脉冲宽度检查

除了同步和异步时序检查外,还有一项检查去确保逻辑单元输入引脚上的脉冲宽度满足最低要求。例如,如果时钟引脚上的脉冲宽度小于指定的最小值,则时钟可能无法正确锁存数据。也可以为相关的同步和异步引脚指定脉冲宽度检查(pulse width check),并且可以为高脉冲和低脉冲分别指定最小脉冲宽度检查。

 

恢复时间、撤销时间和脉冲宽度检查示例

下面给出了触发器的异步清零引脚 CDN 的恢复时间、撤销时间和脉冲宽度检查的示例,其中恢复时间和撤销时间检查还与时钟引脚 CK 有关。由于恢复时间和撤销时间检查是针对异步引脚被置为无效的时刻,因此在以下示例中仅存在上升约束。CDN 引脚的最小脉冲宽度检查用于低脉冲,这是由于 CDN 引脚为低电平有效,因此该引脚上的高脉冲宽度没有限制,因此未指定。

 

 

3.4.3 传播延迟

时序单元的传播延迟(propagation delay)是指从时钟的有效沿到输出的上升沿或下降沿。以下是一个时钟下降沿触发的触发器从时钟引脚 CKN 到输出 Q 的传播延迟弧的示例。这是一个非单边类型(non-unate)的时序弧,因为时钟的有效沿会导致输出引脚 Q 的电平上升或下降。

 

 

与前一章中的示例一样,输出的传播延迟会根据输入过渡时间和输出负载电容以二维表格的形式呈现。但是在此示例中,由于触发器是时钟下降沿触发的,因此要使用的输入过渡时间是 CKN 引脚的下降过渡时间,这在上面的示例中可以从 Timing_type 字段中看出,上升沿触发的触发器将把 rising_edge 指定为其 timing_type。

 

 

3.5 状态相关的时序模型

在许多组合逻辑模块中,输入和输出之间的时序弧取决于模块中其他引脚的逻辑状态。输入和输出引脚之间的这些时序弧可以是正单边类型时序弧、负单边类型时序弧也可以既是正单边类型又是负单边类型时序弧。异或门(xor)以及同或门(xnor)单元就是一个例子,其输入到输出的时序弧可以是正单边类型的也可以是负单边类型的。在这种情况下,其时序行为可能会有所不同,具体取决于该模块其他输入的状态。通常,取决于引脚状态的多个时序模型被称为状态相关的时序模型(state-dependent models)。

 

考虑一个两输入异或门单元的例子。当另一个输入 A2 为逻辑 0 时,从输入 A1 到输出 Z 的时序路径为正单边类型;当输入 A2 为逻辑 1 时,从 A1 到 Z 的路径为负单边类型。这两个时序模型是使用状态相关的时序模型指定的。A2 为逻辑 0 时从 A1 到 Z 的时序模型如下所示:

 

 

使用 when 来指定与状态有关的条件。虽然以上单元模型的片段仅说明了 cell_rise 延迟,但其它时序模型(cell_fall,rise_transition 和 fall_transition)也指定了相同的 when 条件。当 when 中条件改变,如改为 A2 为逻辑 1 这个条件时,会指定另一个独立的时序模型:

 

 

sdf_cond 用于指定生成 SDF 文件时要使用的时序弧的条件,详情参见后面 3.9 节中的示例。

 

状态相关的时序模型可用于各种类型的时序弧,许多时序逻辑单元会使用状态相关的时序模型指定建立时间或保持时间的时序约束。以下是使用状态相关的时序模型进行保持时间约束的扫描触发器(scan flip-flop)的一个示例。在这种情况下,指定了两组时序模型:扫描使能引脚 SE 处于有效状态时的一组,以及扫描使能引脚处于无效状态时的另一组。

 

 

当扫描使能引脚 SE 为逻辑 0 时使用以上时序模型,当 when 中条件为 SE 是高电平时也有类似的时序模型。

 

可以既使用状态相关的时序模型又使用非状态相关的时序模型来指定一些时序关系。在这种情况下,如果单元的状态是已知的并且这个状态包含在状态相关的时序模型之一中,则时序分析将使用状态相关的时序模型。而如果状态相关的时序模型未包含单元的这个状态,则使用来自非状态相关模型的时序。例如考虑一种情况,保持时间约束仅由当 when 条件为 SE 处于逻辑 0 时来指定,而没有为 SE 处于逻辑 1 时指定单独的状态相关模型。在这种情况下,如果 SE 被置为逻辑 1,则将会使用非状态相关时序模型的保持时间约束。而如果没有用于保持时间约束的非状态相关时序模型,那么将没有任何有效的保持时间约束!

 

可以为时序库中的任何属性指定状态相关的模型,因此可以存在功率、漏电功率、过渡时间、上升和下降延迟、时序约束等状态相关的模型。下面给出了一个状态相关的漏电功率模型示例: