设计的控制器时序仿真如图2所示。
由图2可以看到direct输出信号出现毛刺,对于精密控制器来说这是不允许的。毛刺多由组合逻辑导致的,若在输出部分加入一个寄存器节拍,可消除毛刺保证输出信号的稳定性,但输出就会延迟一个周期,所以当时序允许时该方式是很好的选择。
使用3个进程模块,一个模块采用同步时序描述状态转移;第二个采用组合逻辑判断状态转移条件,描述状态转移规律;第三个模块使用同步时序电路描述每个状态的输出,该写法称为三段式写法。分析其结构概括为图3所示框图。
改进后的控制器时序仿真如图4所示。
三段式与两段式描述相比,虽然代码结构复杂了一些,但是换来的优势是做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,在FPGA上的综合与布局布线效果更佳。
一般而言,推荐的状态机描述方法是后两种。其原因:设计最好使用同步时序方式,以提高设计的稳定性,消除毛刺。状态机实现后,状态转移部分是同步时序电路而状态的转移条件的判断是组合逻辑。两段式描述方法虽然有很多好处,但一个明显的弱点就是其输出使用组合逻辑描述,易产生毛刺等不稳定因素,并且在逻辑器件中过多的组合逻辑会影响实现的速率,而三段式巧妙地根据下一状态的判断,用同步时序逻辑寄存状态机的输出。
5.毛刺和竞争处理
毛刺的产生,一方面由于状态机中包含有组合逻辑进程,使得输出信号在时钟的有效边沿产生毛刺;另一方面当状态信号是多位值的时候,由于传输延迟的存在,各信号线上的值发生改变的时间会有先后,使得状态迁移的时候出现临时状态。当状态机的输出信号作为其他功能模块的控制信号使用时,
将会使受控模块发生误动作, 造成系统工作混乱。因此,在这种情况下必须通过改变设计消除毛刺。
消除状态机输出信号的“ 毛刺”一般可从一下几点改进:
①在电路设计时,选用延迟时间较小的器件,且尽可能采用级数少的电路结构;或者把时钟信号引入组合进程,用时钟来同步状态迁移,
保证了输出信号没有毛刺,但这样增加了输出寄存器, 硬件开销增大, 这对于一些寄存器资源较少的目标芯片是不利的;而且还会限制系统时钟的最高工作频率;
由于时钟信号将输出加载到附加的寄存器上, 所以在输出端得到信号值的时间要比状态的变化延时一个时钟周期。
②调整状态编码,
使相邻状态间只有1位信号改变,避免毛刺的产生。
③直接把状态机的状态码作为输出信号,即采用状态码直接输出型状态机, 使状态和输出信号一致,
使得输出译码电路被优化掉了。这种方案, 占用芯片资源少, 信号与状态变化同步, 速度快, 是一种较优方案。但在设计过程中对状态编码时可能增加状态向量,
出现多余状态。虽然可用CASE语句中WHEN-OTHERS 来安排多余状态, 但有时难以有效控制多余状态,
运行时可能会出现难以预料的情况。因此它适用于状态机输出信号较少的场合。这种方式的缺点是削弱了设计的可读性和可维护性[3]。
有限状态机综合中的竞争现象是指由于敏感信号的频繁变化导致状态机在同一个节拍内多次改变状态,影响电路的正常工作。当输出信号反馈回来作为输入信号的时候,就会发生竞争。这里要指出的是在综合前模拟的时候往往不能发现描述中潜在的竞争现象,只有在综合后,竞争才会完全暴露出来。消除竞争的办法是把造成竞争的信号从敏感信号表中除去,而改成由时钟信号来触发进程,这样就使状态一个节拍只改变一次[4]。
6.状态机的优化
优化的目标主要有两个: 速度和规模,但是速度条件越苛刻, 所需规模就越大, 因此优化电路结构时,
应综合考虑各方面因素, 选择最优化方案。电路结构分为逻辑电路和时序电路。逻辑电路的优化包括布尔表达式的优化等,
时序电路包括通常的时序电路和状态机。状态机优化包括选择合适状态和编码等,
比如合理的归并以及减少状态的数量等都能大大简化电路,在编程时应尽量把可归并的逻辑放入同一结构体中, 这样可以有效优化电路结构[5]。
7.结论
有限状态机是数字系统的一个重要组成部分。本文详细讨论了状态机各部分及应注意的事项和各种不同写法的优缺点。以上只是作者在项目设计实践中学习并总结的一些经验与体会,设计时需根据实际情况做适合的选择。
参考文献
[1] 吴继华,王诚.《Verilog设计与验证》[M],北京:人民邮电出版社,2006。
[2]
王巍,高德远.有限状态机设计策略 [J].计算机工程与应用,1999,7:54-55.
[3] 鲁玲,刘大年.消除状态机毛刺策略探讨 [J]
.电子技术应用,2006,9:118-119.
[4] 李春霞,顾新,王君.有限状态机的VHDL 描述及综合
[J].计算机工程与应用,2005,6:111-113.
[5] 骆珊,黄明达.VHDL 电路结构优化设计探讨 [J]
.计算机应用,2001,4:14-15.
阅读(1802) | 评论(0) | 转发(0) |