0

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が見つけたもの:2番目の foreach ステートメントに進む前に、リスト内の1つの要素が失われます。

私の 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
}

アドバイスをお願いします。本当に感謝しています。ありがとう。

4

2 に答える 2

2

あなたの主な問題は、サブディレクトリからファイルを蓄積したいのに、実際にはそうしていないことです。globまた、 wellの機能を使用していません。これが私の見解です:

proc FindFiles {MY_TB_DIR {accumulate_var ""}} {
    if {$accumulate_var ne ""} {
        upvar 1 $accumulate_var result
    }
    foreach file [glob -nocomplain -dir $MY_TB_DIR -type f "*.{v,sv,vhd}"] {
        lappend result [file tail $file]
    }
    foreach dir [glob -nocomplain -dir $MY_TB_DIR -type d "*"] {
        FindFiles $dir result
    }
    return $result
}

(これらのグロブ用語は、実際には二重引用符で囲む必要はありません。構文の強調表示のために使用しただけです!)

于 2012-04-08T11:31:06.667 に答える