svlib(1)-介绍

一、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_image011   

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

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

    testbench要放在这个文件的最后

    编写makefile

clip_image013

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

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

    运行结果:

clip_image015

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

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

clip_image016

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

四、svlib获取环境变量

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

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

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

1. sys_hasEnv

    来看看 sys_hasEnv是如何实现的:

    该函数实现在 svlib_pkg_Sys.svh中。

clip_image018

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

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

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

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

clip_image020

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

    判断envStr是否为空:

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

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

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

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

2. sys_getEnv

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

clip_image022

 

此条目发表在IC, 语言相关分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。