最近在工作中遇到由于sgdc书写错误,导致的cdc检查问题。
1.由于sgdc书写abstract命令未遵循标准格式,abstract命令把port di_2约到了clk[2]上,且clk[2]非时钟的port。因此sgdc认为di_2没有时钟。不管是否打开参数use_inferred_abstract_port,此处均不报crossing
2.由于port di_vld未约束时钟,打开了参数use_inferred_abstract_port,工具会给该port上推断一个时钟。由于发现后面存在3拍的同步逻辑,工具推断设计在此处存在crossign,因此推断了异步的虚拟时钟SG_VCLK_1。
通过实验,得到sg的逻辑如下
结论验证:
1.没有打拍同步逻辑
1.1不对port约时钟,打开use_inferred_abstract_port,不报unsync,会推断一个同步时钟。
1.2给port约到存在的port上,打开use_inferred_abstract_port,认为port没有时钟,不报ac_unsync。
1.3给port约个虚拟时钟,认为虚拟时钟和采样时钟clk为异步,报unsync。
1.4port不约时钟,被两个异步时钟采样,打开use_inferred_abstract_port,会在此port上同时i推断出两个采样时钟,报两个unsync。
2.存在同步逻辑
2.1把port约到非时钟的port上,不报sync或者unsync
2.2port不约时钟,会推断出一个虚拟时钟vclk,报ac_csync。
2.3port不约时钟,同时连到两个crossign电路中,会推断出一个虚拟时钟vclk,报两个ac_csync。