一种用于DCS控制器的FPGA编程文件可信更新加载系统及方法
文献发布时间:2024-04-18 20:00:50
技术领域
本发明属于FPGA(现场可编程门阵列)编程文件可信更新及加载技术领域,具体涉及一种用于DCS(分散控制系统)控制器的FPGA编程文件可信更新加载系统及方法。
背景技术
在工控DCS领域,DCS(分散控制系统)控制器作为DCS的“大脑”集中完成整个系统的控制功能,而为了提高其适应不同工作场景的灵活性,往往采用CPU+FPGA的架构来实现,因此,当FPGA的编程文件出错或被篡改,则可能会导致控制器功能丧失甚至损坏设备,带来极大的经济损失;所以,有必要提高编程文件在更新和加载时的可信度,从而提升控制器功能的正确性,保证DCS及工业设备的安全。目前在更新过程中,CPU(中央处理器)直接将数据写入FLASH(闪存单元),不会进行校验;在加载过程中,CPU(中央处理器)直接读取FLASH(闪存单元)中的数据,传入FPGA(现场可编程门阵列),因此,在更新和加载过程中,对于FPGA编程文件的更新和加载都不进行校验,都是采取直接的方式,无法确保数据的准确性和安全性。
发明内容
本发明的目的在于提供一种用于DCS控制器的FPGA编程文件可信更新加载系统及方法,以克服现有DCS控制器在数据加载和更新过程中无法保证数据准确性和安全性的问题。
一种用于DCS控制器的FPGA编程文件可信更新加载系统,包括CPU、内存、FPGA、FLASH和可信芯片;
CPU用于加载编程文件,并将加载后的编程文件存放至内存,CPU通过主机接口与FPGA(现场可编程门阵列)通信;
FPGA用于从内存中获取编程文件并进行可信计算,然后将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储;FPGA将从内存中获取的编程文件送入FLASH,CPU将送入FLASH中的编程文件读入内存中进行哈希运算,然后将哈希运算结果送入可信芯片进行再计算,将再计算结果与可信芯片存储的再计算结果进行对比,若两者相等则通过可信验证,则根据验证的编程文件进行更新,否则未通过可信验证。
优选的,FPGA先从内存中获取编程文件,然后将编程文件写入FLASH;FPGA将从内存中获取的编程文件进行可信计算,然后将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储;FLASH将获取的编程文件进行哈希计算,并将计算结果送入可信芯片进行再计算,将再计算结果与可信芯片存储的再计算结果进行对比,若两者相等则通过可信验证,则说明该编程文件可信,则根据该编程文件进行更新;否则未通过可信验证。
优选的,FPGA包括控制寄存器组、数据获取单元和可信单元;
其中,控制寄存器组用于存储CPU的控制指令以及反馈信息,控制寄存器组包括选择电路控制寄存器、编程文件内存地址寄存器、编程文件长度寄存器、编程文件FLASH地址寄存器和编程文件更新完成寄存器;
数据获取单元根据编程文件内存地址寄存器和编程文件长度寄存器的值将编程文件从内存读取至FPGA的可信单元中,同时将获取的编程文件传输至FLASH,可信单元对获取的编程文件进行可信计算,将计算得到的可信结果送入可信芯片。
优选的,所述选择电路控制寄存器的bit0、bit1和bit2分别对应连接第一选择电路、第二选择电路和第三选择电路,选择电路控制寄存器的bit0、bit1和bit2对应连接第一选择电路、第二选择电路和第三选择电路的控制信号由CPU读写;
编程文件内存地址寄存器存储32bit字节地址,表示编程文件在内存中存放的起始地址;
编程文件长度寄存器存储32bit字节长度,表示编程文件的实际长度;
编程文件FLASH地址寄存器存储32bit字节地址,表示编程文件在FLASH中存放的起始地址。
优选的,FLASH将获取的编程文件写入以编程文件FLASH地址寄存器的值为起始地址的FLASH区域中。
一种用于DCS控制器的FPGA编程文件可信更新方法,包括以下步骤:
S1,CPU将待更新的编程文件读入内存中;
S2,CPU写选择电路控制寄存器,将FLASH及可信芯片交由FPGA控制;
S3,CPU将待更新编程文件在内存中的地址、文件长度及用于存储FPGA编程文件的区域的地址分别写入编程文件内存地址寄存器、编程文件长度寄存器、编程文件FLASH地址寄存器;
S4,FPGA中的数据获取单元从内存中读取待更新的编程文件;
S5,FPGA中的可信单元对读取的编程文件进行可信计算,FPGA同时将读取的编程文件送入FLASH中用于存储FPGA编程文件的区域;
S6,可信单元将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储;
S7,CPU将FLASH中用于存储FPGA编程文件的区域中的编程文件读入内存进行哈希运算;CPU将哈希运算结果送入可信芯片进行再计算;
S8,CPU将获取的再计算结果与可信芯片存储的再计算结果进行对比,若相等则通过可信验证,否则未通过可信验证。
优选的,FPGA同时将读取的编程文件送入FLASH中用于存储FPGA编程文件的其中一个区域,若未通过可信验证,则记录未通过次数加1,重复步骤S2-S8,直至未通过次数等于五,则该编程文件出错,进行上报;结束本次更新。
优选的,用于存储FPGA编程文件的其中一个区域通过可信验证,则将写入的FLASH地址调整为用于存储FPGA编程文件的另一个区域,若用于存储FPGA编程文件的另一个区域通过可信验证,则结束本次更新,否则进行上报。
一种用于DCS控制器的FPGA编程文件可信加载方法,包括以下步骤:
S1,CPU将FLASH中用于存储FPGA编程文件的其中一个区域中的编程文件读入内存进行哈希运算;CPU将哈希运算结果送入可信芯片进行再计算。
S2,CPU从可信芯片读出再计算结果与可信芯片存储的再计算结果进行对比,若对比两者相等则通过可信验证;使用FLASH中用于存储FPGA编程文件的区域的编程文件加载FPGA;加载完成后,若1ms内检测到FPGA就绪信号,则完成本次加载;若1ms内未检测到FPGA就绪信号,则结束本次加载;否则未通过可信验证,则使用FPGA编程文件的另外一个区域中的编程文件读入内存进行哈希运算,并送入可信芯片进行再计算。
S3,CPU从可信芯片读出再计算结果与可信芯片存储的再计算结果进行对比,若对比两者相等则通过可信验证;使用FLASH中可信校验通过编程文件的区域的编程文件加载FPGA;加载完成后,若1ms内检测到FPGA就绪信号,则完成本次加载;若1ms内未检测到FPGA就绪信号,则结束本次加载;若第二块区域存储的加载文件未通过可信校验,则结束本次加载。
优选的,先采用其中一个用于存储FPGA编程文件的区域的编程文件进行可信再计算,如果该用于存储FPGA编程文件的区域的编程文件未通过可信验证,则采用另一个用于存储FPGA编程文件的区域的编程文件进行可信再计算,如果该用于存储FPGA编程文件的区域的编程文件通过可信验证,则采用该用于存储FPGA编程文件的区域的编程文件进行加载。
与现有技术相比,本发明具有以下有益的技术效果:
本发明提供一种用于DCS控制器的FPGA编程文件可信更新加载系统,包括CPU、内存、FPGA、FLASH和可信芯片;CPU用于加载编程文件,并将加载后的编程文件存放至内存,CPU通过主机接口与FPGA(现场可编程门阵列)通信;FPGA用于从内存中获取编程文件并进行可信计算,然后将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储;FPGA将从内存中获取的编程文件送入FLASH,CPU将送入FLASH中的编程文件读入内存中进行哈希运算,然后将哈希运算结果送入可信芯片进行再计算,将再计算结果与可信芯片存储的再计算结果进行对比,若两者相等则通过可信验证,则根据验证的编程文件进行更新,否则未通过可信验证,本发明在更新、加载过程中均进行数据的可信校验、确保数据的正确可靠性、进而保证系统的正确运行;若FLASH中文件遇到外界因素的影响发生变化、本发明提到的机制可以有效的检测到此问题。
利用可信芯片对编程文件进行可信计算和验证,提高了编程文件更新和加载的可信度;采用FPGA更新编程文件的方式,有效降低CPU负荷,减小更新操作对其它运行任务的影响。
一种用于DCS控制器的FPGA编程文件可信加载方法,通过对两个用于存储FPGA编程文件的不同区域分别进行可信验证,能够保证更新失败不会导致FPGA失效。
附图说明
图1为本发明实施例中用于DCS控制器的FPGA编程文件可信更新加载系统示意图。
图2为本发明实施例中用于DCS控制器的FPGA编程文件可信更新方法流程图。
图3为本发明实施例中用于DCS控制器的FPGA编程文件可信加载方法流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
如图1所示,本发明提供一种用于DCS控制器的FPGA编程文件可信更新加载系统,包括CPU(中央处理器)、内存、FPGA(现场可编程门阵列)、FLASH(闪存单元)和可信芯片;
CPU用于加载编程文件,并将加载后的编程文件存放至内存,CPU通过主机接口与FPGA(现场可编程门阵列)通信;
FPGA用于从内存中获取编程文件并进行可信计算,然后将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储;FPGA将从内存中获取的编程文件送入FLASH,CPU将送入FLASH中的编程文件读入内存中进行哈希运算,然后将哈希运算结果送入可信芯片进行再计算,将再计算结果与可信芯片存储的再计算结果进行对比,若两者相等则通过可信验证,则根据验证的编程文件进行更新,否则未通过可信验证。
CPU与FLASH通过第一选择电路连接,上电后默认CPU与FLASH通过第一选择电路连接,之后由CPU控制FPGA进行选择。
CPU与FPGA通过第二选择电路连接,由CPU控制FPGA与FLASH通过第二选择电路连接,上电后默认CPU与FPGA通过第二选择电路连接,之后由CPU控制FPGA进行选择。
CPU与可信芯片通过第三选择电路连接,由CPU控制FPGA与可信芯片通过第三选择电路连接,上电后默认由CPU与可信芯片连接,之后由CPU控制FPGA是否与可信芯片连接。
CPU控制FPGA完成编程文件的可信更新具体过程为:FPGA先从内存中获取编程文件,然后将编程文件写入FLASH;FPGA将从内存中获取的编程文件进行可信计算,然后将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储;FLASH将获取的编程文件进行哈希计算,并将计算结果送入可信芯片进行再计算,将再计算结果与可信芯片存储的再计算结果进行对比,若两者相等则通过可信验证,则说明该编程文件可信,则根据该编程文件进行更新;否则未通过可信验证;
内存用于存放CPU使用的数据,包括但不限于编程文件。
FPGA根据主机的配置,从CPU连接的内存中进行获取编程文件,获取方式根据CPU与FPGA之间的交互接口协议;将可信验证通过的编程文件写入FLASH,完成编程文件的更新。
FPGA包括控制寄存器组、数据获取单元、可信单元、非易失存储单元和FLASH接口单元;其中,控制寄存器组用于存储CPU的控制指令以及反馈信息,控制寄存器组包括选择电路控制寄存器、编程文件内存地址寄存器、编程文件长度寄存器、编程文件FLASH地址寄存器和编程文件更新完成寄存器;其中,
选择电路控制寄存器的bit0、bit1和bit2分别对应连接第一选择电路、第二选择电路和第三选择电路,选择电路控制寄存器的bit0、bit1和bit2对应连接第一选择电路、第二选择电路和第三选择电路的控制信号由CPU读写,即CPU控制FPGA分别与可信芯片及FLASH的连接。
编程文件内存地址寄存器存储32bit字节地址,表示编程文件在内存中存放的起始地址,由CPU读写。
编程文件长度寄存器存储32bit字节长度,表示编程文件的实际长度,由CPU读写。
编程文件FLASH地址寄存器存储32bit字节地址,表示编程文件在FLASH中存放的起始地址,由CPU读写,该寄存器写操作将使FPGA启动编程文件更新;
编程文件更新完成寄存器的bit0表示编程文件更新是否完成,1表示完成,0表示未完成,由FPGA在更新完成后置1,CPU通过读编程文件更新完成寄存器获取完成状态,并需在下次更新前写1清0。
数据获取单元根据编程文件内存地址寄存器和编程文件长度寄存器的值将编程文件从内存读取至FPGA的可信单元中,同时将获取的编程文件传输至FLASH,可信单元对获取的编程文件进行可信计算,将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储,存储至非易失存储单元中。
FLASH将获取的编程文件写入以编程文件FLASH地址寄存器的值为起始地址的FLASH区域中;
FLASH用于存储FPGA编程文件的区域包括编程文件区1和编程文件区2,均可存储一份完整的FPGA编程文件。
上述方案中,所述FPGA编程文件的加载采用CPU写入FPGA的方式。
如图2所示,本发明提供一种用于DCS控制器的FPGA编程文件可信更新方法,包括以下步骤:
S1,CPU将待更新的编程文件读入内存中;
S2,CPU写选择电路控制寄存器,将FLASH及可信芯片交由FPGA控制;
S3,CPU将待更新编程文件在内存中的地址、文件长度及用于存储FPGA编程文件的区域的地址分别写入编程文件内存地址寄存器、编程文件长度寄存器、编程文件FLASH地址寄存器;
S4,FPGA中的数据获取单元从内存中读取待更新的编程文件;
S5,FPGA中的可信单元对读取的编程文件进行可信计算,FPGA同时将读取的编程文件送入FLASH中用于存储FPGA编程文件的区域;
S6,可信单元将计算得到的可信结果送入可信芯片进行可信再计算,并将可信再计算的结果进行存储;
S7,CPU将FLASH中用于存储FPGA编程文件的区域中的编程文件读入内存进行哈希运算;CPU将哈希运算结果送入可信芯片进行再计算;
S8,CPU将获取的再计算结果与可信再计算进行对比,若相等则通过可信验证,否则未通过可信验证。
本申请在步骤S5中,FPGA同时将读取的编程文件送入FLASH中用于存储FPGA编程文件的其中一个区域,若未通过可信验证,则记录未通过次数加1,重复步骤S2-S8,直至未通过次数等于五,则该编程文件出错,进行上报;结束本次更新。
用于存储FPGA编程文件的其中一个区域通过可信验证,则将写入的FLASH地址调整为用于存储FPGA编程文件的另一个区域,若用于存储FPGA编程文件的另一个区域通过可信验证,则结束本次更新,否则进行上报。
如图3所示,本发明提供一种用于DCS控制器的FPGA编程文件可信加载方法,包括以下步骤:
S11,CPU将FLASH中用于存储FPGA编程文件的其中一个区域中的编程文件读入内存进行哈希运算;CPU将哈希运算结果送入可信芯片进行再计算。
S12,CPU从可信芯片读出再计算结果与可信芯片存储的再计算结果进行对比,若对比两者相等则通过可信验证;使用FLASH中用于存储FPGA编程文件的区域的编程文件加载FPGA;加载完成后,若1ms内检测到FPGA就绪信号,则完成本次加载;若1ms内未检测到FPGA就绪信号,则结束本次加载;否则未通过可信验证,则使用FPGA编程文件的另外一个区域中的编程文件读入内存进行哈希运算,并送入可信芯片进行再计算。
S13,CPU从可信芯片读出再计算结果与可信芯片存储的再计算结果进行对比,若对比两者相等则通过可信验证;使用FLASH中可信校验通过编程文件的区域的编程文件加载FPGA;加载完成后,若1ms内检测到FPGA就绪信号,则完成本次加载;若1ms内未检测到FPGA就绪信号,则结束本次加载;若第二块区域存储的加载文件未通过可信校验,则结束本次加载。
对于FLASH中用于存储FPGA编程文件的区域存在多个,步骤S13中,先采用其中一个用于存储FPGA编程文件的区域的编程文件进行可信再计算,如果该用于存储FPGA编程文件的区域的编程文件未通过可信验证,则采用另一个用于存储FPGA编程文件的区域的编程文件进行可信再计算,如果有用于存储FPGA编程文件的区域的编程文件通过可信验证,则采用该用于存储FPGA编程文件的区域的编程文件进行加载。
本发明提供一种用于DCS控制器的FPGA编程文件可信更新加载系统,利用可信芯片对编程文件进行可信计算和验证,提高了编程文件更新和加载的可信度;采用FPGA更新编程文件的方式,有效降低CPU负荷,减小更新操作对其它运行任务的影响;通过对两个用于存储FPGA编程文件的不同区域分别进行可信验证,能够保证更新失败不会导致FPGA失效。
- 一种管路冲洗装置及管路冲洗方法
- 一种明杆闸阀的远端传动装置
- 一种闸阀铸件下模造型用装置
- 一种管路闸阀加固装置
- 一种管路闸阀加固装置