數(shù)字電子技術硬件描述語言_第1頁
數(shù)字電子技術硬件描述語言_第2頁
數(shù)字電子技術硬件描述語言_第3頁
數(shù)字電子技術硬件描述語言_第4頁
數(shù)字電子技術硬件描述語言_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第八章第八章 超高速集成電路硬件超高速集成電路硬件 描述語言描述語言VHDLVHDL簡介8-1 VHDL語言的基本組成語言的基本組成8-2 VHDL數(shù)據(jù)類型和屬性數(shù)據(jù)類型和屬性8-3 VHDL的行為描述的行為描述8-4 VHDL的結構描述的結構描述小結小結 傳統(tǒng)的電路系統(tǒng)設計方法的步驟從狀態(tài)圖的簡化,傳統(tǒng)的電路系統(tǒng)設計方法的步驟從狀態(tài)圖的簡化,寫出最簡邏輯表達式,到繪出電路原理圖。這在不是寫出最簡邏輯表達式,到繪出電路原理圖。這在不是較大的電路系統(tǒng)中,工程師可以用一定的時間,了解較大的電路系統(tǒng)中,工程師可以用一定的時間,了解電路的原理。若電路系統(tǒng)非常龐大,工程師就不容易電路的原理。若電路系統(tǒng)非

2、常龐大,工程師就不容易在電路原理圖上了解電路的原理,而且對繪圖者也是在電路原理圖上了解電路的原理,而且對繪圖者也是一項非常煩瑣的工作。因此眾多軟件公司開發(fā)研制了一項非常煩瑣的工作。因此眾多軟件公司開發(fā)研制了具有自己特色的電路硬件描述語言(具有自己特色的電路硬件描述語言(Hardware Description Language,HDL),這些硬件描述語言必),這些硬件描述語言必然有很大的差異,工程師一旦選用某種硬件描述語言然有很大的差異,工程師一旦選用某種硬件描述語言作為輸入工具,就被束縛在這個硬件設計環(huán)境之中,作為輸入工具,就被束縛在這個硬件設計環(huán)境之中,不能在眾多的軟件工具中選擇一個最佳組

3、合作為自己不能在眾多的軟件工具中選擇一個最佳組合作為自己的最優(yōu)設計環(huán)境。因此,硬件設計工程師需要一種強的最優(yōu)設計環(huán)境。因此,硬件設計工程師需要一種強大的、標準化的硬件描述語言,作為可相互交流的設大的、標準化的硬件描述語言,作為可相互交流的設計環(huán)境。計環(huán)境。 美國國防部在美國國防部在80年代初提出了年代初提出了VHSIC(Very High Speed Integrated Circuit)計劃,其目標之)計劃,其目標之一是為下一代集成電路的生產(chǎn),實現(xiàn)階段性的工一是為下一代集成電路的生產(chǎn),實現(xiàn)階段性的工藝極限以及完成藝極限以及完成10萬門級以上的設計,建立一項萬門級以上的設計,建立一項新的描述方

4、法。新的描述方法。1981年提出了一種新的年提出了一種新的HDL,稱,稱之為之為VHSIC Hardware Description Language,簡,簡稱為稱為VHDL,這種語言的成就有兩個方面:,這種語言的成就有兩個方面:1. 描述復雜的電路系統(tǒng)描述復雜的電路系統(tǒng);2. VHDL成為硬件描述語言的標準成為硬件描述語言的標準。VHDL的主要優(yōu)點是:的主要優(yōu)點是: 1.覆蓋面廣,描述能力強,是一個多層次的硬件描述語言。覆蓋面廣,描述能力強,是一個多層次的硬件描述語言。即設計的原始描述可以是非常簡練的描述,經(jīng)過層層細化求即設計的原始描述可以是非常簡練的描述,經(jīng)過層層細化求精,最終成為可直接付

5、諸生產(chǎn)的電路級或版圖參數(shù)描述,整精,最終成為可直接付諸生產(chǎn)的電路級或版圖參數(shù)描述,整個過程都可以在個過程都可以在VHDL的環(huán)境下進行。的環(huán)境下進行。 2.VHDL有良好的可讀性,即可以被計算機接受,也容有良好的可讀性,即可以被計算機接受,也容易被理解。用易被理解。用VHDL書寫的原文件書寫的原文件,即是程序,又是文檔,即是程序,又是文檔,即是技術人員之間交換信息的文件,又可作為合同簽約者即是技術人員之間交換信息的文件,又可作為合同簽約者之間的文件。之間的文件。 3.VHDL本身的生命期長,因為本身的生命期長,因為VHDL的硬件描述與工的硬件描述與工藝技術無關,不會因工藝變化而使描述過時。與工藝

