Quantcast
Channel: Cadence PCB Skill Forum
Viewing all 2171 articles
Browse latest View live

Examining Soldermask pads and Symbol Soldermask definitions.

$
0
0

No Venture license for Advanced DFx checking -  So, as a novice at SKILL I am writing a Soldermask check to look for padstacks that have inaccurate mask openings. I am further trying to see if "tented" padstack definitions are cleared by Symbol shape definitions on the mask layer(s) within the Symbol. However I am having trouble as I loop through each symbol pin - how do I find out if it has a mask shape above or below it?  I see the axlGeoPointInShape command, but I first have to get the shape.  I have gone through manuals, examples and publicly released code but my efforts have failed me.  What i've done so far isnt pretty but it works for the most part.... I'm doing testing with Place Bounds as a shape because I know all symbols have them, but I also know I am going at it wrong. Any help would be greatly appreciated. Thanks in Advance!

Bill

axlClearSelSet()
vis_list = axlVisibleGet()
axlVisibleDesign(nil)
axlVisibleLayer("PIN/TOP" t)
axlSetFindFilter(?enabled list("noall" "pins")
?onButtons list("noall" "pins"))
axlAddSelectAll()
pselect_list = axlGetSelSet()
axlClearSelSet()
axlVisibleSet(vis_list)

foreach(pin_db pselect_list
unless(pin_db->isMech ;must be doing it wrong - Mechanical pins still getting through
if(pin_db->isThrough
then
symbol_dbid = pin_db->parent
symbol_name = axlDbidName(symbol_dbid )
IsShape = pin_db->objType
shape_layer = pin_db->layer
if( equal(IsShape "shape") then
if( equal(shape_layer "PACKAGE GEOMETRY/PLACE_BOUND_TOP") then
println( "has a shape" )
);endif
);endif
location = pin_db->xy
tsm_pad = axlDBGetPad(pin_db "pin/soldermask_top" "regular")
cur_box = tsm_pad->bBox
tsm_box = tsm_pad->bBox
ComputeBBoxHeight( )
top_pad = axlDBGetPad(pin_db "etch/top" "regular")
cur_box = top_pad->bBox
top_box = top_pad->bBox
ComputeBBoxHeight( )
if(tsm_box == top_box
then
top_mask_same = "true"
else
println( symbol_name ); <-testing
println( shape_layer ); <- testing
);endif
bot_pad = axlDBGetPad(pin_db "etch/bottom" "regular")
cur_box = bot_pad->bBox
bot_box = bot_pad->bBox
ComputeBBoxHeight( )
bsm_pad = axlDBGetPad(pin_db "pin/soldermask_bottom" "regular")
cur_box = bsm_pad->bBox
bsm_box = bsm_pad->bBox
ComputeBBoxHeight( )
if(bsm_box == bot_box
then
bot_mask_same = "true"
else
println( location )
);endif
else
pin_type = "smd"
);endif
);unless
);foreach
);

procedure( ComputeBBoxHeight( )
bBox = cur_box
ll = car( bBox )
ur = cadr( bBox )
lly = yCoord( ll )
ury = yCoord( ur )
ury - lly

) ;procedure


How can I perform auto format Cadence Skill, such as indent, align...

$
0
0

The official tools 'SKILL IDE' do not have this feature.

Sometimes my 1st edtion skill source code's format looks like a mess and it will take me a long time to do the code format work like indent,align ...

So my question :

Is there any plugins OR ways to do auto format Cadence Skill source code?

THX!

change radiobutton text dynamically

$
0
0

Hi

I'm currently working on a form where I would like to be able to change the radiobutton (Checklist) text dynamically.

Example. 3 radiobutton choices

- 1.0

- 2.0

- 3.0

If I then select 3.0 it should change to show

- 2.0

- 3.0

- 4.0

I've not found a way to do this, is it even possible?

Best regards

Ole

