写这个TCL脚本的主要目的是搜索目标文件夹及其子文件夹下的所有文件,然后记录在指定的文件中。可以指定目标文件夹名称、信息记录位置和文件后缀等3种参数。
该脚本将用于Vivado的non-project编译过程,被综合和布线脚本调用。
define.tcl中定义了目标文件夹名称、信息记录位置、文件后缀类型、器件part等信息。findAllFiles.tcl脚本根据define.tcl中的参数搜索目标文件夹,当文件后缀类型参数(ext)为.hdl时,会搜索.v、.vh、.vhd、.sv等文件的路径和名称,并记录在./Tcl/code.rd中;当文件后缀类型参数为.xdc时,会搜索.xdc文件,并记录在./Tcl/cons.rd中。设计代码放置在srcs文件夹中,约束文件放置在constraints文件夹中。如果没有分类放置也可以正确识别。
set part "xcvu3p-ffvc1517-2-e"set srcsPath "../srcs"set consPath "../Constraints"set codeRec "./code.rd"set consRec "./cons.rd"set codeExt ".hdl"set consExt ".xdc" set top "Top"set synthDir "$top.synth"set synthLog "synth.log"set synthDcp "_synth.dcp"
以下是findAllFiles.tcl的内容。
source ./define.tcl set status [catch {set codeF [open $codeRec w+]} msg]if {$status} { puts $msg } proc findFiles { dir result ext } { if {![file exists $dir] || ![file isdirectory $dir]} { return -code error "File not exists or not a directory." } # 使用以下方式获得文件名称将不包含路径,在通过if {[file isfile $f]}判断时是无法索引到该文件的,所以无法进入该条件 # set files [glob -nocomplain -directory $dir/ -tails *] set files [glob -nocomplain -directory $dir/ *] foreach f $files { if {[file isfile $f]} { # 根据ext参数匹配不同后缀的文件,记录.v .vh .vhd .sv文件 if {[string match $ext $::codeExt]} { set fExt [file extension $f] if {[expr {$fExt==".v"}] || [expr {$fExt==".vh"}] || [expr {$fExt==".vhd"}] || [expr {$fExt==".sv"}]} { # glob 返回的文件是带有路径的,除非使用-tails puts $f puts $result $f } } elseif {[string match $ext $::consExt]} { # 记录xdc文件 set fExt [file extension $f] if {[expr {$fExt==".xdc"}]} { # glob 返回的文件是带有路径的,除非使用-tails puts $f puts $result $f } } } elseif {[file isdirectory $f]} { # 递归 findFiles $f $result $ext } }} # 在tcl脚本中完成文件的写操作后一定要close文件,否则文件中不会写入任何内容。findFiles $srcsPath $codeF $codeExtclose $codeF set status [catch {set consF [open $consRec w+]} msg]if {$status} { puts $msg }findFiles $consPath $consF $consExtclose $consF
以上代码经过测试可以找出并分类存储指定的文件类型,可搜索所有子文件夹。所有tcl文件放置于Tcl文件夹中,srcs和constraints放置在与Tcl同级的目录中。
————————————————
版权声明:本文为CSDN博主「小苍蝇别闹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yinyeyy/article/details/115666182