一种带溢出保护功能的计数器电路
技术领域
本发明涉及集成电路及逻辑电路的设计领域,具体涉及在芯片内部的一种带溢出保护功能的计数器电路。
背景技术
计数器电路广泛应用于数字系统中,其不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。其中,正负计数是各类数字系统中应用得最多的一种时序逻辑电路。
请参阅图1,图1所示为现有技术中一种正负计数器电路示意图。如图1所示,该计数器包括第0位至第8位的计数单元BIT0,BIT1,…,BIT8,第9位的计数单元为符号位,第9位的计数单元决定输出数据是正数还是负数,若该符号位的SIGN显示为“0”,正负计数器电路输出为正数;若该符号位的SIGN显示为“1”,正负计数器电路输出为负数。
计数器开始计数后,有两个因素可以使计数停止:
①、当计数器输入信号IN_CNT跳变时(由0变为1);
②、计数时钟信号CLK_CNT停止时。
一方面,开始计数时,该计数器输入信号IN_CNT保持为“0”,计数器从第一位开始计数,以计数时钟信号CLK_CNT一个周期为计数最小单位,计数单元BIT0的计数输出触发计数单元BIT1进行计数,计数单元BIT1计数输出触发计数单元BIT2进行计数,以此类推。当输入信号IN_CNT由“0”变为“1”时,计数停止,计数器将保存当前计数值。
另一方面,开始计数时,计数时钟信号CLK_CN为计数器使能信号EN_CNT和外部输入时钟CLK进行“与”操作的结果,当使能信号EN_CNT为“1”时,计数器时钟信号CLK_CNT为正常计数时钟;当使能信号EN_CNT为“0”时,计数时钟信号CLK_CNT=0,计数器则停止工作。
请参阅图2,图2所示为图1所示正负计数器的时序示意图。如图2所示,计数器的计数分为三部分,第一个部分为负计数阶段,第二个部分为正计数阶段,第三个部分为数据输出阶段。
在负计数阶段,计数器输入信号IN_CNT由“0”变为“1”后,计数器将负计数值暂时存储;在正计数阶段前,计数器输入信号IN_CNT先为“0”,在变为“1”后,计数器将正计数阶段的正计数值与负计数阶段的负计数值累加,得到最终计数值,并在数据输出阶段输出。计数器每一位的输出CN0,CN1,…,CN8形成最终的9位二进制数据。
本领域技术人员清楚,一般计数器位数越高,计数精度也就越高。当计数达到最大值(满幅)时,达到了计数器的最大计数量,如果继续计数,将导致计数器输出结果错误。
例如,具有正负计数功能的计数器输出达到满幅后,若计数器继续计数,其输出将变为负值,即产生计数错误。请参阅图3,图3所示为现有技术中的正负计数器电路超量程输出时序图。如图所示,在正计数阶段,计数器输入信号IN_CNT没有由“0”变为“1”,计数器计数到满幅后,继续计数,使得数据输出阶段输出的最终数据为错误的负数(即CN9=“1”)。
发明内容
本发明的目的在于提供一种带溢出保护功能的正负计数器电路,使得正负计数器输出不会因达到满计数值后继续计数而产生计数错误。
为实现上述目的,本发明的技术方案如下:
一种带溢出保护功能的计数器电路,包括用于产生计数时钟信号CLK_CNT的计数时钟产生单元、N位串接的计数单元BIT0,BIT1,…,BITn-1和计数值输出单元;所述N位串接的计数单元BIT0,BIT1,…,BITn-1每一位的输出CN0,CN1,…,CNn-1所形成的N位二进制数据,为所述计数值输出单元的输出值;其特征在于,还包括防溢出保护单元OF_CTRL,其位于所述计数时钟产生单元和所述N位串接的计数单元BIT0,BIT1,…,BITn-1之间;所述防溢出保护单元OF_CTRL将所述输出值的每一位进行“与”操作后的结果再和所述计数时钟信号CLK_CNT进行“与”操作,其输出即为防溢出保护单元OF_CTRL的输出信号CLK_LIMT,所述输出信号CLK_LIMT控制所述N位串接的计数单元BIT0,BIT1,…,BITn-1工作;其中,所述N为大于等于1的正整数。
进一步地,当所述计数值输出单元的输出值中的每一位二进制数据不全部为“1”时,所述防溢出保护单元OF_CTRL的输出信号CLK_LIMT=计数时钟信号CLK_CNT,所述计数器电路正常计数;当所述计数值输出单元的输出值中的每一位二进制数据全部为“1”时,所述防溢出保护单元OF_CTRL的输出信号CLK_LIMT为0,所述计数器电路停止计数,所述计数值输出单元的输出值被锁定在最大计数值。
进一步地,所述计数时钟产生单元包括一个非门D、一个与门E和一个与非门F,所述与非门F接收所述非门D和所述与门E的输出结果,并输出所述计数时钟信号CLK_CNT到所述防溢出保护单元OF_CTRL;其中,所述非门D的输入端接收计数器输入信号IN_CNT;所述与门E的两个输入端分别接收计数器使能信号EN_CNT和外部输入时钟CLK。
进一步地,所述N为9,所述N位串接的计数单元BIT0,BIT1,…,BITn-1为计数单元(BIT0,BIT1,…,BIT8),所述计数值输出单元的输出值为CN0,CN1,…,CN8所形成的二进制数据。
进一步地,所述防溢出保护单元OF_CTRL包括三个与门A、一个与非门B、一个触发器和一个与门C;所述CN0,CN1,…,CN8分三组输入三个所述与门A,分别输出A1、A2、A3再输入至所述与非门B,所述与非门B的输出LIMT经过所述计数时钟信号CLK_CNT采样后所述触发器输出L_S,所述L_S和所述计数时钟信号CLK_CNT再输入至所述与门C,所述与门C输出所述输出信号CLK_LIMT。
进一步地,所述计数器电路为正负计数器电路,所述正负计数器电路还包括一个符号计数单元BITn,其中,所述N为大于等于2的正整数。
进一步地,所述N为9,所述N位串接的计数单元BIT0,BIT1,…,BITn-1为计数单元(BIT0,BIT1,…,BIT8),所述符号计数单元BITn为符号计数单元BIT9,所述计数值输出单元的输出值为CN0,CN1,…,CN8所形成的二进制数据。
从上述技术方案可以看出,本发明提供的一种带溢出保护功能的计数器电路,其所包括的防溢出保护单元OF_CTRL实时检测计数器每一位的输出,当每一位输出信号均为“1”,则溢出保护电路输出发生跳变,使计数器时钟置“0”,而使计数器停止计数并锁定在最大满幅计数值。
附图说明
图1所示为现有技术中一种正负计数器电路示意图
图2所示为图1所示正负计数器的时序示意图
图3所示为现有技术中的正负计数器电路超量程输出时序图
图4所示为本发明带溢出保护的正负计数器电路一较佳实施例的示意图
图5所示为本发明防溢出保护单元一较佳实施例的示意图
图6所示为本发明带溢出保护的正负计数器电路超量程输出时序图
具体实施方式
下面结合附图4-6,对本发明的具体实施方式作进一步的详细说明。
需要说明的是,本发明适用于具有N位串接计数单元BIT0,BIT1,…,BITn-1的计数器电路,本发明的一种带溢出保护功能的计数器电路,是在图1的基础上,增加了防溢出保护单元OF_CTRL。本领域技术人员清楚,正负计数器电路是计数器电路的一种,与一般的具有N位串接计数单元BIT0,BIT1,…,BITn-1的计数器电路相比,具有N位串接计数单元BIT0,BIT1,…,BITn-1还包括一个符号计数单元BITn。然而,在本发明的实施例中,防溢出保护单元OF_CTRL仅针对N位串接计数单元BIT0,BIT1,…,BITn-1的输出值进行处理,也就是说,符号计数单元BITn输出值与防溢出保护单元OF_CTRL无关。因此,为叙述清楚起见,下面以具有N位串接计数单元BIT0,BIT1,…,BITn-1正负计数器电路为例进行说明。
具体地,本发明的一种带溢出保护功能的正负计数器电路,其包括计数时钟产生单元、N个计数单元BIT0,BIT1,…,BITn-1、一个符号计数单元BITn、防溢出保护单元OF_CTRL和计数值输出单元。其中,该N为大于等于2的正整数。
N位串接的计数单元BIT0,BIT1,…,BITn-1每一位的输出CN0,CN1,…,CNn-1所形成的N位二进制数据,为计数值输出单元的输出值。防溢出保护单元OF_CTRL位于计数时钟产生单元和N位串接的计数单元BIT0,BIT1,…,BITn-1之间;防溢出保护单元OF_CTRL将输出值的每一位进行“与”操作后的结果再和计数时钟信号CLK_CNT进行“与”操作,其输出即为防溢出保护单元OF_CTRL的输出信号CLK_LIMT,输出信号CLK_LIMT控制N位串接的计数单元BIT0,BIT1,…,BITn-1工作。
为叙述方便,在本发明的下述实施例中,该N的取值为9。请参阅图4,图4所示为本发明带溢出保护的正负计数器电路图一较佳实施例的示意图。如图所示,在该情况下,N位串接的计数单元BIT0,BIT1,…,BITn-1为计数单元BIT0,BIT1,…,BIT8,符号计数单元BITn为符号计数单元BIT9,计数值输出单元的输出值为CN0,CN1,…,CN8所形成的二进制数据。
符号计数单元BIT9的符号位决定该正负计数器电路输出数据是正数还是负数,若该符号位的SIGN显示为“0”,该正负计数器电路输出值为正数;若该符号位的SIGN显示为“1”,该正负计数器电路输出值为负数。
在负计数阶段和正计数阶段,计数时钟产生单元以计数时钟信号CLK_CNT一个周期为计数最小单位,控制计数单元BIT0的计数输出触发计数单元BIT1进行计数,计数单元BIT1计数输出触发计数单元BIT2进行计数,…,以此类推。在数据输出阶段,正负计数器电路的输出值为9个计数单元BIT0,BIT1,…,BIT8最终输出的9位二进制数据。
如图4所示,该计数时钟产生单元包括一个非门D、一个与门E和一个与非门F,与非门F接收非门D和与门E的输出结果,并输出计数时钟信号CLK_CNT到防溢出保护单元OF_CTRL;其中,非门D的输入端接收计数器输入信号IN_CNT;与门E的两个输入端分别接收计数器使能信号EN_CNT和外部输入时钟CLK。需要说明的是,现有技术中计数时钟产生单元均可以用于本发明,在此不再赘述。
在本发明实施例中,新增加的防溢出保护单元OF_CTRL将每一位的输出值进行“与”操作后的结果再和计数时钟信号CLK_CNT进行“与”操作,其输出即为防溢出保护单元OF_CTRL的输出信号CLK_LIMT,输出信号CLK_LIMT控制计数时钟信号CLK_CNT是否能有效启动计数单元BIT0计数。
具体地,当CN0,CN1,…,CNn-1中的每一位二进制数据不全部为“1”时,防溢出保护单元OF_CTRL的输出信号CLK_LIMT=计数时钟信号CLK_CNT,正负计数器电路正常计数;当CN0,CN1,…,CNn-1中的每一位二进制数据全部为“1”时,防溢出保护单元OF_CTRL的输出信号CLK_LIMT=0,正负计数器电路停止计数,CN0,CN1,…,CNn-1被锁定在最大计数值,即“111111111。
请参阅图5,图5所示为本发明防溢出保护单元一较佳实施例的示意图。如图所示,本发明防溢出保护单元位于计数时钟产生单元和计数单元BIT0之间。该防溢出保护单元包括3个与门A、一个与非门B、一个触发器DFF和一个与门C;CN0,CN1,…,CN8分三组输入3个与门A,分别输出A1、A2、A3再输入至与非门B,与非门B的输出LIMT经过计数时钟信号CLK_CNT采样后所述触发器输出L_S,L_S和计数时钟信号CLK_CNT再输入至与门C,与门C输出该输出信号CLK_LIMT。
也就是说,假如CN0=CN1=…=CN8=1时,A1=A2=A3=1,则LIMT为0,LIMT被CLK_CNT上升沿采样后输出L_S=0,使得最终CLK_LIMT为0,正负计数器电路停止计数;这样就避免了正负计数器电路达到满计数值时,继续计数导致的计数错误。若没有防溢出保护单元OF_CTRL电路,当CN0=CN1=…=CN8=1时,再往下计数,整个正负计数器电路无法输出更大的数值,只能再从负数开始计数,导致最终输出错误。
请参阅图6,图6所示为本发明带溢出保护的正负计数器电路超量程输出时序图。如图6所示,该带溢出保护的正负计数器,在正计数阶段,计数器输入信号IN_CNT没有由“0”变为“1”,但防溢出保护单元OF_CTRL判断出计数已到满幅(即每一位均为“1”),使得LIMT由“1”变为“0”,使防溢出保护单元OF_CTRL的输出信号CLK_LIMT为0,计数停止。此时正负计数器电路被锁定在最大计数值,即“111111111”。
综上所述,本发明的防溢出保护单元使得正负计数器在任何情况下输出信号不会超过预设的量程,避免了传统正负计数器在输入信号超过预设量程范围时出现计数错误的情况,提高了正负计数器计数稳定性。
以上所述的仅为本发明的优选实施例,所述实施例并非用以限制本发明的专利保护范围,因此凡是运用本发明的说明书及附图内容所作的等同结构变化,同理均应包含在本发明的保护范围内。