• 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. defstruct issue

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 143
  • Views 14553
  • 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

defstruct issue

balu soutani
balu soutani over 10 years ago

Hi ,

I use defstruct to define a variable

defstruct(var1 label msg)

If I Recall The Function Its Giving Warning

*WARNING* defstruct: Redefining Structure var1.

I will give u a simple example script:

Input File (test.txt):

M2 width=0.34um length=0.5um
M3 width=0.34um length=0.5um

script:

procedure(mytest(fileName)
      prog( ()
          inFile = infile(fileName)
          defstruct(struct width length) ; giving warning here
          setq(tabel (makeTable 'layers 0))
          while(gets(line inFile)
              lineInList = parseString(line " \n")
              tabel[nth(0 lineInList)] = make_struct(?width nth(1 parseString(nth(1 lineInList) "=")) ?length nth(1 parseString(nth(2 lineInList) "=")))
               )
          )
     )
mytest("./test.txt")

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 10 years ago

    defstruct does not create a local variable - it is defining a global structure type - when you create an instance of it using make_XXX then that can be local.

    So there is no point putting the defstruct inside the procedure - if you do so, each time the function is called, it will redefine the structure and give a warning as you're seeing. So put it outside the procedure definition.

    I would also advise giving it a more meaningful and unique name than "struct". Given that it's in the global name space, anyone who uses defstruct(struct ...) will be clobbering the same structure name, and redefining make_struct() etc.

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • balu soutani
    balu soutani over 10 years ago

    Why defstruct giving error when i use like this

    defstruct(stringToSymbol("test_structure") a b c)

    First argument to the defstruct is symbol and i am also giving the same.

    Is there any other to do like this.

    Thanks,

    Balu Soutani.

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

    This is because the first argument to defstruct is not evaluated. It's actually implemented as a macro - and this is because it's part of the language syntax and so you don't really want to have to quote the name of the structure to avoid it being evaluated (otherwise if it was a normal function, you'd have to do defstruct('structName 'field1 'field2 'field3) which would be clunky.

    So the first argument isn't evaluated (nor are the others) and so expecting it to be the result of stringToSymbol isn't going to work.

    I have no idea why you'd want to do that anyway - it seems a bit odd. Why not just do:

    defstruct(test_structure a b c)

    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