例:完成自動售貨機的VHDL設計。要求:有兩種硬幣:1元或5角,
投入1元5角硬幣輸出貨物,投入2元硬幣輸出貨物並找5角零錢。
程序:
library ieee;
use ieee.std_logic_1164.all;
entity sale is
port(clk: in std_logic;
rst:in std_logic;
input:in std_logic_vector(1 downto 0);
output:out std_logic_vector(2 downto 0));
end entity;
architecture one of sale is
type STATE is (S0,S1,S2,S3,S4);
SIGNAL CURRENT_STATE,NEXT_STATE:STATE;
begin
REG:PROCESS(clk,rst)
BEGIN
if rst='0' then CURRENT_STATE<=S0;
ELSIF CLK'EVENT AND CLK='1' THEN
CURRENT_STATE<=NEXT_STATE;
END IF;
END PROCESS;
COM:PROCESS(CURRENT_STATE)--,NEXT_STATE)
BEGIN
CASE CURRENT_STATE IS
WHEN S0=>output<="00";
if input="00" then NEXT_STATE<=S0;
elsif input="01" then NEXT_STATE<=S1;
elsif input="10" then NEXT_STATE<=S2;
end if;
WHEN S1=>output<="00";
if input="00" then NEXT_STATE<=S1;
elsif input="01" then NEXT_STATE<=S2;
elsif input="10" then NEXT_STATE<=S3;
end if;
WHEN S2=>output<="00";
if input="00" then NEXT_STATE<=S2;
elsif input="01" then NEXT_STATE<=S3;
elsif input="10" then NEXT_STATE<=S4;
end if;
WHEN S3=>output<="10";
if input="00" then NEXT_STATE<=S0;
elsif input="01" then NEXT_STATE<=S1;
elsif input="10" then NEXT_STATE<=S2;
end if;
WHEN S4=>output<="11";
if input="00" then NEXT_STATE<=S0;
elsif input="01" then NEXT_STATE<=S1;
elsif input="10" then NEXT_STATE<=S2;
end if;
end case;
END PROCESS;
end;
分析:
- 狀態定義:S0表示初態,S1表示投入5角硬幣,S2表示投入1元硬幣,S3表示投入1元5角硬幣,S4表示投入2元硬幣
- 輸入信號: state_ input(o)表示投入1元硬幣, state_ input(1)表示投入5角硬幣。輸入信號爲1表示投入硬幣,輸入信號爲0表示未投入硬幣
- 輸出信號: comb outputs(⑦0)表示輸出貨物, comb outputs(1)表示找5角零錢。
- 輸出信號爲1表示輸出貨物或找錢,輸出信號爲0表示不輸出貨物或不找錢
流程圖:
理論部分:
1.狀態機( State Machine)是一類很重要的時序電路,是很多邏輯
電路的核心部件,是實現高效率、高可靠性邏輯控制的重要途徑。
2.狀態機相當於一個控制器,它將一項功能的完成分解爲若干步,
每一步對應於二進制的一個狀態,通過預先設計的順序在各狀態
之間進行轉換,狀態轉換的過程就是實現邏輯功能的過程
狀態機根據輸出信號與當前狀態以及輸入信號的關係來分,可以分爲摩爾( Moore)型和米立( Mealy)型。
輸出信號只和當前狀態有關的狀態機稱爲 Moore型狀態機;
輸出信號不僅和當前狀態有關,而且也和輸入信號有關的狀態機稱爲 Mealy型狀態機
Moore型狀態機
Mealy型狀態機
狀態機主要由四部分組成,但這4部分並非都是必須的。它們可以進行各種不同形式的變換,但基本構成思想是一樣的
(1)說明部分:定義枚舉型數據類型 Iype state is(s0,s1,s2,:;定義現態信號 current state和次態信號 next state
*2)主控時序進程:在時鐘驅動下負責狀態轉換。只是機械地將代表次態信號的 next state中的內容送入現態信號的 current state中。
(3)主控組合進程:根據外部輸入的控制信號和當前狀態確定下狀態的取向,以及確定當前對外的輸出
(4)輔助進程:爲了完成某種算法或爲了輸出設置的鎖存器