Я пытаюсь изменить список цепей verilog, который выглядит следующим образом:
module la_bla ( a b c d);
input a;
output;
inout c d;
uHBMN_1 X20 (.Z(en), .A(gg), .Q(qq), .EN(rr));
nch_mac M20 (.G(en), .D(gg), .B(qq), .S(rr));
pch_mac_svt M20 (.G(en), .D(gg), .B(qq), .S(rr));
endmodule
module la_bla2 ( aw b2 c1 dt);
input aw;
output b2;
inout c1 dt;
HBMN_2 X21 (.Z(en), .A(gg), .Q(qq), .EN(rr));
HBMN_3 X21 (.Z(env), .A(ggg7), .Q(qq), .EN(rr));
HBMN_4 X21 (.Z(en5), .A(gg), .Q(qq8), .EN(rr));
HBMN_5 X21 (.Z(en1), .A(gg), .Q(qq), .EN(rr));
endmodule
.
.
.
.
.
Каждый раз, когда я нахожу строку, начинающуюся с устройства с именем: "nch_mac" или pct_mac_svt, я хочу добавить комментарий к содержимому модуля ALL, но сохранить оператор модуля и операторы терминала (вход, выход-выход) и конечный модуль заявления нетронуты. Я пытался работать с командой perl flip-flop:
Сначала я попытался поймать блок, который начинается с модуля и заканчивается с помощью конечного модуля. Затем я попытался захватить имя устройства с помощью регулярных выражений.
Моя проблема в том, что требуемое имя устройства может быть расположено в любом месте внутри выражения модуля - так, как я комментирую строки внутри модуля, который стоит перед ним?
Я пробовал что-то вроде:
while<FILE>{
if(/module/i.../endmodule/i){
if($_ =~/nch_mac|pch_mac_svt){ $newline=~ s/$_/\/\/$_/}
Но это не сработало.
Я хочу получить:
module la_bla ( a b c d);
input a;
output;
inout c d;
//uHBMN_1 X20 (.Z(en), .A(gg), .Q(qq), .EN(rr));
//nch_mac M20 (.G(en), .D(gg), .B(qq), .S(rr));
//pch_mac_svt M20 (.G(en), .D(gg), .B(qq), .S(rr));
endmodule
module la_bla2 ( aw b2 c1 dt);
input aw;
output b2;
inout c1 dt;
HBMN_2 X21 (.Z(en), .A(gg), .Q(qq), .EN(rr));
HBMN_3 X21 (.Z(env), .A(ggg7), .Q(qq), .EN(rr));
HBMN_4 X21 (.Z(en5), .A(gg), .Q(qq8), .EN(rr));
HBMN_5 X21 (.Z(en1), .A(gg), .Q(qq), .EN(rr));
endmodule
.
.
.
Любой совет?