在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

狀態機常見的3種類型 狀態機案例設計

西西 ? 來源:博客園 ? 作者:中國的孩子 ? 2020-08-08 10:57 ? 次閱讀

1、狀態機設計

Mealy 機方框圖

狀態寄存器輸出當前的信號,用來控制下一個狀態是什么,和當前狀態下的輸出是什么。

Moore機方框圖

2、狀態機---3種類型

二元的:(CPLD與陣列扇入比較多,寄存器比較少)

S1 = 001, S2 = 010, S3 = 011, S3 = 100,etc。。。

枚舉的:

S1 = 100, S2 = 110, S3 = 101, S4 = 111,etc。。。

One Hot:每1 個狀態機只有1個寄存器(FPGA觸發器比較多)

S1 = 00000001, S2 =00000010,S3 = 00000100,etc。。。

3、對生剩余狀態的處理

1、在CASE 語句中增加語句,對每個非法狀態明確地給出狀態輪換的指示;

2、用OTHERS語句來對未提及的狀態做統一處理。

Moore 型狀態機設計

摩爾型的有限狀態機的輸出只與當前狀態有關,而與輸入信號的當前值無關,且僅豐時鐘信號邊沿到來時才發生變化。

要實現這種結構,必須使用暫存信號(如 temp)來存儲電路的輸出值,當今信號在時鐘邊沿出現時才能夠更新輸出。

例:

library ieee;

use ieee.std_logic_1164.all;

entity s_machine2 is

port(

clk, reset : in std_logic;

x : in std_logic;

z : out std_logic

);

architecture behav of s_machine2 is

type m_state is(s0, s1, s2);

signal present_state, next_state : m_state;

signal temp : std_logic;

begin

-----------------------時序進程---------------------------

reg : process(reset, clk)

begin

if reset = ‘1’ then present_state 《= s0;

elsif clk = ‘1’ and clk‘event then

z 《=temp; --只有在時鐘的上升沿時,輸出才會發生變化。是同步輸出。

prsent_state 《=nxet_state;

end if;

end process;

-------------------------組合進程-----------------------------

com : process(present_state, x)

begin

case prsent_state is

when s0 =》

if x = ’0‘ then next_state 《= s0;

else next_state 《= s1;

end if;

temp 《= ’0‘;

when s1 =》

if x = ’0‘ then next_state 《= s0;

else next_state 《= s2;

end if;

temp 《= ’0‘;

when s2 =》

if x = ’0‘; then next_state 《= s0; temp 《= ’1‘;

else next_state 《= s2; temp 《= ’0‘;

end if

end case;

end process;

end behv;

Mearly 型的有限狀態機設計

米立狀態機的輸出信號是當前狀態和輸出信號的函數,它的輸出在輸入變化后立即發生變化,

不依賴時鐘信號的同步。是異步輸出。

例:

library ieee;

use ieee.std_logic_1164.all;

entity s_machine1 is

port(

clk, reset : in std_logic;

x : in std_logic;

z : out std_logic

);

end s_machine1;

architecture behav of s_machine2 is

type m_state is(s0, s1, s2);

signal present_state, next_state : m_state;

begin

-----------------------時序進程---------------------------

reg : process(reset, clk)

begin

if reset = ’1‘ then present_state 《= s0;

elsif clk = ’1‘ and clk’event then

prsent_state 《=nxet_state;

end if;

end process;

-------------------------組合進程-----------------------------

com : process(present_state, x)

begin

case prsent_state is

when s0 =》

if x = ‘0’ then next_state 《= s0;

else next_state 《= s1;

end if;

z 《= ‘0’;

when s1 =》

if x = ‘0’ then next_state 《= s0;

else next_state 《= s2;

end if;

z 《= ‘0’;

when s2 =》

if x = ‘0’; then next_state 《= s0; z 《= ‘1’;

else next_state 《= s2; z《= ‘0’;

end if

end case;

end process;

end behv;

可以看到在該程序中,只要輸入有變化,輸出z就會有變化,它并不依賴于時鐘的上升沿。

怎樣確保一個進程是組合進程:

1、不出現帶沿的語句,即組合進程中決不能出現用時鐘沿控制的敏感信號;

2、在組合電路的進程中,給出輸出端口的缺省值,這樣可以防止鎖存器的生成;

3、在敏感清單中包含所有的輸入量,防止鎖存器的生成。

敏感清單不全的話綜合時可能出現敬告。

