콘텐츠로 이동

Module 03 — TB Top & AI Automation

학습 목표

이 모듈을 마치면:

  • Plan TB Top 환경의 layered architecture 를 Config (JSON) → Generator → UVM Env 3 층으로 설계한다.
  • Apply AI (LLM + RAG/FAISS) 자동화로 sequence / coverage gap / 디버그를 보조하는 workflow 를 도입한다.
  • Identify AI 자동화의 한계와 인간 검토 필수 영역 (silent corruption, race condition, CDC, 비결정적 타이밍) 을 식별한다.
  • Implement Config 기반 동적 Agent / Checker 인스턴스화와 RAL + multi-clock 도메인을 통합한 TB Top 구조를 구현한다.
  • Justify 소규모 프로젝트의 Gap Rate 가 더 높은 이유를 정량 데이터 (Project A 2.75% vs Project B 4.99%) 로 설명한다.

사전 지식


1. Why care? — 이 모듈이 왜 필요한가

1.1 시나리오 — 8 개월 vs 1 주

당신은 SoC 검증. 새 SoC release 마다 TB 작성 4 주, 검증 8 개월 → 다음 SoC 시작.

DVCon 2025 데이터 [Cadence / Synopsys]: - Config-driven TB + AI Gap discovery: 4 주 → 1 주. - 8 개월 검증 사이클을 1.5 개월 단축 가능.

핵심 패턴: 1. TB Top 의 모든 component 가 Config 기반: JSON 한 파일이 IP list, base address, common task matrix 정의. 2. AI Gap discovery: 새 IP 추가 시 LLM 이 기존 spec → 자동 Gap candidates 제시. 3. 사람 review + commit: AI제안, 사람이 승인.

8 개월 → 1 주 = 32 배 throughput. 같은 팀 크기로 8 배 chip 가능.

이게 modern SoC DV가장 큰 ROI 영역.

Module 02 의 매트릭스만으로는 Gap 을 발견 하지만, 발견된 Gap 을 누가 어떤 테스트로 메우는지 는 여전히 수동입니다. 새 IP 가 들어오거나 base address 가 바뀌면 TB 의 agent / checker / monitor / coverage 가 전부 손으로 갱신 돼야 하고, 이 과정에서 "TB 작업 4 주 → 검증 시작" 의 병목이 다시 발생합니다.

이 모듈을 건너뛰면 CCTV 가 그저 "한 번 만든 매트릭스" 로 끝나고, 다음 SoC 에서는 다시 처음부터 시작하게 됩니다. 반대로 Config (JSON) 한 파일만 교체하면 모든 layer 가 자동 재구성 되는 패턴을 잡으면, 8 개월에 한 번 짓던 TB1 주일 만에 release 가능한 상태가 됩니다 — 이게 DVCon 2025 가 정량적으로 보여준 가치입니다.


2. Intuition — 재사용 가능한 도시 검사 장비 비유와 한 장 그림

💡 한 줄 비유

TB Top = 도시별로 다시 만들지 않는 검사 장비 세트. 도로/전기/배수 검사 절차는 도시가 바뀌어도 동일 — 도시 지도 (Config) 만 갈아 끼우면 같은 장비가 다른 도시도 검사할 수 있어야 한다.
AI 자동화 = 도시 지도가 바뀔 때마다 새 점검 항목 (Gap) 을 자동으로 찾아주는 보조원. 보조원이 만든 목록은 경험 있는 검사관 (DV 엔지니어) 이 최종 리뷰.

한 장 그림 — Config → Generator → UVM Env → AI Gap loop

Project A · Config_A (JSON)Project B · Config_B (JSON)TB Top Generator (공통 코드)· parse Config· foreach ip in ip_list  · spawn agent (APB/AXI 자동 판별)  · register region in mmap_checker  · bind interrupt monitor to irq_map  · update CCTV ignore_bins from common_tasks· generate reset_seq SVA, power monitor, RALUVM Env (자동 구성, 프로젝트별 동일 구조)Agents · Checkers · Monitors · CCTV Coverage · ScoreboardAI Gap Detection Pipeline (DVCon 2025)IP-XACT (구조) + Spec (시맨틱) → IP profile→ FAISS 유사 IP 검색→ LLM Gap detection→ mrun 명령 + V-Plan bin 자동 생성 ip_list, mmap, irq_map, pd,reset_seq + common_tasks per IPip_list, mmap, irq_map, pd,reset_seq + common_tasks per IPregression 결과 + V-Plan
Project A · Config_A (JSON)Project B · Config_B (JSON)TB Top Generator (공통 코드)· parse Config· foreach ip in ip_list  · spawn agent (APB/AXI 자동 판별)  · register region in mmap_checker  · bind interrupt monitor to irq_map  · update CCTV ignore_bins from common_tasks· generate reset_seq SVA, power monitor, RALUVM Env (자동 구성, 프로젝트별 동일 구조)Agents · Checkers · Monitors · CCTV Coverage · ScoreboardAI Gap Detection Pipeline (DVCon 2025)IP-XACT (구조) + Spec (시맨틱) → IP profile→ FAISS 유사 IP 검색→ LLM Gap detection→ mrun 명령 + V-Plan bin 자동 생성 ip_list, mmap, irq_map, pd,reset_seq + common_tasks per IPip_list, mmap, irq_map, pd,reset_seq + common_tasks per IPregression 결과 + V-Plan

왜 이 구조인가 — Design rationale

세 가지 변화가 동시에 흡수돼야 합니다.

  1. 프로젝트 간 IP 차이: A 는 UFS / DMA / GPU, B 는 NPU / 영상 codec / DSP. IP 종류 는 다르지만 통합 패턴 (bus, irq, pd) 은 동일.
  2. 프로젝트 내 변경: 첫 release 후 base address 시프트, IRQ 재배치, 새 IP 추가 — TB 코드 손대기 시작하면 회귀 사이클이 깨짐.
  3. IP 의 Common Task 누락: V-Plan 갱신은 인간 작업. 자동화 없이는 96.30% Human Oversight (Module 02).

이 셋의 교집합이 Config 기반 layered TB + AI 보조 Gap detection 이라는 패턴입니다.


3. 작은 예 — 새 NPU IP 한 개를 TB Top 에 통합하는 1 cycle

가장 단순한 시나리오. 영상 SoC 에 새로운 NPU (Neural Processing Unit) IP 가 추가됨 — AXI master, DMA, sysMMU 사용, irq_out, PD_AI 도메인. 이 한 IPTB Top 에 자동 통합되는 1 cycle 을 추적합니다.

