hanyang1212的个人空间 https://blog.eetop.cn/hanyang [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

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

已有 1484 次阅读| 2020-5-16 01:10 |系统分类:芯片设计

当设计中使用了多个时钟时,这些时钟域之间的关系可能是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,此方法更加方便。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 17

    粉丝
  • 4

    好友
  • 22

    获赞
  • 38

    评论
  • 1866

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-29 06:41 , Processed in 0.016411 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部