CN103473426B - 基于嵌入式***框架的星载相控阵信号处理架构设计方法 - Google Patents
基于嵌入式***框架的星载相控阵信号处理架构设计方法 Download PDFInfo
- Publication number
- CN103473426B CN103473426B CN201310436879.XA CN201310436879A CN103473426B CN 103473426 B CN103473426 B CN 103473426B CN 201310436879 A CN201310436879 A CN 201310436879A CN 103473426 B CN103473426 B CN 103473426B
- Authority
- CN
- China
- Prior art keywords
- processor
- data
- state
- data processor
- class
- 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.)
- Active
Links
Landscapes
- Radar Systems Or Details Thereof (AREA)
Abstract
一种基于嵌入式***框架的星载相控阵信号处理架构设计方法,将信号处理的硬件架构进行功能的划分,分成数据处理模块和控制通信模块,利用统一建模语言UML建立状态控制处理器的状态控制流程,充分利用Rhapsody的中断驱动框架的状态跳转优势,将星载相控阵雷达处理机的功能进行状态分解,同时将状态跳转和数据处理分离,充分利用面向对象的思想,实现数据处理的流水形式,提高了数据处理速度,同时提高了代码的可维护性,可扩展性和可移植性。
Description
技术领域
本发明涉及一种基于嵌入式***框架的星载相控阵信号处理架构设计方法,尤其涉及一种基于Rhapsody嵌入式***框架的星载相控阵信号处理架构设计方法。
背景技术
随着星载相控阵雷达信号处理***的需求日益增加,***的功能及复杂程度不断加大,软件质量已经成为影响产品性能的关键因素。继续采用纯手工、小规模封闭式的开发不可重用的软件方式将越来越难以满足客户对软件的需求,软件开发的自动化将成为未来软件发展的趋势。
目前国内外对星载相控阵雷达处理机的架构的研究比较广泛和深入,传统的结构化编程思路已广泛的应用于星载相控阵雷达处理机的软件设计当中。但当需要维护和重新运用以前的软件代码到新的产品中,大量的累同功能需要重新编码,无法满足当前的开发进度需求。
目前国内有论文题目为“基于Rhapsody的雷达仿真***实现”和“基于Rhapsody的嵌入式无人机飞控软件***建模与验证”,但其应用领域均在雷达仿真和无人机领域,没有将其应用到星载相控阵领域,同时也未利用Rhapsody自身的中断驱动框架进行开发。
由于星载相控阵雷达的快速发展,更多的雷达功能在数字化领域表现为类似的软件代码和相同的数据处理方法。如何让这些相似的代码和方法统一于一个通用的框架使得未来雷达信号处理机的软件开发专注于功能扩展而非如今的重复编码成为了一个亟待解决的问题。同时随着星载相控阵雷达所具备的功能越来越多,软件日趋复杂,因此采用原有的结构化编程难以集成形成一个较为复杂的***。
发明内容
本发明提供一种基于嵌入式***框架的星载相控阵信号处理架构设计方法,充分利用Rhapsody的中断驱动框架的状态跳转优势,将星载相控阵雷达处理机的功能进行状态分解,同时将状态跳转和数据处理分离,充分利用面向对象的思想,实现数据处理的流水形式,提高了数据处理速度,同时提高了代码的可维护性,可扩展性和可移植性。
为了达到上述目的,本发明提供一种基于嵌入式***框架的星载相控阵信号处理架构设计方法,该方法包含以下步骤:
步骤1、将信号处理的硬件架构进行功能的划分,划分成数据处理模块和控制通信模块;
控制通信模块充分利用Rhapsody嵌入式***自带的UML模块化语言,设计雷达处理机完成任务所需要的任务状态图,而数据处理模块则利用硬件的流水结构充分提高数据处理的实时性,整个框架引入消息等待机制,使得两大模块协调共存,有序工作;
步骤2、利用统一建模语言UML建立状态控制处理器的状态控制流程,对星载相控阵雷达进行功能划分,进行状态机的控制;
步骤3、利用中断驱动框架IDF与硬件的接口函数实现与相应的硬件的适配能力,使得UML语言能够运行于具体的硬件结构中;
步骤4、建立消息驱动机制,即利用消息循环队列,同过收发消息的形式实现握手通信,利用通过状态控制处理器自身的链路口发过来的链路口信息进行解析,数据处理器根据外部状态和数据解析结果,对进行数据处理的数据处理器进行消息响应机制的编码,使其实现响应状态控制的数据处理请求的基本功能,实现状态控制处理器对外设设备的控制;
步骤5、结合中断驱动框架,应用Rhapsody嵌入式***自动生成代码,使其运行于状态控制处理器当中。
本发明的有益效果:
1、手工输入的代码明显减少,按照UML建模的规范建立了图形化的***模型,自动生成70%以上的代码;
2、数据处理模块应用了流水结构,***实时性得到较大的提高;
3、程序框架可扩展性强,当软件功能需要改动时,仅需要在状态管理模块调整状态跳转形式便可;
4、程序框架可继承性强,当后期星载相控阵雷达项目中可以继承大部分的程序代码,有效避免了重复开发。
附图说明
图1是本发明所涉及的硬件原理框图;
图2是星载相控阵信号处理机中状态控制模块的顶层UML结构图;
图3是本发明的框架与硬件之间的层次结构关系;
图4是软件框架中的两个类与***设备的交互关系图;
图5是信号处理模块任务分配图。
具体实施方式
以下根据图1~图5,具体说明本发明的较佳实施例。
本发明提供一种基于嵌入式***框架的星载相控阵信号处理架构设计方法,该方法包含以下步骤:
步骤1、将信号处理的硬件架构进行功能的划分,划分成数据处理模块和控制通信模块。
控制通信模块主要完成工作状态控制、收发时序控制以及与上位机和其它处理器之间的通信等功能;而数据处理模块则完成脉压、检测等雷达数据处理的功能。
控制通信模块充分利用Rhapsody嵌入式***自带的UML模块化语言,设计雷达处理机完成任务所需要的任务状态图,而数据处理模块则利用硬件的流水结构充分提高数据处理的实时性,整个框架引入消息等待机制,使得两大模块协调共存,有序工作。
数据处理模块包含数据处理器Ⅰ,数据处理器Ⅱ和数据处理器Ⅲ,控制通信模块包含接口处理器和状态控制处理器。
如图1所示,整个框架包含三类功能的处理器DSP:第一类是接口处理器,主要负责对***设备的通信,并将通信信息与状态控制处理器进行交互;第二类是状态控制处理器,主要负责雷达状态处理机的状态跳转并向下游的数据处理器发起相应的消息指令;第三类是数据处理器,主要负责信号的处理,数据的处理,信息的处理,数据处理器采用流水结构,提高数据处理的实时性。
接口处理器和状态控制处理器之间传输数据,控制信号和指令,状态控制处理器和数据处理器Ⅰ,数据处理器Ⅱ,数据处理器Ⅲ传输消息,数据处理器Ⅰ和数据处理器Ⅱ传输消息和数据,数据处理器Ⅱ和数据处理器Ⅲ传输消息和数据。
本实施例中,将三个流水排列的TS201作为数据处理器,将Altera公司生产的EP3C80F484I7作为接口处理器,状态控制处理器也选用TS201;
步骤2、利用统一建模语言UML建立状态控制处理器的状态控制流程,对星载相控阵雷达进行功能划分,进行状态机的控制。
基于Rhapsody嵌入式***内置的UML状态图编辑器进行状态图的设计,具体状态图的设计与具体星载相控阵的功能相关。
如图2所示,在状态控制处理器内利用UML语言作为建模工具,利用面向对象的方法,将硬件结构中的对象如接口处理器,以及下层的数据处理器进行对象的虚拟化,在可编程逻辑器件类(FPGA类)中虚拟化了接口处理器EP3C80F484I7的对象,同时在接口状态控制类Console中也虚拟了三个数据处理器的对象,完成顶层类图以及对应子类的设计,以及类图下层状态图设计;状态图的状态流转代表了星载相控阵雷达的工作流程流转,该流程设计取决于具体星载相控阵雷达的工作的功能需求。
如图2所示,是星载相控阵信号处理机中状态控制处理器的顶层UML类图,图中主要涉及了两个大类:一个为接口状态控制类(Console类),主要描述信号处理机状态的跳转图,记录当前信处机的工作状态,负责接口处理器内部对星载雷达工作状态的跳转以及负责指令解析的代理人类(Proxy类);另一类为处理类(Proc类)主要描述的是与下层数据处理器的交互信息处理,主要负责信号、数据、信息处理的各数据处理器在接口处理器内映射状态的跳转;两个类相互协同工作实现星载相控阵雷达信号处理机的正常运转。
如图2所示,星载相控阵信号处理机中状态控制处理器的顶层UML类图中还涉及可编程逻辑器件类(FPGA类),主要负责遥测设备,伺服设备的自检以及可编程逻辑器件指令解析,还涉及搜索管理类(SearchMgr),主要负责配置帧设定,波束,工作模式等,还涉及目标信息储存类(CommonSvc),主要负责保存检测到的目标个数,速度,角度等信息,通过“代理人”类产生外部事件,对状态的跳转进行核对,完成整个程序的顶层框架设计,保证在不做任何信号处理的情况下,状态跳转的过程符合实际要求。
步骤3、利用中断驱动框架IDF与硬件的接口函数实现与相应的硬件的适配能力,使得UML语言能够运行于具体的硬件结构中。
接口函数针对任何硬件是通用的,对于不同的硬件,不同点在于实现的不同。
如图3所示,是框架与硬件之间的层次结构关系,应用层为模型自动生成代码,框架层为终端驱动框架,物理层为DSP数据处理器,可编程逻辑器件FPGA等硬件。
本发明中框架开发的基本模式就是在Rhapsody嵌入式***自带的中断驱动框架的基础上进行的,本发明的框架充分利用Rhapsody嵌入式***中UML语言构建状态图的优越性,来进行星载相控阵雷达信处机的工作状态设计,同时降低了代码的编码量。
应用Rhapsody嵌入式***中的中断驱动框架IDF作为应用层的嵌入式框架层,通过更改框架层中与硬件底层(物理层)相关的函数接口代码,从而能够使得整个程序运行于具体的状态控制嵌入式硬件处理器当中。
在本实施例中,状态控制处理器选用TS201,三个与硬件适配的接口函数分别是:
voidRiCEnterCriticalRegion(tRiCCriticalSection*criticalSect);
voidRiCExitCriticalRegion(tRiCCriticalSection*criticalSect);
voidRiCInitTimer();
在RiCEnterCriticalRegion函数内,需要读取相应的中断屏蔽寄存器,并进行相应的定时器操作,RiCExitCriticalRegion也可以进行类似的操作,从而实现IDF框架与底层处理器的适配,RiCInitTimer用于初始化定时器。
步骤4、建立消息驱动机制,即利用消息循环队列,同过收发消息的形式实现握手通信,利用通过状态控制处理器自身的链路口发过来的链路口信息进行解析,数据处理器根据外部状态和数据解析结果,对进行数据处理的数据处理器进行消息响应机制的编码,使其实现响应状态控制的数据处理请求的基本功能,实现状态控制处理器对外设设备的控制。
如图4所示,是状态控制处理器与上位机以及接口处理器之间的交互关系,分别在状态控制处理器的顶层类图下设的各个状态机的跳转函数进行相应的代码开发,实现状态控制处理器对外设设备的控制。
跳转函数指的是状态机内状态跳转的执行过程。
首先在步骤2中建立顶层类图内部的状态转换图,设计具体的跳转函数,最后完成底层代码的具体功能实现,由于在顶层类图中已经虚拟化了FPGA对象,同时在Console类中也虚拟了三个数据处理器的对象,通过建立消息驱动机制,利用链路口通信,将在状态控制处理器中虚拟的数据处理器对象与实际处理器绑定起来,在上述虚拟对象中分别实现了对FPGA的指令发送,代理人对象针对上位机指令生成外部事件从而驱动内部状态机内部状态的推动,产生的外部触发事件可以由Rhapsody提供CGEN函数实现。
如图4所示,将软件框架中的Proxy类与Proc类和Console类与***设备结合起来,框架利用***的可编程逻辑器件向框架中的Proxy类发指令,实现***上位机对内部状态机的通信从而实现对状态机的驱动和控制,同时Proxy类与Proc类和Console类进行消息交互传递,从而实现对下游数据处理器的控制和通信传输,Proxy类的功能是供指令和消息处理函数使用来生成***事件,Proc类的功能是控制并持续处理DSP数据处理器的状态,向Console类返回结果,Console类的功能是顶层状态的管理和下层状态的建立。
步骤5、结合中断驱动框架,应用Rhapsody嵌入式***自动生成代码,使其运行于状态控制处理器当中。
如图5所示,同时在Console对象与Proc对象实现对实际数据处理器的消息传递,从而推动数据处理器内部的函数运转实现雷达信号处理从初始数据处理器Ⅰ的脉冲压缩、幅相校正的功能,及数据处理器Ⅱ的二维平面形成、恒虚警检测的功能,以及最终数据处理器Ⅲ的目标选择、目标信息更新和最终信息输出的功能,从而完成接口处理器对下设三个数据处理器和FPGA的控制,从而完成星载相控阵的信号处理流程。
如图5所示,是三个数据处理器的功能分工,实现信号处理到信息处理的流水结构:数据处理器Ⅰ具有脉冲压缩、幅相校正的功能,处理数据处理器Ⅱ具有二维平面形成、恒虚警率CFAR检测的功能,数据处理器Ⅲ具有目标选择、目标信息更新和最终信息输出的功能;数据处理器之间采用流水处理技术,流水处理技术是利用重复的资源,按资源重复的多少将一个大的任务分为若干个子任务,它们相互关联,然后按一定的顺序安排每个资源执行一个任务,在任务之间关联程度高的多CPU环境中,可采用流水处理技术提高***处理速度,是一种空间换时间的方法。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
Claims (7)
1.一种基于嵌入式***框架的星载相控阵信号处理架构设计方法,其特征在于,该方法包含以下步骤:
步骤1、将信号处理的硬件架构进行功能的划分,划分成数据处理模块和控制通信模块;
控制通信模块充分利用Rhapsody嵌入式***自带的UML模块化语言,设计雷达处理机完成任务所需要的任务状态图,而数据处理模块则利用硬件的流水结构充分提高数据处理的实时性,整个框架引入消息等待机制,使得两大模块协调共存,有序工作;
步骤2、利用统一建模语言UML建立状态控制处理器的状态控制流程,对星载相控阵雷达进行功能划分,进行状态机的控制;
步骤3、利用中断驱动框架IDF与硬件的接口函数实现与相应的硬件的适配能力,使得UML语言能够运行于具体的硬件结构中;
步骤4、建立消息驱动机制,即利用消息循环队列,同过收发消息的形式实现握手通信,利用通过状态控制处理器自身的链路口发过来的链路口信息进行解析,数据处理器根据外部状态和数据解析结果,对进行数据处理的数据处理器进行消息响应机制的编码,使其实现响应状态控制的数据处理请求的基本功能,实现状态控制处理器对外设设备的控制;
步骤5、结合中断驱动框架,应用Rhapsody嵌入式***自动生成代码,使其运行于状态控制处理器当中;
所述的步骤1中,所述的数据处理模块包含数据处理器Ⅰ,数据处理器Ⅱ和数据处理器Ⅲ,控制通信模块包含接口处理器和状态控制处理器;
接口处理器主要负责对***设备的通信,并将通信信息与状态控制处理器进行交互;状态控制处理器主要负责雷达状态处理机的状态跳转并向下游的数据处理器发起相应的消息指令;数据处理器主要负责信号的处理,数据的处理,信息的处理,数据处理器采用流水结构,提高数据处理的实时性;
接口处理器和状态控制处理器之间传输数据,控制信号和指令,状态控制处理器和数据处理器Ⅰ,数据处理器Ⅱ,数据处理器Ⅲ传输消息,数据处理器Ⅰ和数据处理器Ⅱ传输消息和数据,数据处理器Ⅱ和数据处理器Ⅲ传输消息和数据。
2.如权利要求1所述的基于嵌入式***框架的星载相控阵信号处理架构设计方法,其特征在于,所述的步骤2中,基于Rhapsody嵌入式***内置的UML状态图编辑器进行状态图的设计。
3.如权利要求2所述的基于嵌入式***框架的星载相控阵信号处理架构设计方法,其特征在于,所述的步骤2中,在状态控制处理器内利用UML语言作为建模工具,利用面向对象的方法,将硬件结构中的对象进行对象的虚拟化,完成顶层类图以及对应子类的设计,以及类图下层状态图设计。
4.如权利要求3所述的基于嵌入式***框架的星载相控阵信号处理架构设计方法,其特征在于,所述的步骤2中,星载相控阵信号处理机中状态控制处理器的顶层UML类图中主要涉及了两个大类:一个为接口状态控制类,主要描述信号处理机状态的跳转图,记录当前信处机的工作状态,负责接口处理器内部对星载雷达工作状态的跳转以及负责指令解析的代理人类;另一类为处理类,主要描述的是与下层数据处理器的交互信息处理,主要负责信号、数据、信息处理的各数据处理器在接口处理器内映射状态的跳转;两个类相互协同工作实现星载相控阵雷达信号处理机的正常运转。
5.如权利要求4所述的基于嵌入式***框架的星载相控阵信号处理架构设计方法,其特征在于,所述的步骤3中,框架开发的基本模式就是在Rhapsody嵌入式***自带的中断驱动框架的基础上进行的,应用Rhapsody嵌入式***中的中断驱动框架IDF作为应用层的嵌入式框架层,通过更改框架层中与硬件物理层的函数接口代码,从而能够使得整个程序运行于具体的状态控制嵌入式硬件处理器当中。
6.如权利要求1所述的基于嵌入式***框架的星载相控阵信号处理架构设计方法,其特征在于,所述的步骤4中,将软件框架中的Proxy类与Proc类和Console类与***设备结合起来,框架利用***的可编程逻辑器件向框架中的Proxy类发指令,实现***上位机对内部状态机的通信从而实现对状态机的驱动和控制,同时Proxy类与Proc类和Console类进行消息交互传递,从而实现对下游数据处理器的控制和通信传输,Proxy类的功能是供指令和消息处理函数使用来生成***事件,Proc类的功能是控制并持续处理DSP数据处理器的状态,向Console类返回结果,Console类的功能是顶层状态的管理和下层状态的建立。
7.如权利要求1所述的基于嵌入式***框架的星载相控阵信号处理架构设计方法,其特征在于,所述的步骤5中,同时在Console对象与Proc对象实现对实际数据处理器的消息传递,从而推动数据处理器内部的函数运转实现雷达信号处理从初始数据处理器Ⅰ的脉冲压缩、幅相校正的功能,及数据处理器Ⅱ的二维平面形成、恒虚警检测的功能,以及最终数据处理器Ⅲ的目标选择、目标信息更新和最终信息输出的功能,从而完成接口处理器对下设三个数据处理器和FPGA的控制,从而完成星载相控阵的信号处理流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310436879.XA CN103473426B (zh) | 2013-09-24 | 2013-09-24 | 基于嵌入式***框架的星载相控阵信号处理架构设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310436879.XA CN103473426B (zh) | 2013-09-24 | 2013-09-24 | 基于嵌入式***框架的星载相控阵信号处理架构设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103473426A CN103473426A (zh) | 2013-12-25 |
CN103473426B true CN103473426B (zh) | 2016-06-15 |
Family
ID=49798274
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310436879.XA Active CN103473426B (zh) | 2013-09-24 | 2013-09-24 | 基于嵌入式***框架的星载相控阵信号处理架构设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103473426B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104461885B (zh) * | 2014-12-10 | 2017-07-28 | 深圳航天东方红海特卫星有限公司 | 一种基于sparcv7架构处理器的微操作***构建方法 |
CN105866754B (zh) * | 2016-04-25 | 2018-03-30 | 中国人民解放军63908部队 | 一种相控阵雷达部件转换适配装置 |
CN106445649A (zh) * | 2016-10-30 | 2017-02-22 | 合肥微匠信息科技有限公司 | 一种基于面向对象的嵌入式*** |
CN106648617B (zh) * | 2016-11-14 | 2019-10-15 | 南京大学 | 一种基于扩展的uml2序列图的中断驱动***建模方法 |
CN108020821B (zh) * | 2017-12-27 | 2021-06-08 | 成都锐芯盛通电子科技有限公司 | 一种相控阵雷达天线波束控制电路检测***及其实现方法 |
CN114168094A (zh) * | 2021-11-24 | 2022-03-11 | 深圳康佳电子科技有限公司 | 基于可继承状态机的Miracast消息处理方法、装置及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FR2863743B1 (fr) * | 2003-12-16 | 2008-06-13 | Thales Sa | Procede de tracabilite des exigences a partir d'un modele uml |
-
2013
- 2013-09-24 CN CN201310436879.XA patent/CN103473426B/zh active Active
Non-Patent Citations (3)
Title |
---|
UML在实时软件***中的应用研究;王辉等;《计算机应用》;20040228;第24卷(第2期);第161-164页 * |
基于实时UML的雷达软件设计;李海;《现代雷达》;20060830;第28卷(第8期);第47-49页 * |
张寅生.基于Rhapsody的嵌入式无人机飞控软件***建模及验证.《中国优秀硕士学位论文全文数据库 信息科技辑》.2011,(第11期), * |
Also Published As
Publication number | Publication date |
---|---|
CN103473426A (zh) | 2013-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103473426B (zh) | 基于嵌入式***框架的星载相控阵信号处理架构设计方法 | |
Gong et al. | MALOC: A fully pipelined FPGA accelerator for convolutional neural networks with all layers mapped on chip | |
CN117762484A (zh) | 具有可配置空间加速器的处理器、方法和*** | |
JP2021504829A (ja) | ソフトウェア定義された量子コンピュータ | |
Farhat et al. | Stochastic modeling and optimization of stragglers | |
US20150007170A1 (en) | Systems and Methods for Providing Hypercall Interface for Virtual Machines | |
CN102608946A (zh) | 一种plc实验*** | |
CN112463296B (zh) | 一种创建虚拟机的方法及装置 | |
US10171295B2 (en) | Distributed remote execution | |
CN104850527B (zh) | 通讯协议处理器 | |
Lienen et al. | Design of distributed reconfigurable robotics systems with reconros | |
Cai et al. | Deepburning-seg: Generating dnn accelerators of segment-grained pipeline architecture | |
CN113454607A (zh) | 调试方法、装置及片上*** | |
CN102789206A (zh) | 机床数控中集中式和分布式控制混合的安全逻辑控制*** | |
CN201489345U (zh) | 双处理器运动控制卡 | |
Arta et al. | KNOPPIX: Parallel computer design and results comparison speed analysis used AMDAHL theory | |
Cinque et al. | Rpuguard: Real-time processing unit virtualization for mixed-criticality applications | |
CN104299170A (zh) | 间歇性能源海量数据处理方法 | |
CN103761213A (zh) | 基于循环流水计算的片上阵列*** | |
CN201237713Y (zh) | 嵌入式一体化工控机 | |
Naji et al. | Applying multi agent techniques to reconfigurable systems | |
Marchioro et al. | Transformational partitioning for co-design of multiprocessor systems | |
Zhang et al. | An USB-based software CNC system | |
CN102591200A (zh) | 一种fpga控制***开发平台 | |
CN111427687A (zh) | 一种人工智能云平台 |
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 |