6、技術藝技術無關,不會因工藝變化而使描述過時。與工藝技術有關的參數(shù)可通過有關的參數(shù)可通過VHDL提供的屬性加以描述,工藝改變提供的屬性加以描述,工藝改變時,只需修改相應程序中的屬性參數(shù)即可。時,只需修改相應程序中的屬性參數(shù)即可。 4.支持大規(guī)模設計的分解和已有設計的支持大規(guī)模設計的分解和已有設計的再利用,一個大規(guī)模設計不可能一個人獨再利用,一個大規(guī)模設計不可能一個人獨立完成,它將由多人,多項目組來共同完立完成,它將由多人,多項目組來共同完成。成。VHDL為設計的分解和設計的再利用為設計的分解和設計的再利用提供了有力的支持。提供了有力的支持。VHDL的主要優(yōu)點是:的主要優(yōu)點是: 5.VHDL已成為

7、已成為IEEE承認的一個工業(yè)標承認的一個工業(yè)標準,事實上已成為通用硬件描述語言。準,事實上已成為通用硬件描述語言。8-1 VHDL的基本組成的基本組成 VHDL可以把任意復雜的電路系統(tǒng)視作一個??梢园讶我鈴碗s的電路系統(tǒng)視作一個模塊,一個模塊可主要分為三個組成部分:塊,一個模塊可主要分為三個組成部分: 每個模塊中的程序包有每個模塊中的程序包有IEEE標準的標準程序標準的標準程序包或設計者自身設計的程序包,而且調(diào)用的數(shù)量包或設計者自身設計的程序包,而且調(diào)用的數(shù)量不限。模塊中的程序包是設計中的子程序和公用不限。模塊中的程序包是設計中的子程序和公用數(shù)據(jù)類型的集合,是構成設計工具的工具箱,工數(shù)據(jù)類型的集

8、合,是構成設計工具的工具箱,工具箱中最基本的工具是數(shù)據(jù)類型包,調(diào)用此標準具箱中最基本的工具是數(shù)據(jù)類型包,調(diào)用此標準程序包的程序包的VHDL語言是:語言是:一一、參數(shù)部分、參數(shù)部分程序包程序包例例1:LIBRARY ieee;USE ieee.std_logic_1164.all;調(diào)用程序包調(diào)用程序包語句語句標標準準程程序序包包定定義義程程序序包包 這兩句設置在這兩句設置在VHDL程序的前面,表示以后程序的前面,表示以后在實體或結構體中要用在實體或結構體中要用到數(shù)據(jù)類型包中的數(shù)據(jù)到數(shù)據(jù)類型包中的數(shù)據(jù)類型。類型。 模塊中僅有一個設計實體,模塊中僅有一個設計實體,它提供該設計模塊的公共信息,它提供該

9、設計模塊的公共信息,是是VHDL設計電路的最基本部設計電路的最基本部分。分。VHDL設計的電路系統(tǒng)是設計的電路系統(tǒng)是可以分層次的,所以設計的??梢苑謱哟蔚模栽O計的模塊系統(tǒng)實體即可以是頂層實體,塊系統(tǒng)實體即可以是頂層實體,又可以是最底層實體。又可以是最底層實體。二、接口部分二、接口部分設計實體:設計實體:調(diào)用程序包調(diào)用程序包語句語句標標準準程程序序包包定定義義程程序序包包實體實體 及實及實體聲體聲明語明語句句ENTITY kxor ISkxor PORT(a1,b1:IN std_logic;a1b1 c1:OUT std_logic);c1END kxor;例例 2 實體部分的大寫單詞實體

10、部分的大寫單詞ENTITY、IS、PORT、IN、OUT和和END為關鍵字。在為關鍵字。在ENTITY.END之之間表示實體內(nèi)容,間表示實體內(nèi)容,ENTITY后的字符串后的字符串kxor表示表示實體的名稱,即電路的符號名。端口(引腳)信實體的名稱,即電路的符號名。端口(引腳)信息關鍵字息關鍵字PORT中的語句有三個端口,描述了信中的語句有三個端口,描述了信號的流向,分別是兩個輸入(號的流向,分別是兩個輸入(IN)模式)模式a1和和b1,一個是輸出(一個是輸出(OUT)模式)模式c1,端口信息除了輸入,端口信息除了輸入輸出之外,還可以是雙向、緩沖器等。輸出之外,還可以是雙向、緩沖器等。std_l

11、ogic表示信號取值的類型為標準邏輯位,除了標準邏表示信號取值的類型為標準邏輯位,除了標準邏輯位之外,還可以是實數(shù)、整數(shù)、無符號數(shù)、物輯位之外,還可以是實數(shù)、整數(shù)、無符號數(shù)、物理以及以上數(shù)據(jù)類型組成的記錄和數(shù)組集合,信理以及以上數(shù)據(jù)類型組成的記錄和數(shù)組集合,信號類型也可以是設計者定義。號類型也可以是設計者定義。三、描述部分三、描述部分結構體:結構體: 當異或門的符號和外部端口當異或門的符號和外部端口a1、b1和和c1確定之后,就要確定確定之后,就要確定實體的內(nèi)部電路,使之與實體相實體的內(nèi)部電路,使之與實體相對應。電路描述部分稱之為結構對應。電路描述部分稱之為結構體體ARCHITECTURE,它

12、描述實,它描述實體硬件的互連關系、數(shù)據(jù)的傳輸體硬件的互連關系、數(shù)據(jù)的傳輸和變換以及動態(tài)行為。一個實體和變換以及動態(tài)行為。一個實體可以對應多個結構體,每個結構可以對應多個結構體,每個結構體可以代表該硬件的某一方面特體可以代表該硬件的某一方面特性,例如行為特性,結構特性。性,例如行為特性,結構特性。調(diào)用程序包調(diào)用程序包語句語句標標準準程程序序包包定定義義程程序序包包實體實體 及實及實體聲體聲明語明語句句結結構構體體1結結構構體體2結結構構體體nARCHITECTURE kxor_arc OF kxor IS例例3BEGIN c1 = (NOT a1 AND b1) OR (a1 AND NOT b

13、1);END kxor_arc;kxora1b1c1a1b1c18-2 VHDL數(shù)據(jù)類型和屬性數(shù)據(jù)類型和屬性 VHDL硬件描述語言中涉及到了許多信號,變量和常硬件描述語言中涉及到了許多信號,變量和常量,它們用來保持一個數(shù)據(jù)。量,它們用來保持一個數(shù)據(jù)。 保持數(shù)據(jù)的信號,變量和常量,在保持數(shù)據(jù)的信號,變量和常量,在VHDL中稱為中稱為目標,每一個目標都有一個數(shù)據(jù)類型確定目標保持的目標,每一個目標都有一個數(shù)據(jù)類型確定目標保持的那一類數(shù)據(jù)。那一類數(shù)據(jù)。 VHDL是一種非常嚴格的數(shù)據(jù)類型化語言,規(guī)定每個信是一種非常嚴格的數(shù)據(jù)類型化語言,規(guī)定每個信號,常量或變量和每個表達式有一個唯一的確定數(shù)據(jù)類型,號,常

14、量或變量和每個表達式有一個唯一的確定數(shù)據(jù)類型,一般說,在表達式中分配數(shù)值給目標時的數(shù)據(jù)類型不可以一般說,在表達式中分配數(shù)值給目標時的數(shù)據(jù)類型不可以被混用。被混用。每個目標和表達式的類型靜態(tài)地確定。每個目標和表達式的類型靜態(tài)地確定。在在VHDL中有三類目標:信號、變量和常量。中有三類目標:信號、變量和常量。 信號和變量可以賦予一系列的值,而常量一次信號和變量可以賦予一系列的值,而常量一次僅被分配一個值。僅被分配一個值。 變量和信號又有不同,賦予信號的數(shù)值要到未來變量和信號又有不同,賦予信號的數(shù)值要到未來的某個時刻,信號才接受當前的數(shù)值,而賦予變量的的某個時刻,信號才接受當前的數(shù)值,而賦予變量的數(shù)

15、值,變量立即接受當前的數(shù)值。數(shù)值,變量立即接受當前的數(shù)值。目標的一般形式如下:目標的一般形式如下: 目標目標 : := ;目標目標:是一個或多個代表著目標種類的字符串,多個目:是一個或多個代表著目標種類的字符串,多個目 標時用標時用“,”號分開。號分開。 目標目標 : := ;目標種類目標種類:信號信號、變量變量和和常量常量。信號信號:它可以表示把元件的端口連接在一起的互連線。:它可以表示把元件的端口連接在一起的互連線。 變量變量:用于對暫時數(shù)據(jù)的局部存儲,變量只在進程和子:用于對暫時數(shù)據(jù)的局部存儲,變量只在進程和子 程序內(nèi)部定義。程序內(nèi)部定義。 常量常量:對某些特定類型數(shù)據(jù)賦予的數(shù)值。:對某

16、些特定類型數(shù)據(jù)賦予的數(shù)值。表達式表達式:表達式是為了規(guī)定目標的初始值,這是缺省部分。:表達式是為了規(guī)定目標的初始值,這是缺省部分。目標類型目標類型:為了規(guī)定目標的特征,:為了規(guī)定目標的特征,VHDL含有很寬范圍的含有很寬范圍的數(shù)據(jù)類型。數(shù)據(jù)類型。VHDL除了有基本的數(shù)據(jù)類型之外,設計者還除了有基本的數(shù)據(jù)類型之外,設計者還可以建立自己新的數(shù)據(jù)類型,類型說明部分規(guī)定類型名和可以建立自己新的數(shù)據(jù)類型,類型說明部分規(guī)定類型名和類型范圍,它的一般形式是:類型范圍,它的一般形式是:TYPE IS ;標量類型、復合類型、子類型、文件類型和尋址類型。標量類型、復合類型、子類型、文件類型和尋址類型。標量類型包括

