2013. 2. 11. 23:27 공부
Altera-Modelsim 을 이용하여 RTL level과 Gate level을 구분하여 waveform 구성하기
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" 가 저장된다.