填坑之:数字集成电路与系统中的状态机的使用
1赞今天简单务虚的谈一谈数字集成电路与系统中状态机的使用。
状态机是用来干嘛的?如果你只是学了现在本科教学大纲里的那点内容,大概以为状态机就是做做什么序列检测器,检测一下一串序列里面有没有“1101”或者“0110”什么的。更过分的是现在有些学校居然把这部分内容都砍掉了。讲数字电路/数字逻辑设计与应用不讲状态机,那基本连个入门的作用都算不上,因为把唯一带有一点点设计色彩的内容都给去掉了。剩下的什么卡诺图、中规模集成电路那些死的知识,扣扣索索的讲确实能讲不少时间。但问题是这种东西讲多了,也就变成了死记硬背的纯“记忆性”课程了。
言归正传,状态机到底在数字集成电路与系统中有什么用呢?答案就是:控制!如果说的再详细一点就是:根据当前的输入和当前的状态,做出对应的反应。
这么说还是有点抽象,那就再说具体一点。我们平时控制一件事情的进展通常都是采用的顺序控制法,也就是第一步做什么,第二步做什么,第三步做什么。这个和人类的线性思维有关系,这个我在之前的看电影说技术中已经提到了。好了,那这个第一步、第二步、第三步这个步骤的顺序和安排我们在现实中如何用电子信息技术来实现了。如果软件自不用说,软件本来就是逐条执行的。如果用数字逻辑电路怎么来做呢?这需要用到状态机了——把每一步转化为一个状态。
状态确定好了以后,确实好不同的状态之间的跳转条件,就可以控制整个状态的转换过程。当输入不同时,同一个状态可以跳转到不同的状态,从而实现分支控制。当条件适合的时候,又可以重新跳转回某一个状态,从而实现循环。分支、循环都有了,控制流程也就很容易实现了。
但需要注意的是,状态机本身一般情况下不完成信息处理功能。状态机只是作为控制的部分给出一些控制信号而已。具体的处理由接到控制信号的处理部件完成。
最后说一点小知识。我刚入行的时候,是做协议处理器的。当时真不知道网络协议应该怎么做,觉得网络协议都是一堆C代码跑在处理器上才能做出来。后来简单学了点Openet,才发现所有的协议到了最底层的描述,全是状态机。所以,做接口的朋友们,对状态机要更重视哦!