实验题目 :利用状态机实现多功能循环彩灯控制。
要求:实现 4 种循环方式,每种循环方式运行 5 次后,自动转换为下一种循环方式。
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity statem is port(clk:in std_logic;
q:out std_logic_vector(6 downto 0)); end statem;
architecture led of statem is type states is(s0,s1,s2,s3); signal state:states;
signal count:integer range 1 to 4; begin
p1:process(clk)
variable n:integer:=0;
begin
if(clk'event and clk='1')then count<=1; case state is when s0=> if n<20 then case count is
when 1 =>q<=\"1000001\" ;count<=count+1; when 2 =>q<=\"1100011\" ;count<=count+1; when 3 =>q<=\"1110111\" ;count<=count+1; when 4 =>q<=\"1111111\" ;count<=1; end case; n:=n+1;
else n:=0; state<=s1; end if;
when s1=> if n<20 then
case count is
when 1=>q<=\"0001000\" ;count<=count+1; when 2=>q<=\"0011100\" ;count<=count+1; when 3=>q<=\"0111110\" ;count<=count+1; when 4=>q<=\"1111111\" ;count<=1; end case; n:=n+1;
else n:=0; state<=s2; end if;
when s2=> if n<20 then case count is
when 1=>q<=\"0000011\" ;count<=count+1; when 2=>q<=\"0001100\" ;count<=count+1; when 3=>q<=\"0110000\" ;count<=count+1; when 4=> q<=\"1100000\" ;count<=1; end case; n:=n+1;
else n:=0; state<=s3; end if;
when s3=> if n<20 then case count is
when 1=>q<=\"0001111\" ;count<=count+1; when 2=> q<=\"0011110\" ;count<=count+1; when 3=>q<=\"0111100\" ;count<=count+1; when 4=> q<=\"1111000\" ;count<=1; end case; n:=n+1;
else n:=0; state<=s0; end if;
end case; end if;
end process p1; end led;
在数字电路系统中,有限状态机时一种十分重要的时序逻辑电路模块,它对数字系
统的设计具有十分重要的作用。它也是其它领域一种常用的设计思想.
如:交通灯的控制,开关的控制,流水线的控制,软件设计等.在日常生活中,我们的一些活动也可以抽象为有限状态机模型.
FSM一般包括:
输入信号集合 输出信号集合 状态集合
{输入信号,当前状态}到{输出信号,下一状态}的转换函数 初始状态
如果用数字电路来实现FSM,则电路一般由一个组合电路部分和一个时序电路部分
组成.
BDC码计数器
Mealy FSM:
因篇幅问题不能全部显示,请点此查看更多更全内容