feat:接入iverilog工具

- 将iverilog可以随着插件的下载而下载
- 用户输入自然语言就可以控制生成对应的VCD文件
This commit is contained in:
Roe-xin
2025-12-15 11:09:03 +08:00
parent 94225a3525
commit 22b9a0ed13
71 changed files with 2020 additions and 87 deletions

View File

@ -0,0 +1,134 @@
# 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手动运行用于测试
在命令行中执行:
```bash
# 进入示例目录
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 文件:
```bash
gtkwave output.vcd
```
在 GTKWave 中:
1. 在左侧 SST 窗口选择 `counter_tb`
2. 将信号 `clk``rst_n``count[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. **添加溢出标志**:计数到最大值时输出标志
## 参考资料
- Verilog 语法https://www.asic-world.com/verilog/
- Icarus Verilog 文档http://iverilog.icarus.com/
- GTKWave 使用http://gtkwave.sourceforge.net/