Makefile脚本启动VCS+Verdi

2024-02-13 09:32
文章标签 启动 脚本 makefile vcs verdi

本文主要是介绍Makefile脚本启动VCS+Verdi,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、快速入门
  • 二、Makefile的语法
    • 1.语法格式
    • 2.命令执行
    • 3.变量
  • 三、VCS仿真
    • 1.VCS常用命令
    • 2.Makefile实现自动化仿真
  • 四、VCS+Verdi的使用
    • 1.编译
    • 2.仿真
    • 3.Verdi 查看fsdb文件的命令
    • 4.Makefile启动VCS+Verdi的实例


注:主要侧重于Makefile调用VCS和Verdi联合仿真。


一、快速入门

  Makefile带来的好处就是自动化编译和仿真,只需要一个 make 命令。make是Linux下的二进制程序,在shell命令行键入make命令时,将自动寻找名称为“Makefile”的文件作为编译文件。

  • 格式:make [option] [target] …

二、Makefile的语法

1.语法格式

形式一:
target : prerequisitescommand
形式二:
target : prerequisites;commandcommand

其中:

  • prerequisites是目标所依赖的文件
  • command是命令行。命令行如果与prerequisites不在一行,那么命令行必须以Tab键开头。如果命令过长,可以使用反斜杠“\”作为换行符。

例如:

clean: rm -f  tb.sv

2.命令执行

(1)make会按顺序一条一条的执行命令。每条命令必须以Tab键开头。

(2)而当一个target下有多条命令时,就会有两种可能:

  • 当希望后一条命令是接在上一条命令执行之后,再执行。此时需要用分号 ; 连接两个命令,这与管道 | 类似。
  • 当希望两条指令并行执行,直接换行即可。

例如,下面两次pwd时显示的文件路径是否相同?

exe1:cd /home/verifier/pwdexe2:cd /home/verifer/; pwd// exe1中pwd显示的为 根目录 ~
// exe1中pwd显示的为 /home/verifer/

(3)如果命令执行到当期行,发现命令出错了(如cd命令时不存在目标目录)。假如我们不希望整个make动作因为命令错误而停止,可以再命令行TAB键之后加一个减号“-”,表示不管命令是否出错,都认为是成功的。例如下面:

exe2:- cd /home/verifer/; pwd

3.变量

Makefile中变量的使用:

  • 变量的命名是可以包含字符、数字、下划线,在变量声明时需要赋初值;
  • 在使用变量时,可以使用 $ ( 变量 )$ {变量} 的方式。如果真的需要使用 "$"符号时,可以使用 $ $的方式。
  • 操作符“:=”表示,只能使用前面定义好的变量,不能使用后面的变量。
  • 操作符“?=”表示如果变量没有被定义过,那么变量的值是操作符右边的。如SEED ?= 300。

例如:

PATH = ~/project/vip/
sim :cd ${PATH}

三、VCS仿真

  VCS仿真分为两个步骤:编译 + 仿真。VCS在编译 Verilog 文件后,默认会产生一个名为 simv 的二进制可执行文件,然后执行这个simv文件就可以进行仿真。如下例子:

[verifier]$ vcs +v2k top_tb.v -debug_all
...
[verifier]$ ./simv -gui &  

解释上面两行指令:

  1. 用VCS编译 top_tb.v 的 Verilog 文件,+v2k 是支持 Verilog 2001 语法,-debug_all 选项是为了 debug 程序。
  2. 编译后会产生一个可执行simv文件,/simv是执行当前目录的simv文件。-gui是打开图形界面。&是表示在后台运行。

1.VCS常用命令

编译时常用的option,如下:

