【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比…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
