############################################################
## Copyright: 2011 Integrated Sytems Laboratory, ETH Zurich
## http://www.iis.ee.ethz.ch/~sha3
############################################################
# v0.2 - - Thu Oct 13 16:17:26 CEST 2011
# - by haking the .vcd files (1ps -> 1fs) it is posible withe a factor to calulate
# the power (490 - 0.49)
# - report also the blockpower for the sortend block.
# v0.1 - - Tue Oct 11 12:57:37 CEST 2011
# - analysis power for slow typ amd fast corner (poibli also report timing)
# inportend do not set "set_power_analysis_mode -corner max/min" use "-analysis_view",
# otherwise the next analysis is wrong!
# set DESIGNNAME "shabziger"
# set timeRepDir "timingReports_final"
#
# setMultiCpuUsage -localCpu max
# restoreDesign save/chip_shabziger_final3.enc.dat shabziger_chip
# fit
if { $corner == "best" } {
source src/shabziger_mmmc-best.view
set_analysis_view -setup $fast_view_list -hold {hold_fast_view}
#timedesign -expandedViews -postroute -outDir ${timeRepDir} -prefix ${DESIGNNAME}.final-best.expV
set powerReportsDir "powerReports/vcd_fast-1.5-51.5"
} elseif { $corner == "typ" } {
# source src/shabziger_mmmc-typical.view
# set_analysis_view -setup $typ_view_list -hold {hold_fast_view}
#timedesign -expandedViews -postroute -outDir ${timeRepDir} -prefix ${DESIGNNAME}.final-typ.expV
set powerReportsDir "powerReports/vcd_typ-1.5-51.5"
} else {
set powerReportsDir "powerReports/vcd_slow-1.5-51.5"
}
# { dummy ethz_blake ethz_groestl ethz_jh ethz_keccak ethz_sha2 ethz_skein gmu_blake gmu_groestl gmu_jh gmu_keccak gmu_sha2 gmu_skein}
#set blocklist { dummy }
#set fsctorlist { 1000 }
#set blocklist { ethz_blake ethz_groestl ethz_jh ethz_keccak ethz_sha2 ethz_skein}
#set fsctorlist { 181 127 245 911 154 112 }
set blocklist { gmu_blake gmu_groestl gmu_jh gmu_keccak gmu_sha2 gmu_skein }
set fsctorlist { 355 490 239 911 158 542 }
#set fsctorlist { 1000 1000 1000 1000 1000 }
set_power_output_dir -reset
set_power_output_dir ${powerReportsDir}
#foreach block { ethz_blake } {
for {set i 0} {$i < [llength ${blocklist}]} {incr i} {
set block [lindex $blocklist $i]
set fsctor [lindex $fsctorlist $i]
set frequency [format "%0.0f" [expr 50*1000/${fsctor}]]
# replaced in 1ps by 1fs so the factors are 1/1000 and her neads the *1000
puts "block: $block | fsctor: $fsctor | frequency: $frequency"
set_power_analysis_mode -reset
if { $corner == "best" } {
set_power_analysis_mode -method static -analysis_view ${block}_fast_view -create_binary_db false -write_static_currents true -honor_negative_energy true -ignore_control_signals true
} elseif { $corner == "typ" } {
set_power_analysis_mode -method static -analysis_view ${block}_typ_view -create_binary_db false -write_static_currents true -honor_negative_energy true -ignore_control_signals true
} else {
set_power_analysis_mode -method static -analysis_view ${block}_slow_view -create_binary_db false -write_static_currents true -honor_negative_energy true -ignore_control_signals true
}
read_activity_file -reset
read_activity_file -format VCD -scale_vcd_duration ${fsctor} -vcd_scope shabziger_chip_tb/DUT -start [expr 0 * ${fsctor}] -end [expr 51.5 * ${fsctor}] -vcd_block {} /usr/scratch/antalya/kgf/shabziger/vcd/${block}_power.vcd
set_power -reset
set_powerup_analysis -reset
set_powerup_analysis -mode accurate -ultrasim_simulation_mode ms
set_dynamic_power_simulation -reset
report_power -rail_analysis_format VS -outfile ${powerReportsDir}/shabziger_${block}-${frequency}.rpt
# report_power -instances top/i_${block} -outfile ${powerReportsDir}/shabziger_${block}-${frequency}-bo.rpt
report_power -instances top/i_${block} -cell_type all -outfile ${powerReportsDir}/shabziger_${block}-${frequency}-bct.rpt
# rm ${powerReportsDir}/static_*IO.ptiavg
# mv ${powerReportsDir}/static_VDD.ptiavg ${powerReportsDir}/shabziger_${block}-${frequency}_VDD.ptiavg
# mv ${powerReportsDir}/static_VSS.ptiavg ${powerReportsDir}/shabziger_${block}-${frequency}_VSS.ptiavg
# write_tcf ${powerReportsDir}/shabziger_${block}-${frequency}.tcf
# report_vector_profile -activity -outfile shabziger_${block}-${frequency}-step0.1.activity.rpt -step 0.1
# report_vector_profile -activity -outfile shabziger_${block}-${frequency}-bo.activity.rpt -step 0.01 -instances top/i_${block}
# report_vector_profile do it wrong withe a -scale_vcd_duration for read_activity_file
}
puts "grep \"Total (\" ${powerReportsDir}/shabziger_*.rpt"
puts "grep -B 4 \"Power Distribution Summary\" ${powerReportsDir}/shabziger_*-bct.rpt | grep \"Total\""
set_power_analysis_mode -reset
set_power_analysis_mode -method dynamic_vectorbased -disable_static true -corner max -create_binary_db false -write_static_currents false -honor_negative_energy true -ignore_control_signals true -power_grid_library {tech/cl/SHKA65_2048X32X1CM4.cl tech/cl/SHKA65_16384X32X1CM16.cl tech/cl/SYKA65_2048X32X1CM8.cl tech/cl/u065gioll25mvir.8m1t0f1u.cl tech/cl/uk65lscllmvbbh.8m1t0f1u.cl tech/cl/uk65lscllmvbbl.8m1t0f1u.cl tech/cl/uk65lscllmvbbr.8m1t0f1u.cl}
set_power_output_dir -reset
set_power_output_dir powerReports/vcs_dyn
set_default_switching_activity -reset
set_default_switching_activity -input_activity 0.2 -period 10.0
read_activity_file -reset
read_activity_file -format VCD -vcd_scope {shabziger_chip_tb/DUT } -start 1.5 -end 51.5 -vcd_block {} /usr/scratch/antalya/kgf/shabziger/vcd/ethz_blake_power.vcd
set_power -reset
set_power -scale_factor 181
set_powerup_analysis -reset
set_powerup_analysis -mode accurate -ultrasim_simulation_mode ms
set_dynamic_power_simulation -reset
set_power_include_file -reset
report_power
# report_power -rail_analysis_format VS -outfile ${powerReportsDir}/shabziger_${block}-${frequency}.rpt
# report_power -instances top/i_${block} -outfile ${powerReportsDir}/shabziger_${block}-${frequency}-bo.rpt