跳过主要内容

双向计数器(FSM)

内容

术语和定义

FSM有限状态机
SPI串行外围接口
I2C国际集成电路
DFFD触发器
附近地区查找表
OVF溢出
OSC振荡器
集成电路集成电路
DCMP数字比较器
ZD零检测器
计数器

参考文献

有关文件及软件,请浏览:

//www.xmece.com/configurable-mixed-signal

下载我们的免费GreenPAK软件设计师(1]以打开。gp文件[2],并查看所提出的电路设计。使用GreenPAK开发工具(3.可以在几分钟内将设计冻结到您自己定制的集成电路中。yabo国际娱乐Dialog Semiconductor提供完整的申请资料库[4],包括设计实例,以及对Dialog IC的功能和模块的解释。

  1. GreenPAK设计软件,《软件下载及用户指南》,Dialog Semiconductoryabo国际娱乐
  2. 一个双向Counter.gp - cm - 286GreenPAK设计文件,Dialog半导yabo国际娱乐体
  3. GreenPAK开发工具GreenPAK开发工具网页,对话半导体yabo国际娱乐
  4. GreenPAK应用笔记GreenPAK应用笔记网页,Dialog半导体yabo国际娱乐

作者:伊万Vaskiv

介绍

计数器是一种数字电路,用于计数输入事件(脉冲、边缘)。数字电子计数器通常由串级连接的一系列触发器组成。

本应用笔记旨在展示如何构建具有GreenPAK中设计的不同接口方法的双向计数器(FSM)。需要实现的方法有:

带有SPI输出的16位FSM

具有I2C输出的16位FSM

具有并行输出的FSM(基于glue逻辑)

带有SPI输出的16位FSM

P69 # yIS1
图1:“带有SPI输出的16位FSM”

“带有SPI输出的16位FSM”在一个内部16位寄存器(FSM0, FSM1)中计数输入时钟,用户可以在任何时候通过SPI读取值,复位16位寄存器,或改变计数方向。该设计在SLG46140或SLG46620中实现。

让我们看看它是如何工作的。16位计数器是使用两个计数器(FSM0和FSM1块)和附加逻辑实现的,因为SLG46140没有16位FSM。第15 - 8位存储在FSM0中,第7 - 0位存储在FSM1中。两个FSMs都连接到SPI块,该块可以通过SPI输出串行数据。计数方向由上下针控制。如果该引脚为HIGH,系统计数UP,如果该引脚为LOW,系统计数DOWN。Gen Reset引脚用于复位计数器值(主动高)。

输入时钟来自时钟输入。这些时钟同时应用于FSM1和FSM0的CLK输入。FSM1计数每个时钟,而FSM0只在FSM1计数器值为255且Up/Down信号为HIGH或FSM1计数器值为0且Up/Down信号为LOW时计数。这个功能是使用FSM0的KEEP输入来实现的。当这个信号是高时,尽管时钟信号,FSM0的计数器值是不变的。KEEP输入通过逆变器连接FSM1输出。只有计数器值为0且Up/Down信号为LOW,或者计数器值为255且Up/Down信号为HIGH时,FSM1依次输出为HIGH。

由于FSM的计数器值达到最大值(255),FSM1的计数器数据为255时,FSM的计数器值被重置为计数器数据,所以FSM1在计数时停止在最大值(255),并且FSM1 up输入信号为HIGH。为了避免这种情况,DFF2和3位LUT1在FSM1达到最大值且Up/Down为HIGH时,在下一个时钟对FSM1进行复位。当Up/Down为LOW时,表示FSM1未复位。这种情况与FSM0类似。这个也被重置为计数器数据,当FSM0达到最大值(16383),它将开始导致错误的数据。为了避免这种情况,3位LUT3在两个FSMs达到最大值(这种情况的SPI输出代码是0xFFFF)和Up/Down是高的下一个时钟复位FSM0。当Up/Down为LOW时,两个FSMs都不复位。

D0 - PIN#6 (nCSB)

D1 -引脚#7 (sclk)

D2 -引脚#12(味噌)

D3 - PIN#2(一般复位)

D4 - PIN#3(上/下)

D5 - PIN#4(时钟)

P83 # yIS1
图2:“带有SPI输出的16位FSM”的功能

下面的设计,显示在图3,只是对带有SPI输出的16位FSM的修改。如果我们需要检测溢出(OVF)事件并设置16位计数器(FSM0和FSM1)的初始值,可以使用此设计。

16位计数器的初始值设置为½最大值(FSM0 data = 0x7F, FSM1 data = 0xFF),可以轻松调节。初始值设置过程大约需要9ms,并在GreenPAK IC上电后或当高脉冲应用于“Gen Reset”输入时开始。在这~9ms期间,FSM0和FSM1接收来自内部OSC的脉冲,并将忽略来自时钟输入的脉冲。初始值取决于CNT0计数器数据和管道延迟“OUT0 PD num”值。CNT0计数时钟从内部振荡器同时与16位计数器。管道延迟依次计数来自CNT0的输出脉冲。当管道延迟OUT0变高时,OSC被这个信号(2-L5)停止,16位计数器的时钟信号从时钟输入中提取。为了改变时钟源,使用3位LUT0。此外,当Pipe delay OUT0为LOW时,它会强制16位计数器向下计数,以保证初始值设置过程中计数方向正确。初始值由下式确定:

如果16位计数器溢出,将设置一个相应的OVF输出并锁存。IC复位后或有“Gen复位”或“OVF复位”信号时复位。该功能使用以下组件实现:DCMP0, DCMP1, 4位LUT0, 2-L4和DFF2。

P91 # yIS1
图3:“具有SPI输出、OVF和初值设置功能的16位FSM”

D0 - PIN#6 (nCSB)

D1 -引脚#7 (sclk)

D2 -引脚#12(味噌)

D3 - PIN#5 (OVF复位)

D4 - PIN#2(一般复位)

D5 - PIN#3(上/下)

D6 - PIN#4(时钟)

D7 -引脚#11 (ovf)

P101 # yIS1
图4:“具有SPI输出、OVF和初值设置功能的16位FSM”功能
P103 # yIS1
图5:“16位FSM带SPI输出、OVF和初值设置功能”OVF事件发生的功能

最后一个与SPI输出的16位FSM相关的设计是“具有SPI输出的16位FSM,具有零检测器和初值设置功能”。

P106 # yIS1
图6:“带有SPI输出、零检测器和初值设置功能的16位FSM”

当16位计数器值等于零时,相应的ZD输出(零检测器)将被设置并锁存。IC复位后或“Gen复位”或“ZD复位”信号到达时将复位。

P109 # yIS1
图7:“具有SPI输出、OVF和初值设置功能的16位FSM”功能
P111 # yIS1
图8:发生ZD事件“16位FSM带SPI输出、OVF和初值设置功能”的功能

16位I2C输出FSM

P114 # yIS1
图9:“带有I2C输出的16位FSM”

本设计在一个内部16位寄存器(FSM0)中计数输入时钟。在任何时候,用户可以通过I2C读取值,重置16位寄存器,或改变计数方向。本设计在SLG46533上实现。还有一个FSM单元,可以用来获得一个32位寄存器或两个独立的16位寄存器。初始值的设置方法与以前的设计相同。

DFF3和3位LUT1的作用与“16位FSM with SPI output”相同,即当FSM0达到最大值(0xFFFF)且Up/Down信号为HIGH时,下一个时钟复位FSM0,因为当FSM0达到最大值时FSM0停止,而FSM0 Up输入为HIGH。

D0 - PIN#3(时钟)

D1 - PIN#4(复位)

D2 - PIN#5(上/下)

D3 -引脚#8 (scl)

D4 -引脚9号(sda)

P125 # yIS1
图10:“带有I2C输出的16位FSM”功能
P127 # yIS1
图11:“带有I2C输出的16位FSM”的放大功能

“并行输出的9位FSM”

P130 # yIS1
图12:“并行输出的4位FSM”

最后设计了一个具有并行输出的双向计数器。为了构建这种双向计数器,仅串联DFF是不够的。为了构建双向计数器,需要额外的逻辑组件。该设计基于DFFs和lut。用户可随时对计数器值进行复位或改变计数方向。Keep signal (active HIGH)被指定为保持计数器值而不管时钟信号。

D0 - PIN#3(上/下)

D1 - PIN#4(保留)

D2 - PIN#5(时钟)

D3 - PIN#7 (nReset)

D4 -引脚#15 (q3)

D5 -引脚#14 (q2)

D6 -引脚#13 (q1)

D7 -引脚#12 (q0)

P141 # yIS1
图13:“并行输出的4位FSM(基于Glue逻辑)”功能

为了增加输出的数量,只需要复制“One bit”部分(3-bit LUT2, 2-L1, DFF6),如图所示图14

P144 # yIS1
图14:“并行输出的9位FSM”功能

结论

计数器已成为实时系统、速度计、里程表、电表、计数转数等大多数设备不可分割的一部分。GreenPAK是实现所需的计数器功能的理想选择,成本更低,空间更小。