Warnings with axlSetFindFilter(?onButtons '("BONDSMART" "DYNTHEMALS" "INVISIBLE"))

$
0
0

Using 17.2S051.

I've adjusted the Find Filter many times but not seen this issue before. I'm not sure what I'm doing wrong but clearly something is borked.

I'm saving the Find Filter at the start of my program and then restoring it at the end. Typical stuff. But in this program I see the following in the console:

*WARNING* (axlSetFindFilter): Options are ignored for onButtons - "BONDSMART"
*WARNING* (axlSetFindFilter): Options are ignored for onButtons - "DYNTHEMALS"
*WARNING* (axlSetFindFilter): Options are ignored for onButtons - "INVISIBLE"

I'm using the typical method:

procedure(<function name>(<parameter(s)>)
let((...)
; save find filter
lt_enabled = axlGetFindFilter(t)
lt_onButtons = axlGetFindFilter(nil)

; allowing selecting only text; adding "invisible" applies for all layers so the entire board is updated
axlSetFindFilter(?enabled list("noall" "invisible" "text") ?onButtons list("noall" "text"))
;axlMsgPut("%L" lt_enabled)
;axlMsgPut("%L" lt_onButtons)

<do stuff...>

axlSetFindFilter(?enabled lt_enabled ?onButtons lt_onButtons) ; restore find filter

<return value>
)
)

I can see that the lt_onButtons variable in the function above contains the three offending values in addition to "SYMBOLS". Those items aren't in the UI so I'm not sure why they're being returned to me. Even moreso because I always get back those four items in a list, regardless of how I configure the Find Filter before running my function. Even if I uncheck all items in the Find Filter I still get those four elements returned to me. I do see only "Text enabled and checked so that part works, it's only the restoration of the Find Filter that is a problem (it is not restored now and stays with only "Text" enabled and checked).

While I could use member(), or one if it's related functions, to strip out the problematic list elements that's hacky and not future-proof. I don't get why lt_onButtons returns elements that have no checkbox.

I can run different functions I've written on the same board and only this function results in the warnings above so I'm quite sure it's me and I'm just not seeing my own problem. Other functions where I've adjusted the Find Filter do not give any warnings and, as far as I can see, properly restore the Find Filter settings. Oddly, I see "nil" for both lt_enabled and lt_onButtons when I print them to the console using axlMsgPut() in working functions but the Find Filter is properly restored so I've done it right (I guess?).

Other board files have exactly the same behavior, where this one function is giving me the same returned list regardless of Find Filter settings while the other functions work fine and return nil as mentioned above. So I don't think it has anything to do with the board file.

Any ideas what I'm doing wrong?

How do I get a pad geometry?

$
0
0

Hi all,

I need to check if a pin padstack has the geometry "oblong" by the pin dbid. Is there a short cut to do this?

These are surface mount pins.

Thanks,

Jerry

Cut Segment

$
0
0

Hi Guys,

I am trying to develop a script to cut the segment 2mm apart, center of the line selected by user.

but i not sure how to create script that can cut multiple segment without re-run the script.

Here is my content, hope to get some input from you.=)

