반응형

 

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

 

[Cadence SKILL] 함수에 옵션 인자 넣기, Cadence SKILL option argument 넣기 (optional argument input)

함수는 기본적으로 input을 받고 output을 내보낸다. 그러나 어떤 함수는 필수적으로 모든 값을 받아야 하지만, 필요에 따라서 선택적으로 받을 때도 있다. 아래 예시는 좌표 (x1, y1) (x2, y2) 를 입력��

ansan-survivor.tistory.com

이를 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

 

[PCB Editor] OrCAD/Allegro PCB text 편집기를 이용해 빠르게 리포트 뽑기

설계를 완료하고 제조사 또는 고객사에 데이터정보를 보내기 위한 리포트를 뽑을 수 있다. 아래 포스팅은 자동으로 완성된 Template을 사용하거나 필요한 정보만 뽑아서 만드는 방법. https://ansan-su

ansan-survivor.tistory.com

 

 

 

 

 

반응형
반응형

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)을 놓고 로드한다. 

t 가 나오면 정상적으로 load된 것이다.

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

)
반응형

결과

반응형
반응형

 

 

 

아래 프로그램을 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가 실행됨.

 

 

반응형
123456789

+ Recent posts