spdRegUserFlowProc
spdRegUserFlowProc( [ ?postGent_postGenProc] [ ?preGent_preGenProc] [ ?postGenLayoutt_postGenLayProc] [?symPreviewInstParamt_symPreviewInstParamProc] ) => t / nil
Description
Registers user-defined callbacks to further customize the design in specific steps of the SPD flow.
Arguments
|
The user callback to postprocess real devices after placement in the SPD Preview window. For example, enable the dummy poly shapes only on the outer-most source or drain in a row. userPostGenProc(
l_instRows = list( l_row1 l_row2 ...)
;from bottom to top
l_row = list( l_chain1 l_chain2 … )
;device chains in each row;
l_chain = list( d_inst1 d_inst2 … )
;database IDs of the instances in each device chain;
|
|
cxtObj~>
|
|
|
|
|
The user callback to preprocess real devices in the SPD Preview window before placement. For example, remove unwanted layers from the device.
userPreGenProc(
|
|
|
The user callback to post-process the SPD result after the design is placed in the target layout. For example, MakeCell or add to FigGroup. userPostGenLayoutProc( |
|
See Example 2 for more information. |
|
|
The user callback that specifies device size on the SPD gate size previewer.
userSymPreviewInstParamProc(
=> DPL
The callback returns the disembodied property list that contains the following fields to represent device display size on the SPD gate size previewer. See Example 3 for more information. |
|
Value Returned
|
The user flow callback cannot be registered. The current registration must be unregistered before a new one can be registered. |
Examples
Specify MyPostGenProc cellname as ABPlusCDBar2
#PowerRails's Net: ("gnd!" "vcc!")
#Ref: (topOdY 1.55 bottomOdY 0.1 centerY (0.75) rowX ((0.07 1.85) (0.07 2.05)))
#Setting: (trunkWidth 0.06 trunkOdSpc 0.06 trunkSpc 0.06 rowPairSpc (1.0 1.0))
#Stacked Instances: nil
#Find 2 tracks from 1 channel
Net:net037 (((0.3275 0.43) (0.4375 0.49)))
Net:net036 (((0.5325 0.43) (0.6425 0.49)))
Net:D (((1.3675 0.43) (1.4775 0.49)))
Net:A (((1.5725 0.43) (1.6825 0.49)))
#Find 1 chain from 2 rows
procedure( MyPostGenProc( d_cellview l_inst_rRows l_stacked_iInsts @optional cxtObj)
let( ()
info("Enter MyPostGenProc: CellName:%s\n" d_cellview~>cellName)
info("#PowerRails's Net: %L\n",cxtObj~>powerRails~>net~>name)
info("#Ref: %L\n",cxtObj~>ref~>??)
info("#Setting: %L\n",cxtObj~>setting~>??)
info("#Stacked Instances: %L\n",cxtObj~>inst~>stacked~>name)
;Print the information at the second track of first channel.
MyGetTrackData(cxtObj->signalTracks 1 2)
;Print the information at the first chain of second row.
MyGetInstData(cxtObj->inst 2 1)
)
);MyPostGenProc
procedure(MyGetTrackData(signalTracks numOfChannel numOfTrack)
let( (trackList track)
info("#Find %x track from %x channel\n" numOfTrack numOfChannel)
;Get trackList from specified channel
trackList = nth(numOfChannel-1 signalTracks)
;Get track from trackList
track = nth(numOfTrack-1 trackList)
;Print net name
foreach(trunk track
info("Net:%s (%L)\n" trunk~>net~>name trunk~>bBox)
)
);let
);MyGetTrackData
procedure(MyGetInstData(instObj numOfRow numOfChain )
let( (row chain pre)
info("#Find the %x chain from %x row\n" numOfChain numOfRow);
;Get the specified row
row = nth(numOfRow-1 instObj->rows)
;Get the specified chain
chain = nth(numOfChain-1 row)
foreach(inst chain
when(pre info("--"))
info("%s" inst->name)
when(inst~>orient != "R0"
info("[%s]" inst~>orient)
)
pre = inst
);inst
) ;let
); MyGetInstData
The following procedure is default callback for the clone group:
procedure( MyPostGenLayProc( cv objs @optional cxtObj )
let( (figGroup figGroupList)
info("Enter MyPostGenLayoutProc\n")
when( length(cxtObj~>otherClone) > 0
info("%d otherClones detected.\n",length(cxtObj~>otherClone))
;Delete Original Clone Family
lxDeleteSynchronousCloneFamily(cxtObj~>otherClone)
geDeselectAll(geGetCellViewWindow(cv))
;Create New Fig Group
geSelectFigs(objs)
leHiCreateGroup()
figGroup = car(geGetSelectedSet())
geDeselectAll(geGetCellViewWindow(cv))
;info("fig Group:%L, \n", figGroup)
) ; when
);let
);procudure
spdRegUserFlowProc(?postGenLayout "MyPostGenLayProc" )
Specifies device size on each instance for the SPD gate size previewer.
procedure(MySymPreviewInstParam( inst )
info("MySymPreviewInstParam(%s)" inst->name)
let((ret)
ret = ncons(nil)
ret->fingerWidth = 0.1 /* float */
ret->length = 0.02 /* float */
ret->fingerCount = 2 /*int*/
info("%L\n" ret)
ret
)
); => DPL
spdRegUserFlowProc(?symPreviewInstParam "MySymPreviewInstParam")
Return to top