dsd1-10 / dsd-08=skill / p
.doc; load("/home/GroupII/st200700/projects/intro/dsd11_a/dsd14/my_res_pcell.txt")
load("res.il")
load("res")
printf("Hi !!\n")
pcDefinePCell(list(ddGetObj("sasha") "MyRes" "layout")
(
;(w string "1")
(w string cdfGetBaseCellCDF(ddGetObj("sasha" "MyRes")) -> PW -> defValue )
(l string cdfGetBaseCellCDF(ddGetObj("sasha" "MyRes")) -> PL -> defValue )
(layer string "Metal1")
)
printf("Hi - 2 !!\n")
let( ( techfileId
dbRectId
wNumber lNumber
m1MinWidth m2MinWidth
m1MinSpacing m2MinSpacing )
printf("Hi - 3 !!\n")
wNumber = evalstring(w)*1
lNumber = evalstring(l)*1
printf("Hi - 4 !!\n")
techfileId = techGetTechFile(pcCellView)
m1MinWidth = techGetSpacingRule(techfileId "minWidth" "Metal1")
when( layer == "Metal1" wNumber = wNumber * m1MinWidth)
printf("Hi - 5 !! number L - %L, W - %L - %L -\n" wNumber lNumber pcCellView)
dbRectId = dbCreateRect(pcCellView list(layer "drawing")
list(0:0 lNumber:wNumber) )
when( layer == "Metal2"
m1MinSpacing = techGetSpacingRule(techfileId "minSpacing" "Metal1")
count = round((lNumber-0.6) / (m1MinWidth+m1MinSpacing) )
for(i 1 count
dbCreateRect(pcCellView
list("Metal1" "drawing")
;list( (m1MinSpacing+m1MinWidth)*i+0.3:m1MinSpacing+m1MinWidth
;(m1MinSpacing+m1MinWidth)*i+m1MinWidth+0.3:m1MinWidth)
list( (lNumber-(count*(m1MinSpacing+m1MinWidth)-m1MinWidth))/2+(i-1)*(m1MinSpacing+m1MinWidth):m1MinSpacing+m1MinWidth
(lNumber-(count*(m1MinSpacing+m1MinWidth)-m1MinWidth))/2+(i-1)*(m1MinSpacing+m1MinWidth)+m1MinWidth:m1MinWidth)
)
dbCreateRect(pcCellView
list("Metal1" "drawing")
;list( (m1MinSpacing+m1MinWidth)*i+0.3:m1MinSpacing+m1MinWidth
;(m1MinSpacing+m1MinWidth)*i+m1MinWidth+0.3:wNumber-m1MinWidth)
list(
(lNumber-(count*(m1MinSpacing+m1MinWidth)-m1MinWidth))/2+(i-1)*(m1MinSpacing+m1MinWidth):wNumber-m1MinSpacing-m1MinWidth
(lNumber-(count*(m1MinSpacing+m1MinWidth)-m1MinWidth))/2+(i-1)*(m1MinSpacing+m1MinWidth)+m1MinWidth:wNumber-m1MinWidth)
)
)
)
)
)