master terminals

Discussion in 'Cadence' started by PolyPusher, Oct 2, 2009.

  1. PolyPusher

    PolyPusher Guest

    Hi all,

    I am trying to write code that creates a list of pins on masters that
    do not match schematic.
    I have found it to work sometimes. Basically, If I change a name of
    a pin on a master it catches that everytime. If a pin is missing, it
    doesn't always catch it. I can delete a pin in a master(made sure
    all pins are missing for the net) and run the code(at the parent"top")
    and it doesn't catch the missing pin. Do the same thing on another
    instance and the code catches the missing pin.

    I don't think it is my code since I can take the one master that my
    code doesn't catch a missing pin and run the below code and it isn't
    caught that way either. It seems to me if the pin on a master is
    deleted and you go back to the parent the pin information would be
    gone, but that is not what I am seeing. I tried to update components
    and nets, this doesn't change the results. Also, running
    connectivity-->check-->against source doesn't catch the missing master
    pin.

    Any ideas why? Looks like I might have to write a script that checks
    for pins at the master level using the schematic list of pins as a
    "gold" list. yuk.

    geGetSelectedSet(geGetEditCellView())~>master~>terminals~>name


    Thank you in advance for any help,
    Poly Pusher

    procedure(EFFloatingPins()
    ;==========floating pins routine
    ;==========flag master if the pins do not match schematic
    let((EFSelectionFilterSchWindow EFSchInstList EFSchInstance
    EFLayInstList EFSchTraceDiff EFLayInstance EFGoldInst
    EFNetsBox EFTermsOrNet EFInstanceVar FInstance EFCellname EFTerm EFNet
    EFInstanceX EFInstanceXvar EFSchTrace
    EFLayInstance EFLayCellname EFLayTerm)


    ;==========Create "Gold List" list of instances in schematic added
    pipe symbol

    hiSetCurrentWindow(window(EFSelectionFilterSchWindow))
    cvSch=geGetEditCellView()

    EFSchInstList=nil

    when(cvSch
    foreach( inst cvSch~>instances
    if(inst~>master then
    EFSchInstance=inst~>name
    EFSchInstList=append(EFSchInstList list(strcat("|"
    EFSchInstance)))
    );if
    );foreach
    );when

    hiSetCurrentWindow(window(EFSelectionFilterLayWindow))
    cvLay=geGetEditCellView()

    EFLayInstList=nil

    when(cvLay
    foreach( inst cvLay~>instances
    if(inst~>master then
    EFLayInstance=inst~>name
    EFLayInstList=append(EFLayInstList list(EFLayInstance))
    );if
    );foreach
    );when

    EFSchTraceList=nil
    EFLayTraceList=nil
    EFSchTrace=nil


    foreach(mapc EFGoldInst EFSchInstList

    EFGoldInstX=nil
    EFGoldInstX=append(EFGoldInstX list(EFGoldInst))

    if(setof(x EFGoldInstX member(x EFLayInstList))
    then; get lay trace and sch trace for instance
    when(cvLay
    foreach( inst cvLay~>instances
    if(inst~>master then
    EFLayInstance=inst~>name
    EFLayCellname=inst~>master~>cellName
    );if
    foreach( instTerm inst~>master~>terminals
    EFLayTerm=instTerm~>name

    if(EFGoldInst==EFLayInstance
    then EFLayTraceList=append(EFLayTraceList list(strcat(EFLayInstance
    ":" EFLayCellname ":" EFLayTerm )))
    );if
    );foreach
    );foreach
    );when

    when(cvSch
    foreach( inst cvSch~>instances
    EFInstance=inst~>name
    EFCellname=inst~>master~>cellName
    foreach( instTerm inst~>instTerms
    EFTerm=instTerm~>name
    EFNet=instTerm~>net~>name
    ;====add a | to EFInstance
    EFInstanceX=nil
    EFInstanceX=append(EFInstanceX list(strcat("|" EFInstance)))
    EFInstanceXVar=car(EFInstanceX)
    if(EFGoldInst==EFInstanceXVar
    then EFSchTraceList=append(EFSchTraceList list(strcat(EFInstanceXVar
    ":" EFCellname ":" EFTerm)))
    );if
    );foreach
    );foreach
    );when
    );if
    );foreach
    EFdiffList=nil
    EFdiffList = setof(x EFSchTraceList !member(x EFLayTraceList));Pin
    is in Schematic Not layout
    EFdiffList2=nil
    EFdiffList2 = setof(x EFLayTraceList !member(x EFSchTraceList));Pin
    is in Layout Not Schematic

    EFNoMatchSchList=nil
    EFNoMatchLayList=nil

    foreach(mapc EFNoMatchSch EFdiffList

    EFNoMatchSchList=append(EFNoMatchSchList list(strcat
    (EFNoMatchSch " --> Pin is in Schematic but not Layout")))

    );foreach

    foreach(mapc EFNoMatchLay EFdiffList2

    EFNoMatchLayList=append(EFNoMatchLayList list(strcat
    (EFNoMatchLay " --> Pin is in Layout but not Schematic")))

    );foreach


    );let

    EFSchematicProbeForm->EFProbeBox->choices=nil

    EFNoMatchLayList=sort(EFNoMatchLayList nil)
    EFSchematicProbeForm->EFLayTrace->choices=EFNoMatchLayList

    EFNoMatchSchList=sort(EFNoMatchSchList nil)
    EFSchematicProbeForm->EFSchTrace->choices=EFNoMatchSchList

    );procedure
     
    PolyPusher, Oct 2, 2009
    #1
  2. I'm assuming you are using VLS-XL (you write about update components and
    nets).

    Are you trying to create instTerm on instances which have a schematic
    equivalent but whose schematic equivalent doesn't have an equivalent
    instTerm? Or are you trying to create instTerm on instances which don't
    have a schematic equivalent.

    In the first case, I'd consider puting a net expression on the terminal in
    the master of the layout instance. VLS-XL will create the instTerm for
    you, resolving the netexpression in the schematic context. (This is used
    for instance for bulk terminals on transistors).
    I'm sorry but I didn't understood your problem. And I haven't the time to
    check your code to see if I can guess the problem with its help.

    If you are using 6.1.3, check the bnd* functions (IIRC, they were already
    in 6.1.2 but I can't get confirmation now). They may help you.

    Yours,
     
    Jean-Marc Bourguet, Oct 6, 2009
    #2
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.