相关阅读
实验三、CDC结构分析
本实验旨在帮助用户掌握完整的CDC分析流程,特别是如何排查重汇聚(Convergence)问题和毛刺(Glitch)违规问题,实验将指导用户使用定位器和利用反标信息进行深入分析。
运行VC Spyglass
1、进入实验三的目录。
% cd VC_SpyGlass_Structural_CDC_Lab/Lab3_struct/
2、打开vc_cdc.tcl文件,注意在实验三中使用了check_cdc -type struct命令进行结构性同步检查,这与实验二不同。
check_cdc -type struct
3、使用批处理方式运行VC Spyglass,并通过report_cdc查看违规信息,可以注意到此时出现了名为CONV和GLITCH的阶段。
% vc_static_shell -f vc_cdc.tcl
vc_static_shell> report_cdc
-----------------------------------------------------------------------------
Management Summary
-----------------------------------------------------------------------------
Stage Family Fatals Errors Warnings Infos
----- ---------- -------- -------- -------- --------
SETUP CLKPROP 0 0 1 56
SETUP RESET 0 23 6 9
SYNC CTRLPATH 0 12 0 19
SYNC DATAPATH 0 129 0 9
SYNC UNSYNC 0 37 0 0
CONV COMBCONV 0 5 0 0
CONV NOCONV 0 2 2 0
CONV SEQCONV 0 1 0 0
GLITCH GLITCH 0 5 0 0
----- ---------- -------- -------- -------- --------
Total 0 214 9 93
-----------------------------------------------------------------------------
Tree Summary
-----------------------------------------------------------------------------
Severity Stage Tag Count
-------- ----- ----------------------------------- -----
error CONV CDC_COHERENCY_MULTI_SYNC 2
error CONV CDC_COHERENCY_RECONV_COMB 5
error CONV CDC_COHERENCY_RECONV_SEQ 1
error GLITCH CDC_GLITCH_CTRL 5
error SETUP SETUP_RESET_ASSERT_MISSING 23
error SYNC CDC_UNSYNC_ASYNCRESET 20
error SYNC CDC_UNSYNC_CTRL 12
error SYNC CDC_UNSYNC_DATA 129
error SYNC CDC_UNSYNC_NOSCHEME 17
warning CONV CDC_COHERENCY_BUS_NOCONV 2
warning SETUP SETUP_MULTIPLE_CONSTRAINTS 1
warning SETUP SETUP_RESET_DRIVING_NON_ASYNC_PIN 6
info SETUP SETUP_BBOXPIN_CONSTRAINED 1
info SETUP SETUP_CLOCK_PROPAGATED 12
info SETUP SETUP_DATA_CONSTANT 17
info SETUP SETUP_PORT_CONSTRAINED 23
info SETUP SETUP_PORT_IGNORED 3
info SETUP SETUP_RESET_PROPAGATED 9
info SYNC CDC_SYNC_ASYNCRESET 8
info SYNC CDC_SYNC_CTRL 19
info SYNC CDC_SYNC_DATA 1
-------- ----- ----------------------------------- -----
Total 316
4、调试一个重汇聚违规问题,使用start_gui命令启动GUI
vc_static_shell> start_gui
选择CDC_COHERENCY_MULTI_SYNC标签下的inputA违规项,然后点击窗口中的New Violation Schematic或者右键单击违规并在菜单中选择New Violation Schematic或者使用Ctrl+N快捷键,如图1所示,即可打开原理界面查看该违规的相关情况,如图2所示。
图1 打开违规的原理图
图2 违规的原理图
5、注意到名为CTRL_PATH_SRC和SAME:CTRL_PATH_SRC的定位器指向输入端口inputA,名为CTRL_PATH_SYNC和MULTIPLE:CTRL_PATH_SYNC的定位器指向同步后的信号,这表示一个信号使用两个同步器分别进行了同步。
6、为了启用更多调试信息,点击菜单中的Schematic并选择Annotate Debug Data,或者使用Ctrl+Shift+N快捷键,如图3所示,然后勾选希望在原理图中标注显示的信息(添选Data path Info并点击OK),如图4所示。
图3 打开反标注窗口
图4 反标注窗口
7、在启用调试反标后,用户将会在原理图中看到额外的数据路径、时钟域等信息,如图5所示。
图5 反标注窗口
屏蔽违规
1、Waiver用于屏蔽那些已知问题或已分析过的问题所对应的违规项(标签)。通过引入waiver,可以帮助用户区分哪些违规项还未分析,下面将屏蔽一个GLITCH阶段的违规。首先使用以下命令获取GLITCH阶段违规的详细报告。
vc_static_shell> report_cdc -stage GLITCH -verbose
-----------------------------------------------------------------------------
Management Summary
-----------------------------------------------------------------------------
Stage Family Fatals Errors Warnings Infos
----- -------- -------- -------- -------- --------
GLITCH GLITCH 0 5 0 0
----- -------- -------- -------- -------- --------
Total 0 5 0 0
-----------------------------------------------------------------------------
Tree Summary
-----------------------------------------------------------------------------
Severity Stage Tag Count
-------- ----- ----------------- -----
error GLITCH CDC_GLITCH_CTRL 5
-------- ----- ----------------- -----
Total 5
-----------------------------------------------------------------------------
CDC_GLITCH_CTRL (5 errors/0 waived)
-----------------------------------------------------------------------------
Tag : CDC_GLITCH_CTRL
Description : CDC path contains structure resulting in potential glitch propagation to destination [GlitchDestInfo]
Violation : CDC:284
ReasonInfoList
ReasonInfo
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
ReasonCodeMsg : [ERROR] Glitch caused due to sources from different domain merging
GlitchDestInfo
DestObject : u_ACUS/u_merge_sources/meta/Q
DestObjectType : flop
DestClockInfoList
DestClockInfo
ClockName : clkC
ClockObject : clkC
ClockDomainId : 4
GlitchSourceCount : 2
GlitchSrcInfoList
GlitchSrcInfo
SrcObject : u_ACUS/regD/Q
ReasonCodeList
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
SrcClockInfoList
SrcClockInfo
ClockName : clkB
ClockObject : clkB
ClockDomainId : 3
GlitchSrcInfo
SrcObject : u_ACUS/regS/Q
ReasonCodeList
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
SrcClockInfoList
SrcClockInfo
ClockName : clkA
ClockObject : clkA
ClockDomainId : 2
ContainerInstance : u_ACUS
Module : rule_Ac_unsync01
-----------------------------------------------------------------------------
Tag : CDC_GLITCH_CTRL
Description : CDC path contains structure resulting in potential glitch propagation to destination [GlitchDestInfo]
Violation : CDC:285
ReasonInfoList
ReasonInfo
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
ReasonCodeMsg : [ERROR] Glitch caused due to sources from different domain merging
GlitchDestInfo
DestObject : u_ACS01/u_sync2s/meta/Q
DestObjectType : flop
DestClockInfoList
DestClockInfo
ClockName : clkB
ClockObject : clkB
ClockDomainId : 3
GlitchSourceCount : 2
GlitchSrcInfoList
GlitchSrcInfo
SrcObject : u_ACS01/src/Q
ReasonCodeList
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
SrcClockInfoList
SrcClockInfo
ClockName : clkA
ClockObject : clkA
ClockDomainId : 2
GlitchSrcInfo
SrcObject : reset_n
ReasonCodeList
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
SrcClockInfoList
SrcClockInfo
ClockName : Clock_info03a_clk
ClockObject : Clock_info03a_clk
ClockDomainId : 1
ContainerInstance : training
Module : training
-----------------------------------------------------------------------------
Tag : CDC_GLITCH_CTRL
Description : CDC path contains structure resulting in potential glitch propagation to destination [GlitchDestInfo]
Violation : CDC:286
ReasonInfoList
ReasonInfo
ReasonCode : GLITCH_SOURCE_RECONVERGES
ReasonCodeMsg : [ERROR] Glitch is caused due to source re-convergence
ReasonInfo
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
ReasonCodeMsg : [ERROR] Glitch caused due to sources from different domain merging
GlitchDestInfo
DestObject : u_ACUS/u_sync2s/meta/Q
DestObjectType : flop
DestClockInfoList
DestClockInfo
ClockName : clkB
ClockObject : clkB
ClockDomainId : 3
GlitchSourceCount : 3
GlitchSrcInfoList
GlitchSrcInfo
SrcObject : u_ACUS/bin_count/Q[0]
ReasonCodeList
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
SrcClockInfoList
SrcClockInfo
ClockName : clkA
ClockObject : clkA
ClockDomainId : 2
GlitchSrcInfo
SrcObject : u_ACUS/bin_count/Q[1]
ReasonCodeList
ReasonCode : GLITCH_SOURCE_RECONVERGES
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
SrcClockInfoList
SrcClockInfo
ClockName : clkA
ClockObject : clkA
ClockDomainId : 2
GlitchSrcInfo
SrcObject : reset_n
ReasonCodeList
ReasonCode : GLITCH_SOURCES_FROM_DIFF_DOMAIN
SrcClockInfoList
SrcClockInfo
ClockName : Clock_info03a_clk
ClockObject : Clock_info03a_clk
ClockDomainId : 1
ContainerInstance : training
Module : training
-----------------------------------------------------------------------------
Tag : CDC_GLITCH_CTRL
Description : CDC path contains structure resulting in potential glitch propagation to destination [GlitchDestInfo]
Violation : CDC:287
ReasonInfoList
ReasonInfo
ReasonCode : GLITCH_SOURCE_RECONVERGES
ReasonCodeMsg : [ERROR] Glitch is caused due to source re-convergence
GlitchDestInfo
DestObject : uACCONV04/in1/Q{ [2] ,[0] }
DestObjectType : flop
DestClockInfoList
DestClockInfo
ClockName : clkA
ClockObject : clkA
ClockDomainId : 2
GlitchSourceCount : 1
GlitchSrcInfoList
GlitchSrcInfo
SrcObject : reset_n
ReasonCodeList
ReasonCode : GLITCH_SOURCE_RECONVERGES
SrcClockInfoList
SrcClockInfo
ClockName : Clock_info03a_clk
ClockObject : Clock_info03a_clk
ClockDomainId : 1
ContainerInstance : training
Module : training
-----------------------------------------------------------------------------
Tag : CDC_GLITCH_CTRL
Description : CDC path contains structure resulting in potential glitch propagation to destination [GlitchDestInfo]
Violation : CDC:288
ReasonInfoList
ReasonInfo
ReasonCode : GLITCH_SOURCE_RECONVERGES
ReasonCodeMsg : [ERROR] Glitch is caused due to source re-convergence
GlitchDestInfo
DestObject : uACCONV04/in2/Q[2:0]
DestObjectType : flop
DestClockInfoList
DestClockInfo
ClockName : clkA
ClockObject : clkA
ClockDomainId : 2
GlitchSourceCount : 1
GlitchSrcInfoList
GlitchSrcInfo
SrcObject : reset_n
ReasonCodeList
ReasonCode : GLITCH_SOURCE_RECONVERGES
SrcClockInfoList
SrcClockInfo
ClockName : Clock_info03a_clk
ClockObject : Clock_info03a_clk
ClockDomainId : 1
ContainerInstance : training
Module : training
2、使用以下命令屏蔽DestObject为u_ACS01/u_sync2s/meta/Q的违规项,并再次使用report_cdc命令进行报告,可以看出其中多了一个条屏蔽项。
vc_static_shell> waive_cdc -add waive_glitch_dest -tag CDC_GLITCH_CTRL -filter { GlitchDestInfo:DestObject == u_ACUS/u_sync2s/meta/Q }
vc_static_shell> report_cdc
-----------------------------------------------------------------------------
Management Summary
-----------------------------------------------------------------------------
Stage Family Fatals Errors Warnings Infos Waived
----- ---------- -------- -------- -------- -------- --------
SETUP CLKPROP 0 0 1 56 0
SETUP RESET 0 23 6 9 0
SYNC CTRLPATH 0 12 0 19 0
SYNC DATAPATH 0 129 0 9 0
SYNC UNSYNC 0 37 0 0 0
CONV COMBCONV 0 5 0 0 0
CONV NOCONV 0 2 2 0 0
CONV SEQCONV 0 1 0 0 0
GLITCH GLITCH 0 4 0 0 1
----- ---------- -------- -------- -------- -------- --------
Total 0 213 9 93 1
-----------------------------------------------------------------------------
Tree Summary
-----------------------------------------------------------------------------
Severity Stage Tag Count Waived
-------- ----- ----------------------------------- ----- ----------
error CONV CDC_COHERENCY_MULTI_SYNC 2 0
error CONV CDC_COHERENCY_RECONV_COMB 5 0
error CONV CDC_COHERENCY_RECONV_SEQ 1 0
error GLITCH CDC_GLITCH_CTRL 4 1
error SETUP SETUP_RESET_ASSERT_MISSING 23 0
error SYNC CDC_UNSYNC_ASYNCRESET 20 0
error SYNC CDC_UNSYNC_CTRL 12 0
error SYNC CDC_UNSYNC_DATA 129 0
error SYNC CDC_UNSYNC_NOSCHEME 17 0
warning CONV CDC_COHERENCY_BUS_NOCONV 2 0
warning SETUP SETUP_MULTIPLE_CONSTRAINTS 1 0
warning SETUP SETUP_RESET_DRIVING_NON_ASYNC_PIN 6 0
info SETUP SETUP_BBOXPIN_CONSTRAINED 1 0
info SETUP SETUP_CLOCK_PROPAGATED 12 0
info SETUP SETUP_DATA_CONSTANT 17 0
info SETUP SETUP_PORT_CONSTRAINED 23 0
info SETUP SETUP_PORT_IGNORED 3 0
info SETUP SETUP_RESET_PROPAGATED 9 0
info SYNC CDC_SYNC_ASYNCRESET 8 0
info SYNC CDC_SYNC_CTRL 19 0
info SYNC CDC_SYNC_DATA 1 0
-------- ----- ----------------------------------- ----- ----------
Total 315 1
3、使用GUI界面也可以完成上述操作,使用start_gui命令打开GUI,右键单击想要屏蔽的违规项,选择Create a Waiver,并选择Set Violation Status as Waived,最后在弹出的waiver窗口中点击ADD Item,Waive文件将创建并写入屏蔽命令。
使用检查点
1、检查点功能允许用户在设计执行过程中某个阶段保存一个基于进程/快照的检查点,并在后续运行中从该检查点继续执行,以避免从头开始重复分析,使用以下命令可以创建检查点。
vc_static_shell> checkpoint_session -session cdc_checkpoint
[Info] CHECKPOINTING_SESSION: Checkpointing session (vcst_rtdb (as cdc_checkpoint_cpdb)).
Checkpointing
Checkpoint Done
2、现在,如果想在另一次运行中恢复该会话,只需使用以下命令即可,之后可以使用report_cdc命令查看之前运行的CDC分析报告。
vc_static_shell> restart_session -session cdc_checkpoint
[Info] RESTARTING_SESSION: Restart session (cdc_checkpoint).
Restarting
Restart Done
vc_static_shell> report_cdc
-----------------------------------------------------------------------------
Management Summary
-----------------------------------------------------------------------------
Stage Family Fatals Errors Warnings Infos Waived
----- ---------- -------- -------- -------- -------- --------
SETUP CLKPROP 0 0 1 56 0
SETUP RESET 0 23 6 9 0
SYNC CTRLPATH 0 12 0 19 0
SYNC DATAPATH 0 129 0 9 0
SYNC UNSYNC 0 37 0 0 0
CONV COMBCONV 0 5 0 0 0
CONV NOCONV 0 2 2 0 0
CONV SEQCONV 0 1 0 0 0
GLITCH GLITCH 0 4 0 0 1
----- ---------- -------- -------- -------- -------- --------
Total 0 213 9 93 1
-----------------------------------------------------------------------------
Tree Summary
-----------------------------------------------------------------------------
Severity Stage Tag Count Waived
-------- ----- ----------------------------------- ----- ----------
error CONV CDC_COHERENCY_MULTI_SYNC 2 0
error CONV CDC_COHERENCY_RECONV_COMB 5 0
error CONV CDC_COHERENCY_RECONV_SEQ 1 0
error GLITCH CDC_GLITCH_CTRL 4 1
error SETUP SETUP_RESET_ASSERT_MISSING 23 0
error SYNC CDC_UNSYNC_ASYNCRESET 20 0
error SYNC CDC_UNSYNC_CTRL 12 0
error SYNC CDC_UNSYNC_DATA 129 0
error SYNC CDC_UNSYNC_NOSCHEME 17 0
warning CONV CDC_COHERENCY_BUS_NOCONV 2 0
warning SETUP SETUP_MULTIPLE_CONSTRAINTS 1 0
warning SETUP SETUP_RESET_DRIVING_NON_ASYNC_PIN 6 0
info SETUP SETUP_BBOXPIN_CONSTRAINED 1 0
info SETUP SETUP_CLOCK_PROPAGATED 12 0
info SETUP SETUP_DATA_CONSTANT 17 0
info SETUP SETUP_PORT_CONSTRAINED 23 0
info SETUP SETUP_PORT_IGNORED 3 0
info SETUP SETUP_RESET_PROPAGATED 9 0
info SYNC CDC_SYNC_ASYNCRESET 8 0
info SYNC CDC_SYNC_CTRL 19 0
info SYNC CDC_SYNC_DATA 1 0
-------- ----- ----------------------------------- ----- ----------
Total 315 1