当前位置: 首页 > news >正文

使用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单步调试&#xff1a; System Verilog进行单步调试的步骤如下&#xff1a; 1. 编译设计 使用-debug_all或-debug_pp选项编译设计&#xff0c;生成调试信息。 我的4个文件&#xff1a; 1.led.v module led(input clk,input rst_n,output reg led );reg [7:0] cnt;alwa…...

Go语言中结构体字面量

结构体字面量&#xff08;Struct Literal&#xff09;是在 Go 语言中用于创建和初始化结构体实例的一种语法。它允许你在声明结构体变量的同时&#xff0c;直接为其字段赋值。结构体字面量提供了一种简洁、直观的方式来创建结构体对象。 结构体字面量有两种主要形式&#xff1…...

编程AI深度实战:大模型哪个好? Mistral vs Qwen vs Deepseek vs Llama

​​ 系列文章&#xff1a; 编程AI深度实战&#xff1a;私有模型deep seek r1&#xff0c;必会ollama-CSDN博客 编程AI深度实战&#xff1a;自己的AI&#xff0c;必会LangChain-CSDN博客 编程AI深度实战&#xff1a;给vim装上AI-CSDN博客 编程AI深度实战&#xff1a;火的编…...

19C RAC在vmware虚拟机环境下的安装

RAC安装规划 ===IP== ORA19C01 public ip : 192.168.229.191 heatbeat : 192.168.0.1 vip : 192.168.229.193 ORA19C02 public ip :192.168.229.192 heatbeat : 192.168.0.2 vip : 192.168.229.194 scan ip 192.168.229.195 hosts: echo "192.168.229…...

MongoDB 查询文档

MongoDB 查询文档 引言 MongoDB 是一个功能强大的文档型数据库,它使用 JSON 格式存储数据,并提供了灵活的查询机制。本文将深入探讨 MongoDB 的查询文档,包括查询基础、查询语法、查询优化以及一些高级查询技巧。 查询基础 MongoDB 的查询语句以 find() 方法开始,它允许…...

了解 ALV 中的 field catalog (ABAP List Viewer)

在 ABAP 中&#xff0c;字段目录是使用 ALV &#xff08;ABAP List Viewer&#xff09; 定义内部表中的数据显示方式的关键元素。它提供对 ALV 中显示的字段的各种属性的控制&#xff0c;例如列标题、对齐方式、可见性、可编辑性等。关键概念&#xff1a; Field Catelog 字段目…...

【C++STL标准模板库】二、STL三大组件

文章目录 1、容器2、算法3、迭代器 二、STL三大组件 1、容器 容器&#xff0c;置物之所也。 研究数据的特定排列方式&#xff0c;以利于搜索或排序或其他特殊目的&#xff0c;这一门学科我们称为数据结构。大学信息类相关专业里面&#xff0c;与编程最有直接关系的学科&…...

【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙

【简介】除了单位用户以外&#xff0c;大部分个人用户目前使用的仍然是30E、50E、60E系列防火墙&#xff0c;固件无法达到目前最高版本7.6&#xff0c;这里以最常用的60E为例&#xff0c;演示固件版本7.2下实现ADSL拨号宽带的IPv6上网。由于内容比较多&#xff0c;文章分上、下…...

基础IOIO

1.理解文件 1.侠义理解 文件是在从盘上的。磁盘是永久性存储介质。磁盘是外设。磁盘上对文件的所有操作&#xff0c;都是对外设的输入输出IO。 2.广义理解 linux下一切皆文件&#xff08;键盘&#xff0c;显示器&#xff0c;网卡&#xff0c;磁盘&#xff09; 3.文件操作的…...

starrocks最佳实践、行业实践

最佳实践 starrocks最佳实践 最佳实践集合 Bitmap索引适用场景和最佳实践 行业实践 行业实践...

详解CSS `clear` 属性及其各个选项

详解CSS clear 属性及其各个选项 1. clear: left;示例代码 2. clear: right;示例代码 3. clear: both;示例代码 4. clear: none;示例代码 总结 在CSS布局中&#xff0c;clear 属性是一个非常重要的工具&#xff0c;特别是在处理浮动元素时。本文将详细解释 clear 属性及其各个选…...

MVC、MVP和MVVM模式

MVC模式中&#xff0c;视图和模型之间直接交互&#xff0c;而MVP模式下&#xff0c;视图与模型通过Presenter进行通信&#xff0c;MVVM则采用双向绑定&#xff0c;减少手动同步视图和模型的工作。每种模式都有其优缺点&#xff0c;适合不同规模和类型的项目。 ### MVVM 与 MVP…...

【大数据技术】教程03:本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …...

wsl+phpstorm+xdebug|windows子系统配置phpstorm开发调试|断点调试

安装wsl 安装apache php 安装xdebug扩展&#xff0c;并配置 这里是通过宝塔9.4面板安装的xdebug3.0 [xdebug] xdebug.modedebug xdebug.start_with_requesttrue xdebug.discover_client_hosttrue xdebug.client_host127.0.0.1配置PHPSTORM 注意&#xff1a;新建服务器一定要…...

如可安装部署haproxy+keeyalived高可用集群

第一步&#xff0c;环境准备 服务 IP 描述 Keepalived vip Haproxy 负载均衡 主服务器 Rip&#xff1a;192..168.244.101 Vip&#xff1a;192.168.244.100 Keepalive主节点 Keepalive作为高可用 Haproxy作为4 或7层负载均衡 Keepalived vip Haproxy 负载均衡 备用服务…...

Linux——文件与磁盘

1. 磁盘结构 磁盘在我们的计算机中有着重要的地位&#xff0c;当文件没有被打开时其数据就存储在磁盘上&#xff0c;要了解磁盘的工作原理先要了解磁盘的结构。 1.1 磁盘的物理结构 以传统的存储设备机械硬盘为例&#xff0c;它通过磁性盘片和磁头来读写数据。磁盘内部有多个旋…...

Maven jar 包下载失败问题处理

Maven jar 包下载失败问题处理 1.配置好国内的Maven源2.重新下载3. 其他问题 1.配置好国内的Maven源 打开⾃⼰的 Idea 检测 Maven 的配置是否正确&#xff0c;正确的配置如下图所示&#xff1a; 检查项⼀共有两个&#xff1a; 确认右边的两个勾已经选中&#xff0c;如果没有请…...

Qt中的UIC、MOC、RCC宏定义说明

在Qt6新建工程的时候&#xff0c;CMakeLists.txt中会默认带有UIC&#xff0c;MOC&#xff0c;RCC的3个宏定义。 set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) uic(User Interface Compiler)&#xff0c;用户界面编译器&#xff0c;将根据.ui文件生成相…...

SQLite Update 语句详解

SQLite Update 语句详解 SQLite 是一款轻量级的数据库管理系统&#xff0c;以其简单、易用和高效的特点在全球范围内得到了广泛的应用。在 SQLite 中&#xff0c;UPDATE 语句是用于修改数据库表中记录的常用命令。本文将详细解析 SQLite 的 UPDATE 语句&#xff0c;包括其语法…...

理解PLT表和GOT表

1 简介 现代操作系统都是通过库来进行代码复用&#xff0c;降低开发成本提升系统整体效率。而库主要分为两种&#xff0c;一种是静态库&#xff0c;比如windows的.lib文件&#xff0c;macos的.a&#xff0c;linux的.a&#xff0c;另一种是动态库&#xff0c;比如windows的dll文…...

InfluxDB 2.0 到 3.0 技术架构演进与性能分析

架构演进 关键技术变化&#xff1a;InfluxDB 3.0 相比 2.0 在架构上进行了重大的技术升级。首先&#xff0c;核心代码由 Go 语言重写为 Rust&#xff0c;以利用 Rust 更高的性能和内存安全特性&#xff0c;从而显著提升数据库的性能、可靠性和安全性。其次&#xff0c;引入列式…...

介绍一下Mybatis的底层原理(包括一二级缓存)

表面上我们的就是Sql语句和我们的java对象进行映射&#xff0c;然后Mapper代理然后调用方法来操作数据库 底层的话我们就涉及到Sqlsession和Configuration 首先说一下SqlSession&#xff0c; 它可以被视为与数据库交互的一个会话&#xff0c;用于执行 SQL 语句&#xff08;Ex…...

docker gitlab arm64 版本安装部署

前言&#xff1a; 使用RK3588 部署gitlab 平台作为个人或小型团队办公代码版本使用 1. docker 安装 sudo apt install docker* 2. 获取arm版本的gitlab GitHub - zengxs/gitlab-arm64: GitLab docker image (CE & EE) for arm64 git clone https://github.com/zengxs…...

7、怎么定义一个简单的自动化测试框架?

定义一个简单的自动化测试框架可以从需求理解、框架设计、核心模块实现、测试用例编写和集成执行等方面入手&#xff0c;以下为你详细介绍&#xff1a; 1. 明确框架需求和范围 确定测试类型&#xff1a;明确框架要支持的测试类型&#xff0c;如单元测试、接口测试、UI 测试等…...

linux组管理

创建组&#xff1a;groupadd &#xff08;创建组命令的详细使用&#xff1a;如何创建组-CSDN博客&#xff09; 修改组&#xff1a;groupmod &#xff08;修改组命令的详细使用&#xff1a;如何修改组-CSDN博客&#xff09; 组配置文件: /etc/group...

【MySQL】常用语句

目录 1. 数据库操作2. 表操作3. 数据操作&#xff08;CRUD&#xff09;4. 高级查询5. 索引管理6. 用户与权限7. 数据导入导出8. 事务控制9. 其他实用语句注意事项 如果这篇文章对你有所帮助&#xff0c;渴望获得你的一个点赞&#xff01; 1. 数据库操作 创建数据库 CREATE DATA…...

二维数组 C++ 蓝桥杯

1.稀疏矩阵 #include<iostream> using namespace std;const int N 1e4 10; int a[N][N];int main() {int n, m; cin >> n >> m;for (int i 1; i < n; i) {for (int j 1; j < m; j) {cin >> a[i][j];}}for (int j m; j > 1; j--) {for (i…...

SAP HCM 回溯分析

最近总有人问回溯问题&#xff0c;今天把12年总结的笔记在这共享下&#xff1a; 12年开这个图的时候总是不明白是什么原理&#xff0c;教程看N次&#xff0c;网上资料找一大堆&#xff0c;就是不明白原理&#xff0c;后来为搞明白逻辑&#xff0c;按照教材的数据一样做&#xf…...

MySQl的日期时间加

MySQL日期相关_mysql 日期加减-CSDN博客MySQL日期相关_mysql 日期加减-CSDN博客 raise notice 查询目标 site:% model:% date:% target:%,t_shipment_date.site,t_shipment_date.model,t_shipment_date.plant_date,v_date_shipment_qty_target;...

前部分知识复习03

一、光照模型 经验型&#xff1a; 1.Lambert光照模型 2.Phong光照模型 3.Blinn-Phong光照模型 物理型&#xff1a; 4.PBR光照模型 二、渲染路径 渲染路径&#xff1a;是为进行光照计算而设置的渲染方式 前向渲染路径顶点照明渲染路径延迟渲染路径 顶点照明渲染路径中的灯光…...

Windows图形界面(GUI)-QT-C/C++ - QT MDI Area

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 多文档编辑器 2. 多窗口应用程序 3. 多视图应用程序 三、常见样式 1. 子窗口管理 2. 布局管理 四、属性设置 1. 添加子窗口 2. 移除子窗口 3. 设置…...

基于微信小程序的私家车位共享系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

用deepseek制作我的第一个长视频---使用AI解决尝试新领域没有经验拖延的问题!

&#xff08;由于技术原因&#xff0c;联网搜索暂不可用&#xff09; 制作一个高质量的Vlog或生活记录长视频&#xff0c;即使零基础也能通过系统规划实现&#xff01;以下是为你定制的「从零到成品」全流程指南&#xff0c;结合叙事逻辑、剪辑技巧和效率工具&#xff0c;帮你…...

零基础学习电磁兼容(EMC)06--时域和频域

大部分工程师很熟悉示波器,并使用它读取信号的频率和电压值,然而,在EMC领域,绝大多数的数据都是从频谱分析仪、测量接收机等基于频率测量的设备中读取的,因此,了解这些频率参数的含义以及与时域信号的关系,是非常重要的。 时域和频域的本质:傅里叶变换及其逆过程 如下…...

解决在使用自己的数据集在 Ultralytics 上运行 RT - DETR 模型时显存爆满的问题

在使用自己的数据集在 Ultralytics 上运行 RT - DETR 模型时&#xff0c;显存爆满是一个常见问题。以下是一系列可以采取的步骤和方法&#xff0c;帮助你解决这个问题&#xff0c;同时使用 Ultralytics 的官方源码。 1. 环境准备 确保你已经安装了 Ultralytics 库&#xff0c…...

Android学习19 -- 手搓App

1 前言 之前工作中&#xff0c;很多时候要搞一个简单的app去验证底层功能&#xff0c;Android studio又过于重型&#xff0c;之前用gradle&#xff0c;被版本匹配和下载外网包折腾的堪称噩梦。所以搞app都只有找应用的同事帮忙。一直想知道一些简单的app怎么能手搓一下&#x…...

鼠标拖尾特效

文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果&#xff0c;能够为网页增添独特的视觉体验。它通常通过JavaScript和C…...

【CSS】什么是响应式设计?响应式设计的基本原理,怎么做

在当今多设备、多屏幕尺寸的时代&#xff0c;网页设计面临着前所未有的挑战。传统的固定布局已无法满足用户在不同设备上浏览网页的需求&#xff0c;响应式设计&#xff08;Responsive Web Design&#xff09;应运而生&#xff0c;成为网页设计的趋势和标准。本文将深入探讨响应…...

单机性能调优中的程序优化

目录 一、系统框架的选择 二、程序优化 表单压缩 局部刷新 仅取所需 逻辑清晰 谨慎继承 程序算法优化 批处理 延迟加载 防止内存泄漏 减少大对象引用 防止争用死锁 存储过程 内存分配 并行 异步 缓存 单机优化顾名思义就是我们要在单机上对系统的性能进行调优…...

2.4学习总结

洛谷1305代码 #include<stdio.h> #include<stdlib.h> struct treenode {char val;struct treenode* left;struct treenode* right; }; struct treenode* createnode(char val) {struct treenode* node (struct treenode*)malloc(sizeof(struct treenode));node-&…...

小程序-视图与逻辑

前言 1. 声明式导航 open-type"switchTab"如果没有写这个&#xff0c;因为是tabBar所以写这个&#xff0c;就无法跳转。路径开始也必须为斜线 open-type"navigate"这个可以不写 现在开始实现后退的效果 现在我们就在list页面里面实现后退 2.编程式导航…...

突破封闭集限制:OvSGTR引领开放词汇场景图生成新纪元

场景图生成&#xff08;Scene Graph Generation, SGG&#xff09;&#xff0c;这个领域&#xff0c;旨在通过解析图像来构建描述性的结构化图表&#xff0c;不仅能够识别图片中的物体&#xff0c;还能捕捉它们之间的相互关系。 这种能力对于诸如图像字幕、视觉问答以及图像生成…...

C语言基础之【程序流程结构】

C语言基础之【程序流程结构】 概述选择结构if语句if…else语句小练习&#xff1a;“三只小猪体重比较” if…else if…else语句小练习&#xff1a;“三只小猪体重比较” 三目运算符小练习&#xff1a;“三只小猪体重比较” switch语句小练习&#xff1a;**“成绩等级判断器”**…...

代码随想录35 动态规划

目录 leetcode 746.使用最小花费爬楼梯 leetcode 62.不同路径 思路&#xff1a; leetcode 63.不同路径|| leetcode 746.使用最小花费爬楼梯 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选…...

【游戏设计原理】98 - 时间膨胀

从上文中&#xff0c;我们可以得到以下几个启示&#xff1a; 游戏设计的核心目标是让玩家感到“时间飞逝” 游戏的成功与否&#xff0c;往往取决于玩家的沉浸感。如果玩家能够完全投入游戏并感受到时间飞逝&#xff0c;说明游戏设计在玩法、挑战、叙事等方面达到了吸引人的平衡…...

51单片机 06 定时器

51 单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成。 作用&#xff1a;1、用于计时&#xff1b;2、替代长时间的Delay&#xff0c;提高CPU 运行效率和处理速度。 定时器个数&#xff1a;3个&#xff08;T0、T1、T2&#xff09;&#xf…...

4 前端前置技术(中):node.js环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言...

【Leetcode刷题记录】1456. 定长子串中元音的最大数目---定长滑动窗口即解题思路总结

1456. 定长子串中元音的最大数目 给你字符串 s 和整数 k 。请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。 英文中的 元音字母 为&#xff08;a, e, i, o, u&#xff09;。 这道题的暴力求解的思路是通过遍历字符串 s 的每一个长度为 k 的子串&#xf…...

C++效率掌握之STL库:string函数全解

文章目录 1.为什么要学习string&#xff1f;什么是string&#xff1f;2.string类对象的常见构造3.string类对象的容量操作4.string类对象的迭代器5.string类对象的元素访问6.string类对象的元素修改7.string类对象的查找、提取、对比8.string类的非成员函数及npos希望读者们多多…...

Linux命令运行原理及权限管理

目录 1.引言 2.shell命令以及运行原理 3.Linux权限 3.1Linux下的用户类型 3.2Linux权限管理 3.2.1文件访问者的分类&#xff08;人&#xff09; 3.2.2文件类型和访问权限&#xff08;事物属性&#xff09; 3.2.3文件权限值的表示方法 3.2.4文件访问权限的相关设置方法…...