能否使用GHDL+GTKWave代替Quartus ii

  • macOS High Sierra系统 10.13.6

[toc]

先给出答案

可以替代一部分功能

  • 如果你是一个学工科的学生,正在学习EDA。

    • 你也许还需要诸如“立创EDA”这样的设计软件辅助,因为你们可能还需要用原理图仿真
    • 麻烦的地方还有就是需要自己编写testbench,不能由波形文件直接生成,但我感觉未来发展还是有希望有更便捷的图形仿真界面的
  • 如果你只是想学习VHDL语言,那么GHDL+GTKWave其实也是可以的,GDHL相信也会越来越强大

为什么需要替代

  • Quartus ii 占空间大(Quartus ii:好几G;GHDL+GTKWave:40M左右)
  • Quartus ii 下载需要破译
  • Quartus ii 编译慢(相比于GHDL慢很多,用过的人都懂)
  • Quartus ii 只能在Windows系统下运行

也有博主做过相关吐槽https://www.xuebuyuan.com/1786786.html

Windows下用GHDL+GTKWave代替Quartus ii

https://www.bilibili.com/video/av77054717

Linux下用GHDL+GTKWave代替Quartus ii

https://www.xuebuyuan.com/1786786.html

Mac下用GHDL+GTKWave代替Quartus ii

因为主要想要介绍的是Mac系统下的,其它两个系统给大家推荐一下教程就不赘述了。如果推荐的方法过时了,可以具体的可以看一下GHDL的官方文档https://ghdl.readthedocs.io/en/latest/。或者在底下留言,一同探讨。

一、安装GHDL

在macOS High Sierra系统 10.13.6下,我安装了GCC9.0.2_1后好像就自动有了GHDL。

我删除GCC后却依旧可以使用GHDL,我不知道他是不是来自GCC更低的版本,或者是来自Xcode工具,亦或者是mac系统自带的。

为了解决这个疑惑,我去翻阅了GCC的官方文档,但是依旧未能解决疑惑。有正解的小伙伴可以在评论提供一下。我只能根据查到的一些蛛丝马迹估计是来自Xcode工具,如果你下载了Xcode并安装了GCC依旧无法使用GHDL的话。那么请看一下mcode的版本,也需要有GCC,安装也是非常方便,就是国内下载github上面的东西大家也懂的,好在文件不大。

我们从GHDL官网提供的链接下载mcode版本的GHDL,https://github.com/ghdl/ghdl/releases/download/v0.37/ghdl-0.37-macosx-mcode.tgz。

其它系统可以看这里:

解压后随便存个地方,设置一下环境变量就可以使用了。

设置环境变量可以修改~/.bash_profile,方法如下:

$ vim ~/.bash_profile

将下面这段文本添加进去,注意替换<解压文件存放的目录>和修改版本号:

PATH="<解压文件存放的目录>/ghdl-0.37-macosx-mcode/bin:${PATH}"
export PATH

让修改生效:

$ source ~/.bash_profile

由于之前已经安装GHDL了,我给新的GHDL起名ghdlm以做区分。如果操作成功,在命令行输入指令可以看到:

$ ghdlm # 新安装的
ghdlm:error: missing command, try ghdlm --help
$ ghdl # 之前的
ghdl: missing command, try ghdl --help

如果你在source那一步遇到问题,那重启电脑就好了。

二、安装GTKWave

$ brew cask install gtkwave

请不要忽略cask。

最后安装好的文件会在Application里,但我们不需要主动打开它。

三、GHDL配合GTKWave的使用

我们先做一个简单的样例,就比如半加器吧。

先编写我们的vhd文件,我们这里需要两个文件,如果学过Quartus ii的话应该会清楚,我们需要一个vhd文件和一个波形文件。在这里,我们将用另一个vhd来代替波形文件。

1. 编写

首先,编写半加器的文件,命名为half_adder.vhd,命名是需要格外注意的问题:

library ieee;
use ieee.std_logic_1164.all; entity HALF_ADDER is
port(
A: in std_logic;
B: in std_logic;
CO: out std_logic;
SO: out std_logic
); end HALF_ADDER; architecture behv of HALF_ADDER is begin
SO <= A xor B;
CO <= A and B; end behv;

接着,编写半加器的testbench文件,命名为half_adder_tb.vhd,这可能需要掌握一些元件例化的知识:

