​数字IC设计基本概念之多时钟设计​

当设计中使用了多个时钟时,这些时钟域之间的关系可能是synchronousasynchronous或者exclusive的。如下所示:

Synchronous:

Asynchronous:

Exclusive:

需要人为地指定设计中时钟之间的关系,EDA工具才能正确地分析不同时钟域之间的路径。

Synchronous Clocks

如果两个时钟共享一个共同的时钟源,并且有固定的相位关系,则两个时钟相互同步。 除非特别指定,否则EDA工具会假设任意两个时钟是同步的。如下所示:

create_clock -period 4 -name CK1 -waveform {0 2}
create_clock -period 4 -name CK2 -waveform {1 3}
create_clock -period 6 -name CK3 -waveform {2 3}
 

以上三个时钟CK1,CK2,CK3在时间0时刻同步。

在实际的设计阶段,需要通过set_clock_groups -logically_exclusiveset_false_path命令指定不同时钟之间的非同步关系。

Asynchronous Clocks
如果在设计中两个时钟域不相互通信,则它们是异步的。例如,片上振荡器产生的时钟与从外部进入芯片的系统时钟异步。两个时钟域中的时钟边沿可以在任何时间发生,没有任何关系。 在这种情况下,

EDA不会检查由一个时钟触发并由另一个时钟捕获的时序路径,就像在两个时钟之间声明false path。

要声明两个时钟之间的异步关系,使用set_clock_groups -asynchronous命令。

Exclusive Clocks

如果两个时钟不会交互,则它们是exclusive的。 例如,电路可能将两个不同的时钟信号复用到一个时钟线上,其中一个是用于正常操作的快速时钟,另一个是低功耗运行的慢速时钟。在任何给定的时间,只有两个时钟中的一个被使能,所以两个时钟不会交互。

为了防止EDA工具花时间去检查exclusive clocks时钟之间的时序关系,你可以声明时钟之间的false path或使用set_clock_groups -logically_exclusive命令将时钟声明为exclusive。否则,你可以使用case analysis来禁用您不想包含在当前的时钟。

声明时钟CK1和CK2是exclusive的:

set_clock_groups -logically_exclusive  -group {CK1} -group {CK2}

这会使EDA工具忽略从CK1时钟域开始到CK2时钟域结束和从CK2时钟域开始到CK1时钟域结束的任何时序路径。

这就类似于,在CK1至CK2和CK2至CK1之间设置了一个false path。

可以在每个组中指定多个时钟。例如,声明时钟CK1、CK2和CK3、CK4之间是exclusive的:

set_clock_groups -logically_exclusive -group {CK1 CK2} -group {CK3 CK4}

如果指定两个以上的组,则每个组相对于另一个组是exclusive的:

set_clock_groups -logically_exclusive -group {CK1 CK2} -group {CK3 CK4} -group {CK5}

如果仅指定一个组,则该组对于所有其他时钟是exclusive的:

set_clock_groups -logically_exclusive -group {CK1 CK2}

也可以选择为时钟组指定一个名称:

set_clock_groups -logically_exclusive -name EX1  -group {CK1 CK2} -group {CK3 CK4}

时钟组可以是物理exclusive,也可以是逻辑exclusive。物理exclusive时钟之间没有串扰,也没有逻辑互动。在这种情况下,使用-physically_exclusive选项而不是-logically_exclusive选项。这可以防止工具执行时钟网络之间的串扰分析。

使用get_clock_relationship命令报告时钟之间的关系:

get_clock_relationship {CK1 CK2}

要删除时钟分组声明,使用remove_clock_groups命令:

remove_clock_groups -logically_exclusive -name EX1

删除使用set_clock_groups命令进行的所有exclusive时钟分组声明:

remove_clock_groups -logically_exclusive –all

例1:四个时钟和一个选择信号

考虑具有四个时钟CK1,CK2,CK3,CK4的电路示例。默认情况下,EDA工具分析所有时钟组合之间的相互作用。但是,SEL逻辑在任意时刻只会选择两个时钟,CK1和CK3或CK2和CK4。

