0949
当前的状态呢,我们写成current_state。
因为稍后呢,我还要绘制很多的图,我把current_state转成了next_state。
这个ST,我们说到底它是一个电路,当然更抽象一点,它就是一个决策系统,或者是一个数据库。
它能够解决的问题就是,它能够解决转向何处。
刚才我们说的,我们要解决两件事,第一转向何处,第二何时转。
0950
转向何处,你只要知道当前现场的情况是什么,以及当前的状态是什么,那么这个系统它就能知道下一个状态是什么,它就是历史,它就是决策系统。
所以说,它解决的是,何时转移的问题。
以后我们经常会说到,current_state和next_state。
我在绘制的时候为了方便,编码的时候方便,我就直接写成NS、CS,所以说它解决了转向何处的问题。
何时转呢?
在电路上面实现,我们同学知道,一点也不难,我们会引入一个D触发器,用D触发器构成一个寄存器。
寄存器的概念就是这么来的,同步电路里面得到的,把这个数据寄存、保持下来。
0951
然后呢,这个D触发器引入时间,是离散的时间,我在这里打个t’,离散的时间轴。
也就是说,在这个时候,NS转成。
何时转呢?
是ST知道,转向何处。
何时转由寄存器来决定,这个寄存器是称之为状态寄存器,state register,它输出的是什么呢?
何时转,是把当前是什么,下一拍是什么,下一拍转向何处,再转过来,当然就是当前状态。
我不知道这句话说清楚了没有,ST解决转到何处的问题,寄存器解决何时的问题。
也就是ST,你给出当前的状态,它就能指示出下一个状态是什么,就是刚才我说的状态变迁的序列。
它仅仅是给出下一个状态转向何处,何时转是由它来决定的。
0952
它把这个状态变成了现在的状态,所以说这个CS是形成迭代的。
那么因为它把这个状态转成了现在的状态。
ST又是根据当前状态来知道下一个状态。
有输入和时钟就会有CS。
CS是Current State。
就是一个状态的序列,状态的变迁的序列。
在这个状态变迁的序列里面,显然已经解决了转向何处、何时转的问题。
从离散时间轴上的引入,得到了有限的状态。
一定是一个有限的状态,如果是无限就麻烦了,就写不完。
0953
状态机的理论告诉我们,根据有限的状态产生输出,有两种模型。
第一种模型。
如果知道了有限的状态,在不同的状态,产生不同的输出,就称之为摩尔机。
另外一种形式,就是输出不仅与当前的状态有关,而且还和当前的输入值现场有关。
这个就是米利机。
0954
也就是说对于摩尔机而言,状态变了,输出才会变。
对于米利机而言,状态变了,输入也变的情况之下,状态没有变,输入变的情况之下,输出也变。
再说一下,对于摩尔机而言,状态没有变,输出不会变的。
只有状态变了,输出才会变。
而对于米利机而言,如果状态变了,输出会变,状态没有变,输出仍然可能变。
因为如果状态没有变,而输入变了,输出也会变。
所以这样看起来,米利机用于实时的控制会更好一点,它会紧跟着输入走。
所以说状态没有变化的时候,输入变化了,那么摩尔机输出仍然是稳定的,没有变。
0955
但是米利机则不同,如果状态没有变的时候,如果输入变了,米利机的输出仍然会变化。
可是以后我们会看到,现代最优秀的结构,也就是说如果我们是就业班,我们在应聘的时候,应聘单位它可能面试的时候,它可能会要你写一个比较优秀的结构。
通常会要你写一个什么机器,那你写一个摩尔机,优秀。
这个为什么摩尔机比米利机优秀呢?
看起来好像米利机跟进得更快一点,马上反应实时特性,这个呢我们以后解释。
为什是摩尔机?
现在呢,直接告诉大家结论。
是摩尔机要优秀得多。
不是比它好一点,是好得多。
而且是也更难,设计摩尔机比设计米利机要难,也不是难一点,有的时候要难很多。
0956
米利机的输出是跟输入有关的,而摩尔机的输出是跟输入无关的。
我把这段PPT打开。
二者没有可替代性,泾渭分明。
非常清楚,摩尔机绝对跟输入无关,只跟状态有关。
看公式,摩尔的公式里面,摩尔机的函数只有一个CS,而米利机它的函数里面除了有CS,还有输入项,所以说这两者的函数关系也不一样。
0957
如果我们不考量它的速度指标,就是一般而言,我们写一个逻辑而言,你可以选择性地,既可以选择摩尔机,也可以选择写米利机,但是实现的时候,两者的性能是有差异的。
我们说,摩尔机要更好一些嘛,不是正确与否的关系,而是性能优异与否的关系,摩尔机的性能要更好一点。
今天我们还是讨论米利机,米利机就是我们一般看到的状态机的模型。
好,那么现在我们已经有了一个状态变迁的序列,并且有了这么一个理论模型。
0958
这个模型就是米利机和摩尔机的模型。
是根据状态的序列来得到的,根据这个模型,这个理论模型,我们来讨论如何来编写我们的代码,如何用verilog来实现这个理论模型?
verilog来实现这个理论模型,这个基础也非常重要,有些同学也是做了很多年,状态机也是写得牛头不对马嘴,就是没有写成一个状态机的理论体系。
他是不是做成了呢?
可能也跑得起来,但是我不是讲,他走到别人的弯路上面去了,它的性能上不来,他得不到工具的支持,得不到理论体系背景下面强大的数学支持。
那么得不到意味着什么呢?
你的系统做不大,做不复杂,做不快,缺乏竞争力。
有些时候,简单的就直接错了,直接停下来了。
