반응형

설계를 할 때, 뭔가 Rule에 어긋나면 DRC마커를 띄어주어야 하고, 이에 대한 내용을 설명해야한다.

SKILL에서는 이를 지원한다.

아래 링크는 Cadence에서 DRC마커를 사용하는 예제동영상을 보여준다.

필자는 아주 기초적인 DRC마커를 띄우는 법을 포스팅해본다.

 

https://resources.pcb.cadence.com/vidyard-all-players/creating-drc-markers-in-the-pcb-editor-with-skill

 

Creating DRC Markers in the PCB Editor with SKILL

The PCB Editor SKILL API provides the axlDBCreateExternalDRC() to allow you to programmatically add DRC markers to the PCB Editor database.

resources.pcb.cadence.com

 

axlDBCreateExternalDRC("Story" 10:10 "drc error class/all" nil nil "50 mils")

첫번째는 원점기준 (45,45) 에 마커를 생성. drc error class의 하위 class인 all 에 생성한다.

두번째는 원점기준 (55,55) 에 마커를 생성. drc error class의 하위 class인 top 에 생성한다.

아래와 같이 옵션목록에 다음과 같은 Class와 subClass가 있다는 것을 알 수 있다. 이 class를 넣어줘야 한다.

결과.

DRC마커 - 마우스우클릭 -Show Element 하면, 아까 입력한 값들을 볼 수 있다.

반응형
반응형

Cadence SKILL 코드로 PCB Editor에서 Shape을 그릴 수 있다.

Shape을 그리기 위해서는 Closed(닫힌)된 형상이 필요하다. 그래서 Shape을 생성하기 전에 Path를 좌표로 그려 닫힌 형상을 만들어 주어야 한다. 그리고 나서 그 닫힌 형상을 채울지 비울지 선택이 가능하다.

 

1. 사각 Shape 만들기

 

아래 코드는 먼저 경로를 (5,5) -> (50,5) -> (50,50) -> (5,50) -> (5,5) 으로 사각형을 그리고,

그 내부를 채우는 코드이다.

만약 폐루프의 형상이 아닐경우 아래와 같은 오류가 발생한다.

"Shape boundary is illegal"

 

2. Void(빈공간)이 있는 Shape만들기

 

먼저 axlDBCreateOpenShape()함수로 외곽선을 Closed(닫힌)형상으로 만들고
그 내부에 axlDBCreateVoid() 또는 axlDBCreateVoidCircle()로 Void를 만들 수 있다.

결과 top층에 다음과 같이 그려짐.

 

(45,25)지점에 반지름 10짜리 생성
마름모가 생성됨.

이제 Void구간을 제외하고 Shape을 형성한다.

반응형
반응형

Cadence SKILL 코드로 PCB Editor에서 선(line), 원(Circle), Arc, 다각형 등 그리기를 할 수 있다.

 

1. 선(Line) 그리기

  Line은 시작지점과 끝지점, 두께, class/layer만 있으면 그릴 수 있다.

  아래 예제는 원점으로부터 (5,5) 지점부터 (40,40) 을 연결하는 두께 5mm 짜리를 top층에 라우팅한다.

  코드를 실행하면 return값으로 이 Line에 대한 DBID가 나오고, nil이 리턴되는데, nil은 정상작동 했다는 뜻이다.

  만약 t가 리턴이 된다면 DRC에러가 발생했다는 뜻이다.

결과

2. 원(Circle) 그리기

  Circle은 중심점과 반지름, 두께, class/layer만 있으면 그릴 수 있다.

  아래 예제는 중심점(30, 40)이고, 반지름이 2mm 이며, 두께가 0.5mm인 원을 bottom layer에 만든다.

  코드를 실행하면 return값으로 이 Line에 대한 DBID가 나오고, nil이 리턴되는데, nil은 정상작동 했다는 뜻이다.

  만약 t가 리턴이 된다면 DRC에러가 발생했다는 뜻이다.

3. 경로 지정하여 그리기

  이 예시에서는 선, 아크를 사용하여 여러 선과 아크를 어떻게 연결하는지 테스트 해보았다.

  axlPathStart()함수 -> axlDBCreatePath() 이 두 함수사이에 경로를 만들어서 그린다.

결과

 

반응형
반응형

   OrCAD PCB Design파일 내 Pad의 수, Component의 수, net의 수 등을 세는 함수.

   아래 보드파일을 바탕으로 테스트를 해보았다. 총 부품은 8개.

   보드파일이 매우 복잡하면 이 코드를 응용해서 원하는 데이터만 뽑아볼 수 있다.

