lcytms 发表于 2016-11-1 14:44:55

FPGA初级课程第三讲 流水灯

本帖最后由 lcytms 于 2016-11-1 14:50 编辑

FPGA初级课程
第三讲 流水灯

Hi,大家好!我是至芯科技的李老师。
今天讲课的题目是:流水灯。
本节课我先简要地介绍一下状态机,然后进行流水灯的架构设计和状态转移图设计,再实际演示一下流水灯的建模与仿真,最后下板查看效果。

lcytms 发表于 2016-11-1 14:47:47

打开至芯科技的《ZX_1开发板规格书.pdf》文件,我们看一下四个led灯的电路图。
因为是共阳极设计,所以led信号为低电平时,led灯点亮。

lcytms 发表于 2016-11-1 14:57:20

我们打开《18至芯科技奋斗的小孩之altera 系列 第十八篇 流水灯.pdf》文件。


对于每一个的小实验,我们都可以把它看作是一个小项目,逐步地去分析,设计,调试,最后完成功能。下面我们就开始我们的“小项目”。

项目名称:流水灯。
具体要求:复位时,四个灯全亮。正常工作时,四个灯做流水。每一个灯亮一秒钟。用状态机实现。

我们再解释一下什么是状态机。
状态机的结构如下图。

在实际的应用中,根据有限状态机是否使用输入信号,设计人员经常将其分为Moore型有限状态机和Mealy型有限状态机两种类型。
Moore型和Mealy型有限状态机的区别:Moore型有限状态机仅与当前状态有关,而与输入信号无关;
Mealy型有限状态机不但与当前状态有关,而且还与状态机的输入信号有关。
Moore状态机是Mealy状态机的一种特殊类型。

lcytms 发表于 2016-11-1 15:00:55

关于状态机,我们再来参考一下《FPGA至芯X教程V3.pdf》文件。

16.1状态机的概念

图中表示的是数字电路设计中常用的时钟同步状态机的结构。
其中状态寄存器是由一组触发器组成,用来记忆状态机当前所处的状态。
如果状态寄存器由n个触发器组成,这个状态机最多可以记忆2的n次幂个状态。
所有的触发器的时钟端都连结在一个共同的时钟信号上。
所以状态的改变只可能发生在时钟的跳变沿上。
可能发生的状态的改变由正跳变还是由负跳变触发,取决于触发器的类型。
状态是否改变、怎样改变还将取决于产生下一状态的组合逻辑F的输出。
F是当前状态和输入信号的函数。
状态机的输出是由输出组合逻辑G提供的,G也是当前状态和输入信号的函数。
现代电路设计常用正跳变沿触发的D触发器,特别是在可编程逻辑器件上实现的用综合工具自动生成的状态机,其电路结构往往都是使用正跳变沿触发的D触发器。
下图中F 和G两部分都是纯组合逻辑,它们的逻辑函数表达式如下:
                下一个状态= F(当前状态,输入信号);
                输出信号= G(当前状态,输入信号);

lcytms 发表于 2016-11-1 15:03:51

16.2 状态机的分类

根据状态机的输出是否与输入条件相关,可将状态机分为两大类:摩尔(Moore)型状态机和米勒(Mealy)型状态机:

1)        摩尔状态机:摩尔状态机的输出仅仅依赖于当前状态,而与输入条件无关。电路结构如下图所示。

lcytms 发表于 2016-11-1 15:11:51

2)        米勒型状态机:米勒型状态机的输出不仅依赖于当前状态,而且取决于该状态的输入条件。电路结构如下图所示。

lcytms 发表于 2016-11-1 15:15:44

16.3 状态编码

(1) 二进制编码(Sequential)
将每个状态以二进制来做编码。

(2) 格雷码(Gray)
也是将四个State以二进制来编码,不过不同的是每次编码只会差一个位,其主要缺点是状态改变是要依序改变才可以,若状态不是依序是,则Gray编码不适用。

(3) 独热码(One hot)
独热码状态编码的特色为每一个状态均有自己的触发器,所以若有N个状态就也存在有N个触发器,在任一时刻只会有一组状态编码,缺点是会产生较大的电路,但是相对的使用独热码状态编码对帧错相当有帮助。

三种格式之状态编码下表所示。

lcytms 发表于 2016-11-1 15:16:23

本帖最后由 lcytms 于 2016-11-1 15:17 编辑

从状态编码表可以看出二进制编码和Gray编码均是用二个位来做编码,而以独热码作为编码方式则编码位增加至四个位,所以电路比其他两种编码方式都大一些。
二进制编码(Binary)、格雷码(Gray-code)编码使用最少的触发器,较多的组合逻辑,而独热码(One-hot)编码反之。
独热码编码的最大优势在于状态比较时仅仅需要比较一个位,从而一定程度上简化了比较逻辑,减少了毛刺产生的概率。
由于CPLD更多地提供组合逻辑资源,而FPGA更多地提供触发器资源,所以CPLD多使用二进制编码或格雷码,而FPGA多使用独热码编码。
另一方面,对于小型设计使用二进制和格雷码编码更有效,而大型状态机使用独热码更高效。

lcytms 发表于 2016-11-1 15:20:19

好,讲完状态机,我们再回到流水灯上来。

通过分析上述的“项目名称”和“具体要求”,我们可以设计出如下的架构:

lcytms 发表于 2016-11-1 15:22:05

系统设计:
1. 工程的名称:ledrun。
2. 在项目中,四个灯做流水,故而设置为四个状态。
3. 用一个计数器,计数一秒钟。
4. 状态转移图如下:
页: [1] 2 3
查看完整版本: FPGA初级课程第三讲 流水灯