Questa

QuestaSim – Qrun을 활용한 명령어 통합 및 빌드 간소화

Qrun은 컴파일(vlog/vcom/sccom), 최적화(vopt), 시뮬레이션 실행(vsim)을 하나의 명령줄로 통합 실행하는 Questa의 One-Step 명령입니다. 소스 파일의 언어와 인자를 자동으로 분석해 알맞은 툴로 전달하므로, 혼합 언어 설계도 하나의 qrun 호출로 처리할 수 있습니다.


1. Qrun의 핵심 기능 및 도입 효과

기존 Questa 플로우(vlib→vlog/vcom→vopt→vsim) 대비 Qrun의 주요 기능과 개선 효과는 다음과 같습니다.

주요 기능기존 문제점Qrun 도입 효과
Single Step Flowcompile, 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-Stepqrun -f qrun.f -optimize
qrun -f qrun.f -simulate
먼저 컴파일·최적화만 수행한 뒤, 기존 elaboration 결과를 그대로 불러와 시뮬레이션만 반복 실행
3-Stepqrun -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창에서 동일한 신호 변화를 파형으로 즉시 확인할 수 있습니다.

SIEMENS EDA 목록으로