首页 > 其他分享 >[IC后仿] timing violation实例分析

[IC后仿] timing violation实例分析

时间:2024-09-08 10:52:14浏览次数:7  
标签:clk violation dut cc 后仿 timing ns tb

文章目录

1-前言

IC后仿中出现了一个Timing violation问题, 在此做出分析,并给出解决方案。

2-问题描述与分析

IC后仿中发生Timing violation问题:

后仿log:

"/home/xx/xx.v", 15691: Timing violation in tb_top.xx\cc_dly_reg[0] 
    $setuphold( posedge CK &&& (ENABLE_NOT_SE == 1'b1):314047001.763ns, negedge D &&& (ENABLE_NOT_SE == 1'b1):314047001.596ns, limits: (0.409ns,0.017ns) );

后仿fsdb:

image-20240906145233859

信号说明:

  • cc_rx: dut的input,cc_rx由testbench按intf.cb1驱动给dut;
  • cc_dly[0]: 某一D触发器的输出;
  • dut_clk/tb_clk: Testbench产生的时钟,一个给dut,一个给tb;
  • clk: dut的input, dut_clk与clk相连;

现象:dut 在 clk上升沿采集cc_rx信号,cc_rx在黄线处变化同时不满足Setup time约束,cc_dly[0]产生x态。

3-解决方案与验证

解决方案:在tb中保持dut_clk/tb_clk边沿对齐,代码如下:

  parameter    DUTPERIOD = 166.6; //6M 166.66ns
  parameter    TBPERIOD = 100; //100ns

	//===gen input and connect signal
  initial begin
    dut_clk = 1;
    forever begin
      #(DUTPERIOD/2) dut_clk = ~dut_clk;
    end
  end
  initial begin
    tb_clk = 1;
    forever begin
      #(DUTPERIOD/4) tb_clk = ~tb_clk;
      //#(TBPERIOD/2) tb_clk = ~tb_clk;
    end
  end

验证dut_clk/tb_clk边沿是否对齐:

image-20240906151641952

前访为理想状态,两个clk边沿完全对齐;

后仿文件中加入了延时,存在偏差(10.6ns);

eg : tb 运用clocking block在posedge tb_clk #1ns信号驱动给dut,就是保证建立保持时间的一种方法。


  1. eg : tb 运用clocking block在posedge tb_clk #1ns信号驱动给dut,就是保证建立保持时间的一种方法。 ↩︎

标签:clk,violation,dut,cc,后仿,timing,ns,tb
From: https://blog.csdn.net/weixin_42317572/article/details/141961611

相关文章