**T0** · NPU IP 의 IP-XACT + Spec 도착· regs (control, status)· AXI Master, irq_out· 'uses sysMMU for weights' (Spec 키워드)· 'DVFS supported, 2 OPP'**T1** · Config_v2.json 갱신 (1 line edit per field)+ ip_list[].name='NPU'+ base_addr='0x15000000', size='0x10000'+ bus_if='AXI', has_dma=true, has_sysmmu=true+ irq_spi=70, power_domain='PD_AI'+ common_tasks=[SYSMMU,SECURITY,DVFS,CLK_GATE,POWER,RESET,IRQ]**T2** · TB Top Generator 재실행· axi_agent::create('axi_NPU', env) — Agent 자동· mmap_checker.add_region(NPU, 0x15000000, 64K) — MMAP 자동· irq_monitor.bind(NPU, spi=70) — IRQ 자동· cctv_cov add row IP_NPU — CCTV 자동**T3** · AI Gap PipelineIP profile(NPU) → FAISS 검색 → 유사 IP = GPULLM: 'NPU 에 sysMMU bypass→enable 검증 필요''GPU 와 동일 패턴으로 추론, priority=HIGH'**T4** · Gap ReportNPU × SYSMMU_bypass_enable = NOT_TESTED→ mrun test --test_name npu_sysmmu_testNPU × DVFS_transition = NOT_TESTED→ mrun test --test_name npu_dvfs_test**T5** · 엔지니어 리뷰 (15 분)· NPU 는 weight 캐시 때문에 DVFS race 심함 → priority HIGH 확인· sysMMU 는 GPU 와 동일 패턴 적용 가능 → True Positive**T6** · mrun 실행 → PASScctv.record_result(IP_NPU, TASK_*, RESULT_PASS)매트릭스 NPU row 의 cell 들이 ✅ 로 채워짐
**T0** · NPU IP 의 IP-XACT + Spec 도착· regs (control, status)· AXI Master, irq_out· 'uses sysMMU for weights' (Spec 키워드)· 'DVFS supported, 2 OPP'**T1** · Config_v2.json 갱신 (1 line edit per field)+ ip_list[].name='NPU'+ base_addr='0x15000000', size='0x10000'+ bus_if='AXI', has_dma=true, has_sysmmu=true+ irq_spi=70, power_domain='PD_AI'+ common_tasks=[SYSMMU,SECURITY,DVFS,CLK_GATE,POWER,RESET,IRQ]**T2** · TB Top Generator 재실행· axi_agent::create('axi_NPU', env) — Agent 자동· mmap_checker.add_region(NPU, 0x15000000, 64K) — MMAP 자동· irq_monitor.bind(NPU, spi=70) — IRQ 자동· cctv_cov add row IP_NPU — CCTV 자동**T3** · AI Gap PipelineIP profile(NPU) → FAISS 검색 → 유사 IP = GPULLM: 'NPU 에 sysMMU bypass→enable 검증 필요''GPU 와 동일 패턴으로 추론, priority=HIGH'**T4** · Gap ReportNPU × SYSMMU_bypass_enable = NOT_TESTED→ mrun test --test_name npu_sysmmu_testNPU × DVFS_transition = NOT_TESTED→ mrun test --test_name npu_dvfs_test**T5** · 엔지니어 리뷰 (15 분)· NPU 는 weight 캐시 때문에 DVFS race 심함 → priority HIGH 확인· sysMMU 는 GPU 와 동일 패턴 적용 가능 → True Positive**T6** · mrun 실행 → PASScctv.record_result(IP_NPU, TASK_*, RESULT_PASS)매트릭스 NPU row 의 cell 들이 ✅ 로 채워짐

단계별 추적

Step 누가 무엇을 의미
T0 설계팀 IP-XACT + Spec 전달 구조 + 시맨틱의 이중 입력
T1 TB Top Lead Config.jsonip_list 에 NPU 추가 (단일 파일 edit) 모든 layer 에 변경 전파 시작
T2 Generator Agent / MMAP / IRQ / CCTV 자동 갱신 사람 손 필요 0
T3 AI 파이프라인 IP profile 만들고 FAISS 로 유사 IP (GPU) 의 검증 이력 참조 IP 의 누락 가능성 예측
T4 LLM Gap 별 mrun 명령 + V-Plan bin 자동 생성 명령어까지 그대로 실행 가능
T5 DV 엔지니어 15 분 리뷰: False Positive 걸러내고 priority 확인 인간 검토는 quality gate
T6 regression 실행 → PASS → matrix 갱신 1 cycle 끝
# T2 의 Generator 핵심 — 단순화
def generate_tb_top(config):
    env = UvmEnv("soc_top_env")
    for ip in config["ip_list"]:
        if ip["bus_if"] == "AXI":
            env.add_agent(AxiAgent(name=f"axi_{ip['name']}", base=ip["base_addr"]))
        env.mmap_checker.add_region(ip["name"], ip["base_addr"], ip["size"])
        env.irq_monitor.bind(ip["name"], ip["irq_spi"])
        env.cctv_cov.add_row(ip["name"], applicable_tasks=ip["common_tasks"])
    env.generate_reset_seq_sva(config["reset_sequence"])
    return env

여기서 잡아야 할 두 가지

(1) Config 한 파일이 모든 layer 의 single source of truth — 사람이 두 곳을 동시에 갱신하다 어긋날 위험이 사라집니다. NPU base address 가 바뀌면 Config 만 갱신, agent / mmap / SVA / RAL 이 자동 재생성.
(2) AI제안기 이지 결정기 가 아니다 — T3 → T4 까지는 AI 가 list 를 만들지만, T5 의 15 분 인간 리뷰 가 quality gate. False Positive 는 자연스러운 비용이고, Recall (실제 Gap 의 발견율) 이 더 중요한 지표입니다.


4. 일반화 — TB Top 3 층 과 AI 3 Phase

4.1 TB Top 의 3 층 구조

