0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用三种自动化testbench验证方法

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2020-11-20 11:26 次阅读

Testbench编写指南(4)自动化验证方法

自动化验证testbench结果可以减少人工检查的时间和可能犯的失误,尤其对于比较大的设计。目前普遍使用三种自动化testbench验证方法:

数据库比较:首先创建一个包含预期输出的数据库文件(称作golden
vector文件),然后捕获仿真输出与该文件中的参考向量作比较。但是由于没有提供从输出到输入文件的指针,该方法的缺点是难以追踪导致不正确输出的错误源。

波形比较:将testbench输出波形与预期波形作比较。Xilinx曾推出过一款HDL
Bencher的工具,可以执行自动化的波形比较,不过目前由于该方法很少使用,Xilinx也下架了该工具。

自我检查testbench设计:与前两种方法不同,该方法实时检查预期结果和实际结果,而不是仿真结束后才检查。在testbench中插入错误追踪信息可以显示设计在哪里失败,从而缩短调试时间。

本文将介绍最后一种自动化验证方法。将一系列预期向量(比如由MATLAB等软件产生)放在testbench文件中,在运行时间间隔与实际仿真结果比较,如果匹配则表明仿真成功;不匹配则报告结果不符。

比较时间可以选择在每个时钟边沿,或者没n个时钟周期比较一次,总而言之要与设计相符合。比如内存I/O的testbench应该在读出或写入一个新数据后就进行比较;如何设计使用了大量组合逻辑模块,选取比较时间必须考虑组合逻辑延迟。
  对于中小型设计而言,自我检查的testbench设计方法是一种不错的选择,但是对于复杂的大型设计,可能的输出组合呈指数形式增加,编写一个自我检查testbench将会困难很多。下面给出一个自我检查testbench的设计示例(来源于xapp199):