17、所有的簡單類型:如整數(shù)、實數(shù)等標量類型包括所有的簡單類型:如整數(shù)、實數(shù)等復合類型包括數(shù)組和記錄復合類型包括數(shù)組和記錄尋址類型在一般編輯語言中等價為指針尋址類型在一般編輯語言中等價為指針文件類型用設計者定義的文件類型為設計者提供說明的文件對象文件類型用設計者定義的文件類型為設計者提供說明的文件對象子類型主要是對現(xiàn)有類型加以限制子類型主要是對現(xiàn)有類型加以限制VHDL可用數(shù)據(jù)類型有五類:可用數(shù)據(jù)類型有五類:一、一、 標量數(shù)據(jù)類型標量數(shù)據(jù)類型標量數(shù)據(jù)類型是基本的數(shù)據(jù)類型,它包括整數(shù)類型、標量數(shù)據(jù)類型是基本的數(shù)據(jù)類型,它包括整數(shù)類型、實數(shù)類型、物理類型和枚舉類型。實數(shù)類型、物理類型和枚舉類型。一個目標的

18、數(shù)值有可能經(jīng)常更換或者說是包含多個值,一個目標的數(shù)值有可能經(jīng)常更換或者說是包含多個值,但一個目標一次只能被一種類型說明。但一個目標一次只能被一種類型說明。物理類型要提供一個基本單位,然后在這個基本單位物理類型要提供一個基本單位,然后在這個基本單位上定義多個或零個次級單位,每個次級單位都是基本上定義多個或零個次級單位,每個次級單位都是基本單位的整數(shù)倍。單位的整數(shù)倍。枚舉類型在形式上是定義括弧括起來的字符串文字表,枚舉類型在形式上是定義括弧括起來的字符串文字表,一個字符串文字在枚舉類型定義中只能出現(xiàn)一次,但一個字符串文字在枚舉類型定義中只能出現(xiàn)一次,但允許同樣一個字符串文字出現(xiàn)在不同的枚舉類型的字

19、允許同樣一個字符串文字出現(xiàn)在不同的枚舉類型的字符串文字表中,枚舉類型的字符串文字表中的文字是符串文字表中,枚舉類型的字符串文字表中的文字是由設計者定義的,這些字母可以是單個字母,也可以由設計者定義的,這些字母可以是單個字母,也可以是一個字符串,例如是一個字符串,例如BREAKFAST, Lunch, a等。等。 下面舉兩個下面舉兩個VHDL程序加深理解程序加深理解枚舉枚舉類型的使用。類型的使用。P A C K A G E m e a l s _ p k g I S T Y P E m e a l I S ( b re a k f a s t , l u n c h , d i n n e r

20、) ;END meals_pkg;例例2:USE work . meals_pkg . all;ENTITY meals IS PORT(previous_meal:IN meal; next_meal:OUT meal);END meals;ARCHITECTURE meals_arc OF meals ISBEGIN WITH previous_meal SELECT next_meal = breakfast WHEN dinner, lunch WHEN breakfast, dinner WHEN lunch;END meals_arc;二、復合數(shù)據(jù)類型二、復合數(shù)據(jù)類型 復合類型是由

21、數(shù)組類型和記錄類型組成,它們的元復合類型是由數(shù)組類型和記錄類型組成,它們的元素是標量類型的元素。數(shù)組類型是由相同的標量元素素是標量類型的元素。數(shù)組類型是由相同的標量元素組成,即同構復合類型,數(shù)組可以是一維二維或多維。組成,即同構復合類型,數(shù)組可以是一維二維或多維。例如例如TYPE matrix IS ARRAY(row,column) OF std_logic;TYPE r_ma IS ARRAY( 1 TO 10, 1 TO 40) OF std_logic; TYPE word IS ARRAY(15 DOWNTO 0) OF BIT;TYPE column IS RANGE 1 TO 4

22、0; TYPE row IS RANGE 1 TO 10;CONSTANT ROM : BIT_VECTOR(0 TO 15);ARCHITECTURE rom_arc OF rom ISBEGIN PROCESS(cs,x1,x2,x3,x4) VARIABLE n:NATURAL RANGE 0 TO 15; CONSTANT rom0:std_logic_vector(0 TO 15):= “0101010101010101”; CONSTANT rom1:std_logic_vector(0 TO 15):= “0011001100110011”; CONSTANT rom2:std_

23、logic_vector(0 TO 15):= “0000111100001111”; CONSTANT rom3:std_logic_vector(0 TO 15):= “0000000011111111”;下面舉一個VHDL程序說明一維數(shù)組實現(xiàn)164的ROM。LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY rom IS PORT(cs,x1,x2,x3,x4:IN std_logic; d0,d1,d2,d3:OUT std_logic);END rom; BEGIN IF cs= 1 THEN n:=0; IF x1 = 1 THEN n:

