weiqi7777

svlib(1)-介绍

0
阅读(1250) 评论(0)

一、            svlib

svlib,是一个开源的systemverilog的工具库。

       a programmer’s utility library for systemverilog

       官方网站

http://www.verilab.com/resources/svlib/

clip_image002

 

       这个开源库中,实现了很多的方法,我们可以调用这些方法,实现很多复杂的功能。

 

       SV下,做一些事情,是比较困难的,比如说以下操作:

1、  读取环境变量

2、  文件存在与否

3、  获取当前日期与时间

4、  正则表达式匹配

5、  读取或更改配置文件

 

如果要在sv中实现上述的功能,是比较麻烦与困难的。水平一般的人,比如我,都不一定能够实现出来。

但是这个svlib的开源库,提供了自带的一些方法,来实现了这些复杂的功能,我们只需要调用提供的方法,即可实现。

 

二、            svlib的安装

在官网上,有svlib的源代码压缩包,以及说明文档,直接下载下来即可。

将压缩包解压,得到以下目录结构:

clip_image004

doc:文档目录,目录下有user_guide文档。

README 使用说明

RELEASE_NOTES: 发布说明

srcsvlib开源库的源代码

      

       src目录下,有众多的.svh.sv源文件。

clip_image006

       还有一个特殊的目录dpi。该目录下只有一个文件,svlib_dpi.c。这是一个c文件,里面实现了很多方法,将来通过svdpi方式,供sv调用。

clip_image007

三、            svlib集成到tb

下载好svlib之后,下面就要将svlib集成到testbench中。

       testbench的代码也很简单,就是调用一个svlib的方法,将返回值打印。这里暂且不管这个方法功能是什么。

clip_image008

       注意的第一行,

              import svlib_pkg::*;

表示将 svlib_pkg这个包中所有内容都包含进来。

 

svlibsrc目录下,有svlib_pkg.sv源文件。

定义了一个package svlib_pkg,里面import了另外一个包中的内容和include了一些文件。

clip_image009

       这个svlib_pkg.sv文件,将svlib中的所有需要的源文件都包含了进来,因此以后需要用到svlib时,只需要import这个package即可。

 

       编写flist,告诉编译工具,编译哪些文件。

clip_image010   

       这里只需要将svlib_pkg.sv文件包含到这个文件中,其他svsvh文件不用写入,因为include会自动加载。

       还需要将dpi下的svlib_dpi.c文件包含在这个文件中。

       testbench要放在这个文件的最后

 

       编写makefile

clip_image012

       对于VCS,要加上 -LDFLAGS -lrt -sverilog选项。这个是svlib中规定的。注意-LDFLAGS -lrt 两个选项要在一起,而且顺序不能变化。

       对于irun,只需要 -sv 选项即可。

 

       运行结果:

clip_image014

       打印出调用 sys_getEnv 方法的结果,为 /bin/tcsh

 

       linux下执行 echo $SHELL 命令,打印结果也是  /bin/tcsh

clip_image015

       说明sys_getEnv方法是获取环境变量的值。

 

四、            svlib获取环境变量

svlib中,实现了两个方法,来实现对环境变量的操作:

sys_hasEnv(environ_name):  判断 环境变量 是否存在

sys_getEnv(environ_name):  获取 环境变量 的结果

1.      sys_hasEnv

       来看看 sys_hasEnv是如何实现的:

      该函数实现在 svlib_pkg_Sys.svh中。

clip_image017

       调用 svlib_dpi_imported_getenv 函数,传入两个参数

envVar:传入的 待查询的环境变量

envStr 返回的 待查询的环境变量的值

       svlib_dpi_imported_getenv函数,是在svlib_dpi.c中,用c来实现的函数。

clip_image019

       通过getenv,获取envVar指定的环境变量的值,保存在envStr中。

       判断envStr是否为空:

l  为空,说明环境变量不存在,返回1。传参的p_result设置为NULL

l  不为空,说明环境变量存在,返回0。并且获取的环境变量的值,保存在传参的p_result中。

       这里的第二个传参是 二重指针。对应sv里面的string类型的envStr变量。

*p_result = envStr,其实就是将svstring类型的envStr地址设置为cenvStr的地址。这样sv中的envStr就获取了环境变量的值。

      

2.      sys_getEnv

同样是调用 svlib_dpi_import_getenv函数,获取环境变量值,保存在envStr中,如果环境变量存在,返回envStr,否则返回空。

clip_image021