开发环境
本章介绍 Verilog 开发环境的搭建,包括仿真工具、编辑器和综合工具。
仿真工具
Icarus Verilog
Icarus Verilog 是一款开源的 Verilog 仿真器。
安装
Windows:
# 下载安装包
# https://bleyer.org/icarus/
# 或使用 scoop
scoop install iverilog
Linux:
# Ubuntu/Debian
sudo apt-get install iverilog
# CentOS/RHEL
sudo yum install iverilog
macOS:
brew install icarus-verilog
编译和仿真
# 编译
iverilog -o sim.vvp counter.v tb_counter.v
# 运行仿真
vvp sim.vvp
# 查看波形
gtkwave waveform.vcd
常用选项
# 指定输出文件
iverilog -o output.vvp source.v
# 包含目录
iverilog -I./include source.v
# 定义宏
iverilog -DDEBUG source.v
# 显示警告
iverilog -Wall source.v
Verilator
Verilator 是一款高性能的 Verilog 仿真器,将 Verilog 编译为 C++ 代码。
安装
# Ubuntu/Debian
sudo apt-get install verilator
# macOS
brew install verilator
使用
# 编译
verilator --cc counter.v --exe tb_counter.cpp
# 构建
make -C obj_dir -f Vcounter.mk Vcounter
# 运行
./obj_dir/Vcounter
ModelSim
ModelSim 是 Mentor Graphics 公司的商业仿真器。
基本使用
# 启动
vsim
# 创建工作库
vlib work
# 编译
vlog counter.v tb_counter.v
# 仿真
vsim tb_counter
# 查看波形
add wave -r /*
run -all
脚本化仿真
# run_sim.tcl
vlib work
vlog *.v
vsim tb_counter
add wave -r /*
run -all
vsim -do run_sim.tcl
Vivado Simulator
Xilinx Vivado 自带的仿真器。
使用流程
- 创建项目
- 添加源文件
- 运行仿真
- 查看波形
TCL 命令
# 添加源文件
add_files counter.v
add_files -fileset sim_1 tb_counter.v
# 运行仿真
launch_simulation
# 添加波形
add_wave -r /
# 运行
run 1000ns
波形查看器
GTKWave
GTKWave 是开源的波形查看器。
基本操作
# 打开波形文件
gtkwave waveform.vcd
# 命令行选项
gtkwave -a config.gtkw waveform.vcd
快捷键
| 快捷键 | 功能 |
|---|---|
| Ctrl+S | 保存配置 |
| Ctrl+O | 打开文件 |
| Space | 放大 |
| Backspace | 缩小 |
| Home | 跳到开始 |
| End | 跳到结束 |
波形配置保存
# 保存配置文件
# .gtkw 文件包含信号列表和显示设置
编辑器和 IDE
VS Code
推荐扩展
- Verilog-HDL/SystemVerilog/Bluespec SystemVerilog
- TerosHDL
- Digital IDE
- WaveTrace
配置示例
// settings.json
{
"verilog.linting.linter": "iverilog",
"verilog.iverilog.arguments": "-Wall",
"verilog.ctags.path": "ctags"
}
Vim
插件
- verilog_systemverilog.vim
- vim-hdl
配置
" 语法高亮
syntax on
filetype plugin indent on
" 自动补全
set omnifunc=syntaxcomplete#Complete
Emacs
插件
- verilog-mode.el
配置
(require 'verilog-mode)
(setq verilog-auto-newline nil)
综合工具
Yosys
Yosys 是开源的 Verilog 综合工具。
安装
# Ubuntu/Debian
sudo apt-get install yosys
# macOS
brew install yosys
使用
# 交互模式
yosys
# 脚本模式
yosys synth.ys
综合脚本示例
# synth.ys
read_verilog counter.v
hierarchy -check
proc
opt
fsm
opt
memory
opt
techmap
opt
clean
write_verilog synth.v
Vivado
Xilinx 的综合和实现工具。
综合流程
# 创建项目
create_project my_project ./my_project
# 添加源文件
add_files counter.v
# 设置顶层模块
set_property top counter [current_fileset]
# 综合
synth_design -top counter
# 保存综合结果
write_verilog -force synth.v
Quartus
Intel 的综合和实现工具。
流程
- 创建项目
- 添加源文件
- 设置目标器件
- 运行综合
- 查看报告
项目管理
Makefile
# Makefile for Verilog simulation
# 变量定义
VLOG = iverilog
VPATH = vvp
VCD = waveform.vcd
GTKW = waveform.gtkw
# 源文件
SRC = counter.v
TB = tb_counter.v
# 目标
SIM = sim.vvp
# 默认目标
all: $(SIM)
# 编译
$(SIM): $(SRC) $(TB)
$(VLOG) -o $@ $^
# 运行仿真
run: $(SIM)
$(VPATH) $<
# 查看波形
wave: $(VCD)
gtkwave $< &
# 清理
clean:
rm -f $(SIM) $(VCD)
.PHONY: all run wave clean
项目结构
project/
├── rtl/ # RTL 源文件
│ ├── counter.v
│ └── top.v
├── tb/ # 测试平台
│ └── tb_counter.v
├── sim/ # 仿真脚本
│ └── run_sim.tcl
├── synth/ # 综合脚本
│ └── synth.ys
├── constraints/ # 约束文件
│ └── top.xdc
├── docs/ # 文档
└── Makefile
调试技巧
波形调试
-
添加关键信号
- 时钟和复位
- 状态机状态
- 控制信号
- 数据通路
-
使用断言
always @(posedge clk) begin
if (state == IDLE) begin
assert(data_valid == 0) else $error("Invalid data in IDLE");
end
end -
打印调试信息
always @(posedge clk) begin
$display("[%0t] State: %d, Data: %h", $time, state, data);
end
常见问题
编译错误
Error: Unable to bind wire/reg/memory `signal_name'
解决:检查信号是否声明
仿真警告
Warning: Timescale not specified
解决:添加 `timescale 指令
综合问题
Warning: Signal `signal_name` is not driven
解决:检查信号是否被正确赋值
小结
本章介绍了 Verilog 开发环境:
- 仿真工具:Icarus Verilog、Verilator、ModelSim、Vivado
- 波形查看器:GTKWave
- 编辑器:VS Code、Vim、Emacs
- 综合工具:Yosys、Vivado、Quartus
- 项目管理:Makefile、项目结构
- 调试技巧:波形调试、断言、常见问题
搭建完善的开发环境是高效开发的基础。