利用74LS161實現複雜狀態機

2021-01-14 電子發燒友
打開APP
利用74LS161實現複雜狀態機

發表於 2018-01-18 09:00:02

狀態機的寫法

有限狀態機FSM思想廣泛應用於硬體控制電路設計,也是軟體上常用的一種處理方法(軟體上稱為FMM有限消息機)。它把複雜的控制邏輯分解成有限個穩定狀態,在每個狀態上判斷事件,變連續處理為離散數字處理,符合計算機的工作特點。

有限狀態機的工作原理如圖所示,發生事件(event)後,根據當前狀態(cur_state),決定執行的動作(action),並設置下一個狀態號(nxt_state)。

圖  有限狀態機工作原理

下圖為一個狀態機實例的狀態轉移圖,它的含義是:

在s0狀態,如果發生e0事件,那麼就執行a0動作,並保持狀態不變;

如果發生e1事件,那麼就執行a1動作,並將狀態轉移到s1態;

如果發生e2事件,那麼就執行a2動作,並將狀態轉移到s2態;

在s1狀態,如果發生e2事件,那麼就執行a2動作,並將狀態轉移到s2態;

在s2狀態,如果發生e0事件,那麼就執行a0動作,並將狀態轉移到s0態。

圖0一個有限狀態機實例

有限狀態機不僅能夠用狀態轉移圖表示,還可以用二維的表格代表。一般將當前狀態號寫在橫行上,將事件寫在縱列上,如表1所示。其中「--」表示空(不執行動作,也不進行狀態轉移),「an/sn」表示執行動作an,同時將下一狀態設置為sn。下表和圖0表示的含義是完全相同的。

表   圖2狀態機實例的二維表格表示(動作/下一狀態)

時序邏輯電路的數學模型是有限狀態機(FiniteStateMachine)。時序邏輯電路的設計通常用觸發器來實現,狀態機越複雜,設計過程也越複雜。利用MSI(Medium-ScaleIntegration)也可以實現複雜狀態機,雖然設計過程比利用觸發器實現要複雜,但電路相對簡單。在數字邏輯系統中,計數器是基本部件之一。集成計數器晶片類型很多,文中主要討論使用MSI同步計數器74LS161進行複雜狀態機的設計。

74LS161功能介紹

74LS161的引腳排列和邏輯功能如圖1所示。各引出端的邏輯功能如下。1腳為清零端/RD,低電平有效。2腳為時鐘脈衝輸入端CP,上升沿有效(CP↑)。3~6腳為數據輸入端A0~A3,可預置任意四位二進位數。7腳和10腳分別為計數控制端EP和ET,當其中有一腳為低電平時計數器保持狀態不變,當均為高電平時為計數狀態。9腳為同步並行置數控制端/LD,低電平有效。11~14腳為數據輸出端QQ30~。15腳為進位輸出端RCO,高電平有效。

圖1   四位同步二進位計數器74LS161

(a)引線排列圖;(b)邏輯功能圖

設計過程

計數器的狀態轉換一般為順序轉換,電路也很成熟,例如S1→S2、S4→S5等。在實現模M的計數器時,一般也是利用連續狀態進行順序轉換。但如要實現複雜狀態機,則需要充分了解計數器的特性,利用置零端和置數端,完成非順序狀態轉換,例如S1→S0、S4→S6等,從而實現複雜狀態機。下面討論對計數器74LS161的功能進行擴展,實現非順序狀態轉換(圖2)。計數器狀態與符號的對照見表1.

表1  計數器狀態與符號的對照表

圖2中,74LS161(0)片和74LS161(1)片的初始狀態均設為0,兩片在CP脈衝到來時同時開始計數,當(1)片循環至狀態S4時,會給(0)片一個置位信號,當第5個CP脈衝到來時,(0)片被置位狀態S7.之後,一直到第9個CP脈衝到來前,由於(1)片Q2端始終為1,故(0)片始終保持狀態S7.當第9個CP脈衝到來時,(1)片和(0)片的狀態分別為S9和S8,此時,(1)片得到(0)片Q3端的置位信號,當下一個CP脈衝到來時,(1)片和(0)片的狀態分別為S4和S9.在第10個CP脈衝作用下,(1)片和(0)片的狀態分別為S4和S9.在第11個CP脈衝作用下,(1)片和(0)片的狀態分別為S4和S7,如此往復。這樣,兩片74LS161(1)片和(0)片並行輸出狀態變化為01000111→01010111→01100111→01110111→10000111→10011000→01001001→01000111,7種狀態非順序的轉換。

圖2  非順序狀態轉換電路

