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

How to capture minimum spacing?

$
0
0

I need to find the absolute minimum spacing defined in the Constraint Manager. This includes the CSets and any number manually entered in the CM, Region rules, Class/Class, etc. 

I see the function axlCNSGetSpacing will retrieve the values of your various CSets, but smaller numbers can be manually entered (i.e. not defined by a CSet) or set manually under region or class/class rules. Is there a way to derive this rock-bottom spacing value?

I tried to get that info via axlCnsTableSeek, but it doesn't seem to work period. 

 

Thanks in advance,

Douglas Stanley 


generic questions on paths and objects they connect

$
0
0

 Question: is it valid to assume a path object will have these characteristics?

1.  path can connect to at most two non-path objects? Is there a case where a path could connect to three non-path objects?

2. path can ONLY connect to the following non-path objects:

    pin  via  shape tee shape

   Are there other non-path objects that a path can connect to?

 

3. What would be some ways to determine what non-path object is connected to a given endpoint of a path object? A simplistic approach would be to compare the ->xy of the endpoint with those non-path objects on the same branch - are there better ways?

 

Regards,

Chris Walters

rusty former Cadence guru

PCB Skill variable saved to Windows clipboard

$
0
0

I am currently running Allegro on a windows 7 machine.  Does anyone know of a way to save a skill variable to the windows clipboard?  thanks!

Detect interception between line and arc or arc and arc

$
0
0

Hi All, 

is there a function to detect any intersection between straight line and arc?

Given that both of the objects are Lines... 

the axl_ol_ol2 function is able to detect straight line and straight line intersection only. 

How to know current interactive status?

$
0
0

Hi every one,

In most cases axlOKToProceed can not use to check interactive command status.
e.g. 
Skill > axlEnterPoint()
Enter point
Skill > axlOKToProceed
t
last pick:  3706.29  4580.42
(3706.29 4580.42)
Skill >
Skill > axlSelect()
Enter selection point
Skill > axlOKToProceed()
t
last pick:  2610.72  4079.25
No Element Found.
Enter selection point
last pick:  547.78  4055.94
No Element Found.
Enter selection point
Skill > axlShell("done")
t
nil
Skill >
Does anyone know how to accurately check the status of the interactive command?

 Regards

 Betamelody

how to print a special character using skill?

$
0
0

I currently have met a problem with printing a special character using skill. ex: π.

pls help!!

axlSingleSelectPoint not accurately !

$
0
0

 Hi all!
   I'm writting a skill to check at start point & end point of a cline if pin exist or not, if pin exist and pin's netname ="dummy",
   then assign that cline to that pin. AND , if the coordinate is in the restrict area (box_xy) then do nothing. But I got the problem,
   when I put the code to get restrict area, the code still run but the function axlSingleSelectPoint not accurately, otherwise, it's ok.
   Who can show me where's wrong? and how can I fix it?.
   
..............


; =====Get box  xy, (default: leftdonwn- rightup)=====
box_xy = axlEnterBox(?prompts list("First rectangle point, please...", "Second rectangle point, please..."))
axlClearSelSet()
loc1_x = xCoord(car(box_xy))
loc1_y = yCoord(car(box_xy))
loc2_x = xCoord(cadr(box_xy))
loc2_y = yCoord(cadr(box_xy))

;=====process if user pick from any coner for making axlEnterBox()=====
if(loc1_x < loc2_x && loc1_y < loc2_y then
  box1x = loc1_x
  box1y = loc1_y
  box2x = loc2_x
  box2y = loc2_y
else
if(loc1_x < loc2_x && loc1_y > loc2_y then
  box1x = loc1_x
  box1y = loc2_y
  box2x = loc2_x
  box2y = loc1_y
else
if(loc1_x > loc2_x && loc1_y < loc2_y then
  box1x = loc2_x
  box1y = loc1_y
  box2x = loc1_x
  box2y = loc2_y
else
  box1x = loc2_x
  box1y = loc2_y
  box2x = loc1_x
  box2y = loc1_y
);enf if 1
);end if 2
);end if 3

;=====Prepare =====
axlSetFindFilter(?enabled '(noall pins) ?onButtons '(noall pins))
axlClearSelSet()
axlVisibleDesign(nil)
axlVisibleUpdate(t)
axlVisibleLayer("Pin/top" t)
axlUIWUpdate(nil)
axlClearSelSet()