24、= n+1; END IF; IF x2 = 1 THEN n:= n+2; END IF; IF x3 = 1 THEN n:= n+4; END IF; IF x4 = 1 THEN n:= n+8; END IF; d0 = rom0(n) AFTER 10 ns; d1 = rom1(n) AFTER 10 ns; d2 = rom2(n) AFTER 10 ns; d3 = rom3(n) AFTER 10 ns; ELSE d0 = Z AFTER 10 ns; d1 = Z AFTER 10 ns; d2 = Z AFTER 10 ns; d3 = Z AFTER 10 ns;

25、END IF; END PROCESS; END rom_arc; 在結構體說明區(qū)(在結構體說明區(qū)(ARCHITECTURE和和BEGIN之間)被之間)被說明的目標,僅可以在此結構體中引用或在結構體中的任何說明的目標,僅可以在此結構體中引用或在結構體中的任何進程語句中被引用,稱此目標為局部信號。進程語句中被引用,稱此目標為局部信號。數(shù)據(jù)類型的全局化和局部化數(shù)據(jù)類型的全局化和局部化 前面已經(jīng)討論前面已經(jīng)討論VHDL描述語言的組成是由程序包、實體、描述語言的組成是由程序包、實體、結構體(結構體中有進程)、以及子程序而組成,不同的目標結構體(結構體中有進程)、以及子程序而組成,不同的目標可以在指定的

26、組成部分內(nèi)加以說明??梢栽谥付ǖ慕M成部分內(nèi)加以說明。 如果一個目標在實體說明部分被說明,那么在本實體和本如果一個目標在實體說明部分被說明,那么在本實體和本實體內(nèi)部的任何結構體和任何進程中都可以引用在實體中說明實體內(nèi)部的任何結構體和任何進程中都可以引用在實體中說明的目標,稱為全局信號;的目標,稱為全局信號;VHDL中不同的目標和類型規(guī)定在不同的構造中可以被說明。中不同的目標和類型規(guī)定在不同的構造中可以被說明。信 號信 號 : 實 體 、 結 構 體 說 明 區(qū) 、 程 序 包 和 子 程 序 。: 實 體 、 結 構 體 說 明 區(qū) 、 程 序 包 和 子 程 序 。變量變量:進程語句說明區(qū)和子

27、程序。:進程語句說明區(qū)和子程序。常量常量:實體、結構體、進程語句說明區(qū)和程序包和子程序。:實體、結構體、進程語句說明區(qū)和程序包和子程序。標量類型標量類型:實體、結構體、進程語句說明區(qū)和程序包和子程序。:實體、結構體、進程語句說明區(qū)和程序包和子程序。復合類型復合類型:實體、結構體、進程語句說明區(qū)和程序包和子程序。:實體、結構體、進程語句說明區(qū)和程序包和子程序。文 件 類 型文 件 類 型 : 子 程 序 和 進 程 語 句 說 明 區(qū) 。: 子 程 序 和 進 程 語 句 說 明 區(qū) 。尋址類型尋址類型:進程語句說明區(qū)。:進程語句說明區(qū)。VHDL的屬性的屬性 VHDL中的屬性使得中的屬性使得VH

28、DL程序更加簡明扼要,更程序更加簡明扼要,更加容易理解,加容易理解,VHDL的屬性在時序程序中幾乎處處可的屬性在時序程序中幾乎處處可見,如值類屬性的左邊界、右邊界、上下邊界以及值見,如值類屬性的左邊界、右邊界、上下邊界以及值類屬性的長度,還可以檢測信號上升沿和下降沿以及類屬性的長度,還可以檢測信號上升沿和下降沿以及前一次發(fā)生的事件等等。前一次發(fā)生的事件等等。 VHDL的屬性可歸納為,信號類屬性、函數(shù)類屬性、的屬性可歸納為,信號類屬性、函數(shù)類屬性、 值類屬性、類型類屬性和范圍類屬性。本節(jié)介紹值類值類屬性、類型類屬性和范圍類屬性。本節(jié)介紹值類屬性及函數(shù)信號類屬性。屬性及函數(shù)信號類屬性。TYPE b

29、it IS ARRAY(63 DOWNTO 32) OF BIT; VARIABLE left_range,right_range,uprange,lowrange:INTEGER;BEGIN l e f t _ r a n g e : = b i t L E F T ; - - re t u r n s 6 3 right_range:= bitRIGHT; -returns 32 uprange:= bitHIGH; -returns 63 lowrange:= bitLOW; -returns 32 值類屬性值類屬性:值類屬性用于返回數(shù)組的邊界或長度,首先舉一例值類屬性用于返回數(shù)組的邊界