如實現非順序更多狀態的轉換,就需要使用更多MSI晶片,圖3為使用三個74LS161晶片實現的複雜狀態機。在圖3中,三個晶片的初始狀態均設為0,並且在CP脈衝到來時同時開始計數,當第7個CP脈衝到來後,實現有效狀態循環000001001001→000001001010→000001001011→000001001100→000001001101→000001001110→000001001111→000001000000→000001010001→000001100010→000001110011→000010000100→000110010101→001010100110→001110110111→010011000111→000011011000→000001001001,為17種非順序狀態的轉換。可見,實現越複雜的狀態機,轉換的非順序狀態越多,電路越複雜。

圖3  複雜狀態機電路圖

可能出現的問題

在實際的電路中,由於使用多個集成電路,可能會出現置0不可靠的情況,這是由多個觸發器的負載不同,置0時間也不完全相同引起的,此時需要在以上電路設計中做一些改進。另外,MSI與負載門電路的連接等問題,可以通過增加上拉電阻、接地電阻及電平轉換等措施解決。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 計數器74ls161工作原理(分頻電路、真值表、邏輯功能)
    打開APP 計數器74ls161工作原理(分頻電路、真值表、邏輯功能) 發表於 2018-01-17 19:14:24 74LS161
  • 如何在FPGA中實現狀態機
    如果您要在物理組件中實現這些狀態圖(工程師在FPGA問世之前就是這麼做的),首先就得生成當前狀態和後續狀態表,然後生成實現狀態機所需的邏輯。不過由於我們將使用FPGA來實現設計,因此我們可以直接從狀態轉換圖開始工作。
  • 基於UART以狀態機的形式實現LIN通信
    其中車燈模塊和車門模塊基於CAN/LIN總線以分布式的形式實現。本文重點論述的是LIN協議的實現。LIN協議分析和狀態機的設計有限狀態機是由一組狀態、一個起始狀態、輸入以及將輸入與當前狀態轉換為下一個狀態的轉換函數所組成,它是一個特殊的有向圖,包括一些狀態節點和連接這些狀態的有向弧。對特定的狀態機而言,首先要建立一些有效的狀態,然後設計相應的算法完成狀態的轉換。
  • LabVIEW設計模型——狀態機
    狀態機是在工程應用中使用最多的設計模型。使用狀態機,我們可以很容易的實現程序流程圖中的判斷、分支。 狀態機是由一系列的狀態構成的,其中包括一個「初始化」狀態,和一個「停止」狀態。
  • 零基礎學FPGA(七)淺談狀態機
    今天我們來寫狀態機。本文引用地址:http://www.eepw.com.cn/article/267960.htm  關於狀態機呢,想必大家應該都接觸過,通俗的講就是數電裡我們學的狀態轉換圖。
  • 單片機之狀態機淺談
    說到單片機編程,不得不說到狀態機,狀態機做為軟體編程的主要架構已經在各種語言中應用,當然包括C語言,在一個思路清晰而且高效的程序中,必然有狀態機的身影浮現。靈活的應用狀態機不僅是程序更高效,而且可讀性和擴展性也很好。狀態無處不在,狀態中有狀態,只要掌握了這種思維,讓它成為您編程中的一種習慣,相信您會受益匪淺。
  • 如何設計一個穩定可靠的狀態機
    隨著大規模和超大規模FPGA/CPLD器件的誕生和發展,以HDL(硬體描述語言)為工具、FPGA/CPLD器件為載體的EDA技術的應用越來越廣泛.從小型電子系統到大規模SOC(Systemonachip)設計,已經無處不在.在FPGA/CPLD設計中,狀態機是最典型、應用最廣泛的時序電路模塊,如何設計一個穩定可靠的狀態機是我們必須面對的問題.
  • 由淺入深,讓你全面了解狀態機模式的應用原理
    本文首先簡單介紹狀態機的基本知識(建議找專門專業的介紹狀態機的書籍進行學習),然後基於十字轉門的例子,以遷移表的方式來實現有限狀態機的功能,接著再介紹經典的狀態機模式,最後重點介紹boost startchart的相關知識點,boost startchart是boost實現的狀態機庫,它幾乎支持了所有的UML中狀態機的特性,主要學習的途徑就是官網提供的指南,該指南信息量很大,但是學習起來有點費勁
  • 狀態機重新優化業務流程
    確定性有限狀態機可以構造為任何非確定性狀態機。現代社會的許多裝置都可以觀察到狀態機的行為,這些裝置根據一系列事件來執行預定的動作序列。簡單的例子是自動售貨機,當硬幣的正確組合存放時,自動售貨機分配產品;電梯,其停止順序由乘客要求的樓層決定;交通燈,當汽車等待時改變順序;組合鎖,需要按正確的順序輸入組合號。
  • 計數器74LS161的Multisim仿真
    74LS161是具有異步置零、計數、預置數和保持功能的可編程集成中規模同步4位二進位加法計數器。 74LS161計數器可從Muhisim的TTL數字IC庫中找出,字組產生器、邏輯分析儀分別從虛擬儀器庫中找出。 (2)設置字組產生器 確定字組產生器產生的74LS161計數器所需的時鐘脈衝、控制信號等各個字的內容,在字組產生器中依次輸入各字組數據,進行所有字組信號的設置。
  • 運用狀態機提高嵌入式軟體效率
    如果合理運用狀態機機制開發系統軟體,就可以讓MCU進行多任務的分時處理。本文引用地址:http://www.eepw.com.cn/article/152440.htm1 建立有限狀態機的模型 其實在平時的程序設計中,開發人員已經不知不覺地使用了狀態機,如按鍵狀態轉換、菜單顯示狀態的轉換等。但是,很少有系統會使用狀態機進行多任務處理。
  • 基於74LS161的扭環形計數器自啟動設計
    分析了扭環形計數器工作時的狀態轉換過程和MSI可編程計數器74LS161的邏輯功能,提出了採用74LS161構成扭環形計數器一些新的設計方案及幾種邏輯修改方法。 1、基本原理 4位MSI可編程同步二進位加法計數器74LS161的真值表如表1所示。
  • 硬體描述語言Verilog HDL設計進階之: 典型實例-狀態機應用
    本文引用地址:http://www.eepw.com.cn/article/201706/348829.htm4.6典型實例6:狀態機應用4.6.1實例的內容及目標1.實例的主要內容狀態機設計是HDL設計裡面的精華,幾乎所有的設計裡面都或多或少地使用了狀態機的思想。
  • 什麼是「狀態機」?為什麼大家都說萬能的狀態機?
    在第一次聽到狀態機這個詞的時候,相信我們都有相同的疑問:什麼是狀態機?用來幹嘛的?我們先來看一下有關狀態機的定義:「狀態機由狀態寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心。
  • 基於74LS161的60進位計數器設計方案介紹
    打開APP 基於74LS161的60進位計數器設計方案介紹 發表於 2018-01-17 13:58:47 計數器不僅能用於對時鐘脈衝計數
  • 不懂狀態機怎麼能讀懂中間件的LifeCycle?
    要搞清楚LifeCycle模式首先需要能看懂狀態機。事實上,狀態機就是當滿足某種條件時,改變為指定狀態,也是很好理解的。這裡,我假設有如下的狀態機視圖上圖中,我假設是一個組件的狀態機圖。當組件啟動時,首先進入WAITING狀態,如果發送完成SYN包,則進入SYN_SEND狀態;如果調用了setStoped()方法,則改變為STOPED狀態。
  • 74LS161集成計數器電路(2、3、4、6、8、10、60進位計數器)
    一、74LS161集成計數器電路(十進位計數器) 單片161可以實現16以內任意進位的加法計數功能。實現途徑有清零法和置數法兩種。以實現十進位加法計數器為例: 1)161的是異步清零端。當Q3Q2Q1Q0=1010(即10)狀態時,通過解碼電路給出低電平信號,將計數器清零回到0000狀態。電路圖和狀態轉換圖如圖1,圖2所示。
  • 電動汽車動力總成解讀|狀態機
    導語:狀態機,代表了電驅動系統運行的不同狀態或者工作模式,電驅動系統控制器(Inverter)與整車控制器(VCU)狀態機的匹配就好比找對象,既要性格、三觀相匹配,也要有相似的生活方式和行為邏輯。文本從電驅動系統的多種工作模式角度,對電動汽車點火啟動、運轉、熄火停車背後的故事做了簡要介紹。本文分為以下三部分展開:1. 什麼是狀態機?2.
  • 什麼是狀態機編程?一種耐用的編程方法(附代碼)
    狀態機編程理解什麼是狀態機?以作業系統中的任務調度為例來說明什麼是狀態機。在作業系統的任務調度中經常見到狀態機,其作用是根據任務的狀態和當前資源條件來改變任務的狀態。作業系統任務狀態狀態機編程示例以下代碼是一個狀態機編程的示例:
  • LabVIEW程序設計模式(二)—基本狀態機模式
    狀態機是一種最為經典的程序設計模式,在LabVIEW 7.1(含)之前它幾乎統治了大部分的LabVIEW主程序。最基本的狀態機結構如圖 1所示。狀態是狀態機運行的經脈,在開始使用狀態機模式撰寫程序時需要將應用分為若干個狀態。