Qrun은 컴파일(vlog/vcom/sccom), 최적화(vopt), 시뮬레이션 실행(vsim)을 하나의 명령줄로 통합 실행하는 Questa의 One-Step 명령입니다. 소스 파일의 언어와 인자를 자동으로 분석해 알맞은 툴로 전달하므로, 혼합 언어 설계도 하나의 qrun 호출로 처리할 수 있습니다.
1. Qrun의 핵심 기능 및 도입 효과
기존 Questa 플로우(vlib→vlog/vcom→vopt→vsim) 대비 Qrun의 주요 기능과 개선 효과는 다음과 같습니다.
| 주요 기능 | 기존 문제점 | Qrun 도입 효과 |
|---|---|---|
| Single Step Flow | compile, optimize, simulate 각 step이 독립적으로 수행됨 | 3 step이 한 번에 수행되며, 입력한 모든 argument가 적합한 step에서 자동으로 처리됨 |
| 자동 Compiler 선택 | 소스 파일 언어별 compiler가 다름 (vcom-VHDL, vlog-Verilog/SV, sccom-SystemC) | 모든 소스 파일이 자동으로 적합한 compiler에서 컴파일 됨 |
| VHDL File 자동 순서 정렬 | VHDL 소스 파일을 수동으로 순서대로 정렬해야 함 | 수동 정렬 없이 의존성에 따라 자동으로 컴파일 순서 결정함 |
| GUI 연동 | vopt, vsim을 Debug mode로 전환하기 번거로움 | -gui, -visualizer 옵션 추가만으로 Batch 모드에서 GUI 디버깅 모드로 편리하게 전환됨 |
| 점진적 compile/optimize | 파일 및 옵션 변경 여부를 수동 관리해야 함 | 소스나 컴파일 옵션 변경이 없으면 해당 단계를 자동으로 건너뜀 |
| 라이브러리 분리 관리 | 라이브러리별 vlib/vmap 수동 생성 및 세션 관리가 필요함 | -makelib 옵션을 통해 별도 vlib 호출 없이 라이브러리별 분리 컴파일 가능함 |
2. Qrun 실행 플로우 (1/2/3-Step) 및 점진적 컴파일
Qrun은 별도의 옵션 없이 실행할 경우 기본값(Default)으로 Compile->Optimize->Simulate 3단계를 모두 자동으로 연속 수행합니다.
만약 특정 단계만 실행하거나 기존 elaboration 결과를 재사용하고자 할 경우, 사용자가 명시적 스위치(-compile, -optimize, -simulate)를 지정하여 플로우를 제어할 수 있습니다.
| 플로우 | 명령 예시 | 설명 |
|---|---|---|
| 1-Step (기본값) | qrun -f qrun.f | 스위치가 없으면 Compile -> Optimize -> Simulate 3단계를 자동으로 일괄 실행 |
| 2-Step | qrun -f qrun.f -optimize qrun -f qrun.f -simulate | 먼저 컴파일·최적화만 수행한 뒤, 기존 elaboration 결과를 그대로 불러와 시뮬레이션만 반복 실행 |
| 3-Step | qrun -f qrun.f -compile qrun -f qrun.f -optimize qrun -f qrun.f -simulate | compile/optimize/simulate를 각각 별도 명령으로 순차 실행 기존 스크립트에 통합하기 쉬워 실무에서 가장 널리 사용되는 방식 |
점진적 컴파일 (Incremental Compilation)
소스 파일이나 컴파일 옵션 변경이 없으면 compilation / optimization 단계를 건너뛰고 곧바로 simulation 단계로 진행합니다.
(“–Skipping ‘vlog test.sv ~'” “– Skipping vopt” 메시지 출력됨)
+UVM_TESTNAME, -sv_seed, -do 등 vsim 옵션만 변경될 경우 재컴파일을 발생시키지 않고 시뮬레이션 단계만 즉시 재실행됩니다.
문제 진단 (-script / -env)
qrun이 내부적으로 어떤 vlib/vlog/vopt/vsim 명령을 실행했는지 확인하고 싶을 때는 -script를, 그 시점의 환경 변수까지 함께 확인하고 싶을 때는 -env를 사용합니다.
qrun test.sv -top top -script script.out
cat script.out
vlog test.sv -work qrun.out/work
vopt top -work qrun.out/work -o qrun_opt
vsim -lib qrun.out/work -c -do "run -all; quit -f" qrun_opt
-env <filename>(format)은 -script와 동일하게 동작하면서, 현재 셸의 환경 변수까지 지정한 형식으로 함께 덤프합니다.
qrun test.sv -top top -env "env.out(setenv %s %s)"
cat env.out
setenv MTI_VCO_MODE 64
setenv HOSTTYPE x86_64-linux
setenv MODEL_TECH /u/release/questa/2023.4/questasim/linux_x86_64
vlog test.sv -work qrun.out/work
vopt top -work qrun.out/work -o qrun_opt
vsim -lib qrun.out/work -c -do "run -all; quit -f" qrun_opt
3. Qrun 실행 예시 – Randomization (CLI Batch vs Visualizer 연동)
std::randomize()로 신호를 무작위 생성하는 테스트벤치(test.sv)를 통해 Command 창 기반의 기본 실행 방식과 Visualizer GUI 연동 방식을 비교합니다.
// test.sv
module top;
bit clk;
reg [3:0] a, b, c;
always
#10 clk = ~clk;
initial
begin
$monitor("a:%02d, b:%02d, c:%02d", a, b, c);
`ifdef A
$display("`A == %0d", `A);
`endif
repeat(10)
begin
assert( std::randomize(a, b, c) with { a < 8; b > 6; c == 5; });
@(posedge clk);
end
$finish();
end
endmodule //top
1) CLI Command 창 기본 실행 (Batch 모드)
터미널에서 아래 단 한 줄만 입력하면 시뮬레이션이 진행되고 로그 출력을 통해 결과를 확인할 수 있습니다.
qrun test.sv
이 한 줄은 내부적으로 아래 세 명령으로 대체됩니다.
vlog test.sv -work qrun.out/work
vopt top -work qrun.out/work -o qrun_opt
vsim -lib qrun.out/work -c -do "run -all; quit -f" qrun_opt


2) Visualizer GUI 라이브 디버깅 실행
동일한 소스에 -gui -visualizer 옵션만 붙여 실행하면, Visualizer GUI가 띄워지며 실시간 파형을 관찰할 수 있습니다.
qrun test.sv -gui -visualizer

이 한 줄은 내부적으로 아래 세 명령으로 대체되며, vopt에는 -debug -designfile design.bin이,
vsim에는 -qwavedb=+signal+class가 자동으로 붙어 Visualizer용 파형 데이터베이스가 생성됩니다.
vlog test.sv -work qrun.out/work
vopt top -work qrun.out/work -o qrun_opt -debug -designfile design.bin
vsim -lib qrun.out/work -qwavedb=+signal+class qrun_opt -visualizer

실행 결과 Transcript에는 매 반복마다 무작위로 생성된 a/b/c 값이 출력되고, Visualizer의 Wave창에서 동일한 신호 변화를 파형으로 즉시 확인할 수 있습니다.