;=====Main process=====
foreach(clines allWiresInDesign
netname = clines->net->name
if(stringp(netname) then
when(nindex(netname, "__")    
;=====get location xy at start cline & end cline=====
cline_seg = clines->segments            ;get all segment in a cline
first_seg = car(cline_seg)                ;get first segment
last_seg = car(last(cline_seg))            ;get last segment
first_seg_xy = car(first_seg->startEnd)
last_seg_xy = cadr(last_seg->startEnd)    

x1= xCoord(car(first_seg->startEnd))           
y1= yCoord(car(first_seg->startEnd))
x2= xCoord(lastelem(last_seg->startEnd))
y2= yCoord(lastelem(last_seg->startEnd))

;===CHECK LOCATION X1:Y1 IF PIN EXIST OR NOT=====
if(and(x1>box1x, x1<box2x, y1>box1y, y1<box2y) == nil then
pinselect = axlGetSelSet(axlSingleSelectPoint(x1:y1))
axlClearSelSet()
if( pinselect != nil then
pinselect = car(pinselect)
sym_name = pinselect->component->name
pin_net_name = pinselect->net->name
pin_number = pinselect->number
if(pin_net_name == "" then
  fprintf(writeOutFile, "%s %s\n", "FORM mini netlist ", netname)
  fprintf(writeOutFile, "%s %s.%s\n", "FORM mini pinname ", sym_name, pin_number)
  fprintf(writeOutFile, "next\n")
);endif
);end if pinselect==nil
);end if

;===CHECK LOCATION X2:Y2 IF PIN EXIST OR NOT=====
if(and(x2>box1x, x2<box2x, y2>box1y, y2<box2y) == nil then
pinselect = axlGetSelSet(axlSingleSelectPoint(x2:y2))
axlClearSelSet()
if( pinselect != nil then
pinselect = car(pinselect)
sym_name = pinselect->component->name
pin_net_name = pinselect->net->name
pin_number = pinselect->number
if(pin_net_name == "" then
  fprintf(writeOutFile, "%s %s\n", "FORM mini netlist ", netname)
  fprintf(writeOutFile, "%s %s.%s\n", "FORM mini pinname ", sym_name, pin_number)
  fprintf(writeOutFile, "next\n")
);end if - (1-24)
);end if pinselect==nil)
);end if

);end when
);end if stringp
);end foreach via allWiresInDesign

.........


Tks!
Luan.

How to Read a text file as Text Type

$
0
0

I am having trouble reading a text file and having it stay as text. I guess skill expects every text item to be quoted.
Is there a way I can read it as text?

second choice: can I split each line into an Array?

sample_infile.il

775 640 N74011018 TP30CIR_TOP Top
5045 570 N74011128 TP30CIR_TOP Top
5175 1015 GND TP30CIR_TOP Top
55 1310 GND_EARTH TP30CIR_TOP Top
650 140 VOUT TP30CIR_TOP Top
500 140 MODEM_48VIN- TP30CIR_TOP Top
500 190 MODEM_48VIN+ TP30CIR_TOP Top
75 595 48VIN- TP30CIR_TOP Top
775 1190 48VIN+ TP30CIR_TOP Top

(defun Read_String ()
 FileData=infile("sample_infile.txt")
 LocLine=""

 while( LocLine!=nil
 
  LocLine=lineread(FileData)

  printf("%n    %n    %L\n" nth( 0 LocLine) nth( 1 LocLine) nth( 2 LocLine))

 );while

);defun


Skill > Read_String
775   640   N74011018
5045   570   N74011128
5175   1015   GND
55   1310   GND_EARTH
650   140   VOUT
500   140   (MODEM_48VIN - TP30CIR_TOP)
500   190   (MODEM_48VIN + TP30CIR_TOP)
E-
E- 75 595 48VIN- TP30CIR_TOP Top
E-             ^
E- SYNTAX ERROR found at line 8 column 13 of file sample_infile.txt
E- *Error* lineread/read: syntax error encountered in input
ERROR
Skill >

Things of note:

1. The minus and plus sign in MODEM_48VIN-  and  MODEM_48VIN+ gets separated in the output, and that makes a list of two items: (MODEM_48VIN - TP30CIR_TOP)
2. Program chokes on 48VIN-  maybe because it starts with a number and ends with a minus sign.


Skill toolbox

$
0
0

 I'm looking to create a skill toolbox and then fill it with tools I can find readily available. I figure this a good way to start out in SKILL and not re-invent the wheel, though I may redesign it a bit to suit my own needs...

Does anyone know of a public tool repository?

 

 Thanks in advance

 

    Chuck

arc length or angle skill function

$
0
0

Hi

Does anyone know of a function to calculate the angle of an arc given 2 coordinates and the radius

or calculate the arc length

Either one would work out, but I've not been able to find such a function.

I know about axlDBGetLength but the problem is that my arc does not have it's own dbid since I'm traversing segments of shapes.

Thanks in advance 

Best regards

Ole

How to edit the footprint in PCB board

$
0
0

Hi every one

I have routed PCB board  .brd file (no schematic). I want to edit some components footprint like capacitor and diode place on the board have no polarity. Any body have knowledge about the procedure to edit the already placed and routed footprints.

 Regards

Aamir 

PCB Skill variable saved to Windows clipboard

