IC开发——VCS基本用法

1. 简介

VCS是编译型verilog仿真器,处理verilog的源码过程如下:

VCS先将verilog/systemverilog文件转化为C文件,在linux下编译链接生成可执行文件,在linux下运行simv即可得到仿真结果。

VCS使用步骤,先编译verilog源码,再运行可执行文件:

  

编译命令的格式:vcs sourcefile [compile_time_option] (编译选项用来控制编译过程)

执行仿真命令格式:./simv [run_time_option]

2. 示例

2.1. 电路结构图

2.2. 编译

此电路为一位加法器 fa.v 组成4位加法器 add4.v,再组成一个8位加法器,使用资源换性能的思路,减小了行波进位加法器的进位延迟。顶层文件为add8.v,testbench为addertb.v。输入下图命令回车即可编译verilog文件,其中-l readme.log 用于将编译产生的信息放在log文件内,+v2k是使VCS兼容verilog 2001以前的标准。-debug_all用于产生debug所需的文件。

2.3. 仿真

./simv -l run.log 开始仿真,testbench里的$display打印仿真成功的信息,显示在终端上。使用-l run.log 记录终端上产生的信息。

2.4. 添加波形信号

使用./simv -gui 命令打开图形化界面DVE,选中所有信号 --> 右键Add to Waves --> New Wave View

2.5. f文件

在工作目录下新建一个verilog_file.f文件,将所用到的verilog源码以及路径写入文件,并保存退出。使用-f verilog_file.f 选项,即可将.f文件里的源码全部编译。

2.6. 常用命令

以下有其他常用编译选项,注意各个编译选项的顺序,有时出错需要调整。

1) -R 编译后立即运行,即编译完成后立即执行 ./simv

2) -Mupdate 源文件有修改时,只要重新编译有改动的.v文件,节约编译时间。

3) -sverilog 打开对Systemverilog的支持,编译Systemverilog文件时使用。

4) -timescale=1ns/1ns 设置仿真精度

5) -o simv_file 编译默认产生的可执行文件为simv,可以使用 -o 更改可执行文件名。

2.7. makefile

命令比较多时,常用makefile文件来描述。

.PHONY:com sim cleanOUTPUT = adder_topVCS = vcs -sverilog +v2k -timescale=1ns/1ns                             \-debug_all							\-o ${OUTPUT}							\-l compile.log						\SIM = ./${OUTPUT} -l run.logcom:${VCS} -f verilog_file.fsim:${SIM}clean:rm -rf ./csrc *.daidir *.log simv* *.key

终端上输入 make com 后回车,相当于在终端中输入以下内容后回车,进行编译。

终端上输入make sim后回车进行仿真。

3. 代码覆盖率

3.1. 概念

在进行功能验证时,给设计添加激励信号,查看仿真结果,需要考虑覆盖率的问题。覆盖率分为代码覆盖率(code coverage)和功能覆盖率(function coverage)。功能覆盖率就是检查设计的功能是否完善,需要考虑很多不同的情况,是使用System verilog的重点内容。代码覆盖率是检查代码是否存在冗余,检查所有的代码是否都已经执行,状态机所有的状态是否都有到达,检查 if else 和 case 条件语句的条件是否都有使用。防止一些不必要的代码浪费芯片面积,毕竟面积就意味着钱。我们这里只讨论代码覆盖率。

对于RTL代码,通常考虑以下覆盖率:

  • Line coverage :行覆盖率,检查语句是否被执行。

  • Toggle coverage:检查电路的每个节点是否都有 0 -> 1 和 1 -> 0 的跳变。这种检查通常会使仿真变慢很多。

  • conditional coverage:检查条件语句是否覆盖了所有的情况。 比如有时写了if 语句,没有写else语句。

  • FSM coverage: 状态机覆盖率,检查状态机所有的状态是否都到达过。

  • path coverage:在always语句块和initial语句块中,有时会使用 if ... else 和 case 语句,在电路结构上便会产生一系列的数据路径。检查这些路径的覆盖情况。

