Files
FPGA_DESIGN_IP/stream_rx_ctrl/sim/parse_args.tcl
2026-03-06 16:22:17 +08:00

148 lines
4.3 KiB
Tcl

set SIM_TYPE func ;
set CASE_NUM 1 ;
set SIM_TIME 100sec ;#as all
set CORNER_TYPE max ;
set COPY_RUN_TEMPLATE no;
#declear a empty list
set args [list];
#put the do command $1-$9 to list,because we can't use the argv,we should construct the "argv" mannully.
for {set i 1} {$i <= $argc} {incr i 1} {
lappend args [set $i];
}
puts "---->parsing the command line....argc=$argc,args=$args*************************"
#get the max index of the list,the "expr" command should be use to calculate out the express
set max_index [expr $argc-1];
#search copy templation option
for {set i 0} {$i < $argc} {incr i 1} {
set para [lindex $args $i]
if {[string equal $para "-c"]} {
set COPY_RUN_TEMPLATE yes
puts "whether to copy run.tcl template=$COPY_RUN_TEMPLATE"
break;
}
}
#search generate instantiate_top.sv opton
for {set i 0} {$i < $argc} {incr i 1} {
set para [lindex $args $i]
if {[string equal $para "-g"]} {
set GEN_INSTANTIATE_TOP yes
puts "force generate instantiate_top.sv and override exist file"
break;
}
}
#search case number
for {set i 0} {$i < $argc} {incr i 1} {
set para [lindex $args $i];
if {[string equal $para "-n"] } {
if {$i < $max_index} {
set num [lindex $args [expr [expr $i+1]]];
if { [string is digit $num] } {
set CASE_NUM [format "%03d" $num];
puts "case number=$CASE_NUM"
}
break;
}
}
}
#search simulation time
for {set i 0} {$i < $argc} {incr i 1} {
set para [lindex $args $i]
if {[string equal $para "-t"]} {
if {$i < $max_index} {
set time [lindex $args [expr $i+1]]
if {[regexp {^[0-9]+((n|u|m)s|sec)$} $time]} {
set SIM_TIME $time
puts "simulation time=$SIM_TIME"
} else {
puts "unknow simulation time,set to 1us"
set SIM_TIME 1us
puts "simulation time=$SIM_TIME"
}
break;
}
}
}
#search simulation type
for {set i 0} {$i < $argc} {incr i 1} {
set para [lindex $args $i]
if {[string equal $para "-timing"]} {
set SIM_TYPE "timing"
puts "simulation type=$SIM_TYPE"
break;
} elseif {[string equal $para "-func"]} {
set SIM_TYPE "func"
puts "simulation type=$SIM_TYPE"
break;
}
}
#search corner type
for {set i 0} {$i < $argc} {incr i 1} {
set para [lindex $args $i]
if {[string equal $para "-corner"]} {
if {$i < $max_index } {
set corner [lindex $args [expr $i+1]]
#处理run.tcl中再次调用本脚本导致的bug ,删除前导的数字
regsub -nocase {[0-9]+_} $corner "" corner
switch -glob $corner {
"max" {
set CORNER_TYPE 03_max
}
"min" {
set CORNER_TYPE 01_min
}
"type" {
set CORNER_TYPE 02_type
}
default {
puts "unknow corner type,set to 03_max"
set CORNER_TYPE 03_max
}
}
puts "corner type=$CORNER_TYPE"
break;
}
}
}
#search simulation type
for {set i 0} {$i < $argc} {incr i 1} {
set para [lindex $args $i]
if {[string equal $para "-h"]} {
puts "------------------------help------------------------"
puts "-n x:specify case number to be excuted,x stand for case number,default to 0"
puts "-t x:specify simulation time to be excuted,x stand for time,unit may be ns,us,ms,sec,default to 1us"
puts "-timing:specify to excute in timing simulation mode"
puts "-corner x:specify the timing simulation corner,may be max,min,type,default to max"
puts "-c:force to override run.tcl scripts in case directory,be carefull"
puts "-h:to display this help information,it has the highest priority,thus block other options"
puts "----------------------------------------------------"
return 0;
}
}
puts "---->parsing the command line complete ***************************"