例:下例敏感清單中輸入端口不全,可能出現鎖存器

p0 : process (a)

begin

q 《= a and b;

end process p0;

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

下面是一個實例,洗衣機的工作過程:

TYPE state_type IS(idle, fill, heat_w, wash, drain);

entity wm is

port(

clk, reset, door_closed, full : in std_logic;

heat_demand, done, empty : in std_logic;

water, spin, heat, pump : out std_logic

);

end wm;

architecture behave of wm is

------------------------說明部分--------------------------

--說明部分用枚舉數據類型來字義狀態機中的狀態;并把狀態變量(如現態和次態)定義為信號。

type state_type is (

idle, fill, heat_w, wash, drain);

signal state : state_type;

begin

process (clk, reset)

begin

if reset = ‘1’ then

state 《= idle;

elsif clk‘event and clk= ’1‘ then

case state is

when idle =》

if door_closed = ’1‘ then

state 《= fill;

else

state 《= idle;

end if

when fill =》

if full =’1‘; then

state 《= neat_w;

else

state 《= fill;

。

。

when others =》

state 《= idle;

end case

end if;

end process;

----------------------------------------------

利用兩個進程(純組合邏輯措施一)

--------------時序進程----------------------------

--時序進程是指在時鐘驅動下負責狀態轉換的進程,只表示次態和現態的關系

process(clk, reset)

begin

if reset =’1‘ then

state 《= idle;

elsif clk’event and clk = ‘1’ then

state 《= next_state;

end if;

end process;

------------------組合進程---------------------

組合進程的任務是根據輸入信號和現態對輸出端口賦值以及確定狀態機的下一個狀態,由于沒有任何信號

的賦值是通過其他某個信號的跳變來觸發的,所以不會產生寄存器。一般用CASE 或IF語句來實現

process(state, door_closed, full,

heat_demand, done, empty)

begin

case state is

when idle =》

if door_closed =‘1’ then

next_state 《= fill;

else

next_state 《= idle;

end if;

when fill =》

if full = ‘1’ then

next_state 《= heat_w;

else

next_state 《= fill;

。

。

。

end case;

end if;

end process;

process(state)

begin

water_i 《= ‘0’;

spin_i 《= ‘0’;

heat_i 《= ‘0’;

pump_i 《= ‘0’;

case state is

when idle =》

when fill =》

water_i 《= ‘1’;

when heat_w =》

spin_i 《=‘1’;

heat_i 《= ‘1’;

when wash =》

spin_i 《= ‘1’;

when drain =》

spin_i 《= ‘1’;

pump_i 《= ‘i’;

end case;

end process;

--------------寄存輸出---------------------

process (clk)

begin

if rising_edge(clk) then

water 《= water_i;

spin 《= spin_i;

heat 《= heat_i;

pump 《= pump_i;

end if;

