# 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/
