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
    +关注

    关注

    189

    文章

    3029

    浏览量

    239253
  • 自动化
    +关注

    关注

    31

    文章

    5989

    浏览量

    90685
  • 数据库
    +关注

    关注

    7

    文章

    4085

    浏览量

    68566

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    通用自动化测试系统:FCT、ATE、ICT、PCBA功能测试

    ,以便后续的质量审查和改进。 测试治具集成:通过与自动化测试治具的深度集成,系统支持自定义测试工装与治具,确保每一项测试都能够准确无误地进行。 测试应用场景 FCT(功能测试):功能测试主要用于验证
    发表于 04-13 14:54

    器件工艺协同优化中加速版图设计的三种方法

    器件工艺协同优化(DTCO)流程需要生成海量版图。本文将介绍几种借助自动化手段,加速这一耗时流程的实现方法
    的头像 发表于 03-24 09:41 254次阅读
    器件工艺协同优化中加速版图设计的<b class='flag-5'>三种方法</b>

    五个问题助您应对自动化系统设计中的挑战

    自动化控制系统广泛应用于各类工业领域的工厂自动化场景——从化工厂到工厂生产线。
    的头像 发表于 03-12 10:49 543次阅读

    罗克韦尔自动化2025年自动化博览会精彩回顾

    作为工业自动化、信息和数字转型领域的全球领先企业之一,罗克韦尔自动化于去年 11 月在芝加哥成功举办了年度盛会 —— 2025 年自动化
    的头像 发表于 03-10 09:33 552次阅读

    罗克韦尔自动化邀您共赴2025年自动化博览会

    11 月 17 - 20 日,作为工业自动化、信息和数字转型领域的全球领先企业之一,罗克韦尔自动化将在芝加哥举办的 2025 年自动化
    的头像 发表于 11-17 17:54 2194次阅读

    宜科电子推出三种不同原理标签传感器

    在工业自动化与智能包装领域,标签检测的精度、速度与适应性直接决定了生产线的效率与产品合规性。针对不同材质标签(如纸质、薄膜、金属箔)及复杂检测环境,我们推出超声波、光电、电容三种不同原理标签传感器,以多模融合、精准识别、智能适应为核心,为食品包装、医药制造、物流分拣等行业
    的头像 发表于 11-08 15:07 2118次阅读

    语法纠错和testbench自动生成

    ,每次跑仿真都需要修改语法错误;另外在写完一个模块之后,每次跑仿真前都需要搭建testbench,模块的实例,这显然是很麻烦的,查阅资料发现vscode有插件可以解决上述问题,故来分享给大家
    发表于 10-27 07:07

    智芯公司完成智能分布式馈线自动化试点验证

    近日,智芯公司所属智芯半导体联合国网河南电力门峡供电公司、中国移动门峡分公司完成基于 5G LAN技术的智能分布式馈线自动化试点验证。此次现网试点将5G通信技术与智能分布式馈线
    的头像 发表于 09-30 15:34 1351次阅读

    伺服电机的三种制动方式有什么区别?

    伺服电机作为自动化控制系统中执行元件的核心部件,其制动性能直接影响设备的定位精度和安全可靠性。目前主流的伺服电机制动方式包括动态制动、再生制动和电磁机械制动三种,它们在制动原理、应用场景及技术特点上
    的头像 发表于 09-19 18:26 2271次阅读
    伺服电机的<b class='flag-5'>三种</b>制动方式有什么区别?

    电源模块的短路保护如何通过自动化测试软件完成测试

    在当今电力电子领域,电源模块的可靠性至关重要,短路保护作为其关键特性,需通过精确的自动化测试软件进行验证。本文将整理如何借助自动化测试软件ATECLOUD完成电源模块短路保护的测试。 短路测试项目
    的头像 发表于 09-03 19:10 1043次阅读
    电源模块的短路保护如何通过<b class='flag-5'>自动化</b>测试软件完成测试

    【干货】一文带你了解CAN、Modbus与LoRa三种通信协议的区别

    在工业自动化与物联网领域,CAN、Modbus和LoRa是三种主流通信技术。而亿佰特在该行业具有丰富的产品供客户选择与使用,帮助客户进一步确定需求,本文将结合技术细节与实际案例解析其核心区别。一
    的头像 发表于 08-28 19:32 2331次阅读
    【干货】一文带你了解CAN、Modbus与LoRa<b class='flag-5'>三种</b>通信协议的区别

    相全自动稳压器在工业自动化领域的重要性与应用

    在工业自动化领域中,电力的稳定性至关重要。我们都知道,电力就像一条河流,稳定的水流才能保证工业设备的平稳运行。而在这条河流中,相全自动稳压器就像是一个水闸,控制着水流的强度和方向,确保每一个环节都能正常运作。下面就来详细的说说
    的头像 发表于 08-18 15:19 873次阅读
    <b class='flag-5'>三</b>相全<b class='flag-5'>自动</b>稳压器在工业<b class='flag-5'>自动化</b>领域的重要性与应用

    自动化测试如何绕过Cloudflare验证码?Python + Selenium 脚本实战指南!

    01什么是Cloudflare验证码Cloudflare提供网络工具,并提供一套全面的安全功能,以保护网站免受各种在线威胁。Cloudflare验证码是一用于区分人类用户和自动化机器
    的头像 发表于 08-15 10:01 1660次阅读
    <b class='flag-5'>自动化</b>测试如何绕过Cloudflare<b class='flag-5'>验证</b>码?Python + Selenium 脚本实战指南!

    电源模块在配电自动化终端中的应用

    配电终端设备的可靠性和自动化程度,直接影响到整个配电自动化系统的可靠性和自动化水平。由于配电终端设备一般安装于户外或比较偏僻的地方,不可能有直流电源提供,因此,配电网终端设备的直流供电方式成为各配网
    的头像 发表于 07-22 10:20 2.4w次阅读
    电源模块在配电<b class='flag-5'>自动化</b>终端中的应用

    自动化计算机的功能与用途

    工业自动化是指利用自动化计算机来控制工业环境中的流程、机器人和机械,以制造产品或其部件。工业自动化的目的是提高生产率、增加灵活性,并提升制造过程的质量。工业自动化在汽车制造中体现得最为
    的头像 发表于 07-15 16:32 922次阅读
    <b class='flag-5'>自动化</b>计算机的功能与用途