Testbench的作用,在于给我们编写的可综合代码的模块送入激励。即在我们波形仿真中用编写testbench来代替拖拽波形。其中还包括了我们硬件仿真与matlab仿真的联调建立(将matlab产生的数据读入,或者将模块的输出写入到文本,供matlab调用检测)。

对于testbench的编写的几点总结:

1.利用`timescale设置仿真时间单位和时间精度。格式:

`timescale 时间单位/时间精度

2.用localparam、parameter来定义测试模块中需要定义的常数。

定义常数往往是为了使测试代码可复用,如N点的FFT可将N常数化,这样不同的N则可用相同的代码来测试。

3.读取由matlab产生的数据,

Initial  $readmemb(“D:/……”,input);//或者用readmemh,即二进制与十六进制的差别。

4.时钟块

always

begin

clk = 1’b0;

#30  forever

#50 clk=~clk;

end

很多书上都是直接:always #50 clk=~clk;这样虽然简单,可是时钟从0开始就已经跑了,总有些不合适。凡事留些余地的好。另外,为了测试方便,我们都加上时钟计数块。

always

begin

clk_cnt = 0;

#30  forever

#100 clk_cnt = clk_cnt + 1;

end

这样我们可以在仿真波形出来后,清晰的看到第几个时钟各个端口、变量是个什么样的状况。

5.控制信号的赋值

每个控制信号都由单独的一个initial块来管理。如:

initial

begin

clrn = 1;

#30 clrn = 0;

#130 clrn = 1;

end

6.控制仿真总时间,用$stop;

#10000 $stop;

7.将仿真结果输出到txt文本,以供matlab读取进行比对。

integer w_file;

initial w_file = $fopen(“data_out.txt”);//在当前目录新建文本,并打开。

always @ (posedge clk)

begin

#10 if(en_out)//此处延时是因为激励信号经过被测试模块后都会有小段延时,延时时间可自己斟酌。

begin

$fdisplay(w_file,”%h”,data_out);

end

end

例如:这是个DTMB系统中LDPC编码器的其中一个模块的测试文件。

