有限狀態(tài)機(jī)教學(xué)PPT_第1頁
有限狀態(tài)機(jī)教學(xué)PPT_第2頁
有限狀態(tài)機(jī)教學(xué)PPT_第3頁
有限狀態(tài)機(jī)教學(xué)PPT_第4頁
有限狀態(tài)機(jī)教學(xué)PPT_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、有限狀態(tài)機(jī)有限狀態(tài)機(jī)n眾所周知,數(shù)字系統(tǒng)的基本結(jié)構(gòu)由控制單元和數(shù)據(jù)處理單元兩大部分組成。n控制單元在統(tǒng)一的同步時鐘控制下,嚴(yán)格地按照一定的時間關(guān)系輸出控制信號;n處理單元一步一 步地完成整個數(shù)字系統(tǒng)的操作。n其中,控制單元我們常采用有限狀態(tài)機(jī)(fsm)來實(shí)現(xiàn)一、問題引入:停車場計(jì)數(shù)器一、問題引入:停車場計(jì)數(shù)器n有一停車場,只有一個進(jìn)出口,如圖所示,有兩個傳感器a和b,可以測出車輛的進(jìn)出狀況,要求設(shè)計(jì)一個停車場計(jì)數(shù)器,能夠?qū)ν\噲鰞?nèi)的車輛進(jìn)行計(jì)數(shù),使用兩個led數(shù)碼管顯示停車場中的車輛數(shù)。分析: 當(dāng)有車出來時,首先a被擋住,接著a,b都被擋住,接著只有b被擋住,最后a、b都沒被擋住。 當(dāng)有車進(jìn)去

2、時,首先b被擋住,接著a,b都被擋住,接著只有a被擋住,最后a、b都沒被擋住。出進(jìn)ab停車場計(jì)數(shù)器模塊圖停車場計(jì)數(shù)器模塊圖abrstclk數(shù)碼管數(shù)碼管段碼段碼車進(jìn)出判決模塊加減計(jì)數(shù)器譯碼器clk_enadd/sub車輛進(jìn)入判決模塊設(shè)計(jì)車輛進(jìn)入判決模塊設(shè)計(jì)ab11step 1車輛進(jìn)入判決模塊設(shè)計(jì)車輛進(jìn)入判決模塊設(shè)計(jì)ab10step 2車輛進(jìn)入判決模塊設(shè)計(jì)車輛進(jìn)入判決模塊設(shè)計(jì)ab00step 3車輛進(jìn)入判決模塊設(shè)計(jì)車輛進(jìn)入判決模塊設(shè)計(jì)ab01step 4車輛進(jìn)入判決模塊設(shè)計(jì)車輛進(jìn)入判決模塊設(shè)計(jì)ab11step 5車輛進(jìn)出判決模塊設(shè)計(jì)車輛進(jìn)出判決模塊設(shè)計(jì)n設(shè)計(jì)這個模塊的思想是:q引入狀態(tài),代表上述的

3、step1step5q狀態(tài)如何改變由輸入決定q模塊模塊的輸出由狀態(tài)來決定step1step4step3step2step5a=1b=0a=0b=0a=0b=1a=1b=1輸出clk和a/sstep 1clk=0 a/s= 0step 2clk=0 a/s= 1a = 1b = 0step 7clk=0 a/s= 0step 8clk=0 a/s= 0step 6clk=0 a/s= 0step 3clk=0 a/s= 1step 4clk=0 a/s= 1step 9clk=1 a/s= 0step 5clk=1 a/s= 1a = 1b = 1a = 1b = 1a = 1b = 0a =

