卢骏 · 2020年07月13日

svlib(1)-介绍

一、svlib

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

a programmer’s utility library for systemverilog

官方网站

1.jpg

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

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

1、 读取环境变量

2、 文件存在与否

3、 获取当前日期与时间

4、 正则表达式匹配

5、 读取或更改配置文件

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

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

二、svlib的安装

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

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

2.jpg

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

README: 使用说明

RELEASE_NOTES: 发布说明

src:svlib开源库的源代码

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

3.jpg

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

4.png

三、svlib集成到tb

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

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

5.png

注意的第一行,

import svlib_pkg::*;

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

在svlib的src目录下,有svlib_pkg.sv源文件。

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

6.png

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

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

7.jpg

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

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

testbench要放在这个文件的最后

编写makefile

8.jpg

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

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

运行结果:

9.jpg

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

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

10.png

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

四、svlib获取环境变量

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

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

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

1. sys_hasEnv

来看看 sys_hasEnv是如何实现的:

该函数实现在 svlib_pkg_Sys.svh中。

12.jpg

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

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

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

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

13.jpg

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

判断envStr是否为空:

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

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

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

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

2. sys_getEnv

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

14.jpg

#### 更多相关阅读
sv与c之间字符串传递的DPI实现
systemverilog的process类
systemverilog的参数化类

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
20179
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息