网站大量收购独家精品文档,联系QQ:2885784924

FPGA软件验证技术(下).ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FPGA软件验证技术(下)

——Testbench的编写方法 什么是Testbench 测试平台(Testbench)指一段仿真代码,用来为设计 产生特定的输入序列,也用来观测设计输出的响应。 测试平台是系统的控制中心,验证的任务就是确定产 生什么样的输入模式,以及获得期望的设计输出。 在不改变所设计的硬件系统的前提下采用模块化的方 法进行编码验证。把设计描述和功能验证描述分开。 测试平台从来都不需要硬件实现 tesbench基本框架 测试平台是一个封闭的空间 testbench基本框架 testbench的目标 验证HDL代码功能的正确性; 1)待验证的模块加载到模拟验证环境; 2)产生验证所需的激励。 3)对输入激励码,构造出其对应的正确输出结果。 4)提供一种机制,自动判断Design的正确性。 如何编写testbench 1)TestBench是个无输入输出的HDL顶层模块。 2)其内部需要实例化DUT模块。 3)需要定义被测模块内的连接线 4)为被测顶层模块提供符合规范的输入激励。可写为激励模块或直接在Testbench中添加。 5)观察设计输出和内部信号并与理想结果相比较。 6)不需要只使用可综合的语句。可以使用系统任务语句实现。 testbench书写结构(1) `timescale 1ns / 1ps module testbench(); 参数说明 寄存器、线网类型变量的定义、说明; DUT 实例化语句 时钟信号定义、赋初值; 定义置/复位信号的变化情形; 用一个或多个initial语句块产生DUT的模拟激励向量用task等定义DUT外部时序接口 endmodule Testbench书写结构(2) `timescale 1ns / 100ps module TestBench() ; 参数说明; 寄存器、线网类型变量的定义、说明; DUT 实例语句; 时钟信号定义、赋初值; 定义置/复位信号的变化情形; `include “产生输入激励码的HDL代码段” ; endmodule 常用信号的产生方式 1)时钟信号的产生方式 使用always语句产生。 forever语句产生。 2)复位信号产生 在initial语句中赋值的方法产生。 时钟信号 1)使用always循环语句产生不断变化的时钟信号 parameter PERIOD=10; reg clk; initial clk=0; always #(PERIOD/2)Clk=~Clk; 时钟信号 2)使用forever语句实现 initial begin #20 clk = 1; forever begin #(PERIOD*0.5) clk = 0; # (PERIOD*0.5) clk = 1; end end 通过修改延时时间可以改变时钟信号的占空比 复位信号 复位信号在验证中只考虑开始仿真时复位一次,根据不同的复位考虑复位时间的长短。 复位信号直接在initial块中赋值即可。 reg rstb; initial begin rstb=1’b0; #1000 rstb=1’b1; end 施加激励的方式 行激励 强制激励 使用循环添加激励 预设输入激励码向量方式 使用task语句 系统任务和系统函数 行激励 在initial语句中按顺序添加绝对延时激励 reg[7:0] ts_data; Initial begin ts_data=8’b0; #100 Ts_data=8’h47; #100 Ts_data=8’h1f; end 优点: 添加方便,简洁,易于理解; 缺点: 难于管理,不容易过程化。 强制激励 添加强制赋值的方式,添加激励源。 1)使用assign和deassign语句 initial begin #10 assign top.dut.fsm1.state_reg = `init_state; #20 deassign top.dut.fsm1.state_reg; end 2)使用force和release语句 initial begin #10 force top.dut.counter.scan_reg.q = 0; #20 release top.dut.counter.scan_reg.q; end 使用循环语句 在initial语句块中用循环结构描述具有一定变化规则的输入激励信号 initial begin for (i = 0;i = 255;i=i + 1) @(negedge clk) stimulus = i; #20 $finish; end 优点: 1)

文档评论(0)

kabudou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档