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

使用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)
begin
	if(!rst_n)
		cnt <= 0;
	else if(cnt >= 10)
		cnt <= 0;
	else 
		cnt <= cnt + 1;
end

always @ (posedge clk)
begin
	if(!rst_n)
		led <= 0;
	else if(cnt == 10)
		led <= !led;
end

endmodule 

2.led_tb.v

`timescale 1ns / 1ps

module 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 begin
    clk = 0;
    forever # (CLK_PERIOD/2) clk = ~clk;
end

initial	begin
	    $fsdbDumpfile("tb.fsdb");//这个是产生名为tb.fsdb的文件
	    $fsdbDumpvars;
end

// Test cases
initial begin
    // Initialize inputs
    rst_n = 0;
    # (CLK_PERIOD*2); // Wait for a few clock cycles

    // Test case 1: Reset active low
    rst_n = 0;
    # (CLK_PERIOD*10);
    $display("Test case 1: After reset, led = %b", led); // Expected: led = 0

    // Test case 2: Reset released, cnt < 10
    rst_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.kler.cn/a/531598.html

相关文章:

  • 求水仙花数,提取算好,打表法。或者暴力解出来。
  • 本地部署DeepSeek-R1模型(新手保姆教程)
  • 蓝桥杯python基础算法(2-1)——排序
  • 蓝桥杯备赛经验帖
  • 2.攻防世界PHP2及知识点
  • JavaFX - 3D 形状
  • 在VS Code中基于TypeScript使用Vue.js搭建Babylon.js的开发环境
  • C# 接口介绍
  • 基于Kamailio、MySQL、Redis、Gin、Vue.js的微服务架构
  • 如何让DeepSeek恢复联网功能?解决(由于技术原因,联网搜索暂不可用)
  • 第 2 天:创建你的第一个 UE5 C++ 项目!
  • 鸿蒙HarmonyOS Next 视频边播放边缓存- OhosVideoCache
  • 从一到无穷大 #43:Presto History Based Optimizer,基于PlanNode粒度统计的查询计划选择策略
  • 北京钟鼓楼:立春“鞭春牛”,钟鼓迎春来
  • 申博经验贴
  • 深入解析 clone():高效的进程与线程创建方法(中英双语)
  • c++:list
  • 在 Ubuntu 上安装 Node.js 23.x
  • 调用百度翻译API翻译日语srt字幕
  • MATLAB实现单层竞争神经网络数据分类
  • 95,【3】 buuctf web [安洵杯 2019]easy_web
  • DeepSeek推动大语言模型发展进入新阶段
  • Turing Complete-1位开关
  • 2022 年 6 月大学英语四级考试真题(第 3 套)——纯享题目版
  • 四川正熠法律咨询有限公司正规吗可信吗?
  • blender 相机参数