Verilog Simulator 사용 가이드
Verilog Simulator는 설치 없이 브라우저에서 여러 Verilog 소스(테스트벤치, DUT, `include 헤더 등)를 편집하고, Icarus Verilog WASM으로 시뮬한 뒤 VCD 파형을 Surfer 뷰어에서 보는 도구입니다. 가짜(휴리스틱) 파형은 넣지 않습니다. 시뮬이 실제로 VCD를 만들었을 때만 Surfer와 워크스페이스가 갱신됩니다.
👉 도구 바로가기: Verilog Simulator 열기
이렇게 쓰면 됩니다 (요약 순서)
- 상단 워크스페이스에서 Sample(기본 시뮬 예제) 또는 Lint Sample Eg(의도적 구문 오류·Slang 린트 체험)를 고릅니다(또는 새 워크스페이스로 시작).
- 왼쪽 탐색기에서 파일을 열고 Monaco 에디터에서 수정합니다.
- 왼쪽 활동 표시줄의 재생(Run) 으로 시뮬하거나, 린트(Slang WASM) 아이콘으로
.v/.vh정적 검사를 돌립니다. - 아래 터미널에서 로그를 확인하고, 오른쪽 Surfer에서 파형을 봅니다.
- 시뮬이 성공하면
$dumpfile에 적은 이름의 .vcd 파일이 탐색기에 생기고, 에디터에서 텍스트로 내용을 볼 수 있습니다.
이 도구로 무엇을 할 수 있나요?
- 기본 예제(Sample) — tb.v, define.vh, dut_cnt.v, dut_rsync.v 네 파일.
`defineCNT_WIDTH, CLK_HALF_NS 를 바꾸면 실제 시뮬 파형·터미널$display가 함께 바뀝니다. - 여러 워크스페이스 — 과제·실험 단위로 나누어 두고, 활성 워크스페이스만 Run·Lint에 사용됩니다. 처음부터 Sample / Lint Sample Eg 두 프리셋이 있습니다.
- 파일 가져오기·보내기 — 로컬 업로드, ZIP 가져오기(새 워크스페이스 추가), ZIP 보내기(현재 워크스페이스 다운로드).
- VCD — 시뮬 결과는 Surfer뿐 아니라 워크스페이스 안의 .vcd 파일로도 남깁니다(실행 전에는 기본적으로 없고, 성공한 Run 뒤 나타납니다).
- Slang 린트 — Slang WASM으로 워크스페이스
.vh는 단독 검사, 모든.v는define.vh등 헤더를 앞에 붙이고 워크스페이스에 있는`include는 생략 처리한 뒤 한 번에 합쳐 검사합니다(tb.v는 맨 뒤). DUT가 먼저 와도 맞도록timescale 1ns / 1ps한 줄을 주입하고, 각.v에 있던 선행`timescale은 제거합니다. 결과는slang_lint_report.txt에 덤프됩니다.
강의·포트폴리오용 짧은 모듈·tb 에 적합합니다. 업체 FPGA 플로우·타이밍·UVM 을 대체하지는 않습니다.
화면 구성 (VS Code 스타일)
상단 워크스페이스 바
| 요소 | 설명 |
|---|---|
| 워크스페이스 드롭다운 | Run에 쓰일 활성 워크스페이스 선택 |
| 이름 바꾸기 | 현재 워크스페이스 표시 이름 변경 |
| 새 워크스페이스 | tb.v만 있는 새 세트(기본 $dumpfile("wave.vcd") / $dumpvars 포함) |
| 워크스페이스 닫기 | 목록에서 제거(마지막 하나는 닫을 수 없음) |
| 새 파일 | 이름 입력으로 .v / .vh / .vcd 추가 |
| 파일 삭제 | 현재 편집 중인 파일 삭제(확인). 마지막 파일 하나는 삭제 불가 |
| 업로드 | 여러 파일 한 번에(허용 이름만) |
| ZIP 가져오기 | 압축 해제 후 새 워크스페이스로 추가 |
| ZIP 보내기 | 활성 워크스페이스를 ZIP으로 저장 |
파일 이름 규칙: 영문·숫자·.·_·- 만 사용하고, 확장자는 .v / .vh / .vcd 만 허용됩니다.
왼쪽 활동 표시줄
| 아이콘 | 설명 |
|---|---|
| 파일 모양 | 탐색기 표시/숨김 |
| 돋보기 | 편집기에서 찾기(Monaco) |
| 재생 | 시뮬 실행(Run) |
| 네 개 블록 | 하단 패널(터미널·출력·문제) |
탐색기·에디터 탭
- 트리에서 파일을 누르면 탭이 열립니다.
- 탭의 × 는 탭만 닫기입니다. 파일은 탐색기에 남습니다.
- 탭 제목 줄을 드래그하면 순서를 바꿀 수 있고, 탭 줄 오른쪽 빈 영역에 놓으면 맨 뒤로 보냅니다.
- .vcd 는 에디터에서 일반 텍스트로 열립니다.
오른쪽 Surfer
시뮬이 VCD 문자열을 만들었을 때만 그 내용이 Surfer로 전달됩니다. 로딩이 늦으면 파형이 비어 보일 수 있어 Run 을 한 번 더 눌러 볼 수 있습니다.
하단 패널
- TERMINAL — Run 로그(시뮬 단계, 성공/실패, Surfer 전송 안내).
- OUTPUT — 이번 Run의 요약(예: WASM으로 VCD 생성, VCD 없음).
- PROBLEMS — API 등에서 온 오류 텍스트.
상태 표시줄
Icarus WASM / 시뮬 API / VCD 없음 중 마지막 Run 결과에 맞는 표시가 나옵니다.
Run을 누른 뒤 터미널에 나오는 흐름
성공 시 대략 다음 순서입니다.
- Run 시작, 활성 워크스페이스 이름.
- Icarus WASM 으로 시뮬이 끝나면:
VCD 생성됨,engine: icarus-wasm등. - 시뮬·VCD 생성 단계를 정상적으로 마쳤습니다.
- 워크스페이스에
$dumpfile파일명(기본wave.vcd)으로 텍스트 반영했다는 안내. - Surfer로 postMessage 전송 안내.
WASM이 끝났는데 VCD가 비어 있으면 터미널에 덤프가 감지되지 않았다는 안내가 나옵니다. $dumpfile / $dumpvars 가 testbench에 있는지 확인하세요.
시뮬 API를 쓰는 배포에서는 WASM 다음에 API가 호출될 수 있습니다. VCD가 전혀 없으면 Surfer는 갱신되지 않고, 터미널에 그 사실이 표시됩니다.
시뮬에 넘어가는 파일과 .vcd
- Run에는 .v 와 .vh 만 시뮬레이터(MEMFS)로 전달됩니다.
- 워크스페이스에 .vcd 를 올려 두어도 시뮬 입력으로는 쓰이지 않습니다. 참고·편집·ZIP 포함용입니다.
- 시뮬이 성공하면 생성된 VCD 내용이
tb.v의$dumpfile("이름")에 맞는 파일명으로 워크스페이스에 덮어쓰기·추가되고, 해당 탭이 열립니다.tb.v가 아니면 이름 추출이 어려워 기본wave.vcd를 씁니다.
시뮬이 어떻게 돌아가나요? (기술 요약)
- 브라우저 Icarus WASM — 번들이 있으면 방문자 PC·브라우저 안에서 ivlpp.wasm(파일당 Web Worker) → ivl → vvp 로 돌아갑니다. 일반 SGDH 웹 호스팅 서버가 대신 시뮬하지 않습니다.
- 선택: 원격 시뮬 API — 운영자가 API URL을 넣은 경우에만, 그 서버가 iverilog + vvp 를 실행할 수 있습니다.
- VCD 없음 — 둘 다 VCD를 주지 않으면 Surfer는 이전 화면을 유지할 수 있고, 가짜 파형으로 채우지 않습니다.
ivlpp·lib/·-F 플래그 등 자세한 파이프라인은 개발·배포 쪽 이슈이므로, 일반 사용에서는 Run 로그만 봐도 충분한 경우가 많습니다.
코드 작성 팁
- 최상위 모듈 이름은 기본 tb 입니다.
- Surfer·워크스페이스 VCD를 쓰려면 testbench에
$dumpfile("…")와$dumpvars를 넣으세요. 새 워크스페이스 tb.v 에는 이미wave.vcd예시가 들어 있습니다. - 여러 .v 는 같은 워크스페이스에 두고
`include "파일명"으로 묶을 수 있습니다. - 샘플에서 CNT_WIDTH, CLK_HALF_NS 를 바꾼 뒤 Run 하면 파형·
$display가 함께 바뀌는지 확인해 보세요.
개인정보에 대한 짧은 안내
- 기본은 시뮬이 방문자 브라우저에서 동작한다는 전제입니다.
- 원격 시뮬 API가 켜진 경우에만 해당 서버가 코드를 실행할 수 있습니다.
- 자세한 처리 방침은 사이트 개인정보처리방침 등을 참고하세요.
자주 묻는 질문
Q. 파형이 비어 있어요.
A. Surfer 로딩 지연일 수 있어 Run 을 다시 눌러 보세요. 터미널에 VCD 오류가 있거나 OUTPUT에 VCD가 없다고 하면 $dumpfile / $dumpvars 와 시뮬 성공 여부를 확인하세요.
Q. Run 전에는 wave.vcd가 없다가, Run 후에 생깁니다.
A. 의도된 동작입니다. 시뮬이 성공해 VCD가 생성된 뒤 탐색기·에디터에 반영됩니다.
Q. 실제 칩과 같은 결과인가요?
A. 교육·프로토타입 용도에 가깝습니다. 합성·타이밍·P&R과는 별개입니다.
Q. 오프라인에서 쓸 수 있나요?
A. 브라우저·CDN·WASM·Surfer 로딩이 필요합니다. 완전 오프라인은 보장하지 않습니다.