这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » Verilog的testbench入门

共1条 1/1 1 跳转至

Verilog的testbench入门

菜鸟
2017-06-27 16:56:47     打赏
基础知识 Test bench即Verilog需要编写的测试文件。在module设计完成、综合之后我们需要通过测试文件完成对设计module的测试。 Test bench大致分为下面三个部分:
  • 时钟控制 clock control
一般采用always实现
  • 实例化instantiate要测试的module
  • 对实例的输入赋值 

    与待测模块的接口:
  • 与输出端口相连接的变量定义为reg
  • 与输出端口相连的定义为wire
初始化变量 Verilog中使用initialblock初始化变量。 时钟的产生 always # 10 clk=~clk; 产生时钟 initial repeat(13) #5 clk=~clk 控制只产生13个时钟 同步数据 initial forever @ (posedge clk) #3 x=$random; 为了降低多个输入同时翻转的概率,对时序电路的输入一般采用素数作为时间间隔 随机数据 initial repeat(5) #7 x=$random; a=$random%60; //产生-59到59之间的随机数 a={$random}%60; //产生0到59之间的随机数 产生随机事件间隔always begin    t=$random    #(t) x=$random;    end
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4
数据缓存initial buffer = 16'b1110_0001_1011_0101;//将测试数据进行初始化always@(posedge clk)    #1 {x,buffer}={buffer,x}//可以在控制的数据下输入信号x
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
## 读取数据文件 ## reg [7:0] mem1[0:1024];//定义一个1KB的存储initial begin    $readmemh(data1.dat,mem1)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
简单的实例`timescale 1ns / 10ps`include "adder.v"module test;    // Inputs    reg a,b;    wire sum,count;    // 实例化待测试模块    add uut (        .sum(sum),        .c(count),         .b(b),         .a(a)    );    initial begin        // Initialize Inputs        a=0;        //没经过20个单位时间,a取反        forever #20 a=~a;    end    initial begin        // Initialize Inputs        b=0;        //没经过10个单位时间,b取反        forever #10 b=~b;    end    initial begin        //监控输出        $monitor()$time,,,"%d+%d={%d,%d}",a,b,count,sum;        #40 $stop;    endendmodule
  • 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
  • 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
Tip
  • $monitor 出输出打印显示
  • $stop 停止当前仿真
  • ¥finish 结束仿真
时钟产生
  • 使用initial语句
reg clock;initial begin    clock=0;    forever #10 clock=~clock;end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 使用always语句
reg clock;initial    clock=0;always    #10 clock=~clock;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]