【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
平台的选择
对于很多不是数字电路专业的同学来说,学习verilog的过程不算轻松。因为没有modelsim和quartus的实际经验,如何验证自己编写的verilog是否正确,这本身就成了一道难题。好在天无绝人之路,自从有了iverilog和gtkwave之后,发现这世界上原来还有这么一种简单易行的工具。虽然网上已经有很多的类似blog,我还是想自己写一篇,一来做一个总结,二来可以帮助那些希望快速入门的同学。
编写verilog代码
module count(rst, clk, out);
// input & output
input rst;
input clk;
output[1:0] out;
// wire & reg
wire rst;
wire clk;
wire[1:0] out;
// inner wire & reg
reg[1:0] cnt;
// clause defined
always @(posedge clk or posedge rst)
if (rst)
cnt <= 2'b00;
else if (cnt == 2'b11)
cnt <= 2'b00;
else
cnt <= cnt + 2'b01;
assign out=cnt;
endmodule
编写testbench文件
`timescale 1ns/1ps
module test();
reg rst;
reg clk;
wire[1:0] data;
count tt(.rst(rst),
.clk(clk),
.out(data));
initial
begin
rst = 0;
clk = 0;
#12 rst = 1;
#21 rst = 0;
#100 $finish;
end
initial
begin
while(1)
clk = #5 !clk;
end
initial
begin
$dumpfile("hello.vcd");
$dumpvars(0, test);
end
endmodule
编写一个Makefile
.PHONY: all clean
all:
iverilog -o tb tb.v cnt.v
vvp -n tb -lxt2
gtkwave hello.vcd
clean:
rm tb hello.*