Я написал Perl-код, который может искать и удалять строки из файла (IN_FILE), который содержит «max_transition», когда условие «direction: output» будет удовлетворять.После удаления строки код записывает измененный файл в другое место.
Теперь мне нужно удалить строку «max_transition», когда условие «direction: output» будет удовлетворять, а также где он найдет слово »Синхронизация "в этой конкретной группе выводов.
IN_FILE, имеет выходной вывод" HIZIBI_79 ", HIZIBI_78 и HIZIBI.После запуска сценария строку «max_transition» не следует удалять с вывода «HIZIBI_79», HIZIBI_78 », поскольку в этой группе выводов отсутствует« синхронизация ». Только строка« max_transition »будет удалена с вывода« HIZIBI », у нее есть«группа "хронометраж".
Есть идеи, как это реализовать?
Выходной файл должен выглядеть следующим образом: OUT_FILE
use warnings;
use strict;
my $inputfile = $ARGV[0]; # input lib FILE
if ($#ARGV!=0)
{
print "USAGE :: perl max_tran_update.pl <<LIB_FILE>> \n\n" ;
exit(1);
}
my $cmd = "mkdir tmpdir;";
system ($cmd);
my $iline;
my $flag_outpin = 0;
my $out_pin_flag = 0;
open (INFILE,"<","$inputfile") || die "Can not open Input LIB File";
open (my $OPFILE,">","tmpdir/input_lib.lib") || die "Can not open Input Text File";
while ($iline = <INFILE>)
{
chomp $iline;
print $OPFILE "$iline\n";
if (($iline =~m/^\s*direction\s*:\s*output\s*;/g))
{
$flag_outpin=1;
while ($iline = <INFILE>)
{
if (($iline =~m/^\s*direction\s*:\s*input\s*;/g))
{
$flag_outpin=0;
}
if (($iline =~m/^\s*direction\s*:\s*output\s*;/g))
{
$flag_outpin=1;
}
if (($iline =~m/^\s*max_transition\s*:/g) && ($flag_outpin == 1))
{
$iline =~ s/$iline//g ;
}
else
{
print $OPFILE "$iline";
}
}
}
}
close INFILE;
close $OPFILE;
IN_FILE
cell (lib_1) {
dont_use : true ;
dont_touch : true ;
pin ("HIZIBI_IN_1") {
direction : input ;
clock : true ;
max_transition : 1 ;
capacitance : 12 ;
}
pin ("HIZIBI_79") {
direction : output ;
max_transition : 10;
min_capacitance : 3 ;
}
pin ("HIZIBI_IN_1") {
direction : input ;
clock : true ;
max_transition : 1 ;
capacitance : 1 ;
}
pin ("HIZIBI_78") {
direction : output ;
max_transition : 10;
min_capacitance : 34 ;
capacitance : 34 ;
}
pin ("HIZIBI") {
direction : output ;
clock : true ;
max_transition : 20;
related_power_pin : VDD ;
related_ground_pin : VSS ;
timing () {
cell_fall (into_f1) {
index_1("1,2,3,4,5") ;
index_2("1,2,3,4,5") ;
values("13, 13, 14, 16, 18",\
"13, 14, 15, 16, 19",\
"14, 15, 16, 17, 20",\
"15, 15, 16, 18, 20",\
"15, 16, 17, 18, 21") ;
}
}
}
}
OUT_FILE
cell (lib_1) {
dont_use : true ;
dont_touch : true ;
pin ("HIZIBI_IN_1") {
direction : input ;
clock : true ;
max_transition : 1 ;
capacitance : 12 ;
}
pin ("HIZIBI_79") {
direction : output ;
max_transition : 10;
min_capacitance : 3 ;
}
pin ("HIZIBI_IN_1") {
direction : input ;
clock : true ;
max_transition : 1 ;
capacitance : 1 ;
}
pin ("HIZIBI_78") {
direction : output ;
max_transition : 10;
min_capacitance : 34 ;
capacitance : 34 ;
}
pin ("HIZIBI") {
direction : output ;
clock : true ;
related_power_pin : VDD ;
related_ground_pin : VSS ;
timing () {
cell_fall (into_f1) {
index_1("1,2,3,4,5") ;
index_2("1,2,3,4,5") ;
values("13, 13, 14, 16, 18",\
"13, 14, 15, 16, 19",\
"14, 15, 16, 17, 20",\
"15, 15, 16, 18, 20",\
"15, 16, 17, 18, 21") ;
}
}
}
}