用户工具

站点工具


linux:perl:用perl产生verilog文件

1. 用perl产生verilog文件

主要是perl可以很方便支持类似1..3, a..c, A..C的 语法,对生成规律性的verilog语句很有帮助。 -- 而python没有这样的语法。

1.1 vpl.pl

专门写一个统一的脚本来处理,通过读取分析源文件,来产生需要的代码。

  • 以行首;分号开始为perl语句
  • 其它情况全部当做是perl的print语句,不用自己再去敲print和\n这样的东西,相对来说还是比较简单,容易使用。
vpl.pl
#!/usr/bin/perl
if (scalar @ARGV < 1) {
    print "usage: perl vpl.pl xxx.x [xxx.x.v]\n";
    exit;
}
 
$ivpl = shift @ARGV;
$opl = "$ivpl.pl";
if (scalar @ARGV > 0) {
$vfile = shift @ARGV;
}
else {
$vfile = "$ivpl.v";
}
 
open(fh, "$ivpl") || die "can not open $ivpl";
open(ofh, ">$opl") || die "can not open $opl";
 
print ofh "open (vfh, \">$vfile\");\n";
while($line = <fh>) {
    chomp $line;
 
    if ($line =~ /^;(.*)/) {
        # is perl program
        $perl_line = $1;
        $perl_line =~ s/print\s*"/print vfh "/;
        print ofh "$perl_line" ."\n";
    }
    else{
        $line =~ s/\\/\\\\/g;
        $line =~ s/"/\\"/g;
        print ofh "print vfh \"$line\\n\"" .";\n";
    }
}
close fh;
close ofh;
 
# excute .opl file, and then delete tmp .opl file
$syscmd = "perl $opl";
$ret = system("$syscmd");
if ($ret == 0) {
    print "generate $vfile ok!\n";
    @ar = glob "$opl";
    foreach $tmp (@ar) {
        unlink ($tmp);
    }
}
 
exit 0;

1.2 example

localhost /home/user01 perl ./vpl.pl a.x
generate a.x.v ok!

file: a.x

module a(
    input clk,
 
; for ($i=0; $i<10; $i++) {
    input data_$i,   
;}
 
    output data_o
);
 
; for ($i=0; $i<10; $i++) {
;     $j = 10 - $i;
//  10 - $j = $i;
; }
 
 
endmodule

output a.x.v:

module a(
    input clk,
 
    input data_0,   
    input data_1,   
    input data_2,   
    input data_3,   
    input data_4,   
    input data_5,   
    input data_6,   
    input data_7,   
    input data_8,   
    input data_9,   
 
    output data_o
);
 
//  10 - 10 = 0;
//  10 - 9 = 1;
//  10 - 8 = 2;
//  10 - 7 = 3;
//  10 - 6 = 4;
//  10 - 5 = 5;
//  10 - 4 = 6;
//  10 - 3 = 7;
//  10 - 2 = 8;
//  10 - 1 = 9;
 
 
endmodule
linux/perl/用perl产生verilog文件.txt · 最后更改: 2023/10/27 22:27 由 zhangguo

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki