当前位置: 首页 > 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进行单步调试。

http://www.lryc.cn/news/531311.html

相关文章:

  • ROS-激光雷达-消息包格式-获取激光雷达数据-激光雷达避障
  • c++之模板进阶
  • 关于Internet Download Manager(IDM)强制下载合并相关二次开发
  • 鸿蒙HarmonyOS Next 视频边播放边缓存- OhosVideoCache
  • (10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例
  • 程序代码篇---项目目录结构HSV掩膜Opencv图像处理
  • 注解与反射基础
  • Vue指令v-html
  • 院校联合以项目驱动联合培养医工计算机AI人才路径探析
  • CDDIS从2025年2月开始数据迁移
  • 前端 | JavaScript中的reduce方法
  • 【C++】B2124 判断字符串是否为回文
  • 人工智能学习(五)之机器学习逻辑回归算法
  • Bash 基础与进阶实践指南
  • 基于开源AI智能名片2 + 1链动模式S2B2C商城小程序视角下的个人IP人设构建研究
  • 基于springboot+vue的航空散货调度系统
  • 【C++】B2122 单词翻转
  • OSCP 渗透测试:网络抓包工具的使用指南
  • Android 进程间通信
  • Kubernetes学习之通过Service访问Pod
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象
  • Web - CSS3基础语法与盒模型
  • CSS知识总结
  • 基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token
  • 信息学奥赛一本通 2113:【24CSPJ普及组】小木棍(sticks) | 洛谷 P11229 [CSP-J 2024] 小木棍
  • 安装hami的笔记
  • 【区块链】区块链密码学基础
  • 强化学习笔记(5)——PPO
  • 【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)
  • 寒假day10