集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

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

[复制链接]
 楼主| lcytms 发表于 2017-4-19 14:22:13 | 显示全部楼层
1105
        如果HW=LW,50%的占空比,那么HW=LW=fin/(2fout)。
        现在我们要设计这样的一个电路逻辑。
        如果实现任意分频的电路,EDA的设计非常强调,就是Intellectual Property,就是可重用的代码。
        尽量地用可重用的代码,而不是自己再写一段。
        你需要分频器,就写一段分频器,你需要led的driver,就写一段led的driver。
 楼主| lcytms 发表于 2017-4-19 14:31:47 | 显示全部楼层
1106
        那么,不仅效率低,面积浪费,而且更重要的是不稳定。
        现在这段逻辑我们是调试出来了,是稳定的。
        现在我们来写它的状态转移图。
        STG,用状态机设计的方法。
        数字电路告诉我们,就是讨论电路逻辑的规律,哪些事情先发生,哪些事情后发生,因果关系弄清楚即可。
        现代的状态转移图里面,一定有一件事是状态或者复位。
        复位是不是状态,我记得在数字电路那个年代有讨论。
        有些学者认为是,有些学者认为它不是。
        EDA基本上确认,复位一定是个状态,复位是个特殊的状态。
        这个节点就是状态,我们把状态名写上,是复位的状态,RST。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-4-19 14:49:10 | 显示全部楼层
1107
        叫什么名字不重要。
        看得懂,不相同。
        然后呢,我们写它的NBD。
        NBD是一个分式,分子是节点名,节点名就是复位,分母是驱动。
        我们现在看看,驱动怎么做。
        在电路初始化,复位信号为真值的时候,负逻辑,应该是0,我们希望它输出什么信号呢?
        我们当然让它输出0了。
        Clk_out为低电平。
        其次,我们要考虑一件事实。
        就是,它必须要计数高电平的宽度和低电平的宽度。
        一定要有一个计数的功能。
        高3低2。
        我们还有2500呢,还有2.5k呢,它要一拍一拍数啊,你必须要一个计数啊,数的方式啊。
        所以说它内部必须要有一个count。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-4-19 15:03:03 | 显示全部楼层
1108
        复位为真值的时候,输出清零,内部寄存器清零。
        描述出来了。
        之后指向第一个状态。
        置位以后,现代的STG,EDA的STG,状态转移图它说,所有的锋都要描述。
        虽然我们看到的有些锋是没有描述的,它是相对描述的,它是相对条件的、无驱动的描述。
        唯独不描述的,现在就是指复位,实际上是两个没有描述,就是状态转移图上不需要绘制出来的,全世界如此。
        第一是置位的这个锋,从复位到置位的这个锋,这个锋不用描述。
        其次呢就是在正常状态下面转复位的锋不描述。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-4-19 15:14:00 | 显示全部楼层
1109
        都不用描述。
        但是我们看到工具上给我们显示出来。
        然后到s0做什么?
        我们知道要低电平2拍、高电平3拍地周而复始。
        从复位开始,复位的时候是低电平,是输出为0的,所以说我们先计数低电平的周期,比较合理。
        低电平是多少呢?
        是LW。
        所以说这个时候,我们做一个指向自己的转移,s0出发,指向自己。
        写它的EBD,我们讨论发生转移的时候做什么。
 楼主| lcytms 发表于 2017-4-19 15:24:44 | 显示全部楼层
1110
        转移的时候,条件是什么呢?
        这个时候是count<LW-1,考虑到LW是从0开始计数的。
        这是它的条件,在低电平状态,我们指定在s0上输出低电平的时候,可以这么做。
        让它数低电平的周期。
        分母是什么呢?
        由于count是由状态机直接管理的,我们当然要让它计数了,让它数低电平的周期了。
        我们会执行对应的count=count+1的动作。
        我们C++的时候,直接写成++的符号,system verilog支持,verilog不支持。
        那么这样一拍一拍数下去,一定会数到有一拍,到达LW-1。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-4-19 15:39:58 | 显示全部楼层
1111
        那么这个时候,我们让它指向下一个状态,指向s1。
        这个锋也要对它进行描述,这个锋的条件显然是这个锋的条件的相对。
        Count≥LW-1,相对的条件。
        分母是什么呢?
        分母是驱动。
        到了这个转移的时候我们做什么?
        就是到了这一拍,做什么事情,低电平数到了做什么事情。
        显然,低电平数到,clk_out的低电平结束啦,接着我们要让它抬高,让clk_out指向高电平。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-4-19 15:47:49 | 显示全部楼层
1112
        其次,如果我们只有一个计数器,我们计数器数完了低电平,接着要数高电平了,要对它清零,从0开始数。
        现在到s1上,也是同样如此,s1进来的时候已经是高电平了,所以说我们接着要数高电平的周期。
        类似,写s1指向自己,count<HW-1,分母是同样如此,数的时候让它加一。
        那么这样的话,一定会数到HW-1,高电平一定会数到。
        数到了以后会怎么样呢?
        高电平结束,当然回到低电平,回到s0。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-4-19 15:55:40 | 显示全部楼层
1113
        然后再描述这个锋,EBD。
        S1指向s0的这个锋。
        条件仍然是相对的条件。
        分式,分子是条件,相对的,上面是<,下面就应该是≥HW-1。
        然后它的分母是驱动。
        到了这一拍做什么事情?
        当然,数到高电平就结束了,clk_out转向低电平,周而复始嘛。
        clk_out清零,同样高电平数完了以后,count接着清零。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2017-4-19 16:24:44 | 显示全部楼层
1114
        这样呢,我们就完成了这张图。
        这张图,现代的EDA所提供的这张改进的制式的STG,有个好处。
        从图上我们就看得到,它是米利还是摩尔。
        这张图可不可以用CN,可不可以用ON?
        首先我们来看看,它是米利还是摩尔,有没有同学能够告诉我?
        米利是什么?
        米利就是输出和输入有关,摩尔就是输出与输入无关,至于状态有关。
        也就是说,我们在代码里面,我们写输出的时候,会引入输入。
        什么是输入呢?就是被引用的部分,被这个代码引用的部分。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

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

GMT+8, 2024-12-24 03:18 , Processed in 0.067256 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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