blob: ce408917840660d6cb2583d878ae4aad9e057bd0 [file] [log] [blame]
#!/usr/bin/perl
# Copyright (c) Efabless Corporation. All rights reserved.
# See LICENSE file in the project root for full license information.
use warnings;
use strict;
use feature "switch";
#use experimental qw( switch );
open (LIB, $ARGV[1]) ;
my $prefix = $ARGV[0];
my @cells = (
"xnor2_4",
"dfstp_2",
"xor3_4",
"or2b_2",
"xnor3_2",
"sdfbbn_2",
"sdfxtp_2",
"dfxtp_2",
"xor2_2",
"o311ai_2",
"nand2_2",
"sdfrtp_2",
"and4_2",
"dfsbp_2",
"or4_2",
"inv_2",
"dfrbp_2",
"buf_8",
"dlymetal6s4s_1",
"xor2_4",
"inv_4",
"o31ai_2",
"bufbuf_16",
"dlygate4sd3_1",
"o22ai_2",
"o32ai_2",
"and3_2",
"o2111ai_2",
"dlrbp_2",
"and4bb_2",
"nand3b_2",
"buf_6",
"and4b_2",
"a2bb2oi_2",
"buf_12",
"and2_2",
"dlxbn_2",
"dlrtp_2",
"xor3_1",
"a21oi_2",
"inv_12",
"o21ai_2",
"a311oi_2",
"buf_4",
"o21bai_2",
"nand3_2",
"dlygate4sd2_1",
"o211ai_2",
"or4b_2",
"and3b_2",
"or4bb_2",
"sdfrbp_2",
"o2bb2ai_2",
"bufinv_16",
"xor3_2",
"o41ai_2",
"or3b_2",
"inv_8",
"or2_2",
"dfrtp_2",
"bufbuf_8",
"bufinv_8",
"buf_16",
"buf_2",
"inv_6",
"xnor3_4",
"inv_16",
"and2b_2",
"a2111oi_2",
"dfxbp_2",
"xnor3_1",
"dlymetal6s6s_1",
"dfbbn_2",
"o221ai_2",
"sdfstp_2",
"a31oi_2",
"a211oi_2",
"nand2b_2",
"a22oi_2",
"dlymetal6s2s_1",
"dlxtn_2",
"a21boi_2",
"dlrtn_2",
"a221oi_2",
"or3_2",
"sdfsbp_2",
"xnor2_2",
"sdfxbp_2"
# # conb - 1
# 'conb_1',
#
# # AND - 9
# 'and2_1','and2_2','and2_4',
# 'and3_1','and3_2','and3_4',
# 'and4_1','and4_2','and4_4',
#
# # Buffer - 5
# 'buf_1','buf_2','buf_4','buf_8','buf_16',
#
# # Clock Buffer - 5
# #'clkbuf_1','clkbuf_2','clkbuf_4','clkbuf_8','clkbuf_16',
#
# # Inverters - 5
# 'inv_1','inv_2','inv_4','inv_8','inv_16',
#
# # Majority - 3
# 'maj3_1','maj3_2','maj3_4',
#
# # Multiplexors - 10
# 'mux2_1','mux2_2','mux2_4','mux2_8',
# 'mux2i_1','mux2i_2','mux2i_4',
# 'mux4_1','mux4_2','mux4_4',
#
# # NAND - 10
# 'nand2_1','nand2_2','nand2_4','nand2_8',
# 'nand3_1','nand3_2','nand3_4',
# 'nand4_1','nand4_2','nand4_4',
#
# # NOR - 10
# 'nor2_1','nor2_2','nor2_4','nor2_8',
# 'nor3_1','nor3_2','nor3_4',
# 'nor4_1','nor4_2','nor4_4',
#
# # OR - 9
# 'or2_1','or2_2','or2_4',
# 'or3_1','or3_2','or3_4',
# 'or4_1','or4_2','or4_4',
#
# # XOR - 4
# 'xor2_1','xor2_2','xor2_4',
# 'xor3_1',
#
# # XNOR - 4
# 'xnor2_1','xnor2_2','xnor2_4',
# 'xnor3_1',
#
# # OA & OAI - 24
# 'o41a_1', 'o41a_2', 'o41a_4',
# 'o41ai_1', 'o41ai_2', 'o41ai_4',
# 'o32a_1', 'o32a_2', 'o32a_4',
# 'o32ai_1', 'o32ai_2', 'o32ai_4',
# #'o22a_1',
# 'o22a_2', 'o22a_4',
# #'o22ai_1',
# 'o22ai_2', 'o22ai_4',
# #'o21a_1',
# 'o21a_2', 'o21a_4',
# #'o21ai_1',
# 'o21ai_2', 'o21ai_4',
#
# # AO & AOI - 48
# 'a41o_1', 'a41o_2', 'a41o_4',
# 'a41oi_1', 'a41oi_2', 'a41oi_4',
#
# 'a32o_1', 'a32o_2', 'a32o_4',
# 'a32oi_1', 'a32oi_2', 'a32oi_4',
#
# 'a22o_1', 'a22o_2', 'a22o_4',
# 'a22oi_1', 'a22oi_2', 'a22oi_4',
# 'a21o_1', 'a21o_2', 'a21o_4',
# 'a21bo_1', 'a21bo_2', 'a21bo_4',
# 'a21oi_1', 'a21oi_2', 'a21oi_4',
# 'a21boi_1', 'a21boi_2', 'a21boi_4',
# 'a2111o_1', 'a2111o_2', 'a2111o_4',
# 'a2111oi_1', 'a2111oi_2', 'a2111oi_4',
# 'a211o_1', 'a211o_2', 'a211o_4',
# 'a211oi_1', 'a211oi_2', 'a211oi_4',
#
# 'a2bb2oi_1', 'a2bb2oi_2', 'a2bb2oi_4'.
# 'a2bb2o_1', 'a2bb2o_2', 'a2bb2o_4'.
#
# # FF - 20
# 'dfrtn_1',
# 'dfbbn_1', 'dfbbn_2',
# 'dfbbp_1',
# 'dfxbp_1', 'dfxbp_2',
# 'edfxbp_1',
# 'dfxtp_1', 'dfxtp_2', 'dfxtp_4',
# 'dfrbp_1', 'dfrbp_2',
# 'dfrtp_1', 'dfrtp_2', 'dfrtp_4',
# 'dfsbp_1', 'dfsbp_2',
# 'dfstp_1', 'dfstp_2', 'dfstp_4',
);
#if (grep { $_ eq 'flour' } @ingredients) { ... }
my $state = 0;
my $count = 0;
while(my $line=<LIB>){
given ($state) {
when ($state==0){
#print $line;
if ($line =~ /cell\s*\(\"?${prefix}_(.*?)\"?\)/) {
#print "$1\n";
if (grep { $_ eq $1 } @cells) {
$state = 1;
print $line;
} else {
$state = 2;
print "/* removed $1 */\n"
}
$count = 1;
} else {
print $line;
}
}
when($state==1){
$count++ if ($line =~ /\{/);
$count-- if ($line =~ /\}/);
$state = 0 if($count==0);
print $line;
}
when($state==2){
$count++ if ($line =~ /\{/);
$count-- if ($line =~ /\}/);
$state = 0 if($count==0);
}
}
}