$
0
0

I am currently running Allegro on a windows 7 machine.  Does anyone know of a way to save a skill variable to the windows clipboard?  thanks!

PCB File Recovering

$
0
0

Recently I'm using Allegro containde in Cadence16.5 to design a PCB board, suddenly it crashed and I can't open my file again. And it's shows that "Database has a non-recoverable corruption". What I do can resole the problem? Thanks a lot. 

padstack definition help

$
0
0

 Hi all !

    I'm trying  access to padstack definition  & get  height and width values of regular pad, but I don't know how to do it. I only found some attributes likes drillDiameter, objType..... Please help me do that.

Luan.

Tks.

autosilkUtils.il

$
0
0

 Hi All:

Hopefully Dave Elder reads this ?

I am running Allegro 16.5  S018 and tried to run the autosilkUtils.il SKILL script.

Everything seems to work except it does not put the DRCs into the walker popup window.

Hopefully someone can fix this ?

This is a great tool

Thanks,

Les


help on shape fill when using axlDBCreateShape..

$
0
0

Hi everyone,

 I am currently working on a certain program wherein a certain cline segment will be converted to shape(version of allegro used is 16.5).. i was able to generate the shape by first getting the polygon object of the cline then use it on axlDBCreateShape.. refer to code below..

clineDbid = (dbid of cline to converted to shape)

polyDbid = car(axlPolyFromDB(clineDbid ?endCapType 'SQUARE))

axlDBCreateShape(polyDbid t layer netName) 

The program works fine but the main problem is the shape fill type. As default, solid fill shape or dynamic copper type should be generated but whenever i run the program, static crosshatch type is generated.. I need the shapes generated to be in solid fill shape/dynamic type..

Thanks..

getting the label at tree view

$
0
0

Hi everyone,

I am currently working on an interface where treelist is used. the form will display list of layers present in the design in tree list. every item is set to be displayed with a check box.. the main purpose of the check box is to serve as a trigger for another form.. but in order to load the form, the condition is to check the checkbox and then retrieve the label of item selected.. To retrieve if the checkbox is checked is quite simple, I just used form->treeViewSelState . what is quite confusing is how to retrieve the label whenever the checkbox is selected.. whenever i use form->curValue or axlformGetField. the label extracted is either nil or "". refer to the code below as reference

;;;;;code used to load items on tree list. note: DESIGN_LAYER_LIST is the list of layers extracted from board

(foreach item DESIGN_LAYER_LIST
          axlFormTreeViewAddItem(form "treeLayers" item nil nil t)
)

;;;;;code for form event

(case oForm->curField

("treeHandler"
   let(()
    (form->event
     (normal

        ;;;;; retrieve checkstate

           form->treeViewSelState

     )

)

)

)

Thanks in advance

      

Enable DRC By-Layer on Same net spacing constraints

$
0
0

Hello all,

Can anyone tell me how to turn on the "Enable DRC By-Layer" in the same net spacing constraints tab under all layers-->all?

Thank you in advance! 

Program Skill development

$
0
0
 Hi all,
 
 I have to realize a project about PCB. To do this I have to use SKILL language. 

Do you know another IDE for the Skill language?

 
 My subject: I have to write a SKILL program which automatizes the creation of text block. In fact I have to use a library to take PCB dimension, and text block format (A4, A3, ...). Then I write a script which calls many functions to do that.
 Well the text block need to be fill with information of PCB (Client name, no Pb in the PCB, Date, name of responsible, etc...). Informations are present in text files, So I have to take them, put in text blocks, select format of text block, and then, generate the Gerber files.

 

 
 Anyone could help me please.
 
 English is not my native language, so please ask me for more information. It's very important for me and urgent.
 
 Thanks

Find and Replace Text Utility

$
0
0

Hi

Warning: This is a partial code but does the work

after loading type "te" on the allegro command  window, when you choose a class/subclass, the grid will show all the available text in those layers(go up and down on the subclass to refresh the text)

The color button next to subclass will turn on/off that particular layer(thanks to dave elder's code)

When you click on a text in the gird, it will show up in actual text, you can change it there and press tab and it will be updated on the grid as well as the actual text

 For now I kept minium characters to be searched as 3, type it in the find box and press find button, this will only list those has the find pattern

 (find in all layers is not yet implemented, plan to show the layers in the second column)

type the new pattern on the Replace text and press Replace All, this will replace

(this funtion is incomplete because I am stuck at not able to refresh the grid, I know what's happening but I am little lazy to code it now

the dbids gets removed after replace function, I got to refind them and update)

 

Many Many thanks to Dave Elder since I am just improvising lot of his functions

I appreciate any feedback and comments, I welcome anyone willing to code further, I only wish me being indicated of the changes and willingness to share some code

 

regards

Venkata

 

 

 

 

Viewing all 2130 articles
Browse latest View live


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