《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > SoC時序分析中的跳變點
SoC時序分析中的跳變點
摘要: SOC時序分析中的跳變點,跳變點是所有重要時序分析工具中的一個重要概念。跳變點被時序分析工具用來計算設計節點上的時延與過渡值。跳變點的有些不同含義可能會被時序分析工程師忽略。而這在SOC設計后期,也就是要對時序簽字時可能會導致問
關鍵詞: SOC
Abstract:
Key words :

    跳變點是所有重要時序分析工具中的一個重要概念。跳變點被時序分析工具用來計算設計節點上的時延與過渡值。跳變點的有些不同含義可能會被時序分析工程師忽略。而這在SOC設計后期,也就是要對時序簽字時可能會導致問題。后端設計工程師要知道跳變點的概念及其含義,這個非常重要。這也正是本文目的之所在。

  1.跳變點定義:

  跳變點可定義為邏輯高電平的百分比,作為測量壓擺率和時延值的參照。圖1(a)演示的是壓擺率跳變點。

  


 

  圖1(a)

  圖1(b)演示的是時延跳變點。

  

 

  圖1(b)

  跳變點用來描述標準單元或硬模塊(IP)等的引腳過渡值特征,同時檢查SoC時序。通常跳變點的值在時序模型(自由格式)中提及,時序分析工具在計算時延和壓擺率時會使用這些值。

  2.如何固定跳變點:

  在描述標準單元或硬模塊(IP)特征時,跳變點對于特定的技術節點是固定的。將跳變點固定的目的是確保測量的時延/壓擺率接近實際(Spice)的波形。如圖2(a)所示,當跳變點位于切換波形的線性區(20%-80%)時,壓擺率值比位于非線性區(10%-90%)時要令人樂觀。

  

 

  圖2(a)

  通常情況下,在過渡跳變點位于線性區時,時序工具計算的單元時延更接近Spice結果。

  同時,晶體管的電壓閾值(Vt)特性對于決定跳變點發揮了重要作用,因為輸出波形在輸入電壓超過晶體管的Vt值后會發生線性化[1]。

  時延閾值在輸入和輸出波形的線性區是固定的。只要時延跳變點位于波形的線性部分,那么時延跳變點是20-80還是50-50都沒有關系。

  3.自由格式提及的跳變點句法[2]

  下面給出的是典型時序模型(.liberty文件)的快照,以指示正在使用的跳變點

  input_threshold_pct_rise:50;

  input_threshold_pct_fall:50;

  output_threshold_pct_rise:50;

  output_threshold_pct_fall:50;

  slew_lower_threshold_pct_rise:20;

  slew_lower_threshold_pct_fall:20;

  slew_upper_threshold_pct_rise:80;

  slew_upper_threshold_pct_fall:80;

  4.時序工具如何處理跳變點來計算時延

  a)當跳變點對于界面都相同時:

  圖3(a)描述了驅動程序和負載具有相同時延閾值時的情況。

  在給出的示例中,兩者都為50%。

  

 

  圖3(a)

  此時,,考慮壓擺率降級(由網絡引起)后,時序工具計算的驅動程序達到其50%的邏輯高值和負載達到其50%的邏輯高值時兩者之間的時間差。

  類似的解釋對于特定單元的輸入和輸出產生的下降信號和時延同樣適用。壓擺率值根據.lib中提及的變量進行計算。

  b)當跳變點對于一個界面而不同時

  (i)20%比50%:

  圖4(a)描述了驅動程序時延跳變點為20%而對負載單元跳變點為50%的情況。

  在這種情況下,與負載信號相比,驅動程序的信號會快速達到其時延跳變點值。因此此類界面的網絡時延會大于驅動程序也達到50%情形下的時延[圖3(a)]。

  

驅動程序時延跳變點為20

 

  圖4(a)

  時序工具可通過線性或非線性擴展計算網絡上出現的額外時延。

  (ii)50%比20%

  圖4(b)描述了驅動程序跳變點為50%而負載單元的跳變點為20%的情形。

  在這種情況下,與驅動信號相比,負載的信號會更早達到其時延跳變點值。這種情況通過時序工具借助擴展(線性或非線性)來進行處理。

  

