• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. How to quickly find device category?

Stats

  • Locked Locked
  • Replies 13
  • Subscribers 143
  • Views 18761
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to quickly find device category?

MedAn
MedAn over 8 years ago

How  can I speed up the search of teh category name for device?

Now I wrote a small script:

ret = nil;
libId = ddGetObj(IndraInitForm->techLibField->value);
catList = ddCatGetLibCats(libId);
foreach(cat catList
   catId = catId = ddCatFindCat(libId cat "r");

   when(catId != nil
      when(ddCatIsObjInCat(cName catId) ret = cat);
   );end when
);end foreach

ret;

But it's take really a lot of time. Maybe somebody can show me another way?

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Given that you've only shown part of your code, it's hard to see what you're doing. Given that you have a gets() in the while loop - and maybe a second gets reading nextLine later on, it's unclear to me what's going on or what's not working. It's also odd that you're using both pcre and rex functions - looks a little unstructured.

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 8 years ago

    Given that you've only shown part of your code, it's hard to see what you're doing. Given that you have a gets() in the while loop - and maybe a second gets reading nextLine later on, it's unclear to me what's going on or what's not working. It's also odd that you're using both pcre and rex functions - looks a little unstructured.

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • TAMBUR
    TAMBUR over 7 years ago in reply to Andrew Beckett

    Hi Andrew,

     I am new to the community.cadence.com, many thanks to you as your solutions for different users queries are helped me a lot.

    Please help me to get solution for below query,

    Can we get list of cells under specified Category - MOSFETS (which has again a subcategory branches, like CMOS, DEMOS..etc)of a library. And I tried with ddCatFindCat, ddCatGetCatMemers commands, but failed to get cells if MOSFETS has many inner recursive subcategories.

    Thanks and regards,

    Basavaraj Tambur

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 7 years ago in reply to TAMBUR

    Hi Basavaraj,

    Without writing something special, I could reuse this existing function I wrote a while back:

    /***************************************************************
    *                                                              *
    *             (abTraverseCats lib catName cellTab)             *
    *                                                              *
    *     Given a libId, a category name, and the table we're      *
    *    using to collect the information, recursively traverse    *
    *   the categories to collect which categories are used for    *
    *                          each cell.                          *
    *                                                              *
    ***************************************************************/
    
    (procedure (abTraverseCats lib catName cellTab)
      (let (catId)
           (setq catId (ddCatOpen lib catName "r"))
           (foreach catMember (ddCatGetCatMembers catId)
                    (case (cadr catMember)
                          ("cell"
                           (setarray cellTab (car catMember)
                                     (cons catName 
                                           (arrayref cellTab (car catMember)))))
                          ("category"
                           (abTraverseCats lib (car catMember) cellTab))
                          (t
                           (printf "Unexpected membere type %L\n" (cadr catMember)))
                          )
                    )
           (ddCatClose catId)
           )
      )

    You can then do:

    cellTable=makeTable('cellTable nil)
    abTraverseCats(ddGetObj("analogLib") "Sources" cellTable)
    listOfCells=cellTable->?

    Hope I've understood your question properly.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • TAMBUR
    TAMBUR over 7 years ago in reply to Andrew Beckett

    Thanks a lot Andrew! It works for me as I expected.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information