weiqi7777

svlib(1)-介绍

0
阅读(3093)

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

Baidu
map