# Iverilog 工具集成说明

本插件**已集成** Icarus Verilog (iverilog) 工具，用于 Verilog 代码的编译和仿真，以及 VCD 波形文件的生成。

## 目录结构

```
tools/
└── iverilog/
    ├── bin/           # 可执行文件目录（已包含 iverilog 工具）
    │   ├── iverilog.exe  # Verilog 编译器 (Windows)
    │   ├── vvp.exe       # Verilog 仿真器 (Windows)
    │   └── ...           # 其他依赖文件
    └── README.md      # 本说明文件
```

## 工具说明

插件包中**已包含** Windows x64 版本的 iverilog 工具，无需额外安装。

- **版本**: Icarus Verilog 11.0 (或更高)
- **平台**: Windows x64
- **许可证**: GPL v2+

### Windows 安装

1. 访问 Icarus Verilog 官方网站：http://bleyer.org/icarus/
2. 下载最新的 Windows 安装包（例如：iverilog-v11-20210204-x64_setup.exe）
3. 运行安装程序，按照提示完成安装
4. 安装完成后，将以下文件复制到插件的 `tools/iverilog/bin/` 目录：
   - `iverilog.exe`
   - `vvp.exe`
   - 以及相关的 DLL 文件（如果有）

**或者**，将 iverilog 安装目录添加到系统 PATH 环境变量中，插件会自动使用系统安装的版本。

### macOS 安装

使用 Homebrew 安装：

```bash
brew install icarus-verilog
```

安装完成后，iverilog 会自动添加到系统 PATH 中，插件可以直接使用。

**可选**：如果想将 iverilog 打包到插件中，可以将以下文件复制到 `tools/iverilog/bin/`：
- `/usr/local/bin/iverilog`
- `/usr/local/bin/vvp`

### Linux 安装

#### Ubuntu/Debian

```bash
sudo apt-get update
sudo apt-get install iverilog
```

#### Fedora/CentOS

```bash
sudo yum install iverilog
```

#### Arch Linux

```bash
sudo pacman -S iverilog
```

安装完成后，iverilog 会自动添加到系统 PATH 中，插件可以直接使用。

## 使用方法

### 1. 准备 Verilog 项目

确保您的项目包含以下文件：

- **顶层模块文件**：包含您的设计代码（例如：`counter.v`）
- **Testbench 文件**：包含测试代码，文件名通常包含 `tb` 或 `test`（例如：`counter_tb.v`）

### 2. Testbench 要求

为了生成 VCD 波形文件，您的 testbench 必须包含以下语句：

```verilog
module counter_tb;
  // ... 信号声明 ...

  initial begin
    // 生成 VCD 文件
    $dumpfile("output.vcd");  // 指定 VCD 文件名
    $dumpvars(0, counter_tb); // 记录所有信号

    // ... 测试代码 ...

    #1000 $finish;  // 结束仿真
  end

  // ... 其他测试代码 ...
endmodule
```

### 3. 生成 VCD 文件

在 IC Coder 插件的聊天界面中，输入以下任一命令：

- `生成 VCD`
- `创建 VCD`
- `运行仿真`
- `执行仿真`
- `生成波形`

插件会自动：
1. 检查项目文件完整性
2. 使用 iverilog 编译所有 Verilog 文件
3. 使用 vvp 运行仿真
4. 在项目根目录生成 `output.vcd` 文件

### 4. 查看波形

生成的 VCD 文件可以使用以下工具查看：

- **GTKWave**（推荐）：开源波形查看器
  - Windows: http://gtkwave.sourceforge.net/
  - macOS: `brew install gtkwave`
  - Linux: `sudo apt-get install gtkwave`

- **其他工具**：
  - ModelSim
  - Vivado
  - 在线 VCD 查看器

## 示例项目

### counter.v（顶层模块）

```verilog
module counter (
  input clk,
  input rst_n,
  output reg [3:0] count
);
  always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
      count <= 4'b0000;
    else
      count <= count + 1;
  end
endmodule
```

### counter_tb.v（Testbench）

```verilog
`timescale 1ns/1ps

module counter_tb;
  reg clk;
  reg rst_n;
  wire [3:0] count;

  // 实例化被测模块
  counter uut (
    .clk(clk),
    .rst_n(rst_n),
    .count(count)
  );

  // 生成时钟信号
  initial begin
    clk = 0;
    forever #5 clk = ~clk;  // 10ns 周期
  end

  // 测试序列
  initial begin
    // 生成 VCD 文件
    $dumpfile("output.vcd");
    $dumpvars(0, counter_tb);

    // 初始化
    rst_n = 0;
    #20;

    // 释放复位
    rst_n = 1;
    #200;

    // 结束仿真
    $finish;
  end

  // 监控输出
  initial begin
    $monitor("Time=%0t rst_n=%b count=%d", $time, rst_n, count);
  end
endmodule
```

## 故障排除

### 问题：提示 "iverilog 不可用"

**解决方案**：
1. 确认已安装 iverilog
2. 检查 iverilog 是否在系统 PATH 中：
   - Windows: 在命令提示符中运行 `iverilog -V`
   - macOS/Linux: 在终端中运行 `iverilog -V`
3. 或者将 iverilog 可执行文件复制到 `tools/iverilog/bin/` 目录

### 问题：提示 "项目文件不完整"

**解决方案**：
1. 确保项目中至少有一个 `.v` 或 `.sv` 文件
2. 确保有 testbench 文件（文件名包含 `tb` 或 `test`）
3. 确保 testbench 中包含 `$dumpfile` 和 `$dumpvars` 语句

### 问题：编译失败

**解决方案**：
1. 检查 Verilog 代码语法错误
2. 查看错误输出信息
3. 确保所有模块都正确实例化

### 问题：VCD 文件未生成

**解决方案**：
1. 确保 testbench 中包含 `$dumpfile("output.vcd")` 语句
2. 确保 testbench 中包含 `$dumpvars` 语句
3. 确保仿真运行了足够的时间（使用 `#时间 $finish;`）

## 版本信息

- 推荐 Icarus Verilog 版本：v11.0 或更高
- 支持的 Verilog 标准：Verilog-1995, Verilog-2001, Verilog-2005, SystemVerilog (部分)

## 相关链接

- Icarus Verilog 官网：http://iverilog.icarus.com/
- GTKWave 官网：http://gtkwave.sourceforge.net/
- Verilog 教程：https://www.asic-world.com/verilog/

## 许可证

Icarus Verilog 是开源软件，遵循 GPL 许可证。