`timescale 1 ns / 1 ps module test_sc; // 信号申明 reg tbreset, tbstrtstop; reg tbclk; wire [6:0] onesout, tensout; wire [9:0] tbtenthsout; parameter cycles = 25; reg [9:0] Data_in_t [0:cycles]; // 实例化设计 stopwatch UUT (.CLK (tbclk), .RESET (tbreset), .STRTSTOP (tbstrtstop), .ONESOUT (onesout), .TENSOUT (tensout), .TENTHSOUT (tbtenthsout)); wire [4:0] tbonesout, tbtensout; assign tbtensout = led2hex(tensout); assign tbonesout = led2hex(onesout); //------------------------------------------------------------- // 预期结果 //------------------------------------------------------------- initial begin Data_in_t[1] =10'b1111111110; Data_in_t[2] =10'b1111111101; Data_in_t[3] =10'b1111111011; Data_in_t[4] =10'b1111110111; Data_in_t[5] =10'b1111101111; Data_in_t[6] =10'b1111011111; Data_in_t[7] =10'b1110111111; Data_in_t[8] =10'b1101111111; Data_in_t[9] =10'b1011111111; Data_in_t[10]=10'b0111111111; Data_in_t[11]=10'b1111111110; Data_in_t[12]=10'b1111111110; Data_in_t[13]=10'b1111111101; Data_in_t[14]=10'b1111111011; Data_in_t[15]=10'b1111110111; Data_in_t[16]=10'b1111101111; Data_in_t[17]=10'b1111011111; Data_in_t[18]=10'b1110111111; Data_in_t[19]=10'b1101111111; Data_in_t[20]=10'b1011111111; Data_in_t[21]=10'b0111111111; Data_in_t[22]=10'b1111111110; Data_in_t[23]=10'b1111111110; Data_in_t[24]=10'b1111111101; Data_in_t[25]=10'b1111111011; end reg GSR; assign glbl.GSR = GSR; initial begin GSR = 1; // 等到全局复位结束 #100 GSR = 0; end //建立一个时钟 initial begin tbclk = 0; //全局复位结束后开始产生时钟信号 #100 forever #60 tbclk = ~tbclk; end //给出设计激励 initial begin tbreset = 1; tbstrtstop = 1; #240 tbreset = 0; tbstrtstop = 0; #5000 tbstrtstop = 1; #8125 tbstrtstop = 0; #500 tbstrtstop = 1; #875 tbreset = 1; #375 tbreset = 0; #700 tbstrtstop = 0; #550 tbstrtstop = 1; #100000 $stop; end //------------------------------------------------------------- // 在每个时钟的下降沿比较预期结果和实际结果 //------------------------------------------------------------- integer i,errors; always @ (posedge tbclk) begin if (tbstrtstop) begin i = 0; errors = 0; end else begin for (i = 1; i <= cycles; i = i + 1) begin        @(negedge tbclk)        // 每个下降沿检查结果        $display("Time%d ns; TBSTRTSTOP=%b; Reset=%h; Expected        TenthsOut=%b; Actual TenthsOut=%b", $stime, tbstrtstop, tbreset,        Data_in_t[i], tbtenthsout);        if ( tbtenthsout !== Data_in_t[i] ) begin            $display(" ------ERROR. A mismatch has occurred-----");            errors = errors + 1;        end    end    if (errors == 0)        $display("Simulation finished Successfully.");    else if (errors > 1) $display("%0d ERROR! See log above for details.",errors); else $display("ERROR! See log above for details."); #100 $stop; end end endmodule

上述代码中,将预期结果和实际结果的比较情况显示在终端。该代码模板可应用于任何设计的自我检查testbench中,需要修改实例化接口和预期的输出值。如果不需要在每个时钟沿检查一次数据,则修改for循环的执行条件。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    175

    文章

    2922

    浏览量

    228440
  • 自动化
    +关注

    关注

    28

    文章

    5037

    浏览量

    77731
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63369

原文标题:Testbench编写指南(4)自动化验证方法

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    非标自动化设备

    1、非标自动化设备 2、根据需求设计和制造 3、完成代替人工的目标
    发表于 03-25 09:52

    运放的三种应用

    运放在电路中主要存在三种应用,放大器,滤波器,振荡器。再这三种应用电路中,运放的两大特点虚短虚断仍然成立吗? 在阻尼振荡器中,工作过程是否按照我描述的这样,在反相输入端加一个近似锯齿波的电流源,正半
    发表于 01-26 16:18

    TC397怎么自动化烧录?

    TC397第一次烧录的时候需要先烧录六个包,使用Infineon Memtool 4.8软件,如果想要量产,怎么实现不用手动选择文件的烧录方式,使用自动化烧录
    发表于 01-25 07:03

    ETC自动化测试系统ETC Runsys. #ETC #自动化测试 #OBU #RSU

    自动化测试
    度纬仪器
    发布于 :2024年01月12日 10:01:20

    分布式IO工业自动化数据采集与分析的核心

    随着工业自动化技术的不断发展,分布式IO在工业自动化领域的应用越来越广泛。作为一先进的控制技术,分布式IO能够实现设备的分布式控制和监测,提高生产效率、降低能耗和减少故障率。 分布式IO可以提高
    发表于 12-28 14:47

    LabVIEW与Tektronix示波器实现电源测试自动化

    LabVIEW与Tektronix示波器实现电源测试自动化 在现代电子测试与测量领域,自动化测试系统的构建是提高效率和精确度的关键。本案例介绍了如何利用LabVIEW软件结合Tektronix
    发表于 12-09 20:37

    如何可靠、快速、自动验证处理器硬件

    你是否会遇到以下问题:bug可能比较微妙,不直观,无法手动推断;或者在被观察到之前就被激活很久了,传统的模拟设计需要花很长时间自动验证工作量随着设计复杂性的增加而增加,人工推理和手动编写属性不再可行,等等。目前验证CPU的主流
    的头像 发表于 11-16 12:29 331次阅读
    如何可靠、快速、<b class='flag-5'>自动</b>地<b class='flag-5'>验证</b>处理器硬件

    基于Arduino的家庭自动化项目

    包含相关代码、详细图文、物料表一个简单的基于DIY Arduino的家庭自动化项目,它使用土壤湿度传感器、泵和其他电子元件来自动浇水植物。它由一个适合室内园艺的混凝土花盆箱组成。自流式播种机也可作为水培系统使用。电气系统可根据农业和农业需求以及微灌系统进行扩展。
    发表于 09-26 08:16

    工厂自动化系统分享

    工厂自动化结构 PLC系统应用 IO-Link系统解决方案 工厂自动化中的工业机器人 问答环节
    发表于 09-07 06:32

    Testbench自动化验证方法介绍

    自动化验证testbench结果可以减少人工检查的时间和可能犯的失误,尤其对于比较大的设计。
    的头像 发表于 09-04 09:15 511次阅读

    Testbench的基本组成和设计规则

      对于小型设计来说,最好的测试方式便是使用TestBench和HDL仿真器来验证其正确性。一般TestBench需要包含这些部分:实例化待测试设计、使用测试向量激励设计、将结果输出到终端或波形窗口便于可视化观察、比较实际结果和
    的头像 发表于 09-01 09:57 529次阅读
    <b class='flag-5'>Testbench</b>的基本组成和设计规则

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

    废话不多说直接上干货,testbench就是对写的FPGA文件进行测试的文件,可以是verilog也可以是VHDL。
    的头像 发表于 06-28 16:44 2259次阅读
    <b class='flag-5'>testbench</b>是什么? <b class='flag-5'>testbench</b>测试的机制是什么?

    UDT的两常用使用方法#plc #电工 #工业自动化#硬声创作季

    自动化
    也许吧
    发布于 :2023年06月01日 10:01:39

    TB5128FTG驱动芯片在工业自动化中的应用

    高性能驱动解决方案,具有出色的功能和特性,可以在工业自动化系统中发挥重要作用。本文将介绍TB5128FTG驱动芯片的基本特点、工作原理,并深入探讨其在工业自动化中的应用案例,包括机器人控制、CNC
    发表于 05-30 15:14

    如何设计和构建Testbench呢?

    Testbench是几乎所有做动态仿真验证的工程师都要面对的问题,可能是需要设计,或者开发,又或者是维护,总有很多事情要在这上面折腾。
    的头像 发表于 05-08 10:16 612次阅读