Files
IC-Coder-Plugin/tools/iverilog/examples
Roe-xin 22b9a0ed13 feat:接入iverilog工具
- 将iverilog可以随着插件的下载而下载
- 用户输入自然语言就可以控制生成对应的VCD文件
2025-12-15 11:09:03 +08:00
..
2025-12-15 11:09:03 +08:00
2025-12-15 11:09:03 +08:00
2025-12-15 11:09:03 +08:00

Iverilog 测试示例

这个目录包含一个简单的 Verilog 项目示例,用于测试 IC Coder 插件的 VCD 生成功能。

文件说明

  • counter.v - 一个简单的 4 位计数器模块
  • counter_tb.v - 计数器的测试平台testbench

功能说明

counter.v顶层模块

这是一个同步复位的 4 位计数器:

  • 输入
    • clk - 时钟信号
    • rst_n - 低电平有效的复位信号
  • 输出
    • count[3:0] - 4 位计数值0-15

counter_tb.v测试平台

测试平台包含:

  • 时钟生成器100MHz周期 10ns
  • 复位序列(初始复位 20ns
  • VCD 波形文件生成
  • 信号监控和显示

使用方法

方法 1使用 IC Coder 插件(推荐)

  1. 在 VS Code 中打开这个 examples 目录作为工作区
  2. 打开 IC Coder 插件面板
  3. 在聊天框中输入以下任一命令:
    • 生成 VCD
    • 运行仿真
    • 生成波形
  4. 插件会自动编译并运行仿真,生成 output.vcd 文件

方法 2手动运行用于测试

在命令行中执行:

# 进入示例目录
cd "D:\IC Coder Plugin\ic-coder\tools\iverilog\examples"

# 编译 Verilog 文件
"D:\IC Coder Plugin\ic-coder\tools\iverilog\bin\iverilog.exe" -o simulation.vvp counter.v counter_tb.v

# 运行仿真
"D:\IC Coder Plugin\ic-coder\tools\iverilog\bin\vvp.exe" simulation.vvp

# 查看生成的 VCD 文件
ls -lh output.vcd

预期输出

控制台输出

Time=0 ns, rst_n=0, count=0 (0x0)
Time=20 ns, rst_n=1, count=0 (0x0)
Time=25 ns, rst_n=1, count=1 (0x1)
Time=35 ns, rst_n=1, count=2 (0x2)
Time=45 ns, rst_n=1, count=3 (0x3)
...
Time=215 ns, rst_n=1, count=15 (0xf)
Final count value: 15

生成的文件

  • simulation.vvp - 编译后的中间文件(可以删除)
  • output.vcd - VCD 波形文件(约 2-5 KB

查看波形

使用 GTKWave 查看生成的 VCD 文件:

gtkwave output.vcd

在 GTKWave 中:

  1. 在左侧 SST 窗口选择 counter_tb
  2. 将信号 clkrst_ncount[3:0] 拖到波形窗口
  3. 点击 "Zoom Fit" 查看完整波形

波形说明

你应该能看到:

  • clk - 规则的时钟信号10ns 周期)
  • rst_n - 初始 20ns 为低电平,然后保持高电平
  • count - 从 0 开始递增到 15 的计数值

故障排除

问题:编译失败

检查

  • 确认 iverilog.exe 在 tools/iverilog/bin/ 目录中
  • 确认所有 DLL 文件都已复制

问题VCD 文件未生成

检查

  • testbench 中是否包含 $dumpfile("output.vcd");
  • testbench 中是否包含 $dumpvars(0, counter_tb);
  • 仿真是否正常结束(有 $finish;

问题:路径错误

解决

  • 确保在正确的工作区目录中运行
  • 检查路径中是否有特殊字符

扩展练习

你可以修改这个示例来学习:

  1. 修改计数器位宽:将 4 位改为 8 位
  2. 添加使能信号:只在使能时计数
  3. 添加加载功能:可以加载初始值
  4. 创建递减计数器:向下计数
  5. 添加溢出标志:计数到最大值时输出标志

参考资料