【IC验证】perl脚本——分析前/后仿用例回归情况

目录

1 脚本名称

2 脚本使用说明

3 nocare_list文件示例

4 脚本执行方法

5 postsim_result.log文件示例

6 脚本代码


1 脚本名称

post_analysis

2 脚本使用说明

help:打印脚本说明信息

命令:post_analysis help

前/后仿结束后,首先填写好nocare_list(要过滤的log信息),然后在有log文件的上一层次路径下运行post_analysis脚本,执行脚本时若不带-all参数,则过滤掉nocare_list中的信息后只对后仿log进行分析,若带-all参数,则会过滤nocare_list中的信息后,对前/后仿的log信息进行分析,给出pass、timeout、bombed、violation等结果:

(1)不带-all参数:

  脚本会只分析名称带max或者min的后仿文件夹如(rfdig_m33_tc029_max、rfdig_m33_tc001_max_20230911),除去runsim.log文件中和nocare_list中的内容相关的violation,之后在各个用例文件夹下产生runsim_temp.log文件,随后分析runsim_temp.log文件out of reset之后的内容,若case PASS但存在violation,则输出结果 VOILATION以及$setuphold/$setup/$hold/$width违例的数量,并产生结果文件: postsim_result.log;若不仍存在violation,则输出结果PASS到postsim_result.log文件中;否则输出结果FAIL、TIMEOUT、RUNNING、BOMB到postsim_result.log文件中。

(2)带-all参数:

对前仿也进行上述分析。

3 nocare_list文件示例

在runsim.log中找到包含以下关键字的行,并将其删除:

4 脚本执行方法

post_analysis //只对文件夹名称中有max或者min的后仿文件夹进行分析
post_analysis -all //对前后仿的文件夹都进行分析

5 postsim_result.log文件示例

(1)PASS说明reset后无任何violation;

(2)VOILATION说明reset后仍存在violation,需查看对应的runsim_temp.log确认每一个violation;

(3)FAIL说明用例fail,需查看对应的runsim_temp.log,确认fail原因;

(4)TIMEOUT说明用例超时,需查看对应的runsim_temp.log,确认超时原因;

(5)RUNNING说明用例还在跑,确认相关原因;

(6)BOMB说明用例编译失败,需查看对应的vcs_compile.log确认编译失败原因;

6 脚本代码

#! /usr/bin/perl -w

#==========================================================
# PERL MODULE 
#==========================================================

use Cwd;
use Getopt::Long;
    $Getopt::Long::ignorecase = 0;

#==========================================================
# PERL FUNCTION GetOptions (get command parameters)
#==========================================================
GetOptions("all" => \$g_dir) or die ("Invalid arguments. \n");

our $g_help = 0;
if (!GetOptions (
     "help" => \$g_help,
                )
   ) {
  &print_message();
  exit 0;
}


#==========================================================
# GENERATE postsim_result.log FILE
#==========================================================


our $sim_log = "runsim.log";
our $new_sim_log = "runsim_temp.log";
our @dirs = <*>;

our $reset_line_num;
our $tail_lines; 
our $casename;

($sec,$min,$hour,$mday,$mon,$year) = localtime();