`timescale 1ns/1ps

module tb_circmatrix;

reg clk,reset,data_in,en_in;

reg [126:0]g;

reg load;

wire [126:0]data_out;

wire en_out;

reg [126:0]matlab_in;

//5DCE86622D846BF272215A792AF31A3E

integer w_file;

initial w_file = $fopen("data_out.txt");

always @ (posedge clk)

begin

if(en_out)

$fdisplay(w_file,"%h",data_out);

end

initial

begin

reset = 1'b0;

clk = 1'b0;

load = 1'b0;

en_in = 1'b0;

data_in = 1'b0;

g = 0;

matlab_in = 127'h5DCE86622D846BF272215A792AF31A3E;

end

initial

begin

#50 reset = 1'b1;

#100 reset = 1'b0;

end

initial

begin

#150 load = 1'b1;

g = 127'h44DB4147E6075A92E878EB68C44DD51F;

#100 load = 1'b0;

end

integer in_num;

initial

begin

#250 en_in = 1'b1;

for(in_num = 126;in_num>=0;in_num=in_num-1)

begin

data_in = matlab_in[in_num];

#100;

end

data_in = 1'b0;

en_in = 1'b0;

load = 1'b1;

#100 load = 1'b0;

#1000 $stop;

end

always

begin

#50 forever

#50 clk = ~clk;

end

integer clk_cnt;

always

begin

clk_cnt = 0;

#150;

forever

#100 clk_cnt = clk_cnt + 1;

end

circmatrix u1(

.clk(clk),

.reset(reset),

.data_in(data_in),

.en_in(en_in),

.g(g),

.load(load),

.data_out(data_out),

.en_out(en_out)

);

Testbench的编写的更多相关文章

  1. VHDL的testbench的编写(转)

    大多数硬件设计人员对verilog的testbench比较熟悉,那是因为verilog被设计出来的目的就是为了用于测试使用,也正是因为这样verilog的语法规则才被设计得更像C语言,而verilog ...

  2. Testbench文件编写纪要(Verilog)

    之前在使用Verilog做FPGA项目中.以及其他一些不同的场合下,零散的写过一些练手性质的testbench文件,开始几次写的时候,每次都会因为一些基本的东西没记住.写的很不熟练,后面写的时候稍微熟 ...

  3. 基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)

    1 设计内容 本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号.FFT分析.FIR滤波处理,并分析滤波的效果.通过Matlab的分析验证滤 ...

  4. 【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器

    九.基于串口猎人软件的串口示波器 1.实验介绍 本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC.独立按键.UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数 ...

  5. Matlab产生波形数据文件

    reference: https://blog.csdn.net/HOOKNET/article/details/79254351 前言 在FPGA开发过程中几乎都要用到仿真的功能,对于一些简单的外部 ...

  6. verilog实现中值滤波

    前言 项目需要,想要实现算法中的其中一步即中值滤波,同时,因为图像处理部分中值滤波相对来说还是比较简单的,将中值滤波的硬件实现作为进入FPGA领域的第一次尝试.虽然说网上有较多关于中值滤波的文档,可是 ...

  7. RGB Resampler IP核的测试

    关于RGB Resampler IP核的测试 1.RGB Resampler功能描述 将输入的RGB数据流转换成其它格式的RGB数据流. 2.功能验证 设置源图像像素数据为:3X4格式. 设置RGB ...

  8. 基于BASYS2的VHDL程序与仿真——50%占空比8分频器

    转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...

  9. FPGA仿真的概念及语法特点

    以下是特权同学<FPGA设计+实战演练>书中的描述:      一个正规的设计需要花费在验证上的工作量,往往可能会占到整个开发流程的70%左右.验证通常分为仿真验证和板机验证.      ...

随机推荐

  1. 为代码减负之&lt;三&gt;视图(SQL)

    在设计数据库时为了降低数据冗余.一般都会依照三范式去设计,但有时我们在查询时须要通过一字段获取跟这 个字段相关联的好几个字段.可是他们又分布在不同的表中,这时候假设依照正常途径走的话须要同一时候查询好 ...

  2. .net mvc Model 验证总结

    ASP.NET MVC4中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完毕的. 我们要做的仅仅是给Model类的各属性 ...

  3. ExtJs--16--Ext.override()方法专门用来重写对象的方法

    Ext.onReady(function(){ /** * Ext.override()方法专门用来重写对象的方法 */ //定义个类 Ext.define("U",{ //该类的 ...

  4. extjs 与html相结合 自定义

    http://skirtlesden.com/articles/html-and-extjs-components

  5. 移动端 AnyProxy HTTPS 配置

    参考:AnyProxy HTTPS相关教程 参考教程中,说明了 Windows 和 Mac 系统的配置,这里补充一下移动端(Android.iOS)的配置 生成RootCA > 下载 rootC ...

  6. 像素点的Hessian矩阵

    最近开始学习图像处理相关知识,碰到对像素点求黑塞矩阵查了资料才搞懂. 给定一个图像f(x,y)上的一点(x,y).其黑塞矩阵如下: 因为导数的公式是f'(x)=(f(x+dx)-f(x))/dx在数字 ...

  7. CSS鼠标悬停图片加边框效果,页面布局发生错位的解决办法

    CSS鼠标悬停图片加边框效果,页面布局发生错位的解决办法 .recomend-list{ width:1200px; a{ @extend %fl; margin-right: 30px; width ...

  8. struts中请求数据自动封装

    实现原理 参数拦截器 第一:jsp表单数据填充到action中的属性 必须实现set方法,get方法可以不需要实现,jsp页面name名字保持一致 第二:jsp表单填充到action的对象的属性 js ...

  9. 利用Java反射根据类的名称获取属性信息和父类的属性信息

    代码: import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java ...

  10. luogu P4245 【模板】任意模数NTT MTT

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...