Product Documentation
Virtuoso Layout Suite XL: Connectivity Driven Editing User Guide
Product Version IC23.1, November 2023

Abutment Event 6

Abutment Event 6 is the final event triggered for a chain when the abutChainEvent environment variable is set to true.

Abutment Event 6 is common to both the abutment and the unabutment flows. By default, the event is called at the end of an abutment (or an unabutment) flow. After abutment, the event gets triggered if the size of the chain is more than one. After unabutment, the event gets triggered if the size of the chain is equal to or more than one.

Abutment Event 6 is an optional event that, when triggered, enables you to modify the resultant chain after abutment (or unabutment). For example, the event could be called to finalize the Source-Drain connections for a chain by adding (or removing) the top-level figures. To enable this, a new optional argument, list of chain instances, is passed to the PDK SKILL abutment function, abutFunction.

procedure( AbutFunction (iA iB pA pB pinAside conn event @optional (group nil) (chain nil)))

The return value of the PDK SKILL abutment function for Abutment Event 6 does not get used by the abutment engine, unlike the return values of other abutment events, such as Abutment Event 2 and 5.

The PDK abutment function needs to be modified to support the new optional argument. Between each top-level figure and an instance in the chain, the PDK abutment function establishes a parent-child relationship such that the instance in the chain is the parent and the top-level figure is the child.

When abutted instances are part of a figGroup, during abutment Event 6, the top-level shapes are also added to the figGroup of the abutted instances.

Given below is an example that illustrates how the Abutment Event 6 can be used to modify a chain that is formed as a result of a recent abutment (or an unabutment) event.

For the Abutment Event 6 to be triggered, the abutChainEvent environment variable must be set to t:

envSetVal("layoutXL" "abutChainEvent" 'boolean  t)

The Abutment Event 6 is triggered using an optional chain argument in the abutment function callback, as illustrated below.

procedure(abutFunc(instA instB figA figB accessDir conn event @optional (group nil)     (chain nil))
prog( ()
case( event
( 1
return( myMosDoItEvent1(instA instB figA figB accessDir conn group))
)
( 2
return(myMosDoItEvent2(instA instB figA figB accessDir conn group))
)
( 3
return(myMosDoItEvent3(instA instB group))
)
( 4
return(myMosDoItEvent4(instA instB))
)
( 5
return(myMosDoItEvent5(instA instB figA figB accessDir conn group))
)
; event 6 for post-process whenever a chain is modified
( 6
return(myMosDoItEvent6(instA instB figA figB accessDir conn group chain))
)
)
return(t)
)
)
; Event 6 can be used for modifying completed chains, after abutment or unabutment, to finalize the S-D connections by adding or removing top-level figures.
procedure(myMosDoItEvent6(instA instB figA figB accessDir conn group chain)
let((objs  (inst car(chain)) (propname "myEvent6PostProcPropName" ) )
; destroy user-added shapes
foreach(instId chain foreach(fig instId->children when(dbFindProp(fig propname) dbDeleteObject(fig))))
; execute event6 processes
let(( (postcb list( 'myCallBackReturnDBObjList ) )  )
foreach(funcobj postcb
when(getd(funcobj)
objs = apply(funcobj list(chain))
if(typep(objs) == 'list   then
when(length(objs) > 0
foreach(obj objs
if(dbIsId(obj)  then
when(inst~>figGroup dbAddFigToFigGroup(inst~>figGroup obj)) ; add user-shapes to parent figGroup
obj->parent = inst  ; add parent-child relationship
dbReplaceProp(obj propname "string" symbolToString(funcobj))
else
warn("invalid dbobject returned by %L" funcobj)
)
)
)
else
; warn("%L returns value illegal; should return a list of dbobjects." funcobj)
)
);when
); foreach
);let
);let
)
procedure( myCallBackReturnDBObjList(chain)
let((figs)
; modifies completed chains to finalize the S-D connections by adding top-level figures, adjusting Pcell CDF parameters on chain instance figs, and returns a list of added instances
))

Related Topics

abutChainEvent

Unabutment Flow

Dummy Abutment Example


Return to top
 ⠀
X