原创 如何设计最优化的状态机(转)

2013-10-20 15:12 787 11 11 分类: FPGA/CPLD

状态机的设计步骤:
1.    深入的理解问题(Understand the problem)。用非常严谨的风格去解释问题的描述是非常重要的。对于状态机,你必须搞清楚什么样的输入会产生什么样的输出。
2.    获得一个对状态机的理论性的描述(Obtain an abstract representation of the FSM)。一旦你理解了问题,你必须用一种易于操作的形式表达出来,状态图是一种比较好的表示方法。
    
3.    对状态机进行优化(Perform state minimization.)。从上一步过来,通常会导致很多状态,很多状态会有相同的行为描述,这些状态应该被优化成同一个状态。
4.    进行状态编码的赋值(Perform state assignment)。编码方式好坏决定了执行的速度。
5.    选择何种类型的触发器来实现状态机(Choose flip-flop types for implementing the FSM's state),J-K触发器会减少门,但会改变转换表。D触发器是比较简明的实现过程。
6.    实现有限状态机(Implement the finite state machine)
四:写状态机需要注意的问题:
设计方案完全取决于设计要求:面积,速度。
1:如果有可能的话,选择output = state类型状态机是一个理想的方案,因为速度最快,使用的面积最小。
2:在设计状态机时,对于所有的输出信号在每一个时钟周期的取值,都必须作出非常明确的定义。也就是说在每一个状态周期里面,对每一个输出值,在该状态可能的各种情况下,都必须有明确的赋值。否则,综合结果会多很多不必要的门。
这是因为:由于没有在每一个状态周期里面给输出信号赋值,因而需要有硬件来维持原来的输出信号值保持不变。综合工具解决的唯一办法:把输出信号值反馈给多路选择器,当某一时钟周期没有给输出信号赋值时,多路选择器再把这个值送给输出信号,使得输出信号值得以维持不变。(这就是锁存LATCH效应)
3:注意消除锁存器,看下面的例子

 

现在就详细说一下one-hot状态机:
1.one-hot编码:s0 = “0001” ; s1 = “0010”; s2 = “0100”; s3 = “1000”;
                每一个状态用掉一个触发器,状态数等于触发器的数目。这就意味着触发器数目增加,而状态译码组合电路被优化掉了。对于寄存器资源丰富的xilinx器件来说,是非常适合的。
2.one-hot状态机的好处:
     现在的FPGA每一个逻辑块中都包含了一个和多个触发器,对于仅需要触发器的one-hot编码解码来说,提供了很好的条件。下面列举了一些用one-hot设计的好处:
a)    对寄存器资源丰富xilinx fpga来说更易于适配和布线。
b)     one-hot状态机是典型的相当快速的状态机。他的速度与状态的个数没有任何关系,仅仅决定于状态变迁到一个特殊状态的这种转换的数量(instead depend only on the number of transitions into a particular state)。
c)    不用担心你会在发现最佳的状态机编码方式。因为其他设计的状态机如果在加入一些状态或者改变其他一些什么的话,那就可能不再最优了。One-hot编码方式在所有状态机中是最佳的,最优的。
d)     one-hot状态机很容易设计。状态图能够直接被画成原理图或者被直接用vhdl语言写出来,而不用编码成状态表。
e)    修改起来简单明了。增加和删掉一些状态或者改变一些敏感量等式能被综合器很容易的执行,而不会影响余下的状态机。
f)    很容易从vhdl或者verilog综合。
g)    比其他一些高性能的状态机没有任何的布线面积的浪费。
h)    能够用静态时序分析的方法很容易的找出危险的不合理的状态机转换路径。

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条