Если ваш файл 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*
.