기존 Modelsim에서 진행한 function simulation 를 코드를 이용하여 Icarus Verilog 에서 시뮬레이션을 진행해 보도록 하겠습니다. 약간 해당 코드는 글 마지막에서 다운로드 받을 수 있습니다.
1. Icarus Verilog 및 gtkwave 설치 하기
Icarus Verilog를 설치 하기위하여 소스를 다운 받고 직접 컴파일을 하는 방법이 있지만 Package를 이용하여 손쉽게 설치 할 수 있기 때문에 아래의 명령어를 통하여 간단히 해당 툴을 설치 합니다. (소스를 다운받고 직접 컴파일 하실 분들은 해당 링크를 참조하세요. Icarus Verilog Installation Guide)
myskan@TP-P72:~$ sudo apt-get install verilog myskan@TP-P72:~$ sudo apt-get install gtkwave myskan@TP-P72:~$ iverilog -v Icarus Verilog version 10.3 (stable) () Copyright 1998-2015 Stephen Williams This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. iverilog: no source files. Usage: iverilog [-ESvV] [-B base] [-c cmdfile|-f cmdfile] [-g1995|-g2001|-g2005|-g2005-sv|-g2009|-g2012] [-g<feature>] [-D macro[=defn]] [-I includedir] [-M [mode=]depfile] [-m module] [-N file] [-o filename] [-p flag=value] [-s topmodule] [-t target] [-T min|typ|max] [-W class] [-y dir] [-Y suf] [-l file] source_file(s) See the man page for details. myskan@TP-P72:~$ gtkwave -V Gtk-Message: 01:14:00.876: Failed to load module "canberra-gtk-module" GTKWave Analyzer v3.3.103 (w)1999-2019 BSI This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. myskan@TP-P72:~$
2. Testbench 수정
Modelsim을 이용 할 때는 waveform 을 얻기 위하여 wave 창에 signal을 추가한 이후에 시뮬레이션을 진행하였는데 여기서는 testbench에 아래 코드와 같이 $dumpfile 과 $dumpvars 를 이용하여 waveform을 획득하도록 하겠습니다.
`ifdef WAVE_DUMP initial begin $dumpfile("dump_wave"); $dumpvars(0,acgen_tb); end `endif
3. Verilog RTL 코드 컴파일 하기
Icarus Verilog를 이용하여 RTL 코드를 컴파일 하기 위하여 iverilog 명령어를 다음과 같이 사용합니다. 컴파일에 필요한 RTL 소스들은 -c <file name> 를 이용하여 sim_list 안에 정의 되어 있는 코드들을 불러 올수 있으며, -D <define name> 을 이용하여 waveform을 저장하기 위한 WAVE_DUMP 을 컴파일 단계에서 정의 하였습니다.
myskan@TP-P72:~/Work/icarus/awb/fsim$ iverilog -o awb.out -c sim_list -D WAVE_DUMP
4. Simulation 하기
위 단계에서 추출한 awb.out 을 직접 실행하여 시뮬레이션을 진행할 수 있지만 vvp 명령어를 통하여 다양한 옵션과 함께 시뮬레이셔을 진행 할 수 있습니다. 여기서는 waveform의 화일 사이즈를 줄이기 위하여 -lx2 옵션을 사용하도록 하겠습니다.
myskan@TP-P72:~/Work/icarus/awb/fsim$ vvp awb.out -lx2 WARNING: ./sim_model/vector_read_sim.v:60: $readmemh(./vector.txt): Not enough words in the file for the requested range [0:4194303]. ============================== == Start Sim == ============================== LXT2 info: dumpfile dump_wave opened for output. ============================== == End Sim == ============================== myskan@TP-P72:~/Work/icarus/awb/fsim$
5. Waveform 확인
gtkwave 을 이용하여 위의 단계에서 획득한 waveform을 분석 할 수 있습니다.
myskan@TP-P72:~/Work/icarus/awb/fsim$ gtkwave dump_wave &
6. 수정된 코드 및 file_list
'SoC' 카테고리의 다른 글
프로세서 검증에 대하여 (0) | 2020.05.11 |
---|---|
Verilator 를 이용한 function simulation (0) | 2020.05.01 |
CDC(Clock Domain Crossing)의 동기화 기법 (1) | 2019.10.20 |
FIFO Depth 구하기 (데이터의 bandwidth 이해하기) (0) | 2019.05.16 |
2015 DAC (Design Automation Conference) 참관 후기 (0) | 2015.06.24 |