文章目录同步方法一般同步方法rules AC _ un sync 01/02ac _ syn c01/02ac _ con v01/02/03ac _ glitch 03 clock _ sync 05/06 setup _ qu quasi

CDC_verify_struct进程主要检查设计中是否有不同步的信号,是否有毛刺。 在多时钟设计中,需要同步哪些信号? 使用什么样的同步方法? 如果处理不当,会在设计中引入准稳态,或导致数据丢失。 准稳态发生的根本原因是建立时间或保持时间不足。 本文首先简要介绍CDC常用的同步方法,然后介绍CDC_verify_struct中的rules

上一篇: Spyglass的CDC检查(3) )。

下一篇: Spyglass的CDC检查(5) )。

同步方法note:本节的相位差单位为纳秒

什么信号需要同步时钟的有效转变沿的相位差固定,被称为同步时钟。 如下图clk1和clk2所示,虽然两者的频率不同,但由于有效沿(上升沿)间的相位差被固定为t、2T、3T,所以可以称为同步时钟。

无法确定两个时钟的有效沿相位差,称为异步时钟。 不同的DPLL或晶振时钟必定是异步时钟。 在以异步时钟发送信号的情况下,如果不执行同步处理,则容易导致亚稳定状态和数据丢失。 如下图所示。

相同的DPLL或晶振时钟称为同源时钟。 同源时钟根据频率和相位可以分为以下几类。

同频零相位差时钟同频一定位相位差时钟是包括整数倍时钟和分数倍时钟非同频可变相位差时钟.只要设计中的时钟不都是同频零相位差,就要考虑信号传输时是否会引入亚稳态,是否有数据丢失。

通过典型的同步方法在时钟域之间传输的信号分为以下两类:

控制信号的传输中(通常为单位),经常使用次同步器。数据信号的传输(通常为多比特)、常用的握手信号、异步FIFO方法。

图像源: Verilog基础知识(准稳定状态和时钟域之间的同步电路) Rules AC_unsync01/02报告在时钟之间传输中未同步的信号。 如果出现此违规,请确保:

如果源寄存器和目标寄存器位于同一IP模块中,请使用ip_block约束该模块。 如果源寄存器或目标寄存器是black_box,则使用abstract_port或assume_path约束black_box端口; 如果源寄存器是静态信号,则使用quasi_static约束源寄存器。 在源寄存器为控制信号情况下,检查信号是否通过了有效的同步器; 如果源寄存器是数据信号,则检查是否使用了异步FIFO或握手信号; AC_sync01/02报告在设计期间同步的信号。 该规则只报告信息,不报告违规。

报告AC_conv01/02/03设计中的聚合问题。 聚合问题可能会导致同步前的数据和同步后的数据不一致的数据完整性问题。

AC_conv01规则报告信号通过同步器寄存器后聚合违规:

不同的信号经过同步器又经过不同数量的寄存器,最终在同一逻辑门上汇聚

在上面的示例中,第一个信号通过第二级同步器通过一个寄存器,第二个信号通过第二级同步器通过两个寄存器。 这两个信号最终在同一逻辑门上被合并。 为什么会有问题呢? 假设两个信号在clk1时钟域进行00-11的跳变,经过一堆clk2时钟域的寄存器后,在逻辑门处看到信号进行00-10-11的跳变,显然是不行的。 只要避免两个信号同时跳跃,就没有问题。 例如,00-01或00-10的跳跃没有问题。

同一信号经过多个同步器再经过不同数量的寄存器,最终在同一逻辑门上聚合。 这与上述情况类似。

在特殊情况下报告不会违规:两个信号由同一控制信号控制

如果spyglass报告违规,但检查发现设计没有问题,则可以使用cdc_false_path、quasi_static、cdc_filter_conherency等命令进行约束。

AC_conv02规则报告信号经过同步器汇总违规情况,汇总后通过寄存器:

报告不同信号通过同步器后,在同一逻辑门聚合的问题

此处报告违规的位置与AC_conv01不同,请仔细查看这两幅图。 一个是在寄存器后集成,另一个是在寄存器前集成。 这里为什么会发生问题? 假设在clk1时钟和信号中有011-100跳变,则由于各路径的延迟不同,通过同步器时可能会产生011-110-100等奇怪的跳变。 如果该信号是计数器,则这种同步一定有问题。 解决方案是使用格雷码,在同步之前将二进制代码转换为格雷码,然后通过同步器。 可以引用异步FIFO的格雷码

指针同步。

上述例子中,sync[0:3]是使用格雷码同步的信号,sync_1是经过二级同步器同步的信号,它们在同一个逻辑门处聚合,spyglass会报出这里违例。如果确定sync_1与sync[0:3]信号没有关系,即这样的设计没有问题,可使用如下约束脚本

cdc_filter_coherenct -unrelated sync[0:3] sync_1
gray_signals -nam sync[0:3]

报告同一个信号经过多个同步器后在同一个逻辑门处聚合问题

AC_conv03规则检查不同时钟域信号经过同一个时钟域同步器后聚合问题。
AC_glitch03

报告设计中的毛刺

竞争: 组合逻辑电路中,同一信号经不同的路径传输后,到达电路中某一会合点的时间有先有后(每条途径的组合逻辑污染延时不同),这种现象称为逻辑竞争,而因此产生输出干扰脉冲的现象称为冒险。
冒险: 信号在器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为”毛刺”。如果一个组合逻辑电路中有”毛刺”出现,就说明该电路存在冒险。
毛刺: 数字电路中常将毛刺定义为采样间越过逻辑门限一次以上的任何跳变,主要是指电路输出波形中含有时间很短有规律或没有规律的脉冲而又对设计没有用处或产生其他影响,一般都要考虑去除毛刺。
脉冲: 在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号,在单位时间内所产生的脉冲个数就称为频率。例如手电筒打开灯亮,这是直流,不停的开关灯亮、熄,就形成了脉冲,开关速度的快慢也就是脉冲频率的高低。
The reason for 竞争冒险: 数字电路中的竞争与冒险出现在组合逻辑电路中。由于延迟时间的存在,当一个输入信号经过多条路径传送后又重新会合到某个门上,由于不同路径上门的级数不同,或者门电路延迟时间的差异,导致到达会合点的时间有先有后,从而产生瞬间的错误输出。
The judgement for 竞争冒险: 只要输出端的逻辑函数在一定的条件下能简化成 Y = A + A’ 或者 Y = A·A’,那么就可以判断存在竞争-冒险现象。
The resolve of 竞争冒险: 接入滤波电容、引入选通脉冲、修改逻辑设计等等。
转载于:https://www.cnblogs.com/PG13/p/10329675.html

在下图设计中,D0与I1信号达到与门时间不同,C0处容易输出毛刺,如果该毛刺恰好被CLK2时钟域的寄存器采到,则设计容易出错。应将CLK1的组合逻辑修改成寄存器输出。

Clock_sync05/06

Clock_sync05报告输入信号被多个时钟域下寄存器采样,如下图中,输入信号在clka和clkb中被采样。

Clock_sync06报告输出信号由多个时钟域信号组合而成。

若确保设计没有问题,可使用set_case_analysisquasi_static命令加强对输入信号的约束。

setup_quasi_static

准静态寄存器是指设计中的输入信号、寄存器、线网在芯片工作开始时改变,但在接下来的工作中保持为0或1。
setup_quasi_static报告设计中spyglass推断出的准静态寄存器约束脚本约束的静态寄存器。应仔细检查信号是否满足准静态寄存器的定义。如果信号被spyglass错误推断为准静态寄存器,那么当芯片工作时,该信号变化可能会引起功能出错。