pcell devices wont re-size

R

rick

Guest
I am trying to create a pCell that will instantiates devices from the
PDK. I have the cell together
but the devices wont resize, cant change the parameters. Solution ID:
11178170 on sourceLink
states that this problem can happen if there is a datatype mismatch
which there is.

The dataTypes of the devices in the PDK has its parameters set as
floats. But the code wants strings.
I had this working on a different PDK where both were strings and it
works but when migrating the
code to a different PDK, it not longer works. I tried changing it to
strings but it then no longer compiles.

Here is the error:

e *Error* dbCreateParamInst: Invalid float - "1.00u"
\e *Error* load: error while loading file - "./pCells/mypart.il"

pCell source code:

dbCreateParamInst(cv tranId
"ntranr" 0:0 "MY" 1 list(
list("w" "string" sprintf(nil "%.2fu" nw))
list("l" "string" sprintf(nil "%.2fu" nl))
list("fingers" "string" sprintf(nil "%d" nf))

pcDefinePCell(
list(ddGetObj("rickPcell") "mypart" "layout")
(
(nw float 1.0)
(nl float 0.13)
(nf int 1)
(pw float 1.0)
(pl float 0.13)
(pf int 1)
)
InstantMyPart(pcCellView nw nl nf pw pl pf)


---------------------------------------------------------------------------------------------------------
parameter dump of the device

\i cv=dbOpenCellView("tsmc13rf" "nmos1v" "layout")
\t db:375117868
\i cv~>parameters~>value~>name
\t ("tapCntRows" "tapExtension" "rightTap" "leftTap" "bottomTap"
\t "topTap" "tap" "rightAbut" "leftAbut" "sdMtlWidth"
\t "mtlCvg" "switchSD" "connectSD" "minGateMetal" "connectGates"
\t "fingers" "l" "fw" "dnwell"

\i cv~>parameters~>value~>valueType
\t ("int" "string" "boolean" "boolean" "boolean"
\t "boolean" "string" "int" "int" "float"
\t "string" "boolean" "string" "boolean" "string"
\t "float" "float" "float" "boolean"

I cant change the PDK so what is correct method of instantiating a
device with type float?
 
On May 17, 10:48 pm, rick <ej...@pacbell.net> wrote:
I am trying to create a pCell that will instantiates devices from the
PDK.  I have the cell together
but the devices wont resize, cant change the parameters.  Solution ID:
11178170 on sourceLink
states that this problem can happen if there is a datatype mismatch
which there is.

The dataTypes of the devices in the PDK has its parameters set as
floats.   But the code wants strings.
I had this working on a different PDK where both were strings and it
works but when migrating the
code to a different PDK, it not longer works. I tried changing it to
strings but it then no longer compiles.

Here is the error:

e *Error* dbCreateParamInst: Invalid float - "1.00u"
\e *Error* load: error while loading file - "./pCells/mypart.il"

pCell source code:

    dbCreateParamInst(cv tranId
      "ntranr" 0:0 "MY" 1 list(
    list("w" "string" sprintf(nil "%.2fu" nw))
    list("l" "string" sprintf(nil "%.2fu" nl))
    list("fingers" "string" sprintf(nil "%d" nf))

pcDefinePCell(
  list(ddGetObj("rickPcell") "mypart" "layout")
  (
    (nw float 1.0)
    (nl float 0.13)
    (nf int 1)
    (pw float 1.0)
    (pl float 0.13)
    (pf int 1)
  )
  InstantMyPart(pcCellView nw nl nf pw pl pf)

---------------------------------------------------------------------------------------------------------
parameter dump of the device

\i cv=dbOpenCellView("tsmc13rf" "nmos1v" "layout")
\t db:375117868
\i cv~>parameters~>value~>name
\t ("tapCntRows" "tapExtension" "rightTap" "leftTap" "bottomTap"
\t     "topTap" "tap" "rightAbut" "leftAbut" "sdMtlWidth"
\t     "mtlCvg" "switchSD" "connectSD" "minGateMetal" "connectGates"
\t     "fingers" "l" "fw" "dnwell"

\i cv~>parameters~>value~>valueType
\t ("int" "string" "boolean" "boolean" "boolean"
\t     "boolean" "string" "int" "int" "float"
\t     "string" "boolean" "string" "boolean" "string"
\t     "float" "float" "float" "boolean"

I cant change the PDK so what is correct method of instantiating a
device with type float?
When you "migrate to a different PDK", could you elaborate how exactly
are you doing it?
If the PDK is between 2 different companies (or even two different
technologies of the same foundry), the codes written may be processing
the input data in different ways.

e.g. 1
pcDefinePCell(
list(ddGetObj("tech013") "myDevice" "layout")
(
(l float 0.13)
(w int 1)
)
deviceCode_013(l w)
) ;pcDefinePCell

e.g. 2
pcDefinePCell(
list(ddGetObj("tech013LP") "myDevice" "layout")
(
(l "0.13u")
(w "1")
)
deviceCode_013LP(l w)
) ;pcDefinePCell

Compare the pcell definitions in these 2 examples - e.g. 1 has to
accept a floating type & integer type value while e.g. 2 has to accept
string type for both values.
Moreover, there is also a potential difference in magnitude (parameter
"l" uses value 0.13 for one while the other 0.13u or 0.13e-6).
How might this come about?
Perhaps one vendor created pcell codes for the foundry's 130um
library, while another vendor created the pcell codes for the same
foundry's low power library - so, the codes inside functions
deviceCode_013() & deviceCode_013LP() can be very different in nature.

Perhaps instead of using 1.00u, you might have to use the 1.00e-6
value, since function cdfParseFloatString() which normally converts
string "1.00u" to 1.00e-6 floating value, maybe is not used by one of
the codes - then again, it might be something else.

Best regards,
I-FAB
 
On May 18, 3:36 am, I-F AB <cop0...@gmail.com> wrote:
On May 17, 10:48 pm, rick <ej...@pacbell.net> wrote:



I am trying to create a pCell that will instantiates devices from the
PDK.  I have the cell together
but the devices wont resize, cant change the parameters.  Solution ID:
11178170 on sourceLink
states that this problem can happen if there is a datatype mismatch
which there is.

The dataTypes of the devices in the PDK has its parameters set as
floats.   But the code wants strings.
I had this working on a different PDK where both were strings and it
works but when migrating the
code to a different PDK, it not longer works. I tried changing it to
strings but it then no longer compiles.

Here is the error:

e *Error* dbCreateParamInst: Invalid float - "1.00u"
\e *Error* load: error while loading file - "./pCells/mypart.il"

pCell source code:

    dbCreateParamInst(cv tranId
      "ntranr" 0:0 "MY" 1 list(
    list("w" "string" sprintf(nil "%.2fu" nw))
    list("l" "string" sprintf(nil "%.2fu" nl))
    list("fingers" "string" sprintf(nil "%d" nf))

pcDefinePCell(
  list(ddGetObj("rickPcell") "mypart" "layout")
  (
    (nw float 1.0)
    (nl float 0.13)
    (nf int 1)
    (pw float 1.0)
    (pl float 0.13)
    (pf int 1)
  )
  InstantMyPart(pcCellView nw nl nf pw pl pf)

---------------------------------------------------------------------------------------------------------
parameter dump of the device

\i cv=dbOpenCellView("tsmc13rf" "nmos1v" "layout")
\t db:375117868
\i cv~>parameters~>value~>name
\t ("tapCntRows" "tapExtension" "rightTap" "leftTap" "bottomTap"
\t     "topTap" "tap" "rightAbut" "leftAbut" "sdMtlWidth"
\t     "mtlCvg" "switchSD" "connectSD" "minGateMetal" "connectGates"
\t     "fingers" "l" "fw" "dnwell"

\i cv~>parameters~>value~>valueType
\t ("int" "string" "boolean" "boolean" "boolean"
\t     "boolean" "string" "int" "int" "float"
\t     "string" "boolean" "string" "boolean" "string"
\t     "float" "float" "float" "boolean"

I cant change the PDK so what is correct method of instantiating a
device with type float?

When you "migrate to a different PDK", could you elaborate how exactly
are you doing it?
If the PDK is between 2 different companies (or even two different
technologies of the same foundry), the codes written may be processing
the input data in different ways.

e.g. 1
pcDefinePCell(
  list(ddGetObj("tech013") "myDevice" "layout")
  (
    (l float 0.13)
    (w int 1)
  )
 deviceCode_013(l w)
) ;pcDefinePCell

e.g. 2
pcDefinePCell(
  list(ddGetObj("tech013LP") "myDevice" "layout")
  (
    (l "0.13u")
    (w "1")
  )
 deviceCode_013LP(l w)
) ;pcDefinePCell

Compare the pcell definitions in these 2 examples  -  e.g. 1 has to
accept a floating type & integer type value while e.g. 2 has to accept
string type for both values.
Moreover, there is also a potential difference in magnitude (parameter
"l" uses value 0.13 for one while the other 0.13u or 0.13e-6).
How might this come about?
Perhaps one vendor created pcell codes for the foundry's 130um
library, while another vendor created the pcell codes for the same
foundry's low power library -  so, the codes inside functions
deviceCode_013() & deviceCode_013LP() can be very different in nature.

Perhaps instead of using 1.00u, you might have to use the 1.00e-6
value, since function cdfParseFloatString() which normally converts
string "1.00u" to 1.00e-6 floating value, maybe is not used by one of
the codes - then again, it might be something else.

Best regards,
I-FAB
The PDK's are 2 different technologies and fabs. Ive changed the
device library, name are parameters
to match the names in the PDK. The code does compile with only one
syntax:

dbCreateParamInst(cv tranId
"ntranr" 0:0 "MY" 1 list(
list("fw" "string" sprintf(nil "%.2fu" nw))
list("l" "string" sprintf(nil "%.2fu" nl))
list("fingers" "string" sprintf(nil "%d" nf))
;; list("rightCnt" "string" "series")
)
)
;; close the transistor reference
dbClose(tranId)

Anything else and it fails. It looks more like the code is correct
but the callbacks are not getting fired off to
re-evaluate the device.
 
On May 18, 7:57 am, rick <ej...@pacbell.net> wrote:
On May 18, 3:36 am, I-F AB <cop0...@gmail.com> wrote:



On May 17, 10:48 pm, rick <ej...@pacbell.net> wrote:

I am trying to create a pCell that will instantiates devices from the
PDK.  I have the cell together
but the devices wont resize, cant change the parameters.  Solution ID:
11178170 on sourceLink
states that this problem can happen if there is a datatype mismatch
which there is.

The dataTypes of the devices in the PDK has its parameters set as
floats.   But the code wants strings.
I had this working on a different PDK where both were strings and it
works but when migrating the
code to a different PDK, it not longer works. I tried changing it to
strings but it then no longer compiles.

Here is the error:

e *Error* dbCreateParamInst: Invalid float - "1.00u"
\e *Error* load: error while loading file - "./pCells/mypart.il"

pCell source code:

    dbCreateParamInst(cv tranId
      "ntranr" 0:0 "MY" 1 list(
    list("w" "string" sprintf(nil "%.2fu" nw))
    list("l" "string" sprintf(nil "%.2fu" nl))
    list("fingers" "string" sprintf(nil "%d" nf))

pcDefinePCell(
  list(ddGetObj("rickPcell") "mypart" "layout")
  (
    (nw float 1.0)
    (nl float 0.13)
    (nf int 1)
    (pw float 1.0)
    (pl float 0.13)
    (pf int 1)
  )
  InstantMyPart(pcCellView nw nl nf pw pl pf)

---------------------------------------------------------------------------------------------------------
parameter dump of the device

\i cv=dbOpenCellView("tsmc13rf" "nmos1v" "layout")
\t db:375117868
\i cv~>parameters~>value~>name
\t ("tapCntRows" "tapExtension" "rightTap" "leftTap" "bottomTap"
\t     "topTap" "tap" "rightAbut" "leftAbut" "sdMtlWidth"
\t     "mtlCvg" "switchSD" "connectSD" "minGateMetal" "connectGates"
\t     "fingers" "l" "fw" "dnwell"

\i cv~>parameters~>value~>valueType
\t ("int" "string" "boolean" "boolean" "boolean"
\t     "boolean" "string" "int" "int" "float"
\t     "string" "boolean" "string" "boolean" "string"
\t     "float" "float" "float" "boolean"

I cant change the PDK so what is correct method of instantiating a
device with type float?

When you "migrate to a different PDK", could you elaborate how exactly
are you doing it?
If the PDK is between 2 different companies (or even two different
technologies of the same foundry), the codes written may be processing
the input data in different ways.

e.g. 1
pcDefinePCell(
  list(ddGetObj("tech013") "myDevice" "layout")
  (
    (l float 0.13)
    (w int 1)
  )
 deviceCode_013(l w)
) ;pcDefinePCell

e.g. 2
pcDefinePCell(
  list(ddGetObj("tech013LP") "myDevice" "layout")
  (
    (l "0.13u")
    (w "1")
  )
 deviceCode_013LP(l w)
) ;pcDefinePCell

Compare the pcell definitions in these 2 examples  -  e.g. 1 has to
accept a floating type & integer type value while e.g. 2 has to accept
string type for both values.
Moreover, there is also a potential difference in magnitude (parameter
"l" uses value 0.13 for one while the other 0.13u or 0.13e-6).
How might this come about?
Perhaps one vendor created pcell codes for the foundry's 130um
library, while another vendor created the pcell codes for the same
foundry's low power library -  so, the codes inside functions
deviceCode_013() & deviceCode_013LP() can be very different in nature.

Perhaps instead of using 1.00u, you might have to use the 1.00e-6
value, since function cdfParseFloatString() which normally converts
string "1.00u" to 1.00e-6 floating value, maybe is not used by one of
the codes - then again, it might be something else.

Best regards,
I-FAB

The PDK's are 2 different technologies and fabs.   Ive changed the
device library, name are parameters
to match the names in the PDK.   The code does compile with only one
syntax:

    dbCreateParamInst(cv tranId
      "ntranr" 0:0 "MY" 1 list(
        list("fw" "string" sprintf(nil "%.2fu" nw))
        list("l" "string" sprintf(nil "%.2fu" nl))
        list("fingers" "string" sprintf(nil "%d" nf))
;;      list("rightCnt" "string" "series")
      )
    )
    ;; close the transistor reference
    dbClose(tranId)

Anything else and it fails.   It looks more like the code is correct
but the callbacks are not getting fired off to
re-evaluate the device.
Im pretty certain that the code is correct and the devices are not
being re-evaluated. This is a pcell that instantiates
pcells . If I open the compiled cell, and force the callbacks with
the CCSinvokeCdfCallbacks.il routine on sourceLink,
it will resize. But if this cell is instantiated, then it builds
with the defaults in the CDF's. I need a way to evaluate the
pcells that are down a level in hierarchy.

top pcell
mos devices from the PDK <--these guys are using the default
values and not resizing.
 
rick wrote, on 05/18/10 23:34:
The PDK's are 2 different technologies and fabs. Ive changed the
device library, name are parameters
to match the names in the PDK. The code does compile with only one
syntax:

dbCreateParamInst(cv tranId
"ntranr" 0:0 "MY" 1 list(
list("fw" "string" sprintf(nil "%.2fu" nw))
list("l" "string" sprintf(nil "%.2fu" nl))
list("fingers" "string" sprintf(nil "%d" nf))
;; list("rightCnt" "string" "series")
)
)
;; close the transistor reference
dbClose(tranId)

Anything else and it fails. It looks more like the code is correct
but the callbacks are not getting fired off to
re-evaluate the device.

Im pretty certain that the code is correct and the devices are not
being re-evaluated. This is a pcell that instantiates
pcells . If I open the compiled cell, and force the callbacks with
the CCSinvokeCdfCallbacks.il routine on sourceLink,
it will resize. But if this cell is instantiated, then it builds
with the defaults in the CDF's. I need a way to evaluate the
pcells that are down a level in hierarchy.

top pcell
mos devices from the PDK<--these guys are using the default
values and not resizing.
Rick,

Instantiating a device which requires CDF callbacks to be evaluated, inside a
pcell, is always a bit of a challenge.

Something like this should do the trick:

baseCDF=cdfGetBaseCellCDF(ddGetObj(sourcePDKlib sourcePDKcell))
cdf=CCScreateEffectiveCDFLookalike(baseCDF t)
cdf~>fw~>value=sprintf(nil "%.2fu" nw)
cdf~>l~>value=sprintf(nil "%.2fu" nl)
cdf~>fingers~>value=sprintf(nil "%.2fu" nf)
; cdf~>rightCnt~>value="series"
; only give the ?order if you can rely on just invoking one callback.
; doing this can make it faster if calling a single CDF callback
; is sufficient
CCSinvokeObjCdfCallbacks(cdf ?order '("fw"))
pcellParams=CCSconvertCdfToPcellParams(cdf)
dbCreateParamInst(cv tranId
"ntranr" 0:0 "MY" 1 pcellParams
)
dbClose(tranId)

This has the effect of calling the CDF callbacks prior to placement of the
instance, which avoids generating unnecessary variants if you tried to call the
callbacks after initial placement.

Note that this is only a viable option of the CDF callbacks are "pcell-safe"
(i.e. they only use SKILL functions which are legal in a pcell).

Best still is to have a PDK which avoids CDF callbacks to compute derived
values. Unfortunately these are few and far between (see my Cadence Online
Support solution, "The Dangers of CDF Callbacks").

Regards,

Andrew.
 
rick wrote, on 05/24/10 15:35:
I have been able to get the devices resized by using the code in
solution# 11018344
but now there are 2 issues that Im not sure how to fix.

1) When compiling I get a bunch of white markers and this error
message :

\e *Error* tsmc13pas_mosUpdateMtlCvg: argument #1 should be any
user-defined (other) type (type template = "oo") - CCSeffCDF@0xf257158

2) Assura LVS passes on the newly created cell, however when I run
this cell as an instantiated
instance, then Assura DRC runs, LVS and GDS-out does not, LVS stops
with:

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
complete the layout or set '?errorOnMissingMaster nil'
Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

Im pretty sure that this is a PDK issue when it uses the code version
to run a cell or something????
Do I need to add something to have the smarts of this cell to be
written into the property bag of
the library?

Thanks!!!!
Hi Rick,

The challenge is that the CDF callbacks in this case have been written to
type-check their arguments, and insist that they get passed a true CDF object.

Unfortunately that means you cannot use the CCScreateEffectiveCDFLookalike()
function approach.

Instead, you have to place the instance as you were originally:

inst=dbCreateParamInst(cv tranId
"ntranr" 0:0 "MY" 1 list(
list("fw" "string" sprintf(nil "%.2fu" nw))
list("l" "string" sprintf(nil "%.2fu" nl))
list("fingers" "string" sprintf(nil "%d" nf))
;; list("rightCnt" "string" "series")
)
)

And then:

CCSinvokeInstCdfCallbacks(inst ?order '("fw") ?useInstCDF t)

Again, you might not want to use ?order (but with TSMC PDKs, generally you want
to call the callback only once). This is not as fast as running the callbacks
prior to initial placement, but if you have the callbacks doing type-checking,
you don't have much choice (except maybe with a smarter CCSinvokeCdfCallbacks
implementation which truly emulates the effective CDF).

The issue with CCSdrawNand - I'm assuming that you are using this CCSdrawNand
function somewhere? You would normally need to ensure that this function is
loaded - usually from the libInit.il file within the library containing the
pcell which uses the function. Same for CCSinvokeCdfCallbacks.il - it would need
loading from a libInit.il if it's used within that library.

Regards,

Andrew.

--
Andrew Beckett
Senior Solution Architect - Cadence Design Systems Ltd (UK)
 
On May 24, 5:55 am, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
rick wrote, on 05/18/10 23:34:





The PDK's are 2 different technologies and fabs.   Ive changed the
device library, name are parameters
to match the names in the PDK.   The code does compile with only one
syntax:

     dbCreateParamInst(cv tranId
       "ntranr" 0:0 "MY" 1 list(
         list("fw" "string" sprintf(nil "%.2fu" nw))
         list("l" "string" sprintf(nil "%.2fu" nl))
         list("fingers" "string" sprintf(nil "%d" nf))
;;      list("rightCnt" "string" "series")
       )
     )
     ;; close the transistor reference
     dbClose(tranId)

Anything else and it fails.   It looks more like the code is correct
but the callbacks are not getting fired off to
re-evaluate the device.

Im pretty certain that the code is correct and the devices are not
being re-evaluated.  This is a pcell that instantiates
pcells .   If I open the compiled cell, and force the callbacks with
the CCSinvokeCdfCallbacks.il routine on sourceLink,
it will resize.   But if this cell is instantiated, then it builds
with the defaults in the CDF's.   I need a way to evaluate the
pcells that are down a level in hierarchy.

top pcell
     mos devices from the PDK<--these guys are using the default
values and not resizing.

Rick,

Instantiating a device which requires CDF callbacks to be evaluated, inside a
pcell, is always a bit of a challenge.

Something like this should do the trick:

   baseCDF=cdfGetBaseCellCDF(ddGetObj(sourcePDKlib sourcePDKcell))
   cdf=CCScreateEffectiveCDFLookalike(baseCDF t)
   cdf~>fw~>value=sprintf(nil "%.2fu" nw)
   cdf~>l~>value=sprintf(nil "%.2fu" nl)
   cdf~>fingers~>value=sprintf(nil "%.2fu" nf)
   ; cdf~>rightCnt~>value="series"
   ; only give the ?order if you can rely on just invoking one callback.
   ; doing this can make it faster if calling a single CDF callback
   ; is sufficient
   CCSinvokeObjCdfCallbacks(cdf ?order '("fw"))
   pcellParams=CCSconvertCdfToPcellParams(cdf)
   dbCreateParamInst(cv tranId
     "ntranr" 0:0 "MY" 1 pcellParams
   )
   dbClose(tranId)

This has the effect of calling the CDF callbacks prior to placement of the
instance, which avoids generating unnecessary variants if you tried to call the
callbacks after initial placement.

Note that this is only a viable option of the CDF callbacks are "pcell-safe"
(i.e. they only use SKILL functions which are legal in a pcell).

Best still is to have a PDK which avoids CDF callbacks to compute derived
values. Unfortunately these are few and far between (see my Cadence Online
Support solution, "The Dangers of CDF Callbacks").

Regards,

Andrew.
I have been able to get the devices resized by using the code in
solution# 11018344
but now there are 2 issues that Im not sure how to fix.

1) When compiling I get a bunch of white markers and this error
message :

\e *Error* tsmc13pas_mosUpdateMtlCvg: argument #1 should be any
user-defined (other) type (type template = "oo") - CCSeffCDF@0xf257158

2) Assura LVS passes on the newly created cell, however when I run
this cell as an instantiated
instance, then Assura DRC runs, LVS and GDS-out does not, LVS stops
with:

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
complete the layout or set '?errorOnMissingMaster nil'
Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

Im pretty sure that this is a PDK issue when it uses the code version
to run a cell or something????
Do I need to add something to have the smarts of this cell to be
written into the property bag of
the library?

Thanks!!!!
 
On May 24, 8:26 am, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm>
wrote:
rick wrote, on 05/24/10 15:35:



I have been able to get the devices resized by using the code in
solution# 11018344
but now there are 2 issues that Im not sure how to fix.

1)  When compiling I get a bunch of white markers and this error
message :

\e *Error* tsmc13pas_mosUpdateMtlCvg: argument #1 should be any
user-defined (other) type (type template = "oo") - CCSeffCDF@0xf257158

2)  Assura LVS passes on the newly created cell, however when I run
this cell as an instantiated
instance, then   Assura DRC runs, LVS and GDS-out does not, LVS stops
with:

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
         complete the layout or set '?errorOnMissingMaster nil'
         Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

Im pretty sure that this is a PDK issue when it uses the code version
to run a cell or something????
Do I need to add something to have the smarts of this cell to be
written into the property bag of
the library?

Thanks!!!!

Hi Rick,

The challenge is that the CDF callbacks in this case have been written to
type-check their arguments, and insist that they get passed a true CDF object.

Unfortunately that means you cannot use the CCScreateEffectiveCDFLookalike()
function approach.

Instead, you have to place the instance as you were originally:

     inst=dbCreateParamInst(cv tranId
       "ntranr" 0:0 "MY" 1 list(
        list("fw" "string" sprintf(nil "%.2fu" nw))
        list("l" "string" sprintf(nil "%.2fu" nl))
        list("fingers" "string" sprintf(nil "%d" nf))
;;      list("rightCnt" "string" "series")
       )
     )

And then:

     CCSinvokeInstCdfCallbacks(inst ?order '("fw") ?useInstCDF t)

Again, you might not want to use ?order (but with TSMC PDKs, generally you want
to call the callback only once). This is not as fast as running the callbacks
prior to initial placement, but if you have the callbacks doing type-checking,
you don't have much choice (except maybe with a smarter CCSinvokeCdfCallbacks
implementation which truly emulates the effective CDF).

The issue with CCSdrawNand - I'm assuming that you are using this CCSdrawNand
function somewhere? You would normally need to ensure that this function is
loaded - usually from the libInit.il file within the library containing the
pcell which uses the function. Same for CCSinvokeCdfCallbacks.il - it would need
loading from a libInit.il if it's used within that library.

Regards,

Andrew.

--
Andrew Beckett
Senior Solution Architect - Cadence Design Systems Ltd (UK)
Hi Andrew - The white errors are gone!!....THANKS!!!! Please let me
know if I used the correct implementation.
I have 4 instantiations of the tsmc devices so here is a snipet of 2:


tranId = dbOpenCellViewByType("tsmc13rf" "nmos1v" "layout")
instNTL=dbCreateParamInst(cv tranId
"ntranl" 0:0 "MX" 1 list(
list("fw" "string" sprintf(nil "%.2fu" w_n_b))
list("l" "string" sprintf(nil "%.2fu" l_n_b))
list("fingers" "string" sprintf(nil "%d" f_n_b))
)
)
instNTR=dbCreateParamInst(cv tranId
"ntranr" 0:0 "R180" 1 list(
list("fw" "string" sprintf(nil "%.2fu" w_n_a))
list("l" "string" sprintf(nil "%.2fu" l_n_a))
list("fingers" "string" sprintf(nil "%d" f_n_a))
)
)
;; close the transistor reference
dbClose(tranId)

........other code, then I called each one:

CCSinvokeInstCdfCallbacks(instPTL ?order '("fw") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instNTL ?order '("fw") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instPTL ?order '("l") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instPTL ?order '("fingers") ?useInstCDF t ?
callInitProc t)

and it did compile error free and even still works!!!! Assura is
still not happy.

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
*WARNING* Error kept in "errorDesc" property of the label
"pcellEvalFailed" on layer/purpose "marker/error" in the submaster.

Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
complete the layout or set '?errorOnMissingMaster nil'
Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

If I run the cell that the code created, it runs and passes. If
instantiated, then DRC runs and LVS does not, gives me the errors
above. CCSdrawNand is the the name of the procedure that creates the
cell. I am unable to locate the any error. BTW, if I
turn off fail on error in Assura, then the instantiated cell will run
but fails to compare with a empty layout netlest

Thanks for your help!!!!

Rick
 
On May 24, 2:06 pm, rick <ej...@pacbell.net> wrote:
On May 24, 8:26 am, Andrew Beckett <andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:



rick wrote, on 05/24/10 15:35:

I have been able to get the devices resized by using the code in
solution# 11018344
but now there are 2 issues that Im not sure how to fix.

1)  When compiling I get a bunch of white markers and this error
message :

\e *Error* tsmc13pas_mosUpdateMtlCvg: argument #1 should be any
user-defined (other) type (type template = "oo") - CCSeffCDF@0xf257158

2)  Assura LVS passes on the newly created cell, however when I run
this cell as an instantiated
instance, then   Assura DRC runs, LVS and GDS-out does not, LVS stops
with:

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
         complete the layout or set '?errorOnMissingMaster nil'
         Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

Im pretty sure that this is a PDK issue when it uses the code version
to run a cell or something????
Do I need to add something to have the smarts of this cell to be
written into the property bag of
the library?

Thanks!!!!

Hi Rick,

The challenge is that the CDF callbacks in this case have been written to
type-check their arguments, and insist that they get passed a true CDF object.

Unfortunately that means you cannot use the CCScreateEffectiveCDFLookalike()
function approach.

Instead, you have to place the instance as you were originally:

     inst=dbCreateParamInst(cv tranId
       "ntranr" 0:0 "MY" 1 list(
        list("fw" "string" sprintf(nil "%.2fu" nw))
        list("l" "string" sprintf(nil "%.2fu" nl))
        list("fingers" "string" sprintf(nil "%d" nf))
;;      list("rightCnt" "string" "series")
       )
     )

And then:

     CCSinvokeInstCdfCallbacks(inst ?order '("fw") ?useInstCDF t)

Again, you might not want to use ?order (but with TSMC PDKs, generally you want
to call the callback only once). This is not as fast as running the callbacks
prior to initial placement, but if you have the callbacks doing type-checking,
you don't have much choice (except maybe with a smarter CCSinvokeCdfCallbacks
implementation which truly emulates the effective CDF).

The issue with CCSdrawNand - I'm assuming that you are using this CCSdrawNand
function somewhere? You would normally need to ensure that this function is
loaded - usually from the libInit.il file within the library containing the
pcell which uses the function. Same for CCSinvokeCdfCallbacks.il - it would need
loading from a libInit.il if it's used within that library.

Regards,

Andrew.

--
Andrew Beckett
Senior Solution Architect - Cadence Design Systems Ltd (UK)

Hi Andrew -  The white errors are gone!!....THANKS!!!!  Please let me
know if I used the correct implementation.
I have 4 instantiations of the tsmc devices so here is a snipet of 2:

    tranId = dbOpenCellViewByType("tsmc13rf" "nmos1v" "layout")
    instNTL=dbCreateParamInst(cv tranId
      "ntranl" 0:0 "MX" 1 list(
        list("fw" "string" sprintf(nil "%.2fu"   w_n_b))
        list("l" "string" sprintf(nil "%.2fu"    l_n_b))
        list("fingers" "string" sprintf(nil "%d" f_n_b))
      )
    )
    instNTR=dbCreateParamInst(cv tranId
      "ntranr" 0:0 "R180" 1 list(
        list("fw" "string" sprintf(nil "%.2fu"   w_n_a))
        list("l" "string" sprintf(nil "%.2fu"    l_n_a))
        list("fingers" "string" sprintf(nil "%d" f_n_a))
      )
    )
    ;; close the transistor reference
    dbClose(tranId)

.......other code, then I called each one:

CCSinvokeInstCdfCallbacks(instPTL ?order '("fw") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instNTL ?order '("fw") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instPTL ?order '("l") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instPTL ?order '("fingers") ?useInstCDF t ?
callInitProc t)

and it did compile error free and even still works!!!!     Assura is
still not happy.

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
*WARNING* Error kept in "errorDesc" property of the label
"pcellEvalFailed" on layer/purpose "marker/error" in the submaster.

Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
        complete the layout or set '?errorOnMissingMaster nil'
        Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

If I run the cell that the code created, it runs and passes.  If
instantiated, then DRC runs and LVS does not, gives me the errors
above.  CCSdrawNand is the the name of the procedure that creates the
cell.  I am unable to locate the any error.  BTW, if I
turn off fail on error in Assura, then the instantiated cell will run
but fails to compare with a empty layout netlest

 Thanks for your help!!!!

Rick
I created a libInit.il and Assura runs but GDS-out does not but i
probably needs something simular. BTW is there a way
to alias or have different names appear on the edit parameters form?
I currently have the "name" and would prefer to
have the "prompt"

Thanks
 
rick wrote, on 05/24/10 22:06:
On May 24, 8:26 am, Andrew Beckett<andr...@DcEaLdEeTnEcTe.HcIoSm
wrote:
rick wrote, on 05/24/10 15:35:



I have been able to get the devices resized by using the code in
solution# 11018344
but now there are 2 issues that Im not sure how to fix.

1) When compiling I get a bunch of white markers and this error
message :

\e *Error* tsmc13pas_mosUpdateMtlCvg: argument #1 should be any
user-defined (other) type (type template = "oo") - CCSeffCDF@0xf257158

2) Assura LVS passes on the newly created cell, however when I run
this cell as an instantiated
instance, then Assura DRC runs, LVS and GDS-out does not, LVS stops
with:

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
complete the layout or set '?errorOnMissingMaster nil'
Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

Im pretty sure that this is a PDK issue when it uses the code version
to run a cell or something????
Do I need to add something to have the smarts of this cell to be
written into the property bag of
the library?

Thanks!!!!

Hi Rick,

The challenge is that the CDF callbacks in this case have been written to
type-check their arguments, and insist that they get passed a true CDF object.

Unfortunately that means you cannot use the CCScreateEffectiveCDFLookalike()
function approach.

Instead, you have to place the instance as you were originally:

inst=dbCreateParamInst(cv tranId
"ntranr" 0:0 "MY" 1 list(
list("fw" "string" sprintf(nil "%.2fu" nw))
list("l" "string" sprintf(nil "%.2fu" nl))
list("fingers" "string" sprintf(nil "%d" nf))
;; list("rightCnt" "string" "series")
)
)

And then:

CCSinvokeInstCdfCallbacks(inst ?order '("fw") ?useInstCDF t)

Again, you might not want to use ?order (but with TSMC PDKs, generally you want
to call the callback only once). This is not as fast as running the callbacks
prior to initial placement, but if you have the callbacks doing type-checking,
you don't have much choice (except maybe with a smarter CCSinvokeCdfCallbacks
implementation which truly emulates the effective CDF).

The issue with CCSdrawNand - I'm assuming that you are using this CCSdrawNand
function somewhere? You would normally need to ensure that this function is
loaded - usually from the libInit.il file within the library containing the
pcell which uses the function. Same for CCSinvokeCdfCallbacks.il - it would need
loading from a libInit.il if it's used within that library.

Regards,

Andrew.

--
Andrew Beckett
Senior Solution Architect - Cadence Design Systems Ltd (UK)

Hi Andrew - The white errors are gone!!....THANKS!!!! Please let me
know if I used the correct implementation.
I have 4 instantiations of the tsmc devices so here is a snipet of 2:


tranId = dbOpenCellViewByType("tsmc13rf" "nmos1v" "layout")
instNTL=dbCreateParamInst(cv tranId
"ntranl" 0:0 "MX" 1 list(
list("fw" "string" sprintf(nil "%.2fu" w_n_b))
list("l" "string" sprintf(nil "%.2fu" l_n_b))
list("fingers" "string" sprintf(nil "%d" f_n_b))
)
)
instNTR=dbCreateParamInst(cv tranId
"ntranr" 0:0 "R180" 1 list(
list("fw" "string" sprintf(nil "%.2fu" w_n_a))
list("l" "string" sprintf(nil "%.2fu" l_n_a))
list("fingers" "string" sprintf(nil "%d" f_n_a))
)
)
;; close the transistor reference
dbClose(tranId)

.......other code, then I called each one:

CCSinvokeInstCdfCallbacks(instPTL ?order '("fw") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instNTL ?order '("fw") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instPTL ?order '("l") ?useInstCDF t ?
callInitProc t)
CCSinvokeInstCdfCallbacks(instPTL ?order '("fingers") ?useInstCDF t ?
callInitProc t)

and it did compile error free and even still works!!!! Assura is
still not happy.

*WARNING* ("eval" 0 t nil ("*Error* eval: undefined function"
CCSdrawNand))
*WARNING* Error kept in "errorDesc" property of the label
"pcellEvalFailed" on layer/purpose "marker/error" in the submaster.

Reading the design data...
*ERROR* Incomplete layout. If you still want to continue run,
complete the layout or set '?errorOnMissingMaster nil'
Note that default value of parameter '?errorOnMissingMaster'
is 't' .
*WARNING* Error while building the VDB

If I run the cell that the code created, it runs and passes. If
instantiated, then DRC runs and LVS does not, gives me the errors
above. CCSdrawNand is the the name of the procedure that creates the
cell. I am unable to locate the any error. BTW, if I
turn off fail on error in Assura, then the instantiated cell will run
but fails to compare with a empty layout netlest

Thanks for your help!!!!

Rick
You shouldn't need to call CCSinvokeInstCdfCallbacks several times for each
component. You should just be able to do:

CCSinvokeInstCdfCallbacks(instPTL ?order '("fw" "l" "fingers") ?useInstCDF t)

In fact it's quite likely that calling it with just "fw" would be sufficient
(with TSMC PDKs, all calculations are usually done triggered by a change in any
parameter).

The CCSdrawNand must simply be because the code is not loaded in a background
session, which should be a matter of ensuring it's loaded in the libInit.il of
the correct library.

Just turning off the fail on error in Assura is never going to work in this
case. If the function is being called in your pcell, then if it gives this
error, the pcell will not be being built properly, and hence the layout that is
being verified will be wrong (presumably the nand being drawn will be missing!).

Regards,

Andrew.
 
rick wrote, on 05/24/10 23:52:
I created a libInit.il and Assura runs but GDS-out does not but i
probably needs something simular. BTW is there a way
to alias or have different names appear on the edit parameters form?
I currently have the "name" and would prefer to
have the "prompt"

Thanks
The libInit.il should get loaded by both Assura and Steam out. Perhaps you
should put some debug print messages in your libInit.il so you can observe
whether it is being loaded.

As for getting different names on the edit parameters form - you need to create
CDF for the cell in question; that allows you to define the prompt, type, and so
on for each parameter.

With no CDF, the edit properties form shows just the pcell parameter names,
because it has no additional information to show anything more.

Regards,

Andrew.
 

Welcome to EDABoard.com

Sponsor

Back
Top