由于 iverilog + gtkwave 开源小巧, 因此, 在小工程里用这个组合还是很不错的
Windows安装 iverilog
到 Icarus Verilog for Windows 下载安装
这里安装的iverilog 还内置了GTKWave, 所以不需要额外安装 GTKWave
简单使用
test_counter.sv
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
`timescale 1ns/1ps
module test_counter ();
localparam TEST_WIDTH = 6;
localparam TEST_MAX = 9;
localparam CLK_PERIOD = 10;
reg clk = 1'b1; // 时钟
wire [TEST_WIDTH-1:0] cnt;
counter #( // 参数例化
.CNT_WIDTH (TEST_WIDTH),
.CNT_INIT (3),
.CNT_MAX (TEST_MAX)
) uut ( // 端口例化
.clk (clk),
.cnt (cnt)
);
always #(CLK_PERIOD/2) clk = ~clk; // 50MHz
always @ (posedge clk) begin
$display("time : %8t , counter = %d", $time, cnt);
if (cnt == TEST_MAX)
$display("time : %8t , counter overflow", $time);
else if (cnt == 0)
$display("hello world");
end
initial begin
$dumpfile("test_counter.vcd");
$dumpvars(0, test_counter); // dump所有信号波形
end
initial begin // 第3次计数值为2后退出仿真
repeat(3) begin
wait (cnt == 2);
#(CLK_PERIOD);
end
$display("goodbye");
$finish;
end
endmodule
module counter #( // 参数
parameter CNT_WIDTH = 8,
parameter CNT_INIT = 0,
parameter CNT_MAX = 11
) ( // 端口
input clk,
output reg [CNT_WIDTH-1:0] cnt
);
initial cnt = CNT_INIT;
always @ (posedge clk)
if(cnt < CNT_MAX)
cnt <= cnt + 1;
else
cnt <= 0;
endmodule
|
Makefile
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
|
##
# test_counter
#
# @file
# @version 0.1
TARGET = test_counter
SRC_FILES = test_counter.sv
OBJ = $(TARGET).vvp
all: comp run wave
vcd: comp run
comp : $(SRC_FILES)
@echo Compiling $(SRC_FILES)
iverilog -o $(TARGET).vvp $(SRC_FILES)
run : $(TARGET).vvp
@echo Running simulation
vvp $(TARGET).vvp
wave: $(TARGET).vcd
@echo Open waveform
gtkwave $(TARGET).vcd
wave2: $(TARGET).vcd
@echo Open an exist waveform
gtkwave $(TARGET).gtkw
clean:
-rm -f *.vcd *.vvp
# end
|
编译+仿真+看波形
编译+仿真
一般的工作流
对于没有现成波形的工程
- make
- 在GTKWave 里面添加好波形, 然后 File => Write Save File As => 输入一个名字, 保存为 .gtkw
- 更改设计后, make vcd 重新编译仿真生成波形文件
- GTKWave 中 File => Relaod Waveform 即可看到波形的变化
对于己有现成波形的工程
- make wave2 打开GTKWave 查看之前保存的波形
- 更改设计后, make vcd 重新编译仿真生成波形文件
- GTKWave 中 File => Relaod Waveform 即可看到波形的变化
GTKWave 简单使用
添加信号
选择信号后左下角的三个按钮可以批量操作, 如果是直接拖的话, 一次只能拖一个信号到波形窗口
快捷键
- Zoom Fix
Ctrl + 0 或者 Shift + Alt + f
- 放大
Ctrl + =
或者 按住Ctrl + 鼠标滚轮
- 缩小
Ctrl + -
或者 按住Ctrl + 鼠标滚轮
- 上下左右移动
鼠标滚轮
- 放置 / 取消Marker
按下鼠标中键