【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.logif (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.logclose 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 "
NAMEpost_analysis - Check case sim result scriptMAXSCENDpost_analysis [-h]Options-h : help informationYou should run this script in the directory containing all the cases' working directories\n";
}
相关文章:
【IC验证】perl脚本——分析前/后仿用例回归情况
目录 1 脚本名称 2 脚本使用说明 3 nocare_list文件示例 4 脚本执行方法 5 postsim_result.log文件示例 6 脚本代码 1 脚本名称 post_analysis 2 脚本使用说明 help:打印脚本说明信息 命令:post_analysis help 前/后仿结束后,首先填…...
Ansible适合的场景是什么?
Ansible将编排与配置管理、供应和应用程序部署结合并统一在一个易于使用的平台上。Ansible的一些主要场景包括: 配置管理:集中配置文件管理和部署是Ansible的一个常见场景。 应用程序部署:当使用Ansible定义应用程序,并使用Ansible Tower管…...
Flink 读写 HBase 总结
前言 总结 Flink 读写 HBase 版本 Flink 1.15.4HBase 2.0.2Hudi 0.13.0官方文档 https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/connectors/table/hbase/ Jar包 https://repo1.maven.org/maven2/org/apache/flink/flink-sql-connector-hbase-2.2/1…...
记录一次chatGPT人机协同实战辅助科研——根据词库自动进行情感分析
有一个Excel中的一列,读取文本判断文本包含积极情感词.txt和消极情感词.txt的个数,分别生成两列统计数据 请将 ‘your_file.xlsx’ 替换为你的Excel文件名,Your Text Column’替换为包含文本的列名。 这个程序首先读取了积极和消极情感词&…...
Java_LinkedList链表详解
目录 前言 ArrayList的缺陷 链表 链表的概念及结构 链表的种类 1.单向或双向 2.带头或不带头 3.循环或不循环 LinkedList的使用 什么是LinkedList LinkedList的使用 LinkedList的构造 LinkedList的其他常用方法介绍 LinkedList的遍历 ArrayList和LinkedList的…...
MacOS 12 开放指定端口 指定ip访问
MacOS 12 开放指定端口 指定ip访问 在 macOS 上开放一个端口,并指定只能特定的 IP 访问,你可以使用 macOS 内置的 pfctl(Packet Filter)工具来实现。 以下是一些基本的步骤: 1、 编辑 pf 配置文件: 打开 /…...
LeedCode刷题---滑动窗口问题
顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、长度最小的子数组 题目链接:长度最小的子数组 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。…...
leetcode24. 两两交换链表中的节点
题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出&#…...
TCP传输层详解(计算机网络复习)
介绍:TCP/IP包含了一系列的协议,也叫TCP/IP协议族,简称TCP/IP。该协议族提供了点对点的连接机制,并将传输数据帧的封装、寻址、传输、路由以及接收方式都予以标准化 TCP/IP的分层模型 在讲TCP/IP协议之前,首先介绍一…...
【LuatOS】简单案例网页点灯
材料 硬件:合宙ESP32C3简约版,BH1750光照度模块,0.96寸OLED(4P_IIC),杜邦线若干 接线: ESP32C3.GND — OLED.GND — BH1750.GND ESP32C3.3.3V — OLED.VCC — BH1750.VCC ESP32C3.GPIO5 — OLED.SCL — BH1750.SCL E…...
百度APP iOS端包体积50M优化实践(七)编译器优化
一. 前言 百度APP iOS端包体积优化系列文章的前六篇重点介绍了包体积优化整体方案、图片优化、资源优化、代码优化、无用类优化、HEIC图片优化实践和无用方法清理,图片优化是从无用图片、Asset Catalog和HEIC格式三个角度做深度优化;资源优化包括大资源…...
STM32-新建工程(标准库)
目录 STM32F10x新建工程(标准库) 移植文件夹 新建工程 添加启动文件和必需文件 在工程中加载新添加的文件 在工程中添加文件路径 在工程中添加main函数 添加lib库 添加必需文件 添加宏定义 点亮LED(标准库) STM32F10x新…...
Android集成科大讯飞语音识别与语音唤醒简易封装
目录 一、语音唤醒部分 1、首先在科大讯飞官网注册开发者账号 2、配置唤醒词然后下载sdk 3、选择对应功能下载 4、语音唤醒lib包全部复制到工程目录下 5、把语音唤醒词文件复制到工程的assets目录 6、复制对应权限到AndroidManifest.xml中 7、唤醒工具类封装 二、语音识…...
【Linux】telnet命令使用
telnet命令 telnet命令用于使用telnet协议与另一台主机进行通信。如果在没有主机参数的情况下调用telnet,它将进入命令模式,由其提示(telnet>)指示。在这种模式下,它接受并执行下面列出的命令。如果使用参数调用它…...
VCG 标记使用(BitFlags)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 对于网格的每个单形,我们都有一个称为BitFlags的组件,该组件存储固定大小的32位向量,用于各种需求。管理这些标志的相关类:vcg::tri::UpdateFlags与vcg::tri::UpdateSelection。主要的标记有:删除标记、边界标记…...
Pandas中的Series(第1讲)
Pandas中的Series(第1讲) 🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…...
从手工测试进阶中高级测试?如何突破职业瓶颈...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、手工测试如何进…...
【链表Linked List】力扣-114 二叉树展开为链表
目录 题目描述 解题过程 官方题解 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应…...
Go (一) 基础部分4 -- 文件处理
一、文件基本介绍 1.1、打开一个文件 基本介绍:打开一个文件用于读取,如果操作成功,返回的文件对象的方法可用于读取文件数据。如果出错,错误底层类型是"*.PathError" func Open(name string) (*File, error) name stri…...
集合03 Collection (List) - Java
List ArrayListArrayList注意事项ArrayList底层操作机制-源码分析(重点) VectorVector基本介绍 ——Vector和ArrayList比较Vector底层结构和源码分析 LinkedList基本介绍LinkedList的底层结构和操作机制LinkedList的增删改查 ——LinkedList和ArrayList比…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
