顯示具有 TCL 標籤的文章。 顯示所有文章
顯示具有 TCL 標籤的文章。 顯示所有文章

2016年11月17日 星期四

Delete CCS model

#=======================================================================
# Delete CCS models
# receiver_capacitance/output_current_rise/output_current_fall/ccs_retain_rise/ccs_retain_fall
#=======================================================================
enable_api pub

proc delete_ccs {LIB} {

log_info "Delete all CCST tables"

foreach cellid [pub::get_obj_list $LIB type cell] {
set no_def_pins {}
log_info "Working on cell [pub::get_obj_name $cellid]"
        foreach pinid [pub::get_obj_list $cellid type pin] {
        set pintype [pub::get_obj_attr $pinid direction]
        log_info "Working on $pintype pin [pub::get_obj_name $pinid]"
        set flag 0
                foreach receiver_capacitance_id [pub::get_obj_list $pinid type receiver_capacitance] {
                log_info "deleting receiver_capacitance"
                pub::del_obj $receiver_capacitance_id
                }
}

log_info "checking bus"
foreach busid [pub::get_obj_list $cellid type bus] {
        set bustype [pub::get_obj_attr $busid direction]
        log_info "Working on $bustype bus [pub::get_obj_name $busid]"
        set flag 0
        foreach pin_bus_id [pub::get_obj_list $busid type pin] {
                set bus_pin_type [pub::get_obj_attr $pin_bus_id direction]
                log_info "Working on $bus_pin_type pin of bus [pub::get_obj_name $pin_bus_id]"
                foreach receiver_capacitance_id [pub::get_obj_list $pin_bus_id type receiver_capacitance] {
                        log_info "deleting receiver_capacitance"
                        pub::del_obj $receiver_capacitance_id
                        }

                foreach timing_block [pub::get_obj_list $pin_bus_id type timing] {
                set bus_pin_timing_type [pub::get_obj_attr $timing_block timing_type]
                log_info "Working on $bus_pin_timing_type timing_type of bus_pin [pub::get_obj_name $timing_block]"
                        foreach output_current_rise_id [pub::get_obj_list $timing_block type output_current_rise] {
                        log_info "deleting CCS rising"
                        pub::del_obj $output_current_rise_id
                        }
                        foreach output_current_fall_id [pub::get_obj_list $timing_block type output_current_fall] {
                        log_info "deleting CCS falling"
                        pub::del_obj $output_current_fall_id
                        }
                        foreach ccs_retain_rise_id [pub::get_obj_list $timing_block type ccs_retain_rise] {
                        log_info "deleting CCS retain rising"
                        pub::del_obj $ccs_retain_rise_id
                        }
                        foreach ccs_retain_fall_id [pub::get_obj_list $timing_block type ccs_retain_fall] {
                        log_info "deleting CCS retain falling"
                        pub::del_obj $ccs_retain_fall_id
                        }
                }
}
}
}
}

set LIB [pub::read_model -liberty SYHB110_256X8X2CM4_ss0p90vm40c.lib]
delete_ccs $LIB
set tmp [pub::write_model $LIB SYHB110_256X8X2CM4_ss0p90vm40c.lib_withoutCCS]

2015年12月27日 星期日

Pause script in TCL

proc anykey {{msg "Hit any key: "}} {
    set stty_settings [exec stty -g]
    exec stty raw -echo
    puts -nonewline $msg
    flush stdout
    read stdin 1
    exec stty $stty_settings
    puts ""
}
puts 1
anykey
puts 2


Another suggestion:
proc pause {{message "Hit Enter to continue ==> "}} {
    puts -nonewline $message
    flush stdout
    gets stdin
}

pause "Hurry, hit enter: "; # Sample usage 1
pause;                      # Sample usage 2, use default message

2015年12月14日 星期一

利用seconds自動更動檔名 執行regression run

在TCL script中:
set Cdir Test
create $Cdir
.
.
.
set t [clock seconds]
exec mv $Cdir ${Cdir}_${t}

注: clock seconds會以整數的法式回傳由1970年到目前為止經過的秒數; 最後兩行會將directory更名  並且不會重覆
Test --> Test_1449568829

2015年10月12日 星期一

deliver linux variable to TCL

C shell script:
### c2tcl.csh ###

#!/bin/csh -f
set names = "0 1"
foreach name ($names)
    echo $name
    echo
    setenv abc $name
    liberate t.tcl | tee t.log
    mv t.log t_$name.log
end

TCL script:
### t.tcl ###
reset_defaults -version 16.1.2
set_var write_verilog_without_err_primitives $env(abc)
puts "$env(abc)"
printvars

執行:
source c2tcl.csh




環境變數(environment variables)
 TCL提供了一個事先就定義好的全域環境變數陣列,這個陣列叫做env。讀者可以將環境變數的名稱當成元素名稱來使用。換句話說,讀者可以使用變數名稱當做索引存取讀者想要存取的變數。下面的命令會印出PATH環境變數的內容:

puts "$env(PATH)"

讀者可以操作一般的變數的方式來操作環境變數陣列。舉例來說,讀者可以使用下面的命令加入一個新的目錄到PATH中:

set env(PATH): "$env(PATH):/usr/sbin"

這裡需要注意的是,環境變數的任何修改都不會影響到原始行程(舉例來說,讀者用來啟動TCL script的shell就是TCL script原始行程)的環境變數的內容。任何使用exec命令所建立出來的script行程,將會繼承修改過後的所有環境變數。









source $::env(golden_area)/common_settings/common_settings.tcl

2015年10月2日 星期五

grep and sum up SIS+ChildTime of report_sim_stat by awk

grep ' statistical_setup__' timing_report.txt | awk -f cal.awk

