1)首先定义纯虚类Sv_object,主要实现下边两个function:

定义local static 变量nextobjectID;

虚方法 virtual function void copy(St_object that, CloneType clone_type = DEEP);在基类中复制都可以通过super.copy来迭代copy。

2)在Sv_object的基础上,实现对mailbox和event的封装。产生两个基类Sv_mailbox_wrapper与Sv_event_wrapper。其中event多用在进程的控制

(wait(event), event(trigger)等形式放在function内),mailbox主要用在transaction的传递。

3)在Sv_object的基础上,建立一个Sv_testobject的纯虚类,来作为验证环境中各个组件的基类,在该基类中实现4个funciton,start,stop,main,reset。利用

event将这几个funciton联系起来。这样便有了一个基本的控制流程。

4)Transaction类的建立,这个类不算验证环境中的构件,所以用Sv_object来extends。不过同样要在Sv_transaction这个类中建立基本的流程,比如:

generate,execute,check。分别作用在generator段,driver, monitor,DUT段,check段。同样通过event来实现,可以实现三个function来控制这

三个event,在上层调用实现callback。这都是针对一个tranaction来说的流程。

5)Generator基类的建立,在Sv_testobject的基础上extends,要重新定义一个generate的function,来让testcase中的generator来重定义,完成randomized

和一些例外的constrain,或其他的回调函数。

6)Driver基类的建立,在Sv_testobject的基础上extends,因为需要加入额外额reset信号,所以在Sv_testobject的基础上,加入另外两个优先级更高的

function,这里的优先级也就是通过event阻塞来实现的,wait_for_reset, reset。

7)Monitor基类的建立,在Sv_testobject的基础上extends,主要是在Sv_testobject的基础上定义一个receive_trans的function,来接收从DUT发出的信号。

8)Check基类的建立,在Sv_testobject的基础上extends,这个类与具体的test相关较大,基类中只需定义一些event来表示start和done。

9)Test基类的建立,在Sv_testobject的基础上extends,这个类主要是完成流程的控制,可以分为GenConfig(), ConfigDut, Build(), start(), stop, report,

总体先配置好环境,在配置DUT,而后clock, reset, 信号进来完成初始化,而后start验证平台的各个模块开始工作,在这个阶段再根据Transaction的三个

function来细分控制。

10)test_trans类的建立,在Transaction的基础上extends,主要是针对一些DUT中的信号的randmize定义和constrain,还需要建立一个param_trans的

function,主要是传递transaction,这样可以在最顶层直接例化function之后将相应的mailbox联系起来。

11)test_generator类的建立,在Generator基类的基础上extends,主要是重定义generator这个function,也就是完成randomized和一些例外的constrain,或

其他的回调函数。同样建立一个param_trans的function,接收来自test_trans的transaction。顶层例化,mailbox连接。

12)test_driver类的建立,在Driver基类的基础上extends,主要加入reset的控制,重定义driver基类中的wait_for_reset和reset这两个function。同样建立一个

param_trans的function,接收来自test_generator的transaction和clk, reset, DUT的interface虚接口。顶层例化,mailbox连接。

13)test_Monitor基类的建立,在Monitor基类的基础上extends,主要是收集DUT的部分信号。同样建立一个param_trans的function,可以将收集到的信号组成

一个transaction发送给test_check,还可以引入一些clk, reset的interface虚接口。顶层例化,mailbox连接。

14)test_check类的建立,在check基类的基础上extends,定义一些很细节的function,来根据收到的transaction与预想的行为进行比对。同样建立param_trans

的function,来接受Monitor发来的transaction。顶层例化,mailbox连接。

15)testcase类的建立,在test基类的基础上extends,主要是配置验证环境,重定义GenConfig(), ConfigDut这两个function,并且在build这个function中,例化

各个组件的param_trans这个function,来将各个mailbox连接起来。

16)定义一个Testbench_top的module,主要例化 DUT_module, DUT_if, clk_if, reset_if等RTL文件。

16)定义一个program,例化 testcase.sv, top。在initial中通过调用一个testcase中的GenConfig()来开始,整个环境开始执行。

最后还需要加入cover_file.sv和assert_file.sv,这两个文件不需要很复杂的继承,直接按testcase定义就好,一般还需要相应的interface信号,来与DUT进行连

接。cover_file_if, assert_file_if。直接通过bind top绑定到顶层就好。需要修改覆盖率和SVA的时候可以直接修改,他们不影响整个验证环境。

额外定义reset和clock的模块,放在module中。它们的cover_file和assert_file,也最好单独验证。

DUT中register的值得获取,通过Apb总线,在Driver中进行配置。

register值得获得,可以通过monitor来得到,其中test_regif是通过bind   xxxx  来定位到DUT中寄存器所在的那一级module 。

当然这只是一些最基本的模块,还有log文件在这个环境中怎么设计,脚本的问题等。

在SV中通过DPI来介入C/C++的函数,

声明:import “DPI-C” function int factorial(input bit i)

