248 lines
5.5 KiB
Markdown
248 lines
5.5 KiB
Markdown
# 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 许可证。
|