术语和定义
参考文献
//www.xmece.com/configurable-mixed-signal.
下载我们的免费GreenPAK软件设计师(1]以打开。gp文件[2],并查看所提出的电路设计。使用GreenPAK开发工具(3.可以在几分钟内将设计冻结到您自己定制的集成电路中。yabo国际娱乐Dialog Semiconductor提供完整的申请资料库[4],包括设计实例,以及对Dialog IC的功能和模块的解释。
- GreenPAK设计软件,《软件下载及用户指南》,Dialog Semiconductoryabo国际娱乐
- 一个双向Counter.gp - cm - 286,GreenPAK设计文件,Dialog半导yabo国际娱乐体
- GreenPAK开发工具,GreenPAK开发工具网页,对话半导体yabo国际娱乐
- GreenPAK应用笔记,GreenPAK应用笔记网页,Dialog半导体yabo国际娱乐
作者:伊万Vaskiv
介绍
计数器是一种数字电路,用于计数输入事件(脉冲、边缘)。数字电子计数器通常由串级连接的一系列触发器组成。
本应用笔记旨在展示如何构建具有GreenPAK中设计的不同接口方法的双向计数器(FSM)。需要实现的方法有:
带有SPI输出的16位FSM
具有I2C输出的16位FSM
具有并行输出的FSM(基于glue逻辑)
带有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(时钟)
下面的设计,显示在图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。
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)
最后一个与SPI输出的16位FSM相关的设计是“具有SPI输出的16位FSM,具有零检测器和初值设置功能”。
当16位计数器值等于零时,相应的ZD输出(零检测器)将被设置并锁存。IC复位后或“Gen复位”或“ZD复位”信号到达时将复位。
16位I2C输出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)
“并行输出的9位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)
为了增加输出的数量,只需要复制“One bit”部分(3-bit LUT2, 2-L1, DFF6),如图所示图14.
结论
计数器已成为实时系统、速度计、里程表、电表、计数转数等大多数设备不可分割的一部分。GreenPAK是实现所需的计数器功能的理想选择,成本更低,空间更小。