cal.awk:
BEGIN {
sum = 0;
}
{
printf("%f\n", $2+$3);
sum = sum + $2 + $3;
}
END {
printf("\nSum = %f\n", sum);
}

2015年9月23日 星期三

detect if file existed then perform some script

#specific library options in side file

if { [file exists add_sco.tcl] == 1} { source add_sco.tcl }

Remove file/dir if existed:
if {[file exists $char_path]} {
  exec rm -rf $char_path

}


2015年1月22日 星期四

change bus symbol

sed -iold -r "s/<([0-9]+)>/__\1__" mal4vrefglobal.spi


This will change all cases of <N+> to __N+__, (the double-underscore being an old AMD standard that was built in to the netlister as an option).


 


2014年10月28日 星期二

Zero out negative internal power

#===============================================================================
# Zero out negative internal power
#===============================================================================


enable_api pub


proc sis_proc_zero_out_negative_power {LIB} {


log_info "Zero out negative power"

foreach cellid [pub::get_obj_list $LIB type cell] {
set no_def_pins {}
log_info "Working on cell [pub::get_obj_name $cellid]"
foreach pinid [pub::get_obj_list $cellid type pin] {
set pintype [pub::get_obj_attr $pinid direction]
log_info "Working on $pintype pin [pub::get_obj_name $pinid]"
set flag 0
foreach power_block [pub::get_obj_list $pinid type internal_power] {
set when_cond [pub::get_obj_attr $power_block when foobar]
foreach p_type {rise_power fall_power} {
foreach power_arc [pub::get_obj_list $power_block type $p_type] {
set target_values_id [pub::get_obj_list $power_arc type values]
set target_values [pub::get_obj_attr $power_arc values]
set complete_new_vector ""
foreach check_values $target_values {
set new_vector ""
foreach check_single_values $check_values {
#log_info "check_single_values is $check_single_values"
if {$check_single_values < 0} {
set check_single_values "0.0000000"
}
lappend new_vector $check_single_values
}
lappend complete_new_vector $new_vector
}
pub::set_obj_attr $power_arc [list values $complete_new_vector]
}}
}
}
}
}


set LIB [pub::read_model -liberty ss_0.945v_0.945v_1.65v_1.65v_-30c_cmax_-30c.lib]
sis_proc_zero_out_negative_power $LIB
set tmp [pub::write_model $LIB ss_0.945v_0.945v_1.65v_1.65v_-30c_cmax_-30c.lib_zero]


 


2014年10月23日 星期四

Adding contents into file

exec mv my_library/control/R_LATS_PARAM2_SET.inst my_library/control/R_LATS_PARAM2_SET.inst.org

exec sed "/add_function Q IQ/ r R_LATS_PARAM2_SET.add" my_library/control/R_LATS_PARAM2_SET.inst.org > my_library/control/R_LATS_PARAM2_SET.inst



R_LATS_PARAM2_SET.add

# add
add_switching_set {CLK CLKn}
add_switching_set {G Gn}
add_forbidden_state {!(CLK^CLKn)}
add_forbidden_state {!(G^Gn)}

2011年6月11日 星期六

TCL 技巧

1. 在siliconsmart 中計算花了多少時間

set start [clock seconds]
set_location [pwd]
set end [clock seconds]
set duration [expr $end - $start]
log_info "Elapsed time: [expr $end - $start]sec -- [format "%1.2fmins -- %1.2fhrs" [expr ($end - $start) /60.0] [expr ($end - $start) /60.0/60.0]]"

2. format
    set ibis_vmeas [format "%.3f" [expr 0.5 * ${valuemix33vdd}]]
    # set ibis_vinh  [format "%.3f" [expr $logic_high_threshold * ${valuemix33vdd}]]
    # set ibis_vinl  [format "%.3f" [expr $logic_low_threshold * ${valuemix33vdd}]]
    set ibis_vinh  [format "%.3f" [expr 0.7 * ${valuemix33vdd}]]
    set ibis_vinl  [format "%.3f" [expr 0.3 * ${valuemix33vdd}]]

3.
exec sed -i "s/add_pin mem_int/#add_pin mem_int/g" $charpt/control/${cell}.inst
exec sed -i "s/add_function mem_int mem/#add_function mem_int mem/g" $charpt/control/${cell}.inst

4. copy instances to control
eval exec cp [glob special_instances/*.inst] my_library/control

5. 大寫字母轉小寫字母
foreach upper [get_cells] {
set lower [string tolower $upper]
exec cp -p ./SPICE/${lower}.spc $charp/netlists/${upper}.spc
}

 6. 偵測檔案是否存在and執行另一個tcl
#specific library options in side file
if { [file exists add_sco.tcl] == 1} { source add_sco.tcl }

7. tcl 裡面呼叫sed在某個檔案內加入內容
運用在SIS中 如下例
sh cp umc_char_db_2016/inst_file/SDFMQM8T.inst $Cdir/control/SDFMQM8T.inst
exec sed -i "s/create_parameter cut_netlist/set_config_opt min_setup      2.5e-09 \\n set_config_opt max_setup     -2.5e-09/i" $Cdir/control/SDFMQM8T.inst

講解:  在create_parameter cut_netlist這個字串之前加入下列兩行(之前用i 之後用a)
set_config_opt min_setup      2.5e-09 
set_config_opt max_setup     -2.5e-09
其中有用到換行符號 \n (先跳脫\ 在加入\n變成\\n)
Notes: 之前用i 之後用a 刪除d

結果:
set_config_opt min_setup      2.5e-09
set_config_opt max_setup     -2.5e-09
set_config_opt -opcond __default__ -- cut_netlist SDFMQM8T.cir


標籤