diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 1ab951e4..5f73688b 100644 Binary files a/doc/OpenSTA.odt and b/doc/OpenSTA.odt differ diff --git a/doc/OpenSTA.pdf b/doc/OpenSTA.pdf index 72f6f7cb..e9ed33ce 100644 Binary files a/doc/OpenSTA.pdf and b/doc/OpenSTA.pdf differ diff --git a/include/sta/Sta.hh b/include/sta/Sta.hh index 6293f808..ec2e9cf7 100644 --- a/include/sta/Sta.hh +++ b/include/sta/Sta.hh @@ -1268,7 +1268,8 @@ public: PowerResult &result); PwrActivity findClkedActivity(const Pin *pin); - void writeTimingModel(const char *cell_name, + void writeTimingModel(const char *lib_name, + const char *cell_name, const char *filename, const Corner *corner); diff --git a/search/MakeTimingModel.cc b/search/MakeTimingModel.cc index 8ed5d600..9a0a42d7 100644 --- a/search/MakeTimingModel.cc +++ b/search/MakeTimingModel.cc @@ -62,11 +62,12 @@ MakeTimingModel::~MakeTimingModel() } LibertyLibrary * -MakeTimingModel::makeTimingModel(const char *cell_name, +MakeTimingModel::makeTimingModel(const char *lib_name, + const char *cell_name, const char *filename) { tbl_template_index_ = 1; - makeLibrary(cell_name, filename); + makeLibrary(lib_name, filename); makeCell(cell_name, filename); makePorts(); @@ -84,10 +85,10 @@ MakeTimingModel::makeTimingModel(const char *cell_name, } void -MakeTimingModel::makeLibrary(const char *cell_name, +MakeTimingModel::makeLibrary(const char *lib_name, const char *filename) { - library_ = network_->makeLibertyLibrary(cell_name, filename); + library_ = network_->makeLibertyLibrary(lib_name, filename); LibertyLibrary *default_lib = network_->defaultLibertyLibrary(); *library_->units()->timeUnit() = *default_lib->units()->timeUnit(); *library_->units()->capacitanceUnit() = *default_lib->units()->capacitanceUnit(); diff --git a/search/MakeTimingModel.hh b/search/MakeTimingModel.hh index 6d0236f5..d9627e6c 100644 --- a/search/MakeTimingModel.hh +++ b/search/MakeTimingModel.hh @@ -49,11 +49,12 @@ public: MakeTimingModel(const Corner *corner, Sta *sta); ~MakeTimingModel(); - LibertyLibrary *makeTimingModel(const char *cell_name, + LibertyLibrary *makeTimingModel(const char *lib_name, + const char *cell_name, const char *filename); private: - void makeLibrary(const char *cell_name, + void makeLibrary(const char *lib_name, const char *filename); void makeCell(const char *cell_name, const char *filename); diff --git a/search/Sta.cc b/search/Sta.cc index 7743a695..f5ffb127 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -5567,12 +5567,14 @@ Sta::equivCells(LibertyCell *cell) //////////////////////////////////////////////////////////////// void -Sta::writeTimingModel(const char *cell_name, +Sta::writeTimingModel(const char *lib_name, + const char *cell_name, const char *filename, const Corner *corner) { MakeTimingModel maker(corner, this); - LibertyLibrary *library = maker.makeTimingModel(cell_name, filename); + LibertyLibrary *library = maker.makeTimingModel(lib_name, cell_name, + filename); writeLiberty(library, filename, this); } diff --git a/tcl/Search.tcl b/tcl/Search.tcl index b90ec6dd..81c7865d 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -1033,22 +1033,29 @@ proc worst_clock_skew { args } { ################################################################ define_cmd_args "write_timing_model" {[-corner corner] \ + [-library_name lib_name]\ [-cell_name cell_name]\ filename} proc write_timing_model { args } { parse_key_args "write_timing_model" args \ - keys {-cell_name -corner} flags {} + keys {-library_name -cell_name -corner} flags {} check_argc_eq1 "write_timing_model" $args - set filename [lindex $args 0] + set filename [file nativename [lindex $args 0]] if { [info exists keys(-cell_name)] } { set cell_name $keys(-cell_name) } else { set cell_name [get_name [[top_instance] cell]] } + if { [info exists keys(-library_name)] } { + set lib_name $keys(-library_name) + } else { + set lib_name $cell_name + } set corner [parse_corner keys] - write_timing_model_cmd $cell_name [file nativename $filename] $corner + write_timing_model_cmd $lib_name $cell_name $filename $corner + } ################################################################ diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index bdcc4ecf..b5604b43 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -5044,11 +5044,12 @@ write_path_spice_cmd(PathRef *path, } void -write_timing_model_cmd(const char *cell_name, +write_timing_model_cmd(const char *lib_name, + const char *cell_name, const char *filename, const Corner *corner) { - Sta::sta()->writeTimingModel(cell_name, filename, corner); + Sta::sta()->writeTimingModel(lib_name, cell_name, filename, corner); } ////////////////////////////////////////////////////////////////