我希望通过使用脚本替换以下Verilog代码。
assign x0 = in0 + in7;
我希望搜索上方的“ +”号,并将整行替换为以下行:
KSA_32 U1(.A(in0), .B(in7), .Sum(x0));
对此有任何建议和示例脚本吗?
答案 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*
。