You are here

instantiation할때 input, output 뽑아내는 방법 질문드립니다.

if [ catch { open "input_1.v" r } fd ] {
        puts stderr "Error : $fd"
        return -1
}

if [ catch { open "output_2.tcl" w } fo ] {
        puts stderr "Error : $fo"
        return -1
}

# "//"의 주석을 지우는 부분입니다.

set all_line_1 {}

while { [gets $fd line] >= 0 } {
        if ![ regexp {[/]{2,}(.*)} $line ] {
                append all_line_1 "${line}\n"
        }
}
#puts $fo $all_line_1

#"/* ~ */"의 주석을 지우는 부분입니다.

set all_line_2 {}

regsub -all {/\*[^/]*\*/} $all_line_1 {} all_line_2

#puts $fo $all_line_2


# 이름을 뽑아내는 부분입니다.

gets stdin pre_fix
gets stdin post_fix

set all_line_join [ join $all_line_2  ]
#puts $all_line_join

# module name extraction

set split_name [ split $all_line_join ( ]
#puts $split_name

#pre_fix와 post_fix를 구분하도록 하였습니다.

foreach list $split_name {
        if { [ lindex $list 0 ] == "module" } {
                set md_name [ split $list ( ]
                set name [ lindex [ lindex $md_name 0 ] 1 ]
                if { [ regexp {\w+} $pre_fix ] == 1 && [ regexp {\w+} $post_fix ] == 1 } {
                        puts "$name $pre_fix\_$name\_$post_fix\("
                        puts -nonewline $fo "$name $pre_fix\_$name\_$post_fix\("
                } elseif { [ regexp {\w+} $pre_fix ] == 1 } {
                        puts "$name $pre_fix\_$name\("
                        puts -nonewline $fo "$name $pre_fix\_$name\("
                } elseif { [ regexp {\w+} $post_fix ] == 1 } {
                        puts "$name $name\_$post_fix\("
                        puts -nonewline $fo "$name $name\_$post_fix\("
                } else {
                        puts "$name u_$name\("
                        puts -nonewline $fo "$name u_$name\("
                }
        }
}

# 모듈 네임까지는 뽑아냈는데 input, output, inout은 어떻게 뽑아내면 될까요?

close $fd
close $fo

결과는..
asic_top u_asic_top(
/*input*/ .a(a), .b(b), c(c),
/*output*/ .d(d), e(e),
/*inout*/ .f(f)
);
이런식으로 뽑아내려고 합니다.
부탁드립니다.

sample
input_1.v입니다.

// this is practice module sss
/* this is very difficult*/
/*lsdkfjalskbdlg*/module /*aasldfkwelkj!!!*/asic_top( a, b, /* hello hi , zzz*/
c, // c is input
d, e, f /* d, e, f is input
hahaha */
i, g, h, kk,
// oh no!!!!!!!!
);

input /* slkdfjlksd*/ a;
input b, c, d, e, f;
output i, g;
output h;
inout kk;

endmodule