四、實驗
用VHDL 設計的狀態(tài)機的一般結構有以下幾部分組成:
1. 說明部分
說明部分中有新數(shù)據(jù)類型TYPE 的定義及其狀態(tài)類型(狀態(tài)名)和在此新數(shù)據(jù)類型下定義的狀態(tài)變量。狀態(tài)類型一般用枚舉類型,其中每一個狀態(tài)名可任意選取。但為了便于辨認和含義明確,狀態(tài)名最好有明顯的解釋性意義。狀態(tài)變量應定義為信號,便于信息傳遞。說明部分一般放在ARCHITECTURE 和BEGIN之間。
2. 主控時序進程:
狀態(tài)機是隨外部時鐘信號以同步時序方式工作的,因此狀態(tài)機中必須包含一個對工作時鐘信號敏感的進程作為狀態(tài)機的“驅(qū)動泵”。當時鐘發(fā)生有效跳變時,狀態(tài)機的狀態(tài)才發(fā)生變化。狀態(tài)機的下一狀態(tài)(包括再次進入本狀態(tài))僅僅取決于時鐘信號的到來。一般地,主控時序進程不負責進入的下一狀態(tài)的具體狀態(tài)取值。當時鐘的有效跳變到來時,時序進程只是機械地將代表下一狀態(tài)的信號next_state 中的內(nèi)容送入代表本狀態(tài)的信current_state 中,而信號next_state 中的內(nèi)容完全由其它的進程根據(jù)實際情況來決定。當然此進程中也可以放置一些同步或異步清零、置位方面的控制信號??傮w來說,主控時序進程的設計比較固定、單一和簡單。
3. 主控組合進程:
主控組合進程的任務是根據(jù)外部輸入的控制信號(包括來自狀態(tài)機外部的信號和來自狀態(tài)機內(nèi)部其它非主控的組合或時序進程的信號),或(和)當前狀態(tài)的狀態(tài)值確定下一狀態(tài)(next_state)的取向,即next_state的取值內(nèi)容,以及確定對外輸出或?qū)?nèi)部其它組合或時序進程輸出控制信號的內(nèi)容。
4. 普通組合進程
用于配合狀態(tài)機工作的其它組合進程,如為了完成某種算法的進程。
5. 普通時序進程
用于配合狀態(tài)機工作的其它時序進程,如為了穩(wěn)定輸出設置的數(shù)據(jù)鎖存器等。一個狀態(tài)機的最簡結構應至少由兩個進程構成(也有單進程狀態(tài)機,但并不常用)即一個主控時序進程和一個主控組合進程,一個進程作“驅(qū)動泵”,描述時序邏輯,包括狀態(tài)寄存器的工作和寄存器狀態(tài)的輸出;另一個進程描述組合邏輯,包括進程間狀態(tài)值的傳遞邏輯以及狀態(tài)轉(zhuǎn)換值的輸出。當然必要時還可以引入第3 個和第4 個進程,以完成其它的邏輯功能。
從一般意義上說進程間是并行運行的,但由于敏感信號的設置不同以及電路的延遲,在時序上進程間的動作是有先后的。在設計中,如果希望輸出的信號具有寄存器鎖存功能,則需要為此輸出寫第3 個進程,并把clk 和reset信號放入敏感信號表中。用于進程間信息傳遞的信號current_state 和next_state ,在狀態(tài)機設計中稱為反饋信號。狀態(tài)機運行中,信號傳遞的反饋機制的作用是實現(xiàn)當前狀態(tài)的存儲和下一個狀態(tài)的譯碼設定等功能。在VHDL中可以有兩種方式來創(chuàng)建反饋機制,即使用信號的方式和使用變量的方式,通常傾向于使用信號的方式。附圖8-1為一般狀態(tài)機結構圖。
圖8-1 一般狀態(tài)機結構框圖工作示意圖
附圖8-2和8-3為控制ADC0809采樣狀態(tài)機結構圖和狀態(tài)轉(zhuǎn)換圖
圖8-2 采樣狀態(tài)機結構框圖
設計提示:
設目標器件是EP1C6Q240C8,建議選擇實驗電路結構圖No.5(即結構圖No.5A,附圖1-14,由該圖可見,ADC0809的轉(zhuǎn)換時鐘CLK已經(jīng)事先接有750KHz的頻率),將實驗系統(tǒng)左下角選擇插針處的“轉(zhuǎn)換結束”和“A/D使能”用跳線帽短接。下載目標文件后,可用螺絲刀旋轉(zhuǎn)實驗系統(tǒng)左下角的電位器,以便為ADC0809提供變化的待測模擬信號,這時數(shù)碼管8和7將顯示ADC0809采樣輸出并被鎖存的數(shù)字值(16進制)。
圖8-3 控制ADC0809采樣狀態(tài)圖
圖8-4 控制ADC0809采樣時序圖
評論