博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三段式状态机设计
阅读量:4223 次
发布时间:2019-05-26

本文共 1263 字,大约阅读时间需要 4 分钟。

状态机设计需满足的几个要求:


1. 三段式要求

有限状态机采用三段式风格,即三个always块描述状态机.

 

第一个组合逻辑always块用来描述下一状态的转移(next state logic)       第二个时序逻辑always块用来描述当前状态.(current state) 寄存器的复位和变化.            第三个always块用来描述输出.(output logic)  组合or时序 均可.

优点:书写清晰,组合与时序分离设计,易于综合,且在一定程度上避免了状态转移和输出等组合逻辑中的毛刺.


2. 状态机状态信号命名方法

 

当前状态命名为current_state,下一状态命名为next_state.

主要目的是为了提高状态机的可读性,为分析逻辑功 能提供方便,也可以是cstate or nstate.


3.编码方式

 

准则:使用参数赋值状态  两种常用的编码方式:二进制编码及独热码编码  二进制编码占用的位数少,但其状态跳变需要额外的译码电路,这样的编码方式会对状态机的运行速度有所限制,可以满足一般的设计要求。  独热码编码,以n bit表示n个 状态,这样编码的译码部分可以做到最简,工作频率可以做到较高,相对于二进制而言,需要更多的位。

建议使用的独热码,电路的速度和可靠性有显著的提高,但注意:存在多余的状态,就有一些不可到达的状态,需要在case语句的最后,加default分支,以确保能回到IDLE状态。


4.状态机设计的注意事项

 

设计的状态跳转条件是否充分    状态跳转条件都不满足的情况下,状态机如何工作    未定义的状态应如何设计    状态机跳转设计中,是否受外部信号的影响

5.三段式的写法

 

组合逻辑always块:(负责状态的跳转)、  always@(current_state or else signal)(敏感列表中存放对状态跳转有影响的信号)     begin     next_state=x;    (初始化,使得系统复位进入正确的状态)     case(current_state)     s1: if(.....) next_state=s2     .     .     .......     endcase     end    时序逻辑always块:        always@(posedge clk or negedge rst)         if(!rst)         current_state<=IDLE;         else         current_state<=next_state;  描述输出的always块可以是组合的也可以是时序的;

6.典型的序列检测状态机写法:


IMG_0141.JPG

作者:喜欢萝莉的逗逼青年
链接:https://www.jianshu.com/p/5eee434ab24d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的文章
Oracle 11g 新特性 -- 自动诊断资料档案库(ADR) 说明
查看>>
Oracle 11g 新特性 -- RMAN Data Recovery Advisor(DRA) 说明
查看>>
CSDN博客之星 投票说明
查看>>
Oracle wallet 配置 说明
查看>>
Oracle smon_scn_time 表 说明
查看>>
VBox fdisk 不显示 添加的硬盘 解决方法
查看>>
Secure CRT 自动记录日志 配置 小记
查看>>
RMAN RAC 到 单实例 duplicate 自动分配通道 触发 ORA-19505 错误
查看>>
mysql 随机分页的优化
查看>>
DB2快速创建测试库
查看>>
利用db2look查看ddl
查看>>
SD卡驱动分析--基于高通平台
查看>>
[图文] Seata AT 模式分布式事务源码分析
查看>>
pm 源码分析
查看>>
Sending the User to Another App
查看>>
kmsg_dump
查看>>
Getting a Result from an Activity
查看>>
Allowing Other Apps to Start Your Activity
查看>>
dev/mem
查看>>
pfn_valid 源码分析
查看>>