首页>>科技 >>内容

testbench是什么,testbench测试的机制是什么

发布时间:2023-11-02 17:34:24编辑:温柔的背包来源:

很多朋友对testbench是什么,testbench测试的机制是什么不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

testbench是什么,testbench测试的机制是什么

01testbench是什么?废话不多说,干货就好。testbench是测试写好的FPGA文件的文件,可以是verilog,也可以是VHDL。verilog和VHDL国际标准中有很多语句不能全面实现,比如initial、forever、repeat、delay语句#1等。这些语句用于测试。运行环境一般是ise或者vivado的仿真工具,或者是modelsim这样的第三方仿真工具。02testbench测试的机理是什么?

任何设计良好的模块(如第一讲中的PWM产生模块)都有一个输入和一个输出。这个模块是否符合要求,取决于给定的输入是否符合要求,能否得到符合要求的输出。所以testbench的测试机制是:使用各种verilog或VHDL语法,产生满足条件的激励信号(即模块的输入),同时捕捉模块的输出,测试输出是否满足要求。

如下图所示,生成励磁输出验证模块的两个模块都属于testbench,最好的输出验证模块最后只需要给出一个通过和失败的答案。无论是用信号表示通过和失败,还是用$display()函数打印,简单明了地给出通过或失败的信息都是好的。请在编写模拟文件时尝试这样做。

03试验台运行顺序之谜

首先,我要给大家解释一下,所有的testbench本质上都是串行执行,因为在CPU环境下,没有可靠的并行执行能力。所有并行语句,如两个always模块和fork join语句块,都是通过软件模拟并行执行的。因此,在较旧的编译器中,信号定义应该在初始语句之前,初始信号必须在初始值之后有语句,才能从给定的初始值开始执行。

所以你写testbench的时候要注意,最好是先定义信号,再写初始语句。以下语句的交换顺序不影响,软件可以按照IEEE标准的顺序识别并执行。

如果要在模块中使用并行执行语句,请使用fork join语句,并使用begin end语句进行顺序执行。初始语句可以多次编写,所有语句都是并行执行的。当两个信号在初始时发生冲突时,将首先执行先前的初始值。04常用测试平台语句总结

时钟生成——总是从clk=0开始;# 1 clk=1#1;结束.注意这里没有@ after always!当没有@时,总是意味着永远在循环中执行begin和end之间的语句。如果有@,后面必须加一个时钟,意思是在时钟边沿到来时,按顺序执行begin和end中的语句。没有@的Always语句无法合成。

时间轴设置—— '时间刻度模拟时间单位/时间精度;比如时间刻度1ns/1ps;代表仿真的时间轴单位为1ns,仿真工具的最大精度仅为1ps以内的逻辑变化。延迟语句—— # n;表示n个时间轴单位的延迟。比如时间刻度1ns/1ps;以前已经定义过;如果# 3是后面写的;这意味着3纳秒的延迟,而不是3秒。

初始化—— initial begin a=0;#100;a=1;结束.testbench运行后,第一个进入初始化语句,只执行最后一句话一次,然后是下面的语句。因为begin end中的语句是串行执行的,所以这句话意味着100ns后A始终为高。复位信号通常以这种方式产生。系统功能—— * *停止;代表跑到这句话停止模拟,* * display(' pass ');表示在命令行上显示传递的字符串。

等待语句——wait(条件表达式)语句/语句块;语句块可以是串行块(begin…end)或fork…join。当逻辑表达式为真时,立即执行语句块;否则,暂停该过程,等待逻辑表达式变为“真”后再执行以下语句。请打开verilog测试激励语法,包含所有模拟激励:打开菜鸟教程——,下载资料——,选择“verilog最经典中文教程”。

另外,学习verilog要知道verilog语句的执行顺序和机制,生成的对应时序,哪些语句可以合成,哪些不可以合成。这是最基本的要求。其实看了前面的链接,你们大部分人应该都能看懂了。现在,我只选择之前没有讲过的代码。

以上知识分享希望能够帮助到大家!