4、0b = 0a = 0b = 1a = 1b = 1a = 0b = 0a = 1b = 0a = 0b = 1a = 0b = 0a = 0b = 1a = 0b = 0a = 0b = 0a = 1b = 0a = 1b = 0a = 0b = 0a = 0b = 1a = 1b = 1a = 1b = 1a = 0b = 11.莫爾狀態(tài)機(jī)模型莫爾狀態(tài)機(jī)模型狀態(tài)譯碼狀態(tài)寄存器輸出譯碼clk輸入現(xiàn)態(tài)次態(tài)輸出二二. 狀態(tài)機(jī)模型狀態(tài)機(jī)模型library ieee;use ieee.std_logic_1164.all;entity system isport ( clock: in std_lo

5、gic;input: in std_logic;output: out std_logic);end system;architecture moore of system istype state is(st0,st1,st2,. ););signal next_state, current_state: state;beginf1: process (input, current_state) 狀態(tài)譯碼狀態(tài)譯碼 beginnext_state = f1(input, current_state); end process;莫爾狀態(tài)機(jī)莫爾狀態(tài)機(jī)vhdl實(shí)現(xiàn)實(shí)現(xiàn)f2: process (clo

6、ck) 狀態(tài)寄存器狀態(tài)寄存器 beginif rising_edge(clock) thencurrent_state = next_state;end if; end process;f3: process (current_state) 輸出譯碼輸出譯碼 beginoutput = f3(current_state); end process;end moore;莫爾狀態(tài)機(jī)莫爾狀態(tài)機(jī)vhdl實(shí)現(xiàn)實(shí)現(xiàn)狀態(tài)機(jī)說明部分狀態(tài)機(jī)說明部分用戶自定義數(shù)據(jù)類型定義語句用戶自定義數(shù)據(jù)類型定義語句typetype語句用法語句用法如下:如下:type type 數(shù)據(jù)類型名數(shù)據(jù)類型名 is is 數(shù)據(jù)類型定義數(shù)據(jù)

7、類型定義 of of 基本數(shù)據(jù)類型基本數(shù)據(jù)類型 ; ;或或type type 數(shù)據(jù)類型名數(shù)據(jù)類型名 is is 數(shù)據(jù)類型定義數(shù)據(jù)類型定義 ; ;以下列出了兩種不同的定義方式:以下列出了兩種不同的定義方式:type st1 is array ( 0 to 15 ) of std_logic ;type st1 is array ( 0 to 15 ) of std_logic ;type week is (suntype week is (sun,monmon,tuetue,wedwed,thuthu,frifri,sat) ;sat) ;狀態(tài)機(jī)說明部分狀態(tài)機(jī)說明部分用戶自定義數(shù)據(jù)類型定義語句用

8、戶自定義數(shù)據(jù)類型定義語句type m_state is ( st0,st1,st2,st3,st4,st5 ) ; signal present_state,next_state : m_state ;布爾數(shù)據(jù)類型的定義語句是:布爾數(shù)據(jù)類型的定義語句是: type boolean is type boolean is (falsefalse,truetrue) ;type my_logic is ( 1 type my_logic is ( 1 ,z z ,u u ,0 ) ;0 ) ; signal s1 : my_logic ; signal s1 : my_logic ; s1 = z

9、; s1 = z ; 2米利狀態(tài)機(jī)米利狀態(tài)機(jī)狀態(tài)譯碼狀態(tài)寄存器輸出譯碼clk輸入現(xiàn)態(tài)次態(tài)輸出library ieee;use ieee.std_logic_1164.all;entity system isport ( clock: in std_logic;input: in std_logic;output: out std_logic);end system;architecture mealy of system istype state is(st0,st1,st2,. ););signal next_state, current_state: state;beginf1: proc

10、ess (input, current_state) 狀態(tài)譯碼狀態(tài)譯碼 beginnext_state = f1(input, current_state); end process;米利狀態(tài)機(jī)米利狀態(tài)機(jī)vhdl實(shí)現(xiàn)實(shí)現(xiàn)register: process (clock) 狀態(tài)寄存器狀態(tài)寄存器 beginif rising_edge(clock) thencurrent_state = next_state;end if; end process;f2: process (input,current_state) 輸出譯碼輸出譯碼 beginoutput = f2(input, current_

11、state); end process;end mealy;米利狀態(tài)機(jī)米利狀態(tài)機(jī)vhdl實(shí)現(xiàn)實(shí)現(xiàn)3onehot狀態(tài)機(jī)狀態(tài)機(jī)狀態(tài)編碼為獨(dú)熱碼:只有一位是1,其他都是0。constant st0:std_logic_vector(2 downto 0):=”001”;constant st1:std_logic_vector(2 downto 0):=”010”;constant st2:std_logic_vector(2 downto 0):=”100”;.signal current_state: std_logic_vector(2 downto 0);signal next_state:

