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

SOC时序分析中的跳变点介绍

时间:07-12 来源:互联网 点击:

跳变点和电压电平的默认值,分析这些路径。作为一种变通方法,用户应在向负责库的人员进行咨询后,再定义跳变点。

  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****nn;

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

}

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

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

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{$instance_name} = $correct_value1[0];

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

$load_correct_value1_2{$instance_name} = $correct_value1[2];

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;}

if($correct_value1[2] = -0.0)

{$correct_value1[2] = 0.000;}

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

}

else{print file1 $value1 ;}

if( $value2 =~ ::)

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

@correct_value2 = split(/::/,$value2);

$load_correct_

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

网站地图

Top