【Verilog TestBench教程】 您所在的位置:网站首页 verilog与非门关键字 【Verilog TestBench教程】

【Verilog TestBench教程】

2023-09-04 05:47| 来源: 网络整理| 查看: 265

Verilog TestBench教程 1. Verilog Testbench 的结构2. 实例化待测模块(DUT)3. 时间建模4. Verilog 初始化模块/永久循环5. Verilog 系统任务6.实例分析附录a.modelsim-objects窗口为空的解决办法b.modelsim仿真报错“error loading design” 参考文献

1. Verilog Testbench 的结构

TestBench文件中,包括了很多不可综合的Verilog代码,这些代码可以用于生成测试激励,并且用于检查待测模块是否满足了设计的要求。 Test Bench结构示意图 激励模块用于生成测试信号,输出检测模块用于检测输出结构是否与设计预期结构相同。对于复杂的TestBench,激励模块和输出检查模块可以放在其他的文件中,对于结构简单的TestBench可以将全部内容放到一个文件里。 为了能够直观观察仿真波形,我们可以利用Vivado等IDE提供的仿真工具,也可以利用开源工具icarus verilog和GTKwave进行仿真。此外还有在线工具EDA Playground 可裨用户进行仿真工作。

2. 实例化待测模块(DUT)

写作Verilog Testbench文件的第一步是创建一个用于仿真的顶层模块。我们希望我们的Testbench的可以完完全全自动完成整个测试过程,所以我们的顶层模块是一个没有信号输入与信号输出的模块。

module example_tb(); //信号定义 endmodule

第二步需要实例化一个待测模块

# ( // If the module uses parameters they are connected here . () ) ( // Connection to the module ports . (), . () ); //实例化主要分为两个部分一个是参数设置,一个是端口映射。 //第一个首先写出设计模块名字,之后一个括号,内部是参数名和参数值格式位. ()参数的括号后没有分号 //再次是dut实例名字 //其次是端口的映射,格式为. (),port 之间用`,`隔开,最后括号后面有一个括号,一个完整的模块实例化只有一个分号做结尾。 3. 时间建模

因为我们的TestBench 文件是不去进行综合的,这需要我们去指定仿真过程中的时间消耗的约束。为了在Verilog语言中去建模时间延时的过程,我们要使用#这个符号去完成。下面这一行代码是一个例子

#10

这段代码意味着延时是个时间单元,另外需要强调的是延时语句结束后没有分号;。另外延时语句经常和后面的语句写在一行中,如下面这一句代码:

#10 a = 1'b1;

前面我们提到了“时间单元”这个概念。因为TestBench代码不会去进行综合,所以需要我们进行指定后才有意义。下面是两个例子:

·timescale / `timescale 1ns / 1ps 4. Verilog 初始化模块/永久循环

用initial修饰的初始化模块只在模块开始运行的时候运行一次。结构如下面这一段代码所示:

initial begin clk = 1'b0; forever begin #1 clk = ~clk; end end

forever语句的功能是持续执行forever块语句中的代码,其的语法结构如下所示,即forever语句下跟随一个块语句:

forever begin //our code goes here end 5. Verilog 系统任务

Verilog相同任务可以帮助用户以文本形式读取仿真的结果和信号状态。最为重要的两个函数为$display、$monitor。$dispaly函数的用法和作用类似于C语言中的printf函数。$monitor的用法与$display相同,两个函数最大的区别是$display在某个特定位置打印某些变量和信号值;$monitor函数是用于检测信号的变化,调用后会持续运行,进行对信号的监控。这个函数是单线程的,一个函数运行时,会关闭之前的监控函数。 下面是两个函数的用法实例:

// General syntax $display(,


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有