集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

跟李凡老师学FPGA之D04:有限状态机设计(20160426课堂笔记)

[复制链接]
 楼主| lcytms 发表于 2017-4-16 22:33:55 | 显示全部楼层
0959       
        好,现在我们来看看,如何来用这套理论,不脱离这套理论的前提之下,我们用代码模型,用我们的代码来写这套理论模型。
        我重新绘制小一点。
        今天我来绘制,我们如何用代码来写这套理论模型。
        这套理论模型的部分,它的背后是有数学基础支持的,是不可或缺的,不能修改的。
        你要修改它,你就一定要有金刚钻,你的数学上要攻克,你的数学上要证明他不行你行。       
 楼主| lcytms 发表于 2017-4-16 22:35:05 | 显示全部楼层
1000       
        ST逻辑输入的是CS,输出的是NS,然后呢,它给一个寄存器,时钟我给忽略。
        寄存器解决何时的问题,ST解决何处的问题。
        CS输出,输出是摩尔机,摩尔机是根据CS输出。
        米利机不仅根据状态,还根据输入,产生输出。
       

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| lcytms 发表于 2017-4-16 22:35:45 | 显示全部楼层
1001       
        这张图我们要求大家背下来,你只有把这张图背下来了,你才知道你的代码是否写成了一个严谨的、合理的一个状态机。
        这是一个理论模型。
        我们把它变成代码模型。
        也就是说我们用verilog语言来把这个模型写出来,这个时候呢,我们需要一点背景知识。
        就是如果我们写成一个信号敏感表里面,出现的时钟沿,在always的信号敏感表里面,出现了一个时钟沿的信号。       
 楼主| lcytms 发表于 2017-4-16 22:36:35 | 显示全部楼层
1002       
        这个时钟沿的信号叫什么名字不重要,重要的是有且有一个这样的信号,没有在这个begin块里面,在它的循环行为体里面,被引用。
        它就形成闭节点。
        什么叫闭节点呢?
        我们就是说,它会形成一个D触发器的结构。
        D触发器是在这个begin块,也就是这个循环行为体这个代码里面的所有的输出信号,用这个D触发器输出。
        而这个D触发器的时钟就是这个信号敏感表所列出的唯一的没有被引用的信号。
        注意,信号敏感表里面,有且有一个未被引用的沿信号,就会得到闭节点。
        下面我会把这段话用消息发过来,信号敏感表里面出现有且有一个沿信号未被引用。
        不是被引用,而是未被引用。       
 楼主| lcytms 发表于 2017-4-16 22:37:04 | 显示全部楼层
1003       
        只有一个沿信号未被引用,就会得到闭节点。
        闭节点就是寄存器的结构,就是D触发器输出的结构。
        这种情况之下呢,我们称之为闭节点的描述。
        以往我们有些教材,国内有些教材,我们会把左边这一段描述会说成是时序逻辑,或者左边的说成是组合逻辑,而右边的是*号,电平敏感嘛。
        这种叙述是非常不严谨的。
        首先呢,在左边的*号的这个部分,如果我们写成一个锁存器,它是有记忆的。       
 楼主| lcytms 发表于 2017-4-16 23:36:28 | 显示全部楼层
1004
        时序逻辑和组合逻辑的区别,就是一个是有记忆系统,一个是无记忆系统。
        所以说完全有可能写成一个锁存器。
        另外呢,以后在同步电路里头,我们会说到,同步电路里面它会找到节点Node,来做时序的计算,潜伏期的计算,流水线的规划,这是必不可少的。
        而这个开节点的这个部分,如果我们写成一个组合逻辑,可是它未必就是一个节点,它的末端可能没有寄存器捕获它,形成一个等效的节点。
        所以说基于这一点,比较严谨的描述,应该说左边的这个描述,always行为块是一个电平敏感的描述,而右边的这个,称之为闭节点的这一点,称之为沿敏感的描述。
        但是电平敏感的描述和沿敏感的描述,这仅仅是对这个触发的形式做描述。
 楼主| lcytms 发表于 2017-4-16 23:37:20 | 显示全部楼层
1005
        它并没有讨论到最重要的一个概念,就是节点。
        以后我们说到,节点是现代电路里面非常非常重要的一个概念。
        因为既然是电平敏感的描述,它的末级很可能还会沿敏感的电路来捕获它,形成等效的节点。
        如果它的末端有信号来捕获它,这个节点仍然是一个节点。
        左边这个always块,称之为开节点。
        我们注意这些背景知识。
        现在,我们来看到的这张图,就是称之为一个,用一个always语句块,来描述这个电路模型的编码方式,称之为一段式的描述。
        这种一段、两段、三段,今天我们说的这三种描述方式,是由来已久的,不是空穴来风。
        我们注意到,我们的绿皮书是这么说的,你再看早期的米德的体系的思想,如果我们有机会看看斯坦福怎么说的,剑桥怎么说的,这些理论体系一直贯穿到现在。
 楼主| lcytms 发表于 2017-4-16 23:38:15 | 显示全部楼层
1006
        以至于我们现在阅读Altera的手册,象Quartus的使用手册,它在强调它的编码风格的时候,它都特别指出一段、两段、三段。
        它要求什么?
        它要求做两段式,等等。
        所以说这是由来已久的,不是空穴来风。
        可不可以写成四段呢?
        可不可以写成一段、两段、三段之外的模型呢?
        也不是不可以,这个跟理论模型不冲突,只要你不脱离这个理论模型即可,你不要写成理论模型之外的东西,即可。
        问题是你怎么写?
        现在我们来看看这个代码模型,就是PPT上的这个代码模型。
        它和理论模型的关系,以及代码模型的定义是如何?
 楼主| lcytms 发表于 2017-4-16 23:38:55 | 显示全部楼层
1007
        我们说用一个always语句块来形成这个有限状态机的描述,我们称之为FSM_1S,一段。
        一段这个模型是一个闭节点,CN,close node。
        它有哪些输入呢?
        我现在绘制的,右图是代码,左图是理论。
        右图代码上是很容易分辨输入和输出的,被引用的信号是输入,被驱动的信号是输出。
        在赋值号左侧的是输出,在赋值号右侧,在if、case括弧里面的是输入。
        哪些是输入,哪些是输出呢?
        现在大家看到了,很清楚。
        现场的那些信号,肯定是输入,inputs肯定是输入,这些信号一定会出现在对应代码赋值号的右侧,或者是if、case的括弧里面。


 楼主| lcytms 发表于 2017-4-17 21:58:46 | 显示全部楼层
1008       
        有的时候我们也把它出现在左侧,如果inputs里面有一个count,我们就可以写成count=count+1。
        count既出现在左侧,又出现在右侧,说明什么呢?
        说明迭代了。
        CN是允许迭代的,ON不可以。
        为什么ON不可以呢?
        我们回到之前,它是一个电平敏感的描述,或者是一段组合电路。
        组合电路的输入跟输出接起来会发生什么呢?有的时候就发生恶性振荡了,相位不合的情况下发生恶性振荡。
        总之是迭代,而且是有害的迭代。
        状态机的输入一定是在赋值号的引用的部分,状态机的输出一定是在赋值号的左侧。
       

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-23 23:53 , Processed in 0.063045 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表