;===================================================================
;
;  Callbacks for the nmos and pmos CDFs:
;
;===================================================================
;  This procedure is used as the callback for the NMOS/PMOS as/ps/ad/pd 
;  calculation for the TSMC018 process
procedure( tsmc018AreaPerimCB( props )
let( (temp spacing extension ncextension Nfingers Width)
      lambda = 0.09
      extension = 0.48
      props->wf->value = cdfParseFloatString(props->w->value)*1e6
      props->lf->value = cdfParseFloatString(props->l->value)*1e6
     
      Nfingers = props->nf->value

      Width = cdfParseFloatString(props->w->value)

      spacing = 0.54

        if( ( mod(Nfingers, 2) > 0) then
	  sprintf(temp "%e" Width/Nfingers*(extension*1e-6 + spacing*1e-6*float(Nfingers-1)/2))
          props->as->value = temp
	  sprintf(temp "%e" cdfParseFloatString(props->as->value))
          props->ad->value = temp
          sprintf(temp "%e" Width/Nfingers+2*extension*1e-6+(Nfingers-1)*spacing*1e-6)
          props->pd->value = temp
          sprintf(temp "%e" cdfParseFloatString(props->pd->value))
          props->ps->value = temp
        else
	  sprintf(temp "%e" Width/Nfingers*(2*extension*1e-6 + spacing*1e-6*(Nfingers/2-1)))
          props->as->value = temp
	  sprintf(temp "%e" Width/2*spacing*1e-6)
          props->ad->value = temp
          sprintf(temp "%e" 2*Width/Nfingers+4*extension*1e-6+(Nfingers/2-1)*2*spacing*1e-6)
          props->ps->value = temp
          sprintf(temp "%e" Nfingers*spacing*1e-6)
          props->pd->value = temp
        )
))