program automatic test;

initial begin

for(int i=1; i<=10; i++)

$display("%0d = %0d", i, factorial(i));

end

endprogram

input表示从SV到C,还支持output/inout,但是不支持ref。

对于C++的引用,SV只支持静态的方法,所以不能调用class 例化的对象中的function

SV搭建验证环境的更多相关文章

  1. Android学习——windows下搭建NDK_r9环境

    1. NDK(Native Development Kit) 1.1 NDK简介 Android NDK是一套允许开发人员使用本地代码(如C/C++)进行Android APP功能开发的工具,通过这个 ...

  2. [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境

    [.net 面向对象程序设计进阶] (25) 团队开发利器(四)分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境 本篇导读: 前面介绍了两款代码管理工具 ...

  3. Android学习——windows下搭建Cygwin环境

    在上一篇博文<Android学习——windows下搭建NDK_r9环境>中,我们详细的讲解了在windows下进行Android NDK开发环境的配置,我们也讲到了在NDk r7以后,我 ...

  4. Ruby学习心得之 Linux下搭建Ruby环境

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Ruby学习心得之 Linux下搭建Ruby环境1.前言2.Linux下安装Ruby环境 一 ...

  5. 搭建Java环境JDK,和运行环境JRE

    1:想要学习Java第一步就是搭建Java环境,就是安装JDK,又因为JDK里面包含JRE,所以在安装JDK的过程中就安装了JRE,所以以下只是给出了JDK的安装包,自行下载安装即可 链接:http: ...

  6. SSD Cloud Hosting - Linode的配置和部署,搭建Java环境

    0.发牢骚 前一个月在淘宝购买了个Jsp空间,挺便宜的,才38元/年.部署了程序,然后ALIMAMA验证网站,一直提示验证失败.最后找卖家,他说可能是因为空间太慢,照他的推荐换了最好的空间,138元/ ...

  7. Android开发系列之搭建开发环境

    接触Android好久了,记得09年刚在中国大陆有点苗头的时候,我就知道了google有个Android,它是智能机操作系统.后来在Android出1.5版本之后,我第一时间下载了eclipse开发工 ...

  8. windows下搭建Cygwin环境

    windows下搭建Cygwin环境 在上一篇博文<Android学习——windows下搭建NDK_r9环境>中,我们详细的讲解了在windows下进行Android NDK开发环境的配 ...

  9. Linux通过XAMPP集成软件包搭建LAMPP环境

    前面介绍过一篇“Linux手动搭建LAMP环境”,今天再来整理一篇“Linux通过XAMPP集成软件包搭建LAMPP环境”. 其实当初整理通过XAMPP集成软件包搭建LAMPP环境的原因是这样的: 自 ...

随机推荐

  1. Metaspolit使用简介

    信息收集阶段 Whois信息收集 msf auxiliary > whois baidu.com 域名信息查询阶段 msf auxiliary > nslookup www.baidu.c ...

  2. 如何使用HttpClient来发送带客户端证书的请求,以及如何忽略掉对服务器端证书的校验

    最近要做客户端和服务器端的双向认证,在客户端向服务器端发送带证书的请求这里有一点问题,网上的例子大多都不太好使,于是找了github上httpclient源代码中的例子改造了一下,终于弄明白了 git ...

  3. Java反射机制获取Class文件

    JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为 ...

  4. Gradle 教程

    extends:http://www.zhihu.com/question/27866554/answer/38427122 stormzhang博客精华 有一个Gradle 的教程,足够你入门啦. ...

  5. Unity3D笔记 愤怒的小鸟<七> 小鸟群准备动画

    要实现的目标: 1.3只小鸟初始动画 2.完善代码slingShot.js 3.完善代码BirdMoving.js 1.实现3个准备动画:Unity3D内置的动画管理器 1.1.先选择GameObje ...

  6. sublime--将vue代码进行高亮显示

    vue的.vue文件sublime是不认识,但是为了让 .vue 文件看上去更加简洁:所以要用到一款不错的插件: 下载:vue-syntax-highlight https://gitee.com/m ...

  7. Apache服务器301重定向去掉.html和.php

    在做优化网站的时候,会考虑到网站整站的集权: 考虑到网站可以生成静态,首先,让网站优先访问 index.html 之后考虑:去掉 .html 和 .php. 利用 .htaccess <IfMo ...

  8. Spark2 broadcast广播变量

    A broadcast variable. Broadcast variables allow the programmer to keep a read-only variable cached o ...

  9. django和flask的区别

    转载至https://blog.csdn.net/tulan_xiaoxin/article/details/79132214 (1)Flask Flask确实很“轻”,不愧是Micro Framew ...

  10. Centos 密钥登录系统

    有两台机器一直放在IDC 机房一直没怎么正式使用,今天突然说一个项目要上线,于是赶紧配置好环境,做一些权限控制,之前一直使用的是密码登录,现在正式使用公开了,密码登录方式肯定不安全,于是按照之前的方法 ...