axlCmdRegister( "millin2g" `cutsegment ?cmdType "general")


(defun cutsegment ()
line_ya = 0
line_yb = 0
line_xa = 0
line_xb = 0
loop = t
gap = 2



while( loop

axlClearSelSet()
axlSetFindFilter( ?enabled (list "noall" "linesegs") ?onButtons (list "alltypes"))
axlSelect()
line = car(axlGetSelSet())
line_type = line->lineType

if(line_type == nil then

axlUIWPrint(nil "Please select line" )
axlClearSelSet()
axlShell("done")
loop = t

else
line_center = axlMidPointLine(list(car(line->startEnd) car(cdr(line->startEnd))))
case( strcat(line_type)
("horizontal" ;y is same from point xa to xb
line_xa = car(axlMidPointLine(line->startEnd))- gap
line_xb = car(axlMidPointLine(line->startEnd))+ gap
line_ya = car(cdr(line_center))
line_yb = line_ya

axlShell("done")
axlClearSelSet()
_cut(line_xa line_ya line_xb line_yb)
loop = nil
)
("vertical" ;x is same from point ya to yb
line_xa = car(line_center)
line_xb = line_xa
line_ya = car(cdr(axlMidPointLine(line->startEnd)))- gap
line_yb = car(cdr(axlMidPointLine(line->startEnd)))+ gap

axlShell("done")
axlClearSelSet()
_cut(line_xa line_ya line_xb line_yb)
loop = nil
)
)
)
)
)

Eugene

PAD on VIA.

$
0
0

I am new to skill can you help me. I want to highlight the pad where the via in the pad. Can you share me the skill code

How can I use the skill code to save flash symbol or shape symbol?

$
0
0

Hi all;

I have completed a skil file to create the flash symbol and shape symbol ,but I could not found a way to save them to disk.

Is there a way to save them?


Check air gap between pad to pad

$
0
0

I want to check the air gap between pad to pad  the mil value get run time by user  For example : if the user declare 6 mil  means lesser then 6 mil air gap pad  want to highlight. can you share me the skill code please..

Copy mousebite to multiple cavity.

$
0
0

Hi Guys,

I try to duplicate mousebit from original board to other cavity.

 Currently using

- axlCopyObject() and axlDBCloak() but the result is very time consuming.

Aay advice?

Regards,

Eugene

Stacked via delete

$
0
0

hai,

I want to write a Skill code  stacked via delete  i used a skill code older posted in cadence site but i comes a *Error* axlGeoPointsEqual: too few arguments (2 expected, 1 given) - (Via)

I will attach the code below any one re correct the code send me back please.

axlCmdRegister("bbvias" 'RBG_replace_via_list ?cmdType "INTERACTIVE" )
defun( RBG_replace_via_list ( @optional v_ps )
prog( list(via_file l_loc t_padstk)
mypopup = axlUIPopupDefine( nil (list (list "Done" `dvl_Done)))
axlUIPopupSet( mypopup)

unless(v_ps
via_file = axlDMFileBrowse("ALLEGRO_TEXT" nil)
if(isFile(via_file) then
via_data = axlDMOpenFile("ALLEGRO_TEXT" via_file "r")

when(via_data
axlSetFindFilter(?enabled '(noall vias) ?onButtons '(vias))
while(l_via = lineread(via_data)
l_loc=nth(0 l_via)
axlClearSelSet()
axlSetFindFilter(?enabled list("noall", "vias", "invisible"), ?onButtons list("noall", "vias"))
axlAddSelectAll()
axlDeleteObject(setof(via, axlGetSelSet(), axlGeoPointsEqual(l_loc) && car(via ->startEnd) == "ETCH/TOP" && cadr(via ->startEnd) == "ETCH/L2"))

);end while
);end when
);end if
);end unless
);end prog


);end defun

SHAPE ORIGIN TO ARC

$
0
0

I want to write an skill code for converting shape edge to arc by clicking. That convertion of arc cannot  be whole presented shape in the board . The selected Shape edge only want to convert an ARC so please if anybody knows please share me the skill code.

Via count

$
0
0

I want to write a skill code for stacked via count . The count value will get by user manually For example: The user enters a value '6' means more than 6 present via's  that location of via need to be display. Iam new to skill can you share me the skill code.

command line editors of CIW,skill and telskill are difficult to use.

$
0
0

i can not use backspace, or edit anything correctly.

this is spb-16.6. did not install any hotfix yet.

maybe i should?

Function for Zipping/Compressing files

$
0
0

Hi Team,

Is there any inbuilt function available in skill so that some files can be zipped or compressed?

Thanks,

Sanjeev


need your help on Highlight the error location in report.

$
0
0