library ieee;
use ieee.std_logic_1164.all; entity HALF_ADDER_TB is
end HALF_ADDER_TB; architecture tbbehv of HALF_ADDER_TB is component HALF_ADDER
port(
A: in std_logic;
B: in std_logic;
CO: out std_logic;
SO: out std_logic
);
end component; signal A,B :std_logic := '0';
signal CO,SO :std_logic; begin
u1: HALF_ADDER port map(A,B,CO,SO);
input: process
begin
A<='0';B<='0';
wait for 20 ns;
A<='0';B<='1';
wait for 20 ns;
A<='1';B<='0';
wait for 20 ns;
A<='1';B<='1';
wait for 20 ns;
wait;
end process;
end tbbehv;

由于注释可能会报错,在此就不加了,但是学过元件例化应该不难理解,如果有困难可以百度“VHDL TESTBENCH”,有很多教程。

2. 编译

然后我们需要先编译half_adder.vhd和half_adder_tb.vhd两个文件

$ ghdl -a half_adder.vhd
$ ghdl -a half_adder_tb.vhd

然后由half_adder_tb生成可执行文件

$ ghdl -e half_adder_tb

3. 生成波形文件

$ ghdl -r half_adder_tb --vcd=a.vcd

名字可以随便起,不一定是a.vcd,但是要有后缀名,为了GTKWave打得开。

我们先修改一下.vcd文件的默认打开方式为GTKWave,以后就可以双击直接打开。

这时候就可以看到波形了(注意先点击half_adder_tb,再把左下角信号拖进Signals那一栏,并且用放大镜缩放视图到合适的位置):

GTKWave的功能还是很强大的,大家还可以摸索一下。

四、便捷的方法

不知道看到这一步之前是否就有被劝退的呢?

被麻烦的命令行操作,还是复杂的testbench文件。

但其实我想说,既然是命令行操作,为什么不用一个shell脚本或者一个python脚本来搞定呢?testbench也可以结合自己的使用习惯生成,或者输入波形来生成。

__--__--__--__--
____----____----

我们来一个简约版的:

echo -e "\033[32m第一次使用会安装必备的依赖,请稍等片刻\033[0m";
info=`which ghdl`; if [ -z "$info" ]; then
echo -e "1";
else
echo -e "ghdl is installed";
fi
if [ ! -d "/Applications/gtkwave.app/" ]; then
echo -e "installing gtkwave";
brew cask install gtkwave;
else
echo -e "gtkwave is installed";
fi if [ -z "$1" ]; then
echo -e "gvhdl: missing command, try gvhdl --help"
elif [ -z "$2" ]; then
ghdl -a "$1".vhd;
ghdl -e "$1";
ghdl -r "$1" --vcd=a.vcd;
rm e~"$1".o;
rm "$1".o;
rm work-obj*;
rm "$1".o;
else
ghdl -a "$2".vhd;
ghdl -a "$1".vhd;
ghdl -e "$2";
ghdl -r "$2" --vcd=a.vcd;
rm e~"$2".o;
rm "$2".o;
rm "$2";
rm "$1".o;
rm work-obj*;
fi

由于版本可能不一样,我在这里给个样例,大家参考即可。另外也没有编写生成testbench的部分,如果有感兴趣的,可以留评论哦。

以后我会在博客园多更一些与Mac系统使用相关的,和Web开发相关的,希望可以和大家一起探讨学习。

