Perl脚本学习

最近项目中遇到了一个小的任务,需要写一个小的Perl脚本,刚好借此机会学习一下Perl,在这里总结一下。
项目中需要将一些从数字到rf的信号抓出来并且按一定的格式处理好送给模拟那边做后仿。我们直接用Verdi将顶层信号保存下来,然后那边给的需求是处理成如下格式:V(信号名,单个bit) <+ Vd信号值;
eg: V(TxSample[0]) <+ Vd
0;

#! /usr/bin/perl
use split;

open DEC, "> ../svtb/XXXX_signal.sv";
open SRC, "< ./script/XX_intf" or die "There is no XX_intf";

my $signal;
my $start;
my $end;
my num = 0;

while(SRC){
	my @sp_res_p0 = split /u_xxx_top\./;
	$num++'
	
	if($sp_res_p0[1] =~ m/\[/g){
		my @sp_res_p1 = split /\[/, $_;
		my @sp_res_p2 = split /\[/, $sp_res_p0[1];
		my @sp_res_p3 = split /\]/, $sp_res_p2[1];
		my @sp_res_p4 = split /\:/, $sp_res_p3[0];
		$start = sp_res_p4[1];
		$end   = sp_res_p4[0];
		my @num = ($start...$end);
		foreach (@num){
			print DEC "if\(\($p_res_p1[0]\[$_\] === 1\'bx\) || \($sp_res_p1[0]\[$\] === 1\'bz\)\) begin\n \$fdisplay \(fid, \"V\($sp_res_p2[0]\[\$_\]\) <+ Vd*0.5;\"\)\;\nend\nelse    begin\n\$fdisplay\(fid, \"V($sp_res_p2[0]\[$_\]\) <+ Vd*\%d;\",$sp_res_p1[0]\[$_\]\)\;\nend\n\n";"
												}
											}
	else {
		chomp $_;
		chomp $sp_res_p0[1];
		print DEC "if\(\($_ === 1\'bx\) || \($_ === 1\'bz\)\) begin\n	\$fdisplay\(fid, \"V\($sp_res_p0[1]\) <+ Vd*0.5;\"\)\;\nend\nelse begin\n \$fdisplay\(fid,\"V\($sp_res_p0[1]\] <+ Vd*\%d;\", $_\)\;\nend\n\n";
	}
}
print "generate ./svtb/xxx_getsgn.sv, $num. done.\n"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值