集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

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

[复制链接]
 楼主| lcytms 发表于 2017-8-13 23:26:13 | 显示全部楼层
1202
        我们知道3s3是闭节点,信号敏感表里面要出现时钟沿,并且不会引用它。
        有且有一个沿信号没有被引用。
        3s3也是用的原来2s2的代码。
        我们看一下这张图,出现在输出的信号是什么?
        就是outputs。
        闭节点的输出。
        包不包含next_state呢?
        肯定没有。
        所以说这一次,正好把next_state删掉,只留下输出。
        所以说这一段,输出和转移逻辑是分开来写的。
  

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-8-13 23:28:05 | 显示全部楼层
1203
        就这样,这样3s3就形成了。
        我们看到count迭代的关系,它会出现在左右两侧,但是这一次是一个闭节点。
        闭节点用寄存器隔离了。
        所以说它不会直接反馈过来。
        所以说闭节点的迭代是允许的。
        这就得到了3s3的动作。
        现在我们修改完了三段式的代码。
        Ctrl+S、Ctrl+K。
        我们同样做验证,三段式的验证。
        新建divider_fsm3s_mealy_tb.v文件。
        从一段式里面粘贴过来。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-8-13 23:29:25 | 显示全部楼层
1204
        只是换个名字而已嘛。
        做仿真设置。
        做一个跨平台检查。
        查看仿真结果。
   

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-8-13 23:31:32 | 显示全部楼层
1205
        高7低5。
        就证明这张图我们分析是合理的。
        这张图的一段和三段是闭节点的输出。
        ON不可以,但是ON,两段式又是一种应用的模型,我们现在如何来处理它呢?
        还有几分钟时间,做不完,我下午会接着做。
        我们现在就做一个米利两段的模型。
        这个模型呢,就首先要避免一件事情,因为ON要管理,用两段式来做状态机的话,就不可避免对计数器的管理。
        我们一定要计数,这是第一件事。
        因为只有计数了,我们才知道高电平的宽度和低电平的宽度,计数器是肯定要的。
        这是第一件事。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-8-13 23:32:19 | 显示全部楼层
1206
        第二件事,就是这个计数器如果是内置的,必定要出现count=count+1,count必定会出现在赋值号的两侧。
        可是出现在赋值号的两侧,就必定会迭代。
        因此上必定会有迭代的问题,对计数器的管理的问题。
        另外呢,也一定要有计数器,怎么做呢?
        在两段式的模型下面,如果我们改成两段,那么所采用的方案,就不能采用count=count+1的处理的方式。
        必须用控制信号来管理一个外置的计数器。
        我们不能做count=count+1,而是用一个cnt_en,count enable来指挥一个count。
        这个呢,我们把它稍微修改一下。
 楼主| lcytms 发表于 2017-8-13 23:33:13 | 显示全部楼层
1207
        这个呢改成两段式来实现的。
        内置的count在它内部肯定是行不通的,因为内置就必定会出现count=count+1,这让它输出一个控制信号,叫cnt_en,en就是enable,让它指挥一个闭节点的count。
        这是外置的一个count。
        闭节点的。
        闭节点的count呢,会输出对应的cnt的信号。
        这个cnt的信号,我们仍然做成31:0,这个信号,我们在我们的代码里面把它反馈给状态机。
        这个呢,对我们这个两段式的状态机,将会避免使用count=count+1,对它只需要驱动cnt_en这根信号,读到的却是count。
        当cnt_en为低电平的时候,为假值的时候,就清零,为真值的时候就计数。
 楼主| lcytms 发表于 2017-8-13 23:34:16 | 显示全部楼层
本帖最后由 lcytms 于 2017-8-13 23:35 编辑

1208
        所以说这个count是很清楚的。
        当cnt_en为假值的时候,为0的时候,count清零。
        cnt_en为1的时候,时钟上升沿下面计数,现在我们来写它的状态转移图。
        并且这段状态转移图呢,我们用NBD,古老的形式来写。
        复位,同样来讨论。
        在复位的时候,我们让输出为低电平。
        这一点照写。
        在复位的时候,原本我们是内置的计数器,让count清零,现在我们只需要做cnt_en清零。
        当cnt_en为假值的时候,count就清零。
        然后指向第一个状态s0。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-8-13 23:36:59 | 显示全部楼层
1209
        在s0这个状态的时候,原本我们有一段EBD。
        是描述在这个上面等低电平的状态,低电平的状态呢,我们现在是由外置的计数器来发出。
        也就是说,在s0上面,我们写它的NBD,因为这个cnt_en为0嘛,清零了,现在数低电平的周期,必定要让cnt_en为高电平。
        当它为真时,count才计数。
        这个时候写成一个NBD的形式。
        分子是s0,分母是在这个节点上面驱动,转移还是要。
        写NBD的驱动的时候,转移仍然是根据输入的条件做动作的。
        这个时候呢,我们要做一件事情。
        就是这个时候,有一个外置的计数器控制的时候,我们就不是减一了,而是减二,因为我们状态也会延伸出一拍。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-8-13 23:38:15 | 显示全部楼层
1210
        所以说这个时候,我们写它的EBD,如果这个EBD分子照写,这个时候呢,因为count是引入的信号,可以直接引用它。
        Cnt原本是<LW-1,现在我们要增加一个状态,所以说要减二。
        下面增加一个状态来控制它。
        分母有没有呢,如果写了分母呢,就不是摩尔啦,就是米利了。
        所以说在这个时候,输入只跟转移有关,输入跟输出无关,是摩尔。
        这个时候,分母是无驱动的。
        就省略分数线。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-8-13 23:39:25 | 显示全部楼层
1211
        然后在s0上面,在cnt_en打开的情况之下,数cnt为=的时候,相对条件,指向下一个状态,指向s1。
        S1这个锋的条件是相对的条件,一定是≥LW-2,并且也是无驱动,条件完全相对,可以完全不写,显得简洁。
        这个锋,不用做任何描述。
        所以我们看见没有描述的锋,除了置位的锋,其它的锋没有写,就是全相对,无驱动。
        然后在s1上做什么?
        s1我们会增加一个状态,以后我们会说到为什么要增加一个状态。

本帖子中包含更多资源

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

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

本版积分规则

关闭

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

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

GMT+8, 2024-11-27 11:10 , Processed in 0.062425 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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