**Layer 1 : Config** (project-specific)JSON — ip_list, mmap, irq_map, pd, resetcommon_tasks per IP**Layer 2 : Generator** (project-agnostic)parse Config → spawn Agents / Checkers / RALemit reset_seq SVA, power monitorpropagate config_db**Layer 3 : UVM Env** (runtime)Agents · Common Task Checker Layer · CCTVScoreboard · Coverage · Virtual Sequencer
**Layer 1 : Config** (project-specific)JSON — ip_list, mmap, irq_map, pd, resetcommon_tasks per IP**Layer 2 : Generator** (project-agnostic)parse Config → spawn Agents / Checkers / RALemit reset_seq SVA, power monitorpropagate config_db**Layer 3 : UVM Env** (runtime)Agents · Common Task Checker Layer · CCTVScoreboard · Coverage · Virtual Sequencer

프로젝트 교체 ⇔ Layer 1 만 교체 (Layer 2, 3 는 불변)

4.2 AI 파이프라인의 3 Phase (DVCon 2025)

Phase 1: Hybrid Data Extraction
  IP-XACT (구조)  ─┐
  IP Spec (시맨틱) ─┴─► IP Profile { needs_sysmmu, needs_security, ... }

Phase 2: FAISS Similarity Search
  IP profile ──► embedding ──► nearest-neighbor 검색
                              ──► 유사 IP 의 검증 이력 참조

Phase 3: LLM Gap Detection + Test Generation
  IP profile + 유사 IP 이력 + 기존 V-Plan
                              ──► Gap list (priority 분류)
                              ──► mrun 명령 + V-Plan bin 자동 생성

4.3 정량 결과 (DVCon 2025)

지표 Project A (대규모) Project B (소규모)
SoC 내 IP ~200 ~50
발견 Gap 수 293 216
Gap Rate 2.75% 4.99%
Human Oversight 비율 - 96.30%
New IP/Feature 누락 감소 ~40% -

인사이트:

1. 소규모 프로젝트의 Gap Rate가 더 높음 (4.99% > 2.75%)
   → 엔지니어 수가 적어 교차 검증 부족
   → 자동화의 필요성이 오히려 소규모에서 더 큼

2. Human Oversight가 96.30%
   → 기술적 어려움이 아닌 "단순 누락"이 대부분
   → 자동 체크리스트/매트릭스 관리로 해결 가능

3. New IP/Feature 누락이 40% 감소
   → 새 IP 추가 시 자동으로 Common Task 목록 갱신
   → "이전 칩에서 했으니까" 가정을 제거

5. 디테일 — Config, UVM Env, AI 파이프라인, Release

5.1 TB Top 환경 설계 (이력서 직결)

**Config DB** (JSON / CSV)· IP 목록, Base Address, Interrupt Map· Memory Map, Power Domain· Common Task 적용 목록**TB Top Generator**· Config 기반 자동 인스턴스화· IP별 Agent 자동 연결· Checker / Monitor 자동 배치자극원 (External Models)**DUT** (SoC RTL)**Common Task Checker Layer**· Connectivity Checker (Formal / Sim)· Memory Map Checker (주소 접근 → 응답)· Interrupt Monitor (발생 → GIC → CPU)· Power / Clock Monitor (상태 전이)· CCTV Coverage CollectorCPU Model / AXI Master VIPMemory ModelExternal IF Models
**Config DB** (JSON / CSV)· IP 목록, Base Address, Interrupt Map· Memory Map, Power Domain· Common Task 적용 목록**TB Top Generator**· Config 기반 자동 인스턴스화· IP별 Agent 자동 연결· Checker / Monitor 자동 배치자극원 (External Models)**DUT** (SoC RTL)**Common Task Checker Layer**· Connectivity Checker (Formal / Sim)· Memory Map Checker (주소 접근 → 응답)· Interrupt Monitor (발생 → GIC → CPU)· Power / Clock Monitor (상태 전이)· CCTV Coverage CollectorCPU Model / AXI Master VIPMemory ModelExternal IF Models

재사용 핵심:

  • 프로젝트 A → Config_A.jsonTB Top 자동 구성
  • 프로젝트 B → Config_B.json → 같은 TB Top 프레임워크 재사용
  • → "8개월 동안 구축한 환경을 여러 SoC에 배포" (이력서)

5.2 코드 예시 — 구체적 JSON Config

{
  "soc_name": "HAWK_SoC",
  "version": "2.1",

  "ip_list": [
    {
      "name": "UFS_HCI",
      "id": "IP_UFS",
      "base_addr": "0x12000000",
      "size": "0x00100000",
      "bus_if": "APB",
      "has_dma": true,
      "has_sysmmu": true,
      "power_domain": "PD_STORAGE",
      "irq_spi": 47,
      "common_tasks": ["SYSMMU", "SECURITY", "DVFS", "CLK_GATE", "POWER", "RESET", "IRQ"]
    },
    {
      "name": "DMA_Controller",
      "id": "IP_DMA",
      "base_addr": "0x12100000",
      "size": "0x00010000",
      "bus_if": "AXI",
      "has_dma": true,
      "has_sysmmu": true,
      "power_domain": "PD_CORE",
      "irq_spi": 52,
      "common_tasks": ["SYSMMU", "SECURITY", "DVFS", "CLK_GATE", "POWER", "RESET", "IRQ"]
    },
    {
      "name": "UART_0",
      "id": "IP_UART",
      "base_addr": "0x13000000",
      "size": "0x00001000",
      "bus_if": "APB",
      "has_dma": false,
      "has_sysmmu": false,
      "power_domain": "PD_PERI",
      "irq_spi": 60,
      "common_tasks": ["SECURITY", "CLK_GATE", "POWER", "RESET", "IRQ"]
    }
  ],

  "memory_map": {
    "bootrom":  {"base": "0x00000000", "size": "0x00010000"},
    "sram":     {"base": "0x10000000", "size": "0x00100000"},
    "dram":     {"base": "0x40000000", "size": "0x80000000"}
  },

  "interrupt_map": {
    "UFS_HCI":        {"spi": 47, "type": "level", "group": "secure"},
    "DMA_Controller": {"spi": 52, "type": "edge",  "group": "non_secure"},
    "UART_0":         {"spi": 60, "type": "level", "group": "non_secure"}
  },

  "power_domains": {
    "PD_CORE":    {"always_on": true},
    "PD_STORAGE": {"always_on": false, "depends_on": "PD_CORE"},
    "PD_PERI":    {"always_on": false, "depends_on": "PD_CORE"}
  },

  "reset_sequence": [
    "PLL_LOCK",
    "BUS_FABRIC",
    "MEMORY_CONTROLLER",
    "PD_CORE_IPS",
    "PD_STORAGE_IPS",
    "PD_PERI_IPS",
    "CPU"
  ]
}

Config 설계 핵심:

