FPGA测试的时候需要编写测试模块,即激励模块,在编写测试模块时啥时候需要产生输入激励信号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FPGA测试的时候需要编写测试模块,即激励模块,在编写测试模块时啥时候需要产生输入激励信号?相关的知识,希望对你有一定的参考价值。

如题。

参考技术A 在设计中,在某一次测试时,并不是所有模块你都想测试到。这时候你可以只关注你的目标模块,所有其他模块输送给目标模块的信号都可以用激励的形式来产生。所谓激励就是触发你的目标模块工作的外部因素。当然,如果这个模块范围扩大到整个芯片时,激励就是其他芯片给fpga的信号。

用一个简单的例子。你想知道某个模块是不是如你设计的一样,能完成某个功能。那么在测试的时候,应该写一个测试模块,将其输出信号作为目标模块的输入,然后检查目标模块的输出,看是否如你所想。这个测试模块的输出就是激励信号。至于你想什么时候输出,这个看你自己的需求了,想啥时输出就啥时输出。只要能尽量遍历你的实际应用场景就可以了

Verilog语法之测试文件

要测试我们设计的模块功能是否正常,最直接的办法就是烧写到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

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

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

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

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

以上是关于FPGA测试的时候需要编写测试模块,即激励模块,在编写测试模块时啥时候需要产生输入激励信号?的主要内容,如果未能解决你的问题,请参考以下文章

基于modelsim-SE的简单仿真流程—上

Verilog语法之测试文件

基于FPGA 做一个数据采集模块 用Modelsim仿真

软件测试相关

V3学院带你学习-缩短汉明码Hamming(12,8)的FPGA实现-第二部分

fpga中TB怎么写