Cadence SKILL user-reference에서 발췌.
sort 함수
sortcar 함수
간단 테스트
Cadence SKILL user-reference에서 발췌.
sort 함수
sortcar 함수
간단 테스트
Cadence SKILL은 LISP 언어를 기반으로 한다.
따라서 LISP에서 지원하는 문법들이 통한다.
어떤 리스트내에서 최대값과 최소값을 뽑는다.
최대값은 55, 최소값은 1 이므로 아래와 같이 결과가 리턴
(참고)
또한 max()함수와 min()함수가 있는데, 이들은 fixnum 타입의 숫자만 구분한다. 즉 위처럼 list가 들어가면 동작하지 않는다.
-테스트-
내가 어떤 SKILL파일을 만들고 코드를 공유하고 싶지 않을 때, il 파일을 암호화 하여 eil 파일 확장명으로 바꿀 수 있다.
방법은 매우 간단하다.
함수명은 encrypt()이며, 필수인자 2개의 옵션인자 1개를 받는다.
src파일
des파일
암호
아래 간단한 테스트를 해본다.
파일명 option.il 이라는 파일이다. (아래 포스팅에서 만듦)
https://ansan-survivor.tistory.com/284
이를 encrypt() 함수를 이용해 암호화를 해본다. (t가 나오면 성공적으로 된것)
encrypt("test.il" "test.eil")
해당 파일을 열어본다. (아래와 같이 알 수 없는 문자로 암호화가 되었다)
이 암호화된 파일을 실행시켜본다. (정상적으로 실행된다 t리턴)
내부 함수를 실행시키고 인자를 넣어본다. (정상적으로 실행됨을 알 수 있다.)
함수는 기본적으로 input을 받고 output을 내보낸다.
그러나 어떤 함수는 필수적으로 모든 값을 받아야 하지만, 필요에 따라서 선택적으로 받을 때도 있다.
아래 예시는 좌표 (x1, y1) (x2, y2) 를 입력받으면, 그 거리가 측정되는 함수이다.
그러나 두번째 좌표인 (x2, y2)를 입력하지 않으면 (0, 0)으로 자동으로 세팅되는 함수이다.
즉, (x2, y2)는 옵션 인자인 것이다. (넣어도 되고 안넣어도 되고)
여기에 아래와 같이 값을 입력했다.
1. 입력 : (100 200)
2. 입력 : (100 200 200 100)
엑셀로 결과를 확인해보니 실제로 값을 입력하지 않는 경우 0인 디폴트 값이 적용되어 계산되었다.
함수에 옵션변수를 넣기 위해서는 @option (변수명 디폴트값) 을 이용한다.
1. 새로운 리포트 파일 만들기 포맷
그러면 해당 파일명을 가진 .rpt 파일이 생성되고 text edit 프로그램으로 편집할 수 있다.
2. 리포트 파일이 생성될 때 프로그램에 대한 Header 정보를 자동으로 표시해주는 axlLogHeader 함수가 있다.
아래와 같이 리포트파일 상단에 보드이름, 버전, 날짜가 해더로 자동 생성된다.
3. 리포트 파일에 내용 쓰기
리포트를 Text로 직접 입력해서 기본 Parameter으로 생성하고 싶은 경우에는 아래 참고
https://ansan-survivor.tistory.com/702
[Cadence Allegro SKILL] 알레그로 스킬(SKILL) 파일 시작시 자동 등록시키기 (0) | 2020.10.07 |
---|---|
[Cadence Allegro SKILL] OrCAD PCB / Allegro PCB 사용자 정의 메뉴 만들기 (0) | 2020.09.29 |
[Cadence Allegro SKILL] Form 을 활용한 UI 만들기 (0) | 2020.05.20 |
[Cadence Allegro SKILL] User Interface (UI) 관련, 키보드/마우스 이벤트 관련, 유저로부터 입력 받음 (0) | 2020.05.18 |
[Cadence Allegro SKILL] SKILL로 PCB Design 내 객체(Element) 선택하기 (0) | 2020.05.14 |
add라는 함수와 multi라는 함수는 cal이라는 함수에 종속되어 cal함수가 동작하면 보조로 작동하도록 테스트를 해봤다.
prog() 함수는 값을 리턴시킬 수 있는 함수를 만든다. 또한 prog 인자 옆에 선언하면 지역변수로만 작동하여 함수가 끝나면 자동 메모리 해제된다.
(procedure add(x y)
prog(( 지역변수 선언 )
return(x+y)
);prog
);procedure
위 예제에서 SKILL파일을 불러와서 함수를 로드하고 사용하는 법은.
1. 실행한 Allegro PCB파일과 동일한 위치에 SKILL파일(function_use_test.il)을 놓고 로드한다.
2. 함수를 호출하고 옆에 x,y값 인자를 넣는다.
x에 3을 넣고 y에 4를 넣었음으로, add함수와 multi함수가 계산되어 cal함수에 대입되어 값을 리턴
아래 코드를 실행
함수 받는 인자
mos_info(x값, y값, width, length, finger) 에 따라 원하는 MOS생성
procedure(mos_info(x y width length finger) ; 인자 5개를 받음
let(()
cv=geGetEditCellView()
;dbCreateRect(cv "pd" list(0.00+x:1.00+y 6.12+x+width:7.80+y+length))
dbCreateRect(cv "m0" list(3.66+x+width:1.10+y 6.02+x+width:7.70+y+length))
dbCreateRect(cv "m0" list(0.10+x:1.10+y 2.46+x:7.70+y+length))
dbCreateRect(cv "cd" list(4.34+x+width:3.90+y 5.34+x+width:4.90+y))
dbCreateRect(cv "cd" list(4.34+x+width:2.00+y 5.34+x+width:3.00+y))
dbCreateRect(cv "cd" list(4.34+x+width:3.90+y 5.34+x+width:4.90+y))
dbCreateRect(cv "cd" list(4.34+x+width:5.80+y 5.34+x+width:6.80+y))
dbCreateRect(cv "cd" list(0.78+x:3.90+y 1.78+x:4.90+y))
dbCreateRect(cv "cd" list(0.78+x:2.00+y 1.78+x:3.00+y))
dbCreateRect(cv "cd" list(0.78+x:3.90+y 1.78+x:4.90+y))
dbCreateRect(cv "cd" list(0.78+x:5.80+y 1.78+x:6.80+y))
dbCreateRect(cv "gc" list(2.56+x:0.00+y 3.56+x+width:8.80+y+length))
gc_width=(3.56+x+width)-(2.56+x)
gc_dist=(6.12+x+width)-(2.56+x)
m0_width = (2.46+x)-(0.10+x)
m0_dist = (3.66+x+width)-(0.10+x)
cd_dist = (5.34+x+width)-(4.34+x+width)
; finger가 2개 이상일 때 실행
cnt = 0
if(finger > 1 then
for(i 1 finger-1
println(i)
dbCreateRect(cv "gc" list((2.56+x)+(gc_dist*i):0.00+y (2.56+x)+(gc_dist*i)+gc_width:8.80+y+length))
dbCreateRect(cv "m0" list((3.66+x+width)+(m0_dist*i):1.10+y (3.66+x+width)+(m0_dist*i)+m0_width:7.70+y+length))
cnt = i
;dbCreateRect(cv "cd" list(5.34+x+width:
);for
dbCreateRect(cv "pd" list(0.00+x:1.00+y (3.66+x+width)+(m0_dist*cnt)+m0_width+0.1:7.70+y+length))
);if
)
결과
[Cadence IC SKILL] Virtuoso IC SKILL 유저 폼 만들기 (User form) / UI 만들기 (0) | 2020.07.07 |
---|---|
[Cadence IC SKILL] IC SKILL Layer정보를 추출해서 또 다른 SKILL파일 만들기 (0) | 2020.07.07 |
[Cadence IC SKILL] IC SKILL DB에 접근해서 항목 추출하기 (0) | 2020.07.06 |
[Cadence IC SKILL] IC SKILL 함수 만들 때 기본 포맷 (3) | 2020.07.06 |
아래 프로그램을 form.il 으로 저장하고 돌리면,
x_loc=hiCreateFloatField(
?name 'x_loc
?prompt "x_loc:"
?value 0.0 ; 초기값
)
y_loc=hiCreateFloatField(
?name 'y_loc
?prompt "y_loc:"
?value 0.0
)
width=hiCreateFloatField(
?name 'width
?prompt "width:"
?value 0.0
)
length=hiCreateFloatField(
?name 'length
?prompt "length:"
?value 0.0
)
hiCreateAppForm(
?name 'form_menu ;hiDisplayForm(함수명)에 사용될 이름
?formTitle "make mos menu" ;창 이름
?callback "mos_create()" ;불러오는 함수이름
?fields list(
list(x_loc 10:0 150:50 100) ; 이름, 위치, 너비
list(y_loc 10:30 160:50 100)
list(width 10:60 170:50 100)
list(length 10:90 180:50 100)
)
)
결과로 아래와 같은 창이 만들어진다.
1. 위 함수를 로드한다.
1-1. 위코드를 복사해서 인터프리터에 붙여넣기
실행하면 아래와 같이 뜬다
2. hiDisplayForm('form_menu)를 인터프리터 창에 입력하면 직접만든 window가 실행됨.
[Cadence IC SKILL] IC SKILL 예제 MOS의 좌표(x, y),width, length, finger 를 받아 새로 생성 (0) | 2020.07.07 |
---|---|
[Cadence IC SKILL] IC SKILL Layer정보를 추출해서 또 다른 SKILL파일 만들기 (0) | 2020.07.07 |
[Cadence IC SKILL] IC SKILL DB에 접근해서 항목 추출하기 (0) | 2020.07.06 |
[Cadence IC SKILL] IC SKILL 함수 만들 때 기본 포맷 (3) | 2020.07.06 |