본문 바로가기
Allegro Skill Language

[Allegro Skill] APD 자동화 기본기 익히기 (소개, List 구조)

by 지식 퓨저니스트 2024. 4. 15.

포스팅 목차

    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를 짤 때, 가장 실수하기 좋은 부분이라서 꼭 알아가면 좋을 것 같다.