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 插件(推荐)
- 在 VS Code 中打开这个
examples目录作为工作区 - 打开 IC Coder 插件面板
- 在聊天框中输入以下任一命令:
生成 VCD运行仿真生成波形
- 插件会自动编译并运行仿真,生成
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 中:
- 在左侧 SST 窗口选择
counter_tb - 将信号
clk、rst_n、count[3:0]拖到波形窗口 - 点击 "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;)
问题:路径错误
解决:
- 确保在正确的工作区目录中运行
- 检查路径中是否有特殊字符
扩展练习
你可以修改这个示例来学习:
- 修改计数器位宽:将 4 位改为 8 位
- 添加使能信号:只在使能时计数
- 添加加载功能:可以加载初始值
- 创建递减计数器:向下计数
- 添加溢出标志:计数到最大值时输出标志
参考资料
- Verilog 语法:https://www.asic-world.com/verilog/
- Icarus Verilog 文档:http://iverilog.icarus.com/
- GTKWave 使用:http://gtkwave.sourceforge.net/