필드 용도
ip_list[].common_tasks CCTV 매트릭스의 N/A 자동 결정 — 목록에 없는 Task = ignore_bins
interrupt_map[].type Edge/Level 불일치 자동 검출
power_domains[].depends_on Power 시퀀스 순서 자동 검증
reset_sequence Reset 해제 순서 SVA 자동 생성

프로젝트 A → Config_A.json, 프로젝트 B → Config_B.json 만 교체하면 동일 TB 프레임워크 재사용

5.3 코드 예시 — Config 기반 UVM Env 자동 구성

class soc_top_env extends uvm_env;
  `uvm_component_utils(soc_top_env)

  // Config (JSON에서 파싱된 데이터)
  soc_config m_cfg;

  // 동적 생성되는 컴포넌트들
  soc_memmap_checker      m_mmap_chk;
  soc_irq_monitor         m_irq_mon;
  soc_power_monitor       m_pwr_mon;
  soc_connectivity_chk    m_conn_chk;
  cctv_coverage           m_cctv_cov;

  // IP별 동적 생성되는 Agent (IP 수에 따라)
  apb_agent               m_apb_agents[$];
  axi_agent               m_axi_agents[$];

  function void build_phase(uvm_phase phase);
    super.build_phase(phase);

    // ---- Config 로드 ----
    if (!uvm_config_db#(soc_config)::get(this, "", "soc_cfg", m_cfg))
      `uvm_fatal("CFG", "soc_config not found")

    // ---- IP 목록 기반 Agent 동적 생성 ----
    foreach (m_cfg.ip_list[i]) begin
      ip_config ip = m_cfg.ip_list[i];

      if (ip.bus_if == "APB") begin
        apb_agent agt = apb_agent::type_id::create(
          $sformatf("apb_%s", ip.name), this);
        m_apb_agents.push_back(agt);
        // Agent에 해당 IP의 주소 범위 설정
        uvm_config_db#(apb_config)::set(this,
          $sformatf("apb_%s", ip.name), "cfg",
          create_apb_cfg(ip.base_addr, ip.size));
      end
      else if (ip.bus_if == "AXI") begin
        axi_agent agt = axi_agent::type_id::create(
          $sformatf("axi_%s", ip.name), this);
        m_axi_agents.push_back(agt);
      end
    end

    // ---- Checker 생성 (Config 기반) ----
    m_mmap_chk = soc_memmap_checker::type_id::create("mmap_chk", this);
    m_irq_mon  = soc_irq_monitor::type_id::create("irq_mon", this);
    m_conn_chk = soc_connectivity_chk::type_id::create("conn_chk", this);

    // Power Domain이 있는 IP가 하나라도 있으면 Power Monitor 생성
    if (m_cfg.has_any_power_domain())
      m_pwr_mon = soc_power_monitor::type_id::create("pwr_mon", this);

    // ---- CCTV Coverage ----
    // Config의 ip_list + common_tasks로 ignore_bins 자동 결정
    m_cctv_cov = cctv_coverage::type_id::create("cctv_cov", this);
    uvm_config_db#(soc_config)::set(this, "cctv_cov", "soc_cfg", m_cfg);

    // ---- Memory Map을 Checker에 전파 ----
    uvm_config_db#(memmap_config)::set(this, "mmap_chk", "cfg",
      build_memmap_from_config(m_cfg));

    // ---- Interrupt Map을 Monitor에 전파 ----
    uvm_config_db#(irq_config)::set(this, "irq_mon", "cfg",
      build_irq_map_from_config(m_cfg));
  endfunction

  // Config에서 Memory Map 구조체 생성
  function memmap_config build_memmap_from_config(soc_config cfg);
    memmap_config mmap = new();
    foreach (cfg.ip_list[i]) begin
      mmap.add_region(
        .name(cfg.ip_list[i].name),
        .base(cfg.ip_list[i].base_addr),
        .size(cfg.ip_list[i].size)
      );
    end
    return mmap;
  endfunction
endclass

자동 구성 흐름:

JSON Config
  ├─→ ip_list → Agent 동적 생성 (APB/AXI 자동 판별)
  ├─→ memory_map → Memory Map Checker 설정
  ├─→ interrupt_map → Interrupt Monitor 설정
  ├─→ power_domains → Power Monitor 생성 여부 결정
  ├─→ common_tasks → CCTV ignore_bins 자동 생성
  └─→ reset_sequence → Reset 순서 SVA 자동 생성

→ 새 프로젝트: JSON만 교체하면 모든 Checker가 자동 재설정

5.4 AI 기반 CCTV 자동화 파이프라인

입력**Phase 1 : IP 프로파일 생성**IP-XACT → 레지스터, 버스, 메모리맵IP Spec → 기능, 보안, 동작 모드결합 → IP별 '필요 Common Task 목록'**Phase 2 : Gap Detection**IP별 필요 Task vs 기존 V-Plan 항목차이 = Gap (누락)FAISS 검색: 유사 IP 검증 이력 참조**Phase 3 : Test Generation**Gap별 테스트 명령어 자동 생성 (mrun)V-Plan bin 자동 생성우선순위 분류 (보안 > 기능 > 성능)**CCTV Gap Report**· IP별 누락 항목 목록· 테스트 실행 명령어· V-Plan 추가 항목· 우선순위별 정렬IPXACTSPECVPLANIP-XACT(구조)IP Spec(시맨틱)기존V-Plan
입력**Phase 1 : IP 프로파일 생성**IP-XACT → 레지스터, 버스, 메모리맵IP Spec → 기능, 보안, 동작 모드결합 → IP별 '필요 Common Task 목록'**Phase 2 : Gap Detection**IP별 필요 Task vs 기존 V-Plan 항목차이 = Gap (누락)FAISS 검색: 유사 IP 검증 이력 참조**Phase 3 : Test Generation**Gap별 테스트 명령어 자동 생성 (mrun)V-Plan bin 자동 생성우선순위 분류 (보안 > 기능 > 성능)**CCTV Gap Report**· IP별 누락 항목 목록· 테스트 실행 명령어· V-Plan 추가 항목· 우선순위별 정렬IPXACTSPECVPLANIP-XACT(구조)IP Spec(시맨틱)기존V-Plan

Gap Report 예시