命令描述备注
vcs -help打开vcs帮助文档可以重定向生成一个文件,例如采用 vcs -help > vcs_help.txt
-sverilog支持systeverilog语法
+v2k支持 Verilog 2001 语法
-l 文件名设置生成的log文件的文件名l是小写的L
-R编译完自动地去仿真,不需要手动执行simv文件
-Ppli.tab定义PLI的列表(表)文件配置Verdi时需要
-gui <=dve 或 verdi>打开仿真图形化界面
–fsdb调用Verdi PLI 库,支持fsdb 波形
-ucli在运行时指定UCLI模式,即命令行模式
-Mupdate如果修改了文件,VCS可以只编译修改了的文件,节省编译时间
-v 文件名告诉VCS是哪个定义好的Verilog工艺库
-y 路径告诉VCS这个Verilog工艺库上哪去找
+libext+< extension >与-y配合,用来指定查找的文件的后缀例如查找.v文件,可以用+libext+.v
+incdir+< dir >告诉VCS去哪找 `include的文件
-f 文件列表指定一个包含所有文件路径的filelist文件(.flist)
-o 文件名默认编译后产生一个simv文件,-o可以指明这个文件的文件名
+define+名字 = 值定义宏
-timescale = 时间单位/精度设置仿真的时间单位、精度;
-debug对应TB中的$vcdpluson加载波形函数,使能DVE、Verdi 波形调试和UCLI命令行调试等
-debug_all使能所有的debug调试功能
-debug_pp使能debug调试功能,可以dump fsdb和vpd,使能DVE、VERDI波形调试和UCLI命令行调试
-cm [option]覆盖率收集选项,option包括: line(行)、cond(条件)、fsm(状态机)、tgl(翻转)、branch(分支)、assert(断言)常用命令如: -cm line+cond+fsm+tgl
-cm_dir < dir >指定覆盖率文件放置的路径

仿真时常用的option,如下:

命令描述备注
-l 文件名输出log文件l是小写的L
+notimingcheck关闭时序检查
-vpd_file 文件名生成vpd文件vpd是VCS的产生的波形文件

注,对几种波形文件介绍:

  • vpd是VCS的DVE支持的波形文件,可以在Verilog中用$vcdpluson产生。
  • VCD (Value Change Dump)是一个通用的波形格式。它主要包含了头信息,变量的预定义和变量值的变化信息,就相当于记录了整个仿真的信息。通过Verilog的系统函数$dumpfile 来生成波形,通过$dumpvars的参数来规定抽取仿真中某些特定模块和信号的数据。
  • fsdb(Fast Signal DataBase)是 Verdi 所支持的波形文件。相对于VCD波形文件,fsdb只对仿真过程中有用的信号进行存储,所占存储空间较小。fsdb是通过verilog的PLI接口来实现的,在Verilog中加入 $fsdbDumpfile 和 $fsdbDumpvars等函数。fsbd 的使用可以看:fsdb、fsdb dump和参数传递
  • shm 是Cadence公司 NC verilog 和Simvision支持的波形文件;WLF(Wave Log File) 是Mentor Graphics 公司Modelsim支持的波形文件。

2.Makefile实现自动化仿真

  上面我们知道VCS仿真可以分为两步:编译+仿真。下面我们就实现一个最简单的Makefile脚本启动VCS仿真。

comp:vcs +v2k top_tb.v -debug_all -l comp.log
sim:./simv -l run.log -gui &  
clean:rm -r *.log *.vpd  *.vcd *.fsdb 

根据上面的脚本,可以在Terminal中输入make comp 和 make sim 命令就可以直接启动仿真。

四、VCS+Verdi的使用

  为了实现VCS仿真和Verdi查看波形的效果,需要在VCS仿真时产生Verdi所需的fsdb波形文件,dump fsdb文件,再使用Verdi打开fsdb文件。下面解析步骤:

1.编译

  这里可以有两种方式来生成fsdb文件:可以参考fsdb dump。下面介绍其中一种,如下:首先在TB中添加Verilog的函数首先在VCS编译脚本上,需要用-P选项配置verdi,找到目录中对相应的 Synopsys/Verdi/ 的文件夹,指定需要加载的动态库(.so)、表格文件(.tab)和静态库(.a)。如下:

NOVAS_HOME = /share/eda/Synopsys/Verdi/L-2016.06/     # 这是我电脑上Verdi的目录
NOVAS_ARGS = ${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab \    # 这部分基本是固定的
${NOVAS_HOME}/share/PLI/VCS/LINUX64/pli.a  \vcomp:vcs -full64-debug_pp -LDCLASS -rdynamic -P ${NOVAS_ARGS} \-f complie.f \-l compile.log

解释一下上面的命令:

  • debug/debug_pp/debug_all ,使能ucli命令。
  • -LDFLAGS ,传递参数给VCS的linker,与后面的-rdynamic和-P配合使用
  • -rdynamic,指定需要加载的动态库
  • -P ${NOVAS_ARGS},指定需要加载的表格文件(.tab)和静态库(.a)

2.仿真

相应地仿真时的脚本文件,如下:

sim:./simv  \-ucli -i dump_fsdb.tcl	\+fsdb+autofulsh 	\-l sim.log

解释上面的命令:

  • simv 是 VCS编译Verilog后生成的二进制可执行文件,./simv执行这个文件,进行仿真;
  • -ucli 是启动UCLI命令行模式,-i 吃进去 tcl 脚本文件;
  • +fsdb+autofulsh,一边仿真,一边dump 波形;

dump_fsdb.tcl的脚本如下:

global env
fsdbDumpfile "$env(file_name).fsdb"
fsdbDumpvars 0  "top_tb"
run

解释上面的tcl脚本:

  • TCL脚本引用环境变量;
  • 设置波形文件名称,名称受 $env(file_name)控制;注:这个file_name 是从仿真的 Makefile文件中,通过 export file_name = top_tb
  • fsdbDumpvars(0) 表示会 dump 所有层次的信息;注:0代表dump所有层次,非0代表dump的最高层次;
  • 设置完dump 信息,启动仿真。此时仿真器受UCLI命令行控制;
  • 其他的有关fsdb生成时的函数调用可以看:fsdb。

3.Verdi 查看fsdb文件的命令

verdi -f file.f -ssf *.fsdb & 

解释上面的命令行中:

  • -f 代码的文件列表
  • -ssf 指定fsdb文件
  • & 表示后台运行

4.Makefile启动VCS+Verdi的实例

下面是一个简单的makefike脚本,如下:

export  file_name = top_tbFILE_LIST = compile.f
TB_DIR = 
SIMV_FILE = simv
LOG_DIR = ./log#----Coverage----
CM_TYPE = line+cond+fsm+branch+tgl
CM_DIR = ./coverage#----Verdi-----
NOVAS_HOME = /share/eda/Synopsys/Verdi/L-2016.06/    
NOVAS_ARGS = ${NOVAS_HOME}/share/PLI/VCS/LINUX64/novas.tab \  ${NOVAS_HOME}/share/PLI/VCS/LINUX64/pli.a 			 \
DUMP_COND = DUMP_FSDB VCOMP = vcs -full64 -sverilog +v2k -debug_pp    \-o ${FILE_LIST} 				\-l ${LOG_DIR}/compile.log		\-f ${FILE_LIST}					\+incdir+${TB_DIR}				\CM = -cm ${CM_TYPE}					\-cm_dir ${CM_DIR}				\VERDI =   -LDFLAGS -rdynamic -P ${NOVAS_ARGS} #----------COMMAND-----------
comp:${VCOMP} ${CM}  ${VERDI}sim:verdi:	verdi -nologo -sv -f ${FILE_LIST} -ssf *.fsdb +${DUMP_COND}clean:rm -rf *.csrc ./*.daidir ${SIMV_FILE } *simv* ucli* *.vpd *.fsdb *novas* *.log 

tcl脚本,如下:

这篇关于Makefile脚本启动VCS+Verdi的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705145

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss