使用vcs+verdi完成对混合语言设计的仿真(1)

俗话说,最快的学习方法就是把所学到的知识用通俗易懂的方法分享给他人,so let's do it~

这篇文章的主要内容是在linux环境下,使用vcs软件对数字逻辑设计进行仿真并在verdi上对仿真结果进行分析的过程中涉及到的必要知识和一个实例。整篇文章,如有必要会被分成多个部分来讲解。

参考:

vcs mx user guide 2012版本

vcs user guide 2018版本

各种网络资源:其中比较主要的也是比较重要的一篇,是与我同实验室的brad所写的博文,链接如下:(50条消息) VCS仿真VHDL VERILOG混合脚本_Brad.Ji的博客-CSDN博客_vcs vhdl

一、写在前面

为了看懂这篇文章,你需要对数字逻辑设计有所了解,会基本的linux命令,以及makefile相关知识。我的工作环境是RHEL6.7,使用bash作为命令语言解释器,可能会和你的环境有所不同,请自行寻找具有相同功能的命令。

makefile内容如下,设计中可以存在vhdl、verilog、system verilog三种设计语言,测试激励(也即tb文件)目前是使用verilog来编写,是否支持vhdl的tb暂不可知,这篇博文并不涉及到UVM。

.PHONY: anvhdl anvlog elab wave clean

OUTPUT = simv

TB_TOP_MODULE = asic_tb

FSDB_FILE = ${TB_TOP_MODULE}.fsdb

ALL_DEFINE = +define+DUMP_VPD +define+DISPLAY

ANVHD = vhdlan -smart_order -nc -no_opt -f vhdl_f.f

ANVLG = vlogan -timescale=1ns/1ps -sverilog -nc +v2k -kdb ${ALL_DEFINE} -f verilog_f.f

ELAB = vcs ${TB_TOP_MODULE} -full64 -R  -debug_pp \
	  -l compile.log \
	  -o ${OUTPUT} \
	  -lca -kdb \
	  -P ${VERDI_HOME}/share/PLI/VCS/LINUX64/novas.tab ${VERDI_HOME}/share/PLI/VCS/LINUX64/pli.a	  

WAVE = verdi -simflow -top ${TB_TOP_MODULE} -ssf ${FSDB_FILE} -l sim.log &


anvhdl:
	${ANVHD}

anvlog:
	${ANVLG}

elab:
	${ELAB}



wave:
	${WAVE}




clean:
	rm -rf ./csrc DVEfiles simv* *.vpd *.key *.log *.vpd novas* *.fsdb verdiLog
	find ./work -type f -exec rm -f {} \;

二、VCS仿真方法

VCS有三种仿真模式 ,单步模式(1 step)、双步模式(2 steps)以及 三步模式(3 steps),但这三种模式本质上都涉及到三个步骤:analysis、elaboration、simulation 。

analysis使用的命令:vhdlan vlogan,对vhdl文件使用vhdlan,对verilog和system verilog使用vlogan ,产生的中间文件将保存在指定的目录中,这一部分后面会补充。

elaboration使用的命令:vcs,经过这一步,将产生一个叫做simv的东西,这是一个可执行文件


simulation使用的命令:./simv,亦即执行simv即可

如果设计中只包含verilog和system verilog,那么analysis和elaboration可以合并到elaboration步骤,即使用vcs命令完成两个步骤,即所谓的双步模式。在vcs命令中有一个-R的选项,能够实现在完成elaboration后立即执行simv,这样就把simulation步骤也集成到了elaboration,一步到位,即单步模式。

如果设计中存在vhdl,这就属于是混合语言设计了,那么analysis和elaboration不可合并,虽然simulation可以合并到elaboration中,看起来也是两步,但这样会造成概念的混淆,因此还是定义混合语言设计中的三个步骤是分开进行的,即三步模式。

三、synopsys_sim.setup文件

根据官方的说法,如果设计中存在vhdl文件,那么synopsys_sim.setup文件(以下简称:setup文件)是不可或缺的,当我们启动vcs时,软件会自动依序在以下三个地方去寻找setup文件

①Master setup directory,即$VCS_HOME/bin目录,其中,$VCS_HOME是vcs软件安装的根目录。

②Your home directorym,即家目录。这里我也不是很懂,网上有的人说是/home目录即是家目录,有的人说是在终端中打出cd ~后进入的目录就是家目录,但上述两种路径经常是不一样的。

③Your run directory,运行目录,即启动vcs软件时,pwd命令所返回的路径。

上述三个路径下的setup文件的优先级:①<②<③,vcs软件在启动时的搜索顺序:①、②、③

这个文件主要完成逻辑库与其实际路径之间的对应以及仿真变量的设置。

如下是一个典型的setup文件的内容:

​

-- Mapping default work directory
WORK > DEFAULT
DEFAULT : ./work
 
-- Library Mapping
IEEE : $VCS_HOME/linux/packages/IEEE/lib
SYNOPSYS : $VCS_HOME/linux/packages/synopsys/lib
 
--Simulation variables
ASSERT_STOP = ERROR
TIMEBASE = ns
TIME_RESOLUTION = 1 ps
————————————————
版权声明:本文为CSDN博主「Brad.Ji」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Bradji/article/details/117731430

​

第一行注释下:我们创建了一个默认的库,名字叫做WORK,随后把它映射到一个具体的路径中,在这里是setup文件所在目录下的work目录。

第二行注释下:我们完成了另外两个库与它们的物理路径之间的映射。IEEE库的物理路径是$VCS_HOME/.../lib,SYNOPSYS库的物理路径是$VCS_HOME/.../lib

第三行注释下:我们设置了几个变量,这些变量在单次vcs运行的全过程中都有效。

除了存放全局变量,setup文件的作用之一还在于,将analysis阶段产生的一些中间文件存放到其所定义的库中去,如果没有setup文件,中间文件无法存放,elaboration也就不会成功。
 

下一篇博文将会搭建基本的仿真工程,并对makefile中的部分命令做讲解。

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值