012---狀態機的基本知識

1. 摘要

文章為學習記錄。主要介紹狀態機概述、狀態轉移圖、狀態編碼、狀態機寫法、狀態機代碼示例。

2. 狀態機概述

狀態機 (Finite State Machine),也稱為同步有限狀態機,用于描述有先后順序或時序規律的事情。
同步”:狀態機中所有的狀態跳轉都是在時鐘的作用下進行的。
有限”:狀態的個數是有限的。
Moore 型狀態機:最后的輸出只和當前狀態有關而與輸入無關。
Mealy 型狀態機: 最后的輸出不僅和當前狀態有關還和輸入有關。

3. 狀態轉移圖

狀態轉移圖能夠表達出狀態機的狀態狀態跳轉的條件
狀態轉移圖三要素:
(a)輸入:根據輸入可以確定是否需要進行狀態跳轉以及輸出,是影響狀態機系統執行過程的重要驅動力;
(b)輸出:根據當前時刻的狀態以及輸入確定,是狀態機系統最終要執行的動作;
(c)狀態:根據輸入和上一狀態決定當前時刻所處的狀態,是狀態機系統執行的一個穩定的過程。
輸入有多少種情況,每個狀態的跳轉就有多少種情況。
常見的狀態轉移圖如下圖所示。
在這里插入圖片描述

在這里插入圖片描述

4. 狀態編碼

以3個狀態數為例:
(a) 獨熱碼:3’b001,3’b010,3’b100; 使用的寄存器資源多,組合邏輯資源少。
(b) 二進制碼:2’b00,2’b01,2’b10;使用的寄存器資源少,組合邏輯資源多。
(c)格雷碼:2’b00,2’b01,2’b11;使用的寄存器資源少,組合邏輯資源多。其相鄰狀態轉換時只有1bit不同。
狀態編碼方式如下表所示。
在這里插入圖片描述

5. 狀態機寫法

一段式:在一段狀態機中使用時序邏輯既描述狀態的轉移,也描述數據的輸出;
二段式:在第一段狀態機中使用時序邏輯描述狀態轉移,在第二段狀態機中使用組合邏輯描述數據的輸出;
三段式:在第一段狀態機中采用時序邏輯描述狀態轉移,在第二段在狀態機中采用組合邏輯判斷狀態轉移條件描述狀態轉移規律,在第三段狀態機中描述狀態輸出,可以用組合電路輸出,也可以時序電路輸出;
新二段式:使用兩個均采用時序邏輯的 always 塊。第一個 always 塊描述狀態的轉移為第一段狀態機,第二個 always 塊描述數據的輸出為第二段狀態機(如果我們遵循一個 always 塊只描述一個變量的原則,如果有多個輸出時第二段狀態機就可以分為多個always 塊來表達)。

6. 狀態機代碼示例