驅動程序跳變點為50

 

  圖4(b)

  這里需要注意的是:在這種情況下,擴展會引起“負時延”。

  應注意:盡管現實世界不能在時域中后向穿越,但是時序工具需要將這種時延考慮在內,這樣,從開始點(在本例中為驅動單元的輸入引腳)到終端點(在本例中為負載單元的輸出引腳)的整體路徑時延接近現實世界時延(Spice)。

  5.與跳變點相關的其他問題:

  (i)SDF中的負時延:在通過時序工具完成擴展后產生的負時延將以標準時延格式(SDF)進行復制,用于門級模擬。不希望發生這種情況,因為門級模擬器無法處理負時延。

  它們要么標志錯誤消息要么表示此類情況的零時延。作為一種變通方法,可編寫一個腳本(附錄A),根據所計算的負時延,增加(或減少)負載單元(或驅動單元)時延。

  (ii)端口和IO單元之間的附加時延:

  通常時序工具報告端口到I/O單元的時延。在硅片上,該網絡作為接合線出現在芯片外部。因此,對于該網絡物理信息不能進行量化。

  時序工具提供此類網絡的時延報告。原因包括:

  a)由于沒有時序模型可用于端口,因此時序工具采用用戶定義的或默認跳變點和電壓電平計算時延。

  b)由于假定跳變點和端口w.r.tI/O單元跳變點的電壓電平值之間有差額。圖5(a)和圖5(b)描述了此類情況。

  

假定跳變點和端口w

 

  圖5(a)

  