30、或長度,首先舉一例數(shù)組邊界的例子說明類型屬性。數(shù)組邊界的例子說明類型屬性。例例8:TYPE bit IS ARRAY(0 TO 7) OF BIT;TYPE bit1 IS ARRAY(8 TO 31) OF BIT; VA R I A B L E l e n 1 , l e n 2 : I N T E G E R ;BEGIN len1:=bitLENGTH; -return 8 len2:=bit1LENGTH; -return 24 下面再舉一個值類數(shù)組屬性的例子,讓其返下面再舉一個值類數(shù)組屬性的例子,讓其返回數(shù)組范圍的總長度?;財?shù)組范圍的總長度。例例: 它可用來檢查一個信號的變化,并且

31、變化剛它可用來檢查一個信號的變化,并且變化剛剛發(fā)生,既推斷出在信號上發(fā)生了一個跳變。剛發(fā)生,既推斷出在信號上發(fā)生了一個跳變。 函數(shù)信號屬性:函數(shù)信號屬性用來返回有關信函數(shù)信號屬性:函數(shù)信號屬性用來返回有關信號行為功能的信息,它反映一個信號是否正好有值號行為功能的信息,它反映一個信號是否正好有值的變化或事件的發(fā)生,如的變化或事件的發(fā)生,如clkEVENT,這個屬性為,這個屬性為“EVENT”,對檢查時鐘邊沿觸發(fā)是很有效的。,對檢查時鐘邊沿觸發(fā)是很有效的。下面舉一個例子,說明函數(shù)信號屬性的用法下面舉一個例子,說明函數(shù)信號屬性的用法IF clk= 1 AND clkEVENT THEN q = d;

32、END IF; 上述語句中用到了函數(shù)信號屬性上述語句中用到了函數(shù)信號屬性clkEVENT,說明,說明如果時鐘信號如果時鐘信號clk為高電平,并且事件剛剛發(fā)生,也就為高電平,并且事件剛剛發(fā)生,也就是說是時鐘上升沿有效,此時是說是時鐘上升沿有效,此時q得到得到d的信號。的信號。8-3 VHDL的行為描述的行為描述 在在VHDL硬件描述語言中,描述電路邏輯的程硬件描述語言中,描述電路邏輯的程序稱為序稱為行為描述行為描述,行為描述有,行為描述有并行行為描述并行行為描述、進程進程行為描述行為描述和和順序行為描述順序行為描述。 三個行為即可以是相互獨立,成為單一的行為三個行為即可以是相互獨立,成為單一的行

33、為描述體,又可以相互聯(lián)系,成為混合描述體,如進描述體,又可以相互聯(lián)系,成為混合描述體,如進程行為描述行為程行為描述行為之間之間是并行行為,進程行為體的是并行行為,進程行為體的內(nèi)內(nèi)部部是順序行為。是順序行為。一、一、VHDL的并行行為的并行行為 在典型的編程語言如在典型的編程語言如C或或Pascal中,每個賦值語句按規(guī)定的次中,每個賦值語句按規(guī)定的次序,一個接在另一個之后順序執(zhí)行,執(zhí)行的次序由源文件決定。序,一個接在另一個之后順序執(zhí)行,執(zhí)行的次序由源文件決定。 在在VHDL中,結構體的內(nèi)部沒有規(guī)定語句的次序,執(zhí)行的次序中,結構體的內(nèi)部沒有規(guī)定語句的次序,執(zhí)行的次序僅由對語句中的敏感信號發(fā)生的事件

34、決定,且語句是同時執(zhí)行,產(chǎn)僅由對語句中的敏感信號發(fā)生的事件決定,且語句是同時執(zhí)行,產(chǎn)生其并行型。生其并行型。結構體中并行賦值語句的一般格式如下:結構體中并行賦值語句的一般格式如下: = 該一般形式讀作對象得到表達式的值,其作用是將表達式的信號該一般形式讀作對象得到表達式的值,其作用是將表達式的信號值分配給對象,也就是說每當表達式的信號值變化時執(zhí)行該語句。值分配給對象,也就是說每當表達式的信號值變化時執(zhí)行該語句。 每個表達式都至少有一個敏感信號,每當敏感信號改變其每個表達式都至少有一個敏感信號,每當敏感信號改變其值時,這個信號賦值語句就執(zhí)行,值時,這個信號賦值語句就執(zhí)行, 在所有的并行語句中,兩

35、個以上的并行賦值語句在字面在所有的并行語句中,兩個以上的并行賦值語句在字面上的順序并不表明它們的執(zhí)行順序,上的順序并不表明它們的執(zhí)行順序,例如下面的兩個結構體在功能上是等價的。例如下面的兩個結構體在功能上是等價的。ENTITY exe IS PORT(a1,a2:IN BIT; b1,b2:OUT BIT);END exe;ARCHITECTURE exe_arc1 OF exe ISBEGIN b1 = a1 AND b2; b2 = NOT a1 OR a2;END exe_arc1;ARCHITECTURE exe_arc2 OF exe ISBEGIN b2 = NOT a1 OR a

