一种PLC程序执行器IP核
技术领域
本发明涉及一种片上实现的程序执行模块,特别是一种PLC程序执行器IP核。
背景技术
随着自动控制技术的发展,可编程逻辑控制器(PLC)已经越来越多的应用在各个行业领域中,标准化水平越来越高。目前,已形成了PLC控制器典型结构、编程语言、通信、用户使用导则等系列国际标准(IEC61131)。其中,以编程语言标准(IEC61131-3)最为广泛应用,所有可编程控制器均需要支持该标准支持的五种语言,包括IL、ST、LD、FBD和SFC。其中IL语言即指令表语句,最接近PLC机器语言的语言(类似汇编语言),其它四种为高级语言。普遍的,组态编程软件在编译以该五种语言编成的程序时,会将程序均转换成以IL语言为描述的中间代码。可以将中间代码下载到PLC中按句进行解释并执行(解释型),也可以将中间代码直接编译成PLC的本地代码下载运行。
对于解释执行方式,它的每一条PLC程序在执行前都需要进行复杂的软件解释工作,一条IL指令需要约5句~20句C语言程序来进行解释,进一步需要约20条~100条精减指令集指令(以ARM指令集为例)。所以解释型执行方式运行速度慢,只能用于中、低档PLC。
对于编译执行方式,PLC的编程者需要提前将PLC程序针对指定的CPU处理器型号用指定的编译器和编译环境参数进行编译方能正确下载运行,即只能用特定的编程软件才能对PLC进行编程。替换一种MCU处理器芯片,或仅升级一个PLC内部组件,原有的组态编程软件可能就无法再适用。所以其通用性差,产品的应用和升级成本高。此外,与解释执行方式类似的是,编译型执行方式虽然将PLC程序编译为本地代码,但仍需要采用通用处理器的精减指令集格式,每一条IL指令可能需要3-10条本地汇编指令;即使由其它PLC语言(如FBD、ST)直接编译为本地汇编指令(不经由IL中间代码),本地汇编毕竟非面向PLC程序的指令集结构,仍不可避免地有效率的损失。
另一方面,在以MCU为处理核心的PLC控制器结构中,无论解释型还是编译型,都需要占用大量MCU的工作,而MCU通常还需要完成其它重要任务(如通讯、显示),PLC任务的执行和响应速度也因此受MCU其它工作的影响,难以保障其实时性和可靠性。
发明内容
为了克服现有技术的缺陷,本发明提供了一种PLC程序执行器IP核,其通过总线接口挂接在片上总线上,所述片上总线上同时挂接有MCU和存储器,包括总线接口模块、程序计数模块、取指令模块、寻址模块、取数据模块、执行模块以及程序栈,所述总线接口模块分别与所述程序计数模块、读指令模块、寻址模块、取数据模块以及执行模块连接,所述总线接口模块包括多个寄存器;
其中,所述总线接口模块通过所述多个寄存器接收所述MCU写入的程序执行信息;
所述程序计数模块更新程序的执行指令地址并交由所述取指令模块;
所述取指令模块根据所述执行指令地址从所述存储器中获取执行指令并分析和处理所述执行指令;
所述寻址模块用于获取所述执行指令的实际地址;
所述取数据模块用于获取所述执行指令的被操作数;
所述指令执行模块完成对所述执行指令的执行,所述执行指令包括跳转指令;
所述程序栈用于保存所述跳转指令的地址。较佳地,所述PLC程序为与IL语言直接对应的指令集程序。
较佳地,所述多个寄存器包括代码段首地址寄存器、数据段首地址寄存器、程序计数寄存器、指令寄存器、控制寄存器以及状态寄存器。
较佳地,所述代码段首地址寄存器与所述数据段首地址寄存器分别接收所述MCU写入的需要执行的程序的代码段首地址与该代码段对应的数据段首地址,所述控制寄存器接收所述MCU写入的启动程序的命令。
较佳地,所述取指令模块将所述代码段首地址载入所述程序计数寄存器,所述程序计数模块将所述代码段首地址交由所述取指令模块,所述取指令模块根据所述地址通过片上总线在所述存储器中取出指令存入所述指令寄存器并分析该指令。
较佳地,所述执行指令的被操作数为立即数或无操作数时,所述取指令模块将所述执行指令交由所述指令执行模块;所述执行指令的被操作数以偏移量的形式需要寻址获得时,所述取指令模块将该执行指令的被操作数交由所述寻址模块。
较佳地,所述寻址模块通过该执行指令段表和偏移量信息寻得被操作数的实际地址,并交由所述取数据模块;所述取数据模块取出被操作数,并同该指令一同交由所述指令执行模块。
较佳地,所述指令执行单元根据该执行指令的类型进行处理:当所述指令执行模块完成的是单条指令的执行时,则在所述状态寄存器中设置指令完成标志,并向程序计数模块发送完成信号,程序计数寄存器自加1;当所述指令执行模块无法完成指令的执行时,则在所述状态寄存器中设置对应错误标志,执行停止,同时发送中断信号;当所述指令寄存器中的指令为跳转指令(JMP)时,所述寻址模块所寻得地址为跳转点地址,将该跳转地址载入到所述程序计数寄存器中,完成跳转指令的执行;当所述指令寄存器中的指令为调用指令(CAL)时,所述寻址模块所寻得地址为调用点地址,此时所述程序计数模块将所述程序计数寄存器的值压入所述程序栈中,并将所述寻址模块寻得的跳转地址载入到所述程序计数寄存器中,完成该调用指令的执行。
较佳地,所述PLC程序为与IL语言直接对应的指令集程序。
较佳地,所述PLC程序为与IL语言直接对应的指令集程序。
较佳地,其顺序读取程序的IL指令。
较佳地,其通过所述片上总线主动访问或配置其它IP核或接受其它IP核的访问或配置,所述片上总线为AMBA、CoreConnect、Wishbone、OCP、Avalon片上总线中的一种。
较佳地,一种PLC程序执行器IP核的工作方法,该IP核通过总线接口挂接在片上总线上,所述片上总线上同时挂接有MCU和存储器,其特征在于,包括总线接口模块、程序计数模块、取指令模块、寻址模块、取数据模块、执行模块以及程序栈,所述总线接口模块分别与所述程序计数模块、读指令模块、寻址模块、取数据模块以及执行模块连接,所述总线接口模块包括代码段首地址寄存器、数据段首地址寄存器、程序计数寄存器、指令寄存器、控制寄存器以及状态寄存器;
该IP核的工作方法为:
(1)(MCU)向所述代码段首地址寄存器、数据段首地址寄存器内分别写入需要执行的程序的代码段首地址与该代码段对应的数据段首地址,并向所述控制寄存器写入启动程序的命令;
(2)所述程序计数寄存器载入所述代码段首地址,所述程序计数模块将所述代码段首地址交由所述取指令模块;
(3)所述取指令模块根据所述地址通过片上总线在所述存储器中取出指令并存入所述指令寄存器并分析该指令;
(4)当该指令的被操作数为立即数或无操作数,则所述取指令模块将该指令交由所述指令执行模块;当该指令的被操作数以偏移量的形式需要寻址获得,所述指令寄存器将该指令的操作数信息交由所述寻址模块,所述寻址模块通过该指令段表和偏移量信息寻得被操作数的实际地址,并交由所述取数据模块;
(5)所述取数据模块取出被操作数,并同该指令一同交由所述指令执行模块;
(6)所述指令执行单元根据该指令的类型进行处理:当所述指令执行模块完成的是单条指令的执行时,则在所述状态寄存器中设置指令完成标志,并向程序计数模块发送完成信号,程序计数寄存器自加1,重复(2)~(6)步骤;当所述指令执行模块无法完成指令的执行时,则在所述状态寄存器中设置对应错误标志,执行停止,同时发送中断信号;当所述指令寄存器中的指令为跳转指令(JMP)时,所述寻址模块所寻得地址为跳转点地址,将该跳转地址载入到所述程序计数寄存器中,继续(2)~(6)步骤;当所述指令寄存器中的指令为调用指令(CAL)时,所述寻址模块所寻得地址为调用点地址,此时所述程序计数模块将所述程序计数寄存器的值压入所述程序栈中,并将所述寻址模块寻得的跳转地址载入到所述程序计数寄存器中,继续(2)~(6)步骤;
(7)在完成一个代码段的执行后,所述程序计数模块查询所述程序栈是否为空,如仍有内容,说明已完成的代码段是被调用的程序,弹出栈顶地址到所述程序计数寄存器,继续(2)~(6)步骤;如所述程序栈已空,则程序完全结束,在所述状态寄存器中设置程序完成标志,同时发送中断信号。
与现有技术相比,本发明的有益效果如下:
1.以片上IP核的方式实现了可自主运行的IL程序执行器,使得PLC控制器对PLC程序的执行可以不再受制于MCU的型号、性能和软件,同时以IP核形式存在的结构可以不作任何修改地集成到SoC芯片中。
2.IP核执行32位定长的指令,与IEC61131-3中标范的IL指令直接对应,1条IL指令只要对应1条32位指令,在一个执行周期内完成执行,在同样的工作频率下,速度明显高于基于MCU设计的PLC数倍。
3.IP核以流水线的方式直接执行IL程序,提高了IL程序的绝对速度,且与MCU的其它工作互不影响,实时性高。
4.由于IL语言已标准化,与IL语言完全对应的指令集格式通用性高,可以极方便地实现PLC编程编译软件,其它各种编程语言可通过上位机的编程软件编译为IL指令并交由本IP核执行,提高了PLC整体CPU模块的执行速度。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
图1为本发明实施例的结构示意图。
具体实施方式
下方结合附图和具体实施例对本发明做进一步的描述。
本发明提供了一种PLC程序执行器IP核,其通过总线接口挂接在片上总线上,所述片上总线上同时挂接有MCU和存储器,包括总线接口模块、程序计数模块、取指令模块、寻址模块、取数据模块、执行模块以及程序栈,所述总线接口模块分别与所述程序计数模块、读指令模块、寻址模块、取数据模块以及执行模块连接,所述总线接口模块包括多个寄存器。
实施例
如图1所示,为本发明的一较佳实施例,在本例中总线接口模块为AHB接口模块,其通过所述片上总线主动访问或配置其它IP核或接受其它IP核的访问或配置,所述片上总线可以是AMBA、CoreConnect、Wishbone、OCP、Avalon等SoC片上总线的一种,此处仅具此5例总线,本发明并不局限于本例中的5中总线,此处仅距离说明。本例以AMBA总线为例。本发明实施例提供了一种PLC程序执行器IP核,该IP核作为片上实现的集成电路IP核挂接在SoC芯片的AMBA总线2上,其通过AHB接口模块1挂接在AMBA总线2上,AMBA总线2上同时挂接有MCU3和存储器模块4,该IP核包括AHB接口模块1、程序计数模块6、取指令模块5、寻址模块9、取数据模块10与指令执行模块8,AHB接口模块1分别与程序计数模块6、取指令模块5、寻址模块9、取数据模块10以及指令执行模块8连接,AHB接口模块1包括代码段首地址寄存器、数据段首地址寄存器、程序计数寄存器、指令寄存器、控制寄存器以及状态寄存器;
该IP核的工作流程为:
(1)MCU3向代码段首地址寄存器、数据段首地址寄存器内分别写入需要执行的程序的代码段首地址与该代码段对应的数据段首地址,并向所述控制寄存器写入启动程序的命令;
(2)所述程序计数寄存器载入所述代码段首地址,程序计数模块6将所述代码段首地址交由取指令模块5;
(3)取指令模块5根据所述地址通过AMBA总线2在存储器模块4中取出指令并存入指令寄存器并分析该指令;
(4)当该指令的被操作数为立即数或无操作数,则取指令模块5将该指令交由指令执行模块8;当该指令的被操作数以偏移量的形式需要寻址获得,所述指令寄存器将该指令的操作数信息交由所述寻址模块9,寻址模块9通过该指令段表和偏移量信息寻得被操作数的实际地址,并交由取数据模块10;
(5)取数据模块10取出数据,并同该指令一同交由指令执行模块8;
(6)指令执行模块8根据该指令的类型进行处理:当指令执行模块8完成的是单条指令的执行时,则在所述状态寄存器中设置指令完成标志,并向程序计数模块6发送完成信号,程序计数寄存器自加1,重复(2)~(6)步骤;当指令执行模块8无法完成指令的执行时,则在所述状态寄存器中设置对应错误标志,执行停止,同时发送中断信号;当所述指令寄存器中的指令为跳转指令(JMP)时,寻址模块9所寻得地址为跳转点地址,将该跳转地址载入到所述程序计数寄存器中,继续(2)~(6)步骤;当所述指令寄存器中的指令为调用指令(CAL)时,寻址模块9所寻得地址为调用点地址,此时程序计数模块6将所述程序计数寄存器的值压入程序栈7中,并将寻址模块9寻得的跳转地址载入到所述程序计数寄存器中,继续(2)~(6)步骤;
(7)在完成一个代码段的执行后,程序计数模块6查询程序栈7是否为空,如仍有内容,说明已完成的代码段是被调用的程序,弹出栈顶地址到所述程序计数寄存器,继续(2)~(6)步骤;如程序栈7已空,则程序完全结束,在所述状态寄存器中设置程序完成标志,同时发送中断信号。
其中,本IP核所执行程序的指令集是与IL指令直接对应的32位定长指令集,IL语言程序执行器IP核可以自主的顺序读取并执行整段IL指令程序;其中高8位用与表征IL指令码,另24位用于表征该指令码的具体参数(如被操作数类型)和被操作数,被操作数可以是立即数,也可以是存放在存储器中以段号和段内偏移量为表征的命令码或数据。
在具体实现中,指令执行模块还可以分为解码、运算等子级流水线,寻址模块还可以分为段地址寻址、目标地址寻址等子级流水线。
如下列表举例说明各种指令的具体格式定义:
在本实施例中,执行器IP核最大可支持255个段,每个段最大256个数据。寻址模块根据段号XXXXXXXX,通过在存储器中的段表查找到该段的实际首地址(段表在任务编程后由组态软件生成并下载到存储器),然后根据段内偏移量YYYYYYYY查找到被操作数的实际地址。当段号为00000000时,默认为当前程序代码段所对应的数据段,寻址模块不再需要查找段地址,而直接将数据段首地址寄存器中的数据作为被操作数的段地址,以此来简化寻址模块的操作。
在本实施例中,执行器IP可支持立即数操作,立即数的大小受具体指令中分配的空间影响。如LD命令中,立即数需要小于23位。当指令中所处理的数值超过该限制时,组态软件会在编译时将该数存放在代码段的某个地址,并在指令中已该地址的段号和段内偏移量作为操作数。
本实施例中,主要寄存器定义如下:
上述实施例举例了指令格式和寄存器的定义,在本发明仅距离说明,指令格式和寄存器格式是可以自由调整。
本发明的目的在于针对现有PLC程序执行方法的不足,设计一种硬件方式实现(特别是以片上IP核方式实现)的32位定长指令集格式PLC程序执行模块,可以以流水线方式快速读取并执行PLC程序,本发明直接以硬件执行面向IL语言的指令集机器语言,可以以更快的速度和更高的效率进行PLC程序的执行。同时,以IP核结构方式的设计避免了依靠MCU执行而带来的性能影响和硬件相关等缺点,接口开放易移植。基于本发明可以实现高速IL程序执行、接口开放的SoC芯片,并基于此可以实现高性能的可编程控制器。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。