Writing /share/Web/wiki/data/cache/0/0b2f444c2bb4f0252b42c9b4a9b52359.metadata failed
linux:perl:用perl产生verilog文件
差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| linux:perl:用perl产生verilog文件 [2022/11/07 11:19] – [2. vpl.pl] zhangguo | linux:perl:用perl产生verilog文件 [2023/10/27 22:27] (当前版本) – [1. vpl.pl] zhangguo | ||
|---|---|---|---|
| 行 3: | 行 3: | ||
| 主要是perl可以很方便支持类似1..3, | 主要是perl可以很方便支持类似1..3, | ||
| - | ===== - t.pl ===== | ||
| + | ===== - vpl.pl ===== | ||
| - | <file perl t.pl> | + | 专门写一个统一的脚本来处理,通过读取分析源文件,来产生需要的代码。 |
| - | @ar = (1..3, a..c, A..C); | + | * 以行首;分号开始为perl语句 |
| - | foreach $i (@ar) { | + | * 其它情况全部当做是perl的print语句,不用自己再去敲print和\n这样的东西,相对来说还是比较简单,容易使用。 |
| - | | + | |
| - | } | + | |
| - | + | ||
| - | print "\n"; | + | |
| - | @ar = reverse @ar; | + | |
| - | foreach $i (@ar) { | + | |
| - | print " | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | 执行效果: | + | |
| - | <code bash> | ||
| - | >perl t.pl | ||
| - | |||
| - | |||
| - | hello01good | ||
| - | hello02good | ||
| - | hello03good | ||
| - | hello0agood | ||
| - | hello0bgood | ||
| - | hello0cgood | ||
| - | hello0Agood | ||
| - | hello0Bgood | ||
| - | hello0Cgood | ||
| - | |||
| - | hello1Cgood | ||
| - | hello1Bgood | ||
| - | hello1Agood | ||
| - | hello1cgood | ||
| - | hello1bgood | ||
| - | hello1agood | ||
| - | hello13good | ||
| - | hello12good | ||
| - | hello11good | ||
| - | </ | ||
| - | |||
| - | |||
| - | ===== - vpl.pl ===== | ||
| <file perl vpl.pl> | <file perl vpl.pl> | ||
| + | # | ||
| if (scalar @ARGV < 1) { | if (scalar @ARGV < 1) { | ||
| - | print " | + | print " |
| exit; | exit; | ||
| } | } | ||
| $ivpl = shift @ARGV; | $ivpl = shift @ARGV; | ||
| - | $opl = $ivpl; | + | $opl = "$ivpl.pl"; |
| - | $opl =~ s/\.\w+$/.opl/; | + | if (scalar @ARGV > 0) { |
| - | $vfile = $ivpl; | + | $vfile = shift @ARGV; |
| - | $vfile =~ s/\.\w+$/.v/; | + | } |
| + | else { | ||
| + | $vfile = "$ivpl.v"; | ||
| + | } | ||
| open(fh, " | open(fh, " | ||
| 行 87: | 行 53: | ||
| if ($ret == 0) { | if ($ret == 0) { | ||
| print " | print " | ||
| - | @ar = glob "$opl*"; | + | @ar = glob " |
| - | #print "will delete @ar\n"; | + | |
| foreach $tmp (@ar) { | foreach $tmp (@ar) { | ||
| unlink ($tmp); | unlink ($tmp); | ||
| 行 95: | 行 60: | ||
| exit 0; | exit 0; | ||
| + | |||
| </ | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== - example ===== | ||
| + | |||
| + | <code bash> | ||
| + | localhost / | ||
| + | generate a.x.v ok! | ||
| + | </ | ||
| + | |||
| + | file: a.x | ||
| + | <code verilog> | ||
| + | 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: | ||
| + | <code verilog> | ||
| + | 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文件.1667791192.txt.gz · 最后更改: 2023/03/17 10:12 (外部编辑)