自动售货机VHDL设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
moore reset clk state_inputs
current _state next_st ate
state_inputs
architecture be of moore is type fsm_st is (s0, s1, s2,s3,s4); signal current_state, next_state: fsm_st; begin reg: process (reset,clk) begin if reset = '1' then current_state <= s0; --发生 发生reset异步复位 发生 异步复位 elsif rising_edge(clk) then current_state <= next_state; end if; end process; --发生 时钟上升沿 发生clk时钟上升沿 发生 --进行状态转换 进行状态转换 --时序进程 时序进程 --状态的枚举类型定义 状态的枚举类型 状态的枚举类型定义 --状态信号的定义 状态信号的定义
6.3 有限状态机设计
有限状态机分类:根据状态机输出的不同, 有限状态机分类:根据状态机输出的不同,分 型和Moore型两种状态机。, 型两种状态机。, 类Mealy型和 型和 型两种状态机
Mealy型状态机:其输出是当前状态和输入信号的函数 型状态机: 型状态机 Moore型状态机:只是当前状态的函数。 型状态机:只是当前状态的函数。 型状态机Biblioteka Baidu
com: process (current_state, state_Inputs) --组合进程 组合进程 begin S0/00 case current_state is 现态s0,输出00 when s0 => comb_outputs<= "00"; --现态 ,输出 现态 if --输入不同,次态不同 输入不同, 输入不同 state_inputs = "00" then next_state<=s0; --输入 ,次态 输入00,次态s0 输入 elsif state_inputs = "01" then next_state<=s1; --输入 ,次态 输入01,次态s1 输入 elsif state_inputs = "10" then next_state<=s2; --输入 ,次态 输入10,次态s2 输入 end if; S1/00 现态 ,输出 --现态 现态s1,输出00 when s1 =>comb_outputs<= "00"; if state_inputs = "00" then next_state<=s1; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s2; elsif state_inputs = "10" then next_state<=s3; end if;
设计可以在实验箱上完成。 该moore.vhd设计可以在实验箱上完成。 设计可以在实验箱上完成 课设: 课设: 设计并制作一个投币取物机。完成自动售 设计并制作一个投币取物机。 货机VHDL设计。要求:有两种硬币:1元 设计。要求:有两种硬币: 元 货机 设计 角硬币输出货物, 或5角,投入 元5角硬币输出货物,投入 角 投入1元 角硬币输出货物 投入2 元硬币输出货物并找5角零钱。 元硬币输出货物并找 角零钱。 角零钱
when s2 =>comb_outputs<= "00"; --现态 现态s2 现态 if state_inputs = "00" then next_state<=s2; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s3; elsif state_inputs = "10" then next_state<=s4; end if; when s3 =>comb_outputs<= "10"; --现态 ,输出 现态s3,输出10 现态 if state_inputs = "00" then next_state<=s0; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s1; elsif state_inputs = "10" then next_state<=s2; end if; when s4 =>comb_outputs<= "11"; --现态 ,输出 现态s4,输出11 现态 if state_inputs = "00" then next_state<=s0; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s1; elsif state_inputs = "10" then next_state<=s2; end if; end case; end process; end be;
型状态机设计, 设计。 例6.15: Moore型状态机设计,完成自动售货机 : 型状态机设计 完成自动售货机VHDL设计。 设计 要求:有两种硬币: 元和 元和5角 投入1元 角硬币输出货物 角硬币输出货物, 要求:有两种硬币:1元和 角,投入 元5角硬币输出货物,投入 2元硬币输出货物并找 角零钱。 元硬币输出货物并找5角零钱 元硬币输出货物并找 角零钱。 状态定义: 表示初态 表示初态, 表示投入 角硬币, 表示投入 表示投入5角硬币 表示投入1元硬 状态定义:S0表示初态,S1表示投入 角硬币,S2表示投入 元硬 表示投入1元 角硬币 角硬币, 表示投入 元硬币。 表示投入2元硬币 币,S3表示投入 元5角硬币,S4表示投入 元硬币。 表示投入 输入信号: 表示投入1元硬币 输入信号:state_input (0)表示投入 元硬币,state_input (1)表示 表示投入 元硬币, 表示 投入5角硬币 输入信号为1表示投入硬币 输入信号为0表示未 角硬币。 表示投入硬币, 投入 角硬币。输入信号为 表示投入硬币,输入信号为 表示未 投入硬币。 投入硬币。 输出信号: 表示输出货物, moore 输出信号:comb_outputs (0)表示输出货物, comb_outputs (1)表 表示输出货物 表 reset 示找5角零钱 输出信号为1表示输出货物或找钱 输入信号为0 角零钱。 表示输出货物或找钱, 示找 角零钱。输出信号为 表示输出货物或找钱,输入信号为 current state_inputs _state clk 表示不输出货物或不找钱。 表示不输出货物或不找钱。 state_inputs next_st 根据设计要求分析,得到状态转换图如图所示。状态S0、 、 根据设计要求分析,得到状态转换图如图所示。状态 、S1、
S0表示初态 表示初态
状态/输出 状态 输出 元角/物零 元角 物零
2元硬币 元硬币
输入信号
5角硬币 角硬币
输出信号: 输出信号: comb_outputs (0)表示输 表示输 出货物, 出货物, comb_outputs (1)表示找 角零钱。输出 表示找5角零钱 表示找 角零钱。 信号为1表示输出货物或 信号为 表示输出货物或 找钱,输入信号为0表示 找钱,输入信号为 表示 不输出货物或不找钱。 不输出货物或不找钱。 根据设计要求分析,得到 根据设计要求分析, 状态转换图如图所示。 状态转换图如图所示。状 态S0、S1、S2、S3和S4; 、 、 、 和 ; 输入state_inputs(0,1);输 输入 ; 出comb_outputs(0,1);输 ; 出仅与状态有关,因此将 出仅与状态有关, 输出写在状态圈内部。 输出写在状态圈内部。
1元硬币 元硬币
1元5角 元 角
library ieee; use ieee.std_logic_1164.all; entity moore is port ( clk,reset : in std_logic; state_inputs : in std_logic_vector (0 to 1); comb_outputs : out std_logic_vector (0 to 1)); end moore;
ate
S2、S3和S4;输入 、 和 ;输入state_inputs(0,1);输出 ;输出comb_outputs(0,1);输 ; 出仅与状态有关,因此将输出写在状态圈内部。 出仅与状态有关,因此将输出写在状态圈内部。
状态定义: 表示初态 表示初态, 状态定义:S0表示初态, S1表示投入 角硬币,S2 表示投入5角硬币 表示投入 角硬币, 表示投入1元硬币 元硬币, 表 表示投入 元硬币,S3表 示投入1元 角硬币 角硬币, 表 示投入 元5角硬币,S4表 示投入2元硬币 元硬币。 示投入 元硬币。
元角
输入信号: 输入信号: state_input (0)表示投入 表示投入1 表示投入 元硬币, 元硬币, state_input (1)表示投入 表示投入5 表示投入 角硬币。 角硬币。 输入信号为1表示投入硬 输入信号为 表示投入硬 输入信号为0表示未 币,输入信号为 表示未 投入硬币。 投入硬币。
moore.vhd仿真波形分析:输入为10时,表示投入一元硬币,状 仿真波形分析:输入为 时 表示投入一元硬币, 仿真波形分析 态由s0转换到 状态 当再次检测到投入一元硬币,则状态由s2 态由 转换到s2状态,当再次检测到投入一元硬币,则状态由 转换到 状态, 转换到s4状态,输出 ,表明输出货物且找零钱。 转换到 状态,输出11,表明输出货物且找零钱。如果检测到投 状态 入了3次 角硬币 状态变化顺序为s0→s1→s2→s3,到状态变化 角硬币, 入了 次5角硬币,状态变化顺序为 , 到s3时,输出 ,表明输出货物且不找零钱。 时 输出10,表明输出货物且不找零钱。
有限状态机设计描述的组成部分:说明部分、 有限状态机设计描述的组成部分:说明部分、时序进 程、组合进程和辅助进程。 组合进程和辅助进程。 说明部分:进行状态机的状态名定义,其数据类型是 说明部分:进行状态机的状态名定义, 枚举类型。 枚举类型。 时序进程:说明在时钟信号的作用下, 时序进程:说明在时钟信号的作用下,状态是如何转 换的。 换的。 组合进程: 组合进程:根据输入信号和状态确定输出以及状态机 内部所需的控制信号。 内部所需的控制信号。 辅助进程:配合时序进程和组合进程,提供数据锁存 辅助进程:配合时序进程和组合进程, 等功能。 等功能。
current _state next_st ate
state_inputs
architecture be of moore is type fsm_st is (s0, s1, s2,s3,s4); signal current_state, next_state: fsm_st; begin reg: process (reset,clk) begin if reset = '1' then current_state <= s0; --发生 发生reset异步复位 发生 异步复位 elsif rising_edge(clk) then current_state <= next_state; end if; end process; --发生 时钟上升沿 发生clk时钟上升沿 发生 --进行状态转换 进行状态转换 --时序进程 时序进程 --状态的枚举类型定义 状态的枚举类型 状态的枚举类型定义 --状态信号的定义 状态信号的定义
6.3 有限状态机设计
有限状态机分类:根据状态机输出的不同, 有限状态机分类:根据状态机输出的不同,分 型和Moore型两种状态机。, 型两种状态机。, 类Mealy型和 型和 型两种状态机
Mealy型状态机:其输出是当前状态和输入信号的函数 型状态机: 型状态机 Moore型状态机:只是当前状态的函数。 型状态机:只是当前状态的函数。 型状态机Biblioteka Baidu
com: process (current_state, state_Inputs) --组合进程 组合进程 begin S0/00 case current_state is 现态s0,输出00 when s0 => comb_outputs<= "00"; --现态 ,输出 现态 if --输入不同,次态不同 输入不同, 输入不同 state_inputs = "00" then next_state<=s0; --输入 ,次态 输入00,次态s0 输入 elsif state_inputs = "01" then next_state<=s1; --输入 ,次态 输入01,次态s1 输入 elsif state_inputs = "10" then next_state<=s2; --输入 ,次态 输入10,次态s2 输入 end if; S1/00 现态 ,输出 --现态 现态s1,输出00 when s1 =>comb_outputs<= "00"; if state_inputs = "00" then next_state<=s1; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s2; elsif state_inputs = "10" then next_state<=s3; end if;
设计可以在实验箱上完成。 该moore.vhd设计可以在实验箱上完成。 设计可以在实验箱上完成 课设: 课设: 设计并制作一个投币取物机。完成自动售 设计并制作一个投币取物机。 货机VHDL设计。要求:有两种硬币:1元 设计。要求:有两种硬币: 元 货机 设计 角硬币输出货物, 或5角,投入 元5角硬币输出货物,投入 角 投入1元 角硬币输出货物 投入2 元硬币输出货物并找5角零钱。 元硬币输出货物并找 角零钱。 角零钱
when s2 =>comb_outputs<= "00"; --现态 现态s2 现态 if state_inputs = "00" then next_state<=s2; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s3; elsif state_inputs = "10" then next_state<=s4; end if; when s3 =>comb_outputs<= "10"; --现态 ,输出 现态s3,输出10 现态 if state_inputs = "00" then next_state<=s0; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s1; elsif state_inputs = "10" then next_state<=s2; end if; when s4 =>comb_outputs<= "11"; --现态 ,输出 现态s4,输出11 现态 if state_inputs = "00" then next_state<=s0; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s1; elsif state_inputs = "10" then next_state<=s2; end if; end case; end process; end be;
型状态机设计, 设计。 例6.15: Moore型状态机设计,完成自动售货机 : 型状态机设计 完成自动售货机VHDL设计。 设计 要求:有两种硬币: 元和 元和5角 投入1元 角硬币输出货物 角硬币输出货物, 要求:有两种硬币:1元和 角,投入 元5角硬币输出货物,投入 2元硬币输出货物并找 角零钱。 元硬币输出货物并找5角零钱 元硬币输出货物并找 角零钱。 状态定义: 表示初态 表示初态, 表示投入 角硬币, 表示投入 表示投入5角硬币 表示投入1元硬 状态定义:S0表示初态,S1表示投入 角硬币,S2表示投入 元硬 表示投入1元 角硬币 角硬币, 表示投入 元硬币。 表示投入2元硬币 币,S3表示投入 元5角硬币,S4表示投入 元硬币。 表示投入 输入信号: 表示投入1元硬币 输入信号:state_input (0)表示投入 元硬币,state_input (1)表示 表示投入 元硬币, 表示 投入5角硬币 输入信号为1表示投入硬币 输入信号为0表示未 角硬币。 表示投入硬币, 投入 角硬币。输入信号为 表示投入硬币,输入信号为 表示未 投入硬币。 投入硬币。 输出信号: 表示输出货物, moore 输出信号:comb_outputs (0)表示输出货物, comb_outputs (1)表 表示输出货物 表 reset 示找5角零钱 输出信号为1表示输出货物或找钱 输入信号为0 角零钱。 表示输出货物或找钱, 示找 角零钱。输出信号为 表示输出货物或找钱,输入信号为 current state_inputs _state clk 表示不输出货物或不找钱。 表示不输出货物或不找钱。 state_inputs next_st 根据设计要求分析,得到状态转换图如图所示。状态S0、 、 根据设计要求分析,得到状态转换图如图所示。状态 、S1、
S0表示初态 表示初态
状态/输出 状态 输出 元角/物零 元角 物零
2元硬币 元硬币
输入信号
5角硬币 角硬币
输出信号: 输出信号: comb_outputs (0)表示输 表示输 出货物, 出货物, comb_outputs (1)表示找 角零钱。输出 表示找5角零钱 表示找 角零钱。 信号为1表示输出货物或 信号为 表示输出货物或 找钱,输入信号为0表示 找钱,输入信号为 表示 不输出货物或不找钱。 不输出货物或不找钱。 根据设计要求分析,得到 根据设计要求分析, 状态转换图如图所示。 状态转换图如图所示。状 态S0、S1、S2、S3和S4; 、 、 、 和 ; 输入state_inputs(0,1);输 输入 ; 出comb_outputs(0,1);输 ; 出仅与状态有关,因此将 出仅与状态有关, 输出写在状态圈内部。 输出写在状态圈内部。
1元硬币 元硬币
1元5角 元 角
library ieee; use ieee.std_logic_1164.all; entity moore is port ( clk,reset : in std_logic; state_inputs : in std_logic_vector (0 to 1); comb_outputs : out std_logic_vector (0 to 1)); end moore;
ate
S2、S3和S4;输入 、 和 ;输入state_inputs(0,1);输出 ;输出comb_outputs(0,1);输 ; 出仅与状态有关,因此将输出写在状态圈内部。 出仅与状态有关,因此将输出写在状态圈内部。
状态定义: 表示初态 表示初态, 状态定义:S0表示初态, S1表示投入 角硬币,S2 表示投入5角硬币 表示投入 角硬币, 表示投入1元硬币 元硬币, 表 表示投入 元硬币,S3表 示投入1元 角硬币 角硬币, 表 示投入 元5角硬币,S4表 示投入2元硬币 元硬币。 示投入 元硬币。
元角
输入信号: 输入信号: state_input (0)表示投入 表示投入1 表示投入 元硬币, 元硬币, state_input (1)表示投入 表示投入5 表示投入 角硬币。 角硬币。 输入信号为1表示投入硬 输入信号为 表示投入硬 输入信号为0表示未 币,输入信号为 表示未 投入硬币。 投入硬币。
moore.vhd仿真波形分析:输入为10时,表示投入一元硬币,状 仿真波形分析:输入为 时 表示投入一元硬币, 仿真波形分析 态由s0转换到 状态 当再次检测到投入一元硬币,则状态由s2 态由 转换到s2状态,当再次检测到投入一元硬币,则状态由 转换到 状态, 转换到s4状态,输出 ,表明输出货物且找零钱。 转换到 状态,输出11,表明输出货物且找零钱。如果检测到投 状态 入了3次 角硬币 状态变化顺序为s0→s1→s2→s3,到状态变化 角硬币, 入了 次5角硬币,状态变化顺序为 , 到s3时,输出 ,表明输出货物且不找零钱。 时 输出10,表明输出货物且不找零钱。
有限状态机设计描述的组成部分:说明部分、 有限状态机设计描述的组成部分:说明部分、时序进 程、组合进程和辅助进程。 组合进程和辅助进程。 说明部分:进行状态机的状态名定义,其数据类型是 说明部分:进行状态机的状态名定义, 枚举类型。 枚举类型。 时序进程:说明在时钟信号的作用下, 时序进程:说明在时钟信号的作用下,状态是如何转 换的。 换的。 组合进程: 组合进程:根据输入信号和状态确定输出以及状态机 内部所需的控制信号。 内部所需的控制信号。 辅助进程:配合时序进程和组合进程,提供数据锁存 辅助进程:配合时序进程和组合进程, 等功能。 等功能。