본문으로 바로가기

Icarus Verilog 를 이용한 function simulation

category SoC 2020. 4. 30. 16:41
반응형

기존 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

 

awb_icarus.zip
다운로드

 

반응형