Altera Quartus 와 Modelsim을 이용하여 설계 및 시뮬레이션을 할 때,

Simulation Setting에 보면 "Use script to set up simulation" 이란 옵션이 있다.


Simulation을 할 때 TCL 스크립트를 이용하여 Modelsim의 Waveform 창에 보고 싶은 signal들을 추가하거나 하는 일들을 할 수 있다.

문제는 RTL Simulation할 때 추가했던 내부 블록의 signal들은 Synthesis 과정을 거치면서 신호의 계층구조나 이름이 엉망이 되기 때문에,

스크립트 실행 시 오류를 발생하면서 스크립트가 중단이 된다.

(※ 혹시 계층구조 및 신호 이름을 유지하면서 Synthesis가 되도록 하는 옵션을 아시면 댓글 부탁드립니다.)


이 글은 이런 문제를 막기 위해 RTL Simulation인지, GATE Simulation 인지 판별하여,

문제가 발생하는 스크립트 구문을 제외 시키기 위한 방법을 설명한다.


Altera Quartus의 시뮬레이션 옵션 중 "Use script to set up simulation"을 설정하면, 사용자가 추가로 실행 시킬 Script를 지정할 수 있다.


Altera Quartus는 modelsim 을 이용해 시뮬레이션 할 때 script 를 자동으로 생성하는데, 그 이름은 다음과 같다.


RTL Simulation : {$TopModuleName}_run_msim_rtl_verilog.do

GATE Simulation : {$TopModuleName}_run_msim_gate_verilog.do


만약 "test"라는 top module을 rtl simulation 할 때 test_run_msim_rtl_verilog.do 라는 파일이 생성되는 것이다.

따라서, 이 두 파일의 생성 혹은 변경 시간을 비교하여 simulation type 를 판별한다.


if {[file exists test_run_msim_rtl_verilog.do]} {

variable RTL_TIME [file mtime test_run_msim_rtl_verilog.do]

} else {

variable RTL_TIME 0

}


if {[file exists test_run_msim_gate_verilog.do]} {

variable GATE_TIME [file mtime test_run_msim_gate_verilog.do]

} else {

variable GATE_TIME 0

}


if {$RTL_TIME > $GATE_TIME} {variable SIM_TYPE RTL} else {variable SIM_TYPE GATE}


if {$SIM_TYPE == "RTL"} {

RTL Simulation 할 때 실행 되어야 하는 script들


if {$SIM_TYPE == "GATE"} {

Gate Simulation 할 때 실행 되어야 하는 script들


위 스크립트를 사용하면 simulation type 에 따라 SIM_TYPE 변수에 "RTL" 혹은 "GATE" 가 저장된다.



Posted by mahnee
이전버튼 1 이전버튼

블로그 이미지
온갖 자작과 공학 전반에 걸쳐 관심이 많은 ..
mahnee
Yesterday
Today
Total

달력

 « |  » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함