CN102254218B - Arm+fpga组成的计数器装置及其实现方法 - Google Patents

Arm+fpga组成的计数器装置及其实现方法 Download PDF

Info

Publication number
CN102254218B
CN102254218B CN201110184552.9A CN201110184552A CN102254218B CN 102254218 B CN102254218 B CN 102254218B CN 201110184552 A CN201110184552 A CN 201110184552A CN 102254218 B CN102254218 B CN 102254218B
Authority
CN
China
Prior art keywords
counter
module
fpga
sdram
dual port
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201110184552.9A
Other languages
English (en)
Other versions
CN102254218A (zh
Inventor
李克俭
蔡启仲
罗功坤
付杰
丁秋笛
吴笔迅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangxi University of Science and Technology
Original Assignee
Guangxi University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangxi University of Science and Technology filed Critical Guangxi University of Science and Technology
Priority to CN201110184552.9A priority Critical patent/CN102254218B/zh
Publication of CN102254218A publication Critical patent/CN102254218A/zh
Application granted granted Critical
Publication of CN102254218B publication Critical patent/CN102254218B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Logic Circuits (AREA)
  • Programmable Controllers (AREA)

Abstract

本发明提供一种以ARM微处理器为控制核心、FPGA为计数处理的计数器装置,包括:ARM控制模块、存储器模块、FPGA计数器模块、双口RAM模块、SDRAM掉电保护模块、电源模块。ARM控制模块以ARM微处理器为控制核心,对各模块处理和控制;双口RAM模块分别与FPGA计数器模块和ARM控制模块连接,实现两模块的数据传输;FPGA计数器模块以计数器控制器为核心,完成增计数器和增/减计数器判断、计数处理及实时计数参数传输;电源模块提供工作电源,SDRAM掉电保护模块对计数动态参数掉电保护;本发明还提供一种实现计数器的方法;本发明计数操作不占用PLC用户程序执行时间,可实现不同类型和数量的计数器。

Description

ARM+FPGA组成的计数器装置及其实现方法
技术领域
本发明涉及一种计数器装置及其实现方法,特别涉及一种可编程控制器(PLC)的计数器装置及其实现方法。
背景技术
随着科学技术的不断发展,可编程控制器(以下简称PLC)作为一种专为工业环境应用而设计的电子系统,愈来愈广泛地被应用。在PLC的应用系统中,使用量较大的是计数周期大于PLC用户程序扫描周期的计数器,即普通计数器,这种普通计数器的分类方法常有两种,从停电是否保存计数值的角度来分类,分为保持型计数器和非保持型计数器;从计数方向的角度,分为增计数器和增/减可控计数器,增/减可控计数器是处于增计数还是处于减计数由指定的特殊寄存器状态来控制,计数器属于哪种类型则由事先设计好的计数器编号确定,每个计数器有一个软触头与该计数器编号对应,如果计数器的当前计数值与计数器设置值相等则计数器停止计数,计数器的软触头处于动合状态,直到对计数器进行复位,计数器的软触头恢复常态,计数器在其他状态下其软触头处于常态。
通常,上述计数器是通过如下方法来实现:PLC用户程序执行某一个计数器软元件输出指令时,首先根据输出指令给定的计数器编号判断是增计数器还是增/减可控计数器,对于增/减可控计数器需要判断是处于增计数状态还是减计数状态,依据计数器的受控情况还需进一步判断计数器是处于失电还是得电状态,如果处于得电状态,需要判断计数条件是否满足,如果计数条件不满足,PLC用户程序可以不对该计数器作任何操作,如果计数条件满足需要将该计数器的计数动态参数单元中的值进行加1或减1计算,然后与该计数器的设置值进行比较,如果计数动态值小于/大于设置值,设置已得电计数的标志,如果相等,则设置该计数器软触头单元状态为“1”,如果处于失电状态,清得电计数的标志;PLC用户程序在执行某一个计数器的复位指令时,需要进行以下操作:清该计数器得电计数的标志,清该计数器的软触头单元内容为“0”,以及清该计数器动态参数单元内容。
PLC执行计数器输出指令时,若计数器处于得电且计数条件满足,进行加1/减1操作之后与计数器计数的设置值相等时需要较多的操作,具体为:根据输出指令给定的计数器编号判断计数器类型的步骤需要一到二次;需要判断一次得电或失电的状态;如果是得电状态还需要判断是否满足计数条件,若满足计数条件需要加1一次/减1一次,需要判断一次是否等于设置值,如果计数动态值等于设置值,还需设置该计数器软触头单元状态为“1”;PLC完成执行输出命令的操作,需要判断四次/五次,加1/减1一次,设置位单元状态一次,共计需要操作八次/九次。操作最少次数的是继电器得电不满足计数的状态,只需判断二次/三次,增/减可控计数器的加1和减1操作采用补码,其计数动态参数值与计数设置值大小的比较应用补码进行比较,或将补码转换成原码再进行比较。
执行计数器复位指令时,清标志二次,清数据一次或清数据二次;计数器在各种运行状态下,其执行计数器指令操作步数不一样,在PLC用户程序中,计数器使用的数量越多,则PLC用户程序的执行周期时间变化越大,执行计数器输出指令占用时间也越长,导致影响PLC用户程序的执行速度,延长了PLC用户程序的执行周期。
发明内容
本发明的目的在于提供一种执行速度快、能实现对数量众多的计数器进行计数控制的ARM+FPGA组成的计数器装置,以克服上述已有技术的不足之处。
为实现上述目的,本发明所采用的技术方案为:
一种ARM+FPGA组成的计数器装置,是以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理,包括:ARM控制模块Ⅰ、FPGA计数器模块Ⅲ、存储器模块Ⅱ、SDRAM掉电保护模块Ⅵ、电源模块Ⅴ以及双口RAM模块Ⅳ;ARM控制模块Ⅰ分别与上述存储器模块Ⅱ、FPGA计数器模块Ⅲ、双口RAM模块Ⅳ、SDRAM掉电保护模块Ⅵ及电源模块Ⅴ连接,以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各个模块信息的处理和控制;存储器模块Ⅱ用于存储操作系统及系统程序的目标代码映像文件、执行用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;双口RAM模块Ⅳ分别与FPGA计数器模块Ⅲ和ARM控制模块Ⅰ连接,以实现ARM控制模块Ⅰ与FPGA计数器模块Ⅲ之间的数据传输;FPGA计数器模块Ⅲ用于判断计数器的类型,实施与计数设定值的比较及计数运算,通过对双口RAM模块Ⅳ的读写控制,将计数器的状态传送至ARM控制模块Ⅰ;SDRAM掉电保护模块Ⅵ与FPGA计数器模块Ⅲ连接,用于避免在电源切换过程中存储器内容的变化,并应用其中的电源为动态参数存储器供电;电源模块Ⅴ为上述ARM控制模块Ⅰ、存储器模块Ⅱ、FPGA计数器模块Ⅲ、SDRAM掉电保护模块Ⅵ及双口RAM模块Ⅳ提供变压电源。
由以上方案可见,本发明以嵌入式ARM微处理器为控制模块,FPGA为计数处理模块构成ARM+FPGA计数器装置,采用FPGA实现计数器的各种处理操作,无论计数器装置中的计数器数量多少与否,其占用嵌入式ARM微处理器执行用户程序的时间都非常少,因此,可以应用于开发可编程控制器以及大规模的计数器;同时,由于对计数器的操作,如:计数功能控制、计数器状态设置等,均由FPGA计数器模块Ⅲ完成,不占用PLC用户程序执行的时间,大大提高了计数器装置的反应速度;无论计数器处于何种运行状态,ARM控制模块Ⅰ对每个同类型的计数器所执行指令的操作次数是基本相同的,减少了执行有关计数器指令时对PLC用户程序执行周期变化的影响。
其进一步技术方案是:该ARM+FPGA组成的计数器装置中的SDRAM掉电保护模块Ⅵ包括相互连接的SDRAM计数器动态参数存储器和SDRAM掉电保护电路,该SDRAM掉电保护模块Ⅵ在电源切换过程中应用SDRAM掉电保护电路的电源为SDRAM计数器动态参数存储器供电,以避免SDRAM计数器动态参数存储器内容发生变化。 
由以上方案可见,由于计数器装置中的计数动态参数由SDRAM计数器动态参数存储器进行存储,计数操作由FPGA计数器模块Ⅲ处理,该FPGA计数器模块Ⅲ从双口RAM模块Ⅳ中接收ARM控制模块Ⅰ发出的控制处理指令以进行循环操作,因此,计数器的数量只受SDRAM计数器动态参数存储器、计数器软触头位单元和双口RAM模块Ⅳ中容量和地址线的限制,只要增加SDRAM计数器动态参数存储器、计数器软触头位单元和双口RAM模块Ⅳ中的存储器容量,以及增加地址线的根数,计数器的个数可以成倍数的增加,其计数器装置设置的计数器数量能够达到数百个乃至千余个,且不需要在ARM控制模块Ⅰ的方法中编制计数参数的处理过程,只是将每个计数器作为普通存储单元进行读写和判断操作,本发明适合需要数量众多计数器计数与计数控制的系统需求,以及对计数精度要求很高的系统,尤其适应于PLC控制系统。
其更进一步技术方案是: ARM控制模块Ⅰ包括嵌入式ARM微处理器、人机交互电路、控制电路、复位电路和JTAG调试接口电路;嵌入式ARM微处理器作为ARM控制模块Ⅰ的控制核心,分别与上述人机交互电路、控制电路、复位电路和JTAG调试接口电路连接,进行多任务管理和通信管理,以实现对上述各电路的信息处理和控制;人机交互电路用于执行系统的控制命令、控制参数的输入以及系统各种参数的人机界面控制;控制电路用于系统数据采集及控制驱动;复位电路为系统电路提供复位信号;JTAG调试接口电路提供调试接口,该接口与外接电路相连,以实现编程装置对ARM控制模块Ⅰ的软硬件调试。
由以上方案可见,ARM控制模块Ⅰ对于PLC用户程序使用的每个计数器,当程序执行某个计数器软元件输出指令时,首先由嵌入式ARM微处理器判断该计数器的类型、所处的工作状态,然后从双口RAM模块Ⅳ将该计数器参数存储单元中的内容读入ARM控制模块Ⅰ中并设置运行状态标志,再传输到双口RAM模块Ⅳ的该计数器参数存储单元中,PLC用户程序执行时,相当于将每个计数器只进行读写和判断操作;当PLC用户程序执行应用某个计数器软触头信息进行处理时,只需要从双口RAM模块Ⅳ中读取该计数器软触头的位存储单元内容,如此,大大提高了运行速度。
其更进一步技术方案是:FPGA计数器模块Ⅲ包括计数器控制器、计数器软触头位单元和FPGA内部总线;计数器控制器是FPGA计数器模块Ⅲ的控制核心,其通过FPGA内部总线分别与计数器软触头位单元、SDRAM掉电保护模块Ⅵ以及双口RAM模块Ⅳ连接,并通过双口RAM模块Ⅳ与ARM控制模块Ⅰ连接;计数器控制器从ARM控制模块Ⅰ获取计数器的运行状态、类型、参数信息、复位信息以及计数实时参数读取命令,根据上述计数器的运行状态、各类信息及参数进行判断并进行相应处理、并将计数器处理的结果状态传输给双口RAM模块Ⅳ;计数器软触头位单元模块为计数器软触头状态的存放空间,可实现字寻址和位寻址。
由以上方案可见,本发明采用FPGA进行计数器功能处理,计数器控制器从ARM控制模块Ⅰ获得计数器运行和计数设置参数的信息或复位信息,然后据此对计数器的运行实施计数控制,其结果再传输到双口RAM模块该计数器参数存储单元中,PLC用户程序执行时,相当于将每个计数器只进行读、写和判断操作;另一方面,计数器的计数运行操作、计数器软触头状态的设置由FPGA计数器模块完成,不占用PLC用户程序执行的时间,提高了装置的反应速度。
其更进一步技术方案是,存储器模块Ⅱ包括分别与ARM控制模块Ⅰ连接的Nor FLASH存储器、Nand FLASH存储器和SDRAM存储器;Nor FLASH存储器用于存储操作系统及系统程序的目标代码映像文件;Nand FLASH存储器用于存放执行用户程序;SDRAM存储器用于存放计数器装置的处理和通信信息,并为系统运行和通信数据处理提供空间。
由以上方案可见,采用Nor FLASH存储器、Nand FLASH存储器和SDRAM存储器分别存储代码映像文件、存放处理信息和提供处理空间,计数器装置在运行时只需要从相应的存储器中读数据或写数据,避免由于各种操作集中在某一存储器而造成的数据冲突情况,从而提高了计数器装置的运行速度。
本发明的另一目的是提供一种应用ARM+FPGA组成的计数器装置来实现数量众多的计数器的方法,该方法是以ARM控制模块Ⅰ中的嵌入式ARM微处理器为控制核心,FPGA计数器模块Ⅲ实现计数处理,应用双口RAM模块Ⅳ实现ARM控制模块Ⅰ和FPGA计数器模块Ⅲ之间的数据传输;首先由ARM控制模块Ⅰ中的嵌入式ARM微处理器进行初始化处理,然后ARM控制模块Ⅰ根据初始化处理的结果对相应的计数器进行控制操作,并通过双口RAM模块Ⅳ实现对FPGA计数器模块Ⅲ的控制,FPGA计数器模块Ⅲ根据ARM控制模块Ⅰ发出的控制命令对计数器进行相应的控制处理;存储器模块Ⅱ存储目标代码映像文件、处理信息以及为计数器装置数据的处理和通信提供空间;电源模块Ⅴ在整个处理过程中为上述ARM控制模块Ⅰ、存储器模块Ⅱ、FPGA计数器模块Ⅲ及双口RAM模块Ⅳ提供变压电源;具体包括初始化处理步骤、ARM控制步骤和FPGA控制步骤;初始化处理步骤是由ARM控制模块Ⅰ中的嵌入式ARM微处理器对双口RAM的每个存储单元清零,在每次启动PLC用户程序时将SDRAM计数器动态参数存储器中非保持型计数器的动态参数存储单元清零,并将计数器的参数、状态信息等传输到双口RAM模块Ⅳ;ARM控制步骤是由ARM控制模块Ⅰ根据上述初始化处理的结果对其中任一使用的计数器进行控制处理,并通过双口RAM模块Ⅳ实现对FPGA计数器模块Ⅲ的控制操作;FPGA控制步骤是由FPGA计数器模块Ⅲ根据ARM控制模块Ⅰ发出的控制命令进行计数器处理操作。
由以上方案可见,本发明中采用ARM控制模块Ⅰ根据PLC用户程序执行与计数器有关的指令来进行判断处理与数据传输,对于PLC用户程序使用的每个计数器,当程序执行某个计数器软元件输出或复位指令时,由ARM控制模块Ⅰ中的嵌入式ARM微处理器首先判断该计数器的工作状态,然后从双口RAM模块Ⅳ将该计数器参数存储单元中的内容读入ARM控制模块Ⅰ中,设置运行状态标志,再传输到双口RAM模块Ⅳ该计数器参数存储单元中,PLC用户程序执行时,相当于将每个计数器只进行判断和读写操作;计数器的计数处理过程不占用PLC用户程序执行的时间,大大提高了装置的运行速度;计数器装置能够按照ARM控制模块Ⅰ读取计数器动态参数的命令读取计数器的动态参数;同时,计数器装置增加SDRAM动态参数存储器和计数器软触头位单元和双口RAM模块Ⅳ的容量以及地址线的根数,还可增加计数器的数量;而且不需要在ARM的过程中编制计数运算和处理过程,只是将每个计数器作为普通存储单元进行读写和判断操作,适合需要数量众多计数器计数与计数控制的系统需求,以及对计数精度要求很高的系统,尤其适应于PLC控制系统。 
附图说明
图1是本发明之ARM+FPGA组成的计数器装置第一实施例的系统结构框图;
图2是本发明之ARM+FPGA组成的计数器装置第一实施例的电路结构框图;
图3是本发明之ARM+FPGA组成的计数器装置第一实施例的FPGA计数器模块的结构框图;
图4是本发明之ARM+FPGA组成的计数器装置第一实施例的计数器参数32位字长单元结构示意图;
图5是本发明之ARM+FPGA组成的计数器装置的双口RAM模块的存储区分配示意图;
图6是本发明之实现计数器装置的方法中ARM编译PLC用户程序对某一个计数器处理操作流程图;
图7是本发明之实现计数器装置的方法中ARM对某一个计数器处理操作流程图; 
图8是本发明之实现计数器装置的方法中计数器控制器对计数器控制的流程图; 
图9是本发明之实现计数器装置的方法中计数器控制器对增/减可控计数器控制的流程图;
图10是本发明之ARM+FPGA组成的计数器装置第二实施例的系统结构框图; 
图11是本发明之ARM+FPGA组成的计数器装置第二实施例的电路结构框图; 
图12是本发明之ARM+FPGA组成的计数器装置第二实施例的FPGA计数器结构示意图。
图中:
Ⅰ—ARM控制模块,Ⅱ—存储器模块,Ⅲ—FPGA计数器模块,Ⅳ—双口RAM模块,Ⅴ—电源模块,Ⅵ—SDRAM掉电保护模块;
11—嵌入式ARM微处理器,12—人机交互电路,13—控制电路,14—复位电路,15—JTAG调试接口电路;
21—Nor FLASH存储器,22—Nand FLASH存储器,23—SDRAM存储器;
31—计数器控制器,32—计数器软触头位单元; 
51—电压转换电路,52—外部电源;
61—SDRAM计数器动态参数存储器,62—SDRAM掉电保护电路;
其余编号意义参见说明书实施例。
下面结合实施例及其附图对本发明作进一步说明。 
具体实施方式
组成的计数器装置实施例一
参见图1,该计数器装置是以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理,包括ARM控制模块Ⅰ、FPGA计数器模块Ⅲ、存储器模块Ⅱ、电源模块Ⅴ、双口RAM模块Ⅳ及SDRAM掉电保护模块Ⅵ;ARM控制模块Ⅰ分别与上述存储器模块Ⅱ、FPGA计数器模块Ⅲ、双口RAM模块Ⅳ及电源模块Ⅴ连接,以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各个模块信息的处理和控制;存储器模块Ⅱ用于存储操作系统及系统程序的目标代码映像文件、执行用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;双口RAM模块Ⅳ分别与FPGA计数器模块Ⅲ和ARM控制模块Ⅰ连接,以实现ARM控制模块Ⅰ与FPGA计数器模块Ⅲ之间的数据传输;FPGA计数器模块Ⅲ用于判断计数器的类型,实施与计数设定值的比较及计数运算,通过对所述双口RAM模块Ⅳ的读写控制,将计数器的状态传送至ARM,该模块以计数器控制器31为核心,实现计数器的类型判断、增计数器的加1运算、增/减可控计数器的加1或减1、计数动态参数值与计数设置值的大小比较,增/减可控计数器的计数参数处理为补码运算,计数功能控制、计数器软触头位单元32的字寻址和位寻址读、写功能、SDRAM计数器动态参数存储器61的读、写功能,双口RAM模块Ⅳ的读、写功能;电源模块Ⅴ为上述ARM控制模块Ⅰ、存储器模块Ⅱ、FPGA计数器模块Ⅲ及双口RAM模块Ⅳ提供变压电源;SDRAM掉电保护模块Ⅵ与FPGA计数器模块Ⅲ连接,该SDRAM掉电保护模块Ⅵ包括相互连接的SDRAM计数器动态参数存储器和SDRAM掉电保护电路,SDRAM掉电保护模块Ⅵ应用SDRAM掉电保护电路的电源为SDRAM计数器动态参数存储器供电,以避免在电源切换过程中SDRAM计数器动态参数存储器内容发生变化。
其中,该计数器装置的具体结构为:
ARM控制模块Ⅰ包括嵌入式ARM微处理器11、人机交互电路12、控制电路13、复位电路14和JTAG调试接口电路15,参见图2,嵌入式ARM微处理器11作为控制核心,分别与人机交互电路12、控制电路13、复位电路14和JTAG调试接口电路15连接,进行多任务管理和通信管理,以实现对各组成电路的信息处理和控制;人机交互电路12完成系统的控制命令和控制参数的输入和系统各种参数的人机界面控制;控制电路13完成ARM控制模块Ⅰ的数据采集与控制驱动;复位电路14为系统电路提供复位信号;JTAG调试接口电路15提供调试接口与外接电路相连实现编程装置对ARM控制模块Ⅰ的硬件和软件的调试。嵌入式ARM微处理器11在对PLC用户程序的编译阶段,将每个增计数器的1个计数设置值和每个增/减可控计数器的2个补码计数设置值传送给双口RAM模块Ⅳ,检测计数器实时计数值读取指令,按照编译出现这类指令出现的先后顺序将该计数器的编号传输给双口RAM模块Ⅳ,计数器顺序编号包含在编译后的计数器实时计数值读取指令中;在PLC用户程序的执行过程中,执行计数器软元件处理指令时,ARM控制模块Ⅰ将该计数器的得电或失电、增/减可控计数器是增计数还是减计数的控制信息传输给双口RAM模块Ⅳ,执行计数器软元件复位指令时,ARM控制模块Ⅰ将该计数器的复位或不复位信息传输给双口RAM模块Ⅳ,执行读取计数器触头信息时,ARM控制模块Ⅰ直接从双口RAM模块Ⅳ中读取该计数器的触头状态信息,执行实时计数值读取指令时,ARM控制模块Ⅰ直接从双口RAM模块Ⅳ中读取该计数器的动态计数参数。
存储器模块Ⅱ包括分别与ARM控制模块Ⅰ连接的Nor FLASH存储器21、Nand FLASH存储器22和SDRAM存储器23,其结构示意图见图2;Nor FLASH存储器21、Nand FLASH存储器22和SDRAM存储器23分别通过系统数据总线、地址总线和控制总线与ARM控制模块Ⅰ的嵌入式ARM微处理器11连接,实现ARM微处理器11对各个存储器的操作控制,Nor FLASH存储器21用于存储操作系统及系统程序的目标代码映像文件,Nand FLASH存储器22用于存放执行用户程序,SDRAM存储器23用于存放计数器装置的处理和通信信息,并为系统运行和通信数据处理提供空间。
双口RAM模块Ⅳ通过ARM控制模块Ⅰ的一组数据总线X1、地址总线Z1和控制总线Y1与ARM控制模块Ⅰ的嵌入式ARM微处理器11连接,通过FPGA内部总线的数据总线X2、地址总线Z2和控制总线Y2与FPGA计数器模块Ⅲ连接;双口RAM模块Ⅳ是ARM控制模块Ⅰ与FPGA计数器模块Ⅲ之间数据传输的桥梁,用户能够实现ARM控制模块Ⅰ和FPGA计数器模块Ⅲ同时对双口RAM模块Ⅳ进行读写操作;图5是双口RAM模块Ⅳ中的存储器结构示意图。
SDRAM掉电保护模块Ⅵ包括SDRAM计数器动态参数存储器61和SDRAM掉电保护电路62,SDRAM计数器动态参数存储器61通过FPGA内部总线与FPGA计数器模块Ⅲ连接, SDRAM掉电保护电路62在系统电源失电瞬间使SDRAM计数器动态参数存储器61的片选端为高电平,避免在电源切换过程中SDRAM计数器动态参数存储器61的内容发生变化,并将SDRAM掉电保护电路62的电源为SDRAM计数器动态参数存储器61供电;在计数器装置复位和PLC用户程序重新启动运行时,ARM控制模块Ⅰ将对非保持型计数器的FPGA的SDRAM计数器动态参数存储器61中的存储单元清零。
FPGA计数器模块Ⅲ包括计数器控制器31、计数器软触头位单元32和FPGA内部总线,其具体电路结构参见图3,计数器控制器31是FPGA计数器模块Ⅲ的控制核心,计数器控制器31通过FPGA内部总线与计数器软触头位单元32、SDRAM掉电保护模块Ⅵ以及双口RAM模块Ⅳ连接,并通过双口RAM模块Ⅳ与ARM控制模块Ⅰ连接。
其中:
FPGA内部总线由32位数据总线X2,地址总线Z2及控制总线Y2组成,控制总线Y2包括计数器的读、写、模块片选控制,双口RAM模块Ⅳ与FPGA内部总线相连接,双口RAM模块Ⅳ的模块片选独立设置与FPGA计数器控制模块Ⅲ连接,计数器软触头位单元32和SDRAM掉电保护模块Ⅵ都是10根地址线与计数器控制器31连接,控制总线的读、写和模块片选线与计数器控制器31、计数器软触头位单元32、SDRAM掉电保护模块Ⅵ和双口RAM模块Ⅳ连接。
计数器软触头位单元32是32位字长存储单元组成的计数器软触头存储器,参见图4,该单元占用2个模块地址,1个是32位字单元寻址的模块地址,另1个是软触头位单元的位模块寻址,计数器软触头位单元模块32可以实现字寻址和位寻址的功能。
计数器控制器31通过双口RAM模块Ⅳ从ARM控制模块Ⅰ获得计数器运行状态、类型及参数信息、复位信息、以及计数实时参数读取命令;计数器控制器31处理计数器的结果状态也传输给双口RAM模块Ⅳ,计数器控制器31在工作时钟脉冲的作用下,计数器控制器31依据计数器这些状态进行判断,依据判断结果进行处理,如果某个增计数器处于未被使用或已完成一次计数操作并继续处于得电状态,计数器控制器31对该增计数器不作任何处理;如果处于失电状态,设置该增计数器D27的位值为“0”,为增计数器软线圈由失电转化为得电时作好计数的准备;如果处于复位状态,复位该增计数器在计数器软触头位单元32中的位单元为“0”,清SDRAM计数器动态参数存储器61中该增计数器的D30、D27和D26~D0单元内容;如果处于计数状态,计数器控制器31对SDRAM计数器动态参数存储器61的该增计数器存储单元内容与双口RAM模块Ⅳ中的该增计数器的计数设置参数进行比较判断,如果SDRAM计数器动态参数存储器61中该计数器的计数参数等于或大于双口RAM模块Ⅳ中的该增计数器的计数设置参数时,置位该增计数器在计数器软触头位单元32中的位单元为“1”,设置计数工作标志D27为“1”;如果小于,SDRAM计数器动态参数存储器61中该增计数器的计数参数进行加1操作,设置计数工作标志D27为“1”;如果该计数器为失电状态,且非复位状态,设置计数工作标志D27为“0”;如果判断计数器为增/减计数器型,其判断处理过程与增计数器的判断处理过程基本相同,不同之处在于每个增/减计数器有两个计数设置值,一个是增计数设置值,一个是减计数设置值,对应有增计数动态参数和减计数动态参数,这些值都是用补码表示,其判断比较和计数也都是补码运算;对2种类型计数器的读取判断处理操作是一个一个计数器循环进行,每循环操作一次,将计数器软触头位单元32的状态传输到双口RAM模块Ⅳ中,根据双口RAM模块Ⅳ需要传输计数器实时计数值的计数器编号的顺序将SDRAM计数器动态参数存储器61的实时计数参数传输给双口RAM模块Ⅳ的计数器实时计数值存储区;
计数器控制器处理计数器的结果状态也传输给双口RAM模块Ⅳ;
计数器控制器在工作时钟脉冲的作用下,依据计数器的状态进行判断,依据判断结果进行处理:如果某个增计数器处于未被使用或已完成一次计数操作并继续处于得电状态,计数器控制器对该增计数器不作任何处理;如果处于失电状态,设置该增计数器D27的位值为“0”,为增计数器软线圈由失电转化为得电时作好计数的准备;如果处于复位状态,复位该增计数器在计数器软触头位单元中的位单元为“0”,清SDRAM计数器动态参数存储器中该增计数器的D30、D27和D26~D0单元内容;如果处于计数状态,计数器控制器对SDRAM计数器动态参数存储器的该增计数器存储单元内容与双口RAM模块Ⅳ中的该增计数器的计数设置参数进行比较判断,如果SDRAM计数器动态参数存储器中该增计数器的计数参数等于或大于双口RAM模块Ⅳ中的该增计数器的计数设置参数时,置位该增计数器在计数器软触头位单元中的位单元为“1”,设置计数工作标志D27为“1”;如果小于,SDRAM计数器动态参数存储器中该增计数器的计数参数进行加1操作,设置计数工作标志D27为“1”;如果该增计数器为失电状态,且非复位状态,设置计数工作标志D27为“0”;如果判断计数器为增/减计数器型,其判断处理过程与增计数器的判断处理过程基本相同,不同之处在于每个增/减计数器有两个计数设置值,一个是增计数设置值,一个是减计数设置值,对应有增计数动态参数和减计数动态参数,这些值都是用补码表示,其判断比较和计数也都是补码运算;
对2种类型计数器的读取判断处理操作是一个一个计数器循环进行,每循环操作一次,将计数器软触头位单元的状态传输到双口RAM模块Ⅳ中,根据双口RAM模块Ⅳ需要传输计数器实时计数值的计数器编号的顺序将SDRAM计数器动态参数存储器的实时计数参数传输给双口RAM模块Ⅳ的计数器实时计数值存储区;根据双口RAM模块Ⅳ需要传输计数器实时计数值的计数器编号的顺序将SDRAM计数器动态参数存储器61的实时计数参数传输给双口RAM模块Ⅳ的计数器实时计数值存储区;
由上可见,由于计数器装置中的计数动态参数由SDRAM计数器动态参数存储器进行存储,计数操作由FPGA计数器模块Ⅲ处理,该FPGA计数器模块Ⅲ从双口RAM模块Ⅳ中接收ARM控制模块Ⅰ发出的控制处理指令进行循环操作,(处理计数器输出指令、复位指令的结果及FPGA计数器控制器处理计数的结果状态进行读取、判断,依据判断结果进行处理,或设置计数器软触头状态,或读出SDRAM计数器动态参数存储器中的该计数器动态参数进行加1/减1计数,判断和处理,其中增/减可控计数器对计数参数的处理为补码运算,或不需要作任何处理,这是循环操作处理过程;)因此,计数器的数量只受SDRAM计数器动态参数存储器、计数器软触头位单元和双口RAM容量和地址线的限制,只要增加SDRAM计数器动态参数存储器、计数器软触头位单元和双口RAM的容量,以及地址线的根数,计数器的个数可以成倍数的增加,其计数器装置设置的计数器数量能够达到数百个,乃至千余个,而且不需要在ARM控制模块的程序中编制计数参数的处理程序,只是将每个计数器作为普通存储单元进行读写和判断操作,适合需要数量众多计数器计数与计数控制的系统需求,以及对计数精度要求很高的系统,尤其适应于PLC控制系统。而且,ARM控制模块执行计数器输出指令时,只需要判断计数器是处于得电还是失电状态,并将其状态传输给双口RAM;执行计数器复位指令时,只需要判断计数器是复位还是不复位,并将其状态传输给双口RAM;执行应用计数器软触头指令时,从双口RAM中读取该计数器的软触头状态;增计数器的加1运算、增/减可控计数器的加1或减1、计数动态参数值与计数设置值的大小比较,增/减可控计数器的计数参数处理为补码运算,计数功能控制、计数器软触头位单元状态的设置均由FPGA计数器模块完成,不占用PLC用户程序执行的时间;大大提高了计数器装置的反应速度;无论计数器处于何种运行状态,本计数器装置中ARM控制模块执行每个增计数器输出指令的操作次数相同,执行每个增/减可控计数器输出指令的操作次数相同,减少了执行有关计数器指令时对PLC用户程序执行周期变化的影响。
组成的计数器装置实施例二
参见图10、图11、图12,本实施例的计数器装置结构与实施例一中的基本类似,不同之处在于:实施例一中的双口RAM模块Ⅳ与FPGA计数器模块Ⅲ分别独立设置,而本实施例中的双口RAM模块Ⅳ是嵌入FPGA计数器模块Ⅲ中,以构成带双口RAM模块的FPGA计数器模块Ⅲ’,参见图12,本实施例之ARM+FPGA组成的计数器装置,以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理,包括:ARM控制模块Ⅰ、SDRAM掉电保护模块Ⅵ,存储器模块Ⅱ、FPGA计数器模块Ⅲ’、电源模块Ⅴ,ARM控制模块Ⅰ以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各模块及其信息的处理和控制;存储器模块Ⅱ用于存储操作系统及系统程序的目标代码映像文件、执行用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;FPGA计数器模块Ⅲ’包括嵌入的双口RAM模块Ⅳ和FPGA计数器模块Ⅲ,FPGA计数器模块Ⅲ以计数器控制器31为核心,实现计数器的类型判断、增计数器的加1运算、增/减可控计数器的加1和减1、计数动态参数值与计数设置值的大小比较,增/减可控计数器的计数参数处理为补码运算,计数功能控制、计数器软触头位单元32的字寻址和位寻址读、写功能、SDRAM计数器动态参数存储器61的读、写功能,双口RAM模块Ⅳ的读、写功能;双口RAM模块Ⅳ分别与FPGA计数器模块Ⅲ和ARM控制模块Ⅰ连接,以实现ARM控制模块Ⅰ与FPGA计数器模块Ⅲ之间的数据传输;电源模块Ⅴ为ARM控制模块Ⅰ、存储器模块Ⅱ、FPGA计数器模块Ⅲ’、双口RAM模块Ⅳ及SDRAM掉电保护模块Ⅵ提供变压后的电源;SDRAM掉电保护模块Ⅵ与FPGA计数器模块Ⅲ’连接,SDRAM掉电保护模块Ⅵ包括相互连接的SDRAM计数器动态参数存储器61和SDRAM掉电保护电路62,该SDRAM掉电保护模块Ⅵ可避免在电源切换过程中SDRAM计数器动态参数存储器61的内容发生变化,并将SDRAM掉电保护电62的电源为SDRAM计数器动态参数存储器61供电。
本实施例的工作原理与实施例一相同,此处不再赘述。
ARM+FPGA组成的计数器装置实施例一是本发明的最佳实施例之一,作为本发明之ARM+FPGA组成的计数器装置实施例一和实施例二的一种变换,也可以在该计数器装置中不设置SDRAM掉电保护电路62,同样也可实现本发明的目的。
作为本发明之ARM+FPGA组成的计数器装置实施例一和实施例二的另一种变换,该计数器装置中还可以不设置SDRAM掉电保护电路62,SDRAM计数器动态参数存储器61的功能由FPGA计数器模块Ⅲ来实现,该变换同样也可实现本发明的目的。 
实现计数器的方法实施例
应用上述ARM+FPGA组成的计数器装置来实现计数器的方法, 该方法是以ARM控制模块Ⅰ中的嵌入式ARM微处理器11为控制核心,FPGA计数器模块Ⅲ实现计数处理,应用双口RAM模块Ⅳ实现ARM控制模块Ⅰ和FPGA计数器模块Ⅲ之间的数据传输;首先由ARM控制模块Ⅰ中的嵌入式ARM微处理器11进行初始化处理,然后ARM控制模块Ⅰ根据初始化处理的结果对相应的计数器进行控制操作,并通过双口RAM模块Ⅳ实现对FPGA计数器模块Ⅲ的控制,FPGA计数器模块Ⅲ根据ARM控制模块Ⅰ发出的控制命令对计数器进行相应的控制处理;存储器模块Ⅱ存储目标代码映像文件、处理信息以及为计数器装置数据的处理和通信提供空间;电源模块Ⅴ在整个处理过程中为上述ARM控制模块Ⅰ、存储器模块Ⅱ、FPGA计数器模块Ⅲ及双口RAM模块Ⅳ提供变压电源;具体包括如下步骤:
初始化处理步骤:ARM控制模块Ⅰ中的嵌入式ARM微处理器11对双口RAM模块Ⅳ的每个存储单元清零,在每次启动PLC用户程序时将SDRAM计数器动态参数存储器61中非保持型计数器的动态参数存储单元清零,并将计数器的参数、状态信息等传输到双口RAM模块Ⅳ;
ARM控制步骤:ARM控制模块Ⅰ根据上述初始化处理的结果对其中任一计数器进行控制处理,并通过双口RAM模块Ⅳ实现对FPGA计数器模块Ⅲ的控制操作;
FPGA控制步骤:FPGA计数器模块Ⅲ根据ARM控制模块Ⅰ从双口RAM模块Ⅳ发出的控制命令,进行计数器处理操作。
其中,初始化处理的具体过程为: 
在ARM控制模块Ⅰ中的嵌入式ARM微处理器11初始化处理过程中,对双口RAM模块Ⅳ中的每个存储单元清零;在每次启动PLC用户程序时将SDRAM计数器61动态参数存储器中非保持型计数器的动态参数存储单元清零;嵌入式ARM微处理器11在编译过程中,将所使用每个计数器设置的计数参数及使用状态信息传输到双口RAM模块Ⅳ中,嵌入式ARM微处理器11执行用户过程中某一个计数器的输出、复位指令时,将该计数器的运行状态信息传输到双口RAM模块Ⅳ中,执行检测计数器实时计数值读取指令时,按照该指令出现顺序将对应的计数器编号传输给双口RAM模块Ⅳ,顺序编号包含在编译后的计数器实时计数值读取指令中;嵌入式ARM微处理器11在执行计数器指令时,将该计数器的运行状态信息传输到双口RAM模块Ⅳ中,状态信息和参数包括:D31、D29、D28,D26~D0,逻辑结构示意图参见图4、图5,其设置值参见如下描述:
D31:使用标志位,计数器在用户程序中被使用,设置为“1”,否则为“0”;
D30:计数器软元件得电失电标志位,得电设置为“1”,失电设置为“0”; 
D29:增/减可控计数器的增/减控制位,增操作设置为“1”,减操作设置为“0”; 
D28:计数器复位位,非复位状态设置为“1”,复位状态设置为“0”;
D26~D0:计数器的计数参数设置值。
FPGA计数器模块Ⅲ在初始化过程中,对FPGA的SDRAM动态参数存储器中的非保持型计数器的所有存储单元清0,ARM控制模块Ⅰ在初始化过程中对双口RAM模块Ⅳ的所有存储单元清0。
参见图6,ARM控制模块Ⅰ对计数器处理操作的具体步骤如下: 
s101:某一个计数器软元件输出指令;
s102:判断是否增计数器?如果是,则进入步骤s104,否则进入步骤s103;
s103:根据该计数器软元件的编号将2个计数设置值传输给双口RAM模块Ⅳ中存储该计数器参数相邻的2个存储单元,进入步骤s105;
s104:根据该计数器软元件的编号将计数设置值传输给双口RAM模块Ⅳ中存储该计数器参数的存储单元;
s105:ARM控制模块Ⅰ继续按顺序编译其他指令;
s106:该计数器实时计数值读取指令,按照编译该指令出现的先后顺序将该计数器的编号传输给双口RAM模块Ⅳ;
s107:ARM控制模块Ⅰ继续按顺序编译其他指令。
ARM控制模块Ⅰ对FPGA计数器模块Ⅲ控制的流程框图参见图7,图7是ARM控制模块Ⅰ对某一个计数器处理操作流程图,对于其他计数器的处理流程也与此相同,图7中执行计数器软元件输出指令、计数器复位指令、计数器实时计数值读取指令和应用计数器触头的指令在程序中出现的位置是根据用户的编制确定,用户可以根据需求编制不同顺序的处理流程,不需要受到图7中顺序的制约,本实施例中的具体步骤如下:
s201:执行某一个计数器软元件输出指令;
s202:判断是否属于增计数器?如果是,进入步骤s205,否则,进入步骤s203;
s203:判断该计数器是否处于增计数操作状态?如果不是处于增计数操作状态,则进入步骤s204,否则进入步骤s205;
s204:设置标志位D29为“0”,进入步骤s206;
s205:设置标志位D29为“1”;
s206:判断计数器软元件是否得电?如果软元件得电,则进入步骤s207,否则进入步骤s208;
s207:设置标志位D31~D30为“11”,进入步骤s209;
s208:设置标志位D31~D30为“10”;
s209:将D31、D30、D29和D28的信息发送到所述双口RAM模块Ⅳ;
s210:ARM控制模块Ⅰ继续按顺序编译其他指令;
s211:判断计数器是否满足复位条件?如果满足,进入步骤s212,否则,进入步骤s213;
s212:复位计数器,设置标志位D28为“0”,进入步骤s214;
s213:设置标志位D28为“1”;
s214:将D28的信息发送到所述双口RAM模块Ⅳ;
s215:ARM控制模块Ⅰ继续按顺序编译其他指令;
s216:从双口RAM模块Ⅳ的触头存储区读入上述过程中所需的该计数器触头信息;
s217:ARM控制模块Ⅰ继续按顺序编译其他指令;
s218:判断是否需要读取计数器实时计数值?如果需要,则进入步骤s219,否则,进入步骤s220;
s219:从双口RAM模块Ⅳ中的计数器实时计数值存储区读入该计数器的实时计数值;
s220:ARM控制模块Ⅰ继续按顺序编译其他指令。
参见图8,FPGA计数器模块Ⅲ控制的具体步骤为: 
s301:清计数器单元地址计数器和溢出位标志TF;
s302:从双口RAM模块Ⅳ读取计数器32位字长存储单元的内容,即读出32位字长的计数器信息;
s303:根据计数器单元地址计数器的值判断是否是增计数器,如果是,则进入步骤s304,否则进入图9中所描述的增/减可控计数器的计数处理过程;
s304:获得并判断D31、D30、D29、D28和D27的位值,若D31、D30、D29、D28和D27的位值为“0××××”或“11×11”,则进入步骤s313,若D31、D30、D29、D28和D27的位值为“10×1×”,则进入步骤s305,若D31、D30、D29、D28和D27的位值为“1××0×”,则进入步骤s306,若D31、D30、D29、D28和D27的位值为“11×10” 则进入步骤s307;D31、D30、D29、D28和D27的位值为“0××××”,则说明计数器处于未使用状态,D31、D30、D29、D28和D27的位值为“11×11”,则说明计数器此次不计数;D31、D30、D29、D28和D27的位值为“10×1×”说明计数器失电不计数,D31、D30、D29、D28和D27的位值为“1××0×”说明计数器处于复位状态,D31、D30、D29、D28和D27的位值为“11×10”说明计数器得电计一次数;
s305:设置该计数器D27的位值为“0”,进入步骤s313,此步骤是为计数器软线圈由失电转化为得电时作好计数的准备;
s306:设置该计数器的触头位单元为“0”并进入步骤s308;
s307:判断SDRAM计数器动态参数存储器中,该计数器的D26~D0是否等于或大于双口RAM模块Ⅳ中该计数器的D26~D0的内容,如果是,则进入步骤s311,否则,进入步骤s310;
s308:将该计数器的D30和D27的位值设置为“00”;
s309:将SDRAM计数器动态参数存储器中该计数器的D26~D0设置为“0”,进入步骤s313;
s310:将SDRAM计数器动态参数存储器中该计数器的D26~D0分别+1后,将结果返回到SDRAM计数器动态参数存储器中该计数器的D26~D0,进入步骤s312;
s311:该计数器的触头位单元设置为“1”;
s312:将该计数器D27的位值设置为“1”,因为该计数器软线圈继续得电期间不需要再计数;
s313:计数器单元地址计数器+1;
s314:判断TF是否为1?如果是,则进入步骤s315,否则,进入步骤s302;TF为计数器单元地址计数器溢出标志位; 
s315:循环将每个计数器的触头位单元内容传输给双口RAM触头存储单元;
s316:循环将SDRAM计数器动态参数存储器中各计数器D27的位值设置值传输给双口RAM模块Ⅳ中各个计数器的D27位单元;
s317:按照需传输计数器实时计数值的计数器编号顺序将SDRAM计数器动态参数存储器中的实时计数参数传输给双口RAM模块Ⅳ中的计数器实时计数值存储区,然后返回步骤s301。
FPGA计数器模块Ⅲ控制处理中,所述增/减可控计数器的计数处理的具体步骤为: 
s401:判断该增/减可控计数器的D31、D30、D29、D28和D27的位值,若D31、D30、D29、D28和D27的位值为“0××××”或“11×11”,则进入步骤s413,若D31、D30、D29、D28和D27的位值为“10×1×”则进入步骤s402,若D31、D30、D29、D28和D27的位值为“1××0×”,则进入步骤s403,若D31、D30、D29、D28和D27的位值为“11110”,则进入步骤s404;若D31、D30、D29、D28和D27的位值为“11010”则进入步骤s405;D31、D30、D29、D28和D27的位值为“0××××”则说明该增/减可控计数器处于未使用状态,D31、D30、D29、D28和D27的位值为“11×11”则说明该增/减可控计数器处于此次不计数状态;复位状态,D31、D30、D29、D28和D27的位值为“10×1×”则说明该增/减可控计数器处于失电不计数,D31、D30、D29、D28和D27的位值为“1××0×”说明该增/减可控计数器处于复位状态;D31、D30、D29、D28和D27的位值为“11110”说明该增/减可控计数器为增计数操作状态,得电计一次数;D31、D30、D29、D28和D27的位值为“11010”说明该增/减可控计数器为减计数操作状态,得电计一次数;
s402:设置该增/减可控计数器的2个计数存储单元D27的位值为“0”,为该增/减可控计数器软线圈由失电转化为得电时作好计数的准备,并进入步骤s413;
s403:该增/减可控计数器的触头位单元设置为“0”,并进入步骤s406;
s404:判断SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的D26~D0是否等于或大于双口RAM模块Ⅳ中该增/减可控计数器的第一个参数单元中的D26~D0的内容,如果是,则进入步骤s409,否则,进入步骤s408; 
s405:判断SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的D26~D0的位值是否等于或小于双口RAM模块Ⅳ中该增/减可控计数器的第二个参数单元中的D26~D0的内容,如果是,则进入步骤s411,否则,进入步骤s410; 
s406:设置SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D30、D27的位值为“00”;
s407:SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0清零,并进入步骤s413;
s408:SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0补+1操作后,将结果返回到SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0,并进入步骤s412; 
s409:将该增/减可控计数器的触头位单元设置为“1”,并进入步骤s412;
s410:SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0补+(-1)补操作后,将结果返回到SDRAM计数器动态参数存储器中该增/减可控计数器的第二个参数单元中的D26~D0,并进入步骤s412;
s411:将该增/减可控计数器的触头位单元设置为“1”;
s412:设置SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中D27的位值为“1”,此步骤是使得该增/减可控计数器软线圈继续得电时不再计数;
s413:计数器单元地址计数器+2;
s414:进入FPGA计数器模块Ⅲ控制的s314步骤。
增/减可控计数器的2个计数设置的参数用补码的方式存储,可以理解为在编辑该过程时,已将计数器设置的2个参数化成了补码表示。

Claims (12)

1.一种ARM+FPGA组成的计数器装置,其特征在于:
该计数器装置是以嵌入式ARM微处理器为控制核心、以FPGA进行计数处理,包括:ARM控制模块(Ⅰ)、存储器模块(Ⅱ)、FPGA计数器模块(Ⅲ)、SDRAM掉电保护模块(Ⅵ)、电源模块(Ⅴ)以及双口RAM模块(Ⅳ);
所述ARM控制模块(Ⅰ)分别与上述存储器模块(Ⅱ)、FPGA计数器模块(Ⅲ)、双口RAM模块(Ⅳ)、SDRAM掉电保护模块(Ⅵ)及电源模块(Ⅴ)连接,以嵌入式ARM微处理器为控制核心,构建嵌入式实时操作系统,进行多任务管理和通信管理,实现对装置中各个模块信息的处理和控制;
所述存储器模块(Ⅱ)用于存储操作系统及系统程序的目标代码映像文件、用户程序的处理信息、以及为计数器装置数据的处理和通信提供空间;
所述双口RAM模块(Ⅳ)分别与所述FPGA计数器模块(Ⅲ)和所述ARM控制模块(Ⅰ)连接,以实现所述ARM控制模块(Ⅰ)与所述FPGA计数器模块(Ⅲ)之间的数据传输;
所述FPGA计数器模块(Ⅲ)用于判断计数器的类型,实施与计数设定值的比较及计数运算,通过对所述双口RAM模块(Ⅳ)的读写控制,将计数器的状态传送至所述ARM控制模块(Ⅰ);
所述SDRAM掉电保护模块(Ⅵ)与所述FPGA计数器模块(Ⅲ)连接,用于避免在电源切换过程中存储器内容的变化,并应用其中的电源为动态参数存储器供电;
所述电源模块(Ⅴ)为上述ARM控制模块(Ⅰ)、存储器模块(Ⅱ)、FPGA计数器模块(Ⅲ)、SDRAM掉电保护模块(Ⅵ)及双口RAM模块(Ⅳ)提供变压电源;
所述SDRAM掉电保护模块(Ⅵ)包括相互连接的SDRAM计数器动态参数存储器和SDRAM掉电保护电路,该SDRAM掉电保护模块(Ⅵ)在电源切换过程中应用所述SDRAM掉电保护电路的电源为所述SDRAM计数器动态参数存储器供电,以避免所述SDRAM计数器动态参数存储器内容发生变化。
2.如权利要求1所述一种ARM+FPGA组成的计数器装置,其特征在于:
所述ARM控制模块(Ⅰ)包括嵌入式ARM微处理器、人机交互电路、控制电路、复位电路和JTAG调试接口电路;
所述嵌入式ARM微处理器作为ARM控制模块(Ⅰ)的控制核心,分别与上述人机交互电路、控制电路、复位电路和JTAG调试接口电路连接,进行多任务管理和通信管理,以实现对上述各电路的信息处理和控制;
人机交互电路用于执行系统的控制命令、控制参数的输入以及系统各种参数的人机界面控制;
控制电路用于系统数据采集及控制驱动; 
复位电路为系统电路提供复位信号;
JTAG调试接口电路提供调试接口,该接口与外接电路相连,以实现编程装置对所述ARM控制模块(Ⅰ)的软硬件调试。
3.如权利要求1所述一种ARM+FPGA组成的计数器装置,其特征在于:
所述FPGA计数器模块(Ⅲ)包括计数器控制器、计数器软触头位单元和FPGA内部总线;所述计数器控制器是所述FPGA计数器模块(Ⅲ)的控制核心,其通过所述FPGA内部总线分别与所述计数器软触头位单元、所述SDRAM掉电保护模块(Ⅵ)以及所述双口RAM模块(Ⅳ)连接,并通过所述双口RAM模块(Ⅳ)与所述ARM控制模块(Ⅰ)连接;
所述计数器控制器从所述ARM控制模块(Ⅰ)获取计数器的运行状态、类型、参数信息、复位信息以及计数实时参数读取命令,根据上述计数器的运行状态、各类信息及参数进行判断并进行相应处理、并将计数器处理的结果状态传输给所述双口RAM模块(Ⅳ);
所述计数器软触头位单元模块为计数器软触头状态的存放空间,可实现字寻址和位寻址。
4.如权利要求1所述一种ARM+FPGA组成的计数器装置,其特征在于:
所述存储器模块(Ⅱ)包括分别与所述ARM控制模块(Ⅰ)连接的Nor FLASH存储器、Nand FLASH存储器和SDRAM存储器; 
所述Nor FLASH存储器用于存储操作系统及系统程序的目标代码映像文件;
所述Nand FLASH存储器用于存放执行用户程序;
所述SDRAM存储器用于存放计数器装置的处理和通信信息,并为系统运行和通信数据处理提供空间。
5.如权利要求1~4中任意一项所述一种ARM+FPGA组成的计数器装置,其特征在于:
所述FPGA计数器模块(Ⅲ)与所述双口RAM模块(Ⅳ)分别独立设置。
6.如权利要求1~4中任意一项所述一种ARM+FPGA组成的计数器装置,其特征在于:
所述双口RAM模块(Ⅳ)嵌入所述FPGA计数器模块(Ⅲ)中,构成带双口RAM模块(Ⅳ)的FPGA计数器模块(Ⅲ’)。
7.应用如权利要求1~4中任意一项所述ARM+FPGA组成的计数器装置实现计数器的方法,其特征在于:
该方法是以所述ARM控制模块(Ⅰ)中的嵌入式ARM微处理器为控制核心,所述FPGA计数器模块(Ⅲ)实现计数处理,应用所述双口RAM模块(Ⅳ)实现所述ARM控制模块(Ⅰ)和所述FPGA计数器模块(Ⅲ)之间的数据传输;首先由所述ARM控制模块(Ⅰ)中的嵌入式ARM微处理器进行初始化处理,然后所述ARM控制模块(Ⅰ)根据所述初始化处理的结果对相应的计数器进行控制操作,并通过所述双口RAM模块(Ⅳ)实现对所述FPGA计数器模块(Ⅲ)的控制,所述FPGA计数器模块(Ⅲ)根据所述ARM控制模块(Ⅰ)发出的控制命令对计数器进行相应的控制处理;所述存储器模块(Ⅱ)存储目标代码映像文件、处理信息以及为计数器装置数据的处理和通信提供空间;所述SDRAM掉电保护模块(Ⅵ)在电源切换过程中应用其中的电源为动态参数存储器供电;所述电源模块(Ⅴ)在整个处理过程中为上述ARM控制模块(Ⅰ)、存储器模块(Ⅱ)、FPGA计数器模块(Ⅲ)、SDRAM掉电保护模块(Ⅵ)及双口RAM模块(Ⅳ)提供变压电源;具体包括如下步骤:
初始化处理步骤:所述嵌入式ARM微处理器对双口RAM的每个存储单元清零,在每次启动PLC用户程序时将SDRAM计数器动态参数存储器中非保持型计数器的动态参数存储单元清零,并将计数器的参数、状态信息等传输到所述双口RAM模块(Ⅳ); 
ARM控制步骤:所述ARM控制模块(Ⅰ)根据上述初始化处理的结果对其中任一计数器进行控制处理,并通过所述双口RAM模块(Ⅳ)实现对所述FPGA计数器模块(Ⅲ)的控制操作;
FPGA控制步骤:所述FPGA计数器模块(Ⅲ)根据所述ARM控制模块(Ⅰ)发出的控制命令,进行计数器处理操作。
8.如权利要求7所述实现计数器的方法,其特征在于:
所述初始化处理的具体过程为:
所述ARM控制模块(Ⅰ)在编译过程中,将所使用每个计数器设置的计数参数及使用状态信息传输到所述双口RAM模块(Ⅳ)中,并检测计数器实时计数值读取指令,按照该指令出现顺序将对应的计数器编号传输给所述双口RAM模块(Ⅳ);
所述ARM控制模块(Ⅰ)在执行计数器指令时,将该计数器的运行状态信息传输到所述双口RAM模块(Ⅳ)中。
9.如权利要求7所述实现计数器的方法,其特征在于:
所述ARM控制模块(Ⅰ)对计数器处理操作的具体步骤为: 
s101:某一个计数器软元件输出指令;
s102:判断是否增计数器?如果是,则进入步骤s104,否则进入步骤s103;
s103:根据该计数器软元件的编号将2个计数设置值传输给所述双口RAM模块(Ⅳ)中存储该计数器参数相邻的2个存储单元,进入步骤s105;
s104:根据该计数器软元件的编号将计数设置值传输给所述双口RAM模块(Ⅳ)中存储该计数器参数的存储单元;
s105:ARM控制模块(Ⅰ)继续按顺序编译其他指令;
s106:该计数器实时计数值读取指令,按照编译该指令出现的先后顺序将该计数器的编号传输给所述双口RAM模块(Ⅳ);
s107:ARM控制模块(Ⅰ)继续按顺序编译其他指令。
10.如权利要求7所述实现计数器的方法,其特征在于:
所述ARM控制模块(Ⅰ)对FPGA计数器模块(Ⅲ)控制的具体步骤为:
s201:执行某一个计数器软元件输出指令;
s202:判断是否属于增计数器?如果是,进入步骤s205,否则,进入步骤s203;
s203:判断该计数器是否处于增计数操作状态?如果不是处于增计数操作状态,则进入步骤s204,否则进入步骤s205;
s204:设置标志位D29为“0”,进入步骤s206;
s205:设置标志位D29为“1”;
s206:判断计数器软元件是否得电?如果软元件得电,则进入步骤s207,否则进入步骤s208;
s207:设置标志位D31和D30的值为“11”,进入步骤s209;
s208:设置标志位D31和D30的值为“10”;
s209:将标志位D31、D30、D29和D28的信息发送到所述双口RAM模块(Ⅳ);
s210:ARM控制模块(Ⅰ)继续按顺序编译其他指令;
s211:判断计数器是否满足复位条件?如果满足,进入步骤s212,否则,进入步骤s213;
s212:复位计数器,设置标志位D28为“0”,进入步骤s214;
s213:设置标志位D28为“1”;
s214:将标志位D28的信息发送到所述双口RAM模块(Ⅳ);
s215:ARM控制模块(Ⅰ)继续按顺序编译其他指令;
s216:从双口RAM模块(Ⅳ)的触头存储区读入上述过程中所需的该计数器触头信息;
s217:ARM控制模块(Ⅰ)继续按顺序编译其他指令;
s218:判断是否需要读取计数器实时计数值?如果需要,则进入步骤s219,否则,进入步骤s220;
s219:从双口RAM模块(Ⅳ)中的计数器实时计数值存储区读入该计数器的实时计数值;
s220:ARM控制模块(Ⅰ)继续按顺序编译其他指令。
11.如权利要求7所述实现计数器的方法,其特征在于:
所述FPGA计数器模块(Ⅲ)控制的具体步骤为: 
s301:清计数器单元地址计数器和溢出位标志TF;
s302:从所述双口RAM模块(Ⅳ)读取计数器32位字长存储单元的内容;
s303:根据计数器单元地址计数器的值判断是否是增计数器,如果是,则进入步骤s304,否则进入增/减可控计数器的计数处理过程;
s304:获得并判断标志位D31、D30、D29、D28和D27的位值,若D31、D30、D29、D28和D27的位值为“0××××”或“11×11”,则进入步骤s313,若D31、D30、D29、D28和D27的位值为“10×1×”,则进入步骤s305,若D31、D30、D29、D28和D27的位值为“1××0×”,则进入步骤s306,若D31、D30、D29、D28和D27的位值为“11×10” 则进入步骤s307;
s305:设置该计数器D27的位值为“0”,进入步骤s313;
s306:设置该计数器的触头位单元为“0”并进入步骤s308;
s307:判断所述SDRAM计数器动态参数存储器中,该计数器的D26~D0是否等于或大于所述双口RAM模块(Ⅳ)中该计数器的D26~D0的内容,如果是,则进入步骤s311,否则,进入步骤s310;
s308:将该计数器的D30、D27的位值设置为“00”;
s309:将所述SDRAM计数器动态参数存储器中该计数器的D26~D0设置为“0”,进入步骤s313;
s310:将所述SDRAM计数器动态参数存储器中该计数器的D26~D0分别+1后,将结果返回到所述SDRAM计数器动态参数存储器中该计数器的D26~D0,进入步骤s312;
s311:该计数器的触头位单元设置为“1”;
s312:将该计数器D27的位值设置为“1”;
s313:计数器单元地址计数器+1;
s314:判断TF是否为1?如果是,则进入步骤s315,否则,进入步骤s302; 
s315:循环将每个计数器的触头位单元内容传输给双口RAM触头存储单元;
s316:循环将所述SDRAM计数器动态参数存储器中各计数器D27的位值设置值传输给所述双口RAM模块(Ⅳ)中各个计数器的D27位单元;
s317:按照需传输计数器实时计数值的计数器编号顺序将SDRAM计数器动态参数存储器中的实时计数参数传输给所述双口RAM模块(Ⅳ)中的计数器实时计数值存储区,然后返回步骤s301。
12.如权利要求11所述实现计数器的方法,其特征在于:
所述FPGA计数器模块(Ⅲ)控制处理中,所述增/减可控计数器的计数处理的具体步骤为: 
s401:判断该增/减可控计数器的D31、D30、D29、D28和D27的位值,若D31、D30、D29、D28和D27的位值为“0××××”或“11×11”,则进入步骤s413,若D31、D30、D29、D28和D27的位值为“10×1×”则进入步骤s402,若D31、D30、D29、D28和D27的位值为“1××0×”,则进入步骤s403,若D31、D30、D29、D28和D27的位值为“11110”,则进入步骤s404;若D31、D30、D29、D28和D27的位值为“11010”则进入步骤s405;
s402:设置该增/减可控计数器的2个计数存储单元的D27的位值为“0”,为该增/减可控计数器软线圈由失电转化为得电时作好计数的准备,并进入步骤s413;
s403:该增/减可控计数器的触头位单元设置为“0”,并进入步骤s406;
s404:判断所述SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的D26~D0的位值是否等于或大于所述双口RAM模块(Ⅳ)中该增/减可控计数器的第一个参数单元中的D26~D0的内容,如果是,则进入步骤s409,否则,进入步骤s408; 
s405:判断所述SDRAM计数器动态参数存储器中,该增/减可控计数器参数单元中的D26~D0是否等于或小于所述双口RAM模块(Ⅳ)中该增/减可控计数器的第二个参数单元中的D26~D0的内容,如果是,则进入步骤s411,否则,进入步骤s410; 
s406:设置所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D30、D27的位值为“0”;
s407:所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0清零,并进入步骤s413;
s408:所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0补+1操作后,将结果返回到所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0,并进入步骤s412; 
s409:将该增/减可控计数器的触头位单元设置为“1”,并进入步骤s412;
s410:所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D26~D0补+(-1)补操作后,将结果返回到所述SDRAM计数器动态参数存储器中该增/减可控计数器的第二个参数单元中的D26~D0,并进入步骤s412;
s411:将该增/减可控计数器的触头位单元设置为“1”;
s412:设置所述SDRAM计数器动态参数存储器中该增/减可控计数器参数单元中的D27的位值为“1”;
s413:计数器单元地址计数器+2;
s414:进入所述FPGA计数器模块(Ⅲ)控制的s314步骤。
CN201110184552.9A 2011-07-02 2011-07-02 Arm+fpga组成的计数器装置及其实现方法 Expired - Fee Related CN102254218B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110184552.9A CN102254218B (zh) 2011-07-02 2011-07-02 Arm+fpga组成的计数器装置及其实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110184552.9A CN102254218B (zh) 2011-07-02 2011-07-02 Arm+fpga组成的计数器装置及其实现方法

Publications (2)

Publication Number Publication Date
CN102254218A CN102254218A (zh) 2011-11-23
CN102254218B true CN102254218B (zh) 2014-02-26

Family

ID=44981466

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110184552.9A Expired - Fee Related CN102254218B (zh) 2011-07-02 2011-07-02 Arm+fpga组成的计数器装置及其实现方法

Country Status (1)

Country Link
CN (1) CN102254218B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103187967B (zh) * 2011-12-29 2016-02-10 深圳市汇川控制技术有限公司 基于fpga的plc高速脉冲计数实现系统及方法
CN103731302B (zh) * 2013-12-13 2016-08-17 中国人民解放军国防科学技术大学 多核网络处理平台上的一种软件定义计数器实现方法
CN106990747A (zh) * 2017-02-28 2017-07-28 深圳市麦格米特控制技术有限公司 一种plc指令执行器
CN111143273B (zh) * 2019-11-12 2023-07-04 广东高云半导体科技股份有限公司 一种片上系统
CN113985760B (zh) * 2021-09-30 2024-03-26 秦皇岛远舟工业气体有限公司 应用于监测报警系统的基于arm的开关量处理方法
CN116719746B (zh) * 2023-07-26 2023-12-19 北京象帝先计算技术有限公司 调试方法、设备、待调试产品和计算机存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006301776A (ja) * 2005-04-18 2006-11-02 Yaskawa Electric Corp デュアルポートramへのプログラム書き込み回路
CN101162389A (zh) * 2007-08-07 2008-04-16 广西工学院 通用小型可编程控制器及其控制方法
CN101860358A (zh) * 2010-06-12 2010-10-13 中国科学技术大学 一种单光子计数系统及计数方法
CN202120300U (zh) * 2011-07-02 2012-01-18 广西工学院 Arm+fpga组成的计数器装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006301776A (ja) * 2005-04-18 2006-11-02 Yaskawa Electric Corp デュアルポートramへのプログラム書き込み回路
CN101162389A (zh) * 2007-08-07 2008-04-16 广西工学院 通用小型可编程控制器及其控制方法
CN101860358A (zh) * 2010-06-12 2010-10-13 中国科学技术大学 一种单光子计数系统及计数方法
CN202120300U (zh) * 2011-07-02 2012-01-18 广西工学院 Arm+fpga组成的计数器装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
任伟等.基于ARM7的PLC编程器的设计.《仪表技术与传感器》.2010,(第4期),第74页第1栏第2段至第2栏第1段,图2.
何永泰等.基于FPGA的高速计数器设计.《电气应用》.2006,第25卷(第4期),140-143.
基于ARM7的PLC编程器的设计;任伟等;《仪表技术与传感器》;20100430(第4期);第74页左栏第2段至右栏第1段,图2 *
基于FPGA的高速计数器设计;何永泰等;《电气应用》;20060430;第25卷(第4期);140-143 *

Also Published As

Publication number Publication date
CN102254218A (zh) 2011-11-23

Similar Documents

Publication Publication Date Title
CN102254218B (zh) Arm+fpga组成的计数器装置及其实现方法
CN102323786B (zh) Arm+fpga组成的定时器装置及其实现方法
CN103226344B (zh) 一种运动控制片上系统
CN202120300U (zh) Arm+fpga组成的计数器装置
CN103941649A (zh) 多轴运动卡控制系统的控制方法
CN102306141B (zh) 一种描述动态可重构阵列配置信息的方法
CN1422406A (zh) 借助并行定序器的数字电路实现
CN103941650A (zh) 逻辑与运动集成控制器
CN106406227A (zh) 一种数控系统插补算法和数控系统
CN105549539A (zh) 钻孔划线控制系统
Chmiel et al. Central processing units for PLC implementation in Virtex-4 FPGA
CN101789044A (zh) 一种遗传算法的软硬件协同工作实现方法
CN105955202A (zh) 一种基于网络的经济型嵌入式五轴数控系统及其控制方法
CN201837858U (zh) 一种运动控制器及运动控制系统
CN202196296U (zh) Arm+fpga组成的定时器装置
CN105099281B (zh) 伺服马达驱动器
CN201060394Y (zh) 一种用于高压变频器的控制器装置
CN201021996Y (zh) 一种8位复杂指令集计算机微控制器
CN103678202A (zh) 一种多核处理器的dma控制器
CN100430890C (zh) 一种8位risc微控制器
CN202387942U (zh) 一种压铸机可编程数值逻辑控制器
CN202600430U (zh) 花炮插引机数字式自动化控制器
CN106647461A (zh) 一种基于arm‑fpga的自动绕线机控制系统
CN101894008B (zh) 开关中断的装置和方法
CN105183430A (zh) 一种与8位微处理器应用系统连接的定时器ip核及其实现定时器定时控制的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140226

Termination date: 20170702

CF01 Termination of patent right due to non-payment of annual fee