Icarus Verilog and GTKWave 사용 방법
Verilog 코드를 simulation 해보고 waveform을 보고 싶을 때 사용할 수 있는 무료 툴 설치 및 실행 방법을 정리합니다.
시뮬레이션은 Icarus Verilog를 사용하고, waveform은 GTKWave를 통해 확인합니다.
Installation Guide
Icarus Verilog
Linux
git clone https://github.com/steveicarus/iverilog.git
cd iverilog
git checkout --track -b v12-branch origin/v12-branch
sh autoconf.sh
./configure
# ./configure --prefix=/my/special/directory
make
make install
macOS
맥에서는 brew를 이용해 간단히 설치할 수 있습니다.
brew install icarus-verilog
GTKWave
macOS
2024년 5월 기준으로, macOS 14 Sonoma에서는 gtkwave가 제대로 설치되지 않는 현상이 있습니다. 따라서 아래와 같이 설치합니다.
brew install --HEAD randomplum/gtkwave/gtkwave
해당 이슈에 대한 더 자세한 내용은 다음 링크에서 확인할 수 있습니다. - Unable to launch GTKWave on macOS Sonoma
Getting Started With Icarus Verilog and GTKWave
터미널에서 아래의 내용을 순서대로 따라 해 주세요.
- Make
counter.v
filetee > counter.v << EOF module counter(out, clk, reset); parameter WIDTH = 8; output [WIDTH-1 : 0] out; input clk, reset; reg [WIDTH-1 : 0] out; wire clk, reset; always @(posedge clk) out <= out + 1; always @reset if (reset) assign out = 0; else deassign out; endmodule // counter EOF
- Make
counter_tb.v
filetee > counter_tb.v << EOF module test; /* Make a reset that pulses once. */ reg reset = 0; initial begin \$dumpfile("test.vcd"); \$dumpvars(0,test); # 17 reset = 1; # 11 reset = 0; # 29 reset = 1; # 5 reset =0; # 513 \$finish; end /* Make a regular pulsing clock. */ reg clk = 0; always #1 clk = !clk; wire [7:0] value; counter c1 (value, clk, reset); initial \$monitor("At time %t, value = %h (%0d)", \$time, value, value); endmodule // test EOF
- Compile
iverilog -o dsn counter_tb.v counter.v
- Run
vvp dsn
- Open waveform
gtkwave test.vcd &
Leave a comment