




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第4章VHDL設計進階4.1學習VHDL的基本語句4.2了解VHDL的描述風格4.3有限狀態(tài)機的設計
4.1 學習VHDL的基本語句
4.1.1順序語句順序語句是相對于并行語句而言的,順序語句的特點:每一條順序語句的執(zhí)行順序與語句的書寫順序有關,即語句的先后順序有因果關系,這一點和傳統(tǒng)的軟件編程語言是十分相似的。這里的順序是從仿真軟件的運行或順應VHDL語法的編程思路而言的,相應的硬件邏輯工作方式未必如此。
順序語句通常用來描述各種邏輯功能,即算法的實現(xiàn)。
順序語句只能在進程(Process)和子程序(函數(shù)和過程)中使用。
VHDL有六種順序語句:賦值語句、流程控制語句、等待語句、子程序調(diào)用語句、返回語句、空操作語句。
1.賦值語句
【例4-1】用VHDL設計一個按鍵控制八個發(fā)光二極管,鍵按下時,間隔點亮;鍵松開時,都不亮。程序代碼如下:
賦值語句的功能就是將一個值或一個表達式的結果傳遞給某一數(shù)據(jù)對象,如信號或變量。VHDL設計實體內(nèi)的數(shù)據(jù)傳遞以及對外部數(shù)據(jù)的讀寫都是通過賦值語句來實現(xiàn)的。
賦值語句有兩種,即信號賦值語句和變量賦值語句。每一種賦值語句都由三個基本部分組成,即賦值目標、賦值符號和賦值源。賦值目標是所賦值的受體,它可以是信號或變量;賦值符號只有兩種,信號賦值符是“<=”;變量賦值符是“:=”;賦值源是賦值的主體,它可以是一個數(shù)值,也可以是一個邏輯或運算表達式。VHDL規(guī)定,賦值目標和賦值源的數(shù)據(jù)類型必須一致。
1)變量賦值與信號賦值
變量賦值語句及信號賦值語句的格式如下:
變量賦值目標:=賦值源;
信號賦值目標<=賦值源;
比較例4-2和例4-3,可以看出它們唯一的區(qū)別是對進程(process)中的a和b做了不同的定義,前者定義為信號而后者定義為變量。然而,它們綜合的結果卻有很大的不同,前者的電路圖是圖4-1,而后者的電路圖是圖4-2。
圖4-1例4-2的電路圖4-2例4-3的電路
信號賦值和變量賦值的區(qū)別:
(1)變量是局部、暫時性數(shù)據(jù)對象,它的有效性只局限于一個進程或一個子程序中,在進程內(nèi)部定義;信號具有全局特征,在進程的外部定義。
(2)變量的賦值是立即發(fā)生的;信號的賦值并不是立即發(fā)生的,而是在進程結束時進行的,同一進程中,同一信號賦值目標有多個賦值源時,信號賦值目標獲得的是最后一個賦值源的賦值。
(3)信號賦值符和變量賦值符的區(qū)別。
2)省略賦值(OTHERS=>X)
在位數(shù)較多的矢量賦值中,為了簡化表達可以使用短語“(OTHERS=>X)”作省略化的賦值,如以下語句:
以上兩條語句等同于A1<=“00000”、B1:=“11111111”,其優(yōu)點是在給位數(shù)較多的矢量賦值時簡化了表述,明確了含義,而且這種表述與位矢量的長度無關。
利用“(OTHERS=>X)”短語還可以在給位矢量的某些位賦值之后再用OTHERS給剩余的位賦值,如A1<=(1=>'1',4=>'1',OTHERS=>'0'),此賦值語句的含義是給矢量A1的第1位和第4位賦值為1,而其余位賦值為0,即A1<="10010"。
2.流程控制語句
流程控制語句是通過設置條件和判斷條件是否成立來控制語句的執(zhí)行的。這類語句共有五種:IF語句、CASE語句、LOOP語句、NEXT語句、EXIT語句。
1)
IF語句
IF語句是VHDL中最重要的語句結構之一,它根據(jù)語句中設置的一種或多種條件,有選擇地執(zhí)行指定的順序語句。IF語句的基本結構有以下四種:
(1)IF條件句THEN --第一種IF語句結構
順序語句;
ENDIF;
(2)IF條件句THEN --第二種IF語句結構
順序語句;
ELSE
順序語句;
ENDIF;
(3)IF條件句THEN --第三種IF語句結構
IF條件句THEN
順序語句;
ENDIF;
ENDIF;
(4)IF條件句THEN --第四種IF語句結構
順序語句;
ELSIF條件句THEN
順序語句;
ENDIF;
IF語句中至少要有一個條件句,條件句必須是一個BOOLEAN類型的表達式,即結果只能是TRUE或FALSE。
如:
IFATHEN…
IF(AandB)THEN…
這里的A和B都是布爾類型的標識符,IF語句根據(jù)條件句的結果,選擇執(zhí)行其后的順序語句。
下面簡要介紹這四種類型的IF語句。
(1)第一種結構是最簡單的IF語句結構。執(zhí)行此句時,首先判斷條件句的結果,若結果為TRUE,則執(zhí)行關鍵詞“THEN”和“ENDIF”之間的順序語句;若條件為FALSE,則不執(zhí)行,直接結束IF語句。這是一種非完整性的條件語句,通常用于產(chǎn)生時序電路。例如:
IF
(a>b)
THEN
Output
<=
‘1’;
ENDIF;
當條件句(a>b)成立時,向信號Output賦值1;不成立時,則直接結束IF語句,此信號維持原值。由于信號Output的值可以保持,即有記憶功能,因此這種語句通常用于產(chǎn)生時序電路。
(2)第二種IF語句結構可以實現(xiàn)條件分支功能,就是通過測定條件句的真假來決定執(zhí)行哪一組順序語句。和第一種結構相比,當條件為FALSE時,它并不結束IF語句的執(zhí)行,而是轉去執(zhí)行ELSE后面的另一組順序語句。這是一種完整性的條件語句,它給出了所有可能下的執(zhí)行情況,通常用于產(chǎn)生組合電路。例如:
IF
SELTHEN
Output<=A;
ELSE
Output<=B;
ENDIF;
當SEL的值為TRUE時,將A的值賦給信號Output;當SEL的值為FALSE時,則將B的值賦給Output。
(3)第三種IF語句是一種多重IF語句的嵌套結構,可以產(chǎn)生比較豐富的條件描述,既可以產(chǎn)生時序電路,也可以產(chǎn)生組合電路,或是兩者的混合。在使用這種結構時應注意,ENDIF結束句應該與IF條件句的數(shù)量一致,即有一個IF就要有一個ENDIF。
(4)第四種IF語句結構也可以實現(xiàn)不同類型的電路,該語句通過關鍵詞ELSIF設定多個條件,使順序語句的執(zhí)行分支可以超過兩個。這種語句結構有一個重要特點,就是語句中各個分支中的順序語句的執(zhí)行條件具有向上相與的特點。例如:
2)
CASE語句
CASE語句的詳細介紹請參見本書3.1.2小節(jié)。
CASE語句和IF語句也可以混合使用,例4-5是一個算術邏輯單元的VHDL描述,它在OPCODE信號的控制下分別完成加、減、相等或不相等比較等操作,程序在CASE語句中混合使用了IF語句。
3)
FOR_LOOP語句
FOR_LOOP語句就是循環(huán)語句,它可以使一組順序語句循環(huán)執(zhí)行,執(zhí)行次數(shù)由設定的循環(huán)變量決定。其語法格式如下:
[標號:]FOR循環(huán)變量,IN循環(huán)次數(shù)范圍LOOP
順序語句
ENDLOOP[標號];
FOR后面的循環(huán)變量是一個臨時變量,屬LOOP語句的局部變量,不必事先定義。使用時應注意,在LOOP語句范圍內(nèi)不要再使用與循環(huán)變量同名的標識符。
循環(huán)變量從循環(huán)次數(shù)范圍的初值開始,每執(zhí)行一次順序語句后自動加1,直到循環(huán)次數(shù)范圍指定的最大值。
例4-6利用異或運算的特點來檢測1的個數(shù),首先定義一個變量tmp,并將它的初始值設為0。若此變量與0作異或運算則保持不變,仍為0;若與1作異或運算則相當于取反,異或一次1結果為1,異或兩次1則結果為0,以此類推。顯然,若1的個數(shù)為奇數(shù)則結果為1,若1的個數(shù)為偶數(shù)則結果為0。
4)?NEXT和EXIT語句
NEXT和EXIT語句主要用在LOOP語句內(nèi)進行有條件的或無條件的轉向控制。例如:
EXIT語句和NEXT語句很相似,所不同的是EXIT是轉向循環(huán)的結束處,即跳出循環(huán)。
3.等待語句
WAIT語句主要有以下兩種形式:
WAITON信號表;
WAITUNTIL條件表達式;
4.子程序調(diào)用語句
和其他軟件編程語言一樣,VHDL也可以使用子程序(Subprogram),應用子程序的目的是更有效地完成重復性的工作。VHDL的子程序有過程(Procedure)和函數(shù)(Function)兩種形式,它們可以在VHDL程序的3個不同位置進行定義,即可以在程序包、結構體或進程中定義,只有在程序包中定義的子程序可以被其他設計調(diào)用。對子程序的調(diào)用可以有兩種語句方式,即順序語句方式和并行語句方式。
過程和函數(shù)都是利用順序語句來定義和完成算法的,即只能使用順序語句。在函數(shù)中所有的參數(shù)都是輸入?yún)?shù),而過程有輸入?yún)?shù)、輸出參數(shù)和雙向參數(shù);函數(shù)總是只有一個返回值,而過程可以提供多個返回值,或沒有返回值。在調(diào)用子程序時,函數(shù)通常作為表達式的一部分,常在賦值語句或表達式中使用,而過程往往單獨存在,其行為類似于進程。
在實際應用中必須注意,每一次調(diào)用子程序都會產(chǎn)生相同結構的電路模塊,即每調(diào)用一次子程序就意味著增加了一個硬件電路模塊,這和軟件中調(diào)用子程序有很大的不同。因此,在使用中要密切關注子程序的調(diào)用次數(shù)。
1)過程(Procedure)
定義過程的語句格式如下:
PROCEDURE過程名(參數(shù)表)
--過程首
PROCEDURE過程名(參數(shù)表)IS --過程體
[說明部分]
BEGIN
順序語句;
ENDPROCEDURE過程名;
過程語句由過程首和過程體兩部分組成,其中過程首不是必需的,過程體可以獨立存在和使用。在進程或結構體中定義過程時不必定義過程首,而在程序包中必須定義過程首。
在參數(shù)表中可以對常數(shù)、變量和信號這三類數(shù)據(jù)對象進行說明,并用關鍵詞IN、OUT和INOUT定義這些參數(shù)的模式,即信息的流向,默認的模式是IN。
過程體是由順序語句組成的,過程的調(diào)用即啟動了過程體的順序語句的執(zhí)行。過程體中的說明部分是局部的,即其中的各種定義只適用于過程體內(nèi)部。
例4-7中,當R和S同時為0時,RETURN語句將結束過程的執(zhí)行,無條件跳轉至END處。注意程序中的時間延遲語句和REPORT語句是不可綜合的。
調(diào)用過程的語句格式如下:
過程名[([形參名=>]實參表達式,
[形參名=>]實參表達式,…)];
其中,形參名是指在過程參數(shù)表中已說明的參數(shù)名,實參是調(diào)用過程的程序中形參的接受體。形參與實參的對應關系有名字關聯(lián)法和位置關聯(lián)法兩種表達方式,采用位置關聯(lián)法時可以省去形參名和關聯(lián)符。
例4-8是一個完整的程序,它先在自定義的程序包中定義了一個整數(shù)類型的子類型MY_TYPE和一個數(shù)組類型MY_ARRAY,然后在進程中定義了一個名為SWAP的局部過程(沒有放在程序包中的過程)。這個過程的功能是對一個數(shù)組中的兩個元素進行比較,如果發(fā)現(xiàn)這兩個元素的排序不符合要求,就進行交換。連續(xù)三次調(diào)用這個過程,就能將一個三元素的數(shù)組元素從小到大排列好。
2)函數(shù)(Function)
VHDL中有多種函數(shù)形式,如各種標準程序包中的預定義函數(shù)、轉換函數(shù)、決斷函數(shù)等。定義函數(shù)的語句格式如下:
FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型 --函數(shù)首
FUNCTION函數(shù)名(參數(shù)表)RETURN數(shù)據(jù)類型IS --函數(shù)體
[說明部分]
BEGIN
順序語句;
ENDFUNCTION函數(shù)名;
【例4-9】下面是函數(shù)定義的例子。
例4-9中的函數(shù)返回值由參數(shù)sel決定,當sel為高電平時返回“aANDb”的值;為低電平時則返回“aORb”的值。其對應的電路圖如圖4-3所示。
圖4-3函數(shù)opt對應的電路圖
例4-10在結構體中定義了一個名為SAM的函數(shù),然后在進程中調(diào)用了此函數(shù)。輸入端口A被列為進程的敏感信號,當A的三個位A(0)、A(1)、A(2)中的任何一個有變化時,就啟動對函數(shù)SAM的調(diào)用,并將返回值賦給M輸出。
3)子程序重載
子程序重載(RELOAD)指兩個或多個子程序使用相同的名字,也就是說,VHDL允許設計者用同一個名字書寫多個子程序,這些子程序的參數(shù)類型和返回值可以是不同的。
在調(diào)用這種重名的子程序時,VHDL根據(jù)下列因素決定調(diào)用哪一個子程序:
(1)子程序調(diào)用中出現(xiàn)的參數(shù)數(shù)目。
(2)調(diào)用中出現(xiàn)的參數(shù)類型。
(3)調(diào)用中使用名字關聯(lián)法時參數(shù)的名字。
(4)子程序為函數(shù)時返回值的類型。
例4-11在程序包中定義了3個名為MAX的函數(shù),它們的函數(shù)名相同,但參數(shù)類型是不同的,顯然,程序是根據(jù)調(diào)用時出現(xiàn)的參數(shù)類型來決定調(diào)用哪一個函數(shù)的。
注意:在定義子程序的形式參數(shù)時,可以不限定其長度和范圍,如例4-11中函數(shù)MAX的形參A、B均未限定長度,而是由實參的大小來決定的。這樣,該子程序就可以用于不同的情況。
5.返回語句(RETURN)
返回語句只能用于子程序(過程和函數(shù))中,有以下兩種格式:
RETURN; --第一種語句格式
RETURN表達式;
--第二種語句格式
第一種語句格式只能用于過程,它的功能是結束過程,并不返回任何值;第二種語句格式只能用于函數(shù),并且必須返回一個值。
6.空操作語句
NULL語句不做任何操作,它的功能就是使程序進入下一條語句的執(zhí)行。NULL語句常用于CASE語句中,用來代替其余可能出現(xiàn)的情況,如:
CASEOPCODEIS
WHEN“001”=>TMP:=AANDB;
WHEN“101”=>TMP:=AORB;
WHEN“110”=>TMP:=NOTA;
WHENOTHERS=>NULL;
ENDCASE;
4.1.2并行語句
VHDL中的并行語句主要有以下七種。
(1)塊(BLOCK)語句:由一系列并行運行的語句構成的組合體,功能是將這些并行語句組合成一個或多個子模塊。
(2)進程(PROCESS)語句:由順序語句組成,可按規(guī)定的條件將外部信號或內(nèi)部數(shù)據(jù)向其他信號進行賦值。
(3)并行信號賦值語句:將設計實體內(nèi)的處理結果向內(nèi)部信號或外部端口進行賦值。
(4)條件信號賦值語句:根據(jù)設定的條件向信號或端口進行賦值。
(5)選擇信號賦值語句:根據(jù)表達式的值向信號或端口進行賦值。
(6)元件例化語句:可以把其他的設計實體當作元件來調(diào)用,并將此元件的端口與其他的元件、信號或高層次實體的端口進行連接。
(7)生成語句:可以用來復制一組相同的設計單元。
1.塊(BLOCK)語句
一個設計實體原則上只能有一個結構體,但當電路功能比較復雜時,在一個結構體中進行描述就顯得很不方便。BLOCK語句的功能就是提供一種劃分機制,它允許設計者將一個大的設計實體劃分成若干個功能模塊,這種劃分只是形式上的,主要目的是改善程序的可讀性,對程序的移植、排錯和仿真也是有益的。
2.進程語句(PROCESS)要點
在前面有關章節(jié)中已多次提到進程(PROCESS)語句,并舉出很多示例(詳見3.1.2小節(jié))。進程語句是一種并行語句,在一個設計實體中可以有多個進程語句同時并發(fā)執(zhí)行,這和普通軟件編程語言有很大不同。
下面對進程語句使用中的注意事項和要點做出以下歸納:
(1)一個進程可以與其他進程同時運行,并可存取結構體或實體中所定義的信號,但不能在不同的進程中對同一信號進行賦值操作。
(2)盡管在同一進程中可以包含多個條件語句,但只允許有一個含有時鐘邊沿檢測的條件語句(如ifrising_edge(clk)…),即一個進程中只能描述針對同一時鐘信號的時序邏輯,而多時鐘邏輯必須由多個進程來描述。
(3)進程本身是并行語句,進程中的所有語句都是按順序執(zhí)行的。當進程的最后一個語句執(zhí)行完畢后,在敏感信號的觸發(fā)下,又從該進程的第一個語句開始重復執(zhí)行,但是如果沒有敏感信號的變化,這個進程不會工作。因此,為啟動進程,在進程語句中必須包含一個敏感信號表,或者包含一個WAIT語句。
(4)進程之間的通信是通過信號傳遞來實現(xiàn)的。信號具有全局性,它是進程之間進行聯(lián)系的重要途徑,因此,在進程說明部分不允許定義信號。
3.并行信號賦值語句
并行信號賦值語句是VHDL并行語句中最基本的結構,格式如下:
賦值目標<=表達式;
其中,賦值目標必須是信號,兩邊的數(shù)據(jù)類型必須一致。這類語句的最大特點是在結構體中的執(zhí)行是同時進行的,與書寫順序無關。一條并行信號代入語句實際上就是一個進程語句的縮寫,
例如:
ARCHITECTUREEXAMPLEOFTESTIS
BEGIN
OUT1<=IN1OR(IN2ANDIN3);--并行信號代入語句
ENDEXAMPLE;
此例中的并行信號代入語句實際上是如下進程的縮寫:
PROCESS(IN1,IN2,IN3)
BEGIN
OUT1<=IN1OR(IN2ANDIN3);
ENDPROCESS;
4.條件信號賦值語句
條件信號賦值語句的格式如下:
賦值目標<=表達式WHEN賦值條件ELSE
表達式WHEN賦值條件ELSE
…
表達式;
5.選擇信號賦值語句
選擇信號賦值語句的格式如下:
WITH選擇表達式SELECT
賦值目標<=表達式WHEN選擇值,
表達式WHEN選擇值,
…
表達式WHEN選擇值;
6.元件例化語句
元件例化語句由兩部分組成,第一部分將事先設計好的實體定義為一個元件,第二部分則是定義此元件與當前設計實體的連接關系。
(1)定義元件語句:
COMPONENT元件名
GENERIC(類屬表);
PORT(端口名表);
ENDCOMPONENT元件名;
(2)元件例化語句:
元件名PORTMAP(
[端口名=>]連接端口名,[端口名=>]連接端口名,…);
7.生成語句
生成語句有兩種形式,一種是FOR-GENERATE形式,即
[標號]:FOR循環(huán)變量IN取值范圍GENERATE
生成語句
ENDGENERATE[標號];
另一種是IF-GENERATE形式,即
[標號]:IF條件GENERATE
生成語句
ENDGENERATE[標號];
4.1.3其他語句
1.ASSERT語句和REPORT語句
ASSERT(斷言)語句和REPORT語句只能在仿真中使用,它們既可以作為順序語句使用,也可以作為并行語句使用。
2.屬性描述與定義語句
VHDL中的某些項目可以具有屬性(Attribute),如數(shù)據(jù)類型、過程、函數(shù)、信號、變量、常量、實體、結構體、配置、程序包、元件和語句標號等。屬性代表這些項目的某種特征,通??梢杂靡粋€值或一個表達式來表示。
VHDL提供了多種預定義屬性描述語句,可以通過這些語句來檢測或調(diào)用這些項目的各種屬性,這類語句有許多實際的用途,如表4-1所示。VHDL也允許用戶自己定義屬性。
屬性描述語句的格式是:
屬性測試項目名‘屬性名
下面將分類介紹屬性的用法。
1)信號類屬性
信號類屬性中最常用的是EVENT,即事件。EVENT用來檢測信號在一個極短的時間段內(nèi)有無“事件”發(fā)生,如果有,就返回一個布爾值TRUE,反之就返回布爾值FALSE。所謂事件是指信號電平的任何變化,如信號從0變?yōu)?,或從1變?yōu)?都是事件。
例如:
IF(CLK‘EVENTandCLK=’1‘)THEN…
其中,CLK'EVENT用來檢測CLK信號是否有“事件”,當CLK'EVENT和CLK='1'都為TRUE時,就說明CLK信號有一個上升沿。但必須注意,只有當CLK信號是BIT類型時才能用這種方式檢測上升沿,因為BIT類型只有0和1兩種取值。如果CLK是STD_LOGIC類型,它可能的取值有9種,當CLK'EVENT和CLK='1'都為TRUE時就不一定是上升沿了,此時應該用“IFRISING_EDGE(CLK)THEN…”來檢測信號的上升沿。
RISING_EDGE()和FALLING_EDGE()是STD_LOGIC_1164標準程序包中預定義的兩個函數(shù),可用來檢測標準邏輯信號的上升沿和下降沿。
STABLE的測試與EVENT恰好相反,即沒有事件時返回布爾值TRUE,而有事件時返回布爾值FALSE。下面兩條語句的功能是一樣的:
NOTCLK'STABLEANDCLK='1'
CLK'EVENTANDCLK='1'
2)數(shù)據(jù)區(qū)間類屬性
數(shù)據(jù)區(qū)間類屬性有?‘RANGE和?’REVERSE_RANGE。它們主要是對項目的取值區(qū)間進行測試,返回的不是一個數(shù)值,而是一個區(qū)間。
例如:
…
SIGNALSIG1:STD_LOGIC_VECTOR(0TO7);
…
FORiINSIG1'RANGELOOP;
…
此例中的FOR-LOOP語句相當于“FORiIN0TO7LOOP;”,即SIG1'RANGE返回的是位矢量SIG1定義的元素范圍。如果用REVERSE_RANGE,則返回的區(qū)間只好相反,是(7DOWNTO0)。
3)數(shù)值類屬性
數(shù)值類屬性主要用于對項目的一些數(shù)值特性進行測試,返回的是一個數(shù)值。這類屬性主要有?'LEFT、'RIGHT、'HIGH及?'LOW。
4)數(shù)組屬性
數(shù)組屬性('LENGTH)的用法同前三項,只是對數(shù)組的寬度進行測試。
4.1.4練習與測評
一、填空題
1.
VHDL語句可以分為________語句和________語句兩大類。
2.
NEXT語句主要用于在________語句執(zhí)行中進行有條件或無條件的________控制。
3.
VHDL的順序語句主要有________、________、________、________和________。
4.根據(jù)要求在橫線上填寫相應內(nèi)容。
if條件句then順序處理語句;
else順序處理語句;
endif;
條件成立,執(zhí)行________和________之間的順序處理語句;條件不成立,執(zhí)行________和________之間的順序處理語句。
5.根據(jù)要求在橫線上填寫相應內(nèi)容。
6.根據(jù)要求在橫線上填寫相應內(nèi)容。
7.有下列程序:
則其中循環(huán)變量I的變化范圍是________。
8.一般地,只有________格式的等待語句可以被綜合器接受(其余等待語句格式只能在VHDL仿真器中使用)。
9.進程語句是最基本、最常用的并行語句,同一結構體的不同進程之間是________關系。進程中邏輯描述語句是按________運行的,在進程中只能使用________語句。進程的主要組成部分有________,________和________。
10.進程中,只能將________列入敏感表,而不能將________列入敏感表,因為進程只對________敏感。進程的激活可由________表中的任一________信號的變化來啟動,否則必須有一個________語句來激勵。當進程中定義的任一________信號發(fā)生變化時,由順序語句定義的行為就要立即執(zhí)行一次,當進程中最后一個語句執(zhí)行完成后,執(zhí)行過程將返回到進程的第________個語句,以等待下一次________信號的變化。
11.將下列程序段轉換為WHEN-ELSE語句。
12.并行語句包括塊語句、進程語句、________、子程序調(diào)用語句、生成語句和________。
13.元件例化語句由兩部分組成,一部分是把一個現(xiàn)成的設計實體定義為一個元件,另一部分則是________。
14.子程序有兩種類型,即________和________。子程序可以在VHDL程序的________、________和________這三個不同位置進行定義,為了被不同的設計所調(diào)用,一般應該將子程序放在________中。子程序具有可________的特點,即允許子程序的________相同,但這些子程序的參數(shù)類型及返回值數(shù)據(jù)類型是不同的。
15.在橫線上說明SEL的選擇值。
16.過程語句由________和________兩部分組成,其中________不是必需的,________可以獨立存在和使用。在進程或結構體中定義過程時不必定義________,而在程序包中必須定義________。
17.元件例化語句中所定義的元件的端口名與當前系統(tǒng)的連接端口名的接口表達式有兩種:一種是名字關聯(lián)方式,另一種是________關聯(lián)方式。
18.條件信號賦值語句________(填允許或不允許)有重疊現(xiàn)象,這與CASE語句有很大的不同,同時條件信號賦值語句與IF語句功能相似,第一子句具有__________賦值優(yōu)先權。
19.執(zhí)行下列語句后,Q的值等于________。
二、選擇題
1.下列語句中,屬于順序語句的是()。
A.進程語句 B.?IF語句
C.元件例化語句 D.?WITH…SELECT語句
2.在VHDL中,IF語句中至少應有1個條件句,條件句必須由()表達式構成。
A.?BIT
B.?STD_LOGIC
C.?BOOLEAN D.任意
3.在VHDL的CASE語句中,條件句中的“=>”不是操作符,它只相當于()的作用。
A.?IF B.?THEN C.?AND D.?OR
4.在VHDL的FOR-LOOP語句中,循環(huán)變量是一個臨時變量,屬于LOOP語句的局部變量,()事先聲明。
A.必須
B.不必
C.其類型要 D.其屬性要
5.在VHDL中,用語句()表示檢測clock的上升沿;用語句()表示檢測clock的下降沿。
A.?clock‘EVENT
B.?clock’EVENTANDclock=‘1’
C.?clock=‘1’
D.?clock'EVENTANDclock='0'
6.下列選項中不屬于等待語句(WAIT)書寫方式的為()。
A.
WAIT
B.
WAITON信號表
C.
WAITUNTIL條件表達式
D.
WAITFOR時間表達式
7.下列選項中不屬于EXIT語句書寫方式的為()。
A.?EXIT
B.
EXITLOOP標號
C.
EXITLOOP標號WHEN條件表達式
D.
EXITLOOP標號CASE條件表達式
8.下列語句完全不屬于順序語句的是()。
A.WAIT語句B.NEXT語句
C.ASSERT語句D.REPORT語句
9.在VHDL中,下列對進程(PROCESS)語句結構及語法規(guī)則的描述正確的是()。
A.敏感信號發(fā)生更新時啟動進程,執(zhí)行完成后,等待下一次進程啟動
B.敏感信號參數(shù)表中,應列出進程中使用的所有輸入信號
C.進程由說明部分、結構體部分和敏感信號參數(shù)表三部分組成
D.當前進程中聲明的信號也可用于其他進程
10.進程中的變量賦值語句,變量更新是(),信號更新是()。
A.立即完成 B.按順序完成
C.在進程的最后完成 D.都不對
11.下列語句中,不屬于并行語句的是()。
A.進程語句
B.
CASE語句
C.元件例化語句
D.
WHEN-ELSE-語句
12.以下對于進程PROCESS的說法,正確的是()。
A.進程之間可以通過變量進行通信
B.進程內(nèi)部由一組并行語句來描述進程功能
C.進程語句本身是并行語句
D.一個進程可以同時描述多個時鐘信號的同步時序邏輯
13.進程語句中敏感信號列表的作用是()。
A.說明進程運行的結果
B.決定進程運行的先后順序
C.決定進程語句的啟動與否
D.實現(xiàn)進程語句的獨立性
14.以下關于VHDL中順序語句和并行語句的區(qū)別,不正確的是()。
A.順序語句按語句的排列順序執(zhí)行,并行語句只執(zhí)行被激活的語句
B.并行語句體現(xiàn)了硬件電路的并行性
C.順序語句可直接構成結構體,而并行語句則不能
D.順序語句用于描述模塊的算法,并行語句用于描述模塊間的連接關系
15.在元件例化(COMPONENT)語句中,用()符號實現(xiàn)名稱映射,將例化元件端口聲明語句中的信號名與PORTMAP中的信號名關聯(lián)起來。
A.= B.:= C.<= D.=>
16.當一個結構體中包含多個進程(Process)時,各進程之間依靠()來傳遞信息。
A.常量(Constant)
B.變量(Variable)
C.信號(Signal)
D.塊語句(Block)
17.元件例化語句的作用是()。
A.描述元件模塊的算法
B.改善并行語句及其結構的可讀性
C.產(chǎn)生一個與某元件完全相同的一組并行元件
D.在高層次設計中引用前面已經(jīng)設計好的元件或電路模塊
18.關于元件例化語句的元件聲明的作用,以下說法中正確的是()。
A.說明所引用元件的邏輯功能
B.說明所引用元件的端口信息
C.說明所引用元件的個數(shù)
D.說明所引用元件的存儲位置
19.過程調(diào)用前需要將過程的過程首和過程體裝入()中。
A.源程序
B.結構體 C.程序包 D.設計實體
20.
VHDL的設計實體可以被高層次的系統(tǒng)(),成為系統(tǒng)的一部分。
A.輸入
B.輸出 C.仿真
D.調(diào)用
21.除了塊語句之外,下列語句中同樣可以將結構體并行描述分成多個層次的是()。
A.元件例化語句(COMPONENT)
B.生成語句(GENERATE)
C.報告語句(REPORT)
D.空操作語句(NULL)
22.以下不是生成語句(GENERATE)組成部分的是()。
A.生成方式B.說明方式C.并行語句D.報告語句
23.斷言語句對錯誤判斷級別最高的是()。
A.?Note(通報)
B.?Warning(警告)
C.?Error(錯誤)
D.?Failure(失敗)
24.下列選項中不屬于過程調(diào)用語句(PROCEDURE)參量表中可定義的流向模式的為()。
A.?IN B.?INOUT
C.?OUT D.?LINE
25.下列重載方式中,不屬于VHDL的是()。
A.函數(shù)重載
B.運算符重載
C.別名
D.元件重載
三、分析題
1.分析下列程序段是否正確,如果不正確,請指出錯誤原因并加以改正。
四、簡答題
1.比較CASE語句和WITH-SELECT語句,敘述它們的異同點。
2.寫出幾種時鐘信號的具體描述形式。
3.過程和函數(shù)可以定義在一個VHDL程序的哪些位置?過程與函數(shù)的異同點是什么?
4.什么是重載函數(shù)?重載函數(shù)有何用處?請說出下列運算符重載函數(shù)的含義:
FUNCTION"+"(l,r:integer)RETURNinteger;
FUNCTION"+"(l,r:bit_vector)RETURNinteger;
FUNCTION"+"(l,r:std_logic_vector)RETURNinteger;
5.為什么說一條并行信號代入語句可以等效為一個進程?它怎樣實現(xiàn)敏感信號的檢測?
2.根據(jù)如圖4-4所示的原理圖,用IF語句實現(xiàn)以下功能:
當clr等于0時,q等于0;當clr不等于0且clk上升沿到時,q等于d;無論何種狀況下,qn始終等于q值取反。
圖4-4原理圖
3.分別用CASE語句和IF語句設計3-8譯碼器和4選1選擇器。
4.下列程序是一個10線-4線優(yōu)先編碼器的VHDL描述,試將其補充完整。
5.將以下程序轉換為WHEN-ELSE語句。
6.設計一個數(shù)據(jù)選擇器MUX,其系統(tǒng)模塊圖和功能表如圖4-5和圖4-6所示。試采用下面四種方式來描述該數(shù)據(jù)選擇器MUX的結構體:①用IF語句;②用CASE語句;③用WHEN-ELSE語句;④用WITH-SELECT語句。
圖4-5系統(tǒng)模塊圖圖4-6系統(tǒng)功能表
7.根據(jù)下述例化程序畫出相對應的原理圖。
8.根據(jù)如圖4-7所示的原理圖,用WHEN-ELSE語句實現(xiàn)以下功能:
當tri='0'時,op<=in1ANDin2;否則op<='z'。
問題:進程1執(zhí)行后x和y的結果是什么?進程2執(zhí)行后x和y的結果是什么?根據(jù)兩個進程的執(zhí)行結果,可以得出什么結論?
圖4-7系統(tǒng)原理圖
4.2 了解VHDL的描述風格
于同樣的電路功能,可以使用不同的語句和不同的描述方式來表達,在VHDL中,通常將各種不同的描述方式歸納為:行為描述、RTL描述和結構描述三類。VHDL通過這三種描述方式,或稱描述風格,從不同的側面描述結構體的行為方式。
4.2.1行為描述
1.案例分析
【例4-13】
2選1多路開關行為描述(見圖4-8)。
圖4-82選1多路開關符號圖
2.知識點
如果在結構體中只是描述了電路的功能或者說電路的行為,而沒有涉及實現(xiàn)這些行為的硬件結構,則稱這種描述風格為行為描述。這里所謂的硬件結構是指具體硬件電路的連接關系、邏輯門的組成結構、元件或其他各種功能單元的層次結構等。行為描述只涉及輸入與輸出之間的轉換關系,即規(guī)定電路的行為,而不包含任何結構信息。
行為描述方式通常是指含有進程的非結構化的邏輯描述,由一個或幾個進程構成,每一個進程又包含了一系列順序語句。
行為描述是一種抽象程度比較高的描述方式,這種方式的優(yōu)越性在于它可以使設計者專注于電路功能(行為)的設計,而不必過多地考慮具體的硬件結構,只有這樣,才能滿足自頂向下的設計流程的要求??梢哉f,沒有行為描述,就沒有EDA技術。
與其他硬件描述語言相比,VHDL更適合進行行為描述,因此有人把VHDL稱為行為描述語言。
4.2.2RTL描述
1.案例分析
【例4-14】2選1多路開關RTL描述(見圖4-9)。
圖4-92選1多路開關原理圖
2.知識點
RTL描述也稱數(shù)據(jù)流描述,RTL是寄存器傳輸語言的簡稱。一般來說,RTL描述主要是通過并行信號賦值語句實現(xiàn)的,類似于布爾方程,可以描述時序電路,也可以描述組合電路,它既含有硬件電路的結構信息,又隱含表示某種行為。
與行為描述相比,RTL描述能更直接地對電路的低層邏輯結構進行控制。
一般來說,用RTL方式完成的設計可控性好,綜合優(yōu)化的效率也更高。當然,用這種描述風格進行設計對設計人員的要求也更高,通常從事ASIC(專用集成電路)開發(fā)和IC設計均應使用這種描述方式。一般認為Verilog語言更適合進行RTL描述。
4.2.3結構描述
1.案例分析
【例4-15】全加器電路結構描述(見圖4-10)。
圖4-10一位全加器邏輯原理圖
2.知識點
VHDL的結構描述是一種基于元件例化語句或生成語句的描述風格,結構描述就是描述元件之間的互聯(lián)關系,它將一個大的設計劃分成若干個小的單元,逐一完成各單元的設計,然后用結構描述的方式將它們組裝起來,形成更為復雜的設計,體現(xiàn)了模塊化的設計思想。
4.2.4練習與測評
一、填空題
1.在VHDL中,通常將各種不同的描述方式歸納為________、________和________。在這三種描述風格中,________抽象程序最高,最能體現(xiàn)VHDL描述高層次結構和系統(tǒng)的能力,故我們常把VHDL稱為________語言。具備________描述能力的硬件描述語言是實現(xiàn)________設計方式的基本保證。
2.數(shù)據(jù)流的描述風格一般是建立在用________語句描述的基礎上的,數(shù)據(jù)流描述方式能比較直觀地表達底層________行為。
3.VHDL結構型描述風格是基于________語句或________語句的應用,利用這種語句可以用不同類型的結構完成多層次的工程,其風格最接近實際的________結構。
二、選擇題
1.行為描述是指對()進行描述。
A.實體的邏輯功能 B.實體的內(nèi)部結構
C.實體的工作方式 D.實體的外部特征
2.結構描述是指對()進行描述。
A.實體的邏輯功能 B.實體的內(nèi)部結構
C.實體的工作方式 D.實體的外部特征
3.行為描述一般采用()來實現(xiàn)。
A.進程語句(Process)
B.賦值語句
C.子程序調(diào)用語句 D.元件例化語句
4.結構描述一般采用()來實現(xiàn)。
A.進程語句(Process)
B.賦值語句
C.子程序調(diào)用語句 D.元件例化語句
三、設計題
1.設計一個三輸入與非門電路,要求采用行為描述方式、寄存器描述方式和結構體描述方式分別進行設計。
2.以數(shù)據(jù)流的方式設計一個兩位比較器,再以結構描述方式將已設計好的比較器連接起來,構成一個八位比較器。
4.3 有限狀態(tài)機的設計
4.3.1案例分析
【例4-16】用狀態(tài)機描述步進電機雙三拍脈沖分配器。分析:該電路的輸入端包括清零、時鐘,輸出為三位端口。電路功能詳見狀態(tài)轉換圖(見圖4-11)。圖4-11帶雙三拍脈沖分配器狀態(tài)轉換圖
設計要點:
(1)用VHDL設計狀態(tài)機,需要在說明部分定義“狀態(tài)”數(shù)據(jù)類型(states),并定義信號“現(xiàn)態(tài)”(current_state)、“次態(tài)”(next_state)為此類型。在功能描述部分用時序邏輯進程和組合邏輯進程分別描述狀態(tài)機的工作方式和各狀態(tài)間的關系。
(2)TYPE命令定義states為枚舉型數(shù)據(jù)類型,取值包括st0、st1、st2、st3。
4.3.2知識點
1.用VHDL設計有限狀態(tài)機
用VHDL設計的狀態(tài)機一般由以下幾部分組成:
1)說明部分
在說明部分中要用TYPE語句定義新數(shù)據(jù)類型,一般用枚舉類型,它的每一個取值均代表系統(tǒng)工作時的一個狀態(tài),狀態(tài)名可任意選取。然后使用這個新的數(shù)據(jù)類型定義若干個狀態(tài)變量,狀態(tài)變量要定義為信號,以便在各個進程間傳遞信息。
說明部分一般放在ARCHITECTURE和BEGIN之間:
2)主控時序進程
實際的狀態(tài)機一般都是在外部時鐘信號的控制下,以同步方式工作的,因此,狀態(tài)機中必須包含一個對時鐘信號敏感的進程,作為狀態(tài)機的“驅動泵”。當時鐘信號到來時,狀態(tài)機的狀態(tài)才發(fā)生變化。一般地,在主控時序進程中只是將代表下一狀態(tài)的狀態(tài)變量(信號)的值送給代表當前狀態(tài)的狀態(tài)變量,而狀態(tài)變量的具體內(nèi)容則由其他進程來決定。當然,此進程中也可放置一些清零或復位方面的控制信號??偟膩碚f,主控時序進程的設計比較單一和簡單。
3)主控組合進程
主控組合進程的任務是根據(jù)外部輸入的控制信號(包括來自狀態(tài)機內(nèi)部的其他進程的信號)和(或)當前的狀態(tài)值確定下一狀態(tài)的取值,以及確定對外輸出或對內(nèi)部其他進程輸出控制信號的內(nèi)容。
通常一個狀態(tài)機應至少由兩個進程構成,即一個主控時序進程和一個主控組合進程。主控時序進程作為“驅動泵”,描述時序邏輯,包括寄存器狀態(tài)的輸出;主控組合進程描述組合邏輯,包括進程間狀態(tài)值的傳遞以及狀態(tài)轉換值的輸出。當然,必要時還可引入其他進程,以完成其他的邏輯功能。
下面采用狀態(tài)機的設計方法,實現(xiàn)一個序列檢測器的設計。
序列檢測器可用于檢測二進制碼組成的脈沖序列信號,當序列檢測器接收到一組串行二進制碼后,如果這組碼與序列檢測器中預先設置的碼相同,則輸出1,表示檢測到正確的序列碼,否則輸出0。
由于這種檢測的關鍵在于序列碼的接收必須是連續(xù)的,因此要求檢測器必須記住前一次的碼以及正確的序列,直到在連續(xù)的檢測中所收到的每一位碼都與預置的碼相同。狀態(tài)機用于序列檢測器的設計比其他方法更能顯示其優(yōu)越性。
例4-17描述的檢測器完成對8位序列碼“11001000”的檢測,當輸入序列信號左移(高位在前)進入檢測器后,若與預置的序列碼相同則輸出1,否則輸出0。因為要求檢測的序列碼有8位,所以需要8個狀態(tài)(S0~S7)。檢測器每收到一位符合要求的串行碼,就需要一個狀態(tài)進行記憶。
檢測器的狀態(tài)轉移圖如圖4-12所示。
圖4-12序列碼檢測器狀態(tài)轉移圖
序列檢測器的具體分析如下:
(1)檢測器狀態(tài)機在S0狀態(tài):當接收到的一位串行碼為1,則狀態(tài)機進入到S1狀態(tài),否則狀態(tài)機停留在S0狀態(tài)。
(2)檢測器狀態(tài)機在S1狀態(tài):當接收到的一位串行碼為1,則狀態(tài)機進入到S2狀態(tài),否則返回到S0狀態(tài),因為10不是所要檢測的序列碼的前兩位碼,因此要返回到狀態(tài)機初始狀態(tài)重新開始。
(3)檢測器狀態(tài)機在S2狀態(tài):當接收到的一位串行碼為0,則狀態(tài)機進入到S3狀態(tài),否則停留在S2狀態(tài),因為111不是所要檢測的序列碼的前三位,但11可能是所要檢測的序列碼的前兩位。
(4)檢測器狀態(tài)機在S3狀態(tài):當接收到的一位串行碼為0,則狀態(tài)機進入到S4狀態(tài),否則返回到S1狀態(tài),因為1101不是所要檢測的序列碼的前四位,但剛剛接收到的“1”可能是所要檢測的序列碼的第一位,因此要返回到S1狀態(tài)。
(5)檢測器狀態(tài)機在S4狀態(tài):當接收到的一位串行碼為1,則狀態(tài)機進入到S5狀態(tài),否則返回到S0狀態(tài),因為11000不是所要檢測的序列碼的前五位。
(6)檢測器狀態(tài)機在S5狀態(tài):當接收到的一位串行碼為0,則狀態(tài)機進入到S6狀態(tài),否則返回到S2狀態(tài),因為110011不是所要檢測的序列碼的前六位碼,但11可能是所要檢測的序列碼的前
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東省廣州市白云區(qū)2023-2024學年五年級下學期語文期末試卷(含答案)
- 2025年度品牌形象設計委托合同協(xié)議書范本
- 2025年智能設備采購合同范本
- 2025年內(nèi)蒙古勞動合同書模板
- 2025電子產(chǎn)品租賃合同模板
- 2025租賃合同違約金條款
- 2025授權代理的合同范本協(xié)議
- 2025年簽訂服務合同的關鍵注意事項
- 2025汽車購買合同協(xié)議書
- 2025碩士勞動合同爭議調(diào)解
- 廣州市黃埔區(qū)教育局招聘事業(yè)編制教職員考試真題2024
- 國際經(jīng)濟學(下冊國際金融)克魯格曼-中文答案
- 2025年寧夏銀川市唐徠中學南校區(qū)中考一模英語試題(原卷版+解析版)
- 鄉(xiāng)村民宿開發(fā)管理運營手冊
- 殯葬服務筆試題庫及答案
- 2025年光大銀行校園招聘筆試參考題庫(帶答案)
- 中醫(yī)康復理療師職業(yè)指導試題及答案
- 全過程工程咨詢投標方案(技術方案)
- 研究生教育高質(zhì)量發(fā)展新動能推動方案
- 寧波十校2025屆高三3月聯(lián)考語文試卷(含答案解析)
- 在線網(wǎng)課學習課堂《人工智能(北理 )》單元測試考核答案
評論
0/150
提交評論