当前位置: 首页 > web >正文

verilog之testbench的写法

verilog之testbench的写法

  • 为什么要编写testbench?
    • testbench的基本模块
      • module写法
      • 生成时钟
        • 特定频率的时钟
        • 生成时钟的写法
      • 生成测试激励
        • 绝对时间激励
        • 相对时间激励
          • 输入信号与系统时钟关联
      • 实例化模块
        • 仿真参数重定义
          • 参数传递的方式
          • 使用defparam命名
      • 用always语句实现信号在仿真过程中的电平变化
      • testbench调用RTL代码中寄存器变量的方法
      • 查看仿真结果
        • 常见的波形文件类型
          • fsdb文件
          • vcd文件
        • 通过VScode使用iverilog和gtkwave联合仿真
          • 制作批量文件

为什么要编写testbench?

编写Testbench的目的是把RTL代码在Modsim中进行仿真验证,通过查看仿真波形和打印信息验证代码逻辑是否正确。

testbench在这里做的就是给输入进行激励
testbench在这里做的就是给输入进行激励
具体逻辑为:
1.使用testbench给模块喂入输入信号(一般在testbench中定义为reg型)
2.通过实例化模块(注意实例化模块时带partameter的写法)把模拟输入信号传入功能模块中

testbench的基本模块

module写法

  • 测试模块的命名:tb_<功能模块名> 或 <功能模块名>_tb
    功能模块名为:delay_clap , 则对应测试模块名为:delay_clap_tb
    需要定义模拟的输入/输出信号:

  • 输入/输出信号与功能模块中定义的输入/输出信号保持一致
    输入信号一般定义为 reg 型信号,因为后面需要在always/initial语句块中被赋值
    输出信号一般为 wire型即可

以边沿检测器为例

//原边沿检测器module部分
module delay_clap (input sig,//异步信号input clk1,//异步慢时钟input rstn,//复位信号input clk2,//目标快时钟output sig_rise,//上升沿的信号output sig_down,//下降沿的信号output sig_out);//直接输出的信号//具体内容endmodule//对应的testbench
module delay_clap_tb;reg rstn;reg clk1;reg clk2;reg sig;wire sig_rise;wire sig_down;wire sig_out;//具体内容endmodule

显然:在定义端口时,testbench中对所有输入都定义为reg型,所有输出都定义为wire型。

生成时钟

特定频率的时钟

对于生成特定频率的时钟,一般会在testbench的最开始设定时间单位和时间精度,例如:

`timescale <时间单位>/<时间精度>
`timescale 1ns/1ps

通过规定timescale,来确定生成信号的时间单位,从而确定具体频率

  • 时间单位:时间尺度预编译指令 时间单位 / 时间精度
  • 定义时间单位: `timescale 1ns/1ns 表示时间单位为1ns,时间精度为1ns
  • 时间单位和时间精度由值 1、10、和 100 以及单位 s、ms、us、ns、ps 和 fs 组成
  • 时间单位不能比时间精度小
  • 仿真过程所有与时间相关量的单位(即1单位的时间)
  • 时间精度:决定时间相关量的精度及仿真显示的最小刻度 1ns/1ps 精度为.0.01ns

比如:要产生250MHZ的时钟信号的计算过程如下:
250MHZ的时钟信号一个周期的时长为: 1 / ( 250 × 1 0 6 ) = 4 n s 1/(250\times10^6)=4ns 1/(250×

http://www.xdnf.cn/news/11426.html

相关文章:

  • 免费标准下载网站
  • 为什么需要协调能力?如何提高协调能力?
  • ENet特性简介
  • SQL Server 数据库
  • 轻松搞定!png格式图片怎么弄?详细方法一网打尽
  • 电脑提示由于找不到xinput1_3.dll,无法继续执行代码有什么好的解决办法
  • Python批量下载ts视频文件,并用ffmpeg合并
  • AI人工智能原理与Python实战:Python人工智能行业应用 2
  • 低级格式化软件测试,低级格式化,几款优秀的低级格式化工具对比制作步骤
  • 五款优秀的FTP工具
  • Java6 JDK的安装
  • 什么是Web 2.0
  • Turbo C 2.0使用教程(非常详细)从零基础入门到精通,看完这一篇就够了
  • BeanUtils与MapStruct
  • latex希腊字母一览表
  • 方差计算算法-在线更新算法
  • EtherCAT运动控制卡的SCARA等机器人指令的应用
  • 最大似然估计与参数估计:深入理解关系
  • 在家刷剧的一般方式
  • 必须知道的技术博客网站100条
  • CSS基础知识
  • 元素尺寸总结(offsetWidth,clientWidth,scrollWidth)
  • Matlab----下载和安装教程
  • MAXDOS网刻教程~~(虚拟机与物理机 / 两台或者多台电脑之间)
  • Android 开发简介
  • Android教程-从零开始一步一步接入SDK
  • 维纳滤波——Wiener Filter(一些理解)
  • MNA由来
  • Batch(合批)全面讲解(二)
  • RYU入门教程