36、2; b1 = a1 AND b2;END exe_arc2;a1a2b1b2 另一種并行信號賦值語句是選擇信號賦值語句,它們的每一另一種并行信號賦值語句是選擇信號賦值語句,它們的每一個賦值語句都需要給出一個表達式,同時給出與該表達式的每個個賦值語句都需要給出一個表達式,同時給出與該表達式的每個可能值相關聯(lián)的信號可能值相關聯(lián)的信號 選擇信號賦值語句的一般形式如下:選擇信號賦值語句的一般形式如下: WITH SELECT = WHEN , WHEN , WHEN ; 一個典型的四路數(shù)據(jù)選擇器的一個典型的四路數(shù)據(jù)選擇器的VHDL程序說明程序說明WITH一般一般形式的用法形式的用法ENTITY se

37、ls IS PORT(d0,d1,d2,d3:IN BIT; s :IN INTEGER RANGE 0 TO 3; out1 :OUT BIT);END sels;ARCHITECTURE sels_arc OF sels ISBEGIN WITH s SELECT out1 = d0 WHEN 0, d1 WHEN 1, d2 WHEN 2, d3 WHEN 3;END sels_arc;d0d1d2d3sout1sels 仍以四路數(shù)據(jù)選擇器為例,討論另一個較為復雜的并仍以四路數(shù)據(jù)選擇器為例,討論另一個較為復雜的并行信號賦值語句的例子,以便更詳細地說明并行概念,行信號賦值語句的例子,以便更

38、詳細地說明并行概念,下面是四輸入數(shù)據(jù)選擇器的第二個下面是四輸入數(shù)據(jù)選擇器的第二個VHDL程序。程序。例:例:LIBRARY ieee; USE ieee.std_logic_1164.all;ENTITY mux4 IS PORT(I0,I1,I2,I3,A,B:IN std_logic; Q :OUT std_logic);END mux4;ARCHITECTURE mux4_arc OF mux4 IS SIGNAL sel :INTEGER ;BEGIN Q = I0 AFTER 10 ns WHEN sel= 0 ELSE I1 AFTER 10 ns WHEN sel= 1 ELSE

39、 I2 AFTER 10 ns WHEN sel= 2 ELSE I3 AFTER 10 ns ; sel = 0 WHEN A= 0 AND B= 0 ELSE 1 WHEN A= 1 AND B= 0 ELSE 2 WHEN A= 0 AND B= 1 ELSE 3 ;END mux4_arc;二、二、VHDL的進程行為的進程行為 VHDL除了并行行為之外,還有順序行為。順序行為執(zhí)行除了并行行為之外,還有順序行為。順序行為執(zhí)行的順序是一個接在另一個之后嚴格執(zhí)行。的順序是一個接在另一個之后嚴格執(zhí)行。順序行為的語句存在于順序行為的語句存在于VHDL程序中的程序中的進程行為進程行為之中。之中。而

40、進程行為之間是并行行為語句而進程行為之間是并行行為語句。進程行為語句的一般形式如下進程行為語句的一般形式如下: :PROCESS BEGIN WAIT ON ; WAIT UNTIL ; WAIT FOR ; END PROCESS; 進程行為的說明區(qū)定義該進程所需要的局部數(shù)據(jù)環(huán)境、它進程行為的說明區(qū)定義該進程所需要的局部數(shù)據(jù)環(huán)境、它包括包括子程序說明子程序說明、屬性說明屬性說明和和變量說明變量說明等等在這里只給出在這里只給出變量說明變量說明的一個例子,變量說明的一般形式為的一個例子,變量說明的一般形式為VARIABLE : ;下面進程說明區(qū)中說明了變量下面進程說明區(qū)中說明了變量count,進

41、程也可對變量賦值。,進程也可對變量賦值。 PROCESS VARIABLE count:INTEGER:= 0; BEGIN count:= count+1; WAIT FOR 1000 ns; END PROCESS; 整個實體模塊中的每個進程行為語句,可以在任何時候被整個實體模塊中的每個進程行為語句,可以在任何時候被激活,所有被激活的進程是并行執(zhí)行的激活,所有被激活的進程是并行執(zhí)行的 下面舉一個三八通用譯碼器程序的例子,說明進程語句下面舉一個三八通用譯碼器程序的例子,說明進程語句如何工作。如何工作。LIBRARY ieee; USE ieee.std_logic_1164.all; USE