12、 std_logic_vector(2 downto 0);缺點(diǎn):需要的硬件資源多于二進(jìn)制編碼狀態(tài)機(jī)優(yōu)點(diǎn):1.輸出譯碼簡單; 2.速度快; 3.不必考慮最優(yōu)問題; 4.易于修改。有限狀態(tài)機(jī)有限狀態(tài)機(jī)假設(shè)要設(shè)計(jì)一個假設(shè)要設(shè)計(jì)一個adad控制器控制器adc0809控制器功能圖adc0809ainoealeadda,b,cstartadc0809控制器fpga數(shù)字輸出d7:0eocclkclk有限狀態(tài)機(jī)有限狀態(tài)機(jī)步驟0步驟1步驟4步驟3步驟2地址鎖存選擇通道啟動轉(zhuǎn)換等待轉(zhuǎn)換結(jié)束轉(zhuǎn)換結(jié)束數(shù)據(jù)輸出初態(tài)步驟5等待eoc變低電平eoceoc1. adc0809控制器控制器選擇莫爾機(jī)來實(shí)現(xiàn)選擇莫爾機(jī)來實(shí)現(xiàn) ,

13、狀態(tài)轉(zhuǎn)移圖如下,狀態(tài)轉(zhuǎn)移圖如下st0st1st2st3st4st5ale=0start=0oe=0ale=1start=0oe=0ale=0start=1oe=0ale=0start=0oe=0eoc0eoc1eoc1ale=0start=0oe=0ale=0start=0oe=1eoc0library ieee;use ieee.std_logic_1164.all;entity adcint isport ( d : in std_logic_vector(7 downto 0); -0809的的8位轉(zhuǎn)換數(shù)位轉(zhuǎn)換數(shù)據(jù)輸出據(jù)輸出 clk ,eoc : in std_logic; -clk是轉(zhuǎn)

14、換工作時鐘是轉(zhuǎn)換工作時鐘 ale, start, oe : out std_logic;adda : out std_logic_vector(2 downto 0); q : out std_logic_vector(7 downto 0) );end adcint;architecture behav of adcint istype states is (st0, st1, st2, st3,st4,st5) ; -定義各狀態(tài)子類型定義各狀態(tài)子類型 signal current_state, next_state: states :=st0 ;begin adda = “000”; pr

15、ocess (clk) -狀態(tài)寄存器狀態(tài)寄存器 begin if ( clkevent and clk=1) then current_state next_state next_state next_state if (eoc=1) then next_state = st3; -測試測試eoc的下降沿的下降沿 else next_state if (eoc=0) then next_state = st4; -測試測試eoc的上升沿,的上升沿,=1表明轉(zhuǎn)換結(jié)束表明轉(zhuǎn)換結(jié)束 else next_state next_state next_state ale=0;start=0;oe ale=

16、1;start=0;oe ale=0;start=1;oe ale=0;start=0;oe ale=0;start=0;oe ale=0;start=0;oe=1; q ale=0;start=0;oe ale=0;start=0;oe=0; next_state ale=1;start=0;oe=0; next_state ale=0;start=1;oe=0; next_state ale=0;start=0;oe=0; if (eoc=1) then next_state = st3; -測試測試eoc的下降沿的下降沿 else next_state ale=0;start=0;oe=

17、0; if (eoc=0) then next_state = st4; -測試測試eoc的上升沿,的上升沿,=1表明轉(zhuǎn)換結(jié)束表明轉(zhuǎn)換結(jié)束 else next_state ale=0;start=0;oe=1; q=d; next_state ale=0;start=0;oe=0; next_state = st0; end case ; end process pro ;vhdlvhdl實(shí)現(xiàn):把狀態(tài)譯碼和譯碼輸出寫在一個實(shí)現(xiàn):把狀態(tài)譯碼和譯碼輸出寫在一個進(jìn)程里進(jìn)程里2. “11”序列檢測器序列檢測器選擇莫爾機(jī)來實(shí)現(xiàn)選擇莫爾機(jī)來實(shí)現(xiàn) ,狀態(tài)轉(zhuǎn)移圖如下,狀態(tài)轉(zhuǎn)移圖如下a/0b/0c/1dout=

