VCS入门教程(一)
本文授权转发自知乎用户 橘子汽水 链接:https://www.zhihu.com/people/xing-qi-55-65/posts
一、前言
接触Synopsys 家的VCS工具有一段时间了,在此简单分享下个人的学习笔记。供刚接触到数字前端设计的同学提供一些参考资料。在学校我们经常使用的verilog仿真软件都是quartus和modelsim,但是看一下一些公司的招聘要求,公司里使用的基本都是VCS。所以学习一下对找工作还是有帮助的。
参考资料:1.VCS User Guide 2. VCS labs 3. bilibili搜索VCS,有一些视频教程。
1是官方手册;
2是官方给出的几个实验;包涵源码和实验指导文档。
1, 2 均可在eetop上找到并下载。
VCS工具的安装是一个很头疼的事情。本人最开始查阅各种博客,花了两天时间才捣鼓好双系统,在Ubuntu上安装完VCS。到后来发现eetop上有人分享安装完各种EDA的Redhat系统,十分方便。
链接:Linux下VCS2014和Verdi2015的联合仿真
在linux下使用EDA需要有linux基础,ls,pwd,cd, touch等基本命令需要会用。
二、VCS介绍
VCS是编译型verilog仿真器,处理verilog的源码过程如下:
图1
VCS先将verilog/systemverilog文件转化为C文件,在linux下编译链接生成可执行文件,在linux下运行simv即可得到仿真结果。
VCS使用步骤,先编译verilog源码,再运行可执行文件:
图2
编译命令的格式:vcs sourcefile [compile_time_option] (编译选项用来控制编译过程)
执行仿真命令格式:./simv [run_time_option]
三、示例
下面使用VCS labs里面lab1的verilog源码做一些示例,电路结构图如下:
图3
此电路为一位加法器 fa.v 组成4位加法器 add4.v,再组成一个8位加法器,使用资源换性能的思路,减小了行波进位加法器的进位延迟。顶层文件为add8.v,testbench为addertb.v。
图4
输入上述命令回车即可编译verilog文件,其中-l readme.log 用于将编译产生的信息放在log文件内,+v2k是使VCS兼容verilog 2001以前的标准。-debug_all用于产生debug所需的文件。
图5
./simv -l run.log 开始仿真,testbench里的$display打印仿真成功的信息,显示在终端上。使用-l run.log 记录终端上产生的信息。
图6
使用./simv -gui 命令打开图形化界面DVE,选中所有信号 --> 右键Add to Waves --> New Wave View
图7
点击1处的小箭头,便有波形出现。使用2处的三个按钮(预览全局、放大和缩小)调整波形。在3处鼠标左键按住不动,左右拖动即可选取一个观察的时间范围。
以上已完成VCS基本的使用,下面我们考虑一个更复杂的情形。假设现在顶层模块变得十分复杂,里面包含很多的 .v 文件,我们再像图4那样将所有文件敲在终端上便很麻烦。编译选项-f可以解决这个问题。
图8
在工作目录下新建一个verilog_file.f文件,将所用到的verilog源码以及路径写入文件,并保存退出。
图9
使用-f verilog_file.f 选项,即可将.f文件里的源码全部编译。
以下有其他常用编译选项,注意各个编译选项的顺序,有时出错需要调整。
1) -R 编译后立即运行,即编译完成后立即执行 ./simv
2) -Mupdate 源文件有修改时,只重新编译有改动的.v文件,节约编译时间。
3) -sverilog 打开对Systemverilog的支持,编译Systemverilog文件时使用。
4) -timescale=1ns/1ns 设置仿真精度
5) -o simv_file 编译默认产生的可执行文件为simv,可以使用 -o 更改可执行文件名。
再考虑一种情形,当使用到VCS更多其他功能时,编译选项会变得很长,在终端上一个一个敲变得十分不方便,我们便可以使用makefile来帮助我们编译仿真。在工作目录下新建一个makefile文件
.PHONY:com sim clean
OUTPUT = adder_top
VCS = vcs -sverilog +v2k -timescale=1ns/1ns
-debug_all
-o ${OUTPUT}
-l compile.log
SIM = ./${OUTPUT} -l run.log
com:
${VCS} -f verilog_file.f
sim:
${SIM}
clean:
rm -rf ./csrc *.daidir *.log simv* *.key
makefile 完成以后,在终端上输入 make com 后回车,相当于在终端中输入以下内容后回车,进行编译。
vcs -sverilog +v2k -timescale=1ns/1ns -debug_all -o adder_top -l compile.log -f verilog_file.f
输入make sim 相当于:
./adder_top -l run.log
输入make clean 相当于:
rm -rf ./csrc *.daidir *.log simv* *.key
清除一些中间文件。
四、结束语
以上就是VCS入门的介绍啦,水平有限,若有错误,请批评指教。
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(5)--问题解决
- 全国首创!今天起,杭州“刷”的一下就能直接乘地铁
- 2018年前端技术趋势预览
- SQL SERVER 内存分配及常见内存问题 简介
- 深入浅出事件流处理NEsper(一)
- 微软官方提供的用于监控MS SQL Server运行状况的工具及SQL语句
- 生成人工智能:创意专家新的强大工具
- JavaScript能做什么?
- SQL中利用DMV进行数据库性能分析
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
- 独家!万达网科大裁员后将转型AI 朱战备或接班曲德君
- Git分支管理的策略梳理
- 数据场景分析 线上线下商家到底谁能干过谁?
- 张钦坤:云计算、开放平台与服务商版权责任
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 快速学习-Skywalking原理
- 快速学习-Skywalking常用插件
- 快速学习-Skywalking-MySql调用监控
- 我为何弃用Jetpack的App Startup?
- 快速学习-Skywalking的RPC调用-Dubbo的最佳实践
- Spring Cloud Gateway开发的几个要点
- 快速学习-Skywalking告警功能
- 使用Node.js实现一个express框架
- 快速学习-skywalking入门
- ts7053的另一种解法
- 三分钟读懂Softmax函数
- Docker 容器分离部署LNMP架构
- Exams/ece241 2013 q4答案解析
- ansible生产环境使用场景(三):find查找指定内容
- vue 中 key 值有什么作用?