20 if {[
catch {
package require cmdline} ERROR]} {
21 puts "$ERROR\n If you are running this script on tclsh, you can fix this by installing 'tcllib'"
25 set hog_path [
file normalize "[
file dirname [
info script]]/.."]
26 set repo_path [
file normalize "$hog_path/../.."]
27 source $hog_path/hog.tcl
30 set tcl_path [
file normalize "[
file dirname [
info script]]"]
31 source $tcl_path/cmdline.tcl
34 {project.arg "" "Project name. If not set gets current project"}
35 {outDir.arg "" "Name of output dir containing log files."}
36 {log.arg "1" "Logs errors/warnings to outFile."}
37 {recreate "If set, it will create List Files from the project configuration"}
38 {recreate_conf "If set, it will create the project hog.conf file."}
39 {force "Force the overwriting of List Files. To be used together with \"-recreate\""}
40 {pedantic "Script fails in case of mismatch"}
41 {ext_path.arg "" "Sets the absolute path for the external libraries."}
46 set usage "Checks if the list and conf files matches the project ones. It can also be used to update the list and conf files. \nUSAGE: $::argv0 \[Options\]"
54 set ext_path $options(ext_path)
64 set SIM_PROPS [list "dofile" \
70 if {![
string equal $options(project) ""]} {
71 set project $options(project)
72 set group_name [
file dirname $project]
73 set project_name [
file tail $project]
74 Msg Info "Opening project $project_name..."
77 file mkdir "$repo_path/Projects/$project/$project_name.gen/sources_1"
78 open_project "$repo_path/Projects/$project/$project_name.xpr"
79 set proj_file [get_property DIRECTORY [current_project]]
80 set proj_dir [
file normalize $proj_file]
84 set project_name [get_projects [current_project]]
85 set proj_file [get_property DIRECTORY [current_project]]
86 set proj_dir [
file normalize $proj_file]
91 if {$options(outDir)!= ""} {
92 set outFile $options(outDir)/diff_list_and_conf.txt
93 set outSimFile $options(outDir)/diff_sim_list_and_conf.txt
94 if {[
file exists $outFile]} {
98 if {[
file exists $outSimFile]} {
99 file delete $outSimFile
102 if {!$options(log)} {
113 if {[
file exists $repo_path/Top/$group_name/$project_name] && [
file isdirectory $repo_path/Top/$group_name/$project_name] && $options(force) == 0} {
114 set DirName Top_new/$group_name/$project_name
116 set DirName Top/$group_name/$project_name
119 if { $options(recreate_conf) == 0 || $options(recreate) == 1 } {
120 Msg Info "Checking $project_name list files..."
122 Msg Info "Retrieved Vivado project files..."
124 lassign [
GetHogFiles -ext_path "$ext_path" -list_files ".src,.ext" "$repo_path/Top/$group_name/$project_name/list/" $repo_path] listLibraries listProperties listSrcSets
126 lassign [
GetHogFiles -ext_path "$ext_path" -list_files ".con" "$repo_path/Top/$group_name/$project_name/list/" $repo_path] listConstraints listConProperties listConSets
128 lassign [
GetHogFiles -ext_path "$ext_path" -list_files ".sim" "$repo_path/Top/$group_name/$project_name/list/" $repo_path] listSimLibraries listSimProperties listSimSets
130 set extraFiles [
ReadExtraFileList "$repo_path/Projects/$group_name/$project_name/.hog/extra.files"]
131 set extraFiles_copy $extraFiles
133 lassign [
GetProjectFiles] prjLibraries prjProperties prjSimLibraries prjConstraints prjSrcSets prjSimSets prjConSets
148 Msg Debug "Project Libraries"
149 Msg Debug $prjLibraries
150 Msg Debug "Source List Libraries"
151 Msg Debug $listLibraries
152 Msg Debug "Project Filesets"
153 Msg Debug $prjSrcSets
154 Msg Debug "List Filesets"
155 Msg Debug $listSrcSets
156 Msg Debug "Project File Properties"
157 Msg Debug $prjProperties
158 Msg Debug "List File Properties"
159 Msg Debug $listProperties
160 Msg Debug "Project Sim Libraries"
161 Msg Debug $prjSimLibraries
162 Msg Debug "Sim List Libraries"
163 Msg Debug $listSimLibraries
164 Msg Debug "Project SimSets"
165 Msg Debug $prjSimSets
166 Msg Debug "List SimSets"
167 Msg Debug $listSimSets
168 Msg Debug "Sim List File Properties"
169 Msg Debug $listSimProperties
170 Msg Debug "Project Constraints"
171 Msg Debug $prjConstraints
172 Msg Debug "List Constraints"
173 Msg Debug $listConstraints
174 Msg Debug "Project ConSets"
175 Msg Debug $prjConSets
176 Msg Debug "List ConSets"
177 Msg Debug $listConSets
178 Msg Debug "List Constraint Properties"
179 Msg Debug $listConProperties
181 lassign [
CompareLibDicts $prjLibraries $listLibraries $prjSrcSets $listSrcSets $prjProperties $listProperties "CriticalWarning" $outFile $extraFiles] SrcListErrorCnt extraFiles prjLibraries prjProperties
182 lassign [
CompareLibDicts $prjSimLibraries $listSimLibraries $prjSimSets $listSimSets $prjProperties $listSimProperties "Warning" $outSimFile $extraFiles] SimListErrorCnt extraFiles prjSimLibraries prjProperties
183 lassign [
CompareLibDicts $prjConstraints $listConstraints $prjConSets $listConSets $prjProperties $listConProperties "CriticalWarning" $outFile $extraFiles] ConListErrorCnt extraFiles prjConstraints prjProperties
186 foreach {k v} $extraFiles {
187 MsgAndLog "$k was found in .hog/extra.files but not in project." "CriticalWarning" $outFile
191 if {$SrcListErrorCnt == 0} {
192 Msg Info "Design List Files matches project. Nothing to do."
195 if {$SimListErrorCnt == 0} {
196 Msg Info "Simulation List Files matches project. Nothing to do."
199 if {$ConListErrorCnt == 0} {
200 Msg Info "Constraint List Files matches project. Nothing to do."
205 if {$options(recreate) == 1 && ($SrcListErrorCnt > 0 || $SimListErrorCnt > 0 || $ConListErrorCnt > 0) } {
206 set listpath "$repo_path/$DirName/list/"
207 Msg Info "Updating list files in $listpath"
210 if {$SrcListErrorCnt > 0} {
212 if {$options(force) == 1} {
213 foreach F [glob -nocomplain "$listpath/*.src" "$listpath/*.ext"] {
217 WriteListFiles $prjLibraries $prjProperties $listpath $repo_path $ext_path
219 if {$SimListErrorCnt > 0} {
221 if {$options(force) == 1} {
222 foreach F [glob -nocomplain "$listpath/*.sim"] {
226 WriteSimListFiles $prjSimLibraries $prjProperties $prjSimSets $listpath $repo_path
228 if {$ConListErrorCnt > 0} {
230 if {$options(force) == 1} {
231 foreach F [glob -nocomplain "$listpath/*.con"] {
235 WriteListFiles $prjConstraints $prjProperties $listpath $repo_path
241 set conf_file "$repo_path/Top/$group_name/$project_name/hog.conf"
243 if { $options(recreate) == 0 || $options(recreate_conf) == 1 } {
253 set prjSrcDict [
DictGet $prjLibraries SRC]
256 set hogConfDict [dict create]
257 set defaultConfDict [dict create]
258 set projConfDict [dict create]
259 set newConfDict [dict create]
262 if {[
file exists $conf_file]} {
263 set hogConfDict [
ReadConf $conf_file]
266 foreach key [list main synth_1 impl_1 generics] {
267 set runDict [
DictGet $hogConfDict $key]
268 foreach runDictKey [dict keys $runDict] {
270 if {[
string first $repo_path [
DictGet $runDict $runDictKey]]!= -1} {
273 dict set runDict [
string toupper $runDictKey] [
DictGet $runDict $runDictKey]
274 dict unset runDict [
string tolower $runDictKey]
276 dict set hogConfDict $key $runDict
278 }
elseif {$options(recreate_conf)==0} {
279 Msg Warning "$repo_path/Top/$group_name/$project_name/hog.conf not found. Skipping properties check"
284 foreach key [dict keys $hogConfDict] {
285 if {$key != "main" && $key != "synth_1" && $key != "impl_1" && $key != "generics"} {
286 dict set newConfDict $key [
DictGet $hogConfDict $key]
291 set PROP_BAN_LIST [ list DEFAULT_LIB \
293 AUTO_INCREMENTAL_CHECKPOINT.DIRECTORY \
294 AUTO_INCREMENTAL_CHECKPOINT \
295 COMPXLIB.MODELSIM_COMPILED_LIBRARY_DIR \
296 COMPXLIB.QUESTA_COMPILED_LIBRARY_DIR \
297 COMPXLIB.RIVIERA_COMPILED_LIBRARY_DIR \
298 COMPXLIB.ACTIVEHDL_COMPILED_LIBRARY_DIR \
299 COMPXLIB.IES_COMPILED_LIBRARY_DIR \
300 COMPXLIB.VCS_COMPILED_LIBRARY_DIR \
301 ENABLE_RESOURCE_ESTIMATION \
302 INCREMENTAL_CHECKPOINT \
303 IP_CACHE_PERMISSIONS \
308 SIM.IP.AUTO_EXPORT_SCRIPTS \
309 SIM.IPSTATIC.SOURCE_DIR \
310 STEPS.WRITE_DEVICE_IMAGE.ARGS.READBACK_FILE \
311 STEPS.WRITE_DEVICE_IMAGE.ARGS.VERBOSE \
312 STEPS.WRITE_BITSTREAM.ARGS.READBACK_FILE \
313 STEPS.WRITE_BITSTREAM.ARGS.VERBOSE \
314 STEPS.SYNTH_DESIGN.TCL.PRE \
315 STEPS.SYNTH_DESIGN.TCL.POST \
316 STEPS.WRITE_BITSTREAM.TCL.PRE \
317 STEPS.WRITE_BITSTREAM.TCL.POST \
318 STEPS.WRITE_DEVICE_IMAGE.TCL.PRE \
319 STEPS.WRITE_DEVICE_IMAGE.TCL.POST \
320 STEPS.INIT_DESIGN.TCL.POST \
321 STEPS.ROUTE_DESIGN.TCL.POST \
325 set HOG_GENERICS [ list GLOBAL_DATE \
331 foreach proj_run [list [current_project] [get_runs synth_1] [get_runs impl_1] [current_fileset]] {
333 set projRunDict [dict create]
334 set defaultRunDict [dict create]
337 foreach propReport [
split "[report_property -return_string -all $proj_run]" "\n"] {
338 if {[
string equal "[
lindex $propReport 2]" "false"]} {
339 lappend run_props [
lindex $propReport 0]
343 if {$proj_run == [current_project]} {
344 lappend run_props "BOARD_PART_REPO_PATHS"
347 foreach prop $run_props {
349 if {$prop in $PROP_BAN_LIST} {
352 }
elseif { "$proj_run" == "[current_fileset]" } {
354 if {$prop == "GENERIC"} {
355 foreach generic [get_property $prop [current_fileset]] {
356 set generic_prop_value [
split $generic {=}]
357 if {[
llength $generic_prop_value] == 2} {
358 if {[
string toupper [
lindex $generic_prop_value 0]] in $HOG_GENERICS } {
361 dict set projRunDict [
string toupper [
lindex $generic_prop_value 0]] [
lindex $generic_prop_value 1]
362 dict set defaultRunDict [
string toupper $prop] ""
369 if {[
string first $repo_path [get_property $prop $proj_run]] != -1} {
371 foreach p [get_property $prop $proj_run] {
372 set prop_val "$prop_val[
Relative $repo_path $p] "
374 dict set projRunDict [
string toupper $prop] [
string trim $prop_val]
375 }
elseif {[
string first $ext_path [get_property $prop $proj_run]] != -1} {
377 foreach p [get_property $prop $proj_run] {
378 set prop_val "$prop_val[
Relative $ext_path $p] "
380 dict set projRunDict [
string toupper $prop] [
string trim $prop_val]
382 dict set projRunDict [
string toupper $prop] [get_property $prop $proj_run]
386 dict set defaultRunDict [
string toupper $prop] [list_property_value -default $prop $proj_run]
389 if {"$proj_run" == "[current_project]"} {
390 dict set projRunDict "PART" [get_property PART $proj_run]
391 dict set projConfDict main $projRunDict
392 dict set defaultConfDict main $defaultRunDict
393 }
elseif {"$proj_run" == "[current_fileset]"} {
394 dict set projConfDict generics $projRunDict
395 dict set defaultConfDict generics $defaultRunDict
397 dict set projConfDict $proj_run $projRunDict
398 dict set defaultConfDict $proj_run $defaultRunDict
403 set defMainDict [dict create TARGET_LANGUAGE VHDL SIMULATOR_LANGUAGE MIXED]
404 dict set defMainDict IP_OUTPUT_REPO "[
Relative $repo_path $proj_dir]/${project_name}.cache/ip"
405 dict set defaultConfDict main [dict merge [
DictGet $defaultConfDict main] $defMainDict]
410 foreach proj_run [list main synth_1 impl_1 generics] {
411 set projRunDict [
DictGet $projConfDict $proj_run]
412 set hogConfRunDict [
DictGet $hogConfDict $proj_run]
413 set defaultRunDict [
DictGet $defaultConfDict $proj_run]
414 set newRunDict [dict create]
416 set strategy_str "STRATEGY strategy Strategy"
417 foreach s $strategy_str {
418 if {[dict exists $hogConfRunDict $s]} {
423 if {$hasStrategy == 1 && $options(recreate_conf) == 0} {
424 Msg Warning "A strategy for run $proj_run has been defined inside hog.conf. This prevents Hog to compare the project properties. Please regenerate your hog.conf file using the dedicated Hog button."
427 foreach settings [dict keys $projRunDict] {
428 set currset [
DictGet $projRunDict $settings]
429 set hogset [
DictGet $hogConfRunDict $settings]
430 set defset [
DictGet $defaultRunDict $settings]
433 regsub -all {\"} $currset "" currset
435 if {[
string toupper $currset] != [
string toupper $hogset] && ([
string toupper $currset] != [
string toupper $defset] || $hogset != "")} {
436 if {[
string first "DEFAULT" [
string toupper $currset]] != -1 && $hogset == ""} {
439 if {[
string tolower $hogset] == "true" && $currset == 1} {
442 if {[
string tolower $hogset] == "false" && $currset == 0} {
445 if {[regexp {\_VER$} [
string toupper $settings]] || [regexp {\_SHA$} [
string toupper $settings]] } {
449 if {[
string toupper $settings] != "STRATEGY"} {
450 dict set newRunDict $settings $currset
451 if {$options(recreate_conf) == 1} {
453 Msg Info "$proj_run setting $settings has been changed from \"$hogset\" in hog.conf to \"$currset\" in project."
454 }
elseif {[
file exists $repo_path/Top/$group_name/$project_name/hog.conf] && $hasStrategy == 0} {
455 MsgAndLog "Project $proj_run setting $settings value \"$currset\" does not match hog.conf \"$hogset\"." "CriticalWarning" $outFile
459 }
elseif {[
string toupper $currset] == [
string toupper $hogset] && [
string toupper $hogset] != "" && [
string toupper $settings] != "STRATEGY"} {
460 dict set newRunDict $settings $currset
463 dict set newConfDict $proj_run $newRunDict
466 foreach settings [dict keys $hogConfRunDict] {
467 if {[dict exists $projRunDict [
string toupper $settings]]==0} {
468 if {$settings in $PROP_BAN_LIST} {
469 Msg Warning "In hog.conf section $proj_run the following property is defined: \"$settings\". This property is ignored and will not be rewritten when automatically recreating hog.conf (i.e. pressing Hog button)."
473 if {$options(recreate_conf) == 0} {
474 MsgAndLog "hog.conf property $settings is not a valid Vivado property." "CriticalWarning" $outFile
476 Msg Info "found property $settings in old hog.conf. This is not a valid Vivado property and will be deleted."
484 if {[
file exists $conf_file]} {
486 if {$actual_version != $conf_version} {
487 MsgAndLog "The version specified in the first line of hog.conf is wrong or no version was specified. If you want to run this project with $ide $actual_version, the first line of hog.conf should be: \#$ide $actual_version" "CriticalWarning" $outFile
493 if {$ConfErrorCnt == 0 && [
file exists $conf_file] == 1} {
494 Msg Info "$conf_file matches project. Nothing to do"
498 if { $options(recreate_conf) == 1 && ($ConfErrorCnt > 0 || [
file exists $conf_file] == 0 || $hasStrategy == 1)} {
499 Msg Info "Updating configuration file $repo_path/$DirName/hog.conf."
501 set confFile $repo_path/$DirName/hog.conf
503 WriteConf $confFile $newConfDict "vivado $version"
508 set sim_conf "$repo_path/Top/$group_name/$project_name/sim.conf"
510 if { $options(recreate) == 0 || $options(recreate_conf) == 1 } {
516 set simConfDict [dict create]
517 set defaultConfDict [dict create]
518 set projConfDict [dict create]
519 set newSimConfDict [dict create]
522 if {[
file exists $sim_conf]} {
523 set simConfDict [
ReadConf $sim_conf]
525 set simsets [dict keys $simConfDict]
527 foreach simset $simsets {
528 set simDict [
DictGet $simConfDict $simset]
529 foreach simDictKey [dict keys $simDict] {
531 if {[
string first $repo_path [
DictGet $simDict $simDictKey]]!= -1} {
534 dict set simDict [
string toupper $simDictKey] [
DictGet $simDict $simDictKey]
535 dict unset simDict [
string tolower $simDictKey]
537 dict set simConfDict $simset $simDict
539 }
elseif {$options(recreate_conf)==0} {
540 Msg Warning "$repo_path/Top/$group_name/$project_name/sim.conf not found. Skipping properties check"
544 foreach proj_simset [get_filesets] {
545 if {[get_property FILESET_TYPE $proj_simset] != "SimulationSrcs" } {
549 set projSimDict [dict create]
550 set defaultSimDict [dict create]
553 foreach propReport [
split "[report_property -return_string -all [get_filesets $proj_simset]]" "\n"] {
555 if {[
string equal "[
lindex $propReport 2]" "false"]} {
556 lappend sim_props [
lindex $propReport 0]
560 foreach prop $sim_props {
561 if {$prop == "HBS.CONFIGURE_DESIGN_FOR_HIER_ACCESS"} {
567 if {[
string first $repo_path [get_property $prop $proj_simset]] != -1} {
568 dict set projSimDict [
string toupper $prop] [
Relative $repo_path [get_property $prop $proj_simset]]
569 }
elseif {[
string first $ext_path [get_property $prop $proj_simset]] != -1} {
570 dict set projSimDict [
string toupper $prop] [
Relative $ext_path [get_property $prop $proj_simset]]
572 dict set projSimDict [
string toupper $prop] [get_property $prop $proj_simset]
576 dict set defaultSimDict [
string toupper $prop] [list_property_value -default $prop $proj_simset]
577 dict set projConfDict $proj_simset $projSimDict
578 dict set defaultConfDict $proj_simset $defaultSimDict
582 foreach simset [get_filesets -quiet] {
583 if {[get_property FILESET_TYPE $simset] != "SimulationSrcs" } {
586 set hogConfSimDict [
DictGet $simConfDict $simset]
587 set hogAllSimDict [
DictGet $simConfDict sim]
588 set hogGenericsSimDict [
DictGet $simConfDict generics]
589 set newSimDict [dict create]
590 set newGenericsDict [dict create]
591 set projSimDict [
DictGet $projConfDict $simset]
592 set defaultRunDict [
DictGet $defaultConfDict $simset]
594 foreach setting [dict keys $projSimDict] {
595 set currset [
DictGet $projSimDict $setting]
596 set hogset [
DictGet $hogConfSimDict $setting]
597 set allhogset [
DictGet $hogAllSimDict $setting]
598 set defset [
DictGet $defaultRunDict $setting]
600 if {[
string toupper $setting] == "GENERIC"} {
602 foreach gen_set $currset {
603 set generic_and_value [
split $gen_set =]
604 set generic [
string toupper [
lindex $generic_and_value 0]]
605 set gen_value [
lindex $generic_and_value 1]
606 set generichogset [
DictGet $hogGenericsSimDict $generic]
609 regsub -all {\"} $gen_value "" gen_value
610 dict set newGenericsDict $generic $gen_value
611 if { $gen_value != $generichogset} {
612 if {$options(recreate_conf) == 1} {
614 Msg Info "$simset generics setting $generic has been changed from \"$generichogset\" in sim.conf to \"$gen_value\" in project."
615 }
elseif {[
file exists $sim_conf]} {
616 MsgAndLog "Simset $simset setting $generic value \"$gen_value\" does not match sim.conf \"$generichogset\"." "Warning" $outSimFile
624 if {[
string toupper $currset] != [
string toupper $hogset] && [
string toupper $currset] != [
string toupper $defset] && [
string toupper $currset] != [
string toupper $allhogset]} {
625 if {[
string first "DEFAULT" [
string toupper $currset]] != -1 && $hogset == "" && $allhogset == ""} {
628 if {[
string tolower $hogset] == "true" && $currset == 1} {
631 if {[
string tolower $hogset] == "false" && $currset == 0} {
634 if {[
string tolower $allhogset] == "true" && $currset == 1} {
637 if {[
string tolower $allhogset] == "false" && $currset == 0} {
640 if {[regexp {^[^\.]*\.[^\.]*$} $setting]} {
644 dict set newSimDict $setting $currset
645 if {$options(recreate_conf) == 1} {
647 Msg Info "$simset setting $setting has been changed from \"$hogset\" (\"$allhogset\") in sim.conf to \"$currset\" in project."
648 }
elseif {[
file exists $sim_conf]} {
649 MsgAndLog "Simset $simset setting $setting value \"$currset\" does not match sim.conf \"$hogset\" (\"$allhogset\")." "Warning" $outSimFile
652 }
elseif {[
string toupper $currset] == [
string toupper $hogset] && [
string toupper $hogset] != ""} {
653 dict set newSimDict $setting $currset
654 }
elseif {[
string toupper $currset] == [
string toupper $allhogset] && [
string toupper $allhogset] != ""} {
655 dict set newSimDict $setting $currset
658 if {$simset == [current_fileset -simset]} {
659 dict set newSimDict "ACTIVE" "1"
662 dict set newSimConfDict $simset $newSimDict
663 dict set newSimConfDict generics $newGenericsDict
666 foreach setting [dict keys $hogConfSimDict] {
667 set hogset [
DictGet $hogConfSimDict $setting]
668 if {$setting == "ACTIVE"} {
669 if {$hogset == "1" && $simset != [current_fileset -simset]} {
671 if {$options(recreate_conf) == 0} {
672 MsgAndLog "Simulation set $simset is set as active, but the actual active one in the project is [current_fileset -simset]" "Warning" $outSimFile
674 Msg Info "Simulation set $simset was set as active in old sim.conf. I will set [current_fileset -simset] as active in the file instead."
683 if {[
string toupper $simulator] != [
string toupper [get_property target_simulator [current_project]]]} {
684 if {[
string first [
string toupper $simulator] [
string toupper $setting]] == 0} {
691 if {$other_sim_prop == 1} {
695 if {[dict exists $projSimDict [
string toupper $setting]]==0 && [dict exists $projSimDict $setting]==0} {
697 if {$options(recreate_conf) == 0} {
698 MsgAndLog "sim.conf property $setting is not a valid Vivado property." "Warning" $outSimFile
700 Msg Info "Found property $setting in old sim.conf. This is not a valid Vivado property and will be deleted."
706 if {$SimConfErrorCnt == 0 && [
file exists $sim_conf] == 1} {
707 Msg Info "$sim_conf matches project. Nothing to do"
711 if {$options(recreate_conf) == 1 && $SimConfErrorCnt > 0 } {
712 Msg Info "Updating configuration file $sim_conf"
713 file mkdir $repo_path/$DirName/list
715 set confFile $repo_path/$DirName/sim.conf
724 if {![
string equal $options(project) ""]} {
731 set TotErrorCnt [
expr {$ConfErrorCnt + $SrcListErrorCnt + $ConListErrorCnt}]
733 if {$options(recreate_conf) == 0 && $options(recreate) == 0} {
734 if {$options(pedantic) == 1 && $TotErrorCnt > 0} {
735 Msg Error "Number of errors: $TotErrorCnt. (Design List files = [
expr $SrcListErrorCnt + $ConListErrorCnt], hog.conf = $ConfErrorCnt)."
736 }
elseif {$TotErrorCnt > 0} {
737 Msg CriticalWarning "Number of errors: $TotErrorCnt (Design List files = [
expr $SrcListErrorCnt + $ConListErrorCnt], hog.conf = $ConfErrorCnt)."
739 Msg Info "Design List files and hog.conf match project. All ok!"
742 if { $SimListErrorCnt > 0 } {
743 Msg Warning "Number of mismatch in simulation list files = $SimListErrorCnt"
745 Msg Info "Simulation list files match project. All ok!"
748 if { $SimConfErrorCnt > 0 } {
749 Msg Warning "Number of mismatch in simulation conf files = $SimConfErrorCnt"
751 Msg Info "Simulation config files match project. All ok!"