假定跳變點和端口w

 

  圖5(b)

  要克服這種情況,可執行以下操作:

  1)為與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****nn";

  if (!exists $ARGV[0] || !exists $ARGV[1]) { print "USAGE:: negativedelinsdf_assarray.pl nn"; 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_value2_0{$instance_name} = $correct_value2[0]; ########NEGATIVE CHANGED TO ZERO DELAY#####

  $load_correct_value2_1{$instance_name} = $correct_value2[1];

  if($correct_value2[0] <= -0.0)

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

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

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

  if ($correct_value1[0] == $correct_value2[0] && $correct_value1[1] == $correct_value2[1] ) { # Print these values only if they are differnet from the already printed values for the INTERCONNECT

  print file1 ")n";

  } else {

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

  }

  }

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

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

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

  $load_correct_value2_0{$instance_name} = $correct_value2[0]; ########NEGATIVE CHANGED TO ZERO DELAY#####

  $load_correct_value2_1{$instance_name} = $correct_value2[1];

  $load_correct_value2_2{$instance_name} = $correct_value2[2];

  if($correct_value2[0] <= -0.0)

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

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

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

  if($correct_value2[2] <= -0.0)

  {$correct_value2[2] = "0.000";}

  if ($correct_value1[0] == $correct_value2[0] && $correct_value1[1] == $correct_value2[1] && $correct_value1[2] == $correct_value2[2]) { # Print these values only if they are differnet from the already printed values for the INTERCONNECT

  print file1 ")n";

  } else {

  print file1 " ($correct_value2[0]:$correct_value2[1]:$correct_value2[2]))n";

  }

  }

  $load_instance{$instance_name} = $instance_name; ##SAVE ALL LOAD INSTACES FOR NEG DELAY IN THE ASSOCIATIVE ARRAY##

  $load_pin{$instance_name.$pin_name} = $pin_name; ##SAVE ALL LOAD PINS FOR NEG DELAY IN THE ASSOCIATIVE ARRAY##

  }

  elsif ($line =~ "CELL" ) {

  print file1 "$line";

  $find = 0;

  }

  elsif($line =~ "INSTANCE ") ##CHECKING CORRESPONDING INSTANCES AND FIND FLAG = 1 IF FOUND######

  {

  print file1 "$line1";

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

  $instance_name2 = $array2[1]; ##GETTING THE LOAD INSTANCE NAME FOUND HERE##########

  $instance_name2 =~ s/[()]//g;

  $instance_definition{$instance_name2} = "$instance_name2" ;

  if(exists $load_instance{$instance_name2}) ####COMPARE INSTANCE NAME WITH THAT SAVED IN ASSO ARRAY#####

  {

  if($load_instance{$instance_name2} eq "$instance_name2")

  {$find = 1;}

  }

  }

  elsif($line =~ "IOPATH" && $find == 1) ##AFTER INSTANCES ARE FOUND CHECKING FOR CORRSPONDING PINS######

  {

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

  if ($array4[0] =~ "COND" ) { ## Take care of COND statements

  $pin_name2 = $array4[3];

  } else {

  $pin_name2 = $array4[1];

  }

  if($line =~ "IOPATH" && exists $load_pin{$instance_name2.$pin_name2} ) {

  if ( $load_pin{$instance_name2.$pin_name2} eq "$pin_name2" )

  {

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

  $count3 = @array3 ;

  @value_IOPATH = ""; # This is to initialize the array to blank

  if ($array3[0] =~ "COND" ) {

  for ($j=5; $j<=$count3 ; $j++) {

  $value_IOPATH[$j-5] = $array3[$j];

  $value_IOPATH_width = @value_IOPATH;

  if ($count3 == 6) { #### In case there is only one triplet for COND.*IOPATH

  $value_IOPATH[1] = $value_IOPATH[0];

  }

  #$value1_IOPATH = $array3[5];

  #$value2_IOPATH = $array3[6];

  }

  $constant_fields = 4;

  } elsif ($array3[0] =~ "IOPATH") {

  for ($k=3; $k<=$count3 ; $k++) {

  $value_IOPATH[$k-3] = $array3[$k];

  $value_IOPATH_width = @value_IOPATH;

  if ($count3 == 4) { #### In case there is only one triplet for IOPATH

  $value_IOPATH[1] = $value_IOPATH[0];

  }

  #$value1_IOPATH = $array3[3];

  #$value2_IOPATH = $array3[4];

  }

  $constant_fields = 2;

  }

  for($i=0;$i<= $constant_fields;$i++)

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

  if( $value_IOPATH[0] =~ "::") ####CORRECT OR ACCOMODATING THE NEG DELAY VALUES HERE #########

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

  @correct_value1_IOPATH = split(/::/,$value_IOPATH[0]);

  if(exists $load_correct_value1_0{$instance_name2}) {

  if($load_correct_value1_0{$instance_name2} < 0.0) { # So that only negative delay value triplet is changed in the IOPATH syntax

  if ( abs($load_correct_value1_0{$instance_name2}) < $correct_value1_IOPATH[0] ) { ###the absolute value to negative delay is larger than the timing of load arc. ######

  $correct_value1_IOPATH[0] = $correct_value1_IOPATH[0] + $load_correct_value1_0{$instance_name2};

  } else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}

  }

  }

  if(exists $load_correct_value1_1{$instance_name2})

  { if( $load_correct_value1_1{$instance_name2} < 0.0) {

  if ( abs($load_correct_value1_1{$instance_name2}) < $correct_value1_IOPATH[1] ) {

  $correct_value1_IOPATH[1] = $correct_value1_IOPATH[1] + $load_correct_value1_1{$instance_name2};}

  else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}

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

  }

  elsif( $value_IOPATH[0] =~ ":[^:]") ####CORRECT OR ACCOMODATING THE NEG DELAY VALUES HERE #########

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

  @correct_value1_IOPATH = split(/:/,$value_IOPATH[0]);

  if(exists $load_correct_value1_0{$instance_name2}) {

  if($load_correct_value1_0{$instance_name2} < 0.0) { # So that only negative delay value triplet is changed in the IOPATH syntax

  if ( abs($load_correct_value1_0{$instance_name2}) < $correct_value1_IOPATH[0] ) {

  $correct_value1_IOPATH[0] = $correct_value1_IOPATH[0] + $load_correct_value1_0{$instance_name2};

  } else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}

  }

  }

  if(exists $load_correct_value1_1{$instance_name2}) {

  if($load_correct_value1_1{$instance_name2} < 0.0) { # So that only negative delay value triplet is changed in the IOPATH syntax

  if ( abs($load_correct_value1_1{$instance_name2}) < $correct_value1_IOPATH[1] ) {

  $correct_value1_IOPATH[1] = $correct_value1_IOPATH[1] + $load_correct_value1_1{$instance_name2};

  } else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}

  }

  }

  if(exists $load_correct_value1_2{$instance_name2}) {

  if($load_correct_value1_2{$instance_name2} < 0.0) { # So that only negative delay value triplet is changed in the IOPATH syntax

  if ( abs($load_correct_value1_2{$instance_name2}) < $correct_value1_IOPATH[2] ) {

  $correct_value1_IOPATH[2] = $correct_value1_IOPATH[2] + $load_correct_value1_2{$instance_name2};

  } else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}

  }

  }

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

  }

  else{print file1 "$value_IOPATH[0] ";} # This is to print empty brackets in case rise and fall triplets are empty

  if( $value_IOPATH[1] =~ "::")

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

  @correct_value2_IOPATH = split(/::/,$value_IOPATH[1]);

  if(exists $load_correct_value2_0{$instance_name2}) {

  if( $load_correct_value2_0{$instance_name2} < 0.0)

  { if ( abs($load_correct_value2_0{$instance_name2}) < $correct_value2_IOPATH[0] ) {

  $correct_value2_IOPATH[0] = $correct_value2_IOPATH[0] + $load_correct_value2_0{$instance_name2};}

  else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}

  if(exists $load_correct_value2_1{$instance_name2}) {

  if( $load_correct_value2_1{$instance_name2} < 0.0)

  { if ( abs($load_correct_value2_1{$instance_name2}) < $correct_value2_IOPATH[1] ) {

  $correct_value2_IOPATH[1] = $correct_value2_IOPATH[1] + $load_correct_value2_1{$instance_name2};}

  else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}

  if ($correct_value1_IOPATH[0] == $correct_value2_IOPATH[0] && $correct_value1_IOPATH[1] == $correct_value2_IOPATH[1]) { # Print these values only if they are differnet from the already printed values for the IOPATH

  } else {

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

  }

  }

  elsif( $value_IOPATH[1] =~ ":[^:]")

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

  @correct_value2_IOPATH = split(/:/,$value_IOPATH[1]);

  if(exists $load_correct_value2_0{$instance_name2}) {

  if( $load_correct_value2_0{$instance_name2} < 0.0) {

  if ( abs($load_correct_value2_0{$instance_name2}) < $correct_value2_IOPATH[0] ) {

  $correct_value2_IOPATH[0] = $correct_value2_IOPATH[0] + $load_correct_value2_0{$instance_name2};}

  else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}

  if(exists $load_correct_value2_1{$instance_name2}) {

  if( $load_correct_value2_1{$instance_name2} < 0.0) {

  if ( abs($load_correct_value2_1{$instance_name2}) < $correct_value2_IOPATH[1] ) {

  $correct_value2_IOPATH[1] = $correct_value2_IOPATH[1] + $load_correct_value2_1{$instance_name2};}

  else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}

  if(exists $load_correct_value2_2{$instance_name2}) {

  if( $load_correct_value2_2{$instance_name2} < 0.0) {

  if ( abs($load_correct_value2_2{$instance_name2}) < $correct_value2_IOPATH[2] ) {

  $correct_value2_IOPATH[2] = $correct_value2_IOPATH[2] + $load_correct_value2_2{$instance_name2};}

  else { print "IOPATH delay for $load_pin{$instance_name2.$pin_name2} of $instance_name2 is smaller than the INTERCONNECT delay n";}}}

  if ($correct_value1_IOPATH[0] == $correct_value2_IOPATH[0] && $correct_value1_IOPATH[1] == $correct_value2_IOPATH[1] && $correct_value1_IOPATH[2] == $correct_value2_IOPATH[2]) { # Print these values only if they are differnet from the already printed values for the IOPATH

  } else {

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

  }

  }

  else{print file1 "$value_IOPATH[1] ";} # This is to print empty brackets in case rise and fall triplets are empty

  for ($m=2;$m<=$value_IOPATH_width;$m++) {

  if (exists $value_IOPATH[$m]) {

  $value_IOPATH[$m] =~ s/)+/)/; # To account for the brackets

  print file1 " $value_IOPATH[$m]";

  }

  }

  if ($array4[0] =~ "COND" ) { ## Extra bracket for COND statements

  print file1 "))n";

  } else {print file1 ")n";}

  }

  }

  else

  {print file1 "$line1";} #######DUMPING OUT OF SDF IN FILE1######################

  }

  else

  {print file1 "$line1";}

  }

  close(file1);

  close(fileA);

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

  print "nn#############REPORTING INSTANCES WHOSE DEFINITION IS NOT THERE IN THE SDF#############n";

  while()

  {

  $line2 = $_;

  $line2 =~ s/^s+//g ;

  if ( $line2 =~ "INTERCONNECT.*-[0-9]")

  { @array4 = split(/s+/,$line2);

  $instance_name3 = $array4[2];

  $instance_name3 =~ s//[^(.*/)][A-Z0-9a-z_[0-9]+]*$//g;

  if(exists $instance_definition{$instance_name3})

  {}

  else

  {print "$line2";}

  }

  }

  close(fileA);

  print "n";

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 在线观看视频毛片 | 天天综合天天做天天综合 | 国产乱码精品一区二区三区四川人 | 丁香婷婷亚洲综合 | 久久精品无码专区免费 | 三级毛片网站 | 欧美大片www | 免费看男女做好爽好硬视频 | www.jizz国产| 国产一区二区三区免费视频 | 久久本道综合久久伊人 | 日韩影院在线 | 国产不卡视频在线观看 | 无码内射中文字幕岛国片 | 三级a三级三级三级a十八发禁止 | 电影内射视频免费观看 | 2020亚洲男人天堂 | 亚洲国产一区二区精品 | 先锋资源av网 | 国产一区二区不卡精华液 | 中文字幕在线视频一区 | 国产愉拍精品手机 | 久久国产热 | 人人妻人人狠人人爽天天综合网 | 女人十八特级淫片清 | 成人免费看类便视频 | 国产盗摄x88av | 精品国自产在线观看 | 免费无码毛片一区二三区 | 欧美精品xxx | 日本特黄特黄刺激大片 | 国产精品人人做人人爽人人添 | 最新国自产拍小视频 | 国产精品欧美一区二区三区 | 精品www久久久久久奶水 | 久久久欧美精品sm网站 | 日本91在线 | 男女免费视频网站 | 关之琳三级全黄做爰在线观看 | a天堂中文网 | 欧美3p视频 | 国产精品视频 | 成人片黄网站色大片免费观看 | 精品视频麻豆入口 | 成人网站免费观看入口 | 一本一道av无码中文字幕麻豆 | 五月中文字幕 | 国产欧美日韩视频在线 | 永久免费不卡在线观看黄网站 | 真人抽搐一进一出gif | 亚洲无线视频 | 自拍1区 | 无码av最新无码av专区 | 中文字幕第12页 | 欧洲美熟女乱又伦av影片 | 我把护士日出水了视频90分钟 | 精品国产一区二区三区久久 | 成人免费一区 | 高清欧美性猛交xxxx黑人猛交 | 我要看18毛片 | 日韩av片无码一区二区不卡电影 | 乱色精品无码一区二区国产盗 | 极品美女扒开粉嫩小泬图片 | 亚洲国产精品18久久久久久 | 免费特级毛片 | 强行处破女系列中文字幕 | 麻豆chinese极品少妇 | 成人做受黄大片 | 欧美极品jiizzhd欧美暴力 | 丝袜 中出 制服 人妻 美腿 | 国产精品国色综合久久 | 久久96| 国产专业剧情av在线 | 久久伊人爱 | аⅴ资源新版在线天堂 | 日韩中文字幕网站 | 狂揉吃奶胸高潮视频免费 | 亚色中文| 国产精品久久久久久久久久妞妞 | 欧美黑人添添高潮a片www | 三级黄色片免费 | 久久久影院| 日韩高清av在线 | 婷婷综合色 | 99re热这里只有精品视频 | 成人欧美一区二区三区黑人免费 | 人妻少妇精品系列 | 无码h肉动漫在线观看 | 国产精品不卡在线 | 在线免费看av | 成人三级在线播放 | 精品一卡2卡三卡4卡免费网站 | 中文字幕无线码 | 亚洲三级小说 | 亚洲天堂二区 | 伊人无码精品久久一区二区 | 鲜嫩高中生无套进入 | 国产成人精品日本亚洲第一区 | 国产一级二级日本在线 | 一区二区三区四区在线播放 | 18无码粉嫩小泬无套在线观看 | 90岁老太婆乱淫 | 久操视频在线免费观看 | 99ri视频| gv天堂gv无码男同在线观看 | 国产伦精品一区二区三区照片 | 香蕉视频一区二区三区 | 性高朝久久久久久久3小时 av片在线观看 | 日本成熟视频免费视频 | 国产极品美女高潮抽搐免费网站 | 久久免费偷拍视频 | 国产全肉乱妇杂乱 | 久久免费毛片 | 黄色网在线 | 国产又粗又黄的视频 | 天天摸天天做天天爽 | 日本123区| 波多野结衣在线播放 | 2021狠狠天天天 | 欧美自拍第一页 | 久久99国产精品久久 | 学生粉嫩无套白浆第一次 | 米奇777超碰欧美日韩亚洲 | 丰满岳乱妇一区二区三区 | 欧美黄色a级 | 少妇人妻偷人精品无码视频 | 久久久久人人 | 二男一女一级一片视频免费 | 成人黄色免费网站 | 日韩在线三区 | 婷婷亚洲天堂 | 精品精品 | 丁香花在线影院观看在线播放 | 一本大道久久a久久综合婷婷 | 国产妞干网 | 日韩性视频 | 色欧美片视频在线观看 | 日本色偷偷 | 新版资源天堂中文 | 国产女同疯狂作爱系列11 | 久久99精品久久久久久 | 成人三级k8经典网 | 无码精品人妻一区二区三区人妻斩 | 羞羞软件 | 91久久久色在线观看 | 国产人伦激情在线观看 | 欧美深夜福利视频 | 日韩理论片在线观看 | 久久a级片| 亚洲精品乱码久久久久久金桔影视 | www91在线播放 | 久久久久久久久久久久网站 | 亚洲视频91| 亚洲免费视频播放 | 97高清国语自产拍 | 欧美精品免费一区二区三区 | 婷婷色影院 | 国产伦理片在线观看 | 成人动漫视频在线观看 | 少妇69xx| 国产精品理论片在线观看 | 日韩一卡二卡在线 | 欧美a√在线 | 国产做受蜜臀 | 久久国产精品精品国产色婷婷 | a在线观看 | 综合一区av| 夫妻啪啪呻吟x一88av | www.欧美在线| 国产黄色片免费看 | 欧美精品久久久久久久免费 | 国产青草视频在线观看 | 综合一区二区三区 | 黄色av免费网址 | 哺乳一区二区久久久免费 | 天天躁日日躁狠狠躁喷水软件 | 欧美精品一区在线 | 国产操操操 | 中文字幕在线一区二区三区 | 欧美日韩国产成人精品 | 亚洲欧洲av无码专区 | 91久久香蕉国产日韩欧美9色 | 亚洲精品久久网白云av | 亚洲欧洲成人精品av97 | 亚洲天堂最新 | 国产免费拔擦拔擦8x高清在线人 | 在线成人免费观看 | 97久久精品人人爽人人爽蜜臀 | 日韩久久综合 | 巨大乳の超乳を揉んで乳巨在线播放 | 激情久久av一区av二区av三区 | 天天天天天天操 | 粉嫩av久久一区二区三区 | 久久99精品久久久久久牛牛影视 | 国产毛片久久久久久国产毛片 | 老牛嫩草一区二区三区日本 | 狂猛欧美激情性xxxx大豆行情 | 久久亚洲一区二区三区四区五区 | 日韩女优在线观看 | 五月天小说网 | 特黄特色大片免费播放器图片 | 成年网站免费在线观看 | 中文字幕一区二区三区精彩视频 | 蜜桃麻豆www久久囤产精品 | 自拍偷拍中文字幕 | 亚洲国产欧美国产综合一区 | 艹逼在线观看 | 色天使亚洲 | 亚洲va欧美va国产综合定档 | 在线看片成人 | 九九热1| 国产综合久久久久久鬼色 | 一本一道精品欧美中文字幕 | 欧美乱妇日本无乱码特黄大片 | 国产免费又爽又刺激在线观看 | 国产一区二区免费在线 | 国产精品88| 老太脱裤让老头玩ⅹxxxx | 欧美人与野 | 欧美不卡在线观看 | av天堂久久天堂色综合 | 欧美日韩国产91 | 97精品一区二区视频在线观看 | 亚洲综合精品香蕉久久网 | 天天天色综合 | 日本无遮挡大尺度床戏网站 | 男人天堂网在线 | 夜夜夜夜bbbbbb欧美 | 日本在线有码 | 亚洲中文字幕无码av永久 | 中文字幕精品久久久久 | 91国产丝袜在线 | 色婷婷激情| 蜜臀av夜夜澡人人爽人人 | 乱人伦xxxx国语对白 | 亚洲91av| 人妻丰满熟妇av无码区免 | 亚洲美女视频网站 | 大江大河第3部48集在线观看 | 秋霞国产精品 | 在线成年人视频 | 国产二区三区视频 | 亚洲成人第一区 | 色偷偷网站视频 | 女人洗澡毛片视频 | 91丨porny丨海角社区 | 久久99久久99精品中文字幕 | 一本色综合亚洲精品 | 久久99精品久久久久久久久久久久 | 性娇小13――14欧美 | 国产色视频在线播放 | 在线观看成人网 | 操操综合 | 日本欧美在线观看视频 | 雨宫琴音av一区在线播放 | 懂爱av| 久久久久久久影院 | 欧美精品乱人伦久久久久久 | 成人aaaa| 亚洲精品久久久久久久蜜桃 | 偷牌自拍第56页 | 成人性生交大片免费看视频app | 成人av中文字幕 | 国产真实乱对白精彩久久老熟妇女 | 少妇撒尿一区二区在线视频 | 久久精品6 | 久久久久久五月天 | 91精品久久久久含羞草 | 国产日韩欧美一区二区三区乱码 | 精品对白一区国产伦 | 水野朝阳av一区二区三区 | 国产欧美va欧美va香蕉在 | 亚洲综合在线网 | 91风间由美一区二区三区四区 | 中文字幕一区二区三区有限公司 | 91国内精品久久 | 国产青草视频在线观看 | www.com欧美| 国产黄a三级三级三级av在线看 | 在线播放高清视频www | 搡老女人老妇女老熟妇 | 欧美成人在线影院 | 国产精品野外户外 | 精品国产免费一区二区三区香蕉 | 亚洲一区二区三区小说 | 成年人www| 国产成人avxxxxx在线看 | 国产又粗又猛又爽又黄的视频一 | 天天综合亚洲综合网天天αⅴ | 久久久久欠精品国产毛片国产毛生 | 69做爰高潮全过程免 | 蜜臀久久久久久999 免费 成 人 黄 色 | 国产精品18久久久久白浆 | 在线视频免费观看你懂的 | 91中文在线| 一级空姐毛片 | 天天插天天摸 | 中文字幕一区视频 | 欧美一区二区黄色 | 色视频www在线播放国产人成 | 国产精品久久国产精品99 | 成人看的视频 | 和寡妇做爰过程a一片 | 国产日韩欧美91 | 欧美日韩va | 播五月婷婷 | 激情五月激情综合 | 成人做爰999 | 久久久久亚洲精品 | 午夜女色国产在线观看 | 看黄色一级 | 樱桃视频影视在线观看免费 | 国产情侣久久 | 超碰2019| 天天毛片 | 真实的国产乱xxxx在线 | 日本一卡二卡四卡无卡乱码视频免费 | 加勒比色综合久久久久久久久 | 欧美人与动欧交视频 | 日本精品一区二区三区视频 | 欧美色图偷窥自拍 | 99久久99久久久精品棕色圆 | 天天综合永久入口 | 亚洲a√ | 免费污视频在线观看 | 日韩av一卡 | 男女无套免费视频网站动漫 | 开心久久婷婷综合中文字幕 | 少妇性i交大片免费看 | 亚洲欧美婷婷六月色综合 | 久久国产精品成人免费 | 成 人 网 站国产免费观看 | 女人高潮流白浆视频 | 少妇无码太爽了不卡视频在线看 | 日韩少妇av | 国产专区一区 | 日本精品视频一区 | 91丨九色丨高潮 | 日韩一卡2卡3卡4卡新区亚洲 | 国产一精品av一免费爽爽 | 精品蜜臀久久久久99网站 | 日韩在线免费观看视频 | 亚洲精品久久久久久久小说 | av人人干 | 国产午夜精品久久久久久 | 亚洲日韩中文第一精品 | av亚洲产国偷v产偷v自拍麻豆 | 国产在线精品二区 | 天天综合网天天综合色 | 亚洲一级中文字幕 | 99热这里只有精品3 99热这里只有精品4 | 亚洲国产精品久久久久久久 | 精品国产人妻一区二区三区 | 亚洲男人最新版本天堂 | 欧美日韩国产成人在线 | 2020毛片| 婷婷射丁香 | 午夜爱爱免费视频 | av小说在线观看 | 一二三四区在线 | 性一交一乱一色一情丿按摩 | 色网站在线看 | 久草手机在线视频 | 成人午夜免费无码区 | 伊人色影院| 可以免费看的av | 欧美大片在线观看 | 亚洲精品国产精品乱码不99按摩 | 国产精品区二区三区日本 | 婷婷另类小说 | 在线日韩国产 | 国产免费人做人爱午夜视频 | 日韩中文字幕一区 | 大胸美女拍拍18在线观看 | 国产精品久久久久久久裸模 | 精品久久久无码中文字幕边打电话 | 性色影院| 久章草在线观看 | 久久九九热 | 亚洲浮力影院久久久久久 | 五月婷婷色丁香 | 国内精品毛片 | 免费看黄av | 美女在线观看www | 狠狠躁天天躁中文字幕 | 国产情侣作爱视频免费观看 | 日韩福利网 | www春色| 日本天天黄网站 | 色偷偷888欧美精品久久久 | 97免费人做人爱在线看视频 | 精品国产一区二区三区四区五区 | 嫩草影院一区二区 | 超碰九七在线 | 亚洲午夜性猛春交xxxx | 欧美人与牲动交xxxx | 精品国产乱码久久久久久郑州公司 | 少妇无码av无码专区线 | 少妇高潮一区二区三区99小说 | 91在线超碰 | 久久久久99精品成人片牛牛影视 | 超碰在线个人 | 免费观看激色视频网站 | 翔田千里一区二区 | av无码精品一区二区三区宅噜噜 | 欧洲亚洲一区二区 | 久久久久99精品成人片三人毛片 | 荫蒂添的好舒服视频囗交 | 成人精品一区日本无码网站 | 老牛嫩草一区二区三区消防 | 内射白嫩少妇超碰 | 久久久久一区 | 男人天堂avav | 国产精品视频一区二区在线观看 | 高清在线一区二区 | a色视频| 欧美日韩水蜜桃 | 亚洲一区二区观看播放 | 小黄鸭精品密入口导航 | 久久大陆 | 国产精品69午夜妇大片 | 日韩中文字幕在线看 | 国产精品成人影院在线观看 | 干美女av| 色婷婷影院 | 国产高清视频 | 色爱精品视频一区二区 | 国产美女在线精品免费观看网址 | 亚洲一区二区观看播放 | 欧美性jizz18性欧美肥胖脸 | 无码专区一ⅴa亚洲v天堂 | 免费av网址在线 | 91成人免费版 | 按摩害羞主妇中文字幕 | 丁香花五月 | 国产精品a成v人在线播放 | 99成人在线| 在线综合视频 | 国产免费视频 | 98色 | 大江大河第三部50集在线观看旭豪 | 国产无套内射久久久国产 | 日韩片在线观看 | 九色pony麻豆 | 91国偷自产一区二区三区水蜜桃 | 国产欧美一区二区三区免费看 | 精品美女一区 | 国内少妇毛片视频 | 欧美性猛交xxx嘿人猛交 | 欧美无乱码久久久免费午夜一区 | 日本不卡网 | 一区二区三区精品视频 | 懂色av中文字幕一区二区三区 | 午夜天堂在线观看 | www超碰在线观看 | 国产第一福利影院 | 波多野结衣视频一区二区 | 国产精品日本一区二区不卡视频 | 少妇激情一区二区三区 | 国产内谢 | 7777久久久国产精品 | 暖暖免费观看日本版 | 天堂中文在线8 | 性欧美精品动漫片 | 美女100%视频免费观看 | 成人免费看片98 | 久久久久a | 国产av麻豆mag剧集 | 九七超碰在线 | 日韩中文字幕免费看 | 性盈盈影院中文字幕 | 国产日韩成人内射视频 | 视频在线一区二区 | swag国产精品一区二区 | 亚洲最大成人在线观看 | 台湾佬中文娱乐22vvvv | 中文字幕亚洲天堂 | 中文字幕成人网 | 亚洲精品蜜桃久久久久久 | 五月婷婷六月合 | 黑人粗一硬一长一进一爽一a级 | 99久久久无码国产精品免费 | 欧美一级性片 | 亚洲最大福利视频 | 老师粉嫩小泬喷水视频90 | 拨开少妇两片肥嫩的肉 | 久久综合香蕉国产蜜臀av | 初尝性事后的女的 | 欧美一区二区三区久久精品 | 色网站在线观看 | 国产麻豆a毛片 | 在线视频日韩 | 中国国产精品 | 国产乱人伦偷精品视频aaa | 丰满大乳伦理少妇 | 中文在线а√在线 | 日韩丰满少妇无吗视频激情内射 | 亚洲啪啪av | 久草综合在线视频 | 国产精品老牛影院99av | 日韩一区二区精品视频 | 国产av精国产传媒 | 髙清视频播放在线观看 | 欧美人与性动交α欧美精品 | 欧美在线视频二区 | 综合色88 | 秋霞国产午夜精品免费视频 | 色拍拍欧美视频在线看 | 日韩日日日| 性啪啪chinese东北老女人 | 色淫av蜜桃臀少妇 | 少妇又色又紧又黄又刺激免费 | 激情国产av做激情国产爱 | 伊人手机视频 | 国产特级毛片aaaaaa毛片 | 国产一精品一av一免费爽爽 | 亚洲视频观看 | 91九色丨porny丨交换 | 亚洲精品乱码久久久久久自慰 | 国产精品18久久久 | 极品美女囗交 | 久久精品国产精品国产精品污 | 日本www视频 | 国产在线精 | 岬奈奈美女教师中文字幕 | 少妇夜夜爽夜夜春夜夜高潮 | 81精品国产乱码久久久久久 | 中文字幕亚洲视频 | 波多野结衣在线观看一区 | 日韩精品一区二区三区在线观看视频网站 | av在线麻豆| 中文午夜人妻无码看片 | 91手机在线视频 | 97se狠狠狠狠狼鲁亚洲综合色 | 99精品久久精品一区二区 | 国产午夜精品av一区二区麻豆 | 免费看男女做爰爽爽视频 | 无码av最新无码av专区 | 精品国产免费久久久久久尖叫 | 超碰在线日韩 | 136福利视频导航 | 伊人福利在线 | 国产精品久久久网站 | 1000部夫妻午夜免费 | 欧美日韩亚洲另类 | 人妻三级日本三级日本三级极 | 色婷婷亚洲六月婷婷中文字幕 | 国内毛片毛片毛片毛片毛片毛片 | 亚洲精品大片www | 97资源共享在线视频 | 国产日产精品久久快鸭的功能介绍 | 激情综合色综合啪啪开心 | 精品一区二区久久久久久久网站 | 亚洲视频 中文字幕 | 亚洲第一免费网站 | 中文在线资源 | 青柠影视在线观看免费高清中文 | 大地资源网第二页免费观看 | 久久日本精品字幕区二区 | 影音先锋激情 | 黄色激情在线 | 日本被黑人强伦姧人妻完整版 | 欧美资源在线观看 | 亚洲精品v天堂中文字幕 | 欧美一区二区三区免费视频 | 国产激情在线视频 | 999国产在线| 欧美最猛黑人xxxx黑人表情 | 人成福利视频在线观看 | 无遮挡呻吟娇喘视频免费播放 | 少妇午夜三级伦理影院播放器 | 欧美成年人网站 | 91欧美一区二区三区 | 成人亚洲国产精品一区不卡 | www.香蕉视频在线观看 | av一本二本 | 日本黄色三级视频 | 久色伊人 | 成人久久免费 | 一本无码久本草在线中文字幕dvd | 极品主播超大尺度福利视频在线 | wwwyoujizzcom在线 wwwyoujizzcom中国版 | 免费人成在线观看网站 | 久久大胆视频 | 国产精品推荐天天看天天爽 | 激情婷婷六月天 | 农村妇女愉情三级 | 黄色成人毛片 | 亚洲美女综合网 | 国产乱码一二三区精品 | 中文文字幕文字幕肉岳 | 国产周晓琳在线另类视频 | 久久综合久久网 | 北京富婆泄欲对白 | 国产在线导航 | 中文字幕+乱码+中文字幕一区 | 无码人妻aⅴ一区二区三区有奶水 | 在线欧美| 精品成人在线观看 | 成人免费毛片明星色大师 | 91久久国产综合久久 | 水蜜桃av无码 | 日本免费一二三区视频 | 亚洲资源网 | 日韩毛片av| 国产性色强伦免费视频 | 国产不卡视频一区二区三区 | 国产一区日本 | 亚洲国产精品美女久久久久 | 国产伦理精品一区二区三区观看体验 | 交换配乱吟粗大农村大坑性事视频 | 色噜噜久久综合伊人一本 | 国产一卡二卡在线播放 | 蜜桃视频在线观看www | 主播粉嫩国产在线精品 |