wordpress自适应网站博客模板最新,网站上的html内容怎么修改,香飘飘网站平台建设,查网址是否安全1 记录的背景
之前只知道有这个强大语言的存在#xff0c;但一直侥幸自己应该不会用到它#xff0c;所以一直没有开始学习。然而人生这么长#xff0c;怎就确定自己不会用到呢#xff1f;
这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。… 1 记录的背景
之前只知道有这个强大语言的存在但一直侥幸自己应该不会用到它所以一直没有开始学习。然而人生这么长怎就确定自己不会用到呢
这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码方便自己以后使用和修正。
2 思路整理
作为一个IC designer来说希望能通过功能仿真的结果来判断自己的代码是否存在功能问题而判断是否仿真通过是需要在验证环境中加入比对信息。是将目标值和RTL输出值进行一一比对只有每一个数据比对这里的比对通过是指数据一一相等或者在目标的误差范围内通过才算一支case通过也就是说的pass。在比对过程中需要对每一个数据进行判断只要有一个数据不一致则认为该case未通过因此经常的做法是将每个数据的比对结果用关键字打印出来比如比对通过用Pass比对没有用过则用Error。这些打印信息会输出到仿真的log文件中因此可以直接check仿真的log文件。判断一个case是否真正通过除了log中无Error外还需要统计Pass的个数如果数量不是目标数量该case同样仿真失败。
该记录只记录查找log文件中Error对于数量统计后续在记录。大致的思路如下
1执行一个文件就能仿真文件里相应的case。2执行完相应的case通过查log来判断需要判断该case是否通过并将结果答应道指定的一个文件中方便查看。3然后再执行下一个case判断通过与否。
针对于1每个case的仿真可以直接用makefile的指令来操作比如make sim TCtb_test_case
这里的关键点在于2如何把一个文件中的关键字符找出来并标记到指定文件这里用regression.log来表示中。
第一步分析需求——希望在regression.log文件中打印出具体case的仿真情况每次make sim结束后需要提取仿真log中的关键字符串信息
第二步perl脚本中读取文件和写入文件
第三步perl脚本中识别文件内容中的特殊字符串
第四步通过命令行将参数传递进perl脚本中 3 代码
自动执行各个case并将每个case的之行结果打印到regression.log中的文件命名为run_command.f文件内容如下
rm -rf ./regression.log
touch ./regression.logrm -rf ../log/tb_test_case_1.log
make sim TCtb_test_case_1
perl ./regression.pl ../log/tb_test_case_1.log tb_test_case_1rm -rf ../log/tb_test_case_2.log
make sim TCtb_test_case_2
perl ./regression.pl ../log/tb_test_case_2.log tb_test_case_2rm -rf ../log/tb_test_case_3.log
make sim TCtb_test_case_3
perl ./regression.pl ../log/tb_test_case_3.log tb_test_case_3
执行的perl文件命姑且叫做regression.pl在linux的执行命令是
perl ./regression.pl /xx/xx/xx/tb_test_case.log tb_test_case 该执行命令中的/xx/xx/xx/tb_test_case.log是跑具体case的仿真log里面打印了该case的每个比对信息tb_test_case是具体的case名字。此两个都是通过命令行将具体的参数传递给要执行的perl脚本前者传递给perl脚本中的$ARGV[0]后者传递给$ARGV[1]。
该regression.pl的文件内容如下所示
#/usr/bin/perluse strict;
use warnings;open (DATA_R,$ARGV[0]) || die cannot open read file;
open (DATA_W,/xx/xx/xx/regresion.log) || die cannot open write file;my lines DATA_R;
my size lines;
my $flag0;for ($a0;$a$size:$a) {
if (lines[$a] ~ /Error/) {
$flag1;
}
}if ($flag ~ /1/) {
print DATA_W $ARGV[1] Error, please check\n;
}else{
print DATA_W $ARGV[1] Pass\n;
}close DATA_R || die cannot close read file;
close DATA_W || die cannot close write file; 4 参考链接
Perl的命令行参数和ARGV - 骏马金龙 - 博客园 (cnblogs.com)
Perl 文件操作 | 菜鸟教程 (runoob.com)
这里的代码只做到了对log文件中打印的特殊字符串Error的查询并未统计pass的数量是否对。后续进一步学习在学习过程中补充修改 ……如有不对欢迎各网友达达们指出方便改进。