====== Extracted Timing Models (ETM) ======
===== What is ETM Model =====
* Block based model (.lib)
* Contents of block are hidden
* Original netlist replaced by model containing timing arcs for block interfaces
* These arcs are a function of input transition and output load
* Multiple modes per model
* Single PVT per model
* Used for implementation (not sign-off) of IP models
===== ETM Model Illustration =====
{{:vlsi:models:etm-model.gif|Extracted Timing Models (ETM)}}
===== ETM Script Example =====
==== ETM creation script example ====
############################################
# Template for ETM extract when using spef #
############################################
set BLOCK "blockname"
set NETLIST "blockname.v"
set SPEF "blockname.spef"
set SDC "blockname.sdc"
# Preserve unconnected nets
set svr_keep_unconnected_nets true
# set search_path and link_library
# Read and link netlist
read_verilog $NETLIST
current_design ${BLOCK}
link
# for nets not annotated
set_wire_load_model -name B0.1X0.1
# Read spef
read_parasitics $SPEF
# Read constraints
read_sdc $SDC
set_propagated_clock [all_clocks]
# Define operating conditions
set_operating_conditions -library g65xp lsiW_090V_125C \
-analysis_type on_chip_variation
# Set extract_model variables
# Note: These should be considered example settings. Final variable
# settings ultimately depend on the specific design usage.
set extract_model_data_transition_limit 0.75
set extract_model_clock_transition_limit 0.75
set extract_model_capacitance_limit 1.0
set extract_model_num_clock_transition_points 7
set extract_model_num_data_transition_points 7
set extract_model_num_capacitance_points 7
set extract_model_use_conservative_current_slew true
set extract_model_enable_report_delay_calculation true
# to create an ETM model with propagated clocks:
set extract_model_with_clock_latency_arcs true
extract_model -output ${BLOCK} -format {db lib} \
-library_cell -test_design
quit
==== ETM verification script example ====
############################################
# Template for ETM verification #
############################################
set BLOCK "blockname"
set NETLIST "blockname.v"
set SDC "blockname.sdc"
set ETM_MODEL "${BLOCK}_lib.db"
set ETM_TEST "${BLOCK}_test.db"
set ETM_CONST "${BLOCK}_constr.pt"
# Compute the interface timing of the netlist.
# Read in reference netlist design
read_verilog $NETLIST
current_design ${BLOCK}
link
set_wire_load_model -name B0.1X0.1
read_parasitics $SPEF
read_sdc ${SDC}
set_propagated_clock [all_clocks]
set_operating_conditions -library g65xp lsiW_090V_125C \
-analysis_type on_chip_variation
write_interface_timing netlist_report.txt
# Compute the interface timing of the ETM model.
# Remove reference netlist and read in ETM model
remove_design -all
lappend link_path ${ETM_MODEL}
read_db ${ETM_TEST}
current_design ${BLOCK}_test
link
# set wire_load that has 0.0 cap loading
set_wire_load_model -name TSMC_CLN90G_WLM_0.0
## alternatively, use
#set_load -wire_load 0 *
read_sdc ${SDC}
set_propagated_clock [all_clocks]
source ${ETM_CONST}
write_interface_timing model_report.txt
# Compare the interface timing for the netlist vs ETM model.
compare_interface_timing -absolute_tolerance 0.1 \
netlist_report.txt model_report.txt -output cmp.rpt
quit