1. 概要
本文介绍VCS的libmap特性使用场景、方法。可用于解决重名module编译问题,以及用于仿真加速。
2. libmap解决重名module问题
平常工作中可能会遇到这道这种情况:我们需要将两个IP集成到同一个top中,但是这两个IP中有相同的module名,仿真器在编译时会报重复定义的错误。当然,我们可以通过修改模块名来解决这个问题,但是继承性和维护性较差。VCS提供的libmap方法可以解决这个问题。
如下工作目录,有两个同名的mod模块需要在top中实例化:
demo
|__ mod1
|__ mod.v
|__ mod2
|__ mod.v
|__ top.v
|__ top_cfg.v
|__ libmap.v
top文件如下:
module top();
mod mod1();
mod mod2();
endmodule
如果我们直接编译的话,库文件里会存在两个相同名字的mod,top中实例化时显然不知道该用哪个,仿真器会报错。
SV使用手册指出,可以将为设计模块指定编译到哪个lib,然后再指定哪个实例使用哪个lib。各家EDA工具都支持这个特性,本文介绍VCS怎么使用libmap方法。
VCS的编译默认情况下是将编译结果放到work这个库里,这是默认的库名。编译器会使用的synopsys_sim.setup来指定库名。
2.1 定义libmap文件
为重名的module单独指定lib,格式为library lib_name file_path;
,lib名自己定义,文件路径可使用相对路径和通配符。
可一次性将过个文件制定编译到一个lib中,文件名之间使用逗号,
分隔。
libmap.map
library lib1 mod1/mod.v;
library lib2 mod2/mod.v;
//未指定的文件则自动编译到work库
2.2 定义config文件
config文件中为每一个实例指定使用的lib。
config top_cfg;
design top; //此处需要指定仿真平台的顶层名称。
instance top.mod1 liblist lib1;
instance top.mod2 liblist lib2;
//未指定的实例仍然使用work库
endconfig
2.3 添加编译选项
vcs -full64 -sverilog
./mod1/mod.v ./mod2/mod.v ./top.v top_cfg.v #源文件或列表
-libmap libmap.map #libmap文件
-top top_cfg #必须指定top_cfg为top
3 使用libmap将部分模块做成black_box,加速仿真
如果一个module被实例化了4次,U0-U4,其功能实现完全一样,我们验证的 时候无需使用其全部实例,那么也可以利用libmap的方法,将这些无需使用的实例做成黑盒,仅保留接口信号,屏蔽内部实现(也称DUMMY),这样可以加快编译和仿真速度。
demo
|__ mod
|__ mod.v
|__ dummy_mod
|__ dummy_mod.v
|__ top.v
|__ top_cfg.v
|__ libmap.map
top文件如下:
module top();
mod mod_u0();
mod mod_u1();
mod mod_u2();
mod mod_u3();
endmodule
mod在top中例化了多次,但是我们想仅测试U0实例,屏蔽其他实例。可按如下步骤。
3.1 编写dummy文件
编写一个dummy_mod.v文件,其module名也为mod,并且接口信号列表,参数列表(如果有)都完全一样,但是没有其他内容,也就是一个空壳文件。
3.2 编写libmap文件
将用于替换的文件指定到DUMMY库。
libmap.map
library DUMMY dummy_mod/dummy_mod.v
//未指定的文件则自动编译到work库
3.3 编写config文件
config文件中为每一个实例指定使用的lib。
top_cfg.v
config top_cfg;
design top; //此处需要指定仿真平台的顶层名称。
instance top.mod_u1 liblist DUMMY;//实例u1、u2、u3使用DUMMY库
instance top.mod_u2 liblist DUMMY;
instance top.mod_u3 liblist DUMMY;
//未指定的实例仍然使用work库
endconfig
3.4 添加编译选项
vcs -full64 -sverilog
./mod1/mod.v ./dummy_mod/dummy_mod.v ./top.v top_cfg.v #源文件或列表
-libmap libmap.map #libmap文件
-top top_cfg #必须指定top_cfg为top
参考文章
https://www.francisz.cn/2019/09/03/vcs-configration/
https://blog.csdn.net/u012678323/article/details/130502237?spm=1001.2014.3001.5506