• 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 Design
  3. drawing/logo in a schematic view

Stats

  • Locked Locked
  • Replies 9
  • Subscribers 127
  • Views 8571
  • 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

drawing/logo in a schematic view

Aldo2
Aldo2 over 13 years ago

Hello,

is there a way to import/generate a drawing/logo in a schematic view?

Thank you

Aldo 

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

    Hi Dan,

    Thanks for the feedback. Unfortunately I didn't spend a lot of time trying to make the parser really robust (in other words I used empirical examples rather than trying to find the XPM specification and ensure that I was fully compliant). The dangers of pragmatism over completeness!

    In terms of answering your questions:

    1. You could probably use device/drawing1 - this is normally solid green. Also pin drawing (solid red).
    2. You could use dbCreateXformPCell() which will create you a pcell with a mag parameter to emulate the old CDB mag. Of course, you'll still have a pixellated image - but may be more convenient? For another customer a few years ago I ended up hand converting their SVG logo into a pcell, using a bunch of utility functions to create cubic bezier curves. That allowed me to have a scalable vector logo pcell. I'll post the cubic bezier code below - not sure this really helps you here though!
    /* abCubicBezier.il
    
    Author     A.D.Beckett
    Group      Custom IC (UK), Cadence Design Systems Ltd.
    Language   SKILL
    Date       Nov 29, 2006 
    Modified   
    By         
    
    Code to generate cubic bezier curves
    
    Examples:
    
    abPlotBezier(600:500 900:500 600:350 900:650 "y0")
    abPlotBezier(600:200 900:200 675:100 975:100 "y0")
    abPlotBezier(100:200 400:200 100:100 400:100 "y0")
    abPlotBezier(100:500 400:500 25:400 475:400 "y0")
    
    ***************************************************
    
    SCCS Info: @(#) abCubicBezier.il 11/29/06.17:23:32 1.1
    
    */
    
    /****************************************************************
    *                                                               *
    *                 abPointOnCubicBezier (cp tp)                  *
    *                                                               *
    *                cp is a 4 element array where:                 *
    *    cp[0] is the starting point, or P0 in the above diagram    *
    * cp[1] is the first control point, or P1 in the above diagram  *
    * cp[2] is the second control point, or P2 in the above diagram *
    *      cp[3] is the end point, or P3 in the above diagram       *
    *            tp is the parameter value, 0 <= tp <= 1            *
    *                                                               *
    ****************************************************************/
    
    defun(abPointOnCubicBezier (cp tp)
    let((ax bx cx ay by cy tSquared tCubed)
    
        ;--------------------------------------------------------------------
        ; calculate the polynomial coefficients
        ;--------------------------------------------------------------------
        cx = 3.0 * (xCoord(cp[1]) - xCoord(cp[0]))
        bx = 3.0 * (xCoord(cp[2]) - xCoord(cp[1])) - cx
        ax = xCoord(cp[3]) - xCoord(cp[0]) - cx - bx
            
        cy = 3.0 * (yCoord(cp[1]) - yCoord(cp[0]))
        by = 3.0 * (yCoord(cp[2]) - yCoord(cp[1])) - cy
        ay = yCoord(cp[3]) - yCoord(cp[0]) - cy - by
            
        ;--------------------------------------------------------------------
        ; calculate the curve point at parameter value tp
        ;--------------------------------------------------------------------
        tSquared = tp * tp
        tCubed = tSquared * tp
            
        ;--------------------------------------------------------------------
        ; The result
        ;--------------------------------------------------------------------
        (ax * tCubed) + (bx * tSquared) + (cx * tp) + xCoord(cp[0]):
        (ay * tCubed) + (by * tSquared) + (cy * tp) + yCoord(cp[0])
    
        ) 
    ) ; defun
    
    /***************************************************************
    *                                                              *
    *             abComputeBezier (cp numberOfPoints)              *
    *                                                              *
    *                   returns a list of points                   *
    *            generated from the control points cp.             *
    *                                                              *
    ***************************************************************/
    
    defun(abComputeBezier (cp numberOfPoints) 
    let((dt result)
    
        dt = 1.0 / ( numberOfPoints - 1 )
    
        for(i 0 sub1(numberOfPoints)
            result=tconc(result abPointOnCubicBezier(cp i*dt))
        ) ; for
        car(result)
    ))
    
    /***************************************************************
    *                                                              *
    *          abPlotBezier (from to p1 p2 layerName @key          *
    *       (numPoints 200) (cellView (geGetEditCellView)))        *
    *                                                              *
    *     Example function to plot a line from the calculated      *
    *                           points.                            *
    *                                                              *
    ***************************************************************/
    
    defun(abPlotBezier (from to p1 p2 layerName @key 
        (numPoints 200) (cellView (geGetEditCellView)))
    let((cp pointList)
    
        declare(cp[4])
    
        ;--------------------------------------------------------------------
        ; Put coefficients in an array
        ;--------------------------------------------------------------------
        cp[0]=from
        cp[3]=to
        cp[1]=p1
        cp[2]=p2
    
        pointList=abComputeBezier(cp numPoints)
        dbCreateLine(cellView layerName pointList)
    ))
    
    

    Regards,

    Andrew.

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

    Hi Dan,

    Thanks for the feedback. Unfortunately I didn't spend a lot of time trying to make the parser really robust (in other words I used empirical examples rather than trying to find the XPM specification and ensure that I was fully compliant). The dangers of pragmatism over completeness!

    In terms of answering your questions:

    1. You could probably use device/drawing1 - this is normally solid green. Also pin drawing (solid red).
    2. You could use dbCreateXformPCell() which will create you a pcell with a mag parameter to emulate the old CDB mag. Of course, you'll still have a pixellated image - but may be more convenient? For another customer a few years ago I ended up hand converting their SVG logo into a pcell, using a bunch of utility functions to create cubic bezier curves. That allowed me to have a scalable vector logo pcell. I'll post the cubic bezier code below - not sure this really helps you here though!
    /* abCubicBezier.il
    
    Author     A.D.Beckett
    Group      Custom IC (UK), Cadence Design Systems Ltd.
    Language   SKILL
    Date       Nov 29, 2006 
    Modified   
    By         
    
    Code to generate cubic bezier curves
    
    Examples:
    
    abPlotBezier(600:500 900:500 600:350 900:650 "y0")
    abPlotBezier(600:200 900:200 675:100 975:100 "y0")
    abPlotBezier(100:200 400:200 100:100 400:100 "y0")
    abPlotBezier(100:500 400:500 25:400 475:400 "y0")
    
    ***************************************************
    
    SCCS Info: @(#) abCubicBezier.il 11/29/06.17:23:32 1.1
    
    */
    
    /****************************************************************
    *                                                               *
    *                 abPointOnCubicBezier (cp tp)                  *
    *                                                               *
    *                cp is a 4 element array where:                 *
    *    cp[0] is the starting point, or P0 in the above diagram    *
    * cp[1] is the first control point, or P1 in the above diagram  *
    * cp[2] is the second control point, or P2 in the above diagram *
    *      cp[3] is the end point, or P3 in the above diagram       *
    *            tp is the parameter value, 0 <= tp <= 1            *
    *                                                               *
    ****************************************************************/
    
    defun(abPointOnCubicBezier (cp tp)
    let((ax bx cx ay by cy tSquared tCubed)
    
        ;--------------------------------------------------------------------
        ; calculate the polynomial coefficients
        ;--------------------------------------------------------------------
        cx = 3.0 * (xCoord(cp[1]) - xCoord(cp[0]))
        bx = 3.0 * (xCoord(cp[2]) - xCoord(cp[1])) - cx
        ax = xCoord(cp[3]) - xCoord(cp[0]) - cx - bx
            
        cy = 3.0 * (yCoord(cp[1]) - yCoord(cp[0]))
        by = 3.0 * (yCoord(cp[2]) - yCoord(cp[1])) - cy
        ay = yCoord(cp[3]) - yCoord(cp[0]) - cy - by
            
        ;--------------------------------------------------------------------
        ; calculate the curve point at parameter value tp
        ;--------------------------------------------------------------------
        tSquared = tp * tp
        tCubed = tSquared * tp
            
        ;--------------------------------------------------------------------
        ; The result
        ;--------------------------------------------------------------------
        (ax * tCubed) + (bx * tSquared) + (cx * tp) + xCoord(cp[0]):
        (ay * tCubed) + (by * tSquared) + (cy * tp) + yCoord(cp[0])
    
        ) 
    ) ; defun
    
    /***************************************************************
    *                                                              *
    *             abComputeBezier (cp numberOfPoints)              *
    *                                                              *
    *                   returns a list of points                   *
    *            generated from the control points cp.             *
    *                                                              *
    ***************************************************************/
    
    defun(abComputeBezier (cp numberOfPoints) 
    let((dt result)
    
        dt = 1.0 / ( numberOfPoints - 1 )
    
        for(i 0 sub1(numberOfPoints)
            result=tconc(result abPointOnCubicBezier(cp i*dt))
        ) ; for
        car(result)
    ))
    
    /***************************************************************
    *                                                              *
    *          abPlotBezier (from to p1 p2 layerName @key          *
    *       (numPoints 200) (cellView (geGetEditCellView)))        *
    *                                                              *
    *     Example function to plot a line from the calculated      *
    *                           points.                            *
    *                                                              *
    ***************************************************************/
    
    defun(abPlotBezier (from to p1 p2 layerName @key 
        (numPoints 200) (cellView (geGetEditCellView)))
    let((cp pointList)
    
        declare(cp[4])
    
        ;--------------------------------------------------------------------
        ; Put coefficients in an array
        ;--------------------------------------------------------------------
        cp[0]=from
        cp[3]=to
        cp[1]=p1
        cp[2]=p2
    
        pointList=abComputeBezier(cp numPoints)
        dbCreateLine(cellView layerName pointList)
    ))
    
    

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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