使用VCS进行单步调试的步骤
使用VCS对SystemVerilog进行单步调试的步骤如下:
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// Test case 4: cnt resets to 0, led toggles again# (CLK_PERIOD*10);$display("Test case 4: After cnt resets to 0, led = %b", led); // Expected: led = 0// Test case 5: Multiple cycles, led toggles every 10 clock cycles// for (int i = 0; i < 20; i++) begin// # (CLK_PERIOD*10);// $display("Test case 5: Cycle %d, led = %b", i, led); // Expected: led toggles every 10 clock cycles// end// 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) -play font.tcl &
#------------------------------------------------------------------------------------------
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进行单步调试的步骤
使用VCS对SystemVerilog进行单步调试的步骤如下: 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) beg…...
【Elasticsearch】硬件资源优化
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Elasticsearch 指南 [8.17] | Search APIs
Search API 返回与请求中定义的查询匹配的搜索结果。 http GET /my-index-000001/_search Request GET /<target>/_search GET /_search POST /<target>/_search POST /_search Prerequisites 如果启用了 Elasticsearch 安全功能,针对目标数据流…...
QT+mysql+python 效果:
# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…...
Java 序列化和反序列化作用
Java 序列化和反序列化的核心作用是将对象转换为可存储或传输的字节流(序列化),以及从字节流恢复对象(反序列化)。以下是详细说明和示例: 作用 持久化存储 将对象保存到文件或数据库,重启后仍可…...
【4】阿里面试题整理
[1]. 介绍一下数据库死锁 数据库死锁是指两个或多个事务,由于互相请求对方持有的资源而造成的互相等待的状态,导致它们都无法继续执行。 死锁会导致事务阻塞,系统性能下降甚至应用崩溃。 比如:事务T1持有资源R1并等待R2&#x…...
回顾生化之父三上真司的游戏思想
1. 放养式野蛮成长路线,开创生存恐怖类型 三上进入capcom后,没有培训,没有师傅手把手的指导,而是每天摸索写策划书,老员工给出不行的评语后,扔掉旧的重写新的。 然后突然就成为游戏总监,进入开…...
Java循环操作哪个快
文章目录 Java循环操作哪个快一、引言二、循环操作性能对比1、普通for循环与增强for循环1.1、代码示例 2、for循环与while循环2.1、代码示例 3、循环优化技巧3.1、代码示例 三、循环操作的适用场景四、使用示例五、总结 Java循环操作哪个快 一、引言 在Java开发中,…...
Maven jar 包下载失败问题处理
Maven jar 包下载失败问题处理 1.配置好国内的Maven源2.重新下载3. 其他问题 1.配置好国内的Maven源 打开⾃⼰的 Idea 检测 Maven 的配置是否正确,正确的配置如下图所示: 检查项⼀共有两个: 确认右边的两个勾已经选中,如果没有请…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化
1.25 视觉风暴:NumPy驱动数据可视化 目录 #mermaid-svg-i3nKPm64ZuQ9UcNI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i3nKPm64ZuQ9UcNI .error-icon{fill:#552222;}#mermaid-svg-i3nKPm64ZuQ9UcNI …...
Baklib推动数字化内容管理解决方案助力企业数字化转型
内容概要 在当今信息爆炸的时代,数字化内容管理成为企业提升效率和竞争力的关键。企业在面对大量数据时,如何高效地存储、分类与检索信息,直接关系到其经营的成败。数字化内容管理不仅限于简单的文档存储,更是整合了文档、图像、…...
读书笔记 | 《最小阻力之路》:用结构思维重塑人生愿景
一、核心理念:结构决定行为轨迹 橡皮筋模型:愿景张力的本质 书中提出:人类行为始终沿着"现状"与"愿景"之间的张力路径运动,如同橡皮筋拉伸产生的动力。 案例:音乐家每日练习的坚持,不…...
React中使用箭头函数定义事件处理程序
React中使用箭头函数定义事件处理程序 为什么使用箭头函数?1. 传递动态参数2. 避免闭包问题3. 确保每个方块的事件处理程序是独立的4. 代码可读性和维护性 示例代码总结 在React开发中,处理事件是一个常见的任务。特别是当我们需要传递动态参数时&#x…...
高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池
目录 实现一个无返回的线程池 完全代码实现 Reference 实现一个无返回的线程池 实现一个简单的线程池非常简单,我们首先聊一聊线程池的定义: 线程池(Thread Pool) 是一种并发编程的设计模式,用于管理和复用多个线程…...
少样本提示词模板
文章目录 少样本提示词模板 少样本提示词模板 少样本提示是一种基于机器学习的技术,利用少量的样本(即提示词的示例部分)来引导模型对特定任务进行学习和执行。这些示例能让模型理解开发者期望它完成的任务的类型和风格。在给定的任务中&…...
SQLGlot:用SQLGlot解析SQL
几十年来,结构化查询语言(SQL)一直是与数据库交互的实际语言。在一段时间内,不同的数据库在支持通用SQL语法的同时演变出了不同的SQL风格,也就是方言。这可能是SQL被广泛采用和流行的原因之一。 SQL解析是解构SQL查询…...
代码随想录算法训练营Day35
第九章 动态规划part03 正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,但基本理解的都不够深入。 如果是直接从来没听过背包问题,可以先看文字讲解慢慢了解 这是干什么的。 …...
ECharts 样式设置
ECharts 样式设置 引言 ECharts 是一款功能强大的可视化库,广泛用于数据可视化。样式设置是 ECharts 中的重要一环,它能够帮助开发者根据需求调整图表的视觉效果,使其更加美观和易于理解。本文将详细介绍 ECharts 的样式设置,包…...
【腾讯前端面试】纯css画图形
之前参加腾讯面试,第一轮是笔试,面试官发的试卷里有一题手写css画一个扇形、一个平行四边形……笔试时间还是比较充裕的,但是我对这题完全没有思路😭于是就空着了,最后也没过。 今天偶然翻到廖雪峰大佬的博客里提到了关…...
DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)的解决方法
在使用DBeaver连接MySQL数据库时,如果遇到“Access denied for user ip (using password: YES)”的错误提示,说明用户认证失败。此问题通常与数据库用户权限、配置错误或网络设置有关。本文将详细介绍解决此问题的步骤。 一、检查用户名和密码 首先&am…...
截止到2025年2月1日,Linux的Wayland还有哪些问题是需要解决的?
截至2025年2月1日,Wayland需要解决的核心问题可按权重从高到低排序如下: 1. 屏幕共享与远程桌面的完整支持(权重:★★★★★) 问题:企业场景(如 腾讯会议)、开发者远程调试依赖稳定的屏幕共享功能。当前Wayland依赖PipeWire和XWayland,存在权限管理复杂、多显示器选择…...
【C++篇】位图与布隆过滤器
目录 一,位图 1.1,位图的概念 1.2,位图的设计与实现 1.5,位图的应用举例 1.4,位图常用应用场景 二,布隆过滤器 2.1,定义: 2.2,布隆过滤器的实现 2.3, 应…...
[EAI-026] DeepSeek-VL2 技术报告解读
Paper Card 论文标题:DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding 论文作者:Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bin…...
CV报错与模型推理注意
错误1: error: OpenCV(4.10.0) :-1: error: (-5:Bad argument) in function warpAffine > Overload resolution failed: > - Cant parse dsize. Sequence item with index 0 has a wrong type > - Cant parse dsize. Sequence item with index 0 has a …...
如何解决云台重力补偿?
如何解决云台重力补偿? 最近在调试步兵云台的时候,由于枪管、图传、摄像头等重力的原因,pitch轴的参数尤其难以调整,又不想抬升和降低使用两套不同的参数,所以使用了重力补偿,效果也是比较理想的,于是整理为一篇文章记录一下 一、问题根源:枪管重力在“搞事情” 想象…...
Java 23新特性
文章目录 Java 23新特性一、引言二、Markdown文档注释(JEP 467)示例 三、ZGC:默认的分代模式(JEP 474)1. 为什么要引入分代模式2. 使用分代模式的优势3. 如何启用分代模式 四、隐式声明的类和实例主方法(JE…...
二叉树--链式存储
1我们之前学了二叉树的顺序存储(这种顺序存储的二叉树被称为堆),我们今天来学习一下二叉树的链式存储: 我们使用链表来表示一颗二叉树: ⽤链表来表⽰⼀棵⼆叉树,即⽤链来指⽰元素的逻辑关系。通常的⽅法是…...
OpenAI 实战进阶教程 - 第七节: 与数据库集成 - 生成 SQL 查询与优化
内容目标 学习如何使用 OpenAI 辅助生成和优化多表 SQL 查询了解如何获取数据库结构信息并与 OpenAI 结合使用 实操步骤 1. 创建 SQLite 数据库示例 创建数据库及表结构: import sqlite3# 连接 SQLite 数据库(如果不存在则创建) conn sq…...
基于直觉的理性思维入口:相提并论的三者 以“网络”为例
以下主要是 腾讯云 AI 代码助手的答问。 Q1、假设有且只有一个 能和主干网和 骨干网 相提并论的其它什么 “**网”,您觉得应该是什么 在考虑能与主干网和骨干网相提并论的“网”时,我们需要思考哪些网络在规模、重要性或功能上与这两者相当。主干网和骨…...
C++,vector:动态数组的原理、使用与极致优化
文章目录 引言一、vector 的核心原理1. 底层数据结构1.1 内存布局的三指针模型1.2 内存布局示意图 2. 动态扩容机制2.1 动态扩容过程示例 3. 关键结论4. 代码验证内存布局5. 总结 二、vector 的使用方法1. 基本操作2. 迭代器与范围遍历 三、vector 的注意事项1. 迭代器失效2. 性…...
