Verilog环境搭建-iVerilog+GTKWave
BUAA-CO课程中,课程组为我们提供了已经配置好环境(VCS/ISE)的虚拟机,以及在本地安装ISE的方法。但是,ISE不仅安装步骤繁琐(以及由于Windows8/10/11的某些不兼容问题,不得不通过各种补丁方式解决),其界面也异常古老,即使我们使用VS Code编写代码,其仿真功能也极其不方便———打开速度慢、输出内容阅读较为困难(字真的太小了)、操作不够简便、莫名其妙的bug(
是的就是我,下文所述环境可以正常输出甚至评测机都能过的代码在ISim中仿真失败)等问题,我相信一定对不少同学产生了困扰。当然,不可否认的是,无论是其仿真功能,还是IDE本身,他都是极其专业的——至少在他还受支持的时代内。但是,这样的专业性,一定会为初学者带来门槛,因此,我想在这里介绍一个轻量级的、适于初学者使用的Verilog环境,便于各位创造您自己的CPU!
需要强调的是,这一工具链是全平台通用的,但由于主包并没有Linux环境,没有办法进行测试以保证所写内容的正确性与可行性,故使用Linux的读者请自行研究。不过,既然都会使用Linux了,我相信你是可以的!
注意: 1. 如果本环境结果与课程组提供工具链不符,请以课程组为准。 2. 仍然建议学习ISE/VCS的使用方法,以便通过上机!
Windows环境搭建
环境准备
1. 安装iVerilog+GTKWave
点击下载iVerilog(内含GTKWave)
请确保你的安装路径中不含空格/中文!
2. 安装ctags
ctags是帮助我们实现代码分析与跳转的工具。
点击下载ctags
选择x64下载即可
请确保你的安装路径中不含空格/中文!
3. 配置环境变量
- 找到
verilog\bingtawave\binctags的安装路径(绝对路径),例如我的路径为D:\iverilog\binD:\iverilog\gtkwave\binD:\ctags - 打开设置-系统-系统信息,在设备规格-相关链接中找到高级系统设置,点开后点击环境变量。如果你是普通用户,请在用户变量中找到PATH;如果你是Administrator用户,请在系统变量中找到PATH。
- 找到PATH后,单击并点击编辑。对于用户变量,请逐个点击新建并分别将三个路径粘贴进去;对于系统变量,请在原有内容后面加入上述三个路径(以英文的;分割,注意也要和前面已有的内容以;分割开)。
- 在终端中输入以下命令,若能看到对应信息则配置成功:
iverilog -v # 可以看到版本信息
gtkwave # 可以打开gtkwave
ctags --version # 可以看到版本信息配置vs code
1. 插件安装
- 安装插件
Verilog-HDL/SystemVerilog/Bluespec SystemVerilog - 打开
settings.json,添加如下配置:
"verilog.linting.linter": "iverilog",
"verilog.linting.iverilog.arguments": "-Wall -y ${workspaceFolder}",
"verilog.ctags.path": "\"D:\\\\ctags\\\\ctags.exe\"" // 替换为你的ctags.exe路径,注意每一个\和“前都需要加\进行转义,学过C语言的你肯定不陌生 2. 编写run.bat
在你的Verilog源代码根目录下,创建run.bat文件,内容如下
@echo off
rem --- 配置区 ---
rem 1. 你的所有设计文件 (Verilog 源码,用空格分隔)
set DESIGN_FILES=mips.v
rem 此处需要添加你所有的源文件,以空格分割即可,并注意,确保子模块写在父模块前面
rem 2. 你的测试平台文件 (通常只有一个)
set TESTBENCH=mips_tb.v
rem 此处替换为你自己的testbench名字
rem 3. 编译与输出配置
set OUTPUT_FILE=wave
set VCD_FILE=wave.vcd
set IVERILOG_ARGS=-Wall
rem ---------------------------------------------
rem --- 1. 主程序入口 ---
if /i "%1"=="clean" goto clean
if /i "%1"=="compile" goto compile
if /i "%1"=="run" goto run
if /i "%1"=="view" goto view
rem 默认目标:清理 -> 编译 -> 运行 -> 查看波形
goto clean
:all
call :clean
call :compile
call :run
call :view
goto end
rem ---------------------------------------------
rem --- 2. 目标:清理生成文件 ---
:clean
echo.
echo --- 清理生成文件 ---
if exist %OUTPUT_FILE% del %OUTPUT_FILE%
if exist %VCD_FILE% del %VCD_FILE%
if exist vcd.log del vcd.log
if /i "%1"=="clean" goto end
goto compile
rem ---------------------------------------------
rem --- 3. 目标:编译 ---
:compile
echo.
echo --- 编译 Verilog 文件 ---
rem 使用 iverilog 编译,将所有设计文件和测试平台文件作为输入
iverilog %IVERILOG_ARGS% -o %OUTPUT_FILE% %DESIGN_FILES% %TESTBENCH%
rem 检查上一步命令的退出代码,如果失败 (非0) 则退出
if errorlevel 1 (
echo.
echo 编译失败!
pause
goto end
)
if /i "%1"=="compile" goto end
goto run
rem ---------------------------------------------
rem --- 4. 目标:运行仿真 ---
:run
echo.
echo --- 运行仿真 ---
vvp %OUTPUT_FILE%
if errorlevel 1 (
echo.
echo 仿真运行失败!
pause
goto end
)
if /i "%1"=="run" goto end
goto view
rem ---------------------------------------------
rem --- 5. 目标:查看波形 ---
:view
echo.
echo --- 打开波形图 (GTKwave) ---
start gtkwave %VCD_FILE%
if /i "%1"=="view" goto end
goto end
:end
echo.
rem 脚本结束3. 修改testbench
请为你的testbench的initial块加入下面几行代码,请注意,使用课程组提供的tb文件同样需要对这一部分进行更改。
initial begin
$dumpfile("wave.vcd");
$dumpvars;
// 你自己的initial内容(如reset信号等)
#100000 $finish; //根据自己的周期时长和周期数确定结束时间
end编译并运行
如果顺利的话,请在vs code终端中输入:
.\run.bat然后,你就可以看见你的输出结果和仿真波形了!
当然,你也可以在上面命令后输入clean/compile/run/view,实现单一操作(clean为清理中间文件,compile为编译,run为运行仿真并生成波形文件,view为打开波形文件)。
macOS环境搭建
环境准备
1. 安装Homebrew(如果已经安装请忽略这一步)
# 如果未安装命令行工具,可能会出现安装引导
# 或使用以下命令手动安装
# xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 如果安装速度过慢,可以使用如下命令
# /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
# 访问上面gitee链接可以发现,这里同时内置了配置国内源的功能,可以按照引导步骤进行操作安装成功后,请运行以下命令,如果看到版本号则为安装成功
brew --version2. 安装iVerilog+GTKWave
# 安装iVerilog
brew install icarus-verilog
# 安装GTKWave
brew install caskroom/cask/gtkwave安装成功后,请运行以下命令,如果看到iverilog版本/打开了gtkwave则为安装成功
iverilog -v
gtkwave3. 安装ctags
ctags是帮助我们实现代码分析与跳转的工具。通常,macOS中自带了一个ctags,但是他并不支持verilog。因此,我们选择安装一个更新版本的、完全兼容老版本的universal-ctags。
brew uninstall ctags # 卸载老版本
brew install universal-ctags # 安装
which ctags # 如果输出路径,则安装成功
/opt/homebrew/bin/ctags --version # 确认输出universal-ctags,路径替换为上一步输出路径配置vs code
1. 插件安装
- 安装插件
Verilog-HDL/SystemVerilog/Bluespec SystemVerilog - 打开
settings.json,添加如下配置:
"verilog.linting.linter": "iverilog",
"verilog.linting.iverilog.arguments": "-Wall -y ${workspaceFolder}",
"verilog.ctags.path": "/opt/homebrew/bin/ctags", //此处替换为which ctags输出路径2. 编写Makefile
在你的Verilog源代码根目录下,创建Makefile文件(文件名为Makefile,不带任何后缀),内容如下
# ===============================================
# Verilog 仿真自动化 Makefile 模板 (iVerilog + GTKwave)
# ===============================================
# --- 配置区 ---
# 1. 你的所有设计文件 (VHDL/Verilog 源码,用空格分隔)
DESIGN_FILES = mips.v # 此处需要添加你所有的源文件,以空格分割即可,并注意,确保子模块写在父模块前面
# 2. 你的测试平台文件 (通常只有一个)
TESTBENCH = mips_tb.v # 此处替换为你自己的testbench名字
# 3. 编译与输出配置
OUTPUT_FILE = wave
VCD_FILE = wave.vcd
IVERILOG_ARGS = -Wall # 编译参数:打开所有警告
# ---------------------------------------------
# --- 自动化 ---
# 默认目标:清理 -> 编译 -> 运行 -> 查看波形
all: clean compile run view
# 目标:编译
compile: $(FILE_LIST)
@echo "--- 2. 编译 Verilog 文件 ---"
# 使用 -f 传递文件列表,确保所有模块都被包含
iverilog $(IVERILOG_ARGS) -o $(OUTPUT_FILE) $(DESIGN_FILES) $(TESTBENCH)
# 目标:运行仿真
run:
@echo "--- 3. 运行仿真 ---"
vvp $(OUTPUT_FILE)
# 目标:查看波形
view:
@echo "--- 4. 打开波形图 (GTKwave) ---"
gtkwave $(VCD_FILE)
# 目标:清理生成文件
clean:
@echo "--- 清理生成文件 ---"
rm -f $(OUTPUT_FILE) $(VCD_FILE) vcd.log
# 阻止 make 尝试查找同名文件作为依赖
.PHONY: all compile run view clean3. 修改testbench
请为你的testbench的initial块加入下面几行代码,请注意,使用课程组提供的tb文件同样需要对这一部分进行更改。
initial begin
$dumpfile("wave.vcd");
$dumpvars;
// 你自己的initial内容(如reset信号等)
#100000 $finish; //根据自己的周期时长和周期数确定结束时间
end编译并运行
如果顺利的话,请在vs code终端中输入:
make然后,你就可以看见你的输出结果和仿真波形了!
当然,你也可以在上面命令后输入clean/compile/run/view,实现单一操作(clean为清理中间文件,compile为编译,run为运行仿真并生成波形文件,view为打开波形文件)。
完整使用步骤
- 创建CPU文件夹并使用vs code打开
- 创建并编写*.v源代码文件
- 创建并粘贴run.bat/Makefile
- 修改其中的DESIGN_FILES和TESTBENCH (详情见注释,即rem或#后的文字)
- 使用.\run.bat或make命令运行
- 如果需要添加模块,写完后记得修改DESIGN_FILES后的参数,注意子模块一定要在父模块之前