{
  "ip": "DMA_Controller",
  "gap_task": "sysMMU",
  "gap_detail": "sysMMU Bypass→Enable 전환 시 DMA 동작 검증 누락",
  "source": "IP_Spec_Section_4.3 + IP-XACT_sysMMU_connection",
  "priority": "HIGH",
  "test_cmd": "mrun test --test_name dma_sysmmu_bypass_to_enable --sys_name soc_top",
  "vplan_bin": "DMA.common_task.sysMMU.bypass_enable_transition"
}

5.5 AI 파이프라인 상세 — 실무 구현

Phase 1: IP 프로파일 Embedding

# IP Spec + IP-XACT에서 IP 프로파일 생성
def create_ip_profile(ip_xact_path, ip_spec_path):
    """
    IP-XACT: 구조적 정보 (레지스터, 버스, 메모리맵)
    IP Spec: 시맨틱 정보 (기능 설명, 보안 요구사항, 동작 모드)
    """
    # 구조 정보 추출
    structural = parse_ip_xact(ip_xact_path)
    # 시맨틱 정보 추출 (PDF → 텍스트 → 키워드)
    semantic = extract_from_spec(ip_spec_path, keywords=[
        "secure", "DMA", "interrupt", "clock gating",
        "power domain", "DVFS", "sysMMU", "IOMMU"
    ])

    # IP 프로파일 = 구조 + 시맨틱 결합
    profile = {
        "ip_name": structural["name"],
        "has_dma": structural["has_axi_master"] or "DMA" in semantic,
        "needs_sysmmu": structural["has_axi_master"] and "sysMMU" in semantic,
        "needs_security": any(r["secure"] for r in structural["registers"]),
        "needs_dvfs": "DVFS" in semantic or "frequency scaling" in semantic,
        "needs_clk_gate": "clock gating" in semantic or "idle" in semantic,
        "needs_power": structural["power_domain"] is not None,
        "common_tasks_required": []  # 아래에서 결정
    }

    # Common Task 필요 여부 판단
    task_map = {
        "SYSMMU": profile["needs_sysmmu"],
        "SECURITY": profile["needs_security"],
        "DVFS": profile["needs_dvfs"],
        "CLK_GATE": profile["needs_clk_gate"],
        "POWER": profile["needs_power"],
        "RESET": True,  # 모든 IP에 필수
        "IRQ": structural["has_interrupt"],
    }
    profile["common_tasks_required"] = [k for k, v in task_map.items() if v]

    return profile

Phase 2: FAISS 기반 유사 IP 검색

import faiss
import numpy as np

class IPProfileIndex:
    """
    IP 프로파일을 Embedding하여 FAISS로 인덱싱.
    새 IP가 추가되면 유사 IP의 검증 이력을 참조하여 Gap 예측.
    """
    def __init__(self, embedding_model):
        self.model = embedding_model
        self.index = faiss.IndexFlatL2(768)  # 768-dim embedding
        self.ip_names = []
        self.ip_profiles = []

    def add_ip(self, profile):
        # IP 프로파일을 텍스트로 변환 → Embedding
        text = profile_to_text(profile)
        embedding = self.model.encode(text)
        self.index.add(np.array([embedding], dtype=np.float32))
        self.ip_names.append(profile["ip_name"])
        self.ip_profiles.append(profile)

    def find_similar(self, new_ip_profile, top_k=5):
        """새 IP와 유사한 기존 IP 검색 → 검증 이력 참조"""
        text = profile_to_text(new_ip_profile)
        query = self.model.encode(text)
        distances, indices = self.index.search(
            np.array([query], dtype=np.float32), top_k)
        return [(self.ip_names[i], self.ip_profiles[i], distances[0][j])
                for j, i in enumerate(indices[0])]

# 사용 예시:
# 새 NPU IP 추가 시 → 유사 IP(GPU, DSP)의 검증 이력 참조
# → GPU에 적용된 Common Task가 NPU에도 필요할 가능성 높음

Phase 3: LLM 기반 Gap Detection 프롬프트

def detect_gaps(ip_profile, existing_vplan, similar_ips):
    """
    IP 프로파일 + 기존 V-Plan + 유사 IP 이력 → Gap 발견
    """
    prompt = f"""
    당신은 SoC 검증 전문가입니다.

    [IP 정보]
    IP 이름: {ip_profile['ip_name']}
    필요 Common Tasks: {ip_profile['common_tasks_required']}
    특성: DMA={ip_profile['has_dma']}, sysMMU={ip_profile['needs_sysmmu']},
          Security={ip_profile['needs_security']}

    [기존 V-Plan에서 수행된 검증 항목]
    {format_vplan_items(existing_vplan)}

    [유사 IP의 검증 이력]
    {format_similar_ip_history(similar_ips)}

    [요청]
    1. 필요 Common Tasks 중 V-Plan에 없는 항목(Gap)을 나열하세요.
    2. 각 Gap에 대해:
       - 왜 필요한지 (근거: IP 특성 또는 유사 IP 이력)
       - 구체적 테스트 시나리오 (1-2문장)
       - 우선순위 (HIGH/MEDIUM/LOW)
       - mrun 테스트 명령어
    3. 유사 IP에서 수행되었지만 이 IP에 없는 추가 검증도 제안하세요.

    JSON 형식으로 출력하세요.
    """
    return llm_call(prompt)

AI 파이프라인 핵심 차별점:

기존 (IP-XACT only):
  "이 IP에 AXI Master 포트가 있다" → 구조적 사실만 알 수 있음
  "이 IP에 sysMMU 검증이 필요한가?" → 판단 불가

Hybrid (IP-XACT + Spec + FAISS + LLM):
  IP-XACT: AXI Master 포트 존재 확인
  IP Spec: "sysMMU를 통해 메모리 접근" 기술 발견
  FAISS: 유사 IP(GPU)에서 sysMMU 검증이 수행된 이력 참조
  LLM: 종합 판단 → "sysMMU 검증 필요, 특히 Bypass→Enable 전환 중요"

5.6 Gap Report → V-Plan 반영 실무 워크플로우

