在学习FPGA 和Verilog

目前没有在中文互联网看到 window 下源码安装这两个仿真器的的教程

网上看 iverilog (Icarus Verilog)安装都是用那个2022后缀的安装包 iverilog-v12-20220611-x64_setup.exe

。。。感觉都好老了,github 里却一直在更新,之前编译安装都是失败了,今天借助AI的辅助,把过程跑通了

然后既然跑通了就顺带把更强大的Verilator 折腾安装了,由于AI辅助让这个过程变简单了,至此也记录一下

前置知识

虽然有AI辅助,但是一些基础的概念还是想说明一下

我是电子专业的学生,对之前对软件编译这个概念这些了解的也不多,目前了解也不多。。。所以软件编译的一些概念还是专门去稍微了解一下

大家应该学习过C语言吧,就是C语言课程里面最基本的,一些我们都意识不到的知识

一个C语言程序   例如 printf("Hello word\n"); 的

编译运行有四个过程

大概就是

  1. 把上面代码 和所有include .h .c 的文件(可以考虑STM32的项目。。。) 变成一个文件
  2.  把这一个文件变成 汇编指令,(汇编指令大家应该了解吧。。)
  3. 变成机器二进制文件
  4. 连接一个或者多个.o文件变成可执行文件

我们做的简单代码的编译运行,就是终端下 : gcc 你的.c代码

这一句就变成 a.exe文件了 

但是如果你调用了一些复杂的函数,且是通过.c.h 或者什么手段指向一个外部的库文件,譬如Windows下.lib.dll 或者Linux下 / .a.so(大家可以搜索一下了解),譬如opencv库应该都是这种调用的方法,这个时候你的代码对库里面函数调用,在过程3变成机器二进制文件时候,不是具体的功能指令(就是x86的指令或者arm指令 加法指令判断指令等等)而是一个地址的跳转,这个时候第4步 就是在把你的代码形成的二进制文件和别的库文件二进制文件做链接。。。 

大概理解一下吧,感觉还是有点用的

源码安装之所以感觉有一个门槛,就是感觉不像是之前安装软件就找个安装包安装一些就完事了,而是要提前运行一些命令,装一些似乎百度和bing上搜索都很少见的东西。。。那些大多就是依赖,就是库

编译安装的流程

  1. 所以编译安装的第一步是安装相关的依赖(库)
  2. 由于库比较繁琐复杂,在正式安装之前就有些过程(脚本)去检查这些依赖,这些就经常会报错
  3. 一些大项目会用 cmake 或者 ninja 为了维护大项目或者跨平台,为编译(就gcc 所有的代码)做一些准备,选择哪些文件编译那些不编译,最终形成makefile文件
  4. 然后make  就是读makefile文件 变成具体的gcc编译操作,(和你写的gcc a.c 输出a.exe一样)
  5. 形成可执行文件

大概编译安装就是这样,理解一下,有利于我们后面安装

前置安装环境

请安装msys2 

  • 由于存在依赖文件(也叫库,包,依赖等等都是在说同一个东西),我们不可能再去对依赖文件进行编译安装,msys2 已经足够能支撑我们只关注 verilator iverilog的编译安装,相关的依赖都通过msys2 内部的 pacman -S 命令进行安装
  • 另外的方法例如 WSL 已经是Ubuntu的安装流程了,网上还是有教程的,另外感觉WSL 和window之间文件的传递,内存的占用和管理,还是感觉不方便
  • 如果照着VScode 安装C语言的 相关教程安装MinGW-W64  库,那单独的MinGW 也太小了,依赖又要单独去安装,更麻烦了,
  • vs studio 2022 感觉也很复杂,感觉微软那一套还是专门服务软件开发人员,与我们还是有点远。。。

请安装msys2 ,照着其他的教程安装,并且配置好国内镜像源

最终是这个样子

由于MSYS2本身也有些。。。

我大概说一下就是 这6个exe文件 是各自独立的6个环境,你在clang64安装的 软件或者依赖 在mingw64里面是引用不到的,所以后面这里遇到了一个问题。。。后面再说

我们仅使用migw64.exe

双击启动,我们开始准备安装

那个界面字体很小,忍耐一下,后面你可以自己配置在option 或者用window terminal 去调用它

不是本文的重点,跳过了

编译安装 iverilog

从GitHub 下载源代码解压缩,进入文件夹

migw64 里面 cd 对应的文件夹

willi@LAPTOP-OV96PGJM MINGW64 ~
$ cd /d/Code/iverilog-13_0

willi@LAPTOP-OV96PGJM MINGW64 /d/Code/iverilog-13_0

文件位置的直接复制我的修改一下 右键粘贴进去 (ctrl 好像不支持。。。)

