跟李凡老师学FPGA之D04:有限状态机设计(20160426课堂笔记)
跟李凡老师学FPGA之D04:有限状态机设计(20160426课堂笔记)用笨笔头整理课堂笔记,用以备忘,温故而知新。
整理文稿的细节处未能一一体现李凡老师的讲课精髓和独特风采,有待下一步补充完善。
感谢李凡老师博大精深的学识、孜孜不倦的教诲,并敬请李凡老师原谅本人拙劣的课堂笔记。
0912
今天我们会结合有限状态机的设计呢,完成我们下板的练习。
昨天我们做了下板的练习,还差一个,就是键盘去抖。
今天我们会用状态机来写键盘去抖。
同样的,今天的课程开始之前,我们将昨天的练习做一个总结,做一个分享。
昨天很多同学都已经完成了。
做得都很好,而且还加入了自己的想法,自己的元素。
0913
还是这样,完成的同学做个电子举手。
出现有些问题的同学,我会帮你解决。
0914
(同学练习分享)
0915
(同学练习分享)
0916
(同学练习分享)
0917
(同学练习分享)
0918
(点评同学练习)
0919
(点评同学练习)
0920
(点评同学练习)
0921
我们昨天做了按键驱动,有的时候跳1,有的时候跳3,有的时候跳很多个字。
有毛刺嘛,我们今天就解决这个毛刺的问题。
毛刺的问题,显然我们会用状态机来解决。
现在我们就来开始讨论状态机。
0922
我说的这个状态及的理论呢,是一个非常复杂非常庞大,是发展最全面、理论体系发展最充分的,应用也是最广泛的一个方面。
虽说我们只有一天的时间,我们不指望、也并不要求我们面面俱到,我们同学全部掌握。
因为是入门嘛,介绍嘛,我当然会介绍得多一些,全面一些。
那么这么多、这么全面,没有必要一天全部掌握。
有限状态机称之为Finite State Machine,它是描述各种复杂的时序行为的一种机制,一种方法。
有限状态机的理论在数字电路的时候,就得到了长足的发展。
而引入EDA以后呢,更是几乎是做了革命性的变化。
0923
昨天我说到了,有康华光、阎石的这个教材,我们国家的这个教材是几十年不变的,但是国外发展得非常快,理论体系。
当然我们注意到,尤其康华光有它的再版,再版他也不断地更新了它的内容,尽量跟上国际的最前沿的理论的发展的实际。
我们看到有限状态机,它的基础的背景是有限自动机,延伸出的理论模型,我会向大家介绍,我们后续的课程会介绍。
今天打算就只是说一个名词,包括它的Sequential Machine序列机,以及它的Linear Sequential Machine线性序列机,算法机,以及由状态机和实际的电路构成的解决电路的模型,称之为FSMD、LSMD、ASMD等等。
有一种说法就是,以后我们会看到状态机是解决复杂时序控制,时序电路里里面的一个重要的解决方案,或者说唯一的、我们在理论体系里面提供了完整支持的一个方案。
0924
其它的,如果你脱离了状态机,你来写一个复杂的逻辑,那么你可能就是散打了,就是自由作业了。
个人有个人的流派不同,但是呢也有可能写的好的,也可能写不好。
状态机理论体系里面已经提供了充分的支持,按照状态机的理论来写的话,我们现在的工具,EDA的工具,它可以支持,否则不一定支持。
因为是写一段电路,这段电路,你的独立的一些想法,独特的一些想法,好的方面发展它就是核心技术,就是专利,就是竞争力。
不好的方面发展,保守一点说,那么你的思想很可能是前人已经走过的弯路。
我们将不仅是前人走过的路,而且是前人走过的弯路。这种可能性更大。
0925
为什么呢?
因为在这个领域里面,前人的工作量已经非常巨大了,能够做出来的,能够看到是正确的,就是那么几条线。
如果你没有走到那几条线上,那么你走到错误的路线上的可能性,就非常之大。
因为正确的东西是收敛的。
一个正确的方向,正确的处理问题、解决问题的理论体系,不同的研究者他往往可以得到相同的结果。
但是错误却是发散的。
不同的研究者他的错误是各种各样的错误,不一样的错误。
所以说我们要注意到这一点,如果我们不引用状态机的理论,来写我们的逻辑,可不可以写呢?
不是不可以写,是可以写,但是发生错误,是弯路的可能性,是非常之大,这个理由在什么地方?
本帖最后由 lcytms 于 2017-4-9 15:52 编辑
0926
就是我刚才说的,正确的东西是收敛的,这条路已经有很多很多人走过了,最后走到有限状态机这条路上,这不是偶然,这是必然。
现在我们来说一下什么是有限状态机。
0927
向我们昨天解决的这个bin2bcd,它是不是状态机呢?
它不是,从严格意义上来说呢,它是一个自动机,FA,它是一个有限自动机,它是自动处理的,它是用硬件逻辑自动地处理输入和输出的关系。
有限状态机呢,通常而言的话呢,就是一种实际解决问题的一种方案,我们马上就把它展开来。
可是现在EDA的应用里面强调这一点,就是CPU也是解决问题的方案,嵌入式的CPU的架构。
那么有限状态机跟CPU的区别在什么地方呢?
或者说我们建模的时候,我们如何来写有限状态机呢?
我们是不是把有限状态机写成一个类似CPU那样的结构呢?
0928
这一点现在的EDA的发展的方向,国内稍微慢一点,也在跟进,基本上口径一致,状态机不是CPU。
千万不要把状态机写成CPU,虽然状态机可以写成CPU,但是它绝不是CPU,也绝不应该把它写成CPU。
当然,要说到这种通用的嵌入式的架构,那么CPU仍然是无可比拟的。
好,我们现在来讨论什么是FSM。
FSM,Finite State Machine,有限状态机。
首先看到这个名词,我们有没有什么想法,为什么要用Finite来修饰它,不会是无限的吗?
我们来说一个故事,有限状态机究竟是谁提出来的?
是谁发展的?
0929
大家都知道,我们现在用苹果手机,苹果手机的Logo,咬了一口的一个黑苹果。
如果大家看过类似的电影,乔布斯的电影,或者是模仿游戏,大家都知道,阿兰图灵。
对,状态机的首先提出者,是阿兰图灵。
阿兰图灵在提出他的这个图灵机的思想的时候,他就引入了有限状态机。
所以有限状态机呢,它跟计算机体系,称之为现代数理逻辑。
跟计算机的架构,计算机的研发是紧密相关的。
图灵当时就想到这么一件事情,如果这台机器没有故障,永远不停电,永远运行,那么在这种情况之下呢,它的描述,它的输出跟时间轴的关系。
我们来看一看,举个例子。
0930
那些比较深奥的数学模型我们就忽略了。
我们就引用一个时期的例子,来说明为什么阿兰图灵称之为有限状态机。
如果我们有一个计数器,计数器我们都已经很熟悉了。
计数器端口有时钟,有复位,有对应的输出。
这次呢,我们做成一个2个bit的输出,1:0的输出。
那么这个输出对应时钟轴的关系是什么?
如果这是一个函数,用函数的方式来描述它,我们会怎么描述呢?
0931
这个q的输出,一定是这个函数counter的输出值。
那么,这个函数,它引入的是谁呢?
引入我们的,如果是站在逻辑的角度上,时钟和复位是引入的管脚。
但是如果是站在数学的角度上,阿兰图灵他说,如果这个counter计数器没有故障,我们忽略它的故障,永远有电,那么在时间轴上,纵轴是它的输出值,横轴是时间轴。
我们知道,在这个计数器置位以后,一定会在时钟作用下面,会反转。