!------------------------------------------------------------------ ! Device linking rule for MOSFETs with unconnected SD contact !------------------------------------------------------------------ define procedure "mos_linker" /replace parameter device1Params parameter device2Params parameter device1Pin parameter device2Pin parameter externalConn do begin if (device1Pin EQL "S") then begin device1Params["RightCont"] = true; device1Params["RightLink"] = true; device1Params["bodytie_typeR"] = "NONE"; ! device1Params["RightStretch"] = true; end; if (device1Pin EQL "D") then begin device1Params["LeftCont"] = true; device1Params["LeftLink"] = true; device1Params["bodytie_typeL"] = "NONE"; ! device1Params["LeftStretch"] = true; end; if (device2Pin EQL "S") then begin device2Params["RightCont"] = false; device2Params["RightLink"] = true; device2Params["bodytie_typeR"] = "NONE"; ! device2Params["RightStretch"] = true; end; if (device2Pin EQL "D") then begin device2Params["LeftCont"] = false; device2Params["LeftLink"] = true; device2Params["bodytie_typeL"] = "NONE"; ! device2Params["LeftStretch"] = true; end; if ((device1Pin EQL "S") and (device2Pin EQL "S")) then begin ! device1Params["RightStretch"] = true; ! device2Params["RightStretch"] = false; end; if ((device1Pin EQL "D") and (device2Pin EQL "D")) then begin ! device1Params["LeftStretch"] = true; ! device2Params["LeftStretch"] = false; end; end; !------------------------------------------------------------------ ! Device linking rule for MOSFETs without unconnected SD contact !------------------------------------------------------------------ define procedure "mos_linker_2" /replace parameter device1Params parameter device2Params parameter device1Pin parameter device2Pin parameter externalConn do begin if (device1Pin EQL "S") then begin device1Params["RightCont"] = externalConn; device1Params["RightLink"] = true; device1Params["bodytie_typeR"] = "NONE"; device1Params["RightStretch"] = not externalConn; end; if (device1Pin EQL "D") then begin device1Params["LeftCont"] = externalConn; device1Params["LeftLink"] = true; device1Params["bodytie_typeL"] = "NONE"; device1Params["LeftStretch"] = not externalConn; end; if (device2Pin EQL "S") then begin device2Params["RightCont"] = false; device2Params["RightLink"] = true; device2Params["bodytie_typeR"] = "NONE"; device2Params["RightStretch"] = not externalConn; end; if (device2Pin EQL "D") then begin device2Params["LeftCont"] = false; device2Params["LeftLink"] = true; device2Params["bodytie_typeL"] = "NONE"; device2Params["LeftStretch"] = not externalConn; end; if ((device1Pin EQL "S") and (device2Pin EQL "S")) then begin ! device1Params["RightStretch"] = true; ! device2Params["RightStretch"] = false; end; if ((device1Pin EQL "D") and (device2Pin EQL "D")) then begin ! device1Params["LeftStretch"] = true; ! device2Params["LeftStretch"] = false; end; end; !------------------------------------------------------------------ ! Device linking rule for resistors !------------------------------------------------------------------ define procedure "tsmc_res_linker" /replace parameter device1Params parameter device2Params parameter device1Pin parameter device2Pin parameter externalConn do begin display("device1Pin=" & device1Pin); display("device2Pin=" & device2Pin); if (device1Params["LinkDirection"] EQL "HORIZONTAL") then begin if (device1Pin EQL "P") then begin device1Params["RightLink"] = true; end; if (device1Pin EQL "N") then begin device1Params["LeftLink"] = true; end; if (device2Pin EQL "P") then begin device2Params["RightLink"] = true; end; if (device2Pin EQL "N") then begin device2Params["LeftLink"] = true; end; end; !------------------------------------------------------------------- ! for vertical link !------------------------------------------------------------------- if (device1Params["LinkDirection"] EQL "VERTICAL") then begin if (device1Pin NEQ device2Pin) then begin device2Params["SwapTerminals"] = not device2Params["SwapTerminals"]; if (device1Pin EQL "P") then begin device1Params["RightLink"] = true; end; if (device1Pin EQL "N") then begin device1Params["LeftLink"] = true; end; if (device2Pin EQL "P") then begin device2Params["LeftLink"] = true; end; if (device2Pin EQL "N") then begin device2Params["RightLink"] = true; end; end; if ((device1Pin EQL device2Pin) and (device1Params["LinkDirection"] EQL "VERTICAL")) then begin device2Params["SwapTerminals"] = device2Params["SwapTerminals"]; if (device1Pin EQL "P") then begin device1Params["RightLink"] = true; end; if (device1Pin EQL "N") then begin device1Params["LeftLink"] = true; end; if (device2Pin EQL "P") then begin device2Params["RightLink"] = true; end; if (device2Pin EQL "N") then begin device2Params["LeftLink"] = true; end; end; end; ! for vertical link end;