FPGA學(xué)習(xí)VHDL語言總結(jié)

      網(wǎng)友投稿 1694 2022-05-30

      @TOC

      前言

      FPGA作為提升處理性能的黑馬,這些年越來越火熱,不論對于未來是否從事這個方向的人來說,了解FPGA都是很有必要的,抱著學(xué)習(xí)的心態(tài)我學(xué)習(xí)了FPGA,這篇博文做記錄

      一、 VHDL是什么?

      1. 縮寫

      VHDL:Very High Speed Integrated Circuit Hardware Description Language

      2. 作用

      傳統(tǒng)的數(shù)字系統(tǒng)設(shè)計分為硬件設(shè)計、軟件設(shè)計,VHDL打破了傳統(tǒng)的軟、硬件設(shè)計界限

      類似C、C++代替匯編等語言一樣,VHDL代替了原理圖、邏輯狀態(tài)圖

      電子系統(tǒng)設(shè)計者和EDA工具之間的橋梁

      EDA工具及 HDL的流行,促使電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展

      3. VHDL與原理圖描述的比較

      VHDL具有較強的抽象描述能力,可進行系統(tǒng)行為級別的描述。描述更簡潔,效率更高;

      原理圖描述必須給出完整的、具體的電路結(jié)構(gòu)圖,不能進行描象描述。描述繁雜,效率低;

      VHDL描述與實現(xiàn)工藝無關(guān);

      原理圖描述與實現(xiàn)工藝有關(guān)

      4. VHDL語言特點

      VHDL具有強大的語言結(jié)構(gòu),系統(tǒng)硬件抽象描述能力強、設(shè)計效率高;

      VHDL語言可讀性強,易于修改和發(fā)現(xiàn)錯誤;

      VHDL具有豐富的仿真語句和庫函數(shù),可進行早期行為仿真,利于大系統(tǒng)的設(shè)計與驗證;

      VHDL設(shè)計與硬件電路關(guān)系不大;

      VHDL設(shè)計不依賴于器件,與工藝無關(guān)

      移植性好;

      VHDL體系符合TOP-DOWN和CE設(shè)計思想;

      VHDL設(shè)計效率高,產(chǎn)品上市時間快,成本低;

      易于ASIC實現(xiàn)

      5. 與其他語言比較

      常用硬件描述語言有VHDL、Verilog和ABEL語言。VHDL起源于美國國防部的VHSIC,Verilog起源于集成電路的設(shè)計,ABEL則來源于可編程邏輯器件的設(shè)計。VHDL語言是一種高級描述語言,適用于行為級和RTL級的描述,最適于描述電路的行為;Verilog語言和ABEL語言是一種較低級的描述語言,適用于RTL級和門電路級的描述,最適于描述門級電路。

      二、VHDL程序架構(gòu)

      VHDL基本結(jié)構(gòu)

      實體(Entity)

      結(jié)構(gòu)體(Architecture)

      配置(Configuration)

      庫(Library)、程序包(Package)

      1. 實體 Entity

      作用:定義系統(tǒng)的輸入輸出接口

      用法格式:

      ENTITY IS Generic Declarations Port Declarations END ; (1076-1987 version) END ENTITY ; (1076-1993 version)

      Generic:確定實體或組件中定義的局部常數(shù)。模塊化設(shè)計時多用于不同層次模塊之間信息的傳遞,可從外部改變內(nèi)部電路和規(guī)模,必須放在端口說明之前

      Generic ( 常數(shù)名稱:類型 [:= 缺省值] {常數(shù)名稱:類型 [:= 缺省值]} );

      使用:

      entity and2 is generic(risewidth: time:= 1 ns;fallwidth: time:= 1 ns); port(a1: in std_logic;a0: in std_logic;z0: out std_loigc); end entity and2;

      端口聲明:確定輸入輸出端口的數(shù)目和類型

      Port ( 端口名稱{,端口名稱}:端口模式 數(shù)據(jù)類型; … 端口名稱{,端口名稱}:端口模式 數(shù)據(jù)類型 );

      eg:

      port(a1: in std_logic; a0: in std_logic; z0: out std_loigc);

      補充

      1.端口模式的分類:

      in 輸入型,此端口為只讀型。

      out 輸出型,此端口只能在實體內(nèi)部對其賦值

      inout 輸入輸出型,既可讀也可賦值

      buffer 緩沖型,與 out 相似,但可讀

      2.buffer、inout對比:

      inout,輸入輸出雙向端口,可讀可寫

      buffer,為緩沖端口,可讀可寫,但要讀入數(shù)據(jù)時,只允許內(nèi)部回讀內(nèi)部產(chǎn)生的輸出信號,即反饋

      buffer,驅(qū)動只有一個源,不允許多重驅(qū)動,驅(qū)動源可以是其它實體的緩沖端口,也可以是設(shè)計實體的內(nèi)部信號源,但不與其它實體的輸出端口、雙向端口相連

      buffer,僅僅是一個數(shù)據(jù)緩存器,不能用于IO輸出

      3.數(shù)據(jù)類型:

      指端口上流動數(shù)據(jù)的表達格式,為預(yù)先定義好的數(shù)據(jù)類型,如:bit、bit_vector、integer、real、std_logic、std_logic_vector 等

      2.結(jié)構(gòu)體 Architecture

      作用:

      定義系統(tǒng)(或模塊)的行為、元件及內(nèi)部的連接關(guān)系,即描述其邏輯功能。

      組成部分:

      -. 說明部分:對數(shù)據(jù)類型、常數(shù)、信號、子程序、元件等元素的說明

      -. 邏輯功能描述部分:以各種不同的描述風(fēng)格描述系統(tǒng)的邏輯功能。常見的有行為描述/數(shù)據(jù)流描述以及結(jié)構(gòu)化描述

      一個設(shè)計實體可有多個結(jié)構(gòu)體,代表實體的多種實現(xiàn)方式。各個結(jié)構(gòu)體的地位相同

      3. 語法:

      architecture 結(jié)構(gòu)體名稱 of 實體名稱 is [說明語句]內(nèi)部信號、常數(shù)、 數(shù)據(jù)類型、子程序(函數(shù)、過程)、 元件等的說明; begin [并行處理(功能描述)語句]; end [architecture] 結(jié)構(gòu)體名稱;

      注:同一實體的結(jié)構(gòu)體不能同名。定義語句中的常數(shù)、信號不能與實體中的端口同名。

      使用方式:

      entity test1 is port(sig,count:in bit; out1,out2:out bit); end test1; architecture Behavioral of test1 is signal sig:bit; constant const:bit:='1'; begin end Behavioral;

      eg:

      architecture art2 of nand is begin c<=‘1’ when (a=‘0’) and (b=‘0’) else ‘1’ when (a=‘0’) and (b=‘1’) else ‘1’ when (a=‘1’) and (b=‘0’) else ‘0’ when (a=‘1’) and (b=‘1’) else ‘0’; end architecture art2;

      4.庫 Libraty 程序包 Package

      程序包定義:

      已定義的常數(shù)、數(shù)據(jù)類型、元件(調(diào)用)說明、子程序的一個集合。

      庫定義:多個程序包構(gòu)成庫

      兩者目的:方便公共信息、資源的訪問和共享

      程序包的結(jié)構(gòu)包括:程序包說明(包首)和程序包主體(包體)

      程序包說明

      語法:

      package 程序包名 is

      {包說明項}

      end 程序包名;

      包說明項:

      use 語句(用來包括其它程序包)

      類型說明、子類型說明、常量說明;

      信號說明、子程序說明、元件說明

      (程序包體僅用于子程序的描述,只有在程序包中要說明子程序時,程序包體才是必須的

      eg:

      package seven is subtype segments is bit_vector(0 to 6); type bcd is range 0 to 9; end seven; library work; use work.seven.all; entity decoder is port(input: in bcd; drive: out segments); end decoder; architecture art of decoder is begin with input select drive<=B“1111110” when 0, B“0110000” when 1, B“1101101” when 2, B“1111001” when 3, B“0110011” when 4, B“1011011” when 5, B“1011111” when 6, B“1110000” when 7, B“1111111” when 8, B“1111011” when 9, B“0000000” when others; end architecture art;

      庫:

      STD庫:包含的程序包為standard,定義最基本的數(shù)據(jù)類型,如bit,bit_vector ,boolean,integer,real,and time,其中的bit為二值系統(tǒng)(只有‘0’、‘1’)

      IEEE庫:定義了四個常用的程序包

      std_logic_1164 (std_logic types & related functions)

      std_logic_arith (arithmetic functions)

      std_logic_signed (signed arithmetic functions)

      std_logic_unsigned (unsigned arithmetic functions)

      庫及程序包的使用:

      庫及程序包的說明應(yīng)放在實體單元前面

      library 庫名; library ieee;

      use 庫名.程序包名.項目名 use ieee.std_logic_1164.all;

      use 庫名.程序包名.All; use ieee.std_logic_unsigned.conv_integer;

      庫及程序包的作用范圍:僅限于所說明的設(shè)計實體(每一個設(shè)計實體都必須有自己完整的庫及程序包說明語句)

      三、VHDL語言要素

      1.四類語言要素:

      FPGA學(xué)習(xí)之VHDL語言總結(jié)

      數(shù)據(jù)對象(Data Object)

      變量(Variable)

      物理含義:

      暫存某些值的載體,常用于描述算法

      局部量,定義于process、function、procedure

      具體說明:

      變量說明格式

      variable 變量名:數(shù)據(jù)類型 約束條件:= 表達式;

      如:variable a, b : bit;

      variable count : integer range 0 to 255 := 10;

      局部量,只能在進程和子程序中定義、使用,其作用范圍僅局限于定義變量的進程和子程序中。

      變量的初值可用于仿真,但綜合時被忽略

      常量(Constant)

      物理含義:

      電源、地、恒定邏輯值等

      全局量,可定義于上面兩種場合

      常量說明:

      對某一個常量名賦予一個固定的值

      constant 常數(shù)名:數(shù)據(jù)類型:= 表達式;

      constant data: bit_vector(3 downto 0):=“1010”

      constant width: integer: = 8;

      constant x: new_bit: = ‘x’;

      常量數(shù)據(jù)類型必須與表達式的數(shù)據(jù)類型一致

      常量是全局量,其作用范圍取決于常量被定義的位置。

      信號(Signal)

      物理含義:

      是硬件連接線,端口

      全局量,定義于architecture、package、entitiy

      具體說明:

      電子硬件系統(tǒng)運行的基本特性

      各部分電路工作的并行特性;

      信號傳輸過程中的延時特性;

      多驅(qū)動源的總線特性;

      時序電路中觸發(fā)器的記憶特性

      信號是電子系統(tǒng)內(nèi)部硬件連接和硬件特性的抽象表示:

      signal 信號名:數(shù)據(jù)類型 約束條件:= 表達式;

      如:signal s2 : std_logic_vector(15 downto 0);

      綜合時初值被忽略

      信號是全局量,可在結(jié)構(gòu)體、實體、塊中 說明和使用信號

      在進程和子程序中只能使用信號,不能說明信號

      信號與端口的區(qū)別:信號本身無方向,可讀可寫;端口是一種有方向的隱形信號

      數(shù)據(jù)類型(Data Type)

      VHDL是一種強數(shù)據(jù)類型語言

      設(shè)計實體中每一個常數(shù)、信號、變量、函數(shù)以及設(shè)定的各種參量都必須事先說明數(shù)據(jù)類型

      同類型才能互相傳遞和作用

      操作數(shù)(Operands)

      操作對象常量或變量

      操作符(Operator)

      分類:

      邏輯操作符(Logical Operator)

      6種:and、or、nand、nor、xor、not

      操作數(shù)類型必須相同,可為如下類型:bit、bit_vector、std_logic、std_logic_vector、boolean,數(shù)組操作數(shù)的維數(shù)、大小必須相同

      關(guān)系操作符(Relational Operator)

      用于比較相同父類的兩個操作數(shù),返回boolean值

      6 種:=、/=、<、<=、>、>=

      算術(shù)操作符(Arithmetic Operator)

      加操作符“+”、減操作符“-”

      串聯(lián)(并置)操作符“&”:通過連接操作數(shù)來建立新的數(shù)組。操作數(shù)可以是一個數(shù)組或數(shù)組中的一個元素

      重載操作符(Overloading Operator)

      僅有一個操作數(shù)的操作符,包括:“+”、“-”

      乘除操作符

      用于整數(shù)類型:“*”、“/”、“mod”、“rem”

      綜合的限制:“/ ”、“mod”、“rem” 三種操作符的右操作數(shù)必須為 2 的正整數(shù)次冪,即 2n。實際電路用移位實現(xiàn)

      A rem B 余數(shù)運算符,利用操作數(shù)A決定結(jié)果的正負號;A mod B 取模運算符,利用操作數(shù)B決定結(jié)果的正負號

      四、VHDL順序語句

      執(zhí)行順序與書寫順序一致,與傳統(tǒng)軟件設(shè)計語言的特點相似

      順序語句只能用在進程與子程序中

      可描述組合邏輯、時序邏輯

      常用的順序描述語句:

      賦值語句; if語句;case語句;loop語句;

      next語句;exit語句;子程序;return語句;

      wait語句;null語句

      注明:

      變量賦值和信號賦值

      賦值標(biāo)識符的不同

      變量:= 表達式;

      信號 < = 表達式

      硬件實現(xiàn)的功能不同

      信號代表電路單元、功能模塊間的互聯(lián),代表實際的硬件連線

      變量代表電路單元內(nèi)部的操作,代表暫存的臨時數(shù)據(jù);

      有效范圍的不同

      信號:全局量,程序包、實體、結(jié)構(gòu)體

      變量:局部量,進程、子程序

      賦值行為的不同

      信號賦值延遲更新數(shù)值

      變量賦值立即更新數(shù)值

      信號的多次賦值

      一個進程:最后一次賦值有效

      多個進程:多源驅(qū)動,線與、線或、三態(tài)

      五、VHDL并發(fā)語句

      常用的并發(fā)描述語句有:進程(process)語句、塊(block)語句、順序描述語句的并行版本、并行過程調(diào)用語句、元件例化語句、生成語句

      進程(process)語句最具VHDL語言特色。提供了一種用算法描述硬件行為的方法:

      進程與進程,或其它并發(fā)語句之間的并發(fā)性

      進程內(nèi)部的順序性

      進程的啟動與掛起

      進程內(nèi)要讀取的所有敏感信號(包括端口)的列表。每一個敏感信號的變化,都將啟動進程。如果有 wait 語句,則不允許有敏感信號表。

      塊語句

      塊語句將一系列并行描述語句進行組合,目的是改善并行語句及其結(jié)構(gòu)的可讀性??墒菇Y(jié)構(gòu)體層次鮮明,結(jié)構(gòu)清晰

      并行信號賦值語句包括三種

      簡單并行信號賦值

      條件信號賦值

      選擇信號賦值

      賦值目標(biāo)必須是信號,與其它并行語句同時執(zhí)行,與書寫順序及是否在塊語句中無關(guān),每一信號賦值語句等效于一個進程語句,所有輸入信號的變化都將啟動該語句的執(zhí)行

      總結(jié)

      以上就是今天要講的內(nèi)容,本文僅僅簡單總結(jié)了FPGA的基本語法,更多的提高還是要多做實踐

      原文網(wǎng)頁:我的個人博客

      FPGA 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:?? Android 源碼解讀-應(yīng)用是如何啟動的??
      下一篇:常見性能工具一覽
      相關(guān)文章
      亚洲精品无码av人在线观看| 国产成人99久久亚洲综合精品| 亚洲线精品一区二区三区| 亚洲AV无码AV日韩AV网站| 亚洲综合无码无在线观看| 中文文字幕文字幕亚洲色| 亚洲AV一二三区成人影片| 亚洲国产成人99精品激情在线| 亚洲乱码一二三四区麻豆| 亚洲日韩国产精品无码av| 亚洲午夜国产精品无卡| 亚洲一区二区三区在线| 亚洲免费福利在线视频| 亚洲色欲啪啪久久WWW综合网| 国产精品高清视亚洲一区二区| 亚洲综合久久一本伊伊区| 亚洲乱码中文论理电影| 国产亚洲中文日本不卡二区| 亚洲а∨天堂久久精品9966| 亚洲私人无码综合久久网| 亚洲国产精品18久久久久久| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲hairy多毛pics大全| 亚洲AV永久无码精品放毛片| 国产精品亚洲а∨天堂2021| 亚洲综合亚洲综合网成人| 亚洲中文字幕久久精品无码APP| 亚洲精品乱码久久久久久蜜桃不卡| 国产亚洲高清不卡在线观看| 亚洲成在人线av| 久久亚洲国产成人精品性色| 亚洲天堂一区二区三区| 亚洲kkk4444在线观看| 亚洲AV日韩AV无码污污网站| 亚洲国产成人久久一区WWW| 亚洲精品美女久久777777| 亚洲今日精彩视频| 国产成人亚洲合集青青草原精品| 亚洲精品无码不卡在线播放| 亚洲日韩在线第一页| 亚洲国产成人片在线观看|