能否使用GHDL+GTKWave代替Quartus ii的更多相关文章

  1. 能否使用GHDL+GTKWave代替Quartus ii (续——vhdl_testbench_cli)

    vhdl_testbench_cli项目介绍 这是我放在gitee上的一个项目. 项目是用于Mac系统下生成vhdl testbench的工具. 主要就是续着这篇文章<能否使用GHDL+GTKW ...

  2. 【7集iCore3基础视频】7-6 Quartus II 13.1安装

    Quartus II 13.1安装:高清源视频:链接:http://pan.baidu.com/s/1csVRMA 密码:lkth 视频勘误:http://pan.baidu.com/s/1mhCIq ...

  3. Quartus II USB-Blaster驱动解决

    Quartus II USB-Blaster驱动解决 之前安装Quartus II 13.0,但FPGA开发板链接的USB-Blaster链接无法被Quartus识别,改装Quartus II 11. ...

  4. Quartus II 增量编译

    在开发阶段,经常需要改代码,而且往往只改局部代码,但是编译的时候,通常会全部重新编译,这会很浪费时间,使得开发效率大大降低.那么有没有一种方法能够降低不必要的编译时间呢?通过查询Quartus II ...

  5. Quartus II 与 Modelsim 联调【转】

    Quartus II 9.0版本的时候软件还有自带的仿真工具,现在安装的是11.0以上版本,才发现 Quartus II 11.0以上取消了软件自带的波形仿真工具,因此需要波形仿真就要调用专业的仿真工 ...

  6. Quartus ii 12.1软件破解之后编译原有的工程出现报警错误的解决办法

    在Quartus ii 12.1软件破解之后,想用来编译原来编译过的工程,但是编译到最后出现下面两个错误警告: 原来以为没有破解成功或者安装的时候有文件被杀毒软件吃了,导致安装错误,又重新安装了两次都 ...

  7. Quartus ii 12.0 和ModelSim 10.1 SE安装及连接

    quartus ii 10.0后就没有自带的仿真软件,每次写完一个VerilogHDL都想简单仿真一下,结果发现没有了自带仿真软件.这时候就需要第三方仿真软件ModelSim 10.1 SE. Qua ...

  8. Quartus II中FPGA的管脚分配保存方法

    一.摘要 将Quartus II中FPGA管脚的分配及保存方法做一个汇总. 二.管脚分配方法 FPGA 的管脚分配,除了在QII软件中,选择“Assignments ->Pin”标签(或者点击按 ...

  9. 【转】Quartus II调用modelsim无缝仿真

    Quartus II调用modelsim无缝仿真  ★emouse 思·睿博客文章★ 原创文章转载请注明:http://emouse.cnblogs.com 本篇文章为转载,写的不错,最近在学mode ...

随机推荐

  1. 团队作业4:第四篇Scrum冲刺博客(歪瑞古德小队)

    目录 一.Daily Scrum Meeting 1.1 会议照片 1.2 项目进展 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3.2 Code Review 记录 3.3 issue ...

  2. myblogplus 第二期 慕舲原创 如何删除官方在你博客内设置的所有广告

    问题描述: 文章下方广告渐多了起来,这也无可厚非,原来只有小小一幅的,毕竟博客园团队很卖力,博客园首页不是在更新吗,博问也在推广(虽然解答者不多,提问者很多) 不过无疑很影响美观,那些可以让他设置,不 ...

  3. 【转】Echarts自适应

    var myChart1 = echarts.init(document.getElementById('chart1')); var option = myChart1.getOption(); w ...

  4. [CSP-S2019]Emiya 家今天的饭 题解

    CSP-S2 2019 D2T1 很不错的一题DP,通过这道题学到了很多. 身为一个对DP一窍不通的蒟蒻,在考场上还挣扎了1h来推式子,居然还有几次几乎推出正解,然而最后还是只能打个32分的暴搜滚粗 ...

  5. 《MySQL数据库》MySQL主从复制搭建与原理

    前言 主从复制:两台或者更多的数据库实例,通过二进制日志,实现数据同步.为什么需要主从复制,主从复制的作用是什么,答:为了预防灾难. 搭建 第一步:准备多实例环境.如何创建多实例见: 第二步:确保每一 ...

  6. 分享几个好用的ui框架,以便开发

    1:Layui--经典模块化前端框架 地址:https://www.layui.com/ 2:iview--基于 Vue.js 的高质量 UI 组件库 地址:http://v1.iviewui.com ...

  7. 2. Bean Validation声明式校验方法的参数、返回值

    你必须非常努力,才能干起来毫不费力.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众 ...

  8. PageObject六大原则

    The public methods represent the services that the page offers 公共方法表示页面提供的服务 Try not to expose the i ...

  9. Unity 内嵌网页

    uniwebview 官网 http://uniwebview.onevcat.com/reference/class_uni_web_view.html http://uniwebview.onev ...

  10. 使用java8的方法引用替换硬编码

    背景 想必大家在项目中都有遇到把一个列表的多个字段累加求和的情况,也就是一个列表的总计.有的童鞋问,这个不是给前端做的吗?后端不是只需要把列表返回就行了嘛...没错,我也是这样想的,但是在一场和前端的 ...