没有什么控制逻辑是一个状态机解决不了的,如果不行,那就来两个。
检测序列是面试官最爱的状态机题目了,不啰嗦了。甚至有个变形的题目:如果判断一个不停输入的序列是否可以被某个数整除?本质还是状态转换,只是这时候状态不是序列组合而是模几的一个状态,通过下一个数x2或x2+1转到下一个状态。
状态机在数字逻辑电路设计中的作用怎么强调都不为过。关于状态机的参考资料也一抓一大把,不再赘述。今天我来谈谈对数字电路中状态机设计抽象层面的思考。抽象的层次够了,万物皆可比较。 顺带提一句,《可重构计算》里把ASIC归入冯诺伊曼体系的一个特例,我认为是没有问题的。确实,抽象到一定级别了,ASIC和CPU其实是一回事,硬件和软件的界限也没那么明显。
什么时候用状态机?当我需要一个控制信号,这个信号并不能直接根据当前的输入得到,而后面要输出这个控制信号又得依赖以前的状态。显然,一个状态机至少有两个状态(为什么?一个状态的话就没有状态转移,任何控制信号均直接依赖输入可得)。
比如说,简单的valid, ready握手。假设我要转发某个数据接收电路里产生的数据,为了不造成上游的堵塞,我先把它接收下来(即给上游ready),然后需要传给下游的电路,这就是一个简单的转发器。