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__
|