上一篇我们在一台 Win10 家庭版电脑上安装了 WSL 2 的 Ubuntu 16.04 LTS,这篇我们将安装一款开源的 Verilog 仿真器,EpicSim。
说到开源 Verilog 仿真器,最知名的就是 Icarus Verilog [http://iverilog.icarus.com/] 了(简称 iVerilog)。
EpicSim 就是基于 iVerilog 进行了针对性的优化,使其在 RTL 设计(的仿真)上可以有2倍以上的性能提升,并且充实了对 Verilog 语言的支持,大幅提高了 iVerilog 对场景的适应性。开发团队(芯华章)在对 iVerilog 进行优化和改造的同时,对其仿真精度上的实现方式进行了修复和校准,使其结果与现有商用软件保持一致。
(source, http://edagit.com/)
文末的原文链接指向了 EpicSim 开源社区的网站 EDAGit
,感兴趣的朋友可以去做深入了解。
开始 EpicSim 的安装吧,我们先在 /mnt/d 下面新建一个目录作为该项目的工作目录,例如 /mnt/d/wsl2。
正式安装 EpicSim 之前,还需要先安装一些编译 EpicSim 所需要的工具。Ubuntu 系统用 apt-get
管理各个工具包之间的令人头痛的依赖关系。每个人的系统可能略有不同,作者执行了下面的一些工具安装,可能有遗漏,如果编译过程遇到问题,可以具体分析、搜索是否需要安装或更新相关的工具包。
sudo apt-get install git
sudo apt-get install cmake
sudo apt-get install bzip2
sudo apt-get install gperf
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libbz2-dev
sudo apt-get install libzip-dev
这些依赖工具搞定之后,就可以执行下面的命令下载 EpicSim 的源代码了。
git clone https://github.com/x-epic/EpicSim
执行完毕,就会看到下载好的源代码目录,/mnt/d/wsl2/EpicSim 。
进入这个目录,新建一个子目录用来执行编译命令并保存编译临时文件。例如 /mnt/d/wsl2/EpicSim/build 。编译命令如下:
cd EpicSim/
mkdir build
cd build/
cmake ..
make
执行命令过程中大概率会遇到各种错误提示,大家搜索即可,大部分问题应该都是安装依赖包不完整的问题。作者在最后一步 make 的过程中碰到两个 c++ 语法的问题,也许是编译器的配置不对,但是根据作者非常有限的 c++ 知识,修改了两处源代码,竟然也能编译通过了。错误提示是这样的:
//第一处错误
[ 81%] Building CXX object vvp/CMakeFiles/epicsim-vvp.dir/vpi_callback.cc.o
/mnt/d/wsl2/EpicSim/vvp/vpi_callback.cc: In function ‘void real_signal_value(t_vpi_value*, double)’:
/mnt/d/wsl2/EpicSim/vvp/vpi_callback.cc:875:10: error: ‘::isnan’ has not been declared
if (::isnan(rval))
^
/mnt/d/wsl2/EpicSim/vvp/vpi_callback.cc:875:10: note: suggested alternative:
In file included from /mnt/d/wsl2/EpicSim/vvp/config.h:132:0,
from /mnt/d/wsl2/EpicSim/vvp/vvp_net.h:23,
from /mnt/d/wsl2/EpicSim/vvp/vpi_priv.h:25,
from /mnt/d/wsl2/EpicSim/vvp/vpi_callback.cc:29:
/usr/include/c++/5/cmath:641:5: note: ‘std::isnan’
isnan(_Tp __x)
^
vvp/CMakeFiles/epicsim-vvp.dir/build.make:670: recipe for target 'vvp/CMakeFiles/epicsim-vvp.dir/vpi_callback.cc.o' failed
//第二处错误
/mnt/d/wsl2/EpicSim/vvp/vpi_vthr_vector.cc:128:10: error: ‘::isnan’ has not been declared
if (::isnan(val))
^
/mnt/d/wsl2/EpicSim/vvp/vpi_vthr_vector.cc:128:10: note: suggested alternative:
In file included from /mnt/d/wsl2/EpicSim/vvp/config.h:132:0,
from /mnt/d/wsl2/EpicSim/vvp/vvp_net.h:23,
from /mnt/d/wsl2/EpicSim/vvp/vpi_priv.h:25,
from /mnt/d/wsl2/EpicSim/vvp/vpi_vthr_vector.cc:27:
/usr/include/c++/5/cmath:641:5: note: ‘std::isnan’
isnan(_Tp __x)
^
vvp/CMakeFiles/epicsim-vvp.dir/build.make:852: recipe for target 'vvp/CMakeFiles/epicsim-vvp.dir/vpi_vthr_vector.cc.o' failed
作者就把这两个 ::isnan 改成了 std::isnan 。
编译成功之后安装。
make install
然后可以把安装好的 EpicSim 执行路径放到 $PATH
里。例如,打开 ~/.bashrc,键入并保存
export PATH=/mnt/d/wsl2/EpicSim/install/bin:$PATH
然后执行
source ~/.bashrc
which epicsim
正常应该会显示
icsoc@LAPTOP-L491MNVH:/mnt/d/wsl2$ which epicsim
/mnt/d/wsl2/EpicSim/install/bin/epicsim
EpicSim 仿真器安装好了,我们做个简单的仿真测试。在安装包里提供了一个 hello world 级别的 verilog 文件,路径是
/mnt/d/wsl2/EpicSim/examples/hello.vl
我们把它 copy 到一个新的目录,后缀名看起来不符常规,顺便改成
/mnt/d/wsl2/verilog/hello.v
然后执行下列命令可以看到 verilog 文件的的执行输出如下。
/mnt/d/wsl2/verilog$ epicsim hello.v
Hello, World
到这里,我们就下载并安装成功了我们的第一个 EDA 开源工具,EpicSim。
说起来,这个基于已有开源仿真器的升级版工具还是中国本土团队做的,是骡子是马,还真值得一试。