使用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…...
Pyside6异步通信测试
#第一种方式,借助qasync实现。使用pip install qasync安装。 from PySide6.QtWidgets import * from PySide6.QtCore import * from PySide6.QtGui import * import asyncio from qasync import QEventLoop, asyncSlotclass Form(QWidget):def __init__(self,paren…...
[ESP32:Vscode+PlatformIO]新建工程 常用配置与设置
2025-1-29 一、新建工程 选择一个要创建工程文件夹的地方,在空白处鼠标右键选择通过Code打开 打开Vscode,点击platformIO图标,选择PIO Home下的open,最后点击new project 按照下图进行设置 第一个是工程文件夹的名称 第二个是…...
如何使用 DeepSeek API 结合 VSCode 提升开发效率
引言 在当今的软件开发领域,API 的使用已经成为不可或缺的一部分。DeepSeek 是一个强大的 API 平台,提供了丰富的功能和数据,可以帮助开发者快速构建和优化应用程序。而 Visual Studio Code(VSCode)作为一款轻量级但功…...
自定义数据集 ,使用朴素贝叶斯对其进行分类
数据集定义: - data 列表包含了文本样本及其对应的情感标签。每个元素是一个元组,第一个元素是文本,第二个元素是标签。 特征提取: - 使用 CountVectorizer 将文本转换为词频向量。 fit_transform 方法在训练数据上拟合向量器…...
Flutter使用Flavor实现切换环境和多渠道打包
在Android开发中通常我们使用flavor进行多渠道打包,flutter开发中同样有这种方式,不过需要在原生中配置 具体方案其实flutter官网个了相关示例(https://docs.flutter.dev/deployment/flavors),我这里记录一下自己的操作 Android …...
C# lock使用详解
总目录 前言 在 C# 多线程编程中,lock 关键字是一种非常重要的同步机制,用于确保同一时间只有一个线程可以访问特定的代码块,从而避免多个线程同时操作共享资源时可能出现的数据竞争和不一致问题。以下是关于 lock 关键字的详细使用介绍。 一…...
C# 接口介绍
.NET学习资料 .NET学习资料 .NET学习资料 一、接口的定义 在 C# 中,接口是一种特殊的抽象类型,它定义了一组方法签名,但不包含方法的实现。接口使用interface关键字来声明。例如,定义一个表示形状的接口IShape: in…...
第三周 树
猫猫和企鹅 分数 10 全屏浏览 切换布局 作者 姜明欣 单位 河北大学 王国里有 nn 个居住区,它们之间有 n−1 条道路相连,并且保证从每个居住区出发都可以到达任何一个居住区,并且每条道路的长度都为 1。 除 1号居住区外,每个居…...
OpenAI 实战进阶教程 - 第四节: 结合 Web 服务:构建 Flask API 网关
目标 学习将 OpenAI 接入 Web 应用,构建交互式 API 网关理解 Flask 框架的基本用法实现 GPT 模型的 API 集成并返回结果 内容与实操 一、环境准备 安装必要依赖: 打开终端或命令行,执行以下命令安装 Flask 和 OpenAI SDK: pip i…...
Nginx 中文文档
文章来源:nginx 文档 -- nginx中文文档|nginx中文教程 nginx 文档 介绍 安装 nginx从源构建 nginx新手指南管理员指南控制 nginx连接处理方法设置哈希调试日志记录到 syslog配置文件测量单位命令行参数适用于 Windows 的 nginx支持 QUIC 和 HTTP/3 nginx 如何处理…...
Java 泛型<? extends Object>
在 Java 泛型中,<? extends Object> 和 <?> 都表示未知类型,但它们在某些情况下有细微的差异。泛型的引入是为了消除运行时错误并增强类型安全性,使代码更具可读性和可维护性。 在 JDK 5 中引入了泛型,以消除编译时…...
鲸鱼算法 matlab pso
算法原理 鲸鱼优化算法的核心思想是通过模拟座头鲸的捕食过程来进行搜索和优化。座头鲸在捕猎时会围绕猎物游动并产生气泡网,迫使猎物聚集。这一行为被用来设计搜索策略,使算法能够有效地找到全局最优解。 算法步骤 初始化:随机生成一…...
Hot100之堆
我们的PriorityQueue默认为最小堆,堆顶总是为最小 215数组中的第K个最大元素 题目 思路解析 暴力解法(不符合时间复杂度) 题目要求我们找到「数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素」。「数组排序后的第 k …...
KNIME:开源 AI 数据科学
KNIME(Konstanz Information Miner)是一款开源且功能强大的数据科学平台,由德国康斯坦茨大学的软件工程师团队开发,自2004年推出以来,广泛应用于数据分析、数据挖掘、机器学习和可视化等领域。以下是对KNIME的深度介绍…...
Office / WPS 公式、Mathtype 公式输入花体字、空心字
注:引文主要看注意事项。 1、Office / WPS 公式中字体转换 花体字 字体选择 “Eulid Math One” 空心字 字体选择 “Eulid Math Two” 2、Mathtype 公式输入花体字、空心字 2.1 直接输入 花体字 在 mathtype 中直接输入 \mathcal{L} L \Large \mathcal{L} L…...
[HOT 100] 2824. 统计和小于目标的下标对数目
文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 2824. 统计和小于目标的下标对数目 - 力扣(LeetCode) 2. 题目描述 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target ,请你…...
建表注意事项(2):表约束,主键自增,序列[oracle]
没有明确写明数据库时,默认基于oracle 约束的分类 用于确保数据的完整性和一致性。约束可以分为 表级约束 和 列级约束,区别在于定义的位置和作用范围 复合主键约束: 主键约束中有2个或以上的字段 复合主键的列顺序会影响索引的使用,需谨慎设计 添加…...
Ubuntu20.04 磁盘空间扩展教程
Ubuntu20.04 磁盘空间扩展教程_ubuntu20 gpart扩容-CSDN博客文章浏览阅读2w次,点赞38次,收藏119次。执行命令查看系统容量相关的数据:df -h当前容量为20G,已用18G(96%),可用844M,可用…...
冯诺依曼体系架构和操作系统的概念
1.冯诺依曼体系架构 计算机的硬件大部分都遵循冯诺依曼体系架构,其图示如下 这里的存储器指的是内存,是一种断电易失的设备。 速度快 而磁盘,是一种永久存储的设备,其属于外设既是输出设备又是输入设备。速度慢 而运算器是一种…...
OpenGL学习笔记(六):Transformations 变换(变换矩阵、坐标系统、GLM库应用)
文章目录 向量变换使用GLM变换(缩放、旋转、位移)将变换矩阵传递给着色器坐标系统与MVP矩阵三维变换绘制3D立方体 & 深度测试(Z-buffer)练习1——更多立方体 现在我们已经知道了如何创建一个物体、着色、加入纹理。但它们都还…...
Linux第105步_基于SiI9022A芯片的RGB转HDMI实验
SiI9022A是一款HDMI传输芯片,可以将“音视频接口”转换为HDMI或者DVI格式,是一个视频转换芯片。本实验基于linux的驱动程序设计。 SiI9022A支持输入视频格式有:xvYCC、BTA-T1004、ITU-R.656,内置DE发生器,支持SYNC格式…...
测试工程师的DS使用指南
目录 引言DeepSeek在测试设计中的应用 2.1 智能用例生成2.2 边界值分析2.3 异常场景设计DeepSeek在自动化测试中的应用 3.1 脚本智能转换3.2 日志智能分析3.3 测试数据生成DeepSeek在质量保障体系中的应用 4.1 测试策略优化4.2 缺陷模式预测4.3 技术方案验证DeepSeek在测试效能…...
Qt常用控件 输入类控件
文章目录 1.QLineEdit1.1 常用属性1.2 常用信号1.3 例子1,录入用户信息1.4 例子2,正则验证手机号1.5 例子3,验证输入的密码1.6 例子4,显示密码 2. QTextEdit2.1 常用属性2.2 常用信号2.3 例子1,获取输入框的内容2.4 例…...
linux运行级别
运行级别:指linux系统在启动和运行过程中所处的不同的状态。 运行级别之间的切换:init (级别数) 示例: linux的运行级别一共有7种,分别是: 运行级别0:停机状态 运行级别1:单用户模式/救援模式…...
数据结构课程设计(四)校园导航
4 校园导航 4.1 需求规格说明 【问题描述】 一个学校平面图,至少包括10个以上的场所,每个场所带有编号、坐标、名称、类别等信息,两个场所间可以有路径相通,路长(耗时)各有不同。要求读取该校园平面图&a…...
50【Windows与Linux】
大家可能有些人听过Linux系统,很多初学者被灌输的理念就是服务器必须要装Linux系统 什么是系统? 比如你的电脑是Windows系统的,你手机是Android系统的,物理设备都需要系统,系统你可以理解成直接控制物理设备的一个东…...
蓝桥杯python基础算法(2-2)——基础算法(D)——进制转换*
目录 五、进制转换 十进制转任意进制,任意进制转十进制 例题 P1230 进制转换 作业 P2095 进制转化 作业 P2489 进制 五、进制转换 十进制转任意进制,任意进制转十进制 int_to_char "0123456789ABCDEF" def Ten_to_K(k, x):answer "…...
CSS 溢出内容处理:从基础到实战
CSS 溢出内容处理:从基础到实战 1. 什么是溢出?示例代码:默认溢出行为 2. 使用 overflow 属性控制溢出2.1 使用 overflow: hidden 裁剪内容示例代码:裁剪溢出内容 2.2 使用 overflow: scroll 显示滚动条示例代码:显示滚…...
嵌入式知识点总结 操作系统 专题提升(四)-上下文
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.上下文有哪些?怎么理解? 2.为什么会有上下文这种概念? 3.什么情况下进行用户态到内核态的切换? 4.中断上下文代码中有哪些注意事项? 5.请问线程需要保存哪些…...
