| #!/usr/bin/perl |
| use warnings; |
| use strict; |
| use feature "switch"; |
| #use experimental qw( switch ); |
| |
| open (LIB, $ARGV[1]) ; |
| my $prefix = $ARGV[0]; |
| my @cells = ( |
| # 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); |
| } |
| |
| |
| } |
| } |