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,完成波形输出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值