使用VCS对Verilog/System Verilog进行单步调试的步骤
Verilog单步调试:
System Verilog进行单步调试的步骤如下:
1. 编译设计
使用`-debug_all`或`-debug_pp`选项编译设计,生成调试信息。
我的4个文件:

1.led.v
module led(input clk,input rst_n,output reg led
);reg [7:0] cnt;always @ (posedge clk)
beginif(!rst_n)cnt <= 0;else if(cnt >= 10)cnt <= 0;else cnt <= cnt + 1;
endalways @ (posedge clk)
beginif(!rst_n)led <= 0;else if(cnt == 10)led <= !led;
endendmodule
2.led_tb.v
`timescale 1ns / 1psmodule led_tb;// Parameters
parameter CLK_PERIOD = 10; // Clock period in ns// Inputs
reg clk;
reg rst_n;// Outputs
wire led;// Instantiate the Unit Under Test (UUT)
led uut (.clk(clk), .rst_n(rst_n), .led(led)
);// Clock generation
initial beginclk = 0;forever # (CLK_PERIOD/2) clk = ~clk;
endinitial begin$fsdbDumpfile("tb.fsdb");//这个是产生名为tb.fsdb的文件$fsdbDumpvars;
end// Test cases
initial begin// Initialize inputsrst_n = 0;# (CLK_PERIOD*2); // Wait for a few clock cycles// Test case 1: Reset active lowrst_n = 0;# (CLK_PERIOD*10);$display("Test case 1: After reset, led = %b", led); // Expected: led = 0// Test case 2: Reset released, cnt < 10rst_n = 1;# (CLK_PERIOD*5);$display("Test case 2: After reset release, led = %b", led); // Expected: led = 0// Test case 3: cnt reaches 10, led toggles# (CLK_PERIOD*5);$display("Test case 3: After cnt reaches 10, led = %b", led); // Expected: led = 1// Finish simulation$finish;
end
3.Makefile
#------------------------------------------------------------------------------------------
FSDB_FILE = tb.fsdb
comp : clean vcs
#------------------------------------------------------------------------------------------vcs :vcs \-f filelist.f \-timescale=1ns/1ns \-fsdb -full64 -R +vc +v2k -sverilog -debug_all \-P ${LD_LIBRARY_PATH}/novas.tab ${LD_LIBRARY_PATH}/pli.a \| tee vcs.log &
#------------------------------------------------------------------------------------------
verdi :verdi -f filelist.f -ssf $(FSDB_FILE) &
#------------------------------------------------------------------------------------------
clean :rm -rf *~ core csrc simv* vc_hdrs.h ucli.key urg* *.log novas.* *.fsdb* verdiLog 64* DVEfiles *.vpd
#------------------------------------------------------------------------------------------
4.file_list
./led.v
./led_tb.v
2. 启动仿真
编译后会生成可执行文件`simv`,运行它以启动仿真。
make vcs

3. 进入调试模式
使用`-gui`选项启动VCS的图形界面调试工具DVE(Discovery Visualization Environment)。
```bash
./simv -gui
```

4. 使用DVE进行单步调试
在DVE中,可以设置断点、单步执行代码、查看信号和变量等。
- **设置断点**:在代码行号旁点击设置断点。
法一(推荐):在行号旁,双击鼠标左键

如上,我是在led.v这个文件进行的断电设置;
法2:右键-->Breakpoint

- **添加待观测信号**:在波形窗口查看信号波形,或在变量窗口查看变量值。
将下面line1~18用鼠标左键选中,右键,添加到待观测波形中;

- **单步执行**:使用`Step Over`、`Step Into`等按钮逐步执行代码。

下面1 or 2都可以用来步进,推荐用快捷键F10.F11.

- **查看信号**:在波形窗口查看信号波形,或在变量窗口查看变量值。
5. 命令行调试(可选)
如果不使用DVE,可以通过命令行进行调试。
```bash
./simv -ucli
```
在UCLI命令行中,使用以下命令进行调试:
- `run`:运行仿真。
- `step`:单步执行。
- `next`:执行下一行代码。
- `cont`:继续执行直到下一个断点。
- `break`:设置断点。
其他:可以将DVE waveform窗口“Always on Top”

6. 分析调试结果
通过DVE或命令行工具分析调试结果,定位并修复问题。
7.总结
1. 使用`-debug_all`编译设计。
2. 运行`./simv -gui`启动DVE。
3. 在DVE中设置断点并单步调试。
4. 可选:使用命令行工具进行调试。
5. 分析调试结果,修复问题。
通过这些步骤,你可以有效地使用VCS对SystemVerilog进行单步调试。
相关文章:
使用VCS对Verilog/System Verilog进行单步调试的步骤
Verilog单步调试: System Verilog进行单步调试的步骤如下: 1. 编译设计 使用-debug_all或-debug_pp选项编译设计,生成调试信息。 我的4个文件: 1.led.v module led(input clk,input rst_n,output reg led );reg [7:0] cnt;alwa…...
ROS-激光雷达-消息包格式-获取激光雷达数据-激光雷达避障
文章目录 激光雷达原理 消息包格式获取激光雷达数据激光雷达避障 激光雷达 原理 激光雷达(LiDAR) 是一种利用激光进行距离测量和环境感知的传感器。它通过发射激光束并接收反射光来测量物体的距离,生成点云数据,用于构建环境的三…...
c++之模板进阶
在前面的文章中,我们已经简单的了解了模板的使用,在这篇文章中,我们将继续深入探讨模板 1.模板的特化 1.1 概念 通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果&a…...
关于Internet Download Manager(IDM)强制下载合并相关二次开发
目录 前言 强制下载视频 强制合并 迁移下载列表 免责声明 附录 前言 那个下载工具IDM不说了,确实有很多便捷的功能,不过也有一些限制 常见的包括但不限于: 1.无法下载有版权保护的视频(不管真假) 2.有时候下载…...
鸿蒙HarmonyOS Next 视频边播放边缓存- OhosVideoCache
OhosVideoCache 是一个专为OpenHarmony开发(HarmonyOS也可以用)的音视频缓存库,旨在帮助开发者轻松实现音视频的边播放边缓存功能。以下是关于 OhosVideoCache 的详细介绍: 1. 核心功能 边播放边缓存:将音视频URL传递给 OhosVideoCache 处理后…...
(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例
(1) 先介绍下后面的代码里要用到的基础函数: 以及: (2) 接着给出现代版的 读写 socket 参数的系统函数 : 以及: (3) 给出 一言的 范例代码,获取…...
程序代码篇---项目目录结构HSV掩膜Opencv图像处理
文章目录 前言第一部分:项目目录结构第二部分:HSV提取HSV色调(Hue)含义取值范围 饱和度(Saturation)含义取值范围 亮度(Value)含义取值范围 第三部分:Opencv图像处理1. 读…...
注解与反射基础
注解 概述 注解(Annotation),从jdk5.0引入。 作用 不是程序本身,可以对程序作出解释(这一点和注释没什么区别)可以被其他程序读取 格式 注释是以“注释名”在代码中存在的,还可以添加一些…...
Vue指令v-html
目录 一、Vue中的v-html指令是什么?二、v-html指令与v-text指令的区别? 一、Vue中的v-html指令是什么? v-html指令的作用是:设置元素的innerHTML,内容中有html结构会被解析为标签。 二、v-html指令与v-text指令的区别…...
院校联合以项目驱动联合培养医工计算机AI人才路径探析
一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗人工智能作为一个极具潜力的新兴领域,正深刻地改变着传统医疗模式。从疾病的早期诊断、个性化治疗方案的制定,到药物研发的加速,人工智能技术的应用极大地提升了医疗服务…...
CDDIS从2025年2月开始数据迁移
CDDIS 将从 2025 年 2 月开始将我们的网站从 cddis.nasa.gov 迁移到 earthdata.nasa.gov,并于 2025 年 6 月结束。 期间可能对GAMIT联网数据下载造成影响。...
前端 | JavaScript中的reduce方法
1. 什么是reduce reduce 方法是 JavaScript 中数组的重要方法之一,用于对数组中的元素进行累积计算。它接收一个回调函数作为参数,并返回一个最终计算结果。reduce 在许多场景下都非常有用,比如求和、数组扁平化、对象计数、数据转换等。 2…...
【C++】B2124 判断字符串是否为回文
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式:输出格式:样例: 💯方法一:我的第一种做法思路代码实现解析 💯方法二:我…...
人工智能学习(五)之机器学习逻辑回归算法
深入剖析机器学习逻辑回归算法 一、引言 在机器学习领域,逻辑回归是一种极为经典且应用广泛的算法。虽说名字里带有 “回归”,但它主要用于解决分类问题,在医学、金融、互联网等多个领域都发挥着关键作用。例如,在医学上辅助判断…...
Bash 基础与进阶实践指南
目录 Bash 简介与基础基本命令与文件操作权限管理与用户管理重定向与管道变量与环境变量通配符与正则表达式Shell 脚本结构与控制流常用内建命令与技巧文本处理常用命令作业控制与进程管理别名与函数实用技巧与注意事项更多 Bash 进阶话题参考资源 1. Bash 简介与基础 1.1 什…...
基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究
摘要:本文深入探讨在开源AI智能名片2 1链动模式S2B2C商城小程序的应用场景下,个人IP人设构建的理论与实践。通过剖析个人IP人设定义中的“诉求”“特质”“可感知”三要素,结合该小程序特点,阐述其对个人IP打造的影响与推动作用&…...
基于springboot+vue的航空散货调度系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
【C++】B2122 单词翻转
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 💯一、我的做法代码实现:代码解析思路分析 💯二、老师的第一种做法代码实现&a…...
OSCP 渗透测试:网络抓包工具的使用指南
在 OSCP 考试和渗透测试中,网络数据分析是至关重要的技能。无论是嗅探明文密码、分析恶意流量,还是溯源攻击,抓包工具都是我们的得力助手。 本文将介绍 OSI 七层网络模型 及其在网络分析中的作用,并详细讲解 Wireshark 和 tcpdum…...
Android 进程间通信
什么是IPC? Android 进程间通信(IPC,Inter-Process Communication)是Android操作系统中不同进程间交换数据和资源的一种机制。由于Android是多任务操作系统,每个应用通常运行在自己的进程中,以提高安全性和…...
Phi-4-Reasoning-Vision一文详解:官方Prompt规范与本地适配实践
Phi-4-Reasoning-Vision一文详解:官方Prompt规范与本地适配实践 1. 项目概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为双卡4090环境优化。该工具严格遵循官方SYSTEM PROMPT规范,…...
Asian Beauty Z-Image Turbo惊艳案例:单卡RTX4090每秒1.8帧的Turbo实时生成
Asian Beauty Z-Image Turbo惊艳案例:单卡RTX4090每秒1.8帧的Turbo实时生成 东方美学图像生成的本地高效解决方案 在数字内容创作蓬勃发展的今天,高质量人像图像生成需求日益增长,特别是具有东方美学特色的图像。传统云端生成方案虽然方便&am…...
STM32F103C8T6接KY-9250陀螺仪,串口数据解析与姿态角计算全流程(附避坑点)
STM32F103C8T6与KY-9250陀螺仪实战:从硬件对接到姿态解算的完整指南 第一次拿到STM32开发板和KY-9250模块时,那种既兴奋又忐忑的心情记忆犹新——兴奋于即将实现酷炫的姿态检测功能,忐忑于不知从何下手的迷茫。本文将以手把手的方式ÿ…...
【PostgreSQL】生态工具箱:从核心插件到企业级扩展的实战指南
1. PostgreSQL生态工具箱全景图 第一次接触PostgreSQL时,很多人会惊讶于它丰富的扩展生态。就像一位老木匠的工具箱,PostgreSQL提供了从螺丝刀到电锯的全套工具。我在实际项目中最深刻的体会是:选对工具比盲目编码更重要。比如曾经有个项目需…...
域适应实战:如何用Python快速实现图像风格迁移(附代码)
域适应实战:Python实现图像风格迁移的工程化解决方案 当你在巴黎街头用手机拍摄埃菲尔铁塔时,是否想过让它瞬间拥有梵高《星月夜》的笔触质感?这种看似魔法的技术背后,是域适应技术在计算机视觉领域的精妙应用。不同于简单的滤镜叠…...
从订餐流程到并发编程:Petri网中的‘库所’与‘变迁’到底在模拟什么?
从订餐流程到并发编程:Petri网中的‘库所’与‘变迁’到底在模拟什么? 想象一下,你正在用手机订外卖:选择菜品、下单支付、等待制作、骑手配送——这个看似简单的流程背后,隐藏着一个精妙的系统状态转换模型。这正是Pe…...
SJA1105Q升级踩坑记:RGMII V2.0时序下,33Ω串阻为何成了千兆通信的‘隐形杀手’?
SJA1105Q升级中的RGMII V2.0时序陷阱:33Ω串阻如何摧毁千兆通信稳定性 当NXP SJA1105Q这款号称"增强版"的工业交换机芯片落到我们硬件工程师手中时,谁曾想PCB上那些看似无害的33Ω小电阻,竟会成为千兆通信系统的阿喀琉斯之踵。这不…...
Anthropic提示工程教程:从入门到精通的完整指南
Anthropic提示工程教程:从入门到精通的完整指南 【免费下载链接】prompt-eng-interactive-tutorial Anthropics Interactive Prompt Engineering Tutorial 项目地址: https://gitcode.com/GitHub_Trending/pr/prompt-eng-interactive-tutorial Anthropic的交…...
深入解析BUCK、BOOST与Charge Pump电路的设计与应用
1. 开关电源基础:为什么需要BUCK、BOOST和Charge Pump? 刚入行那会儿,我总觉得电源设计就是个"变压器加整流桥"的事,直到某次项目里把12V电池直接怼到3.3V的MCU上——随着一缕青烟升起,我才明白电压转换这门…...
Phi-3-mini-128k-instruct实战案例:中小企业技术文档自动解析与结构化提取
Phi-3-mini-128k-instruct实战案例:中小企业技术文档自动解析与结构化提取 1. 项目背景与价值 对于中小企业而言,技术文档管理一直是个令人头疼的问题。工程师们经常需要从大量PDF、Word文档中提取关键信息,手动整理成结构化数据。这个过程…...
