VCD(.vcd), SAIF(.saif), FSDB(.fsdb) 파일이란?

VCD, SAIF, FSDB는 simulation에서 신호의 switching 정보를 기록하는 파일입니다. Power analysis에서 switching activity를 제공하고, waveform debugging에도 사용됩니다. 주로 Power analysis에 많이...

VCD(.vcd), SAIF(.saif), FSDB(.fsdb) 파일이란?
Photo by Mathew Schwartz / Unsplash

VCD, SAIF, FSDB는 simulation에서 신호의 switching 정보를 기록하는 파일입니다. Power analysis에서 switching activity를 제공하고, waveform debugging에도 사용됩니다.

주로 Power analysis에 많이 사용됩니다. Switching 정보가 있어야 Dynamic Power를 정확히 예측 할 수 있으니까요. 최근에는 Synthesis, P&R Tool에도 Power Aware Design을 위해 이 파일들이 쓰이기도 합니다.

a close up of a green object on a white surface
Photo by Google DeepMind on Unsplash

VCD(.vcd) 파일 예제

$date
    Mon Mar 23 10:00:00 2026
$end
$version
    VCS 2024.06
$end
$timescale
    1ns
$end

$scope module top $end
    $var wire 1 ! clk $end
    $var wire 1 " rst_n $end
    $var wire 8 # data_in [7:0] $end
    $var reg  8 $ data_out [7:0] $end
    $var reg  1 % valid $end
$scope module alu_inst $end
    $var wire 8 & op_a [7:0] $end
    $var wire 8 ' op_b [7:0] $end
    $var reg  8 ( result [7:0] $end
$upscope $end
$upscope $end
$enddefinitions $end

#0
0!
0"
b00000000 #
b00000000 $
0%

#5
1!

#10
0!
1"

#15
1!
b10110011 #

#20
0!
b10110011 $
1%
b10110011 &
b00001111 '

#25
1!

#30
0!
b11000010 (

VCD 문법 설명

Header에서 $timescale은 시간 단위를, $scope/$upscope는 module 계층을, $var는 signal 정의를 담습니다. 각 signal에는 단일 문자 ID(!, ", # 등)가 할당됩니다.

Value change에서 #20은 시간 20ns를 의미합니다. 0!은 signal !(clk)이 0으로 변경, b10110011 #은 signal #(data_in)이 binary 10110011으로 변경됨을 뜻합니다. 변경이 없는 signal은 기록하지 않아 파일 크기를 줄입니다.

SAIF(.saif) 파일 예제

(SAIF
    (SAIFILE)
    (DIRECTION "backward")
    (DESIGN )
    (DATE "Mon Mar 23 2026")
    (VENDOR "Synopsys")
    (PROGRAM_NAME "VCS")
    (VERSION "2024.06")
    (DIVIDER / )
    (DURATION 100000)      // simulation duration: 100us (in timescale units)
    (TIMESCALE 1 ns)
    
    (INSTANCE top
        (INSTANCE alu_inst
            (NET
                (op_a\[0\]
                    (T0 55000)     // time at logic 0: 55ns
                    (T1 45000)     // time at logic 1: 45ns
                    (TX 0)         // time at unknown
                    (TZ 0)         // time at high-Z
                    (TC 12500)     // toggle count
                    (IG 0)         // ignored
                )
                (op_a\[1\]
                    (T0 62000)
                    (T1 38000)
                    (TX 0)
                    (TZ 0)
                    (TC 9800)
                )
                (result\[0\]
                    (T0 51000)
                    (T1 49000)
                    (TX 0)
                    (TZ 0)
                    (TC 11200)
                )
            )
        )
    )
)

SAIF 문법 설명

SAIF는 VCD를 요약한 format입니다. 각 net에 대해 T0(logic 0에 머문 시간), T1(logic 1에 머문 시간), TC(toggle count)를 기록합니다. DURATION은 전체 simulation 시간입니다.

Toggle rate = TC / DURATION으로 계산됩니다. 예를 들어, op_a[0]의 toggle rate = 12500 / 100000 = 0.125입니다. Static probability = T1 / (T0 + T1) = 45000 / 100000 = 0.45입니다.

SAIF는 VCD보다 파일 크기가 훨씬 작아서, 대규모 design의 power analysis에 적합합니다. VCD는 매 시점의 값 변화를 모두 기록하지만, SAIF는 통계 요약만 담습니다.

FSDB(.fsdb)란?

FSDB(Fast Signal Database)는 Synopsys의 바이너리 waveform format입니다. VCD와 같은 정보를 담지만, 바이너리 압축으로 파일 크기가 작고 접근 속도가 빠릅니다. (SAIF 보다는 큼) Verdi waveform viewer의 기본 format이며, VCS simulation에서 직접 생성할 수 있습니다.

// VCS에서 FSDB 생성
// testbench에 다음 코드 추가
initial begin
    $fsdbDumpfile("top_design.fsdb");
    $fsdbDumpvars(0, top);      // 0 = all levels
    $fsdbDumpSVA;                // assertion도 기록
end

Power Analysis에서의 사용

# PrimeTime PX에서 power analysis
read_vcd top_design.vcd -strip_path tb/top_inst

# 또는 SAIF 사용
read_saif top_design.saif -strip_path tb/top_inst

report_power -hierarchy

VCD/SAIF의 switching 정보와 Liberty의 power table을 결합하여 power를 계산합니다. VCD 기반이 더 정확하고, SAIF 기반이 더 빠릅니다.

정리

VCD는 시점별 값 변화를 기록하는 텍스트 format, SAIF는 toggle count와 static probability를 요약한 format, FSDB는 Synopsys의 바이너리 waveform format입니다. Power analysis에서 switching activity 입력으로 사용되며, VCD/SAIF의 정확도가 power 분석 결과를 결정합니다.

글 참여 도구

공유하기 토론 참여
이 글이 어떤 도움을 줬나요? 공개 숫자 없이 품질 개선 신호로만 사용합니다.

비공개 제보

오류나 추가 설명이 필요한가요?

공개 토론 대신 편집자에게 직접 보낼 수정·질문·다음 글 요청을 남겨주세요.

VLSI Korea

비공개 제보 보내기

작성한 내용은 [email protected]로 전달됩니다.

어떻게 받을까요?

익명 모드는 이름과 이메일을 보내지 않습니다. 다만 전송 서비스가 IP 등 기술 정보를 처리할 수 있어 절대적인 익명성을 보장하지는 않습니다.

ENGINEER DISCUSSION

현장에서는 어떻게 보고 계신가요?

동의, 반론, 보완 자료와 현업 경험을 남겨주세요. 답글 알림이 다시 토론으로 연결됩니다.

VLSI KOREA BRIEFING

매일, 중요한 신호만.

반도체 설계와 산업의 변화를 현직 엔지니어 관점에서 정리합니다. 무료이며 페이월이 없습니다.

FOR BUSINESS

이런 기술 콘텐츠가 필요하신가요?

기업용 기술 콘텐츠, 스폰서드 딥다이브, 사내 브리핑을 명확한 범위와 가격으로 진행합니다.

협업 방식·가격 보기 →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
MY VLSI

내 읽기 보관함

저장한 글과 읽던 글을 한곳에서 이어보세요.