본문 바로가기
Electronic eng./Analog circuit

[hspice] .meas 문법 정리

by 김봉철 2022. 12. 17.

1. 최대/ 최소/ 평균값/ PeaktoPeak /적분/ 미분

.MEAS [DC/AC/TRAN] [만들 변수명] [MAX/MIN/AVG/PP/INTEG/DERIV] [PROBE한 변수명] FROM=[시작점] TO=[끝점]


1-1. EXAM

.MEAS DC I_MAX MAX I(M1) FROM=0.1V TO=2V


설명: M1의 전류(I(M1))의 최대값을 I_MAX라는 이름으로 저장한다. 측정범위는 0.1V~2.0V



2. 어떤 변수가 특정 값을 가질 때, 전압/주파수/시간 찾기

.MEAS [DC/AC/TRAN] [만들 변수명] WHEN [PROBE한 변수명]=[값]


2-1. EXAMPLE

.MEAS DC V_WHEN_I_1A WHEN I(M1)=1A

M1의 전류가 1A일 때, 전압값을 V_WHEN_I_1A 라는 이름으로 저장한다. 

2-2. EXAMPLE

.MEAS DC V_WHEN_I_MAX WHEN I(M1)=I_MAX


EX 1-1과 함께 사용한다면, 위와 같이 사용할 수도 있다. 전류가 최대일 때 전압값을 저장한다. 


3. 연산하기 (후처리하기?)

.MEAS DC [만들 변수명] PARAM='[수식]'



3-1. EXAMPLE

.MEAS DC POWER_WHEN_I_MAX PARAM='V_WHEN_I_MAX * CURRENT_MAX'


EX 1-1과 EX 2-2를 함께 사용해, 위와 같이 사용할 수 있다. 뒤 수식의 계산 값을 POWER_... 에 저장한다.
사칙연산 가능하다. 제곱이나 제곱근은 가능한지 모르겠다.

3-2. EXAMPLE

.MEAS DC ABSOL_V PARAM='ABS(V_WHEN_I_MAX)


V_WHEN_I_MAX의 절댓값을 ABSOL_V에 저장한다

 

 

번외. 

또한 sweep을 하면서 다음과 같이 변수를 변경할 수 있다.
예를 들어 R1을 1k로 변경 > sweep > R1을 2k로 변경 > sweep > ... >  R1을 100k로 변경 > sweep 과 같은 방식이다. 

 

반복작업에 간편하다. 방법은 아래와 같다. 

**for great result, W=55u, L=1u**
.PARAM MOS_W=55u
.PARAM MOS_L=1u

M1 	D G 0 0	NMOS 	w=MOS_W, l=MOS_L
RD 	D VD 	1k

VGS 	G 0 	DC 5
VDD	VD 0	DC 2

**simulation**
.OP
.temp =25
.dc 	VGS 	0.0 	5.0 	0.001	sweep	DATA=sweep_param


**for graph**
.probe i(M1)
.probe gmo(M1)

.data sweep_param MOS_L MOS_W 
0.1u 0.1u 
0.1u 10.09u 
(중략)
100.0u 100.0u 
.enddata

.end

2, 3번 줄에서 변경할 변수를 선언한다. (param=...)
14번 줄에서 dc sweep 시 data를 바꿔가면서 sweep하겠다고 선언한다. (DATA=...)

21~26번 줄에서 어떤 데이터를 어떻게 바꿀건지 설정한다. (.data ...)