微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > SOC时序分析中的跳变点

SOC时序分析中的跳变点

时间:08-15 来源:本站整理 点击:

与I/O单元的端口相同的端口定义运行条件。

  2)编写脚本为此类网注释零时延。

  (iii)带有丢失跳变点的库

  如果我们拥有不包含跳变点阈值或电压电平值的时序模型,那么来自/到此类模型的界面的时延可能不正确。因为时序工具使用跳变点和电压电平的默认值,分析这些路径。作为一种变通方法,用户应在向负责库的人员进行咨询后,再定义跳变点。

  6.如果不通过时序工具进行扩展会怎样:激烈。这可能会导致芯片故障,因为使用时序工具计算的时延不接近Spice值。如果可以为跳变点不同的界面进行Spice分析,应当是一种很好的操作方法。

  如果对SOC中所使用的所有模型(硬模块)使用同样的跳变点,应当是一种很好的操作方法。

  这完全可以消除因阈值不同所产生的问题。

  7.Spice合作关系:

  对多阈值路径进行Spice分析,是增强信心并解决时序问题的好方法。

  尽管在Spice世界,阈值实际并不存在。在时序模型中使用它们是为了简化时序分析工具。

  时序工具提供一个选项,复制出特定时序路径的spice网列表。除了spice网列表外,还复制出包含输入矢量的激励文件。复制出的spice网列表可能不包含针对时序路径中标准单元和/或硬模块的spice网列表。

  Spice模拟工具可读取复制的spice网列表和标准单元/硬模块的spice网列表,然后提供激励文件来模拟重要路径。

  需要通过分析生成的波形,查看路径是否满足时序要求。测量SPICE中此类路径的时延和过渡值时需要谨记:要采用与时序模型中所提及的跳变点相同的跳变点。

  8.扩展类型:

  大多数行业标准工具使用线性或非线性扩展作为其运作方式

  a)线性扩展:在该方法中,工具假定不同阈值的线性斜坡。

  该方法使用相似三角形的概念扩展驱动程序到负载单元的时延。

  b)非线性扩展:此时,工具使用电流源模型来定义坡道。这需要通过复杂的数学方程来计算时延。

  总之,本文以跳变点定义开始,然后阐释如何固定用于特定技术库的跳变点。然后本文论述了时序工具如何解释跳变点,以及当驱动程序与负载单元跳变点不同时可能会引发的问题。

  附录 A:在SDF中考虑负互连时延的脚本

  #!/usr/local/bin/perl

  print "\n***************RUNNING PERL SCRIPT negaTIvedelinsdf_assarray.pl****\n\n";

  if (!exists $ARGV[0] || !exists $ARGV[1]) { print "USAGE:: negativedelinsdf_assarray.pl \n\n"; exit;

  }

  open(FILEA,$ARGV[0]) || die ("ERROR:: SDF file $ARGV[0] cannot be opened for reADIng\n");

  open(file1, ">$ARGV[1]") || die ("ERROR:: file $ARGV[1] cannot be opened for writing\n");

  while()

  { $line = $_;

  $line1 = $line;

  $line =~ s/^\s+//g ;

  if ( $line =~ "INTERCONNECT.*-[0-9]") ######## FINDING NEGATIVE INTERCONNECT ######

  {

  @array1 = split(/\s+/,$line);

  $count = @array1;

  if ($count == 4){ ## To accont for the fact that only one INTERCONNECT triplet is present

  $array1[$count]= $array1[$count-1];

  $count = $count + 1;

  }

  for($i=0;$i<= $count -3;$i++)

  {print file1 "$array1[$i] ";}

  $value2 = $array1[$count -1];

  $value1 = $array1[$count -2];

  $instance_name = $array1[2];

  @instance = split(/\//,$instance_name);

  $count2 = @instance;

  $pin_name = $instance[$count2 -1]; ####### GETTING LOAD INSTANCE PIN NAME ###############

  $instance_name =~ s/\/[^(.*\/)][A-Z0-9a-z_\[0-9\]+]*$//g; ####### GETTING LOAD INSTANCE NAME ###############

  if( $value1 =~ "::")

  { $value1 =~ s/[()]//g;

  @correct_value1 = split(/::/,$value1);

  $load_correct_value1_0{$instance_name} = $correct_value1[0];

  $load_correct_value1_1{$instance_name} = $correct_value1[1];

  if($correct_value1[0] <= -0.0) #####NEGATIVE CHANGED TO ZERO DELAY######

  {$correct_value1[0] = "0.000";}

  if($correct_value1[1] <= -0.0)

  {$correct_value1[1] = "0.000";}

  print file1 "($correct_value1[0]::$correct_value1[1])";

  }

  elsif( $value1 =~ ":[^:]")

  { $value1 =~ s/[()]//g;

  @correct_value1 = split(/:/,$value1);

$load_correct_value1_0{$instanc

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top