Tcl脚本还是Perl?

时间:2019-03-18 08:37:54

标签: perl tcl

我希望通过使用脚本替换以下Verilog代码。

assign x0 = in0 + in7;

我希望搜索上方的“ +”号,并将整行替换为以下行:

KSA_32 U1(.A(in0), .B(in7), .Sum(x0));

对此有任何建议和示例脚本吗?

1 个答案:

答案 0 :(得分:1)

如果您的Verilog文件能够舒适地容纳在内存中,则只需执行以下操作:

# Read in the file
set f [open $verilogfile r]
set contents [read $f]
close $f

# Perform the transform across the whole contents
regsub -all {assign\s+(\w+)\s*=\s*(\w+)\s*\+\s*(\w+);} $contents \
        {KSA_32 U1(.A(\2), .B(\3), .Sum(\1));} contents

# Write the results out to a new file (different filename so you can check the results by hand)
set f [open $verilogfile.new w]
puts -nonewline $f $contents
close $f

第一个和第三个块是用于文件操作的标准Tcl模式。第二个是标准的正则表达式替换,我根据您的要求进行了猜测,并对模板进行猜测。请注意,文字+需要转义,空格最好匹配为\s+\s*