티스토리 뷰

연구/HSPICE

[HSPICE] Measure - 고급 문법 정리

태양의티아 2021. 1. 13. 13:35

HSPICE를 다시 Hard하게 다루고 있는 상태이다. 자꾸만 까먹어서 Measure 구문에서 수식 등이 들어간 Measure 문법을 정리해 놓는다. 들어가기 전에 Meas에서 고려하면 좋은 것을 적어 놓는다.

 

Measure는 특정한 값 1개를 뽑는 것이고, Signal 계산과 Variable 계산으로 나뉜다. 자신이 하고자 하는 Measure가 어떤 것에 더 가까운지를 우선 명확하게 하고서 들어가면, Testbench를 보다 쉽게 작성하는 것이 가능하다.

1-1. Signal 계산 - Signal들을 사용하는 방법

Signal 계산은 특정 Signal들의 값을 찾거나 계산하고 싶을 때 사용하게 된다. 이번 Section에서는 여러 Signal들을 수식으로 묶어서 사용하는 방법과 묶어진 Signal을 계산하는 방법을 차례대로 적고자 한다.

 

우선은 여러 Signal을 사용하는 방법부터 알아보자. 여러 Signal들을 묶어서 사용하기 위해서는 수식으로 표현해야 한다. HSPICE에서는 수식들을 par(' 수식 ') 이라는 방식으로 사용하기 때문에 MEAS에서도 비슷하게 사용하면 된다.


예시1) out node의 voltage의 제곱이 0.9 일 때의 시간을 구하고 싶을 때

 

.meas TRAN double_cal WHEN par(' v(out)**2 ')=0.9

 

예시2) input_0 와 input_1 의 Voltage의 평균이 0.5 일 때, out의 voltage를 구하고 싶을 때

 

.meas TRAN name FIND v(out) WHEN par(' ( v(input_0) + v(input_1) ) / 2 ')=0.5


1-2. Signal 계산 - 계산식을 사용하는 방법

Signal들은 simulation에서 여러개의 포인트들을 갖는다. 기존에 Meas는 그 포인트들 중 하나를 찾는 개념이었다면, Signal 계산식은 여러 포인트들을 계산해서 결과를 출력한다. 대략 메뉴얼(Manual)에 나온 것이 7개 가량 나와 있다.

AVG    : 평균값
MIN    : 최소값
MAX   : 최대값
PP      : Peak - to - Peak
RMS   : Root mean square
INTEG : 적분
DERIV : 미분

이 중 미분만 특수한 방식을 따르고 나머지는 간단하게 사용이 가능하다.


예시1) 10n에서 20n 사이일 때, out voltage  MIN 값을 찾고 싶을 때

 

.meas TRAN out_min MIN v(out) FROM=10n TO=20n

 

예시2) 10n에서 20n 사이일 때, out voltage / input voltage의 PP 값을 찾고 싶을 때

 

.meas TRAN gain PP par('v(out) / v(in)') FROM=10n TO=20n

 

예시3) 모든 구간에 걸쳐 vvdd current source에 흐르는 전류의 적분값을 구하고 싶을 때 (전류는 Port 혹은 전류원을 통해서만 가능)

 

.meas TRAN total_cur INTEG i(vvdd)

 

예시4) 10ns에서 20ns 사이에 x1 subckt의 vdd에서 흐르는 전력을 측정하고 싶을 때

 

.meas TRAN x1_power INTEG par(' v(x1.vdd) * isub(x1.vdd)') FROM=10n TO=20n

 

예시5) 25ns 에서 out voltage의 기울기 구하기

 

.meas TRAN slew DERIV(' v(out) ') AT=25ns

 

예시6) 15ns 이후부터 v(in) 기울기가 0일 때, v(out) 값 구하기

 

.meas TRAN test FIND v(out) WHEN DERIV( ' v(in) ' ) = 0 TD=15n


3. Variable 계산

특정 Signal 값들을 Meas 하고 나온 값들을 가지고서 추가적인 계산을 하고 싶은 경우가 있다. Variable 계산은 앞서 설명한 경우에 사용하면 좋다.

 

기본 형태 == 빨간색 : 생략 불가능 // 파란색 : 생략 가능

.MEAS [TRAN/DC/AC] 변수명 PARAM='(Equation)'

 


예시1) 구간1 과 구간2 에서 구한 out voltage 평균값 차이의 절대값을 구하고 싶을 때

 

.meas tran avg_out_1 AVG v(out) FROM=10n TO=20n      $구간1에서 v(out)의 평균(AVG)

.meas tran avg_out_2 AVG v(out) FROM=100n TO=120n   $구간2에서 v(out)의 평균(AVG)

.meas diff_out PARAM='abs(avg_out_1 - avg_out_2)'         $구간1-구간2의 절대값

 

 

예시2) 구간1 과 구간2 에서 구한 out voltage 중 작은 것을 구할 때

 

.meas tran avg_out_1 AVG v(out) FROM=10n TO=20n      $구간1에서 v(out)의 평균(AVG)

.meas tran avg_out_2 AVG v(out) FROM=100n TO=120n   $구간2에서 v(out)의 평균(AVG)

.meas diff_out PARAM='min(avg_out_1 , avg_out_2)'         $구간1, 구간2 중 min 값

 

 

예시3) V(a)의 MAX 값과 V(b)의 MIN 값의 평균을 구하고 싶으며, 위의 2개 값은 표시하지 않고 싶을 때

 

.meas tran max_A MAX v(a) FROM=10n TO=20n PRINT=0     $구간1에서 v(a)의 MAX + 파일에 내보내지 않음

.meas tran min_B MIN v(b) FROM=100n TO=120n PRINT=0   $구간2에서 v(out)의 MIN  + 파일에 내보내지 않음

.meas diff_out PARAM='(max_A + min_B) / 2'                      $구간1, 구간2 을 더한 뒤 2로 나눔

 

 


 

댓글