**Step 1 · CCTV Gap Report 생성** (AI 파이프라인)DMA × sysMMU_bypass_enable = NOT_TESTEDGPU × Security_TZPC = NOT_TESTEDUSB × DVFS_transition = NOT_TESTEDTotal: 12 gaps**Step 2 · 우선순위 분류** (자동)HIGH (보안/안정성): GPU × Security_TZPC,  DMA × sysMMU_bypass_enableMEDIUM (기능): USB × DVFS_transition · ...LOW (성능): ...**Step 3 · V-Plan bin 자동 생성**vplan_additions.json:{ feature: 'DMA.common_task.sysMMU',  bin: 'bypass_enable_transition',  test: 'dma_sysmmu_bypass_test',  priority: 'HIGH' }, ...**Step 4 · 테스트 명령어 자동 생성**mrun test --test_name dma_sysmmu_bypass_test --sys_name soc_topmrun test --test_name gpu_security_tzpc_test --sys_name soc_top**Step 5 · IP 담당 엔지니어 배포**담당자별 Gap 목록 + 테스트 명령어 + 우선순위**Step 6 · 실행 후 CCTV 매트릭스 갱신**cctv_cov.record_result(IP_DMA, TASK_SYSMMU, RESULT_PASS)→ Coverage 재집계 → Gap 감소 확인
**Step 1 · CCTV Gap Report 생성** (AI 파이프라인)DMA × sysMMU_bypass_enable = NOT_TESTEDGPU × Security_TZPC = NOT_TESTEDUSB × DVFS_transition = NOT_TESTEDTotal: 12 gaps**Step 2 · 우선순위 분류** (자동)HIGH (보안/안정성): GPU × Security_TZPC,  DMA × sysMMU_bypass_enableMEDIUM (기능): USB × DVFS_transition · ...LOW (성능): ...**Step 3 · V-Plan bin 자동 생성**vplan_additions.json:{ feature: 'DMA.common_task.sysMMU',  bin: 'bypass_enable_transition',  test: 'dma_sysmmu_bypass_test',  priority: 'HIGH' }, ...**Step 4 · 테스트 명령어 자동 생성**mrun test --test_name dma_sysmmu_bypass_test --sys_name soc_topmrun test --test_name gpu_security_tzpc_test --sys_name soc_top**Step 5 · IP 담당 엔지니어 배포**담당자별 Gap 목록 + 테스트 명령어 + 우선순위**Step 6 · 실행 후 CCTV 매트릭스 갱신**cctv_cov.record_result(IP_DMA, TASK_SYSMMU, RESULT_PASS)→ Coverage 재집계 → Gap 감소 확인

5.7 TB Top Release 프로세스 상세

Phase 1: RTL 수령 및 Config 생성 (1-2일)
  ☐ RTL freeze 확인 (feature freeze, not bug-free)
  ☐ IP-XACT 메타데이터 수령
  ☐ SoC Config JSON 생성/갱신
    - 새 IP 추가, 삭제된 IP 제거
    - 주소 변경 반영
    - 인터럽트 맵 갱신
  ☐ Config 리뷰 (설계팀과 크로스체크)

Phase 2: TB Top 자동 구성 (1일)
  ☐ TB Top Generator 실행 → 환경 자동 생성
  ☐ 새 IP에 대한 Agent stub 확인
  ☐ Memory Map Checker 설정 갱신 확인
  ☐ Interrupt Monitor 맵 갱신 확인
  ☐ CCTV ignore_bins 자동 갱신 확인

Phase 3: Sanity 검증 (2-3일)
  ☐ Compile 성공
  ☐ Elaboration 성공
  ☐ Boot test (BootROM 실행 → DRAM 접근)
  ☐ 각 IP Base Address R/W (Memory Map 정상)
  ☐ 각 IP 인터럽트 발생/클리어 (IRQ Routing 정상)

Phase 4: Common Task 시나리오 배포 (1-2일)
  ☐ CCTV Gap Report 생성 (AI 파이프라인)
  ☐ 이전 프로젝트 대비 새 Gap 식별
  ☐ IP별 담당자에게 Gap 목록 + 테스트 배포
  ☐ V-Plan 갱신

Phase 5: Release (1일)
  ☐ TB Top 환경 패키지화
  ☐ Release Note 작성 (변경사항, 알려진 이슈)
  ☐ 각 IP DV 엔지니어에게 환경 배포
  ☐ Kick-off 미팅 (환경 사용법, CCTV 목표 공유)

→ 총 ~1주일, 이후 각 IP 팀이 Common Task 검증 수행
→ TB Top Lead 역할: 이 프로세스 전체를 설계하고 운영 + CCTV 추적

5.8 면접 종합 Q&A

Q: TB Top 환경을 어떻게 설계했고, 어떤 가치가 있었나?

"프로젝트 공통 프레임워크로 설계했다. IP 목록, 메모리 맵, 인터럽트 맵을 Config(JSON)으로 정의하면 TB Top Generator 가 자동으로 환경을 구성한다. Common Task Checker Layer 를 내장하여 Connectivity, Memory Map, Interrupt, Power 검증을 자동 수행한다. 이 환경을 여러 SoC 프로젝트에 배포하여 프로젝트마다 TB 를 처음부터 만드는 비용을 제거했다."

Q: DVCon 논문의 CCTV 방법론을 설명하라.

"SoC 내 모든 IP 에 공통적으로 필요한 검증 항목 (sysMMU, Security, DVFS 등) 이 빠짐없이 수행되었는지 자동 추적하는 방법론이다. IP-XACT (구조) + IP Spec (시맨틱) 의 Hybrid Extraction 으로 IP 별 필요 Common Task 를 판단하고, 기존 V-Plan 과 비교하여 Gap 을 자동 발견한다. LLM 이 테스트 명령어까지 생성한다. Project A 에서 293 개 (2.75%), Project B 에서 216 개 (4.99%) 의 Gap 을 발견했고, Human Oversight 가 96.30% 임을 정량적으로 증명했다."

Q: 소규모 프로젝트의 Gap Rate 가 더 높은 이유는?

"엔지니어 수가 적어 교차 검증이 부족하기 때문이다. 대규모에서는 IP 별 전담 인력이 있어 상호 검토가 자연스럽지만, 소규모에서는 한 사람이 여러 IP 를 담당하여 누락 가능성이 높아진다. 이것이 '자동화가 소규모에서 오히려 더 필요하다' 는 논문의 핵심 인사이트이다."

5.9 연습 — 한 번 더 손으로 풀어보기

문제 1: Config 에서 CCTV ignore_bins 자동 도출

다음 JSON Config 의 IP 3 개에 대해 CCTV 매트릭스를 그리고, ignore_bins 가 되어야 할 셀을 표시하라.

{
  "ip_list": [
    {"name": "GPU",  "has_dma": true, "has_sysmmu": true,
     "common_tasks": ["SYSMMU","SECURITY","DVFS","CLK_GATE","POWER","RESET","IRQ"]},
    {"name": "I2C",  "has_dma": false, "has_sysmmu": false,
     "common_tasks": ["SECURITY","CLK_GATE","RESET","IRQ"]},
    {"name": "Temp_Sensor", "has_dma": false, "has_sysmmu": false,
     "common_tasks": ["RESET"]}
  ]
}

