验证环境说明_第1页
验证环境说明_第2页
验证环境说明_第3页
验证环境说明_第4页
验证环境说明_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一级第二级第三级第四级第五级第六级Verification验证的根目录Shared共享的函数IIIII——>>>Sae验证的主目录,所有模块级和顶层的验证环境都在这个目录下Chip_top验证环境的设计也是按照模块分开进行的,这样便于多个模块同时协同工作,这里以顶层chip_top为例。每一个目录代表一个模块,每一个目录下面的结构都是相同的。MakefileMake文件里定义了一些常用的工具的快捷使用方式,包括工具的参数定义等等。II——>>>Tb主要的验证用的代码都放在这个目录下。IIIII——>>>Test针对这个模块的testcase在存放在这个目录下。Fast_full_mesh这个目录存放不同的testcase,以fast_full_mesh为例。每一个testcase以一个目录的形式存在,每一个目录都用相同的结构。Makefile这个make文件时上一级目录中make文件的符号链接IIIIIIIIIITest.cfg这个文件是个参数定义文件,在测试代码里面定第一级第二级第三级第四级第五级第六级|||||||||||||||IIII——>>>义了大量的可以调整的参数,以适应不同的测试要求,这些参数都可以在这个文件中以文本的形式进行修改。修改这个文件的内容后,不需要进行重新编译,就可以运行仿真。|||||||||||||IIIII——>>>Test.vr这个文件定义了这个testcase的验证流程,一般情况下,这个文件都用固定的内容和格式,只是针对不同的testcase,调用的函数有所不同。||——>>>Verilog_socket针对该模块的验证环境的顶层文件Incfilelist.v文件列表,里面列出了被验证模块的所有文件。III——>>>Makefile这个make文件时上一级目录中make文件的符号链接IIIITest.vr这个文件定义了这个testcase的验

第一级第二级第三级第四级第五级第六级|——>>>证流程,和testcase中的test.vr不同,这个文件和具体的testcase无关。|||||——>>>Top.test_top_vera_verilog・v这个文件是验证环境的verilog顶层。在这个文件里,调用了一个 叫test_shell.v的模块,通过这个模块,vera编写的验证代码可以和verilog编写的芯片相互作用,进行验证。|||||——>>>Top.v这个文件里调用了DUT( designundertest),也就是我们需要验证的芯片的文件。在这个文件里,还可以通过芯片的管脚,对芯片的工作模式进行一些配置,以便进行不同的验证。、验证操作流程。

