verilog学习记(测试和验证)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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.*

执行Makefile,完成波形输出

verilog学习记(测试和验证)_第1张图片

你可能感兴趣的:(verilog学习记)