사고과정:

1. 매트릭스 (✅ = 검증 필요, ⬜ = ignore_bins):

              | SYSMMU | SECURITY | DVFS | CLK_GATE | POWER | RESET | IRQ |
   GPU        |   ✅   |    ✅    |  ✅  |    ✅    |  ✅   |  ✅   | ✅  |
   I2C        |   ⬜   |    ✅    |  ⬜  |    ✅    |  ⬜   |  ✅   | ✅  |
   Temp_Sensor|   ⬜   |    ⬜    |  ⬜  |    ⬜    |  ⬜   |  ✅   | ⬜  |

2. ignore_bins 수: GPU 0, I2C 3, Temp_Sensor 6 → 총 9
3. 유효 조합: 21 - 9 = 12 → 이 12개가 모두 PASS여야 closure
4. 코드:
   ignore_bins i2c_no_mmu = binsof(cp_ip) intersect {IP_I2C}
                           && binsof(cp_task) intersect {TASK_SYSMMU};
   // ... (총 9개)

→ Config의 common_tasks 필드에서 자동으로 도출 가능
→ 새 프로젝트에서 Config만 교체하면 ignore_bins도 자동 갱신

문제 2: AI Gap Detection 정확도 분석

AI 파이프라인이 다음 결과를 냈다. False Positive 와 True Positive 를 분류하고, 정밀도 (Precision) 를 계산하라.

AI가 발견한 Gap 목록 (10개):
1. DMA × sysMMU_bypass_enable       → 실제 Gap (V-Plan에 없음)
2. GPU × Security_TZPC              → 실제 Gap
3. UART × sysMMU                    → False Positive (UART에 DMA 없음, N/A)
4. UFS × DVFS_transition            → 실제 Gap
5. I2C × Power_domain               → False Positive (I2C는 Always-ON)
6. Crypto × sysMMU                  → False Positive (내부 메모리만 사용)
7. Ethernet × CLK_GATE_wakeup       → 실제 Gap
8. Display × IRQ_edge_level         → 실제 Gap
9. SPI × DVFS                       → False Positive (고정 클럭 IP)
10. USB × Security_DFU              → 실제 Gap

사고과정:

1. TP: #1, #2, #4, #7, #8, #10 = 6개
   FP: #3, #5, #6, #9 = 4개

2. Precision = TP / (TP + FP) = 6 / 10 = 60%

3. False Positive 원인:
   #3, #5: IP-XACT 정보 부족 (DMA / Power 정보)
   #6, #9: Spec 시맨틱 추출 부족 ("internal memory", "fixed clock")
   → 개선: IP-XACT 파싱 정밀도 + Spec keyword 확장 + FAISS cross-validation

4. 실무 관점:
   Precision 60% 는 낮아 보이지만, 10 개 중 6 개가 실제 Critical Gap
   → 자동화 없이는 이 6 개를 모두 놓칠 수 있었음
   → False Positive 는 엔지니어 리뷰에서 빠르게 제거 가능
   → Recall (실제 Gap 발견율) 이 더 중요한 지표

문제 3: TB Top Release 시 Config 변경 영향 분석

이전 프로젝트에서 새 프로젝트로 Config 를 갱신할 때, 다음 변경사항이 TB Top 에 미치는 영향을 분석하라.

변경사항:
  1. 새 IP 추가: NPU (Neural Processing Unit), AXI, DMA 지원
  2. 기존 IP 제거: I2C_1 (사용하지 않음)
  3. UFS Base Address 변경: 0x1200_0000 → 0x1400_0000
  4. Interrupt 변경: DMA SPI 52 → SPI 55

사고과정:

1. NPU 추가:
   Agent (AXI), MMAP, IRQ Monitor, Connectivity, CCTV row 추가
   FAISS: 유사 IP(GPU) 검색 → 검증 이력 전이
   자동: Config 변경만으로 모든 layer 자동 갱신
   수동: NPU 전용 시나리오 (AI 추론 정확도 등)

2. I2C_1 제거:
   Agent / MMAP / CCTV row 자동 제거
   주의: 해당 주소에 새 IP 가 배치됐는지 확인

3. UFS Base 변경:
   MMAP Checker 자동 갱신 (Config 기반이라면)
   하드코딩된 0x1200_0000 사용 테스트는 갱신 필요

4. DMA SPI 변경:
   IRQ Monitor + Connectivity SVA 자동 재생성
   하드코딩된 SPI[52] 테스트는 갱신 필요

총 영향:
  Config 기반: JSON 갱신 → Generator 재실행 → 대부분 자동
  수동 필요: NPU 전용 시나리오, 하드코딩된 주소/SPI 수정
  CCTV: NPU row 추가, I2C_1 row 제거 → Gap Report 재생성


6. 흔한 오해 와 DV 디버그 체크리스트

흔한 오해

❓ 오해 1 — 'AI 가 커버리지 갭과 테스트를 자동 생성하면 DV 엔지니어 불필요'

실제: AI 는 구조 정보 (IP-XACT, 스펙 문서) 에서 패턴을 생성하지만, Clock Domain 경계·비결정적 타이밍·하드웨어 특화 제약은 DV 엔지니어가 검토하고 보완해야 합니다. AI제안기, 사람은 quality gate.
왜 헷갈리는가: 소프트웨어 테스트 자동화와 달리 하드웨어 검증은 타이밍·물리적 제약이 존재하는데, AI 도구의 마케팅이 이 차이를 과소 설명.

❓ 오해 2 — 'Config 기반 TB 는 처음 만들 때만 어렵다'

실제: Layer 2 (Generator) 의 초기 추상화 비용 이 크지만, 다음 프로젝트부터 ROI 가 폭발적으로 좋아집니다. 8 개월 → 1 주일. DVCon 의 핵심 메시지.
왜 헷갈리는가: 단일 프로젝트만 보면 "그냥 만든 게 빠르다" 가 맞지만, 멀티 프로젝트에서는 정반대.

❓ 오해 3 — 'AI 가 만든 시퀀스는 multi-clock 환경에서도 그대로 동작'

