【转载】状态机编码

本文介绍了状态机编码的概念,探讨了在2007年10月18日的一个项目中,如何应用不同编码方式来实现异步模块的设计,重点关注输入、输出以及工作流程的优化。
摘要由CSDN通过智能技术生成
状态机编码
2007-10-18 13:49
经常会看到在状态机设计中别人使用各种不同的编码方式,那么一般情况下,这种编码方式的选择依据是什么?
          我们知道,在数字逻辑设计中最常用的有三种编码方式:二进制,格雷码 Gray,独热编码One-hot One hot 编码使用一组码元,每一个码元仅有1bit有效,例如
IDLE = 0001,
WRITE = 0010,
READ = 0100,
WAIT = 1000
这种编码的译码部分可以最简,因此可以总结出One-hot编码的特点:
组合逻辑最少,触发器最多,工作时钟频率可以做到最高。
FPGA 的一个最小结构单元(CLB/LE)中含有查找表(实现组合逻辑)和DFF(实现时序逻辑),布局布线最好的结果是同一个结构单元中的查找表和DFF都使用,但是大部分情况是仅使用其中一种资源,这样另外的资源就是闲置而浪费。而CPLD中DFF资源本来就很少,由此可见One-hot编码更适合于 FPGA设计,而不适合CPLD设计,在CPLD中应该选择二进制编码。
IC设计中,应该综合考虑。因为One-hot编码使用DFF会大大增加设计面积(die size),因此在时序可以满足的条件下尽可能使用二进制编码。就面积与速度的折中考虑来说Gray码是最好的选择,当然Gray码还有其他很多好的特性,暂时不属于这次讨论的范畴。一般的综合工具对状态机进行综合时都可以让用户对这三种编码进行选择。基本依据就以上所说。

二进制与格雷码之间的转换
自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似
二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似

通过减少寄存器间的逻辑延时来提高工作频率,或通过流水线设计来优化数据处理时的数据通路来满足高速环境下FPGA或CPLD中的状态机设计要求。本文给出了采用这些技术的高速环境状态机设计的规范及分析方法和优化方法,并给出了相应的示例。

          为了使FPGA或CPLD中的状态机设计满足高速环境要求,设计工程师需要认识到以下几点:寄存器资源和逻辑资源已经不是问题的所在,状态机本身所占用的FPGA或CPLD逻辑资源或寄存器资源非常小;状态机对整体数据流的是串行操作,如果希望数据处理的延时非常小,就必须提高操作的并行程度,压缩状态机中状态转移的路径长度;高速环境下应合理分配状态机的状态及转移条件。本文将结合实际应用案例来说明。

状态机设计规范

1. 使用一位有效的方式进行状态编码
          状态机中状态编码主要有三种:连续编码(sequential encoding)、一位有效(one-hot encoding)方式编码以及不属于这两种的编码。例如,对于一个5个状态(State0~State4)的状态机,连续编码方式状态编码为:State0-000、State1-001、State2-010、State3-011、State4-100。一位有效方式为下为:State0-00001、State1-00010、State2-00100、State3-01000、State4-10000。对于自行定义的编码则差别很大,例如试图将状态机的状态位直接作为输出所需信号,这可能会增加设计难度。

          使用一位有效编码方式使逻辑实现更简洁,因为一个状态只需要用一位来指示,而为此增加的状态寄存器数目相对于整个设计来说可以忽略。一位有效至少有两个含义:对每个状态位,该位为1对应唯一的状态,判断当前状态是否为该状态,只需判断该状态位是否为1;如果状态寄存器输入端该位为1,则下一状态将转移为该状态,判断下一状态是否为该状态,只需判断表示下一状态的信号中该位是否为1。

2. 合理分配状态转移条件
         在状态转移图中,每个状态都有对应的出线和入线,从不同状态经不同的转移条件到该状态的入线数目不能太多。以采用与或逻辑的CPLD设计来分析,如果这样的入线太多则将会需要较多的乘积项及或逻辑,这就需要更多级的逻辑级联来完成,从而增加了寄存器间的延迟;对于FPGA则需要多级查找表来实现相应的逻辑,同样会增加延迟。状态机的应用模型如图1所示。

状态机设计的分析方法
          状态机设计的分析方法可以分为两种:一种是流程处理分析,即分析数据如何分步处理,将相应处理的步骤依次定为不同状态,该方法能够分析非常复杂的状态机,类似于编写一个软件程序的分析,典型设计如读写操作和数据包字节分析ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值