状态机学习

摘要:
起初,SRAM读写控制器是根据我自己的想法设计的。在中间,采用了Blackgold推荐的模拟顺序操作来实现控制。该方法易于理解,接近状态机。然而,后来发现这种方法不是很好。无论是在线还是资深兄弟都不推荐。就个人而言,我还认为这是作者的状态机风格,这可能不适合我。总之,建议状态机使用两段和三段。为了完成SRAM的精确控制,适当增加状态机状态的数量以等待。

手头接手的项目是利用FPGA进行图像的采集、存储、处理和传输。项目接手有近一年了,现在回过头来总结下。

存储采用了外部的SRAM。一开始就按自己的思路设计SRAM读写控制器,中间采用过黑金推荐的仿顺序操作实现控制,这方法挺好理解,接近于状态机。但是后来发现,这个方法不是很好,网上和师兄都不推荐,个人也觉得是作者的一种状态机风格,并不一定适合自己。所以,后来开始接触状态机。状态机的学习走了很多弯路,自己参考了《设计与验证》这本书中“如何写好状态机”这一章、Clifford E. Cummings(他网站上的文章可以好好拜读下http://www.sunburst-design.com/papers/)关于状态机的几篇文章和foreveryoung的“状态机设计”。

总结下,状态机推荐使用二段式和三段式。二段式中,第一段时序逻辑,负责状态的转移;第二段组合逻辑,负责状态转移条件判断和状态输出。三段式中,第一段和二段式一样为时序逻辑,负责状态的转移;第二段组合逻辑,负责状态转移条件判断;第三段时序逻辑,次态寄存器控制状态输出。目前我的项目中,基本使用的是二段式的状态机,有一个模块是三段式的风格,但是在第二段中也有状态输出,有点混合二段式和三段式的感觉(心里还是有点不踏实)。前段时间调试没有结果,怀疑文献所述的二段式状态输出有毛刺。故对二段式进行ModelSim仿真,确实可以看到有些信号有毛刺存在,后来发现不是这个原因,就没有再关注,这个还有待注意。我想,在同步电路设计下,如果时序通过、功能实现这点毛刺还是可以允许的。

有几个注意点:

1. 在SRAM控制中,使用了锁存器,地址数据线共用。为了完成SRAM的准确控制,适当增加了状态机状态数进行等待。但这也影响了读写速度,还需完善,看看能否减少状态数。

2. 外部信号进入状态机进行两级同步。

3. 在验证自己的状态机时序时,结合内部逻辑分析仪SignalTap抓数据,可保证时序的正确。

4. 无论两段式还是三段式,在case前增加了所有状态的默认输出。这样保证不会产生额外的锁存器,如果状态输出需要改变,则在case下相应状态后更改输出。

免责声明:文章转载自《状态机学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mybatis教程:入门>>精通>>实战sourceTree+gerrit管理代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Raft协议--中文论文介绍

本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为《In search of an Understandable Consensus Algorithm (Extended Version)》(寻找一种易于理解的一致性算法)。 Raft 是一种用来管理日志复制的一致性算法。它和 Paxos 的性能和功能是一样的,但是它和 Paxos 的结构不一...

ip黑白名单防火墙frdev的原理与实现

汤之盘铭曰 苟日新 日日新 又日新 康诰曰 作新民 诗曰 周虽旧邦 其命维新 是故 君子无所不用其极                           ——礼记·大学 在上一篇文章《DDoS攻防战 (二) :CC攻击工具实现与防御理论》中,笔者阐述了一个防御状态机,它可用来抵御来自应用层的DDoS攻击,但是该状态机依赖一个能应对大量条目快速增删的ip黑白...

状态机学习及对一段 java 代码的改写

《敏捷软件开发:原则、模式与实践》这本书中的第 29 章讲解了 State 模式,例子是地铁里的十字转门。书中对于状态机的实现,有一个范例是使用迁移表来实现(程序 29.12, P382),这里不列出详细代码。我在这个例子里面了解到,原来 java 还支持 private interface,并且可以不创建接口的实例,而直接生成一个实现了接口的对象。使用的...

HBase丢失数据的故障和原因分析

hbase的稳定性是近期社区的重要关注点,毕竟稳定的系统才能被推广开来,这里有几次稳定性故障和大家分享。第一次生产故障的现象及原因现象: Java代码 1hbase发现无法写入 2通过hbck检测发现.META.表中出现空洞,具体log是:;Chainofregionsintable...isbroken;edgesdoesnotcontain......

WF Workflow 状态机工作流 开发

概述 工作流是对业务流程的建模,当我们设计工作流的时候,我们首先要分析业务处理过程中要经历的步骤。然后,我们就可以利用WF创建工作流模型来模拟业务的处理过程。 我们知道,WF包含两种类型的工作流:顺序工作流和状态机工作流。顺序工作流提供了一系列有组织的步骤,一般情况下,步骤是逐一执行的。可能有的步骤需要等待某些事件的发生才可以继续执行,但通常情况下顺序工作...

TI AM335X 网卡驱动解析

1.CPSW驱动及设备的初始化; (1)首先驱动注册cpsw_driver ,会自动进入cpsw_probe执行; 1 static struct platform_driver cpsw_driver = { 2 .driver = { 3 .name = "cpsw", 4 .owner = T...