逻辑仿真工具VCS的使用-Makefile
Gvim写RTL code,VCS仿真,Verdi看波形,DC做综合下约束,Primetime做STA,Spyglass做异步时序分析。
VCS全称Verilog Computer Simulation ,VCS是逻辑仿真EDA工具的编译源代码的命令。要用VCS做编译仿真,首先得有一个RTL代码,比如我们写了一个全加器和全加器的testbench,总共两个.v文件 。
有了RTL文件后,如何调用VCS进行编译呢? 在.v文件所在的目录下打开terminal,键入:
vcs -sverilog -debug_all full_adder.v full_adder_tb.v -l com.log
上面有很多细节,一个一个讲:
-sverilog:编译命令选项,识别SystemVerilog语法,如果代码中有SV语法,则编译的时候必须加这个选项。
-debug_all:编译命令选项,可以将debug的信息全部保存下来,比如波形文件。
-l com.log:编译命令选项,将编译过程生成的日志写入com.log文件。
执行完上面这条代码后,如果编译没有报错,一切正确,那么在当前文件夹就会生成一个simv文件,这个文件就是仿真文件,我们跑仿真就用这个文件,注意是simv不是sim。
当然除了写命令调用VCS,也可以用命令:dve & ,启动逻辑仿真工具VCS自带的一个图形化界面dve。命令中的& 表示后台运行dve命令,不占用当前的 terminal。
图形化界面如果想要跑仿真,点击simulate的setup选项,然后选中编译过后的仿真文件simv文件,就可以进行跑仿真了。
把需要看波形的信号点击,Add to wave,然后就会打开一个波形窗口。
生成的波形窗口如下,在底层的输入命名行输入:run,就会开始跑仿真了。
输入run之后,开始仿真就可以看波形了。
按f键,显示所有波形,下面的log窗口就是显示仿真的日志。
上面讲的操作是用界面化的DVE窗口去操作的,实际上我们都使用脚本命令的方法去操作,写命令行编译、写命令行仿真、写命令行看波形。
看波形命令为:dve -vpd vcdplus.vpd & ,想要看波形,我们需要在tb文件里面输出波形文件才行,在tb中展示为:
initial begin
$vcdpluson;
end
输出波形文件后就可以用脚本命令调用dve看波形了。
综上,我们用VCS进行编译、仿真、看波形的脚本命令分别为:
编译源代码:vcs -sverilog -debug_all full_adder.v full_adder_tb.v -l com.log
跑仿真:./simv -l sim.log
看波形:dve -vpd vcdplus.vpd &
但事实上,如果每次编译仿真看波形,都要用手去打这些字符的话,会很累,能不能用什么脚本命令,让我们能够键入很少的字符,就可以进行编译仿真看波形,甚至一条龙服务呢?有,Makefile。
我们用Gvim新建一个文本文件,命名为Makefile,然后如图所示写命令,写命令的方式就是,写一个随便什么关键字,然后+冒号+回车,再键入你设置关键字绑定的脚本命令。比如我们上面写的com,是用来编译的用户自定义关键字,下一行就紧跟着我们定义关键字所代表的代码。注意一个细节,怎么判断我们写的脚本是否被自定义挂件字链接了呢?看颜色,如果没有连接上的话,颜色是普通的黑色,如下图:
这就代表没链接上,通常是由于缩进问题导致的,这点需要注意。
还有一个细节,细心的人会发现,我们编译的时候,没有把文件的名字写到com脚本连接的命令里,而是写 -f rtl.list。这是什么意思呢,这里的rtl.list用来存放我们rtl 代码的名字,用这种方式更方便,后续修改rtl代码名称也好,增减也好都好修改,我们只需要把所有rtl代码的名字都存放到rtl.list中,生成rtl.list的命令也很简单,只要检索当前目录下所有以.v结尾的文件的文件名,然后存入rtl.list就行了,linux命令:find -name "*.v" > rtl.list
对于某个信号,还有一些好用的快捷键可以实用比如圈出来的三个按键
它们分别是:Trace Drivers (Ctrl + D)追踪它的驱动、Trace Value Change ( Ctrl + Shift + D) 追踪代码中数值改变的位置、Trace Loads (Ctrl + Loads)追踪它的负载。
选择要追踪的边沿或者数值,可以直接追踪。
在上面已经提到过Makefile 脚本的书写格式,就是写一个关键字加冒号,然后回车输入一行命令,输入完后,以后要运行这行命令就不用全部打全了,只需要在terminal界面,输入make 关键字就行了。
比如,我们已经在当前文件夹下写好了上面所示的Makefile脚本文件,然后我们也写好了rtl代码,并在terminal 中输入:find -name "*.v" >rtl.list,把.v文件的相对路径都放到了rtl.list中。这时候如果要编译,我们只需要在terminal界面输入:make com 回车
系统会自动帮我们打出com关键字所链接的命令行,如图所示:
Makefile 脚本命令解释:
vcs表示调用vcs软件,-sverilog 表示编译所用的规范,如果我们写的代码里有systemverilog就一定要有这个选项,-debug_all 完全调试模式, -timescale = 1ns/1ps 这个在编译的时候就写,那么在tb里面就不用写了,表示最小仿真时间是1ns,最小仿真精度是1ps。-f rtl.list意思是吧rtl.list里的所有文件都编译进去, -l com.log 意思是把编译产生的编译文件保存在com.log文件中。
./simv 表示运行当前文件夹下的simv文件,这个文件在com命令过后会生成,也就是编译结束后会生成。-l sim.log,意思是把仿真产生的仿真信息都存储在sim.log文本文件中。
把以后缀“.vpd”、“.log”、“.key”、“.vdb”的文件删掉,把csrc文件删掉,把sim开头的文件删掉,把DVEfiles文件删掉。删掉运行verdi软件产生的一些附属文件。
这里写的是设计的一些VCS操作,实际上如果是做验证的话,还会有更多的一些操作,比如收覆盖率,仿真给随机种子等。
相关文章:

逻辑仿真工具VCS的使用-Makefile
Gvim写RTL code,VCS仿真,Verdi看波形,DC做综合下约束,Primetime做STA,Spyglass做异步时序分析。 VCS全称Verilog Computer Simulation ,VCS是逻辑仿真EDA工具的编译源代码的命令。要用VCS做编译仿…...
信息系统安全技术
一、信息安全的有关概念 1. 属性2. 四个安全层次※3. 信息安全保护等级※4. 安全保护能力的等级※ 二、信息加密、解密与常用算法 1. 对称加密2. 非对称加密3. Hash函数4. 数字签名5. 认证 三、信息系统安全 1. 计算机设备安全2. 网络安全3. 操作系统安全4. 数据库安全5. 应用系…...

【数据结构】最小生成树(Prim算法,普里姆算法,普利姆)、最短路径(Dijkstra算法,迪杰斯特拉算法,单源最短路径)
文章目录前置问题问题解答一、基础概念:最小生成树的定义和性质(1)最小生成树(Minimal Spanning Tree)的定义(2)最小生成树(MST)的性质二、如何利用MST性质寻找最小生成树…...
Session与Cookie的区别(一)
从我刚开始学程序时这一题就常出现在面试考题里,一直到现在都还是能看见这个问题。 这个问题重要吗?我觉得蛮重要的。因为 Session 所代表的是「状态」,如果没有了状态,一大堆功能都会失效。 对于工程师来说必须去理解什么是 Sess…...
【Java】重载和重写的区别
重载(Overload) 在同一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同…...
AcWing 第 90 场周赛
目录A、首字母大写B、找数字C、构造字符串A、首字母大写 原题链接:AcWing 4806. 首字母大写 签到题。 #include <bits/stdc.h>using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s;cin >> s;s[0] toupper(s[0]);…...

刚刚,体验了一把Bing chat很爽
文章目录刚刚,体验了一把Bing chat很爽你能做啥?与chatgpt有什么不同?以下是Bingchat的 10个新功能1⃣️在网上搜索结果2⃣️摘要链接3⃣️对话助手4⃣️向您发送实际信息,正确的链接5⃣️在单个查询中执行多个搜索6⃣️玩冒险游戏…...

