이 디렉토리에는 JSilicon 코어를 위한 완전한 UVM (Universal Verification Methodology) 환경이 포함되어 있습니다. Synopsys VCS와 Verdi를 기반으로 구성되었습니다.
📖 빠른 시작: QUICKSTART.md를 참조하세요!
sim/
├── jsilicon_if.sv # Interface 정의
├── jsilicon_transaction.sv # Transaction/Sequence Item
├── jsilicon_driver.sv # Driver
├── jsilicon_monitor.sv # Monitor
├── jsilicon_agent.sv # Agent
├── jsilicon_scoreboard.sv # Scoreboard
├── jsilicon_env.sv # Environment
├── jsilicon_sequences.sv # Sequences (Reset, Manual, CPU, Random)
├── jsilicon_test.sv # Tests
├── jsilicon_pkg.sv # UVM Package
├── jsilicon_tb_top.sv # Testbench Top Module
├── Makefile # Makefile for VCS
├── run.sh # 실행 스크립트 (bash)
├── setup_vcs.sh # VCS 환경 설정 (bash)
├── setup_vcs.csh # VCS 환경 설정 (csh/tcsh)
├── QUICKSTART.md # 빠른 시작 가이드
└── README.md # 이 파일 (상세 문서)
- Manual mode (mode=0)에서 ALU 연산 테스트
- 모든 ALU 연산 (ADD, SUB, MUL, DIV, MOD, EQ, GT, LT) 검증
test.py의manual_test_cases를 기반으로 함
- CPU mode (mode=1)에서 명령어 실행 테스트
- ROM 프로그램 실행 확인
- PC wrap-around 테스트
- Manual mode와 CPU mode 모두 테스트
- 가장 포괄적인 테스트
- 랜덤 입력으로 DUT 검증
- 10-50개의 랜덤 트랜잭션 생성
시뮬레이션을 실행하기 전에 VCS 환경을 설정해야 합니다:
# VCS 환경 설정 (bash)
source /path/to/synopsys/vcs/bin/synopsys_sim.setup
# 또는 csh/tcsh
source /path/to/synopsys/vcs/cshrc/synopsys_sim.setup파형 분석을 위해 Verdi를 사용하려면:
# Verdi 환경 설정 (bash)
export VERDI_HOME=/path/to/synopsys/verdi
export PATH=$VERDI_HOME/bin:$PATH
# 또는 csh/tcsh
setenv VERDI_HOME /path/to/synopsys/verdi
setenv PATH ${VERDI_HOME}/bin:${PATH}# 스크립트 실행 권한 부여 (최초 1회)
chmod +x run.sh
# 도움말 보기
./run.sh help
# 모든 테스트 실행
./run.sh run_all
# 특정 테스트 실행
./run.sh run jsilicon_manual_test
./run.sh run jsilicon_cpu_test
./run.sh run jsilicon_full_test
./run.sh run jsilicon_random_test
# Verdi GUI 모드로 실행
./run.sh gui
./run.sh gui jsilicon_manual_test
# 파형 뷰어 열기 (Verdi)
./run.sh wave
# 클린
./run.sh clean# 컴파일 (VCS로 컴파일)
make compile
# 컴파일 및 시뮬레이션
make simulate
# 특정 테스트 실행
make TEST=jsilicon_manual_test simulate
make TEST=jsilicon_cpu_test simulate
make TEST=jsilicon_full_test simulate
make TEST=jsilicon_random_test simulate
# 단축 명령어
make test_manual
make test_cpu
make test_full
make test_random
# Verdi GUI 모드
make verdi
# Interactive 모드 (UCLI)
make interactive
# 파형 보기 (Verdi)
make wave
# Coverage 리포트 생성
make cov
# Verbosity 레벨 변경
make VERBOSITY=UVM_HIGH simulate
# 클린
make clean
# 도움말
make help# 컴파일
vcs -full64 -sverilog -timescale=1ns/1ps -ntb_opts uvm-1.2 \
-debug_access+all -kdb -lca -CFLAGS -DVCS \
../src/*.v jsilicon_if.sv jsilicon_pkg.sv jsilicon_tb_top.sv \
-top jsilicon_tb_top -o simv
# 시뮬레이션 실행
./simv +UVM_TESTNAME=jsilicon_full_test +UVM_VERBOSITY=UVM_MEDIUM -l simv.log
# Verdi와 함께 실행
./simv +UVM_TESTNAME=jsilicon_full_test +UVM_VERBOSITY=UVM_MEDIUM -gui=verdi- Synopsys VCS (2019.06 이상 권장)
- UVM 1.2 내장
- Full64 모드 지원
- SystemVerilog 지원
- Verdi (파형 분석 및 디버깅)
- FSDB 파형 포맷 지원
- 고급 디버깅 기능
- UVM 1.2 (VCS에 내장되어 제공됨)
-ntb_opts uvm-1.2옵션으로 자동 활성화
simv: VCS 시뮬레이션 실행 파일simv.log: 시뮬레이션 로그 파일simv.vdb/: Coverage 데이터베이스
jsilicon.fsdb: Verdi FSDB 파형 파일 (기본)jsilicon_uvm.vcd: VCD 파형 파일 (fallback)
csrc/: 컴파일된 C 소스DVEfiles/: DVE 관련 파일verdiLog/: Verdi 로그 파일novas.rc,novas.conf: Verdi 설정 파일
시뮬레이션 중 UVM 메시지가 출력되며, 최종적으로 Scoreboard가 통계를 출력합니다:
========================================
Scoreboard Final Report
========================================
Total Transactions: 36
Passed: 12
Failed: 0
*** TEST PASSED ***
========================================
Verdi로 FSDB 파형을 확인할 수 있습니다:
# Verdi로 FSDB 열기
verdi -ssf jsilicon.fsdb -nologo
# 또는 스크립트 사용
./run.sh wave
# Makefile 사용
make wave# Coverage 리포트 생성
make cov
# 리포트 보기
firefox urgReport/dashboard.html| 특징 | cocotb (test.py) | UVM (sim/) |
|---|---|---|
| 언어 | Python | SystemVerilog |
| 시뮬레이터 | Icarus, Verilator 등 | VCS, Verdi |
| 구조 | 단일 테스트 파일 | 모듈화된 컴포넌트 |
| 파형 | VCD | FSDB (고성능) |
| 재사용성 | 제한적 | 높음 |
| 확장성 | 제한적 | 매우 높음 |
| 학습 곡선 | 낮음 | 높음 |
| 업계 표준 | 새로운 방식 | 검증된 방법론 |
| 성능 | 중간 | 높음 |
| 비용 | 무료 | 상용 (라이선스 필요) |
VCS 환경이 제대로 설정되지 않았을 수 있습니다:
# VCS 설정 확인
which vcs
# VCS 버전 확인
vcs -ID
# 환경 변수 확인
echo $VCS_HOME
# 설정 스크립트 실행
source /path/to/vcs/bin/synopsys_sim.setupVCS 2019.06 이상에서는 -ntb_opts uvm-1.2 옵션으로 자동 로드됩니다. 에러가 발생하면:
# VCS UVM 버전 확인
vcs -ntb_opts uvm-1.2 -ID
# 수동으로 UVM 경로 지정 (필요시)
export UVM_HOME=$VCS_HOME/etc/uvm-1.2Verdi가 없어도 시뮬레이션은 정상 작동합니다. VCD 파일이 생성되므로 다른 뷰어를 사용할 수 있습니다:
# GTKWave 사용
gtkwave jsilicon_uvm.vcd$fsdbDumpfile 에러가 발생하면 Verdi/FSDB 라이브러리가 없는 것입니다:
- VCD 모드로 폴백되어 자동으로 동작합니다
- Verdi 라이선스를 확인하세요
# RTL 파일 경로 확인
ls -l ../src/*.v
# Syntax 체크
vcs -sverilog -nc ../src/jsilicon.v
# Full debug 모드로 재컴파일
make clean
make VERBOSITY=UVM_DEBUG simulate# VCS 라이선스 확인
echo $LM_LICENSE_FILE
# 라이선스 서버 확인
lmstat -ajsilicon_test.sv에 새로운 테스트 클래스 추가jsilicon_sequences.sv에 필요한 시퀀스 추가- Makefile에 단축 타겟 추가 (선택사항)
명령줄에서 VERBOSITY 변수를 설정하여 변경:
# 높은 상세도로 실행
make VERBOSITY=UVM_HIGH simulate
# 디버그 모드
make VERBOSITY=UVM_DEBUG simulate
# 최소 출력
make VERBOSITY=UVM_LOW simulate사용 가능한 레벨:
UVM_NONE: 최소 출력UVM_LOW: 낮은 상세도UVM_MEDIUM: 중간 상세도 (기본)UVM_HIGH: 높은 상세도UVM_FULL: 최대 출력UVM_DEBUG: 디버그 정보 포함
Makefile의 VCS_OPTS를 수정하여 추가 옵션 설정:
# Coverage 활성화
VCS_OPTS += -cm line+cond+fsm+tgl+branch
# Assert 활성화
VCS_OPTS += -assert enable_diag
# 최적화 레벨 조정
VCS_OPTS += -O3- VCS User Guide:
$VCS_HOME/doc/UserGuide.pdf - VCS UVM Guide:
$VCS_HOME/doc/uvm_guide.pdf - Synopsys SolvNet
- Verdi User Guide:
$VERDI_HOME/doc/verdi.pdf - Verdi Debug Documentation
- Original cocotb test:
../test/test.py - JSilicon RTL:
../src/
Apache-2.0 License
JSilicon Team, 2024