步骤命令行说明1、在verilog_socket目录下,运行makeshell这个命令主要是编译vera代码,生成test_shell.v。这个文件是verilog和vera之间的桥梁,vera生成的激励通过这个文件就可以加载到verilog代码中。这个命令不是每次仿真都需要执行,只要vera代码没有改变,就不需要重新执行。2、在verilog_socket目录下,运行makevcs这个命令是编译所有的verilog文件。编译生成simv文件,这个文件是vcs仿真的执行文件。这个命令不是每次仿真都需要执行,只要verilog代码没有改变,就不需要重新执行。3、在test/fast_full_mesh目录下,运行makevera这个命令主要是编译vera代码,生成test.vro。这个文件包含了和testcase相关的内容,在执行simv的时候会被加载。这个命令不是每次仿真都需要执行,只要vera代码没有改变,就不需要重新执行。4、在test/fast_full_mesh目录下,运行plruntest.cfgPlrun是一个perl的脚本文件,主要内容就是执行simv,同时加入了一些参数检测,比如test.cfg。如果仅仅是改变了test.cfg里面的参数,可以不需要重新执行前3步,直接执行第4步即可。执行的结果,会在当前目录下,生成waveform目录,里面存放的就是仿真的波形文件。另外,还会生成一个mem_table目录,这个目录下存放的是仿真时自动产生的芯片内部一些表项的初始化文件。这些文件在仿真开始以后会被加载到内部的RAM中,这样可以避免通过cpu来配置表项,节省了仿真时间。另外,针对FPGA的RAM,因为初始化的文件格式不一样,所以编写了一个基于python的mif_gen.py的脚本,用来将txt文件自动转换成mif格式。三、代码结构。验证环境是由vera语言编写而成的,vera是一种类似C++的面向对象的编程语言,和C++的不同在于针对硬件验证的需求,添加了一些特有的功能,比如,fork--join,用来实现并行处理;mailbox,用来在不同的模块之间传递数据。下面以chip_top为例,简单介绍一下代码的结构。在tb目录下,有一个sae_chip_top.vrh文件,这是这个模块验证的顶层代码,和其他面向对象的编程语言一样,这里其实是定义了一个class,以及一些对应的task。比如,这里定义了sae_chip_top_t这个类,而这个类是obejct_t这个类的扩展,object_t这个class是在shared目录下的object.vrh中定义的。Sae_chip_top_t这个class里面包含了sae_cmic_top_t等子class,这些都是子模块的验证环境。同时还包括很多task,比如new,每一个类都需要一个new的task;再比如fast_full_mesh,这个就是一个testcase,这个函数里面描述了要完成fullmesh这个test需要的操作过程。每一个testcast都对应一个task。在tb目录下,还有一个chip_top_if.vrh文件,if代表interface,这个文件就是vera和verilog之间的桥梁,也是上文提到的test_shell.v的基础。这个文件中,首先要定义interface,这个是描述在验证中会用到的verilog的接口信号,这些信号可以是芯片的接口,也可以是芯片内部的信号,可以是输入,用来从外部加入激励,也可以是输出,用来让vera获取芯片输出的状态。然后要定义port,port就是interface定义的信号在vera中的表现形式。Port定义好后,需要通过bind来讲interface和port绑定起来,这样,vera对port的操作,最后就体现为对verilog的操作。下面,以fast_full_mesh为例,讲解一下testcase的代码。tasksae_chip_top_t::fast_full_mesh(){integeri;integerport_num;〃新建一个chip_top_t的实例new_sae(O,l,O);〃打印test.cfg里面的参数plus.print(*);〃复位芯片reset_system(0,100);//fork〃新建一个arl_top的实例sae_arl_top=new(plus,0);〃sae_np_top=new(plus,0);〃JOIN_NONE〃调用cmic_top下面的函数,完成pci的配置sae_cmic_top.config_pci_core();〃调用cmic_top下面的函数,完成mmu的配置sae_cmic_top.setup_mmu();〃调用cmic_top下面的函数,完成百兆端口0的配置sae_cmic_top.setup_a_epic_port(0,0);'ifndefEIGHT_PORT〃调用cmic_top下面的函数,完成千兆端口的配置sae_cmic_top.setup_a_gpic_port(3);sae_cmic_top.setup_a_gpic_port(4);'endif〃调用cmic_top下面的函数,完成arl的配置sae_cmic_top.setup_arl2();'ifndefEIGHT_PORTport_num=24;'elseport_num=8;'endif〃调用cmic_top下面的函数,完成其他百兆端口的配置for(i=0;i<port_num;i=i+2){if(i!=O){sae_cmic_top.setup_a_epic_port(i/8,i%8);}sae_cmic_top.setup_a_epic_port(i/8,i%8+l);}//for//在forkjoin之间被调用的函数,都是并行执行的。Fork//ping_pair(0,1)在端口0产生目的端口是1报文,同时在端口1检查收到的报文是否正确。依此类推。{ping_pair(0,1,null,1,0);}{ping_pair(1,0,null,1,0);}{ping_pair(2,3,null,1,0);}{ping_pair(3,2,null,1,0);}{ping_pair(4,5,null,1,0);}{ping_pair(5,4,null,1,0);}{ping_pair(6,7,null,1,0);}{ping_pair(7,6,null,1,0);}'ifndefEIGHT_PORT{ping_pair(8,9,null,1,0);}{ping_pair(9,8,null,1,0);}{ping_pair(10,11,null,1,0);}{ping_pair(11,10,null,1,0);}{ping_pair(12,13,null,1,0);}{ping_pair(13,12,null,l,0);}{ping_pair(14,15,null,l,0);}{ping_pair(15,14,null,1,0);}{ping_pair(16,17,null,1,0);}{ping_pair(17,16,null,1,0);}{ping_pair(18,19,null,1,0);}{ping_pair(19,18,null,1,0);}{ping_pair(20,21,null,1,0);}{ping_pair(21,20,null,1,0);}{ping_pair(22,23,null,1,0);}{ping_pair(23,22,null,1,0);}{ping_pair(24,25,null,1,0);}{ping_pair(25,24,null,1,0);}'endifJOIN_NONE〃持续运行20000个周期,确保所有生成的报文都被处理完。repeat(20000)@(posedgeCLOCK);}//fast_full_mesh四、测试自动化。传统的测试方法,是通过验证环境生成激励,然后通过仿真波形观察结果是否正确。在规模比较小的设计中,这种方式是可行的。但是对于大规模的设计,或者测试激励非常多的设计,这样不仅不可行,而且不可靠。因此,验证的发展趋势是自动化。本项目的验证也采用了自动化的方法,具体思路如下图:图中,PKT_GEN是报文生成模块,相当于产生激励的模块,DUT是design

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论