关键词:
要测试我们设计的模块功能是否正常,最直接的办法就是烧写到FPGA芯片中进行验证,但是这种方式往往结果并不直观,且出现问题后也不容易定位。为提高工作效率,我们可通过电脑仿真的方式进行功能验证,待仿真通过后,再烧写到FPGA中,这样可以快速排除电路中存在的绝大多数bug。在电脑上进行仿真,除了我们设计的功能模块之外,还需要另一模块——testbench,用于产生被测模块所需的激励信号。由于testbench只是用于电脑端的仿真,而不需要最终综合成电路,因此其写法更加灵活,可以使用verilog语法中的一些不可综合的语句,如initial、#、$display、$readmemb、forever等。
假设我们的被测模块完成以下功能
其verilog代码为:
1. 简单测试文件
最简单的测试文件可以写成如下形式:
语法说明:
testbench文件一般不包含任何输入输出信号
将被测模块实例化,被测模块的输入信号定义成reg类型,输出信号定义成wire类型。
initia l:通过initial块构造输入信号的波形,同一initial块内部的语句是串行执行的,多个initial块之间并发执行。
2. 自检测试文件
带自检功能的测试文件如下所示,可以对输出结果进行判断,并打印错误信息。
模块的输入信号给定之后,就有有结果输出,将实际输出结果于预期结果做比较,如果不同,则打印出错误信息。
3. 测试向量
通过测试向量进行仿真
将输入信号的各种组合以及对应的输出结果构成一测试向量,则每个向量中都包含了一种输入状态,以及该状态下的期望输出结果
将该向量导入一内存数组
构造一时钟信号
在时钟的上升沿,将一个向量赋值给被测模块输入端,并在时钟的下降沿对被测模块输出与期望输出结果进行对比,如果不相同,则记录下该向量,至此向量全部测试完毕。
向量测试文件(example.tv):包含a、b、c以及y_expected
000_1
001_0
010_0
011_0
100_1
101_1
110_0
111_0
测试文件
前面介绍了三种测试方法,三种方法各有其优缺点。
简单测试文件编写简单,容易上手,但需要人工判断仿真结果的正确性;
带自检的测试文件可以将错误信息打印出来,但编写稍微复杂一些,且激励波形仍需通过人工输入代码来完成;
测试向量法测试文件编写最为复杂,还需要编写一个用于跟被测模块结果进行比较的黄金模型,但此种方法测试最为充分,且后续维护起来也最容易。
verilog之生成语句(代码片段)
Verilog中的生成语句主要使用generate语法关键字,按照形式主要分为循环生成与条件生成,主要作用就是提高我们的代码的简洁度以及可读性。一、循环生成语法如下:1genvari;2generate3for(i=0;i<??;i=i+1)4begin:循环的段名56内容... 查看详情
verilog语法
语法子集很小,易用。模块:module…endmodule端口:input,output,inout(双向特殊)inout比较难用,有一张真值表,需要大家观察后书写,基本原则就是输入时一定是高阻态(z),与问号冒号运算符搭配使用。信号:wire,reg,tri(测试用)…re... 查看详情
verilog强制激励语法
Verilog强制激励语法 1.在一个过程块中,可以用两种不同的方式对信号变量或表达式进行连续赋值。 过程连续赋值往往是不可以综合的,通常用在测试模块中。 两种方式都有各自配套的命令来停止赋... 查看详情
verilog之display(代码片段)
verilog之display1、函数简介$display是用于显示不同格式的变量的函数,用于测试过程中观察数据数据的特点。该观测不如波形图直观,但是如果可以详细的设置好观测点,有时可以达到事半功倍的效果。2、实际测试moduledisplay;/*数... 查看详情
verilog学习实战之扫描链
一:可侧性设计简介(DFT)1:什么是可测性? 相当于debug中给程序段加入断点。 设计工具自动将扫描插入到设计中,在设计通过仿真后,在设计阶段的后期,扫描被插入到设计中。扫描的目的是未来观察一个设计或者是... 查看详情
verilog学习实战1之基础练习
一: 所需文件 我们把v文件,makefile文件(vcs),tcl文件(dc)等放在工程文件夹里1 :源文件用ls*.v查看 顶层文件为Intro_Top.v。2:rtl.lst也放置了各个源文件的名称。有个问题,编译器怎么知道哪个是顶层文件,... 查看详情
verilog怎么编写可调pwm波形?
...到Files面板,双击打开该文件数据文件写好后,就要编写Verilog测试模块读取该文件并对模块进行测试了。在项目上右键,点击NewSource,接着选择VerilogTestFixture,输入文件名并继续,选择待测模块,接着创建文件。双击打开该文件... 查看详情
如何用ultraedit高亮语法显示verilog
1:下载Verilog的语法高亮文件。即可支持相应的语言编辑,关键字将用不同色彩标出。可以到官方网站去下载,包括上百种语法文件,我想应该都能满足大家的需要吧!http://www.ultraedit.com/index.php?name=Content&pa=showpage&pid=40#wordfiles2... 查看详情
fpga学习笔记——verilog基本语法(代码片段)
... 计数器、分频器、定时器、移位寄存器 一、Verilog文件的基本结构 1、模块声明 模块名 端口列表 查看详情
测试需要了解的技术之基础篇一
...公司了解下流程就可以。2.linux基本的知识。包括shell基础语法、linux常用命令文件网络性能、Android常用性能分析命令、Android常用自动化命令、IOS常用命令、shell数据分析实战。3.java基础。包括java语法、java面相对象编程和OOP、java... 查看详情
fpga/verilog学习笔记——verilog基础语法
文章目录Verilog基础语法一、基础知识1.逻辑值2.数字进制格式3.标识符二、数据类型1.reg和wire类型(1)reg寄存器类型(2)wire线网类型(3)reg... 查看详情
verilog测试文件怎么写
不太懂,比如四位全加器,代码如下moduleadd4bit(a,b,ci,y,co);input[3:0]a,b;inputci;output[3:0]y;outputco;assignco,y=a+b+ci;endmodule那么测试文件我该如何写?最好能标上每一部分的代表什么参考技术Amoduletest_freq; //Inputs reg[3:0]a,b; regci; //Outputs wire[3:... 查看详情
计算机基础——verilog语法入门(代码片段)
...代码了!为了能够跟上课程进度,提前了解一些Verilog语法是很有必要的。Verilog语法入门简单介绍一下Verilog的作用:VerilogHDL(简称Verilog)是一种硬件描述语言,用于数字电路的系统设计。可对算 查看详情
verilog中顶层模块实例引用多个模块时端口怎么连接
verilog中顶层模块实例引用多个模块时端口怎么连接1、首先,在项目上右键,点击NewSource创建新的代码文件。2、选择UserDocument创建自定义的文本文件。3、创建好后,在下方切换到Files面板,双击打开该文件。4、数据文件写好后... 查看详情
verilog语法--gate门
Verilog中已有一些建立好的逻辑门和开关的模型。在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述。逻辑门:and(output,input,...) nand(output,input,...)or(output,input,...)nor(output,input,...)xor(output,input,..... 查看详情
在头文件中声明 Verilog 函数
】在头文件中声明Verilog函数【英文标题】:DeclarationofaVerilogfunctioninaheaderfile【发布时间】:2016-02-2011:13:08【问题描述】:当我尝试编译包含头文件的测试台时,该头文件包含函数声明IcarusVerilog(v10.0stable)中止并出现以下错误:mpe... 查看详情
verilog语法结构
数据流描述方式:用数据流描述对一个设计建模的最基本方式是连续赋值语句。连续赋值语法assign[delay]LHS_net=RHS_expression ‘timescale1ns/1nsmoduleDecoder2_4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;   查看详情
verilog图像算法实现和仿真(代码与实践)
...:feixiaoxing@163.com】 这里的代码指的是verilog代码,而不是之前的python代码。因为verilog处理的是数据,所以之前我们也谈到过,如果需要用verilog处理图像数据,需要先用python把图像变成文本文件,等到verilog处理... 查看详情