############################################################ ## 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