• 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. PCB Design
  3. Controlling fillet parameters at site level

Stats

  • Locked Locked
  • Replies 8
  • Subscribers 165
  • Views 15508
  • Members are here 0
More Content
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

Controlling fillet parameters at site level

EvanShultz
EvanShultz over 10 years ago

I want to control the fillet parameters for all users at my site. Unfortunately, it seems there no way to do what using site.env (so says Cadence).

A script running on start-up is a bit lame, and may have a graphical impact to users that I want to avoid.

Which brings us to SKILL! SPB166 QIR 4 release (hotfix 016) introduces the ability to adjust fillet parameters with axlGetParam/axlSetParam. (See 

<CDSROOT>\share\pcb\examples\skill\DOC\QIR\NEW\axlParamFilletDoc.txt.)

Since I want this to apply to all users, I should trigger this on Allegro being invoked. Below is my initial attempt in allegro.ilinit:

procedure(qscOpenTrig(t_database g_existing)

                let((filletParams)

                                filletParams = axlGetParam("fillet")

                                ;change filletParams as desired

  axlSetParam(filletParams)

                )

)

 

axlTriggerSet('open 'qscOpenTrig) ; trigger QSC custom fillet parameters

I have two problems:

1. I've used the 'menu trigger option with success, but I'm not seeing any response in this trigger. Even if I print a debug message to the console or something else, I see no effect. I didn't expect to have issues with this trigger, but maybe something is wrong. Does anyone know why this trigger isn't being executed?

2. Is anybody else trying to adjust fillet parameters? Is there a better way?

  • Cancel
  • eDave
    eDave over 10 years ago

    I do this but as part of my design setup utility - not in a trigger function.

    I'm not entirely surprised that using a trigger for this doesn't work as trigger functions have several restrictions. 

    This is a snippet of the code I use:

    p = axlGetParam("fillet")
    if(p then
    defaults = '(nil)
    defaults ->dynamic = t
    defaults ->curved = nil; Curved should only be used for flex circuit filleting purposes - not for hole breakouts.
    defaults ->allowDRC = t

    ...

    axlSetParam(p)

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • EvanShultz
    EvanShultz over 10 years ago

    Hi Dave,

    Thanks for the reply and the code.

    How do you deal with "non-conformant" users? It appears the user needs to launch your function? I wanted a solution that would force itself onto all users and affect all users at my site.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • eDave
    eDave over 10 years ago

    Hi Evan,

    My release process has an auto-generated check sheet. I check for such things (and report them) at that time. In the case of critical problems users are restricted from releasing outputs.

    In your case I would persevere with the trigger function. I too use it quite heavily but haven't experienced the problem described.

    Dave

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • eDave
    eDave over 10 years ago

    I just tested setting fillet parameters in my open trigger and it works fine. Here's what I used:

    p = axlGetParam("fillet")
    if(p then
    defaults = '(nil)
    defaults ->dynamic = t
    defaults ->curved = nil; Curved should only be used for flex circuit filleting purposes - not for hole breakouts.
    defaults ->allowDRC = t
    defaults ->round = t
    defaults ->sizeRound = list(axlMKSConvert(2.5 "mm"), axlMKSConvert(2.54 "mm")); min, preferred
    defaults ->pin = defaults ->via = t
    defaults ->viaDesiredAngle = defaults ->pinDesiredAngle = 90
    defaults ->viaMaxAngle = defaults ->pinMaxAngle = 90
    defaults ->viaMaxOffset = defaults ->pinMaxOffset = list(axlMKSConvert(0.6 "mm"), axlMKSConvert(0.635 "mm")); min, preferred
    defaults ->viaMinLineWidth = defaults ->pinMinLineWidth = 0.0
    defaults ->viaMaxLineWidth = defaults ->pinMaxLineWidth = list(axlMKSConvert(0.19 "mm"), axlMKSConvert(0.2 "mm")); min, preferred
    p ->dynamic = axlUIYesNo("Do you want to set fillets to be dynamic and re-create all fillets now?")
    p ->curved = defaults ->curved
    p ->allowDRC = defaults ->allowDRC
    p ->round = defaults ->round
    p ->sizeRound = cadr(defaults ->sizeRound)
    p ->pin = defaults ->pin
    p ->via = defaults ->via
    p ->viaDesiredAngle = defaults ->viaDesiredAngle
    p ->pinDesiredAngle = defaults ->pinDesiredAngle
    p ->viaMaxAngle = defaults ->viaMaxAngle
    p ->pinMaxAngle = defaults ->pinMaxAngle
    p ->viaMaxOffset = cadr(defaults ->viaMaxOffset)
    p ->pinMaxOffset = cadr(defaults ->pinMaxOffset)
    p ->viaMinLineWidth = defaults ->viaMinLineWidth
    p ->pinMinLineWidth = defaults ->pinMinLineWidth
    p ->viaMaxLineWidth = cadr(defaults ->viaMaxLineWidth)
    p ->pinMaxLineWidth = cadr(defaults ->pinMaxLineWidth)
    axlSetParam(p)
    )

    I only used the defaults variable to enable easier checking of the values that were set.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • EvanShultz
    EvanShultz over 10 years ago

    Thanks Dave!

    I was going to post my final update before leaving for the day. Here's what I've got (with bogus test values), which also works:

    procedure(qscOpenTrig(t_open)
    let((filletParams)
    filletParams = axlGetParam("fillet")

    when(filletParams
    filletParams->dynamic = nil
    filletParams->taperAngle = 77
    filletParams->tMaxAngle = 69
    axlSetParam(filletParams)
    ;axlSaveDesign()
    )
    )
    )

    axlTriggerSet('open 'qscOpenTrig) ; trigger when Allegro is opened

    It seems my issue was expecting a pair of arguments to be passed to the function, when in fact there's only a single one (t_open).

    I get a crash when adding axlSaveDesign() (it's commented out now), but that shouldn't be too hard to fix tomorrow.

    Finally, there's a noticeable delay from running axlSetParam(), but I assume there's no way around that since the DB is being updated.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
>
Cadence Guidelines

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