Lecture5有限状态机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Longman
11
状态转换图
状态1

/出
条件控 制定序

状态4
/出

入 状态2
/出
状态3
/出
Moore
直接控 制定序
2020/2/10
Longman
12
状态转换图
条件控 制定序
入/出
状态1
入/出
状态4
入/出 状态2
Mealy
入/出
状态3
/出
直接控 制定序
2020/2/10
Longman
13
用VHDL描述状态机的组成
现在我们得到了一个比较通用 的时序电路,这种电路统称为
din
状态机(State Machine)。
Next_value Q(n+1)
Clk
+/-1 Regs
Present_value
Q(n) 译码
DataOut Z(n)
2020/2/10
Longman
7控制态可以看 作一种状态,与每一个控制态相关的转换 条件指定了当前状态的下一个状态和输出。
S1 既不制冷也不制热 hot=0/cool=0
S3
制冷
hot=0/cool=1
S3
thigh=0&tlow=0 thigh=0&tlow=1
S1 既不制冷也不制热 hot=0/cool=0
S2
制热
hot=1/cool=0
2020/2/10
Longman
29
状态机的应用设计
例子:设计一个二进制序列检测器,当检测到 10110序列时,就输出1(一个时钟周期的脉冲)。 其他情况下输出0。
• 根据有限状态机的输出与当前状态与当前 输入的关系,可以分成Moore型和Mealy 型两种类型的有限状态机。
2020/2/10
Longman
8
Moore状态机和Mealy状态机
• Moore状态机的输出只与当前状态有关
输入
时钟 复位
次态 次态 逻辑
状 态 现态 寄存器
输出 输出 逻辑
2020/2/10
–对每一个状态建立一项CASE语句的分支 WHEN 状态名 =>
–确定输出变量 –通过IF-THEN-ELSE语句指定相应的次
态。
2020/2/10
Longman
22
•例
case present_state is -- CASE分支 when idle => oe<='0';we<='0'; --确定输出变量 if(ready = '1') then--确定次态 next_state <= decision; else next_state <= idle; end if;
Present_value
Q(n) 译码
DataOut Z(n)
2020/2/10
Longman
4
Din=1
00/0 Din = 0
Din = 1 Din = 0 Din = 0
11/0 Din = 0 10/1
Din = 1
再将计数器修改成一
个状态转换器,状态
01/0
为S0, S1, S2, S3。 每个状态的取值根据
2020/2/10
Longman
23
例:三进程描述方式1
ARCHITECTURE fsm OF memory_enable IS
TYPE state_type IS(idle,decision,read,write);
SIGNAL present_state,next_state: state_type;
END IF;
…………………
END CASE;
END PROCESS nextstate_logic;
2020/2/10
Longman
24
例:三进程描述方式2
state_register: PROCESS(clk) BEGIN
IF(RISING_EDGE(clk)) THEN present_state <= next_state;
Din = 1 Din = 0 Din = 0
S3/0 Din = 0 S2/1
Din = 1
再将计数器修改成一 个状态转换器,状态 为S0, S1, S2, S3。 S1/0 每个状态的取值根据 具体情况而定。比如
S0 = 00, S1 = 11, Din = 1 S3 = 01, S4 = 10。
END IF; END PROCESS state_registe
2020/2/10
Longman
25
例:三进程描述方式3
output_logic: PROCESS(present_state) BEGIN
CASE WHEN idle => we <= ‘0’;oe <= ‘0’; WHEN decision =>we<=‘0’;oe<=‘0’; WHEN read=>we<=‘0’;oe<=‘1’; WHEN write=>we<=‘1’;oe<=‘0’;
tlow=0
S3
thigh=0 tlow=1
空调控制器状态转换图
hot=0 cool=1
2020/2/10
Longman
27
任务1:空调控制器
S1:
表示温度适中,不高也不低,对应着输入信号 thigh和tlow均为低电平(无效),空调器既不制冷也
不制热,因此输出控制信号hot和cool都是低电平。
Longman
20
状态转换
• 有些状态的转换中,在条件满足时, 转换到下一个状态,否则保持原来的 状态不变。这种情况对应着IF-THENELSE的两个分支。
• 在这种情况下,ELSE分支并不是必需 的。但是缺少ELSE分支,会导致额外 的存储器。
2020/2/10
Longman
21
•状态描述的步骤:
18
建立状态转换表,列出次态和转换条件
当前状态 idle decision
write
read
次态
转换条件
decision write read
ready=’1’ w_r=’0’ w_r=’1’
idle write
ready=’1’ ready=’0’
idle read
ready=’1’ ready=’0’
BEGIN
nextstate_logic:PROCESS(present_state,ready,
read_write)
BEGIN
CASE present_state IS
WHEN idle =>
IF(ready = ‘1’) THEN
next_state <= decision;
ELSE
next_state <= idle;
3
Din=1
00/0 Din = 0
Din = 1 Din = 0 Din = 0
Din = 0 11/0
10/1 Din = 1
01/0
扩展一个输入端din, 当din = 1时计数器递 增计数;当din = 0时 计数器递减计数。
Din = 1
din Next_value
Q(n+1)
Clk
+/-1 Regs
• 设计一个存储控制器, 它的具体要求为:(1)存
储控制器能够根据微处 理器的读周期或者写周 期,分别对存储器输出 写使能信号we和读使能 信号oe;(2)存储控制 器的输入信号有3个:微
处理器的准备就绪信号 ready、微处理器的读 写信号read_write和 时钟信号clk。
ready idle
双进程描 形式1 进程1:描述次态逻辑、状态寄存器
述方式
进程2:描述输出逻辑
形式2 进程1:描述状态寄存器、输出逻辑 进程2:描述次态逻辑
形式3 进程1:描述次态逻辑、输出逻辑 进程2:描述状态寄存器
单进程描述方式 进程1:描述次态逻辑、状态寄存器和 输出逻辑
2020/2/10
Longman
16
存储控制器
具体情况而定。比如
Din = 1
S0 = 00, S1 = 11, S3 = 01, S4 = 10。
din Next_value
Q(n+1)
Clk
+/-1 Regs
Present_value
Q(n) 译码
DataOut Z(n)
2020/2/10
Longman
5
Din=1
S0/0 Din = 0
2020/2/10
Longman
28
任务1:空调控制器
状态转换表
当前 状态
转换条件
下一 状态
执行操作
输出值
S1
thigh=0&tlow=1 thigh=1&tlow=0
S2 S3
制热 制冷
hot=1/cool=0 hot=0/cool=1
S2
thigh=0&tlow=0 thigh=1&tlow=0
Clk
2020/2/10
+1 Regs
Present_value
Q(n) 译码
DataOut Z(n)
Longman
2
00/0 11/0
01/0 10/1
Next_value Q(n+1)
Clk
2020/2/10
+1 Regs
Present_value
Q(n) 译码
DataOut Z(n)
Longman
END CASE; END PROCESS output_logic
2020/2/10
Longman
26
任务1:空调控制器
hot=0 cool=0
S1
thigh=0 tlow=0
hot=1 cool=0
S2
thigh=0
tlow=1
thigh=1 tlow=0
thigh=0 tlow=0
thigh=1
din Next_value
Q(n+1)
Clk
+/-1 Regs
Present_value
Q(n) 译码
DataOut Z(n)
2020/2/10
Longman
6
Din=1
S0/0
Din = 0 Din = 1 Din = 0
S1/0
S3/0
Din = 0 Din = 0
S2/1 Din = 1
Din = 1
(3)三进程描述方式:一个进程用来描述有限状态
机中的次态逻辑;一个进程用来描述有限状态机 中的状态寄存器;另外一个进程用来描述有限状 态机中的输出逻辑。
2020/2/10
Longman
15
状态机的VHDL描述方式
描述方式 进程描述功能
三进程描述方式 进程1:描述次态逻辑 进程2:描述状态寄存器 进程3:描述输出逻辑
S2:
表 示 温 度 太 低 , 对 应 着 输 入 信 号 tlow 为 高 电 平 , thigh为低电平,此时空调器应该工作在制热状态,
相应的输出控制信号hot为高电平,cool无效。
S3:
表示温度太高,对应着输入信号thigh为高电平, tlow为低电平,此时空调器应该工作在制冷状态,
相应的输出控制信号cool为高电平,hot无效。
• 一 个 用 来 描 述 有 限 状 态 机 功 能 的 VHDL 语言程序中应该包含以下几个内容:
– (1)至少包括一个状态信号,它们用来指定有 限状态机的状态;
– (2)状态转移指定和输出指定,它们对应于控 制单元中与每个控制步有关的转移条件;
– (3)时钟信号,它一般是用来进行同步的; – (4)同步或异步复位信号。
规定检测到一次之后,检测器复位到最初始的状 态,重新从头检测。如下所示:
输入:01101101101100 输出:00000001000001
ready
ready ready
decision
read_write read_write
read
write
ready ready
2020/2/10
Longman
17
存储控制器
•列出当前状态和输出值的关系
状态
输出
OE
WE
idle
0
0
decision
0
0
write
0
1
read
1
0
2020/2/10
Longman
Longman
9
Moore状态机和Mealy状态机
• Mealy状态机的输出与当前状态机及 当前输入信号有关
输入
时钟 复位
次态 次态 逻辑
状 态 现态 寄存器
输出 输出 逻辑
2020/2/10
Longman
10
状态机的表示方法
• 状态转换表 • 算法流程图 • 状态转换图
这是最流行的 表示方法
2020/2/10
2020/2/10
Longman
14
状态机的VHDL描述方式
(1)单进程描述方式:单进程描述方式就是指在 VHDL语言程序的结构体中,使用一个进程语句
来描述有限状态机中的次态逻辑、状态寄存器和 输出逻辑。
(2)双进程描述方式:一个进程语句用来描述有限
状态机中次态逻辑、状态寄存器和输出逻辑中的 任何两个;另外一个进程则用来描述有限状态机 剩余的功能。
2020/2/10
Longman
19
•利用VHDL语言进行状态机描述
– 所有状态均可以表达为CASE-WHEN结构 中的一条语句。
– 状态的转移通过if-then-else语句实现。 CASE present_state IS
WHEN idle => 输出量;
IF ELSE END IF;
2020/2/10
有限状态机 Finite State Machine
2020/2/10
Longman
1
例:计数器设计
• 设计一电路,包含基4计数器,和译码输出模块。 计数器的输出(Present_value)从0到3循环; 当计数值为2时,译码输出(DataOut)为“1”, 否则输出“0”。
Next_value Q(n+1)
相关文档
最新文档