tag 标签: testbench

相关博文
  • 热度 23
    2019-8-2 13:39
    4119 次阅读|
    0 个评论
    1. board.RP.tx_usrapp.TSK_SIMULATION_TIMEOUT( XXX ) . 这个函数在仿真的时候被调用, XXX 指定了仿真完成的时间,所以这个时间要设置的足够长,否则仿真结果还没出来,仿真就结束了。 Xilinx官网也有人推荐修改 rx_usrapp 模块(注释掉几行)来忽略掉这个仿真时间的限制问题: always @(trn_clk or trn_rsof_n or trn_rsrc_rdy_n) begin /* //Modification if (next_trn_rx_timeout == 0) begin if(!`EXPECT_FINISH_CHECK) $display(" : TEST FAILED --- Haven't Received All Expected TLPs", $realtime); $finish(2); end */ if ((trn_rsof_n == 1'b0) && (trn_rsrc_rdy_n == 1'b0)) begin next_trn_rx_timeout = sim_timeout; end else begin if (trn_lnk_up_n == 1'b0) next_trn_rx_timeout = next_trn_rx_timeout - 1'b1; end end 2. MPS,逛论坛对这个缩写疑惑了半天(新手啊 ),应该是maximum payload size吧。 3. xapp1052给的例子的Testbench里,所有操作应该都是RP发起的。所以如果想要从BMD获得一个MRD,并想要返回一个带数据的Completion的话,就必须修改例子里的测试文件。若要强制RP返回数据,用户必须自己写一个测试任务(task),该任务用于发送一个带返回数据的Completion,数据是在 pci_exp_usrapp_tx.v中可以找到的(注意,通常在仿真中实现的RP都没有实现BRAM),当然前提是你发送之前必须对变量“DATA”进行赋值。但是,如果用户想要RP自动返回带数据的Completion(CPLD),想必用户还需要修改Rx,让其发送数据,并发送激励,同时在Tx里用户还需要创建一个新的模块,该模块仅在收到Rx发来的激励时运行。 4. 我们知道payload size取决于RP,我们在例化EP的时候,可能设置的payload长度是1024个字节,然后给出的RP仿真模型里可能只有128个字节,所以此时最大仿真的payload长度是128。若要修改,必须记住,不只是修改EP和RP的 DEV_CAP_MAX_PAYLOAD,还要修改 CFGDEVCONTROLMAXPAYLOAD ,device control register里的值是由RP来设置的。根据以下步骤修改RP模型里的devcie control register: 1)在系统初始化之后添加下列代码: board.RP.cfg_usrapp.TSK_READ_CFG_DW(32'h32); board.RP.cfg_usrapp.TSK_WRITE_CFG_DW(32'h32, 32'h7f, 4'h1); board.RP.cfg_usrapp.TSK_READ_CFG_DW(32'h32); 2)然后RP可以使用 TSK_TX_TYPE0_CONFIGURATION_WRITE任务来写EP,下面给出也给示例 // increase MPS of the EP board.RP.tx_usrapp.TSK_TX_TYPE0_CONFIGURATION_WRITE(board.RP.tx_usrapp.DEFAULT_TAG, 32'h32, 32'h7f, 4'h1);
  • 热度 31
    2016-5-23 20:30
    2332 次阅读|
    0 个评论
    在这里主要总结一下关于我对Testbench的应用和Quartus软件中自带的模板使用 1.Testbench         关于testbench,其实就是一种验证的手段。首先, 任何设计都是会有输入输出的 。但是在软件环境中没有激励输入,也不会对你设计的输出正确性进行评估。那么此时就体现出 Testbench 的重要了 -- 模拟实际环境的输入激励和输出校验的一种。在 Testbench中 你可以对你的设计从软件层面上进行分析和校验。           testbench更像一个激励的产生器。 举个简单的例子 一个简单的功能模块可能有几个input和output。 字数限制,直接上图.... 然后保存,添加仿真脚本,即可在ModelSim查看仿真信号了....... 总之,简单的来说testbench就是给模块中的输入信号做出激励赋值,用来验证仿真结果是否同设计需求   2.Quartus软件中自带的模板 位置如图:         关于Quartus软件中自带的模板我想很多伙伴应该和我一样刚学的时候都没仔细了解过.... 实际对于初学者,Quartus软件中自带的模板是官方提供的各种使用语法使用规范。所谓一千个读者就有一千个哈姆雷特...无论是查资料还是看别人的代码,感觉每个人的代码有每个人的"个性".......尤其是见到各种奇葩的书写,难理解不说...很浪费时间.....有同感的举个爪^^...........我只想说代码规范点无论在哪都很重要! 不废话了,下面以 single_port_ram 举个例子介绍一下模板的使用 有没有一种原汁原味的感觉....代码风格是不是看着简洁清晰....个人感觉如此昂! 我们在Verilog 中找到自己需要的模板  点击右下角 insert  就OK了  这样拿来直接用的模板  我们只要改写其中的一些数据就行,很简单吧.....有兴趣的自己看看别的,大致了解一下都有哪些模板,关键时刻直接插入就行了 下面再来介绍一下保存自己的模板,用的时候同样插入就行 好了....就介绍到这里.......各位如果有更多技能,请分享一下,谢谢!   备注:个人的工程习惯工程模板: 仅供参考 个人能力有限,出错请见谅,很期待能一起学习讨论
  • 热度 40
    2015-5-18 10:57
    7456 次阅读|
    10 个评论
    近期小梅哥的项 目要使用到整型数据转浮点型数据,将16位的整数转换为单精度浮点数(32bit)。本打算自己写逻辑实现的,不过考虑到本身项目时间紧,能力也有限,就 没有贸然行事。再说了,Quartus II软件中也给我们免费提供了专用的浮点转换IP。因此就直接使用该IP核来进行设计。     通过阅读Altera提供的Floating-Point IP Cores User Guide中相关章节,了解到该浮点IP包含以下功能:          整型转浮点(Integer-to-Float);          浮点转整型(Float-to-Integer);          浮点转浮点(Float-to-Float);          定点转浮点(Fixed-to-Float);          浮点转定点(Float-to-Fixed)。      本次我的项目需要使用到的功能为定点转浮点类型。因此这里只记录定点转浮点功能的测试。     小梅哥使用的是Quartus II13.0的软件,这里先介绍如何在Quartus II工程中调用添加ALTFP_CONVERT的IP核。   1、打开兆功能核向导: 2、在向导中选择新建一个用户兆功能核并点击next:   3、在Arithmetic(1)下选择ALTFP_CONVERT(2)核,并选择生成语言为Verilog(3),给IP核命一个名字(4),然后点击next(5): 4、等待大约20秒左右,打开浮点IP核的参数配置选项卡,在选项卡中,Operationmode选择An integer to a floating point(1),Integer data选择32bits(2),然后点击next: 5、设置output floating point Setting为single precision(32bits)(1),然后点击next:   6、为模块添加一个异步清零信号(1),当然这里如果不添加这个信号一般情况下使用也没有问题,勾选后点击next:   7、仿真模式设置界面,这里不需要勾选生成网表,因此直接点击next即可。 8、点击finish即可完成IP核的生成。 9、在Quartus II工程中,添加此IP核 的qip文件(fpconvert.qip)到工程中来。   10、将fpconvert.v文件设置为工程顶层文件: 11、为该IP核编写testbench文件,这里暂时不进行全面覆盖的仿真测试,只是随机取几个值进行转换,并查看仿真结果,testbench代码如下所示:   01  `timescale 1ns / 1ns 02 03  module tb ; 04 05      reg    aclr ; 06      reg    clock ; 07      wire      dataa ; 08      wire      result ; 09      10      reg data ; 11      12      fpconvert fpconvert ( 13          aclr , 14          clock , 15          dataa , 16          result 17      ); 18      19      initial clock = 1 ; 20      always   # 10 clock = ~ clock ; 21      22      assign dataa = data ?{ 16'hffff , data }:{ 16'h0000 , data }; 23      24      initial begin 25          aclr = 1'b1 ; 26          # 50 ; 27          aclr = 1'b0 ; 28          data = 32'd0 ; 29          # 100 ; 30          begin 31              data = 128 ; 32              # 200 ; 33              data = - 128 ; 34              # 200 ; 35              data = 3456 ; 36              # 200 ; 37              data = - 3456 ; 38              # 200 ;        39          end 40          $stop ; 41      end 42 43  endmodule 44 由于在实际 使用中我们的输入数据为16位的有符号整型数,而该IP核的输入为固定的32位整型数,因此需要进行16位有符号数到32位有符号数之间的转换。转换代码 如第22行所示。16位的有符号整型数,其最高位为符号位即data ,而在32位的有符号整型数中,也是最高位为符号位,即dataa 。 因此,如果直接将16位的有符号数据输入到32位的有符号整型数据端口,则势必会发生错误,因此,这里根据data的符号位data 的值来对 dataa的 高16位进行补全操作,若data 为1,则将dataa 全部填1,若data 为0,则将dataa 全部填0 即可。   使用以上testbench对该IP核的仿真结果如下图所示 :( 点击图片可查看高清原图哦 )   这里,通过仿真, 对Altera提供的浮点数据转换IP核的性能进行了测试验证。同时,Altera还提供了很多其它好用的浮点IP,我们都可以通过仿真方式来对其进行功 能的验证和性能的分析。一转眼,小梅哥已经半年没有在EDNChina上写过博客了。时隔半年,再来发文,希望大家能够给我多多鼓励,让我继续坚持下去。
  • 热度 24
    2015-5-14 23:36
    2798 次阅读|
    1 个评论
           仿真对于FPGA开发非常之重要,所以重头来过的必不可少的过程便是Modelsim的使用学习。于是不可避免的要学习testbench的编写了。        testbench编写就需要Verilog语法基础了。默默的翻书看语法去。。。这时就能体会到·timescale 1ns/1ns的作用了。这里主要用到initial块,initial模块只运行一次,每个initial模块是并行处理的。还有一个最通用的大概就是时钟激励,基本上用一个 initial begin      forever       #10ns      clk = ~clk; end 就能产生一个50Mhz时钟。         testbench的格式: 1.文件头 2.module列表 3.实例化模块 4.各种激励,包括时钟的产生。一些小仿真基本用initial模块就能解决。         modelsim使用体验:        首先是modelsim的使用。1.新建仿真工程,目录为分好的FPGA工程子目录下的sim文件夹,方便管理;2.复制要仿真的目标文件xx.v到sim中,然后再modelsim工程目录下将之添加existing file,再新建testbench文件,xx_TB.v.        其次是compile。语法错误时,按照错误报告修改再编译即可。        然后编译通过,start simulation,添加testbench激励文件,开始进入仿真模式。若要观察信号波形,需要将信号add 至右侧波形窗口。Transcrip栏输入run 1000ns,则仿真开始运行直至1000ns结束。        最后,终于可以看到波形了。        当然,modelsim的强大之处肯定完全不止这些,在以后学习中慢慢探索和开发吧。        理解可能很菜很肤浅,但所有的这些都是为了不再菜。
  • 热度 17
    2015-3-24 13:45
    1835 次阅读|
    0 个评论
      1 Testbench 的结构   1) 单 顶层 结构   一种结构是testbench 只有一个顶层,顶层再把所有的模块实例化进去。打个比方,类似树结构,只有一个模块有子节点而没有父节点,其它模块都有父节点。如下图结构所示:   测试模块是一些接口模型,接口模型还可能包含了一些激励在内。测试模块和DUV之间通过端口映射进行互连。   2) 多顶层结构   另外一种结构是多顶层结构,如下图所示:   在这种结构中,有一个顶层是作为测试向量模块,一个或多个顶层是一些公用子程序,这些子程序由于完成一些通用的功能被封装成任务、函数等被公用。   还有一个叫harness的顶层,该顶层由DUV和一些接口模型构成一个狭义上的测试平台,其它模块可以调用BFM里面的 task 或 event 等,向DUV施加激励。注意这些顶层之间是没有端口映射的,它们之间的互相调用和访问是通过层次路径名的方式来访问,上图的虚线表示层次路径名的访问。下面举例说明层次路径是如何访问的。   由于大部分人对C都有所认识,在这里作个比较,便于了解。 Verilog HDL 的顶层类似于C的结构体,而实例化的模块、任务、函数、变量等就是结构体里的成员,可以通过句点( . )隔开的方式访问结构体里面的每一个成员。如:顶层 harness 实例化进来的模块 BFM1 里面有一个任务SEND_DATA , 该任务可以产生激励输入到DUV,在 testcase 里调用该任务就可写为: initial begin   ……   harness . BFM1 . SEND_DATA ( …… ) ; end   多顶层结构的可扩展和重用性比单顶层结构强得多。层次路径的访问方式非常有用,在下一节会讲述更多的应用。   2 如何编写Testbench   1) 何时使用initial和always   initial和always 是2个基本的过程结构语句,在仿真的一开始即开始相互并行执行。通常被动的检测响应使用always语句,而主动的产生激励使用initial语句。   initial和always的区别是always 语句不断地重复执行,initial语句则只执行一次。但是,如果希望在initial里的多次运行一个语句块,怎么办?这时可以在initial里嵌入循环语句(while,repeat,for,forever 等),如: initial begin forever /* 无条件连续执行*/ begin   ……   end end   其它循环语句请参考一些教材,这里不作赘述。   另外,如果希望在仿真的某一时刻同时启动多个任务,可以使用fork....join语句。例如,在仿真开始的 100 ns 后,希望同时启动发送和接收任务,而不是发送完毕后再进行接收,如下所示: initial begin   #100 ;   fork /*并行执行 */ Send_task ; Receive_task ;   join End   2) 如何作多种工作模式的遍历测试   如果设计的工作模式很多,免不了做各种模式的遍历测试,而遍历测试是需要非常大的工作量的。我们经常遇到这样的情况:很多时候,各种模式之间仅仅是部分寄存器配置值的不同,而各模式间的测试都是雷同的。有什么方法可以减轻这种遍历测试的工作量?不妨试试for循环语句,采用循环变量来传递各种模式的配置值,会帮助减少很多测试代码,而且不会漏掉每一种模式. initial begin   for ( i = 0 ; i m ; i = i + 1 ) /*遍历模式1至模式m*/ for ( j = 0 ; j n ; j = j +1 ) /*遍历子模式1至子模式n */ begin   case ( j ) /* 设置每种模式所需的配置值 */   0 : 配置值 = a ;   1 : 配置值 = b ;   2 : 配置值 = c ;   ……   endcase /*共同的测试向量*/ end end    3) 如何加速问题定位过程   在这部分里,通过一些实际例子,介绍在出现问题时如何借助 testbench 加快问题的定位过程。   1、监测内存分配     内存分配和回收示意图   在这个例子里,假设总共有2K的内存块,希望在测试程序里监测内存分配和回收的块号是否正确,监测是否存在同一块号重复分配、重复回收的情况。设置一个 2K位的变量对内存的使用情况进行记录,每一位对应一个内存块,空闲的块号记为1,被占用的块号记为0。该变量的初始值为全1,当分配一 个块号出去时先判断该位是否为空闲,若是空闲则将该位设置为被占用,否则就为重复分配错误。相反,当回收一个块号时,先判断该位是否被占用,若是被占用则将该位设置为空闲,否则就为重复回收错误。程序如下: always @(posedge Clk or negedge Rst ) begin   if ( Rst == 1'b0 ) Mem_status = 2048 {1'b1} ;   else   begin if ( 层次路径 . rd ) /* 监测内存分配,block_rd 是分配的内存块号*/   if ( Mem_status == 1'b1 ) Mem_status = 1'b0 ;   else   begin $display ( "Error! 重复分配同一内存块! ") ; $stop ;   end if ( 层次路径 . wr ) /* 监测内存回收,block_wr 是回收的内存块号*/   if ( Mem_status == 1'b0 ) Mem_status = 1'b1 ;   else   begin   $display ( "Error! 重复回收同一内存块! ") ;   $stop ;   end end End   2、监测内部接口   如果你是位验证工程师,在做芯片级的仿真时,相信你会或曾遇到过这样的问题:在一个端口输入了激励数据,但另一端口却得不到正确的响应,而且这条路径涉及到很多模块和很多个不同设计者,为了定位问题,你可能很盲目地逐个找来设计人员,逐个模块地记录仿真波形,到解决问题时,可能几天已经过去了。   我们都知道,如果问题定位在越小的范围,就越便于解决问题。所以,我们可以把模块接口间交换的数据记录到文件里,当出现问题时,就可以查看各接口的记录数据,看问题到底出现在哪个区间,简单地查看记录文件后,你就明确该找那位designer来解决问题。   3、记录有用的DEBUG信息   记录有用的debug信息,输出到标准的I/O设备上(屏幕或文件),会给你的debug带来很大的便利,由上面的例子也可见一斑,在检测到有错误时也可使用$stop令仿真停下来。   值得注意的是,UNIX系统只有32个I/O,每个输出文件占用1个I/O设备号,其中第1个是屏幕显示,设备号是32'b1,其它I/O设备号由输出文件占用,一个信息可同时输出到屏幕和文件,如: initial begin   Ptr_log = $fopen ("log.txt ") ; /* 创建一个文件,获得文件指针 */   Ptr_log = Ptr_log | 32'b1 ; /* 指针同时指向 log.txt 文件和屏幕 */ end always @(……) begin   $fwrite ( Ptr_log, "useul message ",……) ; /*信息除了记录到文件同时,还显示到屏幕*/   …… end   虽然记录文件会给debug带来很多便利,但文件操作会降低仿真的速度,因此应当适可而止。   另外写文件通常有2种方式,不同的仿真工具有所差异。一种是每写一个字节打开关闭一次文件,如Verilog-XL。另一种是先把字符暂存到内存,等累积到一定数量(如8K字节)后再通过DMA方式把字符从内存写到文件,如Verilog-NC。因此,后一种方式就大大地降低了文件的操作次数,有利于提高仿真速度。    3 编写 Testbench 的一些高级技巧    Verilog HDL 提供很多方便和高效的建模语句,这在大多数参考书上都有介绍,在这节,只介绍一些参考教材很少介绍而较有用的建模语句。    1) force 和 release   望文生义,force即是可以对变量和信号强制性地赋予确定的值,而release就是解除force的作用,恢复为驱动源的值。例如: wire a ; assign a = 1'b0 ; initial begin   #10 ;   force a = 1'b1 ;   #10   release a ; end   在10 ns时,a 的值由0变为1,在20ns时,a 的值又恢复为0 。   force 和release并不常用,有时,可以利用它们和仿真工具做简单的交互操作。例如,Verilog-XL的图形界面可以方便的将一个信号或变量force 为0或1,在 Testbench 里,可以检测变量是否被force为固定的值,当被force为固定的值时就执行预定的操作,实现了简单交互操作。   2) 事件   事件有些类似于任务。首先需要定义一个事件,而事件可以作为敏感变量激活一个语句块的操作,事件可由“-”符号进行触发,如下例: event e1 ; /*定义一个事件*/ always @( e1 ) /*事件e1 作为敏感变量*/ begin   ..... end initial begin   — e1 ; /*创建事件e1来触发上面的always语句*/   ..... end   事件(event )与任务(task)的区别是:执行事件触发后可以立即继续往下执行语句,只起一个触发作用,至于被触发的事件何时执行完毕并不影响程序继续执行。而调用一个任务后,必须等待任务完成才能返回控制权。   3) 模块参数   当一个模块引用另外一个模块时,高层模块可以改变低层模块用parameter定义的参数值,改变低层模块的参数值可采用以下两种方式:   1)defparam 重定义参数   语法:defparam path_name = value ;   低层模块的参数可以通过层次路径名重新定义,如下例: module top ( .....) input....; output....; defparam U1 . Para1 = 10 ; /*修改实例 U1 模块中的para1 */ M1 U1 (..........); endmodule module M1(....); parameter para1 = 5 ; input...; output...; ...... endmodule   在上例中,模块M1参数 para1 的缺省值为5,而模块top实例了M1后将参数的值改为10。   2) 实例化时传递参数   在这种方法中,实例化时把参数传递进去,如下例所示: module top ( .....) input....; output....; M1 #( 10 ) U1 (..........); endmodule   在该例中,用#( 10 )修改了上例中的参数para1,当有多个参数时,用逗号隔开,如#( 10 , 5 ,   3 )传递了3个参数值。   模块参数的方法使得模块的重用性更强,当需要在同一个设计中多次实例化同样的模块,只是参数值不同时,就可以采用模块参数的方式,而不必只因为参数不同产生了多个文件。   4) 其他要注意的几个点   4) 注意@与wait的区别   @都是使用沿触发。   wait语句都是使用电平触发。   5) 注意$sreadmemb(h)与$readmemb(h)的区别   $sreadmemb(Memory, StartAddr, FinishAddr, String , ……) :读字符串到Memory。 $readmemb("File", Memory ]) :读取的第一个数字存储在地址 StartAddr,直到FinishAddr。   6) 常用系统任务 $time 返回64位整型时间 。 $stime 返回32位整型时间 。 $realtime 向调用它的模块返回实型模拟时间。
相关资源
  • 所需E币: 0
    时间: 2020-8-24 00:35
    大小: 267.44KB
    上传者: czdian2005
    Testbench教程WritingTestbench(chap7).pdf
  • 所需E币: 0
    时间: 2020-8-24 00:34
    大小: 341.69KB
    上传者: czdian2005
    Testbench教程WritingTestbench(chap6).pdf
  • 所需E币: 0
    时间: 2020-8-24 00:34
    大小: 186.52KB
    上传者: czdian2005
    Testbench教程WritingTestbench(chap5).pdf
  • 所需E币: 0
    时间: 2020-8-24 00:34
    大小: 470.77KB
    上传者: czdian2005
    Testbench教程WritingTestbench(chap4).pdf
  • 所需E币: 0
    时间: 2020-8-24 00:34
    大小: 376.72KB
    上传者: czdian2005
    Testbench教程WritingTestbench(chap1-3).pdf
  • 所需E币: 0
    时间: 2020-8-24 00:34
    大小: 2.03MB
    上传者: czdian2005
    删除Testbench教程testbench_book.pdf
  • 所需E币: 0
    时间: 2020-6-29 17:49
    大小: 112.84KB
    上传者: Argent
    号外号外!有兴趣学习硬件画PCB板的网友吗?硬件设计工程师必学的课程,常见的画板工具有AltiumDesigner,protel99,pads,orcad,allegro,EasyEDA等,此次分享的主题是使用AltiumDesigner设计你的硬件电路,万丈高楼平地起,硬件的积累至关重要。花钱收藏的AltiumDesigner资料难道不香吗?下载资料学习学习吧,希望能帮助到你。
  • 所需E币: 4
    时间: 2019-12-25 16:59
    大小: 100.3KB
    上传者: 238112554_qq
    不错的资料,与大家分享希望以后大家能够把好的资料分享,共同进步!怎样写testbench本文的实际编程环境:ISE6.2i.03ModelSim5.8SESynplifyPro7.6编程语言VHDL在ISE中调用ModelSim进行仿真一、基本概念和基础知识Testbench不仅要产生激励也就是输入,还要验证响应也就是输出。当然也可以只产生激励,然后通过波形窗口通过人工的方法去验证波形,这种方法只能适用于小规模的设计。在ISE环境中,当前资源操作窗显示了资源管理窗口中选中的资源文件能进行的相关操作。在资源管理窗口选中了testbench文件后,在当前资源操作窗显示的ModelSimSimulator中显示了4种能进行的模拟操作,分别是:SimulatorBehavioralModel(功能仿真)、SimulatorPost-translateVHDLModel(翻译后仿真)、SimulatorPost-MapVHDLModel(映射后仿真)、SimulatorPost-Place&RouteVHDLModel(布局布线后仿真)。如图1所示:图1lSimulatorBehavioralModel也就是所说的功能仿真、行为仿真、前仿真。验证功能是否正确,这是设计的第一步。功能仿真正确的程序不一定能被正确综合,也就是硬件实……
  • 所需E币: 5
    时间: 2019-12-25 16:00
    大小: 100.3KB
    上传者: 16245458_qq.com
    怎样写testbench怎样写testbench本文的实际编程环境:ISE6.2i.03ModelSim5.8SESynplifyPro7.6编程语言VHDL在ISE中调用ModelSim进行仿真一、基本概念和基础知识Testbench不仅要产生激励也就是输入,还要验证响应也就是输出。当然也可以只产生激励,然后通过波形窗口通过人工的方法去验证波形,这种方法只能适用于小规模的设计。在ISE环境中,当前资源操作窗显示了资源管理窗口中选中的资源文件能进行的相关操作。在资源管理窗口选中了testbench文件后,在当前资源操作窗显示的ModelSimSimulator中显示了4种能进行的模拟操作,分别是:SimulatorBehavioralModel(功能仿真)、SimulatorPost-translateVHDLModel(翻译后仿真)、SimulatorPost-MapVHDLModel(映射后仿真)、SimulatorPost-Place&RouteVHDLModel(布局布线后仿真)。如图1所示:图1lSimulatorBehavioralModel也就是所说的功能仿真、行为仿真、前仿真。验证功能是否正确,这是设计的第一步。功能仿真正确的程序不一定能被正确综合,也就是硬件实……
  • 所需E币: 5
    时间: 2019-12-25 15:45
    大小: 1.13MB
    上传者: 238112554_qq
    适合新手……
  • 所需E币: 4
    时间: 2019-12-25 11:37
    大小: 238.07KB
    上传者: 二不过三
    VerilogHDL及其Testbench编写方法学习总结系列之五……
  • 所需E币: 3
    时间: 2019-12-25 09:48
    大小: 181.09KB
    上传者: 二不过三
    如何编写高效的Testbench……
  • 所需E币: 3
    时间: 2019-12-25 06:12
    大小: 1.53MB
    上传者: 238112554_qq
    如何用VHDL写Testbench……
  • 所需E币: 4
    时间: 2019-12-25 06:12
    大小: 1.91MB
    上传者: 978461154_qq
    如何用VHDL写Testbench……
  • 所需E币: 5
    时间: 2019-12-25 06:12
    大小: 121.74KB
    上传者: 二不过三
    ArtofWritingTestBenchesArtofWritingTestBencheshttp://www.asic-world.com/verilog/art_testbench_writing.htmlJan-2-2006IntroductionBeforeyouStartExample-CounterCodeforCounterTestPlanTestCasesWritingTestBenchTestBenchTestBenchwithClockgenTestBenchcontinues...AddingResetLogicCodeofresetlogicAddingtestcaselogicTestCase1-Asserting/De-assertingresetTestCase2-Assert/De-assertenableafterresetisapplied.TestCase3-Assert/De-assertenableandresetrandomly.AddingcompareLogicIntroductionWritingtestbenchisascomplexaswritingtheRTLcodeitself.ThisdaysASIC'saregettingmoreandmorecomplexandthusthechallengetoverifythiscomplexASIC.Typically60-70%oftim……
  • 所需E币: 4
    时间: 2020-1-4 23:17
    大小: 281.07KB
    上传者: 978461154_qq
    学习写testbench的入门文档……
  • 所需E币: 4
    时间: 2020-1-4 23:34
    大小: 86.23KB
    上传者: givh79_163.com
    TestbenchDesign,ASystematicApproach.……
  • 所需E币: 5
    时间: 2020-1-4 23:34
    大小: 58.89KB
    上传者: 978461154_qq
    testbench编写教程(英文)……
  • 所需E币: 5
    时间: 2019-12-24 20:39
    大小: 367.97KB
    上传者: wsu_w_hotmail.com
    【应用手册】AN585:SimulationDebuggingUsingTripleSpeedEthernetTestbenchThisapplicationnoteshowshowyoucanleveragetheverificationenvironmentinthetestbenchprovidedintheAltera®TripleSpeedEthernetMegaCore®functiontodebugyoursystemdesign.Youcanusethedifferenttypesofloopbackinthetestbenchtosimulateyoursystemdesign,andcreatevariouscommonscenariosbyconfiguringtheparametersandthestatemachineinthetestbench.TheTripleSpeedEthernetMegaCorefunctionconsistsofa10/100/1000MbpsEthernetmediaaccesscontroller(MAC),a1000BASE-Xphysicalcodingsub-layer(PCS),andanoptionalphysicalmediumattachment(PMA).TheTripleSpeedEthernetMegaCorefunctionsupportsseamlessinterfacetocommercialEthernetPHYdevicesviamediumindependentinterface(MII)andgigabitmediumindependentinterface(GMII).TheMegaCorefunctionalsosupportsreducedgigabitmediumindependentinterface(RGMII)in10/100/1000Mbps.TheTripleSpeedEthernetMegaCorefunctionprovidesatestbenchthatsupportssimulationofallbasicEthernetpackettransactions,andhasaneasy-to-usesimulationenvironmentforanystandardHDLsimulator.Thetestbenchconsistsofdeviceundertest(DUT)moduleswhicharethecustomMegaCorefunctionvariations,theEthernetframegenerators,andclockandresetgenerators.ThetestbenchisintendedforsimulatingcommonconfigurationsandmaynotcoverallthepossibleconfigurationsoftheTripleSpeedEthernetMegaCorefunction.AN585:SimulationDebuggingUsingTripleSpeedEthernetTestbenchAugust2009AN-585-1.0IntroductionThisapplicationnoteshowshowyoucanleveragetheverificationenvironmentinthetestbenchprovidedintheAlteraTripleSpeedEthernetMegaCorefunctiontodebugyoursystemdesign.Youcanusethedifferenttypesofloopbackinthetestbenchtosimulateyoursystemdesign,andcreatevariouscommonscenariosbyconfiguringtheparametersand……
  • 所需E币: 4
    时间: 2019-12-24 11:15
    大小: 8.58MB
    上传者: 二不过三
    编写测试平台:HDL模型的功能验证(第二版)……