发明名称 基于FPGA的CORBA通信装置
摘要 本发明提供一个基于FPGA的CORBA通信装置,包括:一个主解析模块、一个主封装模块、一个互连模块、以及若干个子解析模块和若干个子封装模块。每个子解析模块、每个子封装模块与FPGA上的每个应用模块都相对应。其中,主解析模块通过外部数据接口与其它处理器进行数据信息交换;主解析模块通过互连模块和子解析模块,向应用模块发送数据信息;每个应用模块通过对应的子封装模块和互连模块向主封装模块发送数据信息。本发明在FPGA上设计、实现并运行,且不受FPGA具体型号限制。无需在通用处理器上运行任何适配器模块和代理模块,即可实现FPGA上的应用模块与其它处理器上的应用模块直接进行CORBA通信。
申请公布号 CN102208998B 申请公布日期 2013.07.24
申请号 CN201110153659.7 申请日期 2011.06.08
申请人 中国人民解放军国防科学技术大学 发明人 魏急波;吴宇;施峻武;高宏伟;王欣;王德刚;赵海涛
分类号 H04L12/24(2006.01)I 主分类号 H04L12/24(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 王文惠
主权项 基于FPGA的CORBA通信装置,其特征在于,包括:一个主解析模块、一个主封装模块、一个互连模块、以及若干个子解析模块和若干个子封装模块;每个子解析模块对应一个子封装模块,并且对应FPGA上的一个应用模块;其中,主解析模块通过外部数据接口接收来自其它处理器的数据信息;主封装模块通过外部数据接口向其它处理器发送数据信息;互连模块通过操作编码接口、函数名称接口、函数参数接口、应用模块地址接口和请求标识号接口接收来自主解析模块的相应数据信息,通过操作编码接口、函数名称接口、函数参数接口、对象键值接口和请求标识号接口向主封装模块发送相应数据信息,通过操作编码接口、函数名称接口和函数参数接口向子解析模块发送相应数据信息,通过操作编码接口、函数名称接口和函数参数接口接收来自子封装模块的相应数据信息;子解析模块通过操作编码接口、函数参数的标识接口和函数参数的数值接口向应用模块发送相应数据信息;子封装模块通过操作编码接口、函数参数的标识接口和函数参数的数值接口接收来自应用模块的相应数据信息;主解析模块和主封装模块分别存储一个公有函数列表,公有函数列表中的每条记录包含两个数据项,第一个数据项是CORBA请求报文所包含的可变长度的公有函数名称,第二个数据项是固定长度的公有函数标识,每个公有函数标识都与唯一的公有函数名称相对应,同时第二个数据项还要保留两个特定标识,第一特定标识用于表示CORBA请求报文包含的是私有函数,第二特定标识用于表示接收到的是CORBA应答报文;每个应用模块对应一个私有函数列表,分别存储在该应用模块对应的子解析模块和子封装模块中,私有函数列表中的每条记录包含两个数据项,第一个数据项是CORBA请求报文所包含的私有函数名称,第二个数据项是固定长度的私有函数标识,每个私有函数标识都与唯一的私有函数名称相对应;在每个子解析模块和子封装模块中还分别存储一个函数参数列表,函数参数列表中的每条记录包含两个数据项,第一个数据项是CORBA报文中所包含的可变长度的函数参数的名称,第二个数据项是固定长度的函数参数的标识,每个函数参数的标识都与唯一的函数参数的名称相对应;①主解析模块从外部数据接口上接收CORBA报文,对其进行标准化处理后传递给互连模块;具体过程包括:主解析模块从接收到的CORBA报文中解析出GIOP(General Inter‑ORB Protocol,通用ORB互通协议)信息,依次为协议版本号、字节顺序标志、报文类型和报文长度,并根据接收到的报文类型判断接收到的是CORBA请求报文还是CORBA应答报文:⑴当接收到请求报文时,主解析模块从后续的报文,即报文长度信息后的报文中提取出信息,依次为请求标识号、应答标识、对象键值、函数名称、客户机身份,并进行下述处理: 第一个处理是将对象键值标准化,即将其转换为一个固定长度的应用模块地址;第二个处理内容是函数名称的标准化:主解析模块获得请求报文所包含的函数名称后,就在其所存储的公有函数列表中进行查找:①当公有函数列表的记录中存在与接收到的函数名称相同的数据项时,则将接收到的函数名称转换为公有函数列表中与此函数名称对应的记录中固定长度的公有函数标识,然后将应答标识置于在此固定长度的公有函数标识的最高位之前,共同组成操作编码;此后主解析模块将客户机身份以后的报文内容,即函数参数,与解析获得的操作编码、应用模块地址和请求标识号一起传递给互连模块;②当公有函数列表的记录中不存在与接收到的函数名称相同的数据项时,将应答标识置于第一特定标识的最高位之前,共同组成操作编码;此后主解析模块将客户机身份以后的报文内容,即函数参数,与私有函数名称、操作编码、应用模块地址和请求标识号一起传递给互连模块;⑵当接收到应答报文时,主解析模块依次从后续的报文,即报文长度信息后的报文中提取出请求标识号和应答状态信息,然后将应答状态置于第二特定标识的最高位之前,共同组成操作编码;然后,主解析模块将应答标识以后的报文内容,即函数调用完成后所返回的函数参数,与操作编码和请求标识号一起传递给互连模块;②子解析模块接收互连模块传递过来的数据,根据接收到的操作编码对数据进行标准化处理后转发给相应的应用模块;具体处理过程包括:⑴当操作编码指明接收到CORBA请求报文,且请求调用的函数名称为公有函数名称时,子解析模块将对该函数所带的每个参数进行标准化处理:通过查找所存储的函数参数列表,将每个可变长度的函数参数的名称转换为函数参数列表中与此函数参数的名称相对应的记录中固定长度的函数参数的标识,然后将函数参数的标识、函数参数的数值和操作编码一起发送给与子解析模块相对应的应用模块;⑵当操作编码指明接收到CORBA请求报文,但请求调用的函数名称为应用模块的私有函数名称时,子解析模块需要对此应用模块的私有函数名称和函数参数这两部分进行标准化处理;对私有函数名称的处理内容是:子解析模块在所存储的私有函数列表中进行查找,找到数据项与所接收到的私有函数名称相同的记录后,使用该记录中的固定长度的私有函数标识替换掉原操作编码中的第一特定标识,形成一个新的操作编码;对函数参数的处理内容是:通过查找所存储的函数参数列表,将每个可变长度的函数参数的名称转换为函数参数列表中与此函数参数的名称相对应的记录中固定长度的函数参数的标识,然后将函数参数的标识、函数参数的数值和新的操作编码一起发送给与子解析模块相对应的应用模块;⑶当操作编码指明接收到CORBA应答报文时,子解析模块将应答报文的函数参数进行标准化处理:通过查找所存储的函数参数列表,将每个可变长度的函数参数的名称转换为函 数参数列表中与此函数参数的名称相对应的记录中固定长度的函数参数的标识,然后将函数参数的标识、函数参数的数值和操作编码一起发送给与子解析模块相对应的应用模块;③子封装模块接收与之对应的应用模块传递过来的数据,将数据按照CORBA报文的格式进行标准化处理后,传递给互连模块;具体过程为:子封装模块从应用模块接收到操作编码以后,根据操作编码判断要封装的是CORBA请求报文还是CORBA应答报文:⑴当操作编码指明要封装CORBA请求报文,且请求调用的函数名称为公有函数名称时,子封装模块将对函数参数进行标准化处理:通过查找所存储的函数参数列表,将每个固定长度的函数参数的标识转换为函数参数列表中与此函数参数的标识相对应的记录中可变长度的函数参数的名称,并按照CORBA协议所规定的格式与函数参数的数值共同组合成函数参数,然后与操作编码一起传递给互连模块;⑵当操作编码指明要封装CORBA请求报文,且请求调用的函数名称为应用模块的私有函数名称时,子封装模块将对函数名称和函数参数进行标准化处理;对函数名称的处理内容是:子封装模块从接收到的操作编码中获取固定长度的私有函数标识,并在其所存储的私有函数列表中进行查找,找到数据项与所接收到的私有函数标识相同的记录后,使用该记录中的私有函数名称生成CORBA协议规定的函数名称,并使用第一特定标识替换掉原操作编码中的私有函数标识,形成一个新的操作编码;对函数参数的处理是:通过查找所存储的函数参数列表,将每个固定长度的函数参数的标识转换函数参数列表中与此函数参数的标识相对应的记录中可变长度的函数参数的名称,并按照CORBA协议所规定的格式与函数参数的数值共同组合成函数参数,然后与操作编码和函数名称一起传递给互连模块;(3)当操作编码指明要封装CORBA应答报文时,子封装模块通过查找所存储的函数参数列表,将每个固定长度的函数参数的标识转换为函数参数列表中与此函数参数的标识相对应的记录中可变长度的函数参数的名称,并按照CORBA协议所规定的格式与函数参数的数值共同组合成函数参数,然后与操作编码一起传递给互连模块;④主封装模块接收互连模块传递过来的数据,将数据按照CORBA报文的标准格式封装后,发送给外部数据接口;具体过程包括:主封装模块从互连模块接收到操作编码以后,根据操作编码判断要封装的是CORBA请求报文还是CORBA应答报文:⑴当操作编码指明需要封装CORBA请求报文,且请求调用的函数名称为公有函数名称时,主封装模块从接收到的操作编码中提取应答标识和公有函数标识,并在其存储的公有函数列表中进行查找,找到数据项与所接收到的操作编码中除最高位之外表示公有函数标识相 同的记录后,使用该记录中的函数名称生成CORBA协议规定的字符串形式的函数名称,并与接收到的对象键值、请求标识号、函数参数一起,填入CORBA请求报文的标准结构中,并补充GIOP报文头,即“G”、“I”、“O”、“P”四个字节以及主版本号、次版本号、字节顺序、报文类型、报文长度、服务上下文、对齐字节和客户机身份,最终封装为一个完整的CORBA请求报文,发送给外部数据接口;(2)当操作编码指明需要封装CORBA请求报文,且请求调用的函数名称为应用模块的私有函数名称时,主封装模块可以判断出函数名称已经由子封装模块转换完成,此时主封装模块只需从接收到的操作编码中提取应答标识,并与接收到的对象键值、请求标识号、函数参数一起,填入CORBA请求报文的标准结构中,并补充GIOP报文头,即“G”、“I”、“O”、“P”四个字节以及主版本号、次版本号、字节顺序、报文类型、报文长度、服务上下文、对齐字节和客户机身份,最终封装为一个完整的CORBA请求报文,发送给外部数据接口;(3)当操作编码指明需要封装CORBA应答报文时,主封装模块只需从接收到的操作编码中提取应答状态,并与接收到的请求标识号、函数参数一起,填入CORBA应答报文的标准结构中,并补充GIOP报文头,即“G”、“I”、“O”、“P”四个字节以及主版本号、次版本号、字节顺序、报文类型、报文长度、服务上下文、对齐字节和客户机身份,最终封装为一个完整的CORBA应答报文,发送给外部数据接口;⑤互连模块接收来自主解析模块或子封装模块的数据,通过操作编码判断接收到的是请求报文的相关数据还是应答报文的相关数据,在此基础上完成对数据的标准化处理之后转发给子解析模块或主封装模块;具体处理过程包括:⑴当接收到主解析模块发出的请求报文的相关数据时,互连模块根据接收到的应用模块地址,将接收到的操作编码、函数参数和函数名称转发给相应的子解析模块;与此同时,将接收到的请求标识号与应用模块地址的映射关系存储下来;⑵当接收到子封装模块发出的请求报文的相关数据时,互连模块将为该函数调用请求生成一个请求标识号,并将请求标识号与应用模块地址的映射关系存储下来,同时通过查询预先定义的路由表,可得到该子封装模块发出的函数调用请求将要到达的目的应用模块的对象键值,然后将接收到的操作编码、函数参数和函数名称与对象键值和新生成的请求标识号一起发送给主封装模块;⑶当接收到主解析模块发出的应答报文的相关数据时,互连模块将在所存储的一系列请求标识号与应用模块地址的映射关系中查找与主解析模块发出的请求标识号相同的记录,并根据此记录中的应用模块地址确定该应答报文数据所要到达的目的应用模块,然后将接收到的操作编码、函数参数转发给与该应用模块对应的子解析模块;⑷当接收到子封装模块发出的应答报文的相关数据时,互连模块将在所存储的一系列请求标识号与应用模块地址的映射关系中查找与该子封装模块所对应的应用模块地址相同的记录,并从此记录中获取该应答报文所需的请求标识号,然后将接收到的操作编码、函数参数与请求标识号一起发送给主封装模块。
地址 410073 湖南省长沙市开福区德雅路109号