module  complex_fsm
(input   wire    sys_clk         ,   //系統時鐘50MHzinput   wire    sys_rst_n       ,   //全局復位input   wire    pi_money_one    ,   //投幣1元input   wire    pi_money_half   ,   //投幣0.5元output  reg     po_money        ,   //po_money為1時表示找零//po_money為0時表示不找零output  reg     po_cola             //po_cola為1時出可樂//po_cola為0時不出可樂
);//********************************************************************//
//****************** Parameter and Internal Signal *******************//
//********************************************************************////parameter define
//只有五種狀態,使用獨熱碼
parameter   IDLE     = 5'b00001;
parameter   HALF     = 5'b00010;
parameter   ONE      = 5'b00100;
parameter   ONE_HALF = 5'b01000;
parameter   TWO      = 5'b10000;//reg   define
reg     [4:0]   state;//wire  define
wire    [1:0]   pi_money;//********************************************************************//
//***************************** Main Code ****************************//
//********************************************************************////pi_money:為了減少變量的個數,我們用位拼接把輸入的兩個1bit信號拼接成1個2bit信號
//投幣方式可以為:不投幣(00)、投0.5元(01)、投1元(10),每次只投一個幣
assign pi_money = {pi_money_one, pi_money_half};//第一段狀態機,描述當前狀態state如何根據輸入跳轉到下一狀態
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)state <= IDLE;  //任何情況下只要按復位就回到初始狀態else	case(state)IDLE    : if(pi_money == 2'b01)   //判斷一種輸入情況state <= HALF;else    if(pi_money == 2'b10)//判斷另一種輸入情況state <= ONE;elsestate <= IDLE;HALF    : if(pi_money == 2'b01)state <= ONE;else    if(pi_money == 2'b10)state <= ONE_HALF;elsestate <= HALF;ONE     : if(pi_money == 2'b01)state <= ONE_HALF;else    if(pi_money == 2'b10)state <= TWO;elsestate <= ONE;ONE_HALF: if(pi_money == 2'b01)state <= TWO;else    if(pi_money == 2'b10)state <= IDLE;elsestate <= ONE_HALF;TWO     : if((pi_money == 2'b01) || (pi_money == 2'b10))state <= IDLE;elsestate <= TWO;//如果狀態機跳轉到編碼的狀態之外也回到初始狀態default :       state <= IDLE;endcase//第二段狀態機,描述當前狀態state和輸入pi_money如何影響po_cola輸出
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)po_cola <= 1'b0;else    if((state == TWO && pi_money == 2'b01) || (state == TWO && pi_money == 2'b10) || (state == ONE_HALF && pi_money == 2'b10))po_cola <= 1'b1;elsepo_cola <= 1'b0;//第二段狀態機,描述當前狀態state和輸入pi_money如何影響po_money輸出
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n ==	1'b0)po_money <= 1'b0;else if((state == TWO) && (pi_money == 2'b10))po_money <= 1'b1;elsepo_money <= 1'b0;endmodule

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73520.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73520.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73520.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

deepseek+kimi做ppt教程記錄

1.首先注冊deepseek和kimi deepseek官網&#xff1a;https://chat.deepseek.com/ kimi官網&#xff1a;https://kimi.moonshot.cn/ 以下以一篇工作總結報告為例 2.使用deepseek生成ppt大綱 讓deepseek生成kimi生成ppt所需要的內容時&#xff0c;需要注意提示詞內容&#xff0c;…

Java Module介紹

Java模塊系統自Java 9開始引入&#xff0c;旨在提供更強大的封裝機制、清晰的依賴關系定義以及可靠的配置。Java平臺本身也被模塊化了&#xff0c;提供了多個核心模塊以及其他用于支持不同功能的模塊。以下是一些重要的Java標準模塊&#xff1a; java.base - 這是最基礎的模塊…

SOME/IP:用Python實現協議訂閱、Offer、訂閱ACK與報文接收

文章目錄 前言一、代碼層次二、詳細代碼1. eth_scapy_sd.py2、eth_scapy_someip.py3、network_define.py4、packet_define.py5、unpack_define.py6、someip_controller.py 前言 1、需要pip安裝scapy庫 2、需要修改根據實際情況配置network_define.py 3、執行someip_controller…

【Linux內核系列】:文件系統收尾以及軟硬鏈接詳解

&#x1f525; 本文專欄&#xff1a;Linux &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 世界上只有一種個人英雄主義&#xff0c;那么就是面對生活的種種失敗卻依然熱愛著生活 內容回顧 那么在之前的學習中&#xff0c;我們…

最新版Chrome瀏覽器加載ActiveX控件技術--allWebPlugin中間件一鍵部署瀏覽器擴展

allWebPlugin簡介 allWebPlugin中間件是一款為用戶提供安全、可靠、便捷的瀏覽器插件服務的中間件產品&#xff0c;致力于將瀏覽器插件重新應用到所有瀏覽器。它將現有ActiveX控件直接嵌入瀏覽器&#xff0c;實現插件加載、界面顯示、接口調用、事件回調等。支持Chrome、Firefo…

基于SpringBoot和MybatisPlus實現通用Controller

基于SpringBoot和MybatisPlus實現通用Controller&#xff0c;只需要創建實體類和mapper接口&#xff0c;單表增刪改查接口就已經實現&#xff0c;提升開發效率 1.定義通用controller package com.xian.controller;import cn.hutool.core.map.MapUtil; import com.baomidou.my…

Axure大屏可視化原型模板及素材:數據可視化的高效解決方案

數據可視化已成為企業決策、運營分析、市場洞察的重要工具。數據可視化大屏&#xff0c;作為數據展示和交互的直觀平臺&#xff0c;能夠實時呈現關鍵數據&#xff0c;幫助企業快速做出決策。Axure作為原型設計領域的領先工具&#xff0c;以其豐富的組件庫、強大的交互設計能力和…

YOLOE:實時查看任何事物

摘要 https://arxiv.org/pdf/2503.07465v1 目標檢測和分割在計算機視覺應用中得到了廣泛應用&#xff0c;然而&#xff0c;盡管YOLO系列等傳統模型高效且準確&#xff0c;但它們受限于預定義的類別&#xff0c;阻礙了在開放場景中的適應性。最近的開放集方法利用文本提示、視覺…

【品鉑科技工業生產應用案例解析】

品鉑科技&#xff08;Pinpoint&#xff09;在工業領域的高精度定位解決方案已廣泛應用于電力、鋼鐵、倉儲、化工、地鐵等場景&#xff0c;以下為典型應用案例及技術方案&#xff1a; 一、?電力行業&#xff1a;上海閔行電廠人員定位? 白鶴灘水力發電站 ?項目需求?&#x…

7-Zip 功能介紹

7-Zip 是一款開源、高效的文件壓縮與解壓縮工具&#xff0c;支持多種格式&#xff0c;以高壓縮率和靈活性著稱。以下是其核心功能&#xff1a; 多格式支持 壓縮 / 解壓&#xff1a;支持 7z&#xff08;默認格式&#xff0c;壓縮率極高&#xff09;、ZIP、RAR、GZIP、BZIP2、TAR…

這是我第一次寫關於aapenal服務器管理控制面板的文章

首先我們來認識一下服務器管理面板的所有功能 ? 網站管理功能&#xff1a; 支持創建和管理多個網站。配置虛擬主機&#xff08;Vhost&#xff09;和域名綁定。自動安裝常用應用&#xff08;如WordPress、Joomla等&#xff09;。 ? 文件管理功能&#xff1a; 文件上傳、…

小語言模型(SLM)技術解析:如何在有限資源下實現高效AI推理

引言&#xff1a;為什么小語言模型&#xff08;SLM&#xff09;是2025年的技術焦點&#xff1f; 2025年&#xff0c;人工智能領域正經歷一場“由大變小”的革命。盡管大語言模型&#xff08;LLM&#xff09;如GPT-4、Gemini Ultra等在復雜任務中表現驚艷&#xff0c;但其高昂的…

jmeter:登錄接口的token用于下一個接口

問題&#xff1a; 僅僅登錄接口可以使用&#xff0c;其他接口進行測試的時候都是報錯&#xff1a;賬號已經失效 原因&#xff1a; 應該是登錄接口的token并沒有用到下一個接口上來 解決方法 1、目錄建設如下&#xff1a; 2、先添加一個后置處理器&#xff1a;查看結果數&…

1、操作系統引論

一、操作系統 會使用linux系統 建議大家先學會linux的基礎指令&#xff0c;可以看菜鳥教程網站進行學習。 1、各種定義 操作系統定義 管理計算機的 硬件 和軟件資源&#xff0c; 能對各類作業進行調度&#xff0c;方便用戶使用計算機的程序集合。操作系統運行在內核態&#xf…

KVM安全模塊生產環境配置與優化指南

KVM安全模塊生產環境配置與優化指南 一、引言 在當今復雜多變的網絡安全環境下&#xff0c;生產環境中KVM&#xff08;Kernel-based Virtual Machine&#xff09;的安全配置顯得尤為重要。本指南旨在詳細闡述KVM安全模塊的配置方法&#xff0c;結合強制訪問控制&#xff08;M…

深入解析工廠模式及其C#實現

工廠模式&#xff08;Factory Pattern&#xff09;是設計模式中的一種創建型模式&#xff0c;它通過工廠方法來創建對象&#xff0c;而不是讓客戶端代碼直接實例化對象。這樣可以避免客戶端與具體類的緊密耦合&#xff0c;從而提高代碼的靈活性、可維護性和擴展性。工廠模式能夠…

【愚公系列】《高效使用DeepSeek》009-PPT大綱自動生成

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。近期榮譽2022年度…

SpringCloud系列教程(十四):Sentinel持久化

Sentinel之前已經搭建和應用成功了&#xff0c;但是它有一個很大的缺點就是官方沒有提供持久化的方案&#xff0c;從項目源碼上看感覺這款工具也沒有完成的太好&#xff0c;所以需要我們去對它進行二次開發。要補充的功能大概如下&#xff1a; 1、將Sentinel接入nacos中&#…

AGI大模型(3):大模型生成內容

1 大模型是怎么生成內容的 簡單來說就是靠"猜"! 雖然?常不可思議,但事實就是這樣,現階段所有的 NLP 任務,都不意味著機器真正理解這個世界,它只是在玩?字游戲,進??次??次的概率解謎,本質上和我們玩報紙上的填字游戲是?個邏輯。只是我們靠知識和智慧,…

Go語言環境搭建并執行第一個Go程序

目錄 一、Windows環境搭建 二、vscode安裝插件 三、運行第一個go程序 一、Windows環境搭建 下載Go&#xff1a;All releases - The Go Programming Language 這里是Windows搭建&#xff0c;選擇的是windows-amd64.msi&#xff0c;也可以選擇zip直接解壓縮到指定目錄 選擇msi…