실제: LLM 은 IP-XACT 구조 정보에서 clock domain 경계를 추론하지 못합니다. AI 가 생성한 시퀀스 초안은 단일 클럭 가정 하에 fork/join 패턴을 사용하는 경우가 많아, 리뷰 없이 적용하면 CDC 무검증 상태가 됩니다.
왜 헷갈리는가: 코드가 컴파일되고 동작하는 것처럼 보이기 때문.

❓ 오해 4 — 'AI Precision 60% 는 못 쓸 수준'

실제: Recall (실제 Gap 의 발견율) 이 더 중요합니다. False Positive 는 15 분 인간 리뷰 로 제거되지만, 발견 못한 Gap 은 silicon 에서 만나게 됩니다. 60% Precision + 90% Recall 이면 자동화의 가치가 큼.
왜 헷갈리는가: 분류 모델 평가에서 Precision 만 강조되는 일반 ML 직관.

❓ 오해 5 — 'IP-XACT 만 잘 정리하면 자동화 끝'

실제: IP-XACT 는 구조 만 담습니다. "이 IP 에 보안 검증이 필요한가?", "DVFS 를 지원하는가?" 같은 시맨틱 판단은 IP Spec 의 텍스트에서만 추출 가능. 그래서 Hybrid extraction.
왜 헷갈리는가: IP-XACT 가 machine readable 이라 모든 정보를 담고 있을 것 같은 인상.

DV 디버그 체크리스트

증상 1차 의심 어디 보나
soc_config not found UVM_FATAL Config 파일 로드 실패 uvm_config_db::set 의 호출 위치 / JSON 경로
IP 추가 후 agent 가 안 만들어짐 Generator 가 bus_if 분기 못 처리 Generator 의 APB/AXI dispatch + Config 의 bus_if
MMAP checker 가 새 IP 무시 build_memmap_from_config 미호출 build_phase 의 config_db propagation
CCTV ignore_bins 가 자동 갱신 안 됨 covergroup 이 build 시점에 freeze covergroup 인스턴스화를 Config 로드 이후로 이동
IRQ SPI 변경했는데 옛날 인덱스가 SVA 에 남음 reset_seq SVA 가 코드 내장 Generator 의 SVA emit 단계 / 컴파일 캐시
AI Gap Report 의 50%+ 가 False Positive Phase 1 IP profile 정확도 IP-XACT 파싱 + Spec keyword 추출 + FAISS top-k
AI 생성 시퀀스가 multi-clock 환경에서 race clock_domain 정보 누락 Config 의 clock_domain 필드 + virtual sequencer fork/join
Project A → Project B 이전 시 컴파일 실패 Layer 2 (Generator) 가 project-specific 누설 Layer 분리 위반 — IP 이름 hardcoding 검색

7. 핵심 정리 (Key Takeaways)

  • TB Top 3 층: Config (project-specific) / Generator (project-agnostic) / UVM Env (runtime). 프로젝트 교체 = Config 만 교체.
  • AI 3 Phase: Hybrid Extraction (IP-XACT + Spec) → FAISS 유사 IP 검색 → LLM Gap detection + 명령 생성. Recall 중심으로 평가.
  • AI 한계: silent corruption / race / CDC / 비결정적 타이밍은 인간 검토 필수. AI제안기, 사람은 quality gate.
  • 정량 결과: Project A 293 gaps (2.75%), Project B 216 gaps (4.99%), Human Oversight 96.30%, New IP/Feature 누락 -40%.
  • Workflow: spec change → Config 갱신 → Generator → AI Gap report → 인간 리뷰 → mrun → CCTV 매트릭스 갱신.

실무 주의점 — AI 생성 시퀀스의 Clock Domain 무시

현상: AI 가 생성한 시퀀스가 단일 클럭 기준으로 작성되어, 멀티 클럭 도메인 TB 에서 적용 시 서로 다른 도메인 에이전트에 동기화 없이 동시 구동되어 데이터 레이스가 발생한다.

원인: LLM 은 IP-XACT 구조 정보에서 clock domain 경계를 추론하지 못한다. AI 가 생성한 시퀀스 초안은 단일 클럭 가정 하에 fork/join 패턴을 사용하는 경우가 많아, 리뷰 없이 그대로 적용하면 CDC 무검증 상태가 된다.

점검 포인트: AI 생성 시퀀스에서 각 에이전트 start_item / finish_item 앞에 해당 에이전트의 클럭 도메인을 명시했는지 확인. TB Top Config JSON 의 clock_domain 필드가 에이전트 연결과 일치하는지 대조.

7.1 자가 점검

🤔 Q1 — Config-driven TB 설계 (Bloom: Apply)

JSON config 에 어떤 필드 가 있어야 TB top 자동 생성?

정답
  • IP list: instance name, type, parameters.
  • Interface map: port → bus connections.
  • Clock domain: 각 IP 의 clock_domain field.
  • Base address: BAR / register map.
  • Interrupt map: SPI / MSI number.
  • Common Task list: 각 IP 가 받을 task.

Generator 가 이 JSON 으로 UVM agent / scoreboard / connect 자동 작성.

🤔 Q2 — AI 생성 결과 검증 (Bloom: Analyze)

AI 가 sequence 생성. 어떻게 human review 효율?

정답

3-step: 1. Lint: 문법 / UVM 패턴 / 명명 규칙 자동 체크. 50% reject. 2. Diff: 기존 sequence 와 비교 — 새로운 부분만 highlight. 인간 부담 ↓. 3. Test pilot: AI 생성 sequence 를 short regression → fail / pass 로 신뢰도 측정.

Final human review = high-confidence sequence 만. 시간 10× 단축.

🤔 Q3 — AI 자동화 ROI (Bloom: Evaluate)

8 개월 → 1 주. 과대 평가 가능성?

정답

Caveats: - First-time setup: 자동화 인프라 (Generator, AI prompt template) 구축 수개월. - Maintenance: spec 변경 시 Generator update 필요. - Edge case: 자동 생성된 90% 의 확장 가능, 10% 는 수동 작성.

실제 ROI: 첫 SoC 8 개월, 두 번째 3 주, 세 번째부터 1 주. 누적 으로 10×+ 효과.

7.2 출처

External - DVCon 2025 AI-assisted Verification papers - Synopsys VC Spyglass AI / Cadence Verisium AI - ChipNeMo (NVIDIA), 2023


다음 모듈

Module 04 — Quick Reference Card: 5 축, CCTV 매트릭스, 정량 데이터, 디버그 체크리스트를 한 장에 정리.

퀴즈 풀어보기 →