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