防止在无关时钟之间进行检查的一种方法是设置false path。例如:

set_false_path -from CK1-to CK2
set_false_path -from CK2 -to CK1
set_false_path -from CK3 -to CK4
set_false_path -from CK4 -to CK3
set_false_path -from CK1-to CK4
set_false_path -from CK4 -to CK1
set_false_path -from CK2 -to CK3
set_false_path -from CK3-to CK2

在这种情况下,EDA工具会分析所有时钟的有效组合,而忽略无效的组合。

另一种方法是使用case analysis,在SEL输入上设置逻辑值0或1,

它检查SEL = 0或SEL = 1的特定情况的时间。例如:

set_case_analysis 0 [get_ports SEL]

SEL = 0时,只有CK1和CK3有效,CK2和CK4被忽略。如果你想分析两种情况下,需要进行两次分析:一次SEL = 0,另一次SEL = 1。

另一种实现相同效果的方法是使用set_disable_timing命令。例如,禁用从CKP2和 CKP4端口开始的时序路径检查:

set_disable_timing [get_ports {CKP2 CKP4}]

另一种方法是指定哪些时钟可以同时有效,以便EDA工具分析所有有效路径。例如:

set_clock_groups -logically_exclusive -name E1 -group {CK1 CK3} -group {CK2 CK4}
set_active_clocks [all_clocks]

如果您只想考虑SEL = 0的情况,可以使用下列命令:

set_clock_groups -logically_exclusive -name E1 -group {CK1 CK3} -group {CK2 CK4}
set_active_clocks {CK1,CK3}

设置时钟CK1和CK3有效,意味着CK2和CK4无效。

例2:四个时钟和两个选择信号

下面考虑一个电路示例,其中包含两个独立的时钟选择输入S1和S2:

CK1和CK2之间以及CK3和CK4之间的路径无效,但所有其他路径组合都是可能的。

要检查所有有效路径,同时避免无效路径,可以声明false paths:

set_false_path -from CK1-to CK2
set_false_path -from CK2 -to CK1
set_false_path -from CK3 -to CK4
set_false_path -from CK4 -to CK3

另一种方法是使用case analysis并在S1和S2上设置逻辑值来检查特定的情况:

set_case_analysis 0 [get_ports S1]
set_case_analysis 0 [get_ports S2]

如果使用case analysis分析所有四个案例,则需要进行四次分析,

使用S1-S2 = 00,01,10和11.

另一种方法是使用set_clock_groups和set_active_clocks命令。 例如,

set_clock_groups -logically_exclusive -name mux1 -group {CK1} -group {CK2}
set_clock_groups -logically_exclusive -name mux2 -group {CK3} -group {CK4}
set_active_clocks {CK1,CK2,CK3,CK4}

EDA工具分析从CK1到CK3和CK4和从CK2到CK3和CK4的所有有效路径(反方向也是有效的)。

如果只想考虑S1-S2 = 00的情况,可以使用

set_active_clocks命令:

set_clock_groups -logically_exclusive -name mux1 -group {CK1} -group {CK2}
set_clock_groups -logically_exclusive -name mux2 -group {CK3} -group {CK4}
set_active_clocks {CK1,CK3}

多路复用时钟Exclusivity点

芯片设计通常在不同的时间,对于不同的电路会服用不同的时钟。例如,有时候在工作的高性能模式,有时候降低工作频率节省功耗。 多路复用器(MUX)单元用于选择这些时钟,如下图所示:

默认情况下,EDA工具会考虑触发和捕获时钟的所有组合,例如由CK1触发数据并由CK2捕获数据。 但是,对于如图所示时钟复用器,在任何给定时间,三个时钟中只有一个可以在路径上运行。它们是exclusive 时钟。

指定exclusive时钟的一种方法是设置“exclusivity points”以标记引脚,在引脚上一次只能传播一个时钟,如下所示:

对于复杂的时钟MUX,此方法更加方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值