能够替代一部分功能html
也有博主作过相关吐槽https://www.xuebuyuan.com/1786786.htmlpython
https://www.bilibili.com/video/av77054717linux
https://www.xuebuyuan.com/1786786.htmlgit
由于主要想要介绍的是Mac系统下的,其它两个系统给你们推荐一下教程就不赘述了。若是推荐的方法过期了,能够具体的能够看一下GHDL的官方文档https://ghdl.readthedocs.io/en/latest/。或者在底下留言,一同探讨。github
在macOS High Sierra系统 10.13.6下,我安装了GCC9.0.2_1后好像就自动有了GHDL。shell
我删除GCC后却依旧可使用GHDL,我不知道他是否是来自GCC更低的版本,或者是来自Xcode工具,亦或者是mac系统自带的。macos
为了解决这个疑惑,我去翻阅了GCC的官方文档,可是依旧未能解决疑惑。有正解的小伙伴能够在评论提供一下。我只能根据查到的一些蛛丝马迹估计是来自Xcode工具,若是你下载了Xcode并安装了GCC依旧没法使用GHDL的话。那么请看一下mcode的版本,也须要有GCC,安装也是很是方便,就是国内下载github上面的东西你们也懂的,好在文件不大。vim
咱们从GHDL官网提供的连接下载mcode版本的GHDL,https://github.com/ghdl/ghdl/releases/download/v0.37/ghdl-0.37-macosx-mcode.tgz。windows
其它系统能够看这里:bash
解压后随便存个地方,设置一下环境变量就可使用了。
设置环境变量能够修改~/.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那一步遇到问题,那重启电脑就行了。
$ brew cask install gtkwave
请不要忽略cask。
最后安装好的文件会在Application里,但咱们不须要主动打开它。
咱们先作一个简单的样例,就好比半加器吧。
先编写咱们的vhd文件,咱们这里须要两个文件,若是学过Quartus ii的话应该会清楚,咱们须要一个vhd文件和一个波形文件。在这里,咱们将用另外一个vhd来代替波形文件。
首先,编写半加器的文件,命名为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”,有不少教程。
而后咱们须要先编译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
$ 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开发相关的,但愿能够和你们一块儿探讨学习。