Testbench的编写
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的编写的更多相关文章
- VHDL的testbench的编写(转)
大多数硬件设计人员对verilog的testbench比较熟悉,那是因为verilog被设计出来的目的就是为了用于测试使用,也正是因为这样verilog的语法规则才被设计得更像C语言,而verilog ...
- Testbench文件编写纪要(Verilog)
之前在使用Verilog做FPGA项目中.以及其他一些不同的场合下,零散的写过一些练手性质的testbench文件,开始几次写的时候,每次都会因为一些基本的东西没记住.写的很不熟练,后面写的时候稍微熟 ...
- 基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)
1 设计内容 本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号.FFT分析.FIR滤波处理,并分析滤波的效果.通过Matlab的分析验证滤 ...
- 【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器
九.基于串口猎人软件的串口示波器 1.实验介绍 本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC.独立按键.UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数 ...
- Matlab产生波形数据文件
reference: https://blog.csdn.net/HOOKNET/article/details/79254351 前言 在FPGA开发过程中几乎都要用到仿真的功能,对于一些简单的外部 ...
- verilog实现中值滤波
前言 项目需要,想要实现算法中的其中一步即中值滤波,同时,因为图像处理部分中值滤波相对来说还是比较简单的,将中值滤波的硬件实现作为进入FPGA领域的第一次尝试.虽然说网上有较多关于中值滤波的文档,可是 ...
- RGB Resampler IP核的测试
关于RGB Resampler IP核的测试 1.RGB Resampler功能描述 将输入的RGB数据流转换成其它格式的RGB数据流. 2.功能验证 设置源图像像素数据为:3X4格式. 设置RGB ...
- 基于BASYS2的VHDL程序与仿真——50%占空比8分频器
转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...
- FPGA仿真的概念及语法特点
以下是特权同学<FPGA设计+实战演练>书中的描述: 一个正规的设计需要花费在验证上的工作量,往往可能会占到整个开发流程的70%左右.验证通常分为仿真验证和板机验证. ...
随机推荐
- HDU 1113 Word Amalgamation (map 容器 + string容器)
http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across ...
- UESTC--1265--宝贵资源(简单数学)
宝贵资源 Time Limit: 1000MS Memory Limit: 65535KB 64bit IO Format: %lld & %llu Submit Status Des ...
- Python·Jupyter Notebook各种使用方法记录
标签(空格分隔): Python 一 Jupyter NoteBook的安装 1 新版本Anaconda自带Jupyter 2 老版本Anacodna需自己安装Jupyter 二 更改Jupyter ...
- Ubuntu下推荐安装软件
前言:都是全平台软件,通用性好. 1.搜狗输入法 官网下载: 不能双击.deb安装成功,需要安装依赖,可参考:https://www.cnblogs.com/chendeqiang/p/1017741 ...
- JavaScript DOM编程艺术(第2版)学习笔记2(4~6章应用实例)
本书的第4章使用第3章学到的操作DOM的方法和属性写了一个展示图片的网页,并在第5,6章对代码进行了优化. 第一版,搭建网页的静态结构,包括一级标题<h1>,无序列表清单<ul> ...
- 请问具体到PHP的代码层面,改善高并发的措施有哪些
1.今天被问一个问题:请问具体到PHP的代码层面,改善高并发的措施有哪些? 面对高并发问题我首先想到的是集群.缓存(apt.redis.mem.内存...),但具体到PHP代码层面除了想到队列.减少网 ...
- 【转】javascript 小数乘法结果错误处理
一.用js计算 12.32 * 7 结果是多少? 答案:86.24000000000001 为什么会出现这种问题?怎么解决? js在处理小数的乘除法的时候有一个bug,解决的方法可以是:将小数变 ...
- MobilNnet
一.参数数量和理论计算量 1.定义 参数数量(params):关系到模型大小,单位通常为M,通常参数用 float32 表示,也就是每个参数占4个字节,所以模型大小是参数数量的 4 倍 理论计算量(F ...
- Vue学习之路第六篇:v-on
v-on指令用来触发页面事件的指令. <body> <div id="app"> <button v-on:click="show()&qu ...
- 九、frp对外提供简单的文件访问服务
通过 static_file 插件可以对外提供一个简单的基于 HTTP 的文件访问服务.类似于http的文件索引! 服务端frps.ini配置[common]bind_addr = 0.0.0.0bi ...