포스팅 목차
PCB를 디자인하는 주요 Tool, Allegro PCB Designer(APD)를 사용하다 보면 '이런 함수가 있으면 어떨까?'
'이렇게 자동으로 되는 함수가 있으면 어떨까?'를 생각하게 된다.
그러면서 자연스럽게 APD 내에 있는 함수들을 더 찾아보게 되고, 비슷한 함수가 있으면 직접적으로 사용하거나 응용하는 방법을 통해서 사용하곤 한다. 물론 APD에서 다양한 함수들을 만들어두었지만, 사용자에 꼭 맞는 함수를 찾는 건 굉장히 어렵다. 그렇게 여러 번 찾는 함수가 없다 보니, 내가 함수를 만드는 방법을 찾게 되었다.
그리고 Cadence 사에서 만든 Skill Language를 통해 자동화를 할 수 있다는 것을 알게 되었다.
그래서 Skill에 대해서 차근차근 공부해보면서 블로그를 작성해보려고 한다.
Skill Language 간단 소개
일단, Skill 은 C 언어와 같은 프로그래밍 언어이며, 큰 틀에서 조건문 (if, case 등..), 반복문(while, for, foreach) 등을 사용하여 한 가지 함수, 즉 Function을 구성하게 된다. 프로그래밍을 접해본 사람이라면 되게 친숙한 구문일 것이고 어렵지 않을 것이다. 다만, 사용하는 방법 ';' (세미콜론) 유무, 함수 사용법에서 아주 작은 부분이 차이 나서 선언 방법에 대해서만 간단히 알고 가면 될 것이다. 이러한 내용은 블로그에서 차차 다루도록 하겠다.
List 구조 소개
C 언어에서 배열과 비슷하게, Skill Language 에서는 list라는 자료 구조가 있다.
이는 변수 안에 여러가지의 값을 넣을 수 있는 구조이며, 선언하는 방법은 아래 2가지가 있다.
'(a, b, c, d, e)로 선언된 List 호출할 경우, a, b, c, d, e 가 Symbol type으로 호출이 되며,
list(a, b, c, d, e)로 선언할 경우, List 내 변수 값(10,20,30,40,50)들로 호출이 되는 차이가 있다.
List는 APD에서 개체, xy, bBox(경계좌표) 등을 나타낼 때 사용되며, 여러 개체를 List로 나타내기도 하며 다양한 방식으로 사용된다.
a=10
b=20
c=30
d=40
e=50
Mylist = '(a,b,c,d,e) # a,b,c,d,e 의 symbol type 으로 list 형성;
Mylist = list(a,b,c,d,e) # a,b,c,d,e 변수 속성 동일한 값(10,20,30,40,50)으로 list 형성;
List 관련 함수
List 를 판별하는 함수, list 간 연결하는 함수, list 내부에 값을 호출하는 함수를 알아보자.
이 외에 더 많은 함수들이 있지만, 자주 사용하는 함수 기준으로 공부하고 더 필요할 경우에 찾아보자.
list_tmp = list(a,b,c)
#List 여부 판별
listp(list_tmp) ; t
#list 앞쪽 연결
cons(d list_tmp) ; (d,a,b,c)
#list 뒤쪽 연결
append1(list_tmp d) ; (a,b,c,d)
append(list_tmp list(d,e)) ; (a,b,c,d,e)
#list 값 호출
n 번째 있는 값 호출, 이 식에선 0번째
nth(0 list_tmp) ; a
list 내 가장 첫 값 호출
car(list_tmp) ; a
list 내 첫 값 제외 list 호출
cdr(list_tmp) ; (b,c)
두번째 값 호출
cadr(list_tmp) == car(cdr(list_tmp)) == car((b,c)) ; b
#list 길이 호출
length(list_tmp) ; 3
위와 같이 list 선언하는 법과 간단한 함수들을 알아보았다. List는 Skill Language를 사용하면서 가장 자주 사용하게 되므로 잘 알아두면 좋다. 특히 list 선언하는 부분에서 symbol type으로 저장되는지, 변수 속성 동일 type으로 저장되는지는 Skill script를 짤 때, 가장 실수하기 좋은 부분이라서 꼭 알아가면 좋을 것 같다.
'Allegro Skill Language' 카테고리의 다른 글
[Allegro Skill] 함수(Procedure) 정의하는 방법 (0) | 2024.05.13 |
---|---|
[Allegro skill] 코드 묶기(expression grouping) 및 지역 변수 (0) | 2024.05.12 |
[Allegro skill Language] APD Skill interpreter 여는 방법 및 간단 설명 (0) | 2024.05.10 |
[Cadence SKILL] if/case 구문 (0) | 2024.04.22 |