1. 부품 갯수

결과 8개로 나옴

2. 부품의 핀 갯수

부품 이름과 핀 갯수 나옴.

3. Net의 수

 

총 net의 수

(참고)

이전에도 포스팅했듯이, axlDBGetDesign()->?  을 이용하면 어떤 데이터들을 뽑을 수 있는지 알 수 있다.

또한 _itemsperline 내장변수를 이용해 보기좋게 정렬하면 된다.

사용 가능한 DB값들 보기

_itemsperline = 1을 넣어서 한줄씩 표시되도록 하여 보기 편하게 만듦.

반응형
반응형

1. Data type을 확인하고 맞으면 if문에 들어가도록 하는 예시문

타입에 맞는 데이터가 들어가는지 if문을 통해 조절 할 수 있다. 그 방법은 아래와 같다.

 

문자열 : string

정수   : fixnum

실수   : flonum

 

결과

반응형
반응형

기본적으로 함수를 만들기 위해서 procedure 라는 함수를 선언한다.

함수이름뒤에 함수에 입력되는 인자들을 선택한다.

procedure( FuncName( input1 input2 ...)

);

con함수는 해당 조건이 만족되면 바로 리턴하는 함수이다.

아래는 예제이다.

 

1.

결과

2.

결과

반응형
반응형

아래 PCB보드 파일을 바탕으로 Skill 스크립트로 테스트했다.

이 파일의 데이터베이스에 접근한다.

이하 작성한 스크립트는 모두 함수형태로 만들었다.

즉 pin_count() 처럼 아래 함수로 만들었기 때문에, 함수를 호출하여 사용한다.

 

1. Design 내 Thru 또는 SMD 핀 갯수 파악하기

결과 thru핀 21개, smd핀 80개

2. 부품의 내부 정보 확인해보기

   아래 예제 함수는 부품 Reference, Net, 사용된 pin에 대한 정보만 추출하는 예제 함수이다. 

사용한 부품 reference num와 총 수량
SKILL결과와 Capture 속성에 있던 Net 이름 비교 (총 29개 일치) 
Design 내 모든 Pin 정보 추출

반응형
반응형

 

다음과 같은 PCB Design Data가 있을때, 이 Design에 대한 database를 뽑아본다.

1. SKILL 언어를 통해 Allegro PCB Database에 접근하기 위해서는 가장 기본적으로 DBID를 부여받아야 한다.

   DBID는 동적할당됨으로 계속 바뀔 수 있고, 그때마다 DBID를 호출해서 하나씩 파고 들어가야 한다.

   axlDBGetDesign()함수를 호출하면 해당 작업하고 있는 PCB Design의 DB값이 부여되어 리턴한다.

   또한 이 DB를 List형태로 불러오기 위해서는 -> 라는 연산자를 사용하며, 내용이 궁금할 땐, ? 또는 ?? 연산자를 사용.

axlDBGetDesign() 함수는 DBID를 리턴하고, 이를 변수명 "design_dbid"로 저장하여 사용한다.

변수명 "design_dbid"에 연산자 ->? 를 사용하면, 아래와 같이 어떤 데이터들이 들어있는지 쭉 나온다. 아마 띄어쓰기가 구분자로 되어있어 보기 헷갈릴 것이다. 고로 _itemsperline 함수를 잘 이용해서 출력되는 display를 조절할 수 있다.

_itemsperline = 1 으로 변경해서 보기 편하도록 수정하면 리스트가 아래와 같이 나온다.

->?? 연산자를 이용하면 속성이름(Name)과 값(value)가 세트로 나오는데, 이 또한 구분자가 띄어쓰기로 보기 어렵다.

고로 _itemsperline 함수를 이용해서 값을 2로 수정해주면 Name - Value 가 세트로 나오기 때문에 보기 편하다.

Design Database에 값이 없으면 nil으로 표시가 되고, 값이 있으면 아래와같이 내부의 dbid가 리스트나 값으로 나오게 된다.

이제 하나씩 데이터베이스에 접근하고 수정 및 작업하려면

아래와 같이 각 변수에 해당 값들을 대입해준다.

예) texts_dbid를 뽑아보면, 아래와 같다.

text의 database정보를 뽑아내는데, 보기 어렵게 나오므로 _itemsperline = 1 이용해 읽기 좋게 만들었다.

반응형
1···456789

+ Recent posts