verilog语法之测试文件

author author     2022-12-07     232

关键词:

要测试我们设计的模块功能是否正常,最直接的办法就是烧写到FPGA芯片中进行验证,但是这种方式往往结果并不直观,且出现问题后也不容易定位。为提高工作效率,我们可通过电脑仿真的方式进行功能验证,待仿真通过后,再烧写到FPGA中,这样可以快速排除电路中存在的绝大多数bug。在电脑上进行仿真,除了我们设计的功能模块之外,还需要另一模块——testbench,用于产生被测模块所需的激励信号。由于testbench只是用于电脑端的仿真,而不需要最终综合成电路,因此其写法更加灵活,可以使用verilog语法中的一些不可综合的语句,如initial、#、$display、$readmemb、forever等。

假设我们的被测模块完成以下功能

Verilog语法之测试文件_赋值

其verilog代码为:

Verilog语法之测试文件_赋值_02

1. 简单测试文件

最简单的测试文件可以写成如下形式:

Verilog语法之测试文件_赋值_03

语法说明:

testbench文件一般不包含任何输入输出信号

将被测模块实例化,被测模块的输入信号定义成reg类型,输出信号定义成wire类型。

initia l:通过initial块构造输入信号的波形,同一initial块内部的语句是串行执行的,多个initial块之间并发执行。

2. 自检测试文件

带自检功能的测试文件如下所示,可以对输出结果进行判断,并打印错误信息。

Verilog语法之测试文件_赋值_04

模块的输入信号给定之后,就有有结果输出,将实际输出结果于预期结果做比较,如果不同,则打印出错误信息。

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语法之测试文件_上升沿_05

前面介绍了三种测试方法,三种方法各有其优缺点。

简单测试文件编写简单,容易上手,但需要人工判断仿真结果的正确性;

带自检的测试文件可以将错误信息打印出来,但编写稍微复杂一些,且激励波形仍需通过人工输入代码来完成;

测试向量法测试文件编写最为复杂,还需要编写一个用于跟被测模块结果进行比较的黄金模型,但此种方法测试最为充分,且后续维护起来也最容易。

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处理... 查看详情