时序逻辑电路的设计与分析
目錄
?
1.時序邏輯電路的基本結構與分類
1.1時序電路的基本結構
1.2異步與同步時序電路
1.3米利型和穆爾型時序電路
2.時序邏輯電路功能的表達
2.1邏輯方程組
2.2轉換表
2.3狀態表
2.4狀態圖
2.5時序圖
3.同步時序電路的分析
3.1分析同步時序邏輯電路的一般步驟
3.2同步時序邏輯電路分析實例
3.2.1穆爾型電路示例
3.2.2米利型電路示例
4.同步時序邏輯電路的設計
4.1設計同步時序邏輯電路的一般步驟
4.1.1由給定的邏輯功能建立原始狀態圖和原始狀態表
4.1.2狀態化簡
4.1.3狀態分配
4.1.4選擇觸發器類型
4.1.5確定激勵方程組和輸出方程組
4.1.6畫出邏輯圖,并檢查自校正能力
4.2同步時序邏輯電路設計實例
4.2.1用觸發器設計一個同步遞增8421計數器
不能自校正電路的修改方法
4.2.2用觸發器設計一個給定原始狀態圖的邏輯功能的同步時序電路
4.2.3用觸發器設計一個簡易的自動售貨機
1.時序邏輯電路的基本結構與分類
1.1時序電路的基本結構
時序電路的基本結構如下圖所示,它由完成邏輯運算的組合電路和起記憶作用的存儲電路兩部分構成,其中,存儲電路由觸發器或鎖存器組成。為了方便,圖中各組邏輯變量均已向量形式表示,其中,為輸入信號,為輸出信號,為驅動存儲電路轉換為下一狀態的激勵信號,而為存儲電路狀態,稱為狀態信號,亦稱為狀態變量,它表示時序電路當時的狀態,稱為現態。狀態變量被反饋到組合電路的輸入端,與輸入信號一起決定時序電路的輸出信號,并產生對存儲電路的激勵信號,從而確定電路的下一狀態,即次態。
上述四組變量間的邏輯關系可用下列三個向量函數形式的方程來表達:,,?。其中,表達了激勵信號與輸入信號,狀態變量的關系,稱為時序電路的激勵方程。表達了存儲電路從現態到次態的轉換,故稱為狀態轉換方程,簡稱轉換方程,和分別表示存儲電路的現態和次態。表達了時序電路的輸出信號與輸入信號、狀態變量的關系,稱為輸出方程。
如上所述,時序電路是狀態依賴的,故而又稱為狀態機(State Machine,SM)。有限數量的存儲單元構成的狀態機的狀態數是有限的,稱為有限狀態機(Finite State Machine,FSM)。
根據上述時序電路的結構和方程可見,時序電路具有以下特征:
(1)時序電路由組合電路和存儲電路構成;
(2)時序電路的狀態與時間因素相關,即時序電路在任一時刻的狀態變量不僅是輸入信號的函數,而且還是電路以前狀態的函數,并由當前輸入變量和狀態決定電路的下一狀態(因此,不同于組合電路,時序電路無法依據輸入輸出方程直接還原到原始電路);
(3)時序電路的輸出信號由輸入信號和電路狀態共同決定。
1.2異步與同步時序電路
存儲電路中根據存儲單元改變的特點,可以將時序電路分為同步時序電路和異步時序電路兩大類,在同步時序電路中,所有存儲單元的狀態改變是在統一的時鐘脈沖控制下同時發生的。在異步時序電路中,各存儲單元的狀態改變不是同時發生的,時鐘脈沖只控制存儲電路中的部分存儲單元,其他則靠輸入信號或時序電路內部信號來控制,甚至還有些異步時序電路(例如SR鎖存器)沒有時鐘脈沖,只靠輸入信號經過內部電路傳遞去控制存儲單元。而根據電路是對脈沖邊沿敏感還是電平敏感,異步時序電路又分為脈沖異步時序電路(由觸發器構成)和電平異步時序電路(由鎖存器構成)兩種。
異步時序電路的狀態轉換取決于以任意時間間隔變化的輸入信號序列,若有多個信號輸入,其存儲電路的狀態轉換因存在時間差異而可能造成短時間輸出狀態的不穩定,而且這種不穩定的狀態有時是不容易判定的,常常給電路設計和調試帶來困難。
不同于異步時序電路,同步時序電路中存儲電路狀態的轉換是在同一時鐘脈沖源的同一邊沿作用下同步進行的,它也稱作時鐘同步狀態機(Clocked Synchronous SM),結構如下圖所示:
同步時序電路的存儲電路一般用觸發器實現,所有觸發器的時鐘輸入都應該接在同一個時鐘脈沖源上,而且它們的時鐘脈沖觸發沿也都應一致。因此,所有觸發器的狀態更新是在同一時刻,其輸出狀態變換的時間差異很小。 在時鐘脈沖兩次作用的間隔期間,從觸發器輸入到狀態輸出的通路被切斷,即使此時輸入信號發生變化,也不會改變個觸發器的輸出狀態,所以較少發生因狀態轉換不同步而引起的輸出狀態不穩定的現象。更重要的是,同步時序電路的狀態很容易用固定周期的時鐘脈沖沿清楚地分離為序列步進。其中,每一個步進都可以通過輸入信號和所有觸發器的現態單獨進行分析,從而有一套較系統、易掌握的分析與設計方法,電路行為也很容易用HDL來描述。所以,目前結構較復雜、運行速度較高的時序電路廣泛采用同步方法來實現。很多大規模可編程邏輯器件的應用電路和專用集成電路的設計,也都采用同步時序電路的結構。
結論:異步設計的毛刺無法避免,時序設計過于費時費力,其所需調整的時序路徑和需要附加的相關約束相當繁瑣,現在的EDA 工具都是基于時序驅動的優化策略,異步時序電路增加了時序分析的難度,需要確定最佳時序路徑所需的計算量超出想像。而同步設計不僅能有效地避免毛刺的影響,使得設計更可靠;還能夠使設計出的同步時序電路更易于分析及實現;不僅僅如此,目前幾乎所有的仿真工具都僅能支持同步仿真,所以在FPGA設計中極力推薦使用同步設計方法,除非在某些特殊的場合。
在進入時序電路的分析前,先解釋一下穆爾和米利的概念,在時序電路中,可以根據輸出信號的特點,將其分為穆爾(Moore)型和米利(Mealy)型時序電路。在穆爾型時序電路中,輸出信號僅僅取決于存儲電路的狀態;在米利型時序電路中,輸出信號不僅取決于存儲電路的狀態,而且還取決于外部輸入信號。
1.3米利型和穆爾型時序電路
米利型時序電路的結構如下圖所示,實際上是將時序邏輯的基本結構圖(見1.1)中的組合電路查拆解成激勵組合電路和輸出組合電路兩部分。米利型時序電路的輸出信號是狀態變量和輸入信號二者的函數,即。這種時序電路在時鐘脈沖的兩個觸發沿之間,輸出信號隨時可能受到非時鐘同步的輸入信號作用而發生變化,從而影響電路輸出的同步性。
?穆爾型時序電路是米利型時序電路的一種特例,它的輸出信號僅僅是狀態變量的函數,即,結構如下圖所示。穆爾型時序電路的輸出僅取決于時鐘同步的個觸發器的狀態,在時鐘脈沖沿觸發的間隔期間,不受非同步的輸入信號影響。實際上,米利型時序電路中有時也有一個或多個輸出可能是穆爾型的,即它們的輸出只取決于觸發器的狀態。
在現代高速時序電路設計中,?一般盡量采用穆爾型時序電路結構,以利于后續高速電路的同步。在米利型時序電路的輸出端增加一級存儲電路,構成“流水線輸出”形式,是將其轉化為穆爾型電路的最簡單的方法,電路結構入下圖所示。需要注意的是,流水線存儲電路將輸出信號延遲一個時鐘周期。雖然流水線輸出電路增加了一些邏輯元件,但它的輸出信號同步特性更好,具有更好的穩定性和抗干擾性能。在大規模集成電路技術成熟的今天, 節省邏輯元件的數量經常不再是邏輯電路設計追求的唯一目標,電路工作的穩定性和可靠性,以及工作速度的提高才是更重要的追求。
2.時序邏輯電路功能的表達
時序電路的功能可用邏輯方程組、轉換表、狀態圖和時序圖等形式來表達,也可以用HDL語言描述。理論上講,有了激勵方程組、轉換方程和輸出方程組,時序電路的功能就被唯一地確定了。但是,對于許多時序電路而言,僅從這三組方程還不易判斷其邏輯功能,在設計時序電路時,也往往很難根據所給出的邏輯需求直接寫出這三組方程(就像知道人的壽命是各個因素的函數,但是由于變量過于復雜, 并且變量之間又有很復雜的關系,所以沒法直接寫出函數)。因此,還需要用能夠直觀反應電路狀態變化序列全過程的轉換表、狀態表和狀態圖來幫助。三組方程、轉換表、狀態表和狀態圖之間可以實現相互轉換,根據其中任意一種表達方式,都可以畫出時序圖。
以下圖中的同步時序電路為例,它由組合電路和存儲電路兩大部分組成。其中,存儲部分由兩個觸發器、構成,兩者共用一個時鐘信號,從而構成一個同步時序電路。
組合電路又分為激勵電路和輸出電路兩部分。電路的輸入信號為,輸出信號為、。對觸發器和的激勵信號分別為和,和為電路的狀態變量。從圖中可以看出,輸出信號為是狀態變量和和輸入信號的函數,所以從總體上看,zh而是一個米利型時序電路;但是,輸出信號純粹由狀態變量和決定,電路中又存在一個穆爾型輸出。
2.1邏輯方程組
(1)激勵方程組
根據上述組合電路,寫出對兩個觸發器的激勵方程組,。
(2)轉換方程組
將上述兩個觸發器的激勵方程組分別帶入觸發器的特性方程,于是,得到轉換方程組,,。以上兩式表明,觸發器的次態和是輸入變量和觸發器現態和的函數。
(3)輸出方程組
由邏輯圖中兩個輸出變量和,根據輸出組合電路得到輸出方程組,。顯然,是穆爾型輸出,是米利型輸出。
上述三組方程中,激勵方程組和輸出方程組表達了時序電路中全部組合電路的特性,而轉換方程組則表達了存儲電路從現態到次態的狀態轉換特性。轉換方程兩邊的狀態變量,分別以上標表示現態,以上標表示次態,以區別這種不同的狀態。
2.2轉換表
根據邏輯方程組中的轉換方程組和輸出方程組列出真值表,如下表所示。真值表的輸入變量為、和,輸出變量為、和、。由于該真值表反應了觸發器從現態到次態的轉換,故稱為狀態轉換真值表。一般來說,有位狀態變量和位輸入信號,就存在種狀態-輸出組合,真值表就有行。
在分析和設計時序電路時,更常用的是轉換表,如下表所示。它與上面的真值表完全等效,但形式更緊湊明了。下表用矩陣形式表達出在不同現態和輸入條件下,電路的狀態轉換和輸出邏輯值。表中,輸出信號是穆爾型輸出,故將其與現態對應的邏輯值單列一欄;輸出信號的邏輯值不僅取決于和,而且還會跟隨變化,所以表示在和兩欄的斜線后面。需要注意的是,雖然它與斜線前的次態列在一起,但仍是現態和輸入的函數。
注:穆爾型輸出由于不受輸入的影響,僅受現態影響,因此將其單獨寫在一列。
2.3狀態表
轉換表以各觸發器邏輯值的編碼表示時序電路的狀態。在分析一個電路時,給每個編碼狀態分別賦予一個具體名稱有時便于與實際問題結合進行分析與記憶;時序電路設計過程中,在尚未進行狀態分配前,也必須首先給各個狀態命名,以表達狀態之間的轉換關系。簡單地給本例中地四個狀態分別命名為,,,。當然,也可以用意義更明顯的中、英文單詞或數字對狀態命名。將2.2中的轉換表中的狀態用狀態名替代,得到狀態表如下表(表中,表示現態,表示次態,斜線后的邏輯值為輸出變量的值)。
相比于轉換表,使用狀態表更容易理解時序電路的行為和結果。如果狀態明明合理,即使較復雜的時序電路,直接通過狀態名就可以得到各狀態的實際意義和轉換關系(以投幣機為例,用“已投幣0元”代表狀態00,用“已投幣1元”代表狀態01,用“已投幣2元”代表狀態10,用“已投幣3元”代表狀態11。這里僅為示意,對狀態命名可以更加清晰地明白各個狀態轉換之間的邏輯關系)。但是,狀態表中的狀態變量沒有標明編碼,與時序電路的3個邏輯方程組及實際電路圖難以聯系,這方面的信息少于轉換表。轉換表和狀態表雖然形式和內容相似,然而在應用上是有差別的。
2.4狀態圖
將2.3中的狀態表轉換為如下圖所示的狀態圖(逐行按狀態和轉換條件填入),可以更直觀地表示出時序電路運行中的全部狀態、各狀態間相互轉換的關系以及轉換的條件與結果。圖中,每一個圓圈都對應著一個狀態,圓圈中標出表狀態名;每一個帶箭頭的方向線都表示一個轉換,箭頭指示出狀態轉換的方向。當方向線的起點和中終點都在同一個圓圈上時,則表示狀態不變。引起該狀態轉換的輸入變量邏輯值在方向線旁斜線左側,如圖中值。米利型輸出變量的邏輯值標在方向線旁斜線右側,是本次狀態轉換前的邏輯值,如圖中值,它由方向線起點的狀態和斜線前的輸入變量共同決定。而穆爾型輸出變量的邏輯值則標在圓圈內的狀態名后,因為狀態一旦確定,其輸出值隨之確定,如圖中值。當設計時序電路時,首先需要畫出這種形式的狀態圖,以明確狀態的數目、狀態轉換的方向以及狀態轉換的條件和相應的輸出信號。
狀態圖也可以與狀態表相對應,如下表所示,圓圈中以二進制編碼表示狀態,在分析時序電路時可先得到這種形式的狀態圖,然后再進一步研究其功能。
需要強調的是,上述兩圖中狀態轉換的方向,取決于電路中下一個時鐘脈沖觸發沿到來前瞬間的輸入信號。?如果在此之前輸入信號發生改變,則狀態轉換的方向也會立即改變。如上圖中,當處于狀態時,如果輸入保持為1,則輸出為0,下一狀態將轉換為;若在下一個時鐘脈沖觸發沿到來前,由1變化為0,則立即變化為1,則下一狀態將轉換為。
注:繪制狀態圖時需要注意不能露畫方向線(原則上,以某一狀態七點的方向線數量應為,為電路輸入變量的數目,即輸入變量的每一種組合應當對應1根方向線)。
2.5時序圖
與組合電路一樣,波形圖能直觀地表達時序電路中各信號在時間上的對應關系,通常把時序電路的狀態、輸出對輸入信號(包括時鐘信號)響應的波形圖稱為時序圖。它不僅便于電路調試時檢查邏輯功能、排查故障或差錯,而且在運用HDL設計電路時可用于電路的仿真。從邏輯方程組、轉換表或狀態圖都可以導出時序圖。時序圖如下圖所示(假設初態為00):
使用時序圖時需要注意的是,時序圖有時并不完全表達出電路狀態轉換的全部過程,而是根據需要僅畫出部分典型的波形圖。如上圖就沒有表達出當狀態為11時而輸出為0時的狀態轉換波形和輸出波形。
3.同步時序電路的分析
同步時序電路的分析實際上是一個讀圖、試圖的過程:按照給定的時序電路,通過分析其狀態和輸出信號在輸入信號和時鐘作用下的轉換規律,理解其邏輯功能和工作特性。
3.1分析同步時序邏輯電路的一般步驟
1.根據給定的同步時序電路導出下列邏輯方程組;
(1)對每個觸發器導出激勵方程,組成激勵方程組;
(2)將各觸發器的激勵方程代入相應觸發器的特性方程,得到各觸發器的轉換方程,組成轉換方程組;
(3)對應每個輸出變量導出輸出方程,組成輸出方程組。
2.根據轉換方程組和輸出方程組,列出電路的轉換表或狀態表,畫出狀態圖和時序圖;
3.確定電路的邏輯功能,必要的話,可用文字詳細描述。
3.2同步時序邏輯電路分析實例
3.2.1穆爾型電路示例
分析下圖所示同步時序電路的邏輯功能。
解:觀察上述電路圖可以發現,該同步時序電路沒有輸入信號,輸出為三個觸發器的狀態,是穆爾型時序電路。
1.根據電路列出邏輯方程組
(1)激勵方程組:,,;
(2)轉換方程組(由于使用觸發器,其特性方程為):,,;
(3)輸出方程組:,,。
2.列出轉換表
由于該電路的輸出,,就是各觸發器的狀態,所以轉換表中可不再單列輸出藍,并且電路中沒有輸入信號,轉換表如下所示:
3.畫出狀態圖
根據跟換標畫出點的狀態圖如下圖所示:
?由圖可見,001、010、100三個狀態形成閉合回路,電路正常工作時,其狀態總是按照回路中的箭頭方向變化。這三個狀態構成了有效序列,稱它們為有效狀態,其余的五個狀態則稱為無效狀態。從狀態圖還可以看出,無論電路的初始狀態如何,經過若干個脈沖之后,總能進入有效狀態。若電路能從無效狀態經一定過程自動進入有效狀態,則稱其為自校正能力。因此,該電路是具有自校正能力的同步時序電路。
4.畫出時序圖
設電路的初始狀態為,根據轉換表或狀態圖,可畫出時序圖如下所示:
5.邏輯功能分析
僅從轉換表不太容易觀察到該電路的邏輯功能,而由狀態圖可見,電路的有效狀態是三位循環碼。從時序圖可以看出,電路正常工作時,各觸發器的端輪流出現一個脈沖信號,其寬度為一個周期,即1,循環周期為3,這個動作可以看作是在脈沖作用下,電路把寬度為1的脈沖一次分配給、、各端,因此,電路的功能為脈沖分配器或節拍脈沖產生器。
3.2.2米利型電路示例
分析下圖所示同步時序電路的邏輯功能。
?解:1.根據電路列出邏輯方程組
(1)激勵方程組:,;
(2)轉換方程組(由于使用觸發器,其特性方程為):,;
(3)輸出方程組:。
2.列出轉換表
?3.畫出狀態圖
?4.邏輯功能分析
通過狀態圖可以看出,當外部輸入等于0 時,狀態轉移按00→01→10→11→00 循環變化,因此可以實現模4加法計數器功能。當外部輸入等于1時,狀態轉移按00→11→10→01→00 循環變化,因此可以實現模4減法計數器功能。因此,該電路是一個同步模4可逆計數器。
4.同步時序邏輯電路的設計
時序電路設計又稱為時序電路綜合,其任務是根據給定的邏輯功能需求,選擇適當的邏輯器件,設計出符合要求的時序電路。用觸發器及門電路設計同步時序電路是時序電路設計的基礎,也是用Verilog HDL對時序電路進行描述及使用可編程邏輯器件設計時序電路的基礎。
4.1設計同步時序邏輯電路的一般步驟
設計同步時序邏輯電路的一般步驟如下圖所示:
4.1.1由給定的邏輯功能建立原始狀態圖和原始狀態表
通常,所要設計的時序電路的邏輯功能是通過文字、波形或波形圖來描述的,首先必須把它們變換成規范的狀態圖和狀態表。這種直接從圖文描述得到的狀態圖和狀態表分別稱為原始狀態圖和原始狀態表。這個過程是對實際問題進行分析的過程,具體步驟如下:
(1)明確電路的輸入條件和輸出條件,分別確定輸入變量和輸出變量的數目和名稱。同步時序電路的時鐘脈沖(或)一般不作為輸入變量考慮;
(2)找出所有可能的狀態以及狀態轉換之間的關系和輸入條件。不同的狀態以字符來命名。可以假定一個初始狀態,以該狀態為現態,根絕輸入條件確定輸出及次態。以此類推,知道把每一個狀態的輸出和下一個可能轉換的狀態全部找出后,則建立起原始狀態圖;
(3)根據原始狀態圖建立原始狀態表
由于所有的設計步驟都將在原始狀態圖或原始狀態表的基礎上后進行,只有在它們全面、正確反應給定設計要求的條件下,才有可能獲得成功的設計結果。
4.1.2狀態化簡
原始狀態圖或原始狀態表很有可能隱含多余的狀態,去除多余狀態的過程稱為狀態化簡,其目的是減少電路中觸發器及門電路的數量,但不能改變原始狀態圖或原始狀態表所表達的全部邏輯功能。狀態化簡建立在等價的基礎上:如果兩個狀態分別作為現態,其任何相同輸入所建立的次態及產生的輸出均完全相同,則這兩個狀態稱為等價狀態。凡是兩個等價狀態都可以合并成一個狀態而不改變輸入-輸出關系。
4.1.3狀態分配
對每個狀態指定一個特定的二進制代碼,稱為狀態分配或狀態編碼。編碼方案不同,設計出的電路結構也就不同。編碼方案選擇得當,設計出的電路可能工作更可靠,也可能結構相對簡單。
首選,要確定狀態編碼的位數。同步時序電路的狀態取決于觸發器的狀態組合,觸發器的個數即狀態編碼的位數。與所要求的狀態數需滿足如下關系:。
其次,要對每個狀態確定編碼。從各狀態中取各狀態組合可能存在多種不同方案,隨著值得增大,編碼方案得數目會急劇增加(從位編碼中取個狀態,其可能的狀態分配方案數目為。例如,,,其可能的編碼方案總數達6720之多),面對大量得編碼方案是難以一一進行仔細比較的。一般來說,遵循狀態變化的順序,以二進制數自然遞增順序編碼可化簡電路。而使用具有一定特征的編碼,如格雷碼,則有利于降低輸出信號產生競爭-冒險的可能性。
狀態分配完成,則可將狀態表中的狀態名替換為狀態編碼,得到轉換表。
4.1.4選擇觸發器類型
觸發器類型選擇的余地實際上是非常小的。小規模集成電路的觸發器產品,大多是觸發器和觸發器,選擇具有較強邏輯的觸發器,有時可化簡激勵電路。如前所述,很多可編程器件中采用觸發器來實現時序電路設計,如有特殊要求,用???????觸發器也非常容易構成其他邏輯功能的觸發器。
4.1.5確定激勵方程組和輸出方程組
根據轉換表,用卡諾圖或其他方式對邏輯函數進行化簡,可求得電路的激勵方程組和輸出方程組。這兩個方程組決定了同步時序電路的組合電路部分。
4.1.6畫出邏輯圖,并檢查自校正能力
按照前一步導出的激勵方程組和輸出方程組,可畫出接近工程實現的邏輯電路圖。
有些同步時序電路設計中會出現沒有用到的無效狀態,當電路上電后有可能陷入這些無效狀態而退出。因此,設計的最后一步應檢驗電路是否能進入有效狀態,即是否具有自校正能力。如果不能自校正,則需修改設計。
有些時序電路要求必須從指定的初始狀態開始工作,而不允許從任何其他狀態啟動。這時,應利用觸發器的直接置0、置1功能,在開始工作之前先將電路置為有效狀態。下圖是一個典型的低電平手動復位信號產生電路,當按鍵開關按下,則產生低電平復位信號,案件抬起,系統則進入正常工作狀態。
下圖是一典型的上電自動復位電路,他利用電容兩端電壓不能突變的原理,在上電之處將復位信號保持在低電平,將系統預置為初始狀態。隨著電源通過電阻對電容充電,使兩端電壓逐漸升高,經過一段時間之后,信號才跨越邏輯閾值轉換為高電平,使系統脫離復位狀態而進入正常工作狀態。雖然設計了復位電路的時序電路在正常工作時可不考慮自校正問題,但是,如果外界干擾等偶發因素使時序電路進入無效的循環狀態,則可能出現所謂的“死機”現象,這是邏輯電路設計不得不預先考慮的問題。
4.2同步時序邏輯電路設計實例
4.2.1用觸發器設計一個同步遞增8421計數器
分析:計數器實際上是對時鐘脈沖進行計數,每到來一個時鐘脈沖觸發沿,計數器改變一次狀態。在每到個時鐘脈沖作用下,計數器的狀態輸出編碼值加1,編碼順序與8421BCD碼一致。每經過10個狀態,計數器完成一個計數周期,共有10個狀態,可用0~9十個數字命名各個狀態。由于電路的狀態數、狀態轉換關系及狀態編碼都是明確的,因此設計過程比較簡單。
(1)列出轉換表
10個狀態表的計數器共需要4個觸發器構成。由于???????觸發器功能比較簡單,可將激勵信號同時列入轉換表中,如下圖所示。這是一個穆爾型時序電路(無外接輸入端),輸出變量即狀態編碼。
(2)確定激勵方程組
按(1)中轉換表畫出各觸發器激勵信號的卡諾圖如下所示:
4個觸發器可組合?16個狀態(0000~1111),其中有6個狀態(1010~1111)在8421BCD計數器中是無效狀態,在卡諾圖中以無關項×表示(包含“1”項盡可能多地圈入無關項,但是不要圈中均為無關項)。于是,得到激勵方程組(本例中,激勵方程組也是轉換方程):
(3)畫出邏輯圖
根據激勵方程組可畫出邏輯圖如下所示:
上圖中,各觸發器的直接置0端為低電平有效,計數工作時,電路的輸入端應保持為高電平。?
(4)檢查自校正能力
該電路有6個無效狀態:1010、1011、1100、1101、1110和1111,分別以它們作為現態,帶入電路的轉換方程組而求其次態。如果還沒有進入有效狀態,再以新的狀態作為現態求下一個次態,以此類推,看最終能否進入有效狀態。結果證明,這6個狀態在一或兩個時鐘周期后全部都能進入有效循環狀態。
不能自校正電路的修改方法
如果發現所設計的電路不能自校正,則應修改設計。方法是:在激勵信號卡諾圈的包圍圈中,對無關項×的處理作適當修改,即原來取代1圈入包圍圈的,可試取0而不圈入包圍圈,于是,得到新的激勵方程和邏輯圖,然后再檢查其自校正能力,直到能自校正為止。
(5)畫出狀態圖
狀態如如下所示:
如果要求電路必須從0000開始計數,則可將前述復位電路連接在輸入端。在開始計數前使產生低電平脈沖,強制4個觸發器進入0000的初始狀態,待=1后再開始計數。
4.2.2用觸發器設計一個給定原始狀態圖的邏輯功能的同步時序電路
(1)列出原始狀態表
根據原始狀態圖列出原始狀態表如下:
(2)轉換化簡
觀察(1)中狀原始態表發現,狀態、是等價狀態,可以合并(狀態等價的定義如下:如果兩個狀態分別作為現態,其任何相同輸入所建立的次態及產生的輸出均完全相同,則這兩個狀態稱為等價狀態,可參見4.1.2)。下表是(1)中原始狀態表化簡的結果:將狀態一行刪除,并用狀態替換(1)表中欄中的狀態。
繼續觀察上表,發現和也是等價的,狀態亦可去除,代之以。于是,得到下表所示狀態表。檢查該表,已不存在等價狀態,因此是最簡狀態表。
最簡狀態表對應的狀態圖如下所示:
上述狀態花間過程將原有的7個過程化簡為5個,而輸入-輸出特性與原始狀態表和原始狀態圖完全相同。?
(3)狀態分配
下表列出了五個狀態,最簡單的狀態分配是使用自然二進制碼,取二進制計數序列的前5個連續編碼,如下表中的狀態分配方案1。結合狀態圖可以看出,這種二進制編碼的遞增順序基本上與相應的狀態轉換順序一致。對于較簡單的電路,按這種狀態分配方案構成的電路,其組合電路將相對簡單一些。
上表中所列方案2為格雷碼方案。如果狀態圖示出的狀態轉換順序是簡單的從到,那么它從從一個狀態轉換到下一狀態僅有一個觸發器改變狀態,使用這種方案將降低電路發生競爭-冒險的可能,提高電路的可靠性。遺憾的是,本例并不是一個簡單的單循環序列(例如00→01→11→10→00)
上表中所列方案3為“一對一”(One-hot Encoding)編碼方案。雖然這將使用較多的觸發器,但它的編碼方案非常簡單,可有效地化簡電路,并換得工作可靠性和工作速度得提高。在大規模可編程邏輯器件,如FPGA中,觸發器數量較多而邏輯門相對較少,“一對一”的編碼方案有時反而更有利于提高器件資源的利用率。
采用方案1中的自然二進制碼分配狀態,得到的轉換表如下表所示:
(4)確定激勵方程組和輸出方程組
該電路需要用3個觸發器實現(共有5個狀態,3個觸發器能實現8個狀態),它們的輸出分別為、、。于是,由上表可得狀態轉換真值表如下表所示:
由于觸發器的特性方程為,所以根據上表,可以畫出、、的的卡諾圖如下所示:
京卡諾圖化簡,得到三個觸發器的激勵方程組:,?,;和輸出方程(實際上熟練的情況下可直接由狀態轉換圖直接得到卡諾圖,而不需要借助狀態轉換真值表)。
(5)畫出邏輯圖
根據激勵方程組和輸出方程組,可以畫出下圖所示的邏輯圖。并且在電路中引出了直接復位端,可外接復位電路,強制電路在開啟上電時從狀態000開始工作。
?(6)檢查自校正能力
該電路有3個無效狀態:101、110和111,需要評估電路受到外界干擾時萬一落入這3個無效狀態的影響。將101、110和111分別作為現態,與可能出現的所有輸入信號一起分別帶入電路的轉換方程組而求其次態。結果證明,無論在何種情況下,這3個狀態在一個時鐘周期后全部都能進入有效狀態。于是,可以進一步畫出完全狀態圖如下所示:
4.2.3用觸發器設計一個簡易的自動售貨機
要求設計一個簡易的自動售貨機,該自動售貨機只能投入一元硬幣,當連續投入三個硬幣以后,售貨機才會給出一瓶飲料;假如投入了兩枚硬幣,發現沒有硬幣了,自動售貨機不退還硬幣,直至投入三枚硬幣才會輸出飲料。
分析:該電路有一個輸入和一個輸出,是一個米利型電路。假設為一元硬幣輸入,投入一元硬幣為1,未投入一元硬幣就為0;為飲料輸出,送出飲料為1,未送出飲料???????為0。這里,假設為初態,為投入一元后的狀態,為投入兩元后的狀態。
解:建立狀態圖是進行成功設計的第一步,這一步很關鍵,而且也是比較困難的一步,因為它沒有規律可循,只有具體問題作具體分析,根據不同的設計要求找出其對應的邏輯關系并建立出狀態圖。
首先設自動售貨機處于狀態,緊接著投入一個一元硬幣,也就是說等于1,那么電路狀態由轉換到狀態,表示已收到一枚硬幣,又因為只收到一個一枚硬幣,飲料不會送出,也就是說為0;當電路處于狀態時,再投入一枚一元硬幣,也就是等于1,那么電路狀態會由狀態轉換到狀態,表示已收到兩枚硬幣,又因為只收到兩個硬幣,飲料不會送出,也就是說為0;當電路處于狀態時,再投入一枚一元硬幣,也就是說等于1,那么電路狀態會由狀態轉換到狀態,表示已連續收到三個一元硬幣,此時飲料送出,變為0。狀態圖如下所示:
接下來根據狀態圖進行狀態編碼。一共有三個狀態,即,因此使用2個觸發器。兩個觸發器確定四種不同的狀態:00、01、10和11。令,,,得到編碼后的特性表如下:
其中,11為無效狀態。依次根據特性表寫出它的狀態方程和輸出方程,由于使用的是觸發器實現,根據觸發器的特性方程()可得到該電路的激勵方程組和輸出方程。激勵方程組為:,。輸出方程為:。
根據方程畫出電路圖如下:
References:
1.康華光《 電子技術基礎 數字部分》(第六版);
2.鋯石科技《HELLO FPGA數字部分》
總結
以上是生活随笔為你收集整理的时序逻辑电路的设计与分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2692):重读vue电商网站
- 下一篇: win7下安装PADS2007