-1

I want get list of included files in HDL designer with tcl script. I get example that printed list of files into a log and change it. I add global variable filenames and append all filenames to it, but when proc will be executes my variable is empty.

proc walkDependencies {decl} {
    global alreadyDone filenames
    # Only look at each declaration once.
    if {[info exists alreadyDone($decl)]} {
        return
    }
    set alreadyDone($decl) 1

    # Only report each file once.
    set declFile [$decl file]
    if {[info exists alreadyDone($declFile)]} {
        set reportFile 0
    } else {
        set reportFile 1
        set alreadyDone($declFile) 1
    }

    foreach pkg [$decl packages] {
        walkDependencies $pkg
    }

    if {[$decl configure class] eq "architecture"} {
        walkDependencies [$decl entity]

        foreach inst [$decl instances] {
            if {![catch {$inst child} child]} {
                walkDependencies $child
            }
        }
    }

    set file [$decl file]
    set fileType [$file configure type]
    if {![regexp {Text$} $fileType]} {
        if {[lsearch {symbol blockInterface} $fileType] != -1} {
        # This assumes ent+arch are generated to a single file.
            set reportFile 0
        } else {
            set file [$file generated]
        }
    }

    if {$reportFile} {
        set lib [$file library]
        # Exclude standard and downstreamOnly libraries.
        if {[$lib configure type] eq "regular"} {
            # puts "[$lib configure hardHdlDir]/[$file configure relativePathname]"
            set tmp "[$lib configure hardHdlDir]/[$file configure relativePathname]"
            lappend $filenames $tmp
        }
    }

    if {[$decl configure class] eq "packageHeader"} {
        walkDependencies [$decl body]      
    }
}

set filenames 
catch {unset alreadyDone}
set lib [library open Travers_lib]
walkDependencies [$lib declaration Travers_top struct]
foreach i $filenames {
    puts $i
}

if uncomment line # puts "[$lib configure hardHdlDir]/[$file configure relativePathname]" all included files will be printed into a log.

Peter Lewerin
  • 13,140
  • 1
  • 24
  • 27

1 Answers1

2

Your problem is most likely that you are using

lappend $filenames $tmp

which means that you are appending the value of tmp to a local variable whose name is equal to the value of filenames. Try

lappend filenames $tmp

instead.

Documentation: lappend

Peter Lewerin
  • 13,140
  • 1
  • 24
  • 27