99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

3天內(nèi)不再提示

狀態(tài)機常見的3種類型 狀態(tài)機案例設(shè)計

西西 ? 來源:博客園 ? 作者:中國的孩子 ? 2020-08-08 10:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、狀態(tài)機設(shè)計

Mealy 機方框圖

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

Moore機方框圖

2、狀態(tài)機---3種類型

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

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

枚舉的:

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

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

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

3、對生剩余狀態(tài)的處理

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

2、用OTHERS語句來對未提及的狀態(tài)做統(tǒng)一處理。

Moore 型狀態(tài)機設(shè)計

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

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

例:

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; --只有在時鐘的上升沿時,輸出才會發(fā)生變化。是同步輸出。

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 型的有限狀態(tài)機設(shè)計

米立狀態(tài)機的輸出信號是當前狀態(tài)和輸出信號的函數(shù),它的輸出在輸入變化后立即發(fā)生變化,

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

例:

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、不出現(xiàn)帶沿的語句,即組合進程中決不能出現(xiàn)用時鐘沿控制的敏感信號;

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

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

敏感清單不全的話綜合時可能出現(xiàn)敬告。

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

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

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

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

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;

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

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

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

--時序進程是指在時鐘驅(qū)動下負責狀態(tài)轉(zhuǎn)換的進程,只表示次態(tài)和現(xiàn)態(tài)的關(guān)系

process(clk, reset)

begin

if reset =’1‘ then

state 《= idle;

elsif clk’event and clk = ‘1’ then

state 《= next_state;

end if;

end process;

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

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

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

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

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

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124546
  • 狀態(tài)機
    +關(guān)注

    關(guān)注

    2

    文章

    493

    瀏覽量

    28254
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Verilog狀態(tài)機+設(shè)計實例

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

    玩轉(zhuǎn)Spring狀態(tài)機

    說起Spring狀態(tài)機,大家很容易聯(lián)想到這個狀態(tài)機和設(shè)計模式中狀態(tài)模式的區(qū)別是啥呢?沒錯,Spring狀態(tài)機就是狀態(tài)模式的一
    的頭像 發(fā)表于 06-25 14:21 ?1313次閱讀
    玩轉(zhuǎn)Spring<b class='flag-5'>狀態(tài)機</b>

    有限狀態(tài)機有什么類型?

    在實際的應用中,根據(jù)有限狀態(tài)機是否使用輸入信號,設(shè)計人員經(jīng)常將其分為Moore型有限狀態(tài)機和Mealy型有限狀態(tài)機種類型。
    發(fā)表于 04-06 09:00

    狀態(tài)機是什么?什么是消息觸發(fā)類型狀態(tài)機

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

    如何寫好狀態(tài)機

    如何寫好狀態(tài)機:狀態(tài)機是邏輯設(shè)計的重要內(nèi)容,狀態(tài)機的設(shè)計水平直接反應工程師的邏輯功底,所以許多公司的硬件和邏輯工程師面試中,狀態(tài)機設(shè)計幾乎是必選題目。本章在引入
    發(fā)表于 06-14 19:24 ?97次下載

    狀態(tài)機舉例

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

    狀態(tài)機代碼生成工具

    狀態(tài)機代碼生成工具狀態(tài)機代碼生成工具狀態(tài)機代碼生成工具狀態(tài)機代碼生成工具
    發(fā)表于 11-19 15:12 ?9次下載

    狀態(tài)機原理及用法

    狀態(tài)機原理及用法狀態(tài)機原理及用法狀態(tài)機原理及用法
    發(fā)表于 03-15 15:25 ?0次下載

    狀態(tài)機概述 如何理解狀態(tài)機

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

    什么是狀態(tài)機 狀態(tài)機的描述三方法

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

    FPGA:狀態(tài)機簡述

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

    什么是狀態(tài)機?狀態(tài)機5要素

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

    狀態(tài)模式(狀態(tài)機)

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

    Verilog狀態(tài)機類型

    有限狀態(tài)機(Finite-State Machine,F(xiàn)SM),簡稱狀態(tài)機,是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學模型。
    的頭像 發(fā)表于 06-01 15:23 ?2290次閱讀
    Verilog<b class='flag-5'>狀態(tài)機</b>的<b class='flag-5'>類型</b>

    什么是狀態(tài)機?狀態(tài)機種類與實現(xiàn)

    狀態(tài)機,又稱有限狀態(tài)機(Finite State Machine,F(xiàn)SM)或米利狀態(tài)機(Mealy Machine),是一描述系統(tǒng)狀態(tài)變化
    的頭像 發(fā)表于 10-19 10:27 ?1.2w次閱讀