@@ -229,6 +229,27 @@ proc is_physical_only_master { master } {
229229 return 0
230230}
231231
232+ # Returns 1 if the master has no signal pins (only power/ground or none).
233+ proc has_signal_pins { master } {
234+ foreach mterm [$master getMTerms] {
235+ set sig_type [$mterm getSigType]
236+ if { $sig_type != " POWER" && $sig_type != " GROUND" } {
237+ return 1
238+ }
239+ }
240+ return 0
241+ }
242+
243+ # Returns 1 if the master has a corresponding liberty cell.
244+ proc has_liberty_cell { master } {
245+ set master_name [$master getName]
246+ set lib_cells [get_lib_cells -quiet */$master_name ]
247+ if { $lib_cells == {} } {
248+ return 0
249+ }
250+ return 1
251+ }
252+
232253# Finds all physical-only masters in the current database and
233254# returns their names.
234255proc find_physical_only_masters { } {
@@ -237,8 +258,19 @@ proc find_physical_only_masters { } {
237258 set physical_only_masters [list ]
238259 foreach lib $libs {
239260 foreach master [$lib getMasters] {
261+ set master_name [$master getName]
240262 if { [is_physical_only_master $master ] } {
241- lappend physical_only_masters [$master getName]
263+ lappend physical_only_masters $master_name
264+ continue
265+ }
266+
267+ # Consider cells with no signal pins and no liberty cell as physical-only
268+ if { [has_liberty_cell $master ] == 0 } {
269+ if { [has_signal_pins $master ] == 0 } {
270+ lappend physical_only_masters $master_name
271+ } else {
272+ puts " Warning: master $master_name has signal pins but no liberty cell"
273+ }
242274 }
243275 }
244276 }
0 commit comments