42、 ieee.std_logic_arith.all; ENTITY decoder IS PORT(sel : IN UNSIGNED(2 DOWNTO 0); dout : OUT UNSIGNED(7 DOWNTO 0); END decoder;ARCHITECTURE decoder_arc OF decoder IS SIGNAL sel1 :INTEGER; BEGIN PROCESS(sel) BEGINsel1 dout dout dout dout dout dout dout dout = (1,0,0,0,0,0,0,0) AFTER 5 ns; END CASE; EN

43、D PROCESS; END decoder_arc; 此例不像上例那樣等待時間到此例不像上例那樣等待時間到1000ns以后再激活進程,而以后再激活進程,而是只要是只要sel的值一發(fā)生改變就激活進程,從第一句執(zhí)行直到滿足的值一發(fā)生改變就激活進程,從第一句執(zhí)行直到滿足條件后再被掛起。條件后再被掛起。下例是另一種激活進程的方式:下例是另一種激活進程的方式:ENTITY reg IS PORT(d,clk:IN BIT; q1,q2:OUT BIT); END reg; ARCHITECTURE reg_arc OF reg IS BEGIN PROCESS BEGIN WAIT UNTIL clk

44、= 1; q1 = d; END PROCESS; PROCESS BEGIN WAIT UNTIL clk= 0; q2 = d; END PROCESS; END reg_arc;進程行為語句之間是進程行為語句之間是并行關系,進程行為并行關系,進程行為語句內(nèi)部是順序關系。語句內(nèi)部是順序關系。VHDL的每個結構的每個結構體中可以有多個進程體中可以有多個進程行為語句。行為語句。它的關鍵之處是:它的關鍵之處是:三、三、VHDL的順序行為的順序行為順序行為語句可分為兩大類:順序行為語句可分為兩大類:條件控制類條件控制類,循環(huán)控制類循環(huán)控制類 在這兩類中選出六種在這兩類中選出六種 IF、CASE、F

45、OR、WHILE.LOOP、EXIT和和ASSERT進行討論進行討論 IF THEN ; ELSIF THEN ; ELSIF THEN ; ELSE ; END IF;1、IF語句語句IF語句的一般形式為:語句的一般形式為:ARCHITECTURE alarm_arc OF alarm ISBEGIN下面舉例說明下面舉例說明IF條件語句的用法。條件語句的用法。例例: 用用VHDL設計一家用告警系統(tǒng)的控制邏輯,它有來自傳感設計一家用告警系統(tǒng)的控制邏輯,它有來自傳感器的三個輸入信號器的三個輸入信號smoke、door、water和準備傳輸?shù)礁婢O備和準備傳輸?shù)礁婢O備的三個輸出觸發(fā)信號的三個輸出

46、觸發(fā)信號fire_alarm、burg_alarm、water_alarm以以及使能信號及使能信號en和和alarm_en。VHDL程序描述如下:程序描述如下:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY alarm IS PORT(smoke,door,water:IN std_logic; en,alarm_en :IN std_logic; fire_alarm,burg_alarm,water_alarm:OUT std_logic);END alarm;PROCESS(smoke,door,water,en,alarm_en) BEG

47、IN IF (smoke= 1) AND (en= 0) THEN fire_alarm = 1; ELSE fire_alarm = 0; END IF;IF (door= 1) AND (en= 0) AND (alarm_en= 0) THEN burg_alarm = 1; ELSE burg_alarm = 0; END IF;IF (water= 1) AND (en= 0) THEN water_alarm = 1; ELSE water_alarm = 0; END IF; END PROCESS; END alarm_arc;2、CASE 語句語句CASE語句的一般形式:語句

48、的一般形式:CASE IS WHEN ; WHEN | ; WHEN ; WHEN OTHERS ;END CASE; CASE語句是語句是VHDL提供的另一種形式的控制語句,每當提供的另一種形式的控制語句,每當單個表達式的值在多個起作用的項中選擇時,用此語句是較合單個表達式的值在多個起作用的項中選擇時,用此語句是較合適的,它根據(jù)所給表達式的值或域,選擇適的,它根據(jù)所給表達式的值或域,選擇“=”后面的執(zhí)行語句。后面的執(zhí)行語句。用用CASE語句應該注意三個問題:語句應該注意三個問題: 一,是關鍵字一,是關鍵字WHEN的數(shù)量不作限制,但不容許兩的數(shù)量不作限制,但不容許兩個語句用一個值;個語句用一個

49、值; 二,是所有二,是所有WHEN后面的值在后面的值在CASE語句中合起來的語句中合起來的值域中的全部;值域中的全部;三,是三,是WHEN的次序可以任意排定的次序可以任意排定信號可被看作兩個元件之間數(shù)據(jù)傳輸?shù)耐?,信號可被看作兩個元件之間數(shù)據(jù)傳輸?shù)耐罚?-4 VHDL的結構描述實體主要描述元件、端口與信號。實體主要描述元件、端口與信號。元件是硬件的描述,即門、芯片或者電路板。元件是硬件的描述,即門、芯片或者電路板。端口是元件與外界的連接點,數(shù)據(jù)通過端口進入或流出元件。端口是元件與外界的連接點,數(shù)據(jù)通過端口進入或流出元件。而信號則是作為硬件連線的一種抽象描述,它即能保持變化而信號則是作為硬件連線的一種抽象描述,它即能保持變化的數(shù)據(jù),又可以連接各個子元件。的數(shù)據(jù),又可以連接各個子元件。下面舉例說

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論