3.2. 生成覆盖率文件

VCS在统计代码覆盖率的过程中,我们通常在编译和仿真命令上添加对应的开关选项,生成一个 .vdb文件记录覆盖率的情况。再使用dve打开该文件查看。下面介绍一些选项。

-cm <coveragetype> :打开对应类型的覆盖率,例如 -cm cond+tgl+lin+fsm+path为统计上述所有覆盖率。可根据需要增减。

-cm_name:设置记录有覆盖率信息文件的名字。

-cm_dir:指定生成文件的目录。

以上三个选项编译仿真过程都要加上。下面的选项在编译过程加上。

-cm_log + filename.log:.log文件记录仿真过程中统计覆盖率的信息。用的比较少。

-cm_nocasedef: 在统计case语句的条件覆盖率时,不考虑default条件未达到的情况。

-cm_hier vcs_cov.cfg:通过.cfg文件(名字随便取)选择要查看覆盖率的模块/文件。

“+”代表查看,“-”代表不查看。tree代表查看某个模块调用的子模块。

在文件内部,可以使用特殊注释来打开和关闭代码覆盖率的统计:

//VCS coverage on 统计代码覆盖率

.......

//VCS coverage off 不统计代码覆盖率

在上述注释之间的内容,统计覆盖率。其余地方不统计。

3.3. 查看覆盖

  1. 统计覆盖率命令并启动UI

dve -covdir *.vdb &
  1. 单击箭头1处加号,再双击箭头2处的U1,查看设计的代码覆盖率。

  1. 行覆盖率,第25行未执行过。

  2. Toggle coverage:大量节点都没有 0 -> 1 和 1 -> 0 两种跳变

  3. FSM coverage : 2'd1 -> 2'd0 的转换没有发生过。

  1. condition 覆盖率

  2.  Branch(Path) 的覆盖率

4. 逻辑综合

当我们把所写的RTL进行的功能仿真通过之后,便输入到 Design Compiler工具中进行逻辑综合,逻辑综合的结果便是RTL代码转化为由与、或、非等门电路和触发器组成的电路,称为门级网表(netlist)。门级网表中便包含了电路的实际信息,例如逻辑门单元的扇入扇出系数,延迟等等。因此在逻辑综合完成之后,需要对网表再进行仿真验证,防止出现意想不到的错误。

对于实际电路,时钟信号并不是理想的“陡直”,门电路也存在延迟,这些电路的实际信息需要在逻辑综合的时候考虑到。RTL代码转换为门级电路,我们需要对电路施加一些约束。例如时序电路的工作频率,电路中组合逻辑块的延迟等等。综合工具会根据我们施加的约束做时序上的优化,从工艺库中挑选合适的单元,在面积,时序和功耗三个方面进行折中。当然满足时序的要求是首要的,面积和功耗要越小越好。

为简单起见,以一个Moore状态机为实例,做最基本的不添加约束的逻辑综合,用以生成门级仿真所需要的文件。设计电路框图如下:

由一个计数器和moore状态机组成。

RTL仿真图如下

q_o 为三位计数器的输出,dout_out为状态机的输出,按 0000 0010 0100 1000 的顺序循环。

之后便在Design Compiler中进行综合生成后端和门级仿真的文件,我们在此关心VCS门级仿真所需要的文件。SDF文件包括设计中的时序信息,.v文件是以工艺库单元例化形成的verilog文件。

我们可以看到网表形式的verilog文件,由门电路和触发器例化组成。 

4. 网表仿真

  1. makefile模板添加了一个开关选项,由于网表.v文件是由工艺库单元例化的,工艺库中给出了一个verilog文件,包含各个单元。

  

  1. 定义NET_SIM这个宏。用于testbench中代码块的打开和关闭。

  2. 在Testbench中添加添加下面的代码块,使用sdf_annotate()系统函数将sdf文件“反标”到设计中,第一个参数指定sdf文件,第二个参数指定反标到哪一层的module上,这里我们选择顶层文件。其他参数保持默认即可

