前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Win10 WSL + Linux 开源 EDA(二)

Win10 WSL + Linux 开源 EDA(二)

作者头像
icsoc
发布2020-11-25 15:17:12
1.6K0
发布2020-11-25 15:17:12
举报
文章被收录于专栏:ICSOC.TECHICSOC.TECH

Win10 WSL + Linux 开源 EDA(一)

上一篇我们在一台 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 管理各个工具包之间的令人头痛的依赖关系。每个人的系统可能略有不同,作者执行了下面的一些工具安装,可能有遗漏,如果编译过程遇到问题,可以具体分析、搜索是否需要安装或更新相关的工具包。

代码语言:javascript
复制
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 的源代码了。

代码语言:javascript
复制
git clone https://github.com/x-epic/EpicSim

执行完毕,就会看到下载好的源代码目录,/mnt/d/wsl2/EpicSim 。

进入这个目录,新建一个子目录用来执行编译命令并保存编译临时文件。例如 /mnt/d/wsl2/EpicSim/build 。编译命令如下:

代码语言:javascript
复制
cd EpicSim/
mkdir build
cd build/
cmake ..
make

执行命令过程中大概率会遇到各种错误提示,大家搜索即可,大部分问题应该都是安装依赖包不完整的问题。作者在最后一步 make 的过程中碰到两个 c++ 语法的问题,也许是编译器的配置不对,但是根据作者非常有限的 c++ 知识,修改了两处源代码,竟然也能编译通过了。错误提示是这样的:

代码语言:javascript
复制
//第一处错误
[ 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 。

编译成功之后安装。

代码语言:javascript
复制
make install

然后可以把安装好的 EpicSim 执行路径放到 $PATH 里。例如,打开 ~/.bashrc,键入并保存

代码语言:javascript
复制
export PATH=/mnt/d/wsl2/EpicSim/install/bin:$PATH

然后执行

代码语言:javascript
复制
source ~/.bashrc
which epicsim

正常应该会显示

代码语言:javascript
复制
icsoc@LAPTOP-L491MNVH:/mnt/d/wsl2$ which epicsim
/mnt/d/wsl2/EpicSim/install/bin/epicsim

EpicSim 仿真器安装好了,我们做个简单的仿真测试。在安装包里提供了一个 hello world 级别的 verilog 文件,路径是

代码语言:javascript
复制
/mnt/d/wsl2/EpicSim/examples/hello.vl

我们把它 copy 到一个新的目录,后缀名看起来不符常规,顺便改成

代码语言:javascript
复制
/mnt/d/wsl2/verilog/hello.v

然后执行下列命令可以看到 verilog 文件的的执行输出如下。

代码语言:javascript
复制
/mnt/d/wsl2/verilog$ epicsim hello.v
Hello, World

到这里,我们就下载并安装成功了我们的第一个 EDA 开源工具,EpicSim。

说起来,这个基于已有开源仿真器的升级版工具还是中国本土团队做的,是骡子是马,还真值得一试。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 icsoc 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档