Perl で gdsii
実行環境
  Active Perl
     更新するには
ppm
  ppm
  DownLoad
  実行
Help
   perldoc GDS2
Examples
  basic-lines
  simple
  simple-sref
  aref
  circle
  circle-inverted
  sample-arc
  donut
  Inverted-Donuts
  Donuts_Combination
  Hello-World
  CP-array
  text2gds.pm
  rotate.pm
  rotate-rectangle
  arc.pm
  line-and-space-180
  triangle-array-nega
  sq_sleeve.pm
  TriangleGridStep
  triangle-array-nega-CP
  CirclesArray-SQ
  LargeCircles
  MA6-Alignment-mark.pm
  Alignment-Place
  Triangle-Grid
  Triangle-Grid-Wide
  ellipsis-polygons
  inscribe_polygon
  inscribe_polygon.pm
  inscribe_polygon-ellipsis.pm
  sleeving-by-square-sample
  sleeving-by-square.pm

Perl Perl/GDSII page
Download (as "MA6-Alignment-mark.pm")

MA6-Alignment-mark.pm

#!/usr/bin/perl -w
# GDSII generation 
#
use GDS2;
use strict;

package AlignmentMark;
# ----------------------------------------------------------
sub         box($$$){
    my $size     = shift;
    my $layer    = shift;
    my $gds2File = shift;
    my $w = $size / 2;
    my $structure = sprintf("box-%3.2f-layer-%02d", $size, $layer);

    $gds2File -> printBgnstr(-name=>$structure);
    $gds2File -> printBoundary (
	-layer => $layer,
	-xy => [ -$w, -$w,    $w, -$w,    $w, $w, -$w, $w]);

    $gds2File -> printEndstr(-name=>$structure);    
    return $structure;
}
sub alignment_key ($$$$) {
    my ($length)   = shift;
    my ($width)    = shift;
    my ($layer)    = shift;
    my ($gds2File) = shift;

    my ($l, $d)    = ($length/2, $width/2);
    
    my ($structure) = sprintf("cross-layer-%02d", $layer);

    $gds2File -> printBgnstr(-name => $structure);
    $gds2File -> printBoundary(
	-layer=> $layer,
        -xy=>[
	      $d,  $d,  $l,  $d,  $l, -$d,
	      $d, -$d,  $d, -$l, -$d, -$l,
	     -$d, -$d, -$l, -$d, -$l,  $d,
	     -$d,  $d, -$d,  $l,  $d,  $l,
	]);

    $gds2File -> printEndstr;
    return ($structure);
}
my @layout3 = qw ( 
    - - b c b - -
    - - c b c - -
    b c - b - c b
    c b b b b b c
    b c - b - c b
    - - c b c - -
    - - b c b - -);

my @layout1 = qw (
    - - - c - - -
    - b c b c b -
    - c - b - c -
    c b b b b b c
    - c - b - c -
    - b c b c b -
    - - - c - - - );

sub alignment_layout($$@) {
    my $layer    = shift;
    my $gds2File = shift;
    my @layout  = @_;

    my $seq = 0;
    my $structure = sprintf("alignment_layer-%02d", $layer);
    $gds2File -> printBgnstr(-name => $structure);

    for my $x (     qw (-3 -2 -1  0  1  2  3)) {
	for my $y ( qw ( 3  2  1  0 -1 -2 -3)) {
	    my $x_location = $x * 20;
	    my $y_location = $y * 20;
	    if ($layout[$seq] eq 'c') {
		
		$gds2File -> printSref(
		    -name => sprintf("cross-layer-%02d", $layer),
		    -xy   =>  [$x_location, $y_location]);
	    } elsif ($layout[$seq] eq 'b') {
		$gds2File -> printSref(
		    -name => sprintf ("box-20.00-layer-%02d", $layer),
		    -xy   =>  [$x_location, $y_location]);
	    }
	    $seq++;
	}
    }
    $gds2File -> printEndstr();
    return $structure;
}
sub AlignmentMark ($) {
    my $layer_01  = shift;
    my $layer_02  = shift;
    my $layer_11 = shift;
    my $gds2File = shift;
    print alignment_key(20, 2, $layer_01, $gds2File),"\n";
    print alignment_key(20, 2, $layer_02, $gds2File),"\n";
    print alignment_key(20, 2, $layer_11, $gds2File),"\n";

# prepare layer 1,  2 and 11
    print           box(20,     $layer_01, $gds2File),"\n";
    print           box(20,     $layer_02, $gds2File),"\n";
    print           box(20,     $layer_11, $gds2File),"\n";

    print alignment_layout( $layer_01, $gds2File, @layout1),"\n";
    print alignment_layout( $layer_02, $gds2File, @layout3),"\n";
    print alignment_layout( $layer_11, $gds2File, @layout1),"\n";

# -------------------------------------------------------
# structure alignment-mark

    $gds2File -> printBgnstr(-name => 'alignment-mark');
    $gds2File -> printSref( -name => sprintf("alignment_layer-%02d", $layer_01),  -xy   => [0, 0]);
    $gds2File -> printSref( -name => sprintf("alignment_layer-%02d", $layer_02),  -xy   => [0, 0]);
    $gds2File -> printSref( -name => sprintf("alignment_layer-%02d", $layer_11),  -xy   => [0, 0]);

    $gds2File -> printEndstr;
}
1;
__END__
Last Update: Mon, 21 Feb 2022 10:13:01 GMT 1.66 2008/03/08