如何编写testbench的总结

所需积分/C币:36 2017-09-16 10:28:16 247KB PDF
收藏 收藏
举报

如何编写testbench的总结如何编写testbench的总结如何编写testbench的总结如何编写testbench的总结如何编写testbench的总结如何编写testbench的总结
HDL或 verilogHDL来描述,测试设计的验证过程可以在不同的平台或不同公司的 软件工具环境完成。另外,由于VHDL或veri1 OgHDL是公开的通用标准语言,使用V DL或 verilogHDL来描述验证设计可以亳无困难的在将来重用 Testbench Verification flow Testbench Displays values Testbench Instantiates Design on termina and provides stimulus TENON、.eeM esign Under lest Verity Result DUT) on Waveform Testbench Checks for Correctness 图1使用测试设计的HDL测试验证流程 构建测试设计: 测试设计可以用ⅥDL或 veriloghdL米描述.因为测试设计只用米进行仿真, 它们没有那些适应综合中仅应用的rt1语言子集的语法约束的限制.而是所有的 行为结构都可以使用。从而测试设计可以编写的更为通用,使得它们可以更容易 维护。 所有的测试设计包含了如表1的基本程序段块。正如上所提刭的,测试设 计一般包含更多的附加功能,如在终端上可视的结果和内建的错误检测。 VHDL Verilog Entity and Architecture Declaration Module Deelaration Signal Declaration Signal Declaration Instantiation of Top-level Design Instant ation of Top-level desig 点击在新谢口查看原始图片 Provide stimulus Provide stimulus 表1测试设计的基本程序段 下面的例子说明经常使用的测试设计的结构。 产生时钟信号 使用系统时钟来的时序逻辑设计必须产生时钟。重复的时钟信号可以很容易 的在vhdl或 verilog源码中实现。以下是vhd1和 verilog的时钟发生示例。 VHDL - Declare a clock period constant Constant ClockPeriod TIME =10 ns Clock generation me thod 1 Clock <=not Clock after ClockPeriod/2 Clock generation method 2 GENERATE CLOCK: process egin wait for (ClockPeriod/2) Clock<=’1 wait for (ClockPeriod/ 2) Clock<=’0 end process; Verilog //Declare a clock period constant. Parameter clockPeriod =10 / Clock Generation method I initial begin forever Clock =#(ClockPeriod/2)Clock nd // Clock Generation method 2 initial begin always #(Clock Period/2) Clock=Clock end 准备激励信号 为了获得测试设计的验证结果,激励必须在测试设计中提供。在测试设计中 使用的并行激励块提供必要的激励。两个方法被考虑:绝对时间激励和相对时间 激励。在第一个方法里,仿真变量被详细描述为相对于仿真时间零点。通过比饺, 相对时间激励提供初始值,然后在重触发激励前等待一个事件。根据设计者的需 要,两种方法可以在测试设计中组合使用。 点击浏览该文件 表2绝对时间激励 表2和表3分别以hdl和 verilog提供了一个绝对时间激励和相对时间激励 的源代码。 点击浏览该文件 表3相对时间激励 ⅥDL进程块和 Verilog初始块与设计文件中的其他的进程块或初始块同时执 行。然而,在每一个进程块或初始块中,事件是按照书写的顺序有序的规划的。 这说明在仿真时间零点并发的每一个块激励的顺序。多模块应该被用来将复杂的 激励顺序分解为有更好的可读性和方便维护的代码。 显示结果 在 verilog中推荐使用关键字$ display和$ monitor 显示结果。虽然ⅵhd没有等效的显示指令,它提供了 std textio标准文本输 入输出程序包。它允许文件的io重定向到显示终端窗凵(作为这个技术的示例, 参看下亩的自较验查验证设计) 下面是 verilog示例,它将在终端屏幕上显示一些值。 // pipes the ASCIi results to the terminal or text edi tor initial begin Stimeformat(9, 1, ns", 12) Display( time Clk Rst Ld SftRg Data Se1 $ lion tor("%L‰b%b%%b‰%",$ realtime, clock, reset, load, shiftreg, data, sel) 关键字 display在终端屏幕上输出引用的附加的说明文字(“。。。”).关键字$ moni tor操作不同。因为它的输出是事件驱动的。例中的变量 Realtime(由用户 赋值到当前的仿真时间)用于触发信号列表中值的显示。信号表由变量 $ realtime开始,跟随其他将要显示的信号名( clock, reset,load等)。以 %开始的关键字包含一个格式描述的表,用来控制如何格式化显示信号列表中的 每个信号的值。格式列表是位置确定的。每个格式说明有序地与信号列表中的信 弓顺序相关。比如%说明规定了$ realtime的值是时间格式。并且第一个‰说明 符格式化 clock的值是二进制形式。 verilog提供附加的格式说明,比如‰用于说 明十六进制,说明十进制,%c说明显示为八进制。(参见 verilog准则了解完 整的关键字及格式描述符) 点击浏览该文件 简单的测试设计 简单的测试设计实例化用户设计,然后提供相应的激励。测试输出被图形化 显示在仿真器的波形窗口甲或者作为文本发送到用户的终端或者是管道输出文 本 以下是一个简单的用 Verilog实现的设计,它实现了一个移位寄存器的功 module shift reg (clock, reset, load, sel, data, shiftreg) input clock input reset nput load nput [1: 0 nput [4:0] data output [4:0 shiftreg reg [4: 0] shiftreg always @(posedge clock) begin 1f (rese else if (load) shiftreg data else case (se1) 2 b00: shiftreg shiftreg 2 b01: shiftreg- shiftreg<< 1 2 b10: shiftreg shiftreg >>1 default: Shiftrey shifureg ndcase end endiodule 以下是简单的测试设计示例移位寄存器设计的例子, verilog描述 module testbench;// declare testbench name reg clock reg load; reg reset:// declaration of signals wire l4:0」 shiftreg; eg [4: 0 dat. reg[1: 0 sel / instantiation of the shift reg design below shift reg dut( clock (clock) load (load) reset (reset) shiftreg (shiftreg) data (data) sel (se1)) //this process block sets up the free running clock tial begin forever #50 clock en nitial begin// this process block specifies the stimul reset =1 lata=5’b00000 load =0 sel=2’b00 #200 reset =0. load =1 #200 data=5’b00001; #100 sel=2’b01 #200 sel=2 b10 #1000$stop; ene initial begin// this process block pipes the ASCII result s to the //terminal or text editor Slime format(-9, 1, ns", 12) Display( time clk rst Ld SftRg Data Sel") monitor("%t%‰%%%‰%",$ realtime, clock, reset, load, shiftreg, dala, sel) end endmodule 以上:的测试设计实例化设计,设置时钟,提供激劢信号。所有的进程块在仿 真时间零点开始。英镑标记(#)说明下一个激劢作用前的延迟。$stop命令使 仿真器停止测试仿真(所白测试设计中都应该包含一个停止命令)。最后,$m0 nitor语句返回 ascII格式的结果到屏幕或者管道输出到一个文本编辑器。接后 的是一个vhdl描述的的测试设计,它实例化设计并提供激励到上述用 verilog 描述的移位寄存器 VHDL测试设计示例: library ieee use IEEE std logic 1164. all entity testbench is end entily testbench architecture test reg of testbench is component shift reg is port (clock in std logic reset in std logic; load: in sid logic sel: in std logic vector(1 downto o) data: in std logic vector(4 downto o) shiftreg: out std logic vector(4 downto 0) end component signal clock, reset, load: std logic signal shiftreg, data: std logic vector(4 downto 0) signal sel: std logic vector(l downto o constant clockperiod: TiMe :=50 ns egan UUT: Shift reg port map (clock =>clock, reset => reset load-> load. data-> data shiftreg =>shiftreg) process begin clock < not clock after(ClockPeriod/2) end process; process begin reset(=’1’; data<="00000 load set<="00 wait for 200 ns reset<=’0 load<=’1 wait for 200 data<="00001″ wail lor 100 ns: se( oa wait for 200 sel<="10 wait for 1000 ns end process end architecture test reg 上述vhd测试设计与之前提到的 verilog测试设计的功能是相似的,如希 望用一个命令来返回输出到终端。在vhdl中, std textio程序包被用于在终端 显示信息,它将被搁到下一节说明。 自动验证 推荐自动实现测试结果的验证,尤其是对于较大的设计米说。自动化减少了 检设计是否忙确所要求的时间,也使人可能的犯错最少。一般有以下几种常用 的自动测试验证的方法: l、数据库比较。首先,要创建一个包含预期输出(一个黄金向量文件)的 数捃库文件。然后,仿真输出被捕获并与黄金向量文件中参考的向量比较(在u n1Ⅹ 中的diff 工具可以用来比较asci数据文件)。然而,因为从输出到输入文件指针没 有提供,是这种方法的一个缺点,使得跟踪一个导致错误输出的原因比较困难。 2、波形比较。波形比较可以自动或是手动的运行。自动的方法使用一个测 试比较器来比较黄金波形与测试输出波形。 xilinx的hdl bencher工具可以用于执行一个自动波形比较(关于 hdl bencher的相关信 息,请参看 http://www.xilinx.com/products/software/statecad/index.htm) 3、自铰验测试。一个自较验测试检查预期的结果与运行时间的实际结果, 并不是在仿真结束以后。因为有用的错误跟踪信息可以内建在一个测试设计中 用来说明哪些地方设计有误,调试时间可以非常明显地缩短。更多的关于自较验 测试的信息在下一节说明。自较验测试 自较验测试通过在一个测试文栏中放置一系列的预期向量表来实现。运行时 间时间间隔将这些向量与定义好的实际仿真结果进行比较。如果实际结果与预期 结果儿配,仿真成功。如果结果不匹配,测试报告两者的差异 为同步设计实现自较验测试更简单一些,因为与实现的结果相比较可以在 个时钟沿或任何一个整数倍的时钟周期后。比较的方法基丁设计本身的特性。比 如一个川于内存I/O的测试应该检查每一次更新数据时的结果或者从一个内存 位置读取。类似的,如果一个设计用了一个显而易见的组合块的数字,在预期结 果描述时,组合时延就必须要考虑。 在自较验测试中,预期输出与实际输出在一个特定的运行时间间隔比较以便 提供自动的错误检查。这个技术在小到中型的设计中非常好。但是,因为当设计 复杂后,可能的输出组合成指数伃的增长,为一个大型设计编写一个自较验测试 设计是非常困难和非常费时的 以下是一个用 verilog和 vhdl描述的自较验测试的简单的例子 Verilog例子 下述的设计实例中,预期的结果被详细说明。后面的代码,两种结果被比较 北较的结果被返回终端。如果没有错误,一个“ end of good imulation”消息会显示。如東失配发生,根据期望与实际值的失配情况, 错误会被相应报告。 timescale 1 ns,1 ps module test sc reg tbreset, tbstrtstop reg bclk; wire [6: 0 onesout, tensout wire [9: 0 tbtenthsout parameter cycles =25 reg [9: 0] Data in t [0: cycles / Instantiation of the Design stopwatch UUT (.CLK (tbclk),. RESeT (tbreset),. STRTSTOP (tbstrtstop oneSoUT (onesout),. TENSoUT (tensout),. TENTHSOUT(toten thsout)) wire [4: 0 tbonesout, tbtensouu assign tbtensout= led2hex(tensout); assign tbonesout led2hex(onesout) N /// //EXPECTED RESULTS //// nitial begin Data in t[11=10’b1111111 Data in t[2]=10’b11111 Data in t[3_-10’b1111111011 Data in t[4=10'blllll1o1ll Data in t[5=10’b1111101111 Data in t[6=10’b1111011111 Data in t[7=10’b1011111 Data_int[8-10’b110111111; Data in t[9]=10’b101111111 Data_int[10]=10’b0111 Data in t[11]=10’b11111110 Data in t[2]=10’bll0 Data in t[13]-10’b111111101; Data in t[14]=10’b11111 Data in t[15]=10’bl11111011l Data_int[16]=10’b1111011 Data in t[17]=10’b1111011111 Data in t[18=10,b1110111111 Data in tl19=10’b1101111111 Data in t[20]=10'b1011111111 Data in t[21]=10’b01111111 Data in t[22]=10’b111110 Data_int[23]=10’b11111111) Data in tl24」=10’b111111101 Data in t[25]=10'b1l11l11011 end reg gSr assign glbl GSR=GSR; initial begin GSR =I // Wait till Global Reset Finished #100GSR=0 ene // Create the clock initial beg bclk =0: / Wait till Global Reset Finished, then cycle clock #100 forever #60 bclk bclk nitial beg / Initialize All Input Ports treeset=⊥ tbstrtstop=1 / Apply design Stimulus #240 tbreset =0 tbstrtstop=0 #5000 tbstrtstop= 1 #8125 tbstrtstop= 0 #500 tbstrtstop- 1 #875 tbreset =1 #375 tbreset =0:

...展开详情
试读 23P 如何编写testbench的总结
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
  • GitHub

    绑定GitHub第三方账户获取
  • 签到新秀

    累计签到获取,不积跬步,无以至千里,继续坚持!
关注 私信 TA的资源
上传资源赚积分or赚钱
最新推荐
如何编写testbench的总结 36积分/C币 立即下载
1/23
如何编写testbench的总结第1页
如何编写testbench的总结第2页
如何编写testbench的总结第3页
如何编写testbench的总结第4页
如何编写testbench的总结第5页

试读结束, 可继续读2页

36积分/C币 立即下载 >