initial begin
`ifdef NET_SIM$sdf_annotate("/mnt/hgfs/LINUX_EDA_Share/DC_Projects/netlist_simulation/Top.sdf",Top,,,"TYPICAL","1:1:1","FROM_MTM");
`endif
end
  1. 设置完毕后使用 make com sim debug 命令查看门级仿真波形,可以看到输出信号的跳变与时钟上升沿已有一段延迟,这与RTL仿真是不同的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/337903.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】388微信小程序足球赛事及队伍管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

开发一个comfyui的自定义节点-支持输入中文prompt

文章目录 目标功能开发环境实现过程翻译中文CLIP编码拓展仓库地址完整代码目标功能 目前comfyui的prompt提示词输入节点 CLIP Text Encode 只支持输入英文的prompt,而有时候我们需要自己制定一些prompt,所以就得将我们想要的提示词翻译为英文后再复制粘贴到该节点的输入框中…

Java的JDK环境变量配置(Windows)

只写了需要配置的环境变量 注&#xff1a;从JDK1.5开始&#xff0c;配置Java环境变量时&#xff0c;不再需要配置CLASSPATH&#xff0c;只需要配置JAVA_HOME和Path 1、配置JAVA_HOME 找到自己的JDK位置&#xff0c;我这里是 C:\dev\java\jdk-17.0.119在环境变量-系统变量中&…

ubuntu系统下安装mysql的步骤详解

一、下载安装包 下载地址&#xff1a; https://dev.mysql.com/downloads/repo/apt 跳转到这个页面&#xff1a; 直接点击Download。 直接点击最下面的开始下载安装包即可。 二、将安装包下载到ubuntu系统中 先将用户切换成root用户&#xff0c;把下载好的安装包复制到桌面上&…

互联网简史-分久必合,合久必分

六一儿童节&#xff0c;给孩子们讲讲互联网的历史。 任何当代技术都是古老技术的重组&#xff0c;这是真的。我从电话网络开始&#xff0c;两幅图完事。电波可以承载语音作为最开始&#xff0c;后面的事自然而然&#xff1a; 说实话&#xff0c;网络这种事&#xff0c;它的 …

各大平台取消一年期免费SSL证书后,如何申请超长期免费SSL证书

一&#xff1a;为什么一定要用SSL证书 SSL证书是一种提供网络安全的协议&#xff0c;主要作用是提供对用户和服务器的认证以及确保传送的数据进行加密和隐藏&#xff0c;从而保证数据的完整性和安全性。网站安装SSL证书后就可以实现HTTPS访问&#xff0c;消除网站访问不安全提…

从0开始制作微信小程序

目录 前言 正文 需要事先准备的 需要事先掌握的 什么是uniapp 平台应用的分类方式 什么是TypeScript 创建项目 项目文件作用 源码地址 尾声 &#x1f52d; Hi,I’m Pleasure1234&#x1f331; I’m currently learning Vue.js,SpringBoot,Computer Security and so on.&#x1…

一、大模型推理

https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://github.com/hiyouga/LLaMA-Factory/blob/main/examples/README_zh.md 安装 v7.1 https://github.com/hiyouga/LLaMA-Factory/releases/tag/v0.7.1 git clone --depth 1 https://github.com/hiyoug…

TS38.300中的切换流程(很一般)

本文根据3GPP R18 TS 38.300第9.2.3节整理 切换(Handover)是移动终端(UE)进入RRC_CONNECTED状态后在不同服务小区(Cell)之间保持与网络联系唯一手段&#xff0c;期间首先通过控制面(C-Plane)进行无线测量、切换协商及触发等&#xff1b;为此3GPP在TS38.300中定义如下。 RAN系统…

【六一儿童节】的科技奇幻旅程:解锁【机器学习】与【人工智能】的无限创意

目录 一、机器学习与人工智能简介 二、六一儿童节的特殊意义 三、项目概述&#xff1a;智能绘画助手 四、技术栈和工具 五、数据准备 六、模型训练 1. 数据预处理 2. 构建和训练模型 七、智能绘画助手的实现 1. 搭建Flask应用 2. 客户端界面 八、扩展功能与优化 1…