end process

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120365
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27541
收藏 人收藏

    評論

    相關推薦

    SaberRD狀態機建模工具介紹(一)什么是狀態機建模

    狀態機建模是使用狀態圖和方程式的手段,創建基于混合信號的有限狀態機模型的一建模工具。
    的頭像 發表于 12-05 09:51 ?1727次閱讀
    SaberRD<b class='flag-5'>狀態機</b>建模工具介紹(一)什么是<b class='flag-5'>狀態機</b>建模

    Verilog狀態機+設計實例

    在verilog中狀態機的一很常用的邏輯結構,學習和理解狀態機的運行規律能夠幫助我們更好地書寫代碼,同時作為一思想方法,在別的代碼設計中也會有所幫助。 一、簡介 在使用過程中我們常
    的頭像 發表于 02-12 19:07 ?4144次閱讀
    Verilog<b class='flag-5'>狀態機</b>+設計實例

    玩轉Spring狀態機

    說起Spring狀態機,大家很容易聯想到這個狀態機和設計模式中狀態模式的區別是啥呢?沒錯,Spring狀態機就是狀態模式的一
    的頭像 發表于 06-25 14:21 ?953次閱讀
    玩轉Spring<b class='flag-5'>狀態機</b>

    有限狀態機有什么類型?

    在實際的應用中,根據有限狀態機是否使用輸入信號,設計人員經常將其分為Moore型有限狀態機和Mealy型有限狀態機種類型
    發表于 04-06 09:00

    狀態機是什么?什么是消息觸發類型狀態機?

    狀態機可歸納為哪幾個要素?狀態機可分為哪幾種?什么是消息觸發類型狀態機?
    發表于 04-19 06:02

    狀態機舉例

    狀態機舉例 你可以指定狀態寄存器和狀態機狀態。以下是一個有四狀態的普通
    發表于 03-28 15:18 ?986次閱讀

    狀態機代碼生成工具

    狀態機代碼生成工具狀態機代碼生成工具狀態機代碼生成工具狀態機代碼生成工具
    發表于 11-19 15:12 ?9次下載

    狀態機原理及用法

    狀態機原理及用法狀態機原理及用法狀態機原理及用法
    發表于 03-15 15:25 ?0次下載

    狀態機概述 如何理解狀態機

    本篇文章包括狀態機的基本概述以及通過簡單的實例理解狀態機
    的頭像 發表于 01-02 18:03 ?1w次閱讀
    <b class='flag-5'>狀態機</b>概述  如何理解<b class='flag-5'>狀態機</b>

    什么是狀態機 狀態機的描述三方法

    狀態機 1、狀態機是許多數字系統的核心部件,是一類重要的時序邏輯電路。通常包括三個部分:一是下一個狀態的邏輯電路,二是存儲狀態機當前狀態的時
    的頭像 發表于 11-16 17:39 ?2.7w次閱讀

    FPGA:狀態機簡述

    是FPGA設計中一非常重要、非常根基的設計思想,堪稱FPGA的靈魂,貫穿FPGA設計的始終。 02. 狀態機簡介 什么是狀態機狀態機通過不同的
    的頭像 發表于 11-05 17:58 ?7402次閱讀
    FPGA:<b class='flag-5'>狀態機</b>簡述

    什么是狀態機?狀態機5要素

    玩單片還可以,各個外設也都會驅動,但是如果讓你完整的寫一套代碼時,卻無邏輯與框架可言。這說明編程還處于比較低的水平,你需要學會一好的編程框架或者一編程思想!比如模塊化編程、狀態機
    的頭像 發表于 07-27 11:23 ?2w次閱讀
    什么是<b class='flag-5'>狀態機</b>?<b class='flag-5'>狀態機</b>5要素

    狀態模式(狀態機)

    share,作者:亞索老哥)),原來狀態機還可以這么簡單地玩~~亞索老哥提出的狀態機六步法(1)、定義狀態接口(2)、定義系統當前狀態指針(3
    發表于 12-16 16:53 ?9次下載
    <b class='flag-5'>狀態</b>模式(<b class='flag-5'>狀態機</b>)

    Verilog狀態機類型

    有限狀態機(Finite-State Machine,FSM),簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。
    的頭像 發表于 06-01 15:23 ?1880次閱讀
    Verilog<b class='flag-5'>狀態機</b>的<b class='flag-5'>類型</b>

    什么是狀態機狀態機種類與實現

    狀態機,又稱有限狀態機(Finite State Machine,FSM)或米利狀態機(Mealy Machine),是一描述系統狀態變化
    的頭像 發表于 10-19 10:27 ?9565次閱讀
    主站蜘蛛池模板: 久久澡人人澡狠狠澡| 69日本xxxxxxxxx19| 国产巨大bbbb俄罗斯| 欧美一卡2卡三卡四卡五卡 | 精品国产免费观看一区高清| 色妞色综合久久夜夜| 欧美成人伊人久久综合网| 精品黄色录像| 影音先锋色偷偷米奇四色| 色播影院性播免费看| 日本一区视频| 性欧美www| 你懂得视频在线| 都市激情综合网| 色屁屁www影院免费观看视频| 在线视频一区二区三区| 日本资源在线观看| 国产精品不卡片视频免费观看 | 天天躁日日躁狠狠躁中文字幕老牛 | 999久久久免费精品国产牛牛| 亚洲色图在线视频| 福利视频欧美| 99pao强力打造免费高清色| 日韩一级影院| 失禁h啪肉尿出来高h健身房| 免费观看视频| 亚洲综合香蕉| japan高清视频乱xxxxx| 欧美黄色录像视频| 在线人成精品免费视频| 欧美三级一级片| 免费看一级片| 美女又黄又www| 日韩欧美色| 欧美黑人粗硬大在线看| 亚洲美女爱爱| 五月天婷婷网站| 视频网站黄色| 欧美三级不卡在线观线看高清| 免费看片免费播放| 天堂网在线最新版www中文网|