• 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. analysis

Stats

  • Locked Locked
  • Replies 29
  • Subscribers 129
  • Views 23522
  • 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

analysis

yeong
yeong over 12 years ago
hello
  • Cancel
  • yeong
    yeong over 12 years ago

    Thanks Andrew, it works perfectly.

     I'm also interested to list all the variable corner temp iled i differential_psrr in a list and fprint them

     variable=list(
    corner
    temp
    i
    )

    foreach(val variable
    fprintf(out "%g\t"  val)

    )

    error mgs:
    Error fprintf/sprintf: format spec. incompatible with data -40

    Corner is a string, temp is decimal, and i is a floating number, how can i lump different outout togther?

    y 

     

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    How about:

    foreach(val variable
      fprintf(out if(numberp(val) "%N\t" "%s\t") val)
    )

    Regards,

    Andrew.

     

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • yeong
    yeong over 12 years ago

    What is %N use for?

    foreach(val variable
      fprintf(out if(numberp(val) "%N\t" "%s\t") val)
    )

     that return: synatx error encountered in input

    i tried using:

     foreach(val variable

      fprintf(out if(numberp(val) "%g\t%s\t") val)
    )

     and that return: type template = "ptg" 

    y 

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    I'm not sure what you did incorrectly, because the first form is entirely correct and valid for as long as I can remember in SKILL. I just cut and paste it, and it worked fine. For example:

    variable='("hello" 4.2 27)
    out=stdout
    foreach(val variable
      fprintf(out if(numberp(val) "%N\t" "%s\t") val)
    )

    this worked perfectly. The "%N" (as covered in the documentation for fprintf/printf) is for displaying any kind of number (float or integer). What the code above does is either use %N or %s as the format depending on whether it's a number or not.

    Your second code won't work because it either gives a format which has two format strings, but only one argument, or it returns nil (if not a number) which will give the type template error.

    Kind Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • yeong
    yeong over 12 years ago

    The script works fine after i tweak the variable values to be all float number. and use %g instead of %N.

    Does it have to do with the version? I'm using version 5.1.0 

    I tried the example in CIW,

    variable='("hello" 4.2 27)
    out=stdout
    foreach(val variable
      fprintf(out if(numberp(val) "%N\t" "%s\t") val)

    ) 

    Here's the output

    ("hello" 4.2 27)
    port:"*stdout*"
    hello
    *Error*  fprintf/sprintf: illegal format spec. -"%N\t"

     A bit of tweaking :

    variable='("hello" 4.2 2.7)
    out=stdout
    foreach(val variable
      fprintf(out if(numberp(val) "%g\t" "%s\t") val)

    )  

     output as below

    ("hello" 4.2 27)
    port:"*stdout*"
    hello 4.2 2.7
    ("hello" 4.2 2.7)

    y

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    Sorry, my mistake. It was "%n" that has been there for years, not "%N". %N uses a more compact notation. So you can either change the %N to %n, or use this code instead:

    foreach(val variable
      fprintf(out "%s\t" if(numberp(val) aelEngNotation(val) val))
    )

    Depending on which looks the nicest to you!

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • yeong
    yeong over 12 years ago

    Thanks andrew.

    It works well now.

    y 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • yeong
    yeong over 12 years ago

    Hello Andrew,

     When using  foreach(val variable

      fprintf(out if(numberp(val) "%n\t" "%s\t") val)

    )

     can i increase the number resolution?

    There is output but it came out as 0.0000, the value i'm expecting is 2e-9 (for example) 

     y 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    The %n sequence means "use %d if an integer, or %f if a floating point number". In IC615 you can use %N which means "use %d if an integer, or %g if a floating point number". So %N would do what you want; similarly if you know the value is a flonum, you can just use %g. Or if you always want it in exponential format, you could use %e.

    Regards,

    Andrew.

    • 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