我写了一个 FindFile.tcl 的程序。它会在所有子目录中找到 .v、.sv 和 .vhd 并附加到一个列表($tb_file)。无论如何,它只附加其中的一部分。假设它应该附加所有文件。
结果:Test_Plan.sv Test_Plan_Copy.sv sim_driver_2.sv 预期结果:Test_Plan.sv Test_Plan_Copy.sv sim_driver_1.sv sim_driver_2.sv
我发现了什么:
$tb_file
在进入第二个 foreach 语句之前会错过列表中的一个元素;
我的 FindFile.tcl
proc FindFiles { MY_TB_DIR tb_file } {
set pwd [pwd];
# set tb_file $tb_file
set tb_file $tb_file
# puts "after proc call testbench files are $tb_file"
set MY_TB_DIR $MY_TB_DIR
puts "after proc call tb_dir $MY_TB_DIR"
set dir_file [glob -nocomplain -dir $MY_TB_DIR *];
# puts $dir_file
# set dir_file [glob -nocomplain *]
foreach item $dir_file {
set file [file tail $item];
puts $file;
switch -glob -- $file {
*.v {lappend tb_file $file
puts "Append $tb_file"
}
*.sv {lappend tb_file $file
puts "Append $tb_file"
}
*.vhd {lappend tb_file $file
# puts "Test bench file is $tb_file"
}
default {}
};
set tb_file $tb_file;
};
foreach item2 $dir_file {
# recurse - go into the sub directory
if { [file isdirectory $item2] } {
set sub_dir [file join $MY_TB_DIR $item2] ;
puts "\n\n before proc call $tb_file";
puts " \n\n sub_dir $sub_dir";
FindFiles $sub_dir $tb_file;
# FindFiles $sub_dir
}
};
# puts "Testbench are $tb_file"
cd $pwd
}
请建议。非常感谢。谢谢。