可否使用GHDL+GTKWave代替Quartus ii

可否使用GHDL+GTKWave代替Quartus ii

  • macOS High Sierra系統 10.13.6

先給出答案

能夠替代一部分功能html

  • 若是你是一個學工科的學生,正在學習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.htmlpython

Windows下用GHDL+GTKWave代替Quartus ii

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

Linux下用GHDL+GTKWave代替Quartus ii

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

Mac下用GHDL+GTKWave代替Quartus ii

由於主要想要介紹的是Mac系統下的,其它兩個系統給你們推薦一下教程就不贅述了。若是推薦的方法過期了,能夠具體的能夠看一下GHDL的官方文檔https://ghdl.readthedocs.io/en/latest/。或者在底下留言,一同探討。github

1、安裝GHDL

在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

屏幕快照 2020-05-02 上午9.46.07

解壓後隨便存個地方,設置一下環境變量就可使用了。

設置環境變量能夠修改~/.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那一步遇到問題,那重啓電腦就行了。

2、安裝GTKWave

$ brew cask install gtkwave

請不要忽略cask。

最後安裝好的文件會在Application裏,但咱們不須要主動打開它。

屏幕快照 2020-05-02 下午3.43.46

3、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那一欄,而且用放大鏡縮放視圖到合適的位置):

屏幕快照 2020-05-02 下午3.31.40

GTKWave的功能仍是很強大的,你們還能夠摸索一下。

4、便捷的方法

不知道看到這一步以前是否就有被勸退的呢?

被麻煩的命令行操做,仍是複雜的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開發相關的,但願能夠和你們一塊兒探討學習。

相關文章
相關標籤/搜索