8.状态机

引用b站大佬rong晔手册

1.Moore 型状态机: 输出只由当前状态决定,即次态=f(现状,输入),输出=f(现状);
Mealy 型状态机: 输出不但与当前状态有关,还与当前输入值有关,即次态=f(现状,输入),
输出=f(现状,输入);

Moore型时序电路:Moore机比Mealy机滞后一个时钟周期,Moore机的输出只由当前状态决定,因此当前输入只能在下一状态,就是下一个时钟周期才能发挥作用。 

Mealy型时序电路:Mealy机输出受当前输入决定。Mealy机能够对输入进行实时监测。

Mealy机状态少,Moore机结构简单。 

2.三段式状态机

一段式:整个状态机写到一个 always 模块里面,在该模块中既描述状态转移,又描述状态的输入和输出;
二段式:用两个 always 模块来描述状态机,其中一个 always 模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出;
三段式: 在两个 always 模块描述方法基础上,使用三个 always 模块,一个 always 模块采用同步时序描述状态转移,一个 always 采用组合逻辑判断状态转移条件,描述状态转移规律,另一个 always 模块描述状态输出(可以用组合电路输出,也可以时序电路输出)。

三段式状态机模板:

//第一个进程,同步时序 always 模块,格式化描述次态寄存器迁移到现态寄存器
always @ (posedge clk or negedge rst_n) //异步复位
if(!rst_n)
current_state <= IDLE;
else
current_state <= next_state; //注意,使用的是非阻塞赋值


//第二个进程,组合逻辑 always 模块,描述状态转移条件判断
always @ (current_state) //电平触发,现存状态为敏感信号
begin
next_state = x; //要初始化,使得系统复位后能进入正确的状态
case(current_state)
S1: if(...)
next_state = S2; //阻塞赋值(为什么这里用阻塞赋值)
S2: if(...)
next_state = S3; //阻塞赋值
……
endcase
end


//第三个进程,同步时序 always 模块,格式化描述次态寄存器输出
always @ (posedge clk or negedge rst_n)
begin
...//初始化
case(next_state)
S1:
out1 <= 1'b1; //注意是非阻塞逻辑
S2:
out2 <= 1'b1;
default:... //default 的作用是免除综合工具综合出锁存器
endcase
end

3.设计原则:
当要求输出对输入快速响应及希望电路尽量简单时,选择Mealy型电路。当要求时序输出稳定,能接受输出序列晚一个周期,及选择Moore型电路不增加电路复杂性时,适宜选择Moore型电路。 作者:Rong晔 https://www.bilibili.com/read/cv7680709/?from=readlist 出处:bilibili

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值