牛客网Python篇数据分析习题(二)
1.现有一个Nowcoder.csv文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔): Nowcoder_ID:用户ID Level:等级 Achievement_value:成就值 Num_of_exercise&a…...

如何用Python打包好exe文件,并替换图标
前言 Python打包?打包exe文件?怎么操作? ok,今天我来分享分享,教你们如何打包号文件,顺便还来展示一下,如何替换好图标 首先把你的代码准备好,尽量不要中文路径,容易报…...

NFC概述摘要
同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 原理来说,NFC和Wi-Fi类似,利用无线射频技术来实现设备间通信。NFC的工作频率为13.5…...

Python-项目实战--贪吃蛇小游戏(1)
1.贪吃蛇游戏规则贪吃蛇游戏规则如下:1.1开始和结束贪吃蛇初始出现在游戏窗口的左上角位置,体长共有3节游戏过程中,一旦蛇头撞到了窗口的边缘或者身体的其他部位,游戏结束游戏过程中,点击游戏窗口的关闭按钮,或者按下ESC键可以直接退出游戏一…...

vscode sftp从linux服务器下载文件至本地:No such file or dictionary【已解决】
在服务器跑完程序需要下载数据的时候报错: [warn] ENOENT: no such file or directory, open /home/LIST_2080Ti/.ssh/config load /home/LIST_2080Ti/.ssh/config failed 完整报错内容如下: [02-10 08:38:47] [info] config at /home/LIST_2080Ti {&q…...

详解指针(2)(初阶版)
前言:内容包括:指针运算,指针和数组,二级指针,指针数组 详解指针(1)(点击即跳转) part 1:指针运算 1 指针-整数 以如下代码为例:初始化数组内容…...

超详细讲解字符串查找函数(保姆级教程!!!)
超详细讲解字符串查找函数(保姆级教程!!!)字符串查找函数strstr函数strstr函数的使用strstr函数的模拟实现strtok函数strtok函数的使用strtok函数的模拟实现strpbrk函数strpbrk函数的使用strpbrk函数的模拟实现strcspn…...

LeetCode-1138. 字母板上的路径【哈希表,字符串】
LeetCode-1138. 字母板上的路径【哈希表,字符串】题目描述:解题思路一:首先考虑坐标位置,字符是有序的从0开始,当前字符c的行为(c-a)/5,列为(c-a)%5。其次是考虑特殊情况z。若当前从‘z’开始则只能往上走;若是其他字符…...
Vue 可配置化的路由缓存(Vu2 Vue3)
Vue 可配置化的路由缓存(Vu2 & Vue3) 1 介绍 在Vue的项目当中,路由缓存是一个比较常见的功能,譬如,从列表页面进入到详情页面,返回到列表页面时,如果可以保持列表的状态,那用户…...
Linux VPU驱动
1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 概述 VPU 是用来进行图像、视频数据进行硬件编、解码的硬件模块。内部集成了 Encoder、Decoder 功能部件进行图像、视频数据进行硬件编、解码&a…...

spring 笔记
一、spring概述 1.1 spring介绍 spring是一个轻量级的控制反转和面向切面的容器框架,用来解决企业项目开发的复杂度问题---解耦 轻量级:体积小,对代码没有侵入性控制反转:IOC inverse of control, 把创建对象的工作交…...
Java日志框架学习
首先,Java日志框架可以分为两类:门面型日志框架和记录型日志框架。 门面型日志框架 JCL:Java日志接口,后更名为Commons LoggingSLF4J:是一套简易Java日志门面,本身并无日志的实现 记录型日志框架 JUL&a…...

基础面试题:堆和栈的区别
面试题:堆和栈的区别(往往讲的是内存zha) 为什么说访问栈栈比访问堆快些? 目录 一、数据结构中的堆栈 1、数据结构中的堆 1)堆的定义 2)堆的效率 2、 数据结构中的栈 二、内存中的堆栈 1、内存堆的定义…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...