Languages

CommunityCategory: GLISTER‘replay_all’ primitive를 활용하여 SPICE 시뮬레이션 파형을 재생하는 XMODEL 테스트벤치를 구성하는 방법

GLISTER

‘replay_all’ primitive를 활용하여 SPICE 시뮬레이션 파형을 재생하는 XMODEL 테스트벤치를 구성하는 방법

SA Support Team Staff 2019-08-12

회로와 모델이 서로 같은 동작을 하는지 비교하고 싶습니다. 특히, 회로를 시뮬레이션할때 썼던 SPICE 테스트벤치를 XMODEL 모델에 적용해서 그 출력파형들을 비교하고 싶은데, XMODEL-SPICE co-simulation을 쓰지 않는 방법이 있을까요?

1 Answers
Best Answer
SA Support Team Staff 2019-08-12

예. SPICE 시뮬레이션에서 사용했던 테스트벤치와 동등한 테스트벤치를 구성하는 방법에는 여러가지가 있습니다만, 여기서는 GLISTER의 'replay_all' primitive를 사용하는 방법을 소개해드리겠습니다. 'replay_all' primitive는 FSDB 파형파일에 저장된 파형들 중 원하는 hierarchy에 위치한 모든 신호들을 재생(replay)해주는 primitive로서, GLISTER에서만 제공되는 가상 primitive입니다. 즉, GLISTER의 symbol 상으로만 존재하고, netlisting시에는 각 신호의 type에 따라 'replay_xbit' 또는 'replay_xreal' primitive들로 변환됩니다. 'replay_xbit''replay_xreal' primitive에 대한 자세한 설명은 레퍼런스 매뉴얼을 참고하시기 바랍니다.

'replay_all' primitive를 사용하시면, SPICE 테스트벤치에서 사용했던 자극신호 파형들을 XMODEL 시뮬레이션 상에서 그대로 재생하는 테스트벤치를 만들 수 있고, 이를 이용해 회로와 모델 간의 동작을 손쉽게 비교하실 수 있습니다.

예시를 위해서, 아래의 'ctle_adapt'라는 회로에 대해서 먼저 SPICE 시뮬레이션을 수행했고, 그 입력과 출력파형들이 'waves.fsdb'라는 FSDB 형식의 파형파일에 저장되어 있다고 가정하겠습니다. HSPICE와 Spectre 등 대부분의 SPICE 시뮬레이터들은 FSDB 형식의 출력파일을 지원합니다. 예를 들어, HSPICE의 경우에는

.OPTION FSDB

옵션을, Spectre의 경우에는

settings options rawfmt=fsdb

옵션을 설정하면, 시뮬레이션 결과파형들이 FSDB 형식의 파일로 저장됩니다. Cadence ADE를 사용하여 시뮬레이션을 수행하는 경우에도 동등한 옵션을 설정할 수 있습니다.

아래처럼 XWAVE를 실행하면 FSDB 파형파일에 어떤 이름의 신호들이 저장되어 있는지를 쉽게 확인할 수 있습니다.

$ xwave -l waves.fsdb

----------------------------------------------------------------------------------------------------------------
Filename:
    waves.fsdb

Attributes:
    date         : unknown
    timestep     : 1e-15
    scopesep     : .
    timescale    : 1e-15
    simulator    : unknown

Variables:
    Cctrl\<0\>  type:real
    Cctrl\<1\>  type:real
    Cctrl\<2\>  type:real
    Cctrl\<3\>  type:real
    Rctrl\<0\>  type:real
    Rctrl\<1\>  type:real
    Rctrl\<2\>  type:real
    Rctrl\<3\>  type:real
    bias        type:real
    inn         type:real
    inp         type:real
    outn        type:real
    outp        type:real
    vdd         type:real

----------------------------------------------------------------------------------------------------------------

만일 FSDB 파형파일이 잘 읽히지 않는다면, FSDB Reader 라이브러리의 설정에 문제가 있을 수 있습니다. 자세한 내용은 이 링크(https://www.scianalog.com/support/community/question/1550/)를 참고하세요.

앞서 소개한 'replay_all' primitive는 FSDB 파형파일에 담긴 파형들을 재생하는 테스트벤치를 schematic 형태로 작성할때 유용합니다. 아래 그림에서는 'tb_replay'라는 새 schematic을 만들고, 거기에 DUT인 'ctle_adapt'의 instance를 하나 놓았습니다. 참고로, 이 instance를 선택한 상태에서 “스페이스바”를 누르면 각 포트의 위치에 wire와 label이 자동적으로 붙습니다.

이제 'replay_all' primitive를 사용할 차례입니다. Add Instance 창에서 'replay_all'을 선택하고, 이어서 FSDB 파일 이름과 원하는 신호들이 위치한 hierarchy level을 hierarchy prefix로 지정해줍니다. 예를 들어, A1.B2.C3 레벨에 위치한 신호들을 재생하고 싶다면 A1.B2.C3를 hierarchy prefix로 지정하면 됩니다. 최상위 신호의 경우에는 hierarchy prefix를 공백으로 두시면 됩니다. 나머지 옵션들은 replay_xreal/xbit의 옵션과 같으니 해당 문서를 참고하시면 됩니다.

FSDB 파일의 이름과 hierarchy prefix를 입력하면 'replay_all'의 symbol에 원하는 신호들의 terminal들이 생기는 것을 보실 것입니다. 이 symbol을 테스트벤치 schematic에 위치시킨 후, 역시 스페이스바를 눌러서 wire 및 label들을 생성하면 됩니다.

이제, dump primitive를 추가하면 testbench가 거의 완성됩니다. 조금 조정이 필요한 부분은 위 예제의 outp, outn 신호처럼 회로의 출력에 해당하는 신호들의 이름을 수정하여 (outp_SPICE, outn_SPICE), 모델의 출력과 비교할 수 있도록 하는 것입니다. FSDB 파형에 저장된 신호의 이름이 schematic에 사용된 이름과 다른 경우에도 자동생성된 이름을 일부 수정하셔야 할 수도 있습니다.

만일, FSDB 파일에 저장된 신호의 type과 그 신호가 연결되는 모델 포트의 type이 다를 경우 (예를 들어, 하나는 디지털 type인데 다른 하나는 아날로그 type인 경우), GLISTER가 그 사이에 connector를 자동삽입하기 위해서는 conversion level 정보가 정의되어 있어야 합니다. 예를 들어, level1에 해당하는 전압을 글로벌하게 1.2V로 정의하려면:

xmodelConvLevel1 = 1.2

을 CIW창에 입력하시면 됩니다. 또한, 각 포트별로 conversion level 정보를 다르게 정의할 수도 있는데, 더 자세한 내용은 GLISTER User Guide의 “Automatic Type Detection and Coercion” 부분을 참고하세요.

테스트벤치 schematic이 완성되었으면, netlisting을 수행하고 simulation을 실행하시면 됩니다. 그러면 아래 그림처럼, 같은 입력신호에 대한 모델의 출력 파형(상단)과 회로의 출력 파형(하단)의 차이를 쉽게 비교하실 수 있습니다.