- macOS High Sierra系統 10.13.6
先給出答案
可以替代一部分功能
- 如果你是一個學工科的學生,正在學習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開發相關的,希望可以和大家一起探討學習。