Dear All,
I am a CAD Librarian, wishes to learn skill programming to check the footprint parameters, like line width and package height, and design unit.  for the first attempt, I started to code for checking line width of assembly outline, and also need to report an error in case of line width not as per standard. code inserted below, To enhance this code if in case of a width not as per standard it supposed to report error location.

axlCmdRegister("assycheck" 'asscheck)
defun( asscheck ()
let((allLines, ends)
l_tmp = axlDBGetDesignUnits()
unit = nth(0 l_tmp)
;printf("Units are in %L\n", unit)
axlVisibleDesign(nil)
axlVisibleLayer("PACKAGE GEOMETRY/ASSEMBLY_TOP" t)
axlSetFindFilter(?enabled list("noall" "Lines") ?onButtons list("noall" "Lines"))
allLines = axlGetSelSet(axlAddSelectAll())
axlClearSelSet()
i_tmp = list()
p = axlDMOpenLog("REPORT")
    
    foreach(line, allLines
        foreach(segment, line ->segments
            ends = segment ->width

            if(unit == "millimeters" && ends != 0.0254 then
                i_tmp = cons(end i_tmp)
            )
            if(unit == "mils" && ends != 1.00 then
                i_tmp = cons(end i_tmp)
            )
        );end foreach segment
    );end foreach line
        
        if(length(i_tmp) == 0 then
            fprintf(p, "Units are in %L\n\n", unit)
            fprintf(p, "ASSEMBLY LINE WIDTH IS OK\n", end)
        )
        if(length(i_tmp) > 0 then
            ;printf("ERRORS\n", end)
            fprintf(p, "Units are in %L\n\n", unit)
            fprintf(p, "ERROR:ALL ASSEMBLY LINE WIDTH ARE NOT AS PER STANDARD.\n\n", end)
        )

    axlDMClose(p)
    axlUIViewFileCreate("REPORT.log" sprintf(nil, "REPORT", end), nil)
);end let
axlVisibleDesign(t)
axlMsgPut("Checking completed.See Report.")
);end defun

Thanks in advance

Regards,

Ragavan Thangaraj

CAD Libararian

Encrypting And Decrypting a .il file

$
0
0

Hai,

1.I want to encrypt my .il file after encoded i want to run that file i used this code it shown below

(axlCmdRegister "myencrypt" 'myencrypt)
(defun myencrypt ()
(let (file fileparts filepartsFile fileEncParts)
  file = axlDMFileBrowse(nil nil ?optFilters "Skill files (*.il)|*.il|)" ?title "Select Skill file to Encrypt")
  (when file
    (unless (isDir "./encrypt")
       (createDir "./encrypt")
    )
    fileparts = (axlDMFileParts file)
    filepartsFile = (cadr fileparts)
    fileEncParts = (strcat "./encrypt/" filepartsFile "-enc.ile")
    (encrypt file fileEncParts "eUnLock")
  )
))

It shows : E- *Error* load: password required for reading file

I don't know how to run it any one help me please.

2.After the convertion of .il to .ile how to decrypt the .ile file.

I am new to skill any one help me please/

ADD .ile in menubar

$
0
0

Hai,

How to add the .ile file in allegro menu bar if any one knows please help me.

Generate Report For Refdes, Part number, Manufacturer.

$
0
0

Hai,

I want to generate a report Refdes, Partnumber, Manufacturer  please share me the skill code iam new to skill.

how can load the Dll files and use it?

$
0
0

Hi all

I had tried to use dll files ,but I can only load dll file is the example file named "axlecho_plugin.dll", and the others dll files I  created can't be load ,

this is the codes:

dll_name="dllcreate"

testDll=axlDllOpen(dll_name)

when run over this function ,awlayw return nil except dll_name="axlecho_plugin".

but all Dll files are the same path.and No waring and Error when create the dll files.

what wrong with it ? and how can i do to void this issue, thanks !

Viewing all 2171 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>