Predictions Software TSMC DFM Compliant Logo

WWW PEYE-CAA Script

The script below is perl using the peye module. The web interface defines the input options and a layer_table.pl file mapping the GDSII layer numbers to peye names (active, poly etc.). The "serious" work is done by the FaultMapShorts function which is defined as part of the peye perl module.
use Getopt::Long;
use peye;
use peye::pdf;
use Time::HiRes qw(gettimeofday);

$start = gettimeofday();

GetOptions(
    "file=s"     => \$file,          # gdsii file
    "metal=s"    => \$metal_name,    # layer to process
    "distance=f" => \$distance,      # min sep
);

# generated by the www form.
require "layer_table.pl";

load_layers( $file, \%layer_table );

$active = Andnot( $active, $poly ) if ( defined $active and defined $poly );

# generate the map layers
$faults = FaultMapShorts( $$metal_name, $distance, \@plotlist );

do_color();
$$metal_name->{shade} = 0;
push( @plotlist, $$metal_name );
push( @plotlist, defined_layers( \%layer_table ) );

plotps( "FaultMap.ps", \@plotlist );
peye::plot_graphs("graphs.ps");

## Print the stats
print "Predictions Software Ltd\t\thttp://www.icyield.com/\n\n";
print "      WWW PEYE-CAA Script Output for $metal_name\n\n";
print "Root cell \"", rootcell(), "\"\n\n";
print "Cell area     \t \t\t", area( region() ) / 100000000, " cm^2\n";

print "Boundary area \t \t\t" . area( my_peye_region() ) / 100000000, " cm^2\n"
  if ( defined $boundary );

print "\nShort faults for layer $metal_name.\n\n";

$single_cell = $faults * area( my_peye_region() ) / 100000000;
print "Estimated Faults per \"cell\" \t$single_cell\n";
my $yield = exp( -$single_cell ) * 100;    # simple poisson
print "Estimated yield(\%) per \"cell\" \t$yield \%\n";
print "Equivalent Faults per cm^2 \t", sprintf( '%.6f', $faults ), "\n";
$yield = sprintf( '%.5f', exp( -$faults ) * 100 );    # simple poisson
print "Equivalent yield(\%) per cm^2 \t$yield \%\n";

## layer colors
print_key( \%layer_table );

print "\n\nDefect density of 1 defect/cm^2,",
  " for defect sizes greater than $distance um,\n",
  "with a size distribution of 1/(defect size)^3.\n\n";
printf "Executed in %0.3f secs\n",  gettimeofday() - $start;

pdf( "www-peye-caa-results.pdf",           # join the ps files
        "text.ps", "graphs.ps", "FaultMap.ps" );

exit;

sub my_peye_region {
    if ( defined $boundary ) {
        return region($boundary);
    }
    else {
        return region();
    }
}

sub defined_layers {
    my $hashref = shift;
    my @res;
    foreach my $layer ( sort values %$hashref ) {
        if ( $layer ne $metal_name ) {
            push( @res, $$layer );
        }
    }
    return @res;
}

sub print_key {
    my $hashref = shift;
    print "\n\n\t \tLayer Key\n\n";
    foreach my $layer ( sort values %$hashref ) {
        my $light = "\t";
        $light = "light\t" if ( $$layer->{shade} == 0.7 );
        print "Layer $layer \t=> ", $light, $$layer->{color};
        if ( $$layer->{shade} == -1 ) {
            print "\t outline\n";
        }
        else {
            print "\t solid\n";
        }
    }
}

sub do_color {
    $active->{color} = "Green"         if ( defined $active );
    $active->{shade} = -1              if ( defined $active );
    $poly->{color}   = "Red"           if ( defined $poly );
    $poly->{shade}   = -1              if ( defined $poly );
    $metal1->{color} = "Blue"          if ( defined $metal1 );
    $metal1->{shade} = -1              if ( defined $metal1 );
    $metal2->{color} = "Indigo"        if ( defined $metal2 );
    $metal2->{shade} = -1              if ( defined $metal2 );
    $metal3->{color} = "Brown"         if ( defined $metal3 );
    $metal3->{shade} = -1              if ( defined $metal3 );
    $metal4->{color} = "SeaGreen"      if ( defined $metal4 );
    $metal4->{shade} = -1              if ( defined $metal4 );
    $metal5->{color} = "PaleTurquoise" if ( defined $metal5 );
    $metal5->{shade} = -1              if ( defined $metal5 );
    $metal6->{color} = "Orange"        if ( defined $metal6 );
    $metal6->{shade} = -1              if ( defined $metal6 );

    $contact->{color} = "Green"         if ( defined $contact );
    $contact->{shade} = 0.7             if ( defined $contact );
    $via1->{color}    = "Blue"          if ( defined $via1 );
    $via1->{shade}    = 0.7             if ( defined $via1 );
    $via2->{color}    = "Brown"         if ( defined $via2 );
    $via2->{shade}    = 0.7             if ( defined $via2 );
    $via3->{color}    = "SeaGreen"      if ( defined $via3 );
    $via3->{shade}    = 0.7             if ( defined $via3 );
    $via4->{color}    = "PaleTurquoise" if ( defined $via4 );
    $via4->{shade}    = 0.7             if ( defined $via4 );
    $via5->{color}    = "Orange"        if ( defined $via5 );
    $via5->{shade}    = 0.7             if ( defined $via5 );
}




© Copyright