【算法】贪心算法——柠檬水找零

题解&#xff1a;柠檬水找零(贪心算法) 目录 1.题目2.题解3.参考代码4.证明5.总结 1.题目 题目链接&#xff1a;LINK 2.题解 分情况讨论 贪心算法 当顾客为5元时&#xff0c;收下当顾客为10元时&#xff0c;收下10元并找回5元当顾客为20元时&#xff0c;收下20元并找回10…

Fastjson 反序列化漏洞[1.2.24-rce]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/vSaaw kali切换jdk版本请参考 Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客 漏洞原理 Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源&#xff0c;支持远程调用。…

基础—SQL—DQL(数据查询语言)聚合函数

一、引言 一般情况下&#xff0c;我们在进行分组查询的时候&#xff0c;一般配合着聚合函数来进行操作&#xff0c;所以先了解和学习聚合函数再学习和操作分组查询。 二、DQL—聚合函数 1、介绍 聚合函数指的是讲一列数据作为一个整体&#xff0c;进行纵向的计算。 2、常见…

GiantPandaCV | FasterTransformer Decoding 源码分析(六)-CrossAttention介绍

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;FasterTransformer Decoding 源码分析(六)-CrossAttention介绍 GiantPandaCV | FasterTransformer Decoding 源码分析(一)-整体框架介绍-CSDN博客 …

HttpSecurity 是如何组装过滤器链的

有小伙伴们问到这个问题&#xff0c;简单写篇文章和大伙聊一下。 一 SecurityFilterChain 首先大伙都知道&#xff0c;Spring Security 里边的一堆功能都是通过 Filter 来实现的&#xff0c;无论是认证、RememberMe Login、会话管理、CSRF 处理等等&#xff0c;各种功能都是通…

数字信号处理实验四:IIR数字滤波器设计及软件实现

一、实验目的 1. 掌握MATLAB中进行IIR模拟滤波器的设计的相关函数的应用&#xff1b; 2. 掌握MATLAB的工具箱中提供的常用IIR数字滤波器的设计函数的应用&#xff1b; 3.掌握MATLAB的工具箱中提供的模拟滤波器转数字滤波器的相关的设计函数的应用。 二、实验内容 本实验为…

微软远程连接工具:Microsoft Remote Desktop for Mac 中文版

Microsoft Remote Desktop 是一款由微软开发的远程桌面连接软件&#xff0c;它允许用户从远程地点连接到远程计算机或虚拟机&#xff0c;并在远程计算机上使用桌面应用程序和文件。 下载地址&#xff1a;https://www.macz.com/mac/5458.html?idOTI2NjQ5Jl8mMjcuMTg2LjEyNi4yMz…

AI网络爬虫:无限下拉滚动页面的另类爬取方法

现在很多网页都是无限下拉滚动的。可以拉动到底部&#xff0c;然后保存网页为mhtml格式文件。 接着&#xff0c;在ChatGPT中输入提示词&#xff1a; 你是一个Python编程高手&#xff0c;要完成一个关于爬取网页内容的Python脚本的任务&#xff0c;下面是具体步骤&#xff1a; …

vs - 在win10中安装vs2013update5

文章目录 vs - 在win10中安装vs2013update5概述笔记直接安装vs2013-update5报错先安装vs2013原版安装 vs2013 update5测试备注END vs - 在win10中安装vs2013update5 概述 用VS2019写的程序&#xff0c;在早期windows(e.g. win7, win8.1)上安装时&#xff0c;需要UCRT。 UCRT是…

unity2020打包webGL时卡进程问题

我使用的2020.3.0f1c1&#xff0c;打包发布WEB版的时候会一直卡到asm2wasm.exe这个进程里&#xff0c;而且CPU占用率90%以上。 即使是打包一个新建项目的空场景也是同样的问题&#xff0c;我尝试过一直卡在这里会如何&#xff0c;结果还真打包成功了。只是打包一个空场景需要20…