if (open(NOCARE_ID,"nocare_list") or die "cannot open nocare_list, no such file!!!") {
    @nocarecontent = <NOCARE_ID>;

    my $cur_dir = getcwd; 
    chdir($cur_dir) or die "cannot cd $cur_dir"; #cd simdir 

    open(PS_ID,">postsim_result.log");
    print  PS_ID "====================================================";
    printf PS_ID "%02d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,"$hour","$min","$sec";
    print  PS_ID "====================================================\n";
    
    foreach $dir (@dirs) { 
        chdir($cur_dir) or die "cannot cd $cur_dir"; #cd simdir 
        if ($g_dir) {
            if ($dir =~ /(.+)tc(\d+)(.*)/) {
                $casename = $dir;
                print "dir_name = $casename \n" ;
            }
            else {
                next;
            }
        }
        else {
            if (($dir =~ /(.+)(\d+)(.*)max(.*)/) or ($dir =~ /(.+)(\d+)(.*)min(.*)/)) {
                $casename = $dir;
                print "dir_name = $casename \n" ;
            }
            else {
                next;
            }
        }
        chdir($dir) or die "cannot cd $dir"; #cd simdir/xxx_tc00X(every case dir)
        unlink $new_sim_log;
        open(NEW_ID,">runsim_temp.log");
        $nocarename=$sim_log; #simdir/xxx_tcXXX/runsim.log
        if (open(LOG_ID,"$nocarename")) {
            @logcontent = <LOG_ID>; #ever line in runsim.log
            $match=0;
            $write_en=0;
            foreach $log (@logcontent) {
                if ($match eq 1) {
                    $match = 0;
                } else {
                    foreach $nocare (@nocarecontent) {
                        if ($log =~ /$nocare/) {
                            $match = 1;
                            $write_en = 0;
                            last;
                        } else {
                            $write_en = 1;
                        }
                    }
                    if ($write_en eq 1) {
                        print NEW_ID $log;
                        $write_en = 0;
                    }
                }
            }
            close NEW_ID; #finish write run_sim_temp.log
            close LOG_ID; #finish read run_sim.log
        } 
        else {
            print "Can not find $nocarename file!!! \n";
        }

        ####report###
        if(-e "runsim.log") {
            if (open NEW_ID,$new_sim_log) {
                @linecontent = <NEW_ID>;
                $reset_bgn = 0;
                $setuphold = 0;
                $width     = 0;
                $print_over= 0;
                foreach $line (@linecontent) {
                    if ($reset_bgn eq 1) {
                        if ($line =~ /.*\$setuphold.*/ or $line =~ /.*\$setup.*/ or $line =~ /.*\$hold.*/) {
                            $setuphold = $setuphold+1;
                        } elsif ($line =~ /.*\$width.*/) {
                            $width = $width+1;
                        } elsif ($line =~ /.*the test case finished with (\w+).*/) {
                            if($1 eq "FAIL") {
                                $print_over = 1;
                                printf PS_ID "%-50s%-10s%-30s","$casename",">>>>","FAIL";
                                print  PS_ID "\n"; 
                            } elsif ($1 eq "TIMEOUT") {
                                $print_over = 1;
                                printf PS_ID "%-50s%-10s%-30s","$casename",">>>>","TIMEOUT";
                                print  PS_ID "\n";  
                            } elsif ($1 eq "PASS") {
                                $print_over = 1;
                                if ($setuphold > 0 or $width > 0) {
                                    printf PS_ID "%-50s%-10s%-30s","$casename",">>>>","VOILATION";
                                    printf PS_ID "\$setuphold:%-5d \$width:%-5d",$setuphold,$width;
                                    print  PS_ID "\n";    
                                } else {
                                    printf PS_ID "%-50s%-10s%-30s","$casename",">>>>","PASS";
                                    print  PS_ID "\n";   
                                }
                            } else {
                               next;
                            }
                        } else {
                            next;

                        }
                    } else {
                        if ($line =~ /.*Out of reset!.*/) {
                            $reset_bgn = 1;
                        } else {
                            next;
                        }
                    }
                }
                if ($print_over eq 0) {
                    printf PS_ID "%-50s%-10s%-30s","$casename",">>>>","RUNNING";
                    print  PS_ID "\n"; 
                } else {
                    next;
                }
            } else {
                next;
            }
        } else {
             printf PS_ID "%-50s%-10s%-30s","$casename",">>>>","BOMBED";
             print  PS_ID "\n";    
        }
    }
    printf PS_ID "%-58s","========================================================";
    printf PS_ID "%-7s",$ENV{'USER'};
    printf PS_ID "%58s","========================================================";
    close PS_ID;
}


#==========================================================
# HELP INFORMATION PRINT
#==========================================================

if ($g_help) {
  &print_message();
  exit 0;
}

#==========================================================
# SUB PROGRAM (print help ingormation) 
#==========================================================

sub print_message ()
{
  print "
NAME
      post_analysis - Maxscend check case post sim result script

MAXSCEND
      post_analysis [-h]

Options
      -h : help information

You should run this script in the directory containing all the cases' working directories
        \n";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/232499.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VoxPoser:使用语言模型进行机器人操作的可组合 3D 值图

语言是一种压缩媒介&#xff0c;人们通过它来提炼和传达他们对世界的知识和经验。大型语言模型&#xff08;LLMs&#xff09;已成为一种有前景的方法&#xff0c;通过将世界投影到语言空间中来捕捉这种抽象。虽然这些模型被认为在文本形式中内化了可概括的知识&#xff0c;但如…

C++STL详解+代码分析+典例讲解

vector 的介绍&#xff1a; 1、vector是表示可变大小数组的序列容器。 2、vector就像数组一样&#xff0c;也采用的连续空间来存储元素&#xff0c;这也意味着可以采用下标对vector的元素进行访问。 3、vector与普通数组不同的是&#xff0c;vector的大小是可以动态改变的。 4、…

基于K-means与CNN的遥感影像分类方法

基于K-means与CNN的遥感影像分类 一、引言 1.研究背景 航天遥感技术是一种通过卫星对地观测获取遥感图像信息数据的技术&#xff0c;这些图像数据在各领域都发挥着不可或缺的作用。遥感图像分类主要是根据地面物体电磁波辐射在遥感图像上的特征&#xff0c;判断识别地面物体的属…

10 大 Mac 数据恢复软件深度评测

对于任何依赖计算机获取重要文件&#xff08;无论是个人照片还是重要商业文档&#xff09;的人来说&#xff0c;数据丢失可能是一场噩梦。值得庆幸的是&#xff0c;有多种专门为 Mac 用户提供的数据恢复工具&#xff0c;可以帮助检索丢失或意外删除的文件。在本文中&#xff0c…

基于Python+Selenium+Unittest+PO设计模式

一、什么是PO设计模式&#xff08;Page Object Model&#xff09; 1、Page Object是一种设计模式&#xff0c;它主要体现在对界面交互细节的封装上&#xff0c;使测试用例更专注于业务的操作&#xff0c;从而提高测试用例的可维护性。 2、一般PO设计模式有三层 第一层&#x…

【基于NLP的微博情感分析:从数据爬取到情感洞察】

基于NLP的微博情感分析&#xff1a;从数据爬取到情感洞察 背景数据集技术选型功能实现创新点 今天我将分享一个基于NLP的微博情感分析项目&#xff0c;通过Python技术、NLP模型和Flask框架&#xff0c;对微博数据进行清洗、分词、可视化&#xff0c;并利用NLP和贝叶斯进行情感分…

基于Lucene的全文检索系统的实现与应用

文章目录 一、概念二、引入案例1、数据库搜索2、数据分类3、非结构化数据查询方法1&#xff09; 顺序扫描法(Serial Scanning)2&#xff09;全文检索(Full-text Search) 4、如何实现全文检索 三、Lucene实现全文检索的流程1、索引和搜索流程图2、创建索引1&#xff09;获取原始…

Moco框架的搭建使用

一、前言   之前一直听mock&#xff0c;也大致了解mock的作用&#xff0c;但没有具体去了解过如何用工具或框架实现mock&#xff0c;以及也没有考虑过落实mock&#xff0c;因为在实际的工作中&#xff0c;很少会考虑用mock。最近在学java&#xff0c;刚好了解到moco框架是用于…

语言模型GPT与HuggingFace应用

受到计算机视觉领域采用ImageNet对模型进行一次预训练&#xff0c;使得模型可以通过海量图像充分学习如何提取特征&#xff0c;然后再根据任务目标进行模型微调的范式影响&#xff0c;自然语言处理领域基于预训练语言模型的方法也逐渐成为主流。以ELMo为代表的动态词向量模型开…

创建dockerSwarm nfs挂载

创建dockerSwarm nfs挂载 nfs高可用部署(lsyncd两主机双向同步) nfs高可用部署(lsyncd三主机三向同步) 1. 通过 Volume 1.1 创建 Docker Volume 每个 swarm 节点均创建相同名称的 Docker Volume&#xff08;名称为 nfs120&#xff09; docker volume create --driver local …

Jupyter notebook修改背景主题

打开Anaconda Prompt&#xff0c;输入以下内容 1. pip install --upgrade jupyterthemes 下载对应背景主题包 出现Successfully installed jupyterthemes-0.20.0 lesscpy-0.15.1时&#xff0c;说明已经下载安装完成 2. jt -l 查看背景主题列表 3. jt -t 主题名称&#xff08;…

【docker 】centOS 安装docker

官网 docker官网 github源码 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装软件包 yum install -y yum-utils \device-mapper-persistent-data…

Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)

目录 一、前言 二、Bean配置信息重用 1.简介 : 2.实例 : 三、关于Bean的创建顺序 1.简介 : 2.实例 : 四、关于Bean的单例和多例 1.简介 : 2.实例 : 五、关于Bean的生命周期 1.简介 : 2.实例 : 六、Bean配置后置处理器 1.简介 : 2.实例 : 七、通过.properties文…

AcWing 93. 递归实现组合型枚举

Every day a AcWing 题目来源&#xff1a;93. 递归实现组合型枚举 解法1&#xff1a;回溯算法 标准的回溯算法模板题。 如果把 n、m 和数组 nums 都设置成全局变量的话&#xff0c;backtracking 回溯函数可以只用一个参数 level。 注意传参时 nums 不能用引用&#xff0c;…

Hive SQL间隔连续问题

问题引入 下面是某游戏公司记录的用户每日登录数据, 计算每个用户最大的连续登录天数&#xff0c;定义连续登录时可以间隔一天。举例&#xff1a;如果一个用户在 1,3,5,6,9 登录了游戏&#xff0c;则视为连续 6 天登录。 id dt1001 2021-12-121002 2021-12-12…

SQL语句---删除索引

介绍 使用sql语句删除索引。由于索引会占用一定的磁盘空间&#xff0c;因此&#xff0c;为了避免影响数据库性能&#xff0c;应该及时删除不再使用的索引。 命令 drop index 索引名 on 表名;例子 删除a表中的singleidx索引&#xff1a; drop index singleidx on a;下面是执…

GoldWave注册机 最新中文汉化破解版-安装使用教程

GoldWave是一个功能强大的数字音乐编辑器&#xff0c;是一个集声音编辑、播放、录制和转换的音频工具。它还可以对音频内容进行转换格式等处理。它体积小巧&#xff0c;功能却无比强大&#xff0c;支持许多格式的音频文件&#xff0c;包括WAV、OGG、VOC、 IFF、AIFF、 AIFC、AU…

FPGA 低延时 TCP UDP IP协议栈兼容1G 10G 25G MAC

在计算和数据中心、军事和航天、政府、仪器与测量、金融服务和广播和视频等行业&#xff0c;需要高可靠性的硬件和软件产品&#xff0c;帮助客户更快地开发部署新一代产品&#xff0c;减少技术和市场风险&#xff0c;我司研发的低延迟TCP/IP的IP核的传输速率高于传统网口&#…

汽车4S店中的“S”指的什么?柯桥生活英语学习

很多人买车都会去4S店选购 因为比较有保障 服务又很到位 可你有没有想过 这里的“4S”是什么意思 其实&#xff0c;这几个单词大家都认识 今天我们就来聊一下 与“4S店”相关的英文表达 01 “4S店”的英语表达 其实&#xff0c;4S店的全称是&#xff1a;汽车销售服务4S店…

基于Java的汽车客运站管理系统的设计与实现论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对汽车客运站售票信息管理混乱&#xff0c;出错率高&#xff0c;信息安…