专利名称:基于fpga的plc高速脉冲计数实现系统及方法
技术领域:
本发明涉及PLC计数领域,更具体地说,涉及一种基于FPGA的PLC高速脉冲计数比较系统及方法。
背景技术:
PLC(Programmable Logic Controller,可编程逻辑控制器)广泛应用于各种自动化控制领域,PLC的主要功能之一是实现对不同形式高速脉冲的计数比较。为实现PLC的计数比较功能,目前大多是采用FPGA(Field-Programmable GateArray,现场可编程门阵列)来实现。在FPGA中设计多个计数器和比较寄存器,计数器根据用户的设置实现对不同模式的脉冲计数,通过比较器对比较寄存器中的值(将用户设置的比较数据存储于比较寄存器中)与计数器中的值进行比较,判断计数是否达到比较值。为了能满足用户设置比较数据值的大小,PLC中一般都将计数器和比较寄存器设置为32位,且为了能满足不同形式高速脉冲的计数比较功能,每个计数器都配置有两个比较寄存器。若设计8个32位计数器,则需配置16个32位比较寄存器,每个计数器需要与两个比较寄存器进行比较。这种实现方式会消耗大量的FPGA查找表资源,在FPGA资源有限的情况下,这种实现方式具有很大的缺陷性。
发明内容
本发明要解决的技术问题在于,针对上述PLC计数消耗大量的FPGA查找表资源的问题,提供一种基于FPGA的PLC高速脉冲计数实现系统及方法。本发明解决上述技术问题采用的技术方案是,提供一种基于FPGA的PLC高速脉冲计数实现系统,包括FPGA,所述FPGA包括有双端口块RAM、比较控制状态机以及计数器堆;其中所述双端口块RAM分别连接PLC的微控制单元和比较控制状态机;所述双端口块RAM中包括有多组比较寄存器,所述计数器堆中包括多个用于对输入脉冲进行计数的计数器,所述计数器堆中的每一计数器对应所述双端口块RAM中的一组比较寄存器;所述比较控制状态机循环从所述双端口块RAM中读取每一个比较寄存器的值并与所述计数器堆中对应的计数器的值进行比较。在本发明所述的基于FPGA的PLC高速脉冲计数实现系统中,所述FPGA还包括中断模块,所述中断模块用于对比较寄存器进行中断使能设置并根据所述中断使能设置和所述比较控制状态机的比较结果输出中断信号到所述PLC的微控制单元。在本发明所述的基于FPGA的PLC高速脉冲计数实现系统中,所述双端口块RAM根据所述PLC的微控制单元的输入设置比较寄存器的值。在本发明所述的基于FPGA的PLC高速脉冲计数实现系统中,其特征在于:所述比较控制状态机按状态转换时钟频率进行状态转换,所述比较控制状态机的状态转换的频率大于或等于输入脉冲最大频率的N倍,所述N为双端口块RAM中比较寄存器的数量。在本发明所述的基于FPGA的PLC高速脉冲计数实现系统中,每一组比较寄存器包括两个比较寄存器,每一个比较寄存器中存储有一个比较数据。 本发明还提供一种基于FPGA的PLC高速脉冲计数实现方法,所述FPGA包括有双端口块RAM、比较控制状态机以及计数器堆;其中所述双端口块RAM具有两个端口且该两个端口分别连接PLC的微控制单元和比较控制状态机;所述双端口块RAM中包括有多组比较寄存器,所述计数器堆中包括多个用于对输入脉冲进行计数的计数器,所述计数器堆中的每一计数器对应所述双端口块RAM中的一组比较寄存器,所述方法包括以下步骤:步骤(a),所述比较控制状态机状态跳转,并读取双端口块RAM的第一比较寄存器的值,将该第一比较寄存器的值与计数器堆中所述第一比较寄存器对应的计数器的值进行比较;步骤(b),所述比较控制状态机状态跳转,并按比较寄存器的顺序读取下一比较寄存器的值,并将该比较寄存器的值与计数器堆中该比较寄存器对应的计数器的值进行比较;步骤(C),判断所述比较寄存器是否为最末一个比较寄存器,若是则执行步骤(a),否则执行步骤(b)。在本发明所述的基于FPGA的PLC高速脉冲计数实现方法中,步骤(a)和步骤(b)之后分别包括:在所述比较寄存器的值与计速器的值匹配且中断使能有效时输出中断信号。在本发明所述的基于FPGA的PLC高速脉冲计数实现方法中,在步骤(a)之前包括:所述双端口块RAM根据所述PLC的微控制单元的输入设置比较寄存器的值。在本发明所述的基于FPGA的PLC高速脉冲计数实现方法中,所述比较控制状态机按状态转换时钟频率进行状态转换,所述比较控制状态机的状态转换的频率大于或等于输入脉冲最大频率的N倍,所述N为双端口块RAM中比较寄存器的数量。在本发明所述的基于FPGA的PLC高速脉冲计数实现方法中,每一组所述比较寄存器包括两个比较寄存器,每一个比较寄存器中存储有一个比较数据。本发明的基于FPGA的PLC高速脉冲计数实现方法,通过将比较数据存储于FPGA内部的双端口块RAM,并使用比较控制状态机将双端口块RAM中的比较数据与计数器循环比较,从而实现PLC对高速脉冲的计数比较。
图1是本发明基于FPGA的PLC高速脉冲计数实现系统第一实施例的示意图。图2是本发明基于FPGA的PLC高速脉冲计数实现系统第二实施例的示意图。图3是比较控制状态机的工作原理图。图4是本发明基于FPGA的PLC高速脉冲计数实现方法实施例的流程图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。如图1所示,是本发明基于FPGA的PLC高速脉冲计数实现系统第一实施例的示意图。该系统包括FPGA 10,该FPGA 10包括有双端口块RAMl1、比较控制状态机12以及计数器堆13。上述的双端口块RAMll具有两个端口且该两个端口分别连接PLC的微控制单元和比较控制状态机12。双端口块RAMll中包括有多组比较寄存器。例如双端口块RAMll中可以包括8组比较寄存器,每组具有两个比较寄存器,每一个比较寄存器中存储有一个设定的比较数据。计数器堆13中包括多个用于对输入脉冲进行计数的计数器。上述计数器堆13中的每一计数器对应双端口块RAMll中的一组比较寄存器。此外,上述计数器堆13中的两个计数器还可共用一组比较寄存器。例如,为实现PLC的高速计数功能,计数器堆13中可设计至少8个32位计数器(O 7),每个计数器都配置两个32位比较寄存器(位于双端口块RAMll中),分别对应两个比较输出。比较控制状态机12循环地从双端口块RAMll中读取每一个比较寄存器的值,并将该读取的值与计数器堆13中对应的计数器(该计数器与比较寄存器对应)的值进行比较。具体地,比较控制状态机12每次从内部双端口块RAMll中取一个比较寄存器并读取比较数据,将该比较数据与相应计数器进行比较,每完成一次比较,状态机跳入下一个状态,不断循环,16个比较寄存器共需要16个状态就能完成一轮比较,然后再比较第一比较寄存器中的比较数据,如图3所示。如图2所示,是本发明基于FPGA的PLC高速脉冲计数实现系统第二实施例的示意图。在本实施例中,系统包括PLC的微控制单元(MCU) 30以及FPGA20,其中FPGA 20除了包括双端口块RAM21、比较状态控制器22以及计数器堆23外,还包括中断模块24。上述双端口块RAM21的两端分别连接PLC的微控制单元30以及比较状态控制器22。PLC的微控制单元30将计数用比较数据从双端口块RAM21的一个端口写入比较寄存器。中断模块24用于对比较寄存器进行中断使能设置,并根据中断使能设置和比较控制状态机22的比较结果,即比较寄存器的值与对应计数器的值相等时,输出中断信号到所述PLC的微控制单元30。该中断模块24可针对一个或多个比较寄存器进行中断使能设置(例如通过创建中断表),只有进行了中断使能设置的比较寄存器才会根据比较结果产生中断信号,而未进行中断使能设置的比较寄存器则不会产生中断信号。上述的比较控制状态机12或22按状态转换时钟频率进行状态转换,每次状态转换执行一次比较数据和相应计数器的比较。特别地,上述基于FPGA的PLC高速脉冲计数实现系统中,比较控制状态机12或22的状态转换的频率大于或等于计数器输入脉冲最大频率的N倍,其中该N为双端口块RAMll或21中比较寄存器的数量。例如当比较控制状态机12或22的状态转换时钟频率为8MHz,则允许计数器输入脉冲频率最大可达500KHz。如图4所示,是本发明基于FPGA的PLC高速脉冲计数实现方法实施例的流程图,上述的FPGA包括有双端口块RAM、比较控制状态机以及计数器堆;其中双端口块RAM具有两个端口且该两个端口分别连接PLC的微控制单元和比较控制状态机;双端口块RAM中包括有多组比较寄存器(每一组所述比较寄存器包括两个比较寄存器,每一个比较寄存器中存储有一个比较数据),计数器堆中包括多个用于对输入脉冲进行计数的计数器,且计数器堆中的每一计数器对应所述双端口块RAM中的一组比较寄存器。该方法包括以下步骤:
步骤S41:比较控制状态机执行一次状态跳转,读取双端口块RAM的第一比较寄存器的值(即该第一比较寄存器存储的比较数据),并将该第一比较寄存器的值与计数器堆中与第一比较寄存器对应的计数器的值进行比较。步骤S42:比较控制状态机执行一次状态跳转,按比较寄存器的顺序读取下一比较寄存器的值,并将该比较寄存器的值与计数器堆中该比较寄存器对应的计数器的值进行比较。步骤S43:判断比较寄存器是否为最末一个比较寄存器,若是则执行步骤S41,否则执行步骤S42。在上述的基于FPGA的PLC高速脉冲计数实现方法中,步骤S41和步骤S42之后还可分别包括:在比较寄存器的值与计速器的值匹配且中断使能有效时输出比较中断通知。此外,在上述的基于FPGA的PLC高速脉冲计数实现方法中,在步骤S41之前还包括:双端口块RAM根据PLC的微控制单元的输入的比较数据设置各个比较寄存器的值以及对一个或多个比较寄存器进行中断使能设置。上述的比较控制状态机按状态转换时钟频率进行状态转换,每次状态转换执行一次比较数据和相应计数器的比较。特别地,上述比较控制状态机的状态转换的频率大于或等于计数器输入脉冲最大频率的N倍,其中该N为双端口块RAM中比较寄存器的数量。例如当比较控制状态机的状态转换时钟频率为8MHz,则允许计数器输入脉冲频率最大可达500KHz。上述基于FPGA的PLC高速脉冲计数实现系统及方法,通过在FPGA中设计内部双端口双端口块RAM,将PLC中用户设置的比较数据存储于内部双端口块RAM,并通过循环比较方式,使比较控制状态机每次从内部双端口块RAM中取一个比较数据与相应计数器的值进行比较,若比较相等,则相应比较输出置位,产生中断。每完成一次比较,状态机跳入下一个状态,不断循环,充分利用了 FPGA的内部RAM资源,节约了 FPGA的查找表资源,实现PLC对高速脉冲的计数比较。通过设置,可使本发明的系统及方法实现PLC不同模式的高速脉冲计数,包括单向单计数、单向双计数、AB相计数等。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种基于FPGA的PLC高速脉冲计数实现系统,包括FPGA,其特征在于:所述FPGA包括有双端口块RAM、比较控制状态机以及计数器堆;其中所述双端口块RAM分别连接PLC的微控制单元和比较控制状态机;所述双端口块RAM中包括有多组比较寄存器,所述计数器堆中包括多个用于对输入脉冲进行计数的计数器,所述计数器堆中的每一计数器对应所述双端口块RAM中的一组比较寄存器;所述比较控制状态机循环从所述双端口块RAM中读取每一个比较寄存器的值并与所述计数器堆中对应的计数器的值进行比较。
2.根据权利要求1所述的基于FPGA的PLC高速脉冲计数实现系统,其特征在于:所述FPGA还包括中断模块,所述中断模块用于对比较寄存器进行中断使能设置并根据所述中断使能设置和所述比较控制状态机的比较结果输出中断信号到所述PLC的微控制单元。
3.根据权利要求1所述的基于FPGA的PLC高速脉冲计数实现系统,其特征在于:所述双端口块RAM根据所述PLC的微控制单元的输入设置比较寄存器的值。
4.根据权利要求1所述的基于FPGA的PLC高速脉冲计数实现系统,其特征在于:所述比较控制状态机按状态转换时钟频率进行状态转换,所述比较控制状态机的状态转换的频率大于或等于输入脉冲最大频率的N倍,所述N为双端口块RAM中比较寄存器的数量。
5.根据权利要求1-4中任一项所述的基于FPGA的PLC高速脉冲计数实现系统,其特征在于:每一组比较寄存器包括两个比较寄存器,每一个比较寄存器中存储有一个比较数据。
6.一种基于FPGA的PLC高速脉冲计数实现方法,其特征在于:所述FPGA包括有双端口块RAM、比较控制状态机以及计数器堆;其中所述双端口块RAM分别连接PLC的微控制单元和比较控制状态机;所述双端口块RAM中包括有多组比较寄存器,所述计数器堆中包括多个用于对输入脉冲进行计数的计数器,所述计数器堆中的每一计数器对应所述双端口块RAM中的一组比较寄存器,所述方法包括以下步骤: 步骤(a),所述比较控制状态机状态跳转,并读取双端口块RAM的第一比较寄存器的值,将该第一比较寄存器的值与计数器堆中所述第一比较寄存器对应的计数器的值进行比较; 步骤(b),所述比较控制状态机状态跳转,并按比较寄存器的顺序读取下一比较寄存器的值,并将该比较寄存器的值与计数器堆中该比较寄存器对应的计数器的值进行比较; 步骤(c),判断所述比较寄存器是否为最末一个比较寄存器,若是则执行步骤(a),否则执行步骤(b)。
7.根据权利要求6所述的基于FPGA的PLC高速脉冲计数实现方法,其特征在于:步骤(a)和步骤(b)之后分别包括:在所述比较寄存器的值与计速器的值匹配且中断使能有效时输出中断信号。
8.根据权利要求6所述的基于FPGA的PLC高速脉冲计数实现方法,其特征在于:在步骤(a)之前包括:所述双端口块RAM根据所述PLC的微控制单元的输入设置比较寄存器的值。
9.根据权利要求6所述的基于FPGA的PLC高速脉冲计数实现方法,其特征在于:所述比较控制状态机按状态转换时钟频率进行状态转换,所述比较控制状态机的状态转换的频率大于或等于输入脉冲最大频率的N倍,所述N为双端口块RAM中比较寄存器的数量。
10.根据权利要求6所述的基于FPGA的PLC高速脉冲计数实现方法,其特征在于:每一组所述比较寄存器包括两个比较寄存器,每一个比较寄存器中存储有一个比较数据。
全文摘要
本发明提供了一种基于FPGA的PLC高速脉冲计数实现系统,包括FPGA,该FPGA包括有双端口块RAM、比较控制状态机以及计数器堆;其中所述双端口块RAM中包括有多组比较寄存器,所述计数器堆中包括多个用于对输入脉冲进行计数的计数器,所述计数器堆中的每一计数器对应所述双端口块RAM中的一组比较寄存器;所述比较控制状态机循环从所述双端口块RAM中读取每一个比较寄存器的值并与所述计数器堆中对应的计数器的值进行比较。本发明还提供一种对应的方法。本发明通过将比较数据存储于FPGA内部的双端口块RAM中,并使用比较控制状态机将双端口块RAM中的比较数据与计数器循环比较,从而实现PLC对高速脉冲的计数比较。
文档编号G05B19/05GK103187967SQ20111045128
公开日2013年7月3日 申请日期2011年12月29日 优先权日2011年12月29日
发明者郭福坤 申请人:深圳市汇川控制技术有限公司, 深圳市汇川技术股份有限公司