FPGA学习番外篇:在MacOS上编译和仿真verilog

FPGA学习番外篇:在MacOS上编译和仿真verilog

一年没更新了,过去的一年里一直忙着比赛和课业,一直没有更新博客里的内容,从今天开始再填完埋下的坑吧!

至于为什么会有这个奇怪的番外篇,是因为最近更新了装备,整了台X86的MacBook Pro,为了方便我写verilog和仿真看波形,整合了网上的很多教程最终写出来的。

这其中还包括利用yosys对写好的verilog进行综合的环节,但我想了下,在macOS下烧写fpga十分困难或者对我来说几乎不可能,因此我就虽然写了这部分教程,但我基本没用过综合,非要综合的话利用docker或者虚拟机安装vivado不香嘛😅

  • OS:macOS Big Sur 11.15.1
  • Device:MacBook Pro 13 (2020)
  • Software:VScode 假设现在手上拿到的是一台全新的mac,下面将从零开始!

安装macOS软件包管理工具home brew

类似于linux的apt-get,macOS也有它自己的软件包管理工具home brew,安装方式非常简单,打开终端,输入以下自动运行脚本并根据选项一步步安装即可:

1
2
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

利用homebrew安装开源verilog编译器icarus-verilog

icarus-verilog(下简称iverilog)是一款开源的精巧verilog编译器,可以用它来编译verilog和testbench,并生成仿真波形文件

1
brew install icarus-verilog
安装完成后,输入iverilog,出现以下提示即安装成功
1
2
3
4
5
6
7
8
9
Usage: iverilog [-EiSuvV] [-B base] [-c cmdfile|-f cmdfile]
[-g1995|-g2001|-g2005|-g2005-sv|-g2009|-g2012] [-g<feature>]
[-D macro[=defn]] [-I includedir] [-L moduledir]
[-M [mode=]depfile] [-m module]
[-N file] [-o filename] [-p flag=value]
[-s topmodule] [-t target] [-T min|typ|max]
[-W class] [-y dir] [-Y suf] [-l file] source_file(s)

See the man page for details.
之后可以使用命令行:
1
2
iverilog -o "testbentch_module.vvp" testbentch_module.v source_module.v
vvp -n "testbentch_module.vvp"
或者写一个shell脚本的方式编译verilog和生成波形文件,每次只需要修改文件名即可:
1
2
3
4
5
6
7
8
echo "开始编译"
source_module=BCD_to_Yusan
testbentch_module=BCD_to_Yusan_tb

iverilog -o "$testbentch_module.vvp" $testbentch_module.v $source_module.v
echo "编译完成"
vvp -n "$testbentch_module.vvp"
echo "波形文件已生成"

安装波形查看软件/插件

iverilog可以生成vcd格式的波形文件,只需先利用iverilog编译出vvp文件,再在testbench中添加以下代码即可:

1
2
3
4
5
6
 /*iverilog */
initial begin
$dumpfile("moudule_tb.vcd"); //生成的vcd文件名称
$dumpvars(0, moudule_tb); //tb模块名称
end
/*iverilog */
但我们还需要利用软件或者插件读取波形,这里有两种方法:

利用VScode插件查看波形

目前VScode上有两款插件可以看vcd格式的波形,一个是“impulse”,需要先安装jdk,界面稍有些粗糙,且右上角有水印,但胜在它无需付费解锁更多功能: impulse

另一个插件是“WaveTrace“,界面简洁好看,但不付费只能同时看8个信号… WaveTrace 属实很难选择了,不过用VScode插件的话,会很方便,因为可以直接在VScode里点击打开

利用gtkwave看波形

利用软件gtkwave也可以看波形,但需要进入软件后选择文件或者用命令行来打开波形文件,不过可以写shell自动化脚本解决该问题,也是比较方便的。 首先打开terminal安装gtkwave:

1
brew install gtkwave
如果安装错误则尝试:
1
brew install --cask gtkwave
如果还是报错那就去官网下载安装包手动下载吧(下不下来多半是网络问题) gtkwave官网 之后需要在terminal中添加环境变量,如果以前没有操作过,需要首先注册下bash_profile:
1
vim ~/.zshrc
进入以后按i进入插入模式,然后加上: source ~/.bash_profile 之后键入:wq并回车来保存 然后打开bash_profile:
1
vim ~/.bash_profile
按上述方法,在其中加上export PATH=“/Applications/gtkwave.app/Contents/Resources/bin:$PATH” 操作完成之后,在terminal输入gtkwave能弹出软件就说明操作成功 如果要打开生成的vcd文件,则需要敲命令行,或者打开软件后在软件中打开文件,不过可以使用自动化脚本解决该问题:
1
2
3
4
5
6
7
8
9
10
11
echo "开始编译"
source_module=BCD_to_Yusan
testbentch_module=BCD_to_Yusan_tb

iverilog -o "$testbentch_module.vvp" $testbentch_module.v $source_module.v
echo "编译完成"
vvp -n "$testbentch_module.vvp"
echo "波形文件已生成"

echo "打开波形文件"
gtkwave $testbentch_module.vcd
将上述脚本命名为xx.sh,和写好的module和testbench保存到同一个文件夹,之后在VScode的终端里cd到该文件夹,然后输入./xx.sh+回车即可编译生成和打开波形(我这里命名为ok.sh): 演示

综合RTL文件

macOS可以利用开源综合器yosys来对RTL文件进行综合: 首先确定你有python3环境,可以在terminal键入python查看 然后在github上clone一份yosys:

1
git clone https://github.com/YosysHQ/yosys.git
然后cd进你保存yosys文件的文件夹,安装依赖文件:
1
brew tap Homebrew/bundle && brew bundle
然后编译一份yosys并安装:
1
2
make
sudo make install
至此,macOS写/编译/仿真/综合verilog的全套环境都安装完成啦😉

作者

Hank.Gan

发布于

2021-08-10

更新于

2021-08-13

许可协议

评论