| #!/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_4', |
| 'and3_4', |
| 'and4_4', |
| |
| # Buffer - 5 |
| 'buf_8','buf_16', |
| |
| # Clock Buffer - 5 |
| #'clkbuf_1','clkbuf_2','clkbuf_4','clkbuf_8','clkbuf_16', |
| |
| # Inverters - 5 |
| 'inv_8','inv_16', |
| |
| # Majority - 3 |
| 'maj3_4', |
| |
| # Multiplexors - 10 |
| 'mux2_8', |
| 'mux2i_4', |
| 'mux4_4', |
| |
| # NAND - 10 |
| 'nand2_4','nand2_8', |
| 'nand3_4', |
| 'nand4_4', |
| |
| # NOR - 10 |
| 'nor2_4','nor2_8', |
| 'nor3_4', |
| 'nor4_4', |
| |
| # OR - 9 |
| 'or2_4', |
| 'or3_4', |
| 'or4_4', |
| |
| # XOR - 4 |
| 'xor2_4', |
| |
| |
| # XNOR - 4 |
| 'xnor2_4', |
| |
| # OA & OAI - 24 |
| 'o41a_4', |
| 'o41ai_4', |
| 'o32a_4', |
| 'o32ai_4', |
| #'o22a_1', |
| 'o22a_4', |
| #'o22ai_1', |
| 'o22ai_4', |
| #'o21a_1', |
| 'o21a_4', |
| #'o21ai_1', |
| 'o21ai_4', |
| |
| # AO & AOI - 48 |
| 'a41o_4', |
| 'a41oi_4', |
| |
| 'a32o_4', |
| 'a32oi_4', |
| |
| 'a22o_3', |
| 'a22oi_4', |
| 'a21o_4', |
| 'a21bo_4', |
| 'a21oi_4', |
| 'a21boi_4', |
| 'a2111o_4', |
| 'a2111oi_4', |
| 'a211o_4', |
| 'a211oi_4', |
| |
| 'a2bb2oi_4'. |
| 'a2bb2o_4'. |
| |
| # FF - 20 |
| |
| 'dfbbn_2', |
| |
| 'dfxbp_2', |
| |
| 'dfxtp_4', |
| 'dfrbp_2', |
| 'dfrtp_4', |
| |
| '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); |
| } |
| |
| |
| } |
| } |