能否使用GHDL+GTKWave代替Quartus ii


  • 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。

其它系統可以看這里:

屏幕快照 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那一步遇到問題,那重啟電腦就好了。

二、安裝GTKWave

$ brew cask install gtkwave

請不要忽略cask。

最后安裝好的文件會在Application里,但我們不需要主動打開它。

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

三、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的功能還是很強大的,大家還可以摸索一下。

四、便捷的方法

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

被麻煩的命令行操作,還是復雜的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開發相關的,希望可以和大家一起探討學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM