• 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. Images of symbol view generated with hiGenerateThumbnails...

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 142
  • Views 5122
  • 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

Images of symbol view generated with hiGenerateThumbnails do no show text

bforejtAtTI
bforejtAtTI over 1 year ago

@(#)$CDS: virtuoso version ICADVM20.1-64b 10/11/2023 09:26 (cpgbld01) $

I generate thumbnails of schematics and if I set the resolution high enough the text on the schematic is visible.  However, if I try the same with symbol views, I only get lines and pin shapes with no text of any kind.  This renders the image of the symbol useless if you are comparing similar symbols.

I've tried hiExportImage() but that requries the design to be opened in a window while the function to generate thumbnails can work in the background.

Ultimately, I require images with enough resolution to read the text when zoomed in and I have been able to generate that for schematics but have been unable to do the same for symbols.

Is there a function that can directly generate PDF or some kind of scalable vector graphics format that can be viewed in a web browser?

  • Cancel
  • AurelBuche
    AurelBuche over 1 year ago

    Hi,

    If it works for schematics, then make it a schematic !

    You will find below a snippet to do that. It's just a simple proof of concept that should work for basic cases.

    It is not robust, for instance it will fail if library is not writable.

    I had the same problem, I wrote a function to export symbols to SVG format.

    It's quite straightforward but you have to manage all the different shape types...

    Hope this helps.

    Aurélien

    (defun cst_copy_to_cv (lib cell view cv)
      "Copy everything from LIB/CELL/VIEW into CV"
      (let ( (src_cv (dbOpenCellViewByType lib cell view)) )
        (unwindProtect
          (foreach lpp src_cv->lpps
            (foreach shape lpp->shapes
              (dbCopyShape shape cv)
              ))
          (dbClose src_cv)
          )))
    
    (defun cst_get_size (lib cell view)
      "Return appropriate thumbnail size for LIB/CELL/VIEW"
      (letseq ( (cv        (dbOpenCellViewByType lib cell view))
                (view_type (ddMapGetFileViewType (ddGetObj lib cell view "*")))
                (scale     (case view_type
                             ( ("schematic" "schematicSymbol") 150. )
                             ( "maskLayout"                     15. )
                             ( t                                15. )
                             ))
                )
        (unwindProtect
          (destructuringBind ((x0 y0) (x1 y1)) cv->bBox
            (list (ceiling (x1-x0)*scale) (ceiling (y1-y0)*scale))
            )
          (dbClose cv))))
    
    (defun cst_generate_icon (lib cell view file "tttt")
      "Generate thumbnail icon for LIB/CELL/VIEW"
      (let ( (view_type (ddMapGetFileViewType (ddGetObj lib cell view "*"))) )
        (case view_type
          ;; Generate thumbnail for schematics and layout views
          ( ("schematic" "maskLayout") (hiGenerateThumbnails ?lib lib ?cell cell ?view view ?filePath file ?sizes (list (cst_get_size lib cell view))) )
          ;; For symbol, generate a temporary schematic view and extract its thumbnail
          ( "schematicSymbol"
            (assert (not (ddGetObj lib cell "schematic_symbol"))
              "%A/%A/%A exists already!" lib cell "schematic_symbol")
            (let ((cv (dbOpenCellViewByType lib cell "schematic_symbol" "schematic" "w")))
              (unwindProtect
                (progn
                  (cst_copy_to_cv lib cell view cv)
                  (dbSave  cv)
                  (dbClose cv)
                  (cst_generate_icon lib cell "schematic_symbol" file)
                  )
                (ddDeleteObj (ddGetObj lib cell "schematic_symbol"))
                )))
          ;; Other cases are not supported
          ( t (error "Unsupported view type: %A" view_type) )
          )))
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to AurelBuche

    In IC23.1 there's also schExportSVG() - not on a menu yet, but the SKILL API exists.

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bforejtAtTI
    bforejtAtTI over 1 year ago in reply to Andrew Beckett

    I tried the function (in 23.1) on a simple schematic and when I try to view the image it isn't very readable when I use the default settings:.

    Ideally I would like to see it with a black background and the usual colors.  Is that possible?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bforejtAtTI
    bforejtAtTI over 1 year ago in reply to bforejtAtTI

    So I tried all the options and tried different ways of viewing the test.svg file and it turns out that if I view it in firefox, it looks exactly as I had hoped!

    Symbol:

    And Schematic:

    This will work for this application.  Thank you!

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bforejtAtTI
    bforejtAtTI over 1 year ago in reply to bforejtAtTI

    Upon closer inspection I found what I think is a bug with the function. It seems to do a great job of converting the schematic but seems to ignore layer visibility.  In this case, there are multiple copies of the labels for the transistor that are on different layer purpose pairs.  In our schematics, only one of these LPP sets are visible at any given time so the schematic is readable.  However, in this case the new plot function shows ALL LPP even if they have been made invisible:

    Can we make the function obey the LPP visibility property?

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 1 year ago in reply to bforejtAtTI

    It's not necessarily a bug (I can see a benefit in outputting layers regardless of the current visibility), but I can also see a need for what you are trying to do. I filed a change request, #2977529 asking for a way to honour the visibility. You might want to contact customer support and ask for a duplicate to be filed on your behalf as customer requests tend to get higher priority.

    Regards,

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • bforejtAtTI
    bforejtAtTI over 1 year ago in reply to Andrew Beckett

    Great!  I've also asked our support team to raise this as a request.

    • 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