由于SOC芯片中不同电路模块工作于不同的时钟频率,即SOC芯片中存在多个时钟域,为了解决多个时钟域之间的通信或数据交互问题,一个解决办法是使用两级同步触发器进行同步,上一级异步触发器输出的信号达到同步一级时,同步一级输出x,但是同步二级输出正常的0或1,x没有向后传播,即实现跨时钟域同步,如果没有两级同步,即没有同步二级,x将向后传播。在门级仿真中,与实际电路一样,仿真工具在检查时序时将同步一级的输出判为x,但与实际电路不同的是,但因为仿真工具的限制,同步一级输出的x会一级一级向后传播,最终导致门级仿真failed失败。解决办法是让仿真工具不检查同步一级的时序,使得如同实际电路一样,同步二级结束x的传播。如果门级仿真失败了,首先应该怀疑的是否是两级同步造成的failed。门级仿真failed的特征之一是CPU停止工作,所以CPU停止工作的前后应该是门级仿真失败的关键位置,在log文件中查找关键字CORE_A或CORE_B,定位到CORE_A或CORE_B打印的最后一条信息前后所打印的与该模块相关的Timing violation,下图中是一条疑似导致门级仿真失败的timing violation。

门级仿真(Gate-Level Stimulation, GLS)失败之两级同步

在原理图中定位到该timing violation对应的触发器

门级仿真(Gate-Level Stimulation, GLS)失败之两级同步 

门级仿真(Gate-Level Stimulation, GLS)失败之两级同步 Timing violation报告的是触发器的D2端口,抓取对应输入输出波形,由波形可知,对于该触发器,输入没有X,而输出出现了X,因此怀疑该触发器是同步一级

门级仿真(Gate-Level Stimulation, GLS)失败之两级同步

 沿着D2端口向上一级追,定位到该触发器的上一级触发器,抓取对应输入输出波形,由波形可知,上一级触发器的输入输出均没有出现X,且两个触发器的时钟是异步时钟,因此可以确定是两级同步造成的门级仿真failed。

门级仿真(Gate-Level Stimulation, GLS)失败之两级同步

门级仿真(Gate-Level Stimulation, GLS)失败之两级同步 解决这一问题的方法是将Timing violation添加到.tfile文件中,使仿真工具不检查指定触发器的建立时间和保持时间。

门级仿真(Gate-Level Stimulation, GLS)失败之两级同步

相关文章: