반응형

아래와 같은 Layer정보를 가진 MOS가 있는데, 이 모든 Shape정보를 빼서 다른 재사용이 가능한 다른 SKILL파일을 만든다.

Virtusoso는 해당 화면을 하이라이트 시키면 아래와 인터프리터도 해당 창에 대해서 반응한다.

고로 위 MOS창을 하이라이트 시키고 아래 db id를 뽑으면 위 MOS에 관한 db id가 나온다.

위 MOS가 갖고 있는 shape을 모두 추출하여 새로운 .il 파일로 저장하는 코드

 

procedure(mos_info()
    let(()
        out_file = outfile("myReport.il" "w")            ; result.il 파일 쓰기모드 열기
        cv=geGetEditCellView()                         ; db id생성
        fprintf(out_file "procedure(mos_info()\n")	
        fprintf(out_file "let(()\n")
        fprintf(out_file "cv=geGetEditCellView()\n")

        tot_shape=cv~>shapes                            ; shapes의 db를 tot_shape에 넣기
        foreach(one_shape tot_shape                     ; foreach로 하나씩 접근
            layer_box=one_shape~>bBox                   ; 좌표데이터 뽑기
            layer_name=one_shape~>layerName             ; layer이름 데이터 뽑기
            x1_pos=xCoord(xCoord(layer_box))            ; (x1, y1), (x2, y2) 각 값 추출
            x2_pos=yCoord(xCoord(layer_box))
            y1_pos=xCoord(yCoord(layer_box))
            y2_pos=yCoord(yCoord(layer_box))
            fprintf(out_file "dbCreateRect(cv \"%s\" list(%.2f:%.2f %.2f:%.2f)) \n" layer_name x1_pos x2_pos y1_pos y2_pos)
            ;printf("dbCreateRect(cv %s list(%.2f:%.2f %.2f:%.2f)) \n" layer_name x1_pos x2_pos y1_pos y2_pos) ;디버깅용
        );foreach
    );let
fprintf(out_file ")\n")
fprintf(out_file ")\n")
close(out_file)                    ; 반드시 open한 파일은 close하기
);procedure

결과로 아래와 같은 .il 파일이 만들어진다.

이 myReport.il SKILL파일을 빈 layout에 생성해본다.

1. Library Manager

2.

3. 새 라이브러리를 만들고 새 layout 열기

4.

5. load("myReport.il")을 하여 스킬파일을 로드함.

6. 함수명 mos_info를 쳐서 실행

반응형
반응형

아래 MOS의 DB정보 빼내기.

 

    _itemsperline=1  ; 한줄에 표시할 데이터 갯수정의

    cv~>?              ; name 정보

    cv~>??             ; name 및 하위 DB정보 (구분이 힘들어서 파랑색으로 표시)

ex) shape에 관한 정보만 추출.

 

procedure(mos_info()

    let( ()

    cv=geGetEditCellView()

procedure(mos_info()
    let( ()
    cv=geGetEditCellView()
    
    work_lib=cv~>libName		; 라이브러리 이름 불러오기
    cell_name=cv~>cellName		; Cell의 이름 불러오기
    printf("Library name is %s cellname is %s" work_lib cell_name)
    
    tot_shape=cv~>shapes			; foreach에 쓰기 위해 shapes의 dbid를 tot_shape에 대입
    foreach(one_shape tot_shape		; tot_shape의 db를 풀어서 one_shape으로 하나씩 db를 대입
        layer_box=one_shape~>bBox	; one_shape db자료 중 좌표(bBox)값 추출
        layer_name=one_shape~>layerName		; one_shape db자료 중 layer이름을 추출
        printf("%s : %L\n" layer_name layer_box)

    );foreach   

    );let
);procedure

 

 

결과

반응형
반응형

기본적인 Cadence IC SKILL code 포맷. 이 형식으로 코딩을 진행한다.

확장명은 .il 을 사용한다.    예) name.il 

 

func_name : 함수이름 사용자 정의

cv=geGetEditCellView  : Cell DB 아이디를 받음

procedure( func_name( )
	let( ( )
		cv=geGetEditCellView()	; Cell의 DB를 대입.
        
         (DB를 이용해 함수 작성)
        
	);let
);procedure

아래와 같이 DB값을 받음

반응형
반응형

 

파일 form만들기

파일명 "pinsOnNet.form"

FILE_TYPE=FORM_DEFN VERSION=2
FORM 
FIXED
PORT 55 15
HEADER "Example Form for Class"


TILE
TEXT "Name"
TLOC 1 8
ENDTEXT

FIELD view_file
FLOC 18 1
CHECKLIST "View File" "label1"
ENDFIELD

FIELD create_file
FLOC 18 3
CHECKLIST "Create File" "label1"
ENDFIELD

FIELD create_view
FLOC 18 5
CHECKLIST "Create and View File" "label1"
ENDFIELD

FIELD field_name
FLOC 26 8
STRFILLIN 8 25
ENDFIELD

FIELD done
FLOC 1 11
MENUBUTTON "OK" 10 3
ENDFIELD

FIELD cancel
FLOC 13 11
MENUBUTTON "Cancel" 10 3
ENDFIELD

FIELD help
FLOC 30 11
MENUBUTTON "Help" 10 3
ENDFIELD

ENDTILE

ENDFORM

 

같은 디렉터리에 위치

반응형
반응형

1. 유저로부터 마우스 이벤트를 요청하고, 그 좌표값을 변수로 저장.

   ?prompts : command창에 유저에게 보여줄 문장

   ?gridSnap t: grid사용 (클릭 지점 근처 grid지점이 입력됨) nil: grid 해제 (클릭한 그 좌표가 입력됨)

마우스로 클릭

그리고나서 mycoord 변수를 쳐보면 값이 저장된것을 알 수 있다.

 

 

2. 유저로부터 마우스 드레그 좌표(Box)값을 받고, 변수로 저장.

    이 함수는 유저에게 2번의 이벤트를 요구함. (첫번째 선택, 두번째 선택)

    그때 표시 할 2개의 String을 인자로 둠.

첫번째 선택
위에서 드레그한 좌표값이 저장됨을 알 수 있다.

 

 

3. 유저로부터 입력받음.

    3-1. 유저로부터 String(문자열) 입력받음 <axlEnterString>

유저가 입력한 결과값이 answer변수에 들어감.

    3-2. 유저로부터 String(문자열) 입력받음 <axlUIPrompt>

'password 옵션을 사용하면, 암호형태로 display가 됨

        Default값을 넣어놓고 수정 가능. (유저 실수 방지)

 

 

 

4. 유저가 무언가 알림을 띄움.

    4-1. axlUIConfirm() 유저에게 정보전달을 위한 알람을 띄움

    4-2. axlUIYesNo() 유저에게 실행할지 말지 다시 한번 물어봄

yes = t, No = nil 리턴

    4-3. axlUIYesNoCancel() 유저에게 실행할지 말지 다시 한번 물어봄

Yes = 1, No = 0, Cancel = 2 리턴

 

5. 고정좌표로 부터 각도를 얻음

    1) 기준좌표는 입력해야 함.

    2) 기준좌표 기준 마우크 클릭하면 해당 좌표가 나옴, 아래 예제에서는 90도 부분을 클릭

 

 

 

6. 어떤 파일을 텍스트파일로 띄움.

    작업공간은 allegro폴더이며, 내부에 netlist.log파일이 있다. (Capture에서 Netlist작업시 자동 생성)

 

위에 파일을 SKILL로 뛰어볼 것이다.

결과

7. SKILL로 열었던 창, ID를 가지고 종료시키기

( 더자세히 보기)

ansan-survivor.tistory.com/466

 

[Cadence Allegro SKILL] 로그파일, 리포트파일, 텍스트파일 불러와서 창 띄우기

로그나 리포트 등 어떤 파일을 텍스트파일을 불러와서 유저에게 알리기 위해 띄울 수 있다. 그 함수는 axlUIViewFileCreate()와 axlUIWClose()를 사용한다. (테스트) 작업공간은 allegro폴더이며, 내부에 netli

ansan-survivor.tistory.com

 

 

 

반응형
반응형

사용자가 마우스클릭을 하며 객체를 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 라고 표시되어 있다.

반응형
1···3456789

+ Recent posts