반응형

사용자가 마우스클릭을 하며 객체를 Highlight 시키는 것과 같이, SKILL 코드로 좌표를 입력하여 객체를 Highlight 시킬 수 있다.

주의해야할 점은, 객체 선택 전에 반드시 axlSetFindFilter() 함수가 선행 되어야 한다. (아래 참고)

https://ansan-survivor.tistory.com/192

 

[Cadence SKILL] Find Filter (Find 필터) 컨트롤하기

OrCAD/Allegro PCB Editor 옆에 Element를 쉽게 선택하고 수정하기 아래와 같이 위해 필터를 제공한다. 그런데 SKILL 코드로 이 필터를 컨트롤 할 수 있다. 또한 어떤 요소를 선택하기 위해서는 필수로 필터

ansan-survivor.tistory.com

먼저 간단한 Tip이지만, PCB Editor에서 해당객체를 클릭하면 Command 로그에 해당 좌표가 기록된다. 그래서 좌표를 모른다면 다음과 같이 클릭해서 찾을 수도 있다.

(Pin 클릭했을 때 (mm단위) )

 

(필요한 부분 찾아가기 목차)

1. Find Filter로 Pin만 선택하도록 하고, axlSingleSelectPoint()로 선택하기.

2. 여러 요소 선택하기 axlAddSelectPoint()

3. 선택된 요소중 몇개 빼기 axlSubSelectPoint()

4. Box 드레그 단위로 선택하기, 추가하기, 제거하기

5. 이름(Name)으로 선택하기 (Net, Reference Number)

6. 선택한 Element의 DBID 뽑아보기

 

(알아두기)

axlSingleSelect 는 이전에 선택된 모든걸 Clear하고 새로운 선택을 하는것.

axlAddSelect는 이전에 선택된 것 + 추가로 선택하는 것.

axlSubSelect는 이전에 선택된 것 - 빼주는 것.

함수 뒤 좌표인자를 넣지 않으면 유저에게 선택할 수 있도록함.

 

 

1. Find Filter로 Pin만 선택하도록 하고, axlSingleSelectPoint()로 선택하기.

필터링
좌표 (10,10) 선택
다음과 같이 좌표 (10, 10)에 있는 Pin이 Highlight 됨을 알 수 있다.

좌표를 (11:13) 으로 입력하면, 그전에 Highlight 되었던 Element가 Clear되고, 새로운 Element가 활성화 된다.

2. 여러 요소 선택하기 axlAddSelectPoint()

결과

3. 선택된 요소중 몇개 빼기 axlSubSelectPoint()

    물론 이 함수를 여러번 써서 여러개를 뺄 수 있다.

 

 

4. Box 드레그 단위로 선택하기

    2지점의 좌표를 list에 넣어주면 아래 그림처럼 Box를 그리며 그 안에 포함되거나 걸쳐있는 모든 Element를 선택한다.

    (단, 반드시 FindFilter가 선행되어야 한다)

마찬가지로

axlAddSelectBox(list(좌표 좌표))  박스형태로 Element를 추가 할 수 있고,

axlSubSelectBox(list(좌표 좌표))  박스형태로 Element를 뺄 수 있다.

 

5. 이름(Name)으로 찾기

    5-1. VCC 네트 선택

        VCC net이름으로 아래와 같이 찾으면, shape을 포함한 모든 VCC 네트가 하이라이트 된다.

    5-2. INT0, INT1 이라는 네트 이름만 선택하기.

    5-3. Reference 이름으로 찾기

U1, U3 참조번호를 가진 부품 2개가 활성화 된다.

6. 선택된 Element의 DBID 뽑아보기

 

7. 선택한 요소가 총 몇개인지 개수 뽑기.

8. DBID를 알 때, DBID로 부품 선택하기.

    a에 저장된 U1의 DBID로 하이라이트 시키는 예제.

9. Find Filter에 체크한 사항을 전체 선택하기

    Design 내 모든 부품 선택하기

    Design 내 모든 via 선택하기

반응형
반응형

OrCAD/Allegro PCB Editor 옆에 Element를 쉽게 선택하고 수정하기 아래와 같이 위해 필터를 제공한다.

그런데 SKILL 코드로 이 필터를 컨트롤 할 수 있다. 또한 어떤 요소를 선택하기 위해서는 필수로 필터를 컨트롤 해주어야 한다. 

아래는 SKILL로 컨트롤할 때 필요한 String 타입의 키워드 이다. 옛버전 기준으로 되어있어 현재 버전에서 빠져있는 것들이 있다.

해당 항목 변수값. (Cadence SKILL User guide)

1. 선택 항목 활성화 및 비활성화 (t값을 리턴해야 정상동작완료)

skill t값 리턴
비활성화                              활성화

2. 모두 비활성화 시킨상태에서 Nets, Pins, Vias 만 활성화 시키기

결과

3.  2번 상태에서 Nets 체크박에서 체크표시하기(활성화)

결과

4. 모든 선택항목을 활성화 시킨 후, 체크박스 전부 체크하기

결과
(참고) Groups는 체크가 안된다.

5.  Nets, Pins, Vias, Shapes 활성화 시킨 후, Shapes 체크박스만 선택하기

6. 필터링한 값 확인 및 사용 ( axlGetFindFilter() 함수)

 

이제, 이렇게 해서 걸러낸 필터링 값을 확인하거나 뽑아서 사용하려면 axlGetFindFilter() 함수를 이용한다.

위에 5번에서 필터링한 값을 axlGetFindFilter()함수를 사용해본다.

결과

그러나 활성화 목록에 없지만, "BONDSMART" "DYNTHEMALS" 라는 2가지 목록이 디폴트로 앞에 따라나온다... 

 

(axlGetFindFilter 테스트)

역시 "BONDSMART" "DYNTHEMALS" 라는 2가지 목록이 디폴트로 앞에 따라나온다 이 2개 인자를 빼고 나머지 뒤 인자부터 선택하면 될 것이다.

 

 

 

혹시 위 함수를 테스트 하다가 오류가 발생한다면 아래 참조.

https://ansan-survivor.tistory.com/153

 

[Cadence SKILL] SKILL 언어 오류 발생 유형 / 주의사항

SKILL언어에서 띄어쓰기/공백(Space)는 중요한 요소임으로 주의한다. 1. E- *Error* eval: not a function 오류 발생 특히 함수(function)을 만들 때 아래와 같은 사항을 주의. 2. E- *Error* eval: unbound vari..

ansan-survivor.tistory.com

 

반응형
반응형

SKILL로 Via이름.pad 파일이 Database에 존재하면 Via를 만들 수 있다.

필자는 커스텀 via를 만들어 보았다. 이름은 powerVia로 정했다.

 

1. 나만의 커스텀 via만들기 (powerVia)

Drill hole크기는 1mm 정함

그냥 대충 만들었다.

그리고 저장하여 이름을 powerVia.pad 로 정했다. (확장명은 .pad로 저장된다.)

그리고 불러올 수 있는 경로에 넣거나 또는 path를 수정한다. (아래 참조)

https://ansan-survivor.tistory.com/10

 

[PCB Editor] 내가 직접 만든 Footprint가 안보이거나 로드가 안될때,

경로: C:\SPB_Data\cdssetup\OrCAD_Capture\17.2.0 (17.2버전) 에 가보면 Capture.ini 파일이 있고, [Allegro Footprints]에 경로가 지정되어있는데, 본인의 경우, 직접만든 _my_pad 와 _my_symbols 폴더를 별도로..

ansan-survivor.tistory.com

2. 이제 Netlist를 뽑은 .brd 파일이 있다고 가정하자 그러면 Net이름들이 Database에 저장되어 있을 것이다.

    CM Rule에서 Physical - Net - All Layers를 보면 어떤 Net이름들이 있는지 알 수 있다.

    이중 GND 네트를 사용해볼 것이다. 또한 Net이름대신 nil을 넣어서 넣지 않을 것이다.

 

3. Via 만들기

 

사용법

 

리턴값을 자세히 보면 생성된 Via의 고유 DBID와 t 또는 nil 값을 리턴하는데.

생성한 위치가 Rule에 위반하여 DRC에러를 일으키는 경우 list의 2번째 인자에 t가 리턴된다.

net이름 gnd
2번째 인자 t리턴

 

생성위치 DRC에러 발생

반대로 위치가 Rule에 부합하다면, 2번째 인자는 nil을 리턴한다.

net이름 생략(nil)

 

2번째 인자 nil리턴

4. Show Element로 확인해보기

DRC가 생성된 Net는 GND로 만들었기에 아래와 같이 GND로 부여되어있다.

Net이름을 정의 하지 않았기에, not on net 라고 표시되어 있다.

반응형
반응형

설계를 할 때, 뭔가 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을 넣어서 한줄씩 표시되도록 하여 보기 편하게 만듦.

반응형
반응형

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

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

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

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

 

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

결과 thru핀 21개, smd핀 80개

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

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

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

반응형
12345

+ Recent posts