Hi,
I've been scratching my head over this for a little over a day and I can't seem to explain the behavior I'm seeing. For some background, I'm fairly new to SKILL and I've been creating a pCell for a MIM. The pCell, callbacks, and CDF all seem to be working well so far, however, in the callback I'm checking a condition and setting a CDF value based on my result. So, I want to check if the W and L of the cap is over 30 um, and if it is, I'd like to do another area check and then modify the cap layout based on that result. The code snippet below shows the current callback code. Now, the same snippet works perfectly fine and as intended in the pCell, but fails on two conditions in the callback!
procedure( mim_cb(paramName)
prog((value w l c ratio area num_horiz_strips num_vertical_strips sp_h sp_v remove_horiz waffle w_n l_n)
; Load values
l = cdfParseFloatString(cdfgData~>Length~>value)
w = cdfParseFloatString(cdfgData~>Width~>value)
c = cdfParseFloatString(cdfgData~>c~>value)
ratio = cdfParseFloatString(cdfgData~>aspect_ratio~>value)
m = cdfParseFloatString(cdfgData~>m~>value)
remove_horiz = cdfParseFloatString(cdfgData~>rem_h_strip~>value)
num_horiz_strips = cdfParseFloatString(cdfgData~>n_horiz_strips~>value)
num_vertical_strips = cdfParseFloatString(cdfgData~>n_vertical_strips~>value)
w_n = w*1.0e6
l_n = l*1.0e6
warn("w_n %f" w_n)
warn("l_n %f" l_n)
if( (w_n>=30)||(l_n>=30) then
if( (w_n*l_n) >= 360.0 then
waffle = "yes"
else
waffle = "no"
)
else
warn("Condition Satisfied w or l <=30")
if( (w_n*l_n)>400.0 then
waffle = "yes"
else
waffle = "no"
)
) ; end of main if
) ; end of prog
); end of procedure
Regards,
Nishant.