点击Paste 粘贴

安装gcc mingw64 (gcc编译器)

 pacman -S mingw-w64-x86_64-gcc

安装 iverilog 的依赖

pacman -S autoconf gperf bison flex
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-readline mingw-w64-x86_64-bzip2 mingw-w64-x86_64-zlib bison flex gperf

我这里是重复安装,和你们首次运行输出应该有些不一样但是结果都一样的

./configure --prefix=/mingw64  命令

./configure 进行依赖检查和创建makefile, --prefix=/mingw64 是设置编译安装环境为mingw64

./configure --prefix=/mingw64

。。。

这段可以让AI去读取分析,是否有错误,前面依赖安装好后这里基本不会出错,

无非随着时间代码更新可能有新的依赖吧 截至2026年6月7日,目前是可以正常运行的

最后输出makefile 创建了就基本问题了,大家可以借助AI去问,到底要关注哪些输出的信息是正确的,也算学习的过程

make 编译

算小项目吧,没有cmake这一步,直接编译的

make -j$(nproc)

-j 应该是设置最大的编译使用核数,已经用系统变量替代了,不需要管

最终是输出 .o文件就成功了

make install

make install

可以算一种linux的风格的继承吧,其实现在二进制文件已经有了,但是类似与Linux,要把这些二进制文件放到系统的bin文件下统一管理,后面运行调用,就只需要配置一个mingw64/bin 环境变量,所有编译安装的软件都在这个bin文件夹下面

iVerilog 编译安装完成

验证一下

iverilog -V

windows 添加环境变量

添加我们之前提到的mingw64/bin 到环境变量,这应该都会吧。。。不演示了

可以看到iverilog.exe 已经在bin文件夹下了

windows 终端测试一下

命令提示符 cmd也试过都是正常的

Iverilog 安装完成

到我们真正的重头戏

编译安装 Verilator

Github 下载源码 解压缩

mingw64.exe  cd 进入该目录

cd /d/Code/verilator-5.048

安装Verilator的依赖

同理 ,有些是iverilog 已经安装过依赖了,有些是重复发有些是新的,建议都运行一下,以防万一

pacman -S mingw-w64-x86_64-gcc
pacman -S autoconf gperf bison flex
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-readline mingw-w64-x86_64-bzip2 mingw-w64-x86_64-zlib bison flex gperf


pacman -S help2man perl
pacman -S mingw-w64-x86_64-python

pacman -S git

安装过程不再赘述。。。

。。。

这里有个bug

flex 这个依赖,pacman安装是安装到msys2总目录去了,mingw64反而找不到它,我问AI才问出来的,这里需要手动把flex依赖 对应的.h文件 拷贝到mingw的linculude 文件夹内

需要执行以下复制文件命令,而且本命令是没有输出信息的

cp /usr/include/FlexLexer.h /mingw64/include/

设置宏变量和检查依赖 设置编译环境

不知道为啥有这个宏变量,删掉好像也没影响,以防万一还是加上吧

unset VERILATOR_ROOT
  ./configure --prefix=/mingw64

这里好像也宏变量好像也失败了,但是也不影响makefile生成。。。

最终也生成了makefile

make 编译

 make -j$(nproc)

编译成功

make install

不再赘述,可以翻看前面。。。

Verilator 编译完成

mingw64下测试

 有个小bug

Veilator 生成的二进制文件并不是Verilator.exe 而是Verilator_bin.exe 然后外部去调用Verilator.exe 或者根本没有exe后缀,是perl启动然后(我们安装过这个依赖)再去调用Verilator_bin.exe 由于window终端对这个perl 好像支持不够,需要再手动键入什么命令改下perl,我感觉太麻烦了,直接终端调用Verilator_bin.exe 就可以了,你也可以给他手动改个名,都一样

其他

至于iverilog 和Verilator 的使用,那都没啥好说的了。。。网上教程和官方文档都有的

GTKWave

安装应该都一样,依赖目前了解到应该是这些

pacman -S mingw-w64-x86_64-gcc base-devel mingw-w64-x86_64-tk
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-gperf git

其他自己去探索吧,有什么不一致的我后面再更新

Msys2 安装的软件潜在的和windows安装的软件冲突

建议把 Msys2 文件目录下的\usr\bin 和 mingw64\bin 都放到windwos环境变量里,但是这样,可能我们之前安装的依赖 譬如python 和 git 会和Windows下安装的python git 共存的情况,多版本存在不是什么冲突,但是可能你在开展工作时,有可能两个位置的git 都会响应,不过按照Windows配置环境变量的规则,你只需要把 Msys2的环境变量放在windows 配置的git 或python 环境变量低即可

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