18、0dout=0dout=1din=1din=1din=0din=0din=1din=0library ieee;use ieee.std_logic_1164.all;entity system isport (clk: in std_logic; reset: in std_logic; din: in std_logic; dout: out std_logic);end system;architecture behave of system istype state is(a,b,c);signal next_state, current_state: state;begin proc

19、ess (clk,reset) - state registersbeginif reset = 1 then current_state = a;elsif clkevent and clk = 1 thencurrent_state if din = 1 then next_state = b;else next_state if din = 1 then next_state = c;else next_state if din = 1 then next_state = c;else next_state null;end case;end process;f2: process (c

20、urrent_state) - output logicbeginif current_state = c then dout = 1; elsedout = 0;end if;end process;end behave;“11”序列的序列的vhdl描述描述2. “11”序列檢測器序列檢測器選擇米利機(jī)來實(shí)現(xiàn)選擇米利機(jī)來實(shí)現(xiàn) ,狀態(tài)轉(zhuǎn)移圖如下,狀態(tài)轉(zhuǎn)移圖如下abdout=0dout=1din=1din=0din=0din=1dout=0dout=0library ieee;use ieee.std_logic_1164.all;entity system isport (clk: in std

21、_logic;reset: in std_logic;din: in std_logic;dout: out std_logic);end system;architecture behave of system istype state is(a,b););signal next_state, current_state: state;beginregister: process (clk,reset) - state registersbeginif reset = 1 then current_state = a;elsif clkevent and clk = 1 thencurren

22、t_state if din = 1 then next_state = b;else next_state if din = 0 then next_state = a;else next_state null;end case;end process;f2: process (clk,din, current_state) - output logicbeginif clkevent and clk = 1 thenif din = 1 and current_state = b then dout = 1;elsedout = 0;end if;end if;end process;en

23、d behave;以上三種狀態(tài)機(jī)的輸出都是組合邏輯電路,所以會產(chǎn)生毛刺現(xiàn)象。解決毛刺有三種方法:1)改善電路結(jié)構(gòu),使得電路中信號延時一致。2)利用時鐘將信號重新讀取一遍。3)在電路中注入一信號將毛刺覆蓋,但不影響正常的信號。這里采用第二種方法,在狀態(tài)機(jī)的輸出端加一個寄存器,使用系統(tǒng)時鐘重新讀一遍,就可以消除毛刺。四四.輸出信號的同步輸出信號的同步f2: process (clk,reset,current_state) - output logicbeginif reset = 1 thendout = 0elseif clkevent and clk = 1 thenif current_s

24、tate = c then dout = 1;elsedout = 0;end if;end if;end if;end process;vhdl描述描述五、狀態(tài)編碼五、狀態(tài)編碼1 狀態(tài)位直接輸出型編碼狀態(tài)位直接輸出型編碼控制信號狀態(tài)編碼表控制信號狀態(tài)編碼表每一位的編碼值都賦予了實(shí)際的控制功能,即:每一位的編碼值都賦予了實(shí)際的控制功能,即: start = current_state(4););ale = current_state(3) ; oe = current_state(2) ; lock = current_state(1) 。【例【例7-7】library ieee;use ie

25、ee.std_logic_1164.all;entity ad0809 is port ( d : in std_logic_vector(11 downto 0); clk ,eoc : in std_logic; ale,start,oe,adda : out std_logic; c_state : out std_logic_vector(4 downto 0); q : out std_logic_vector(7 downto 0) );end ad574a;architecture behav of ad0809 issignal current_state, next_stat

26、e: std_logic_vector(4 downto 0 ); constant st0 : std_logic_vector(4 downto 0) := “00000 ; constant st1 : std_logic_vector(4 downto 0) := “11000 ; constant st2 : std_logic_vector(4 downto 0) := 00001 ; constant st3 : std_logic_vector(4 downto 0) := 00100 ; constant st4 : std_logic_vector(4 downto 0) := 00110 ; signal regl : std_logic_vector(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論