CN111814972B - 一种基于fpga的神经网络卷积运算加速方法 - Google Patents
一种基于fpga的神经网络卷积运算加速方法 Download PDFInfo
- Publication number
- CN111814972B CN111814972B CN202010652922.6A CN202010652922A CN111814972B CN 111814972 B CN111814972 B CN 111814972B CN 202010652922 A CN202010652922 A CN 202010652922A CN 111814972 B CN111814972 B CN 111814972B
- Authority
- CN
- China
- Prior art keywords
- multipliers
- adders
- neural network
- fpga
- convolution operation
- 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
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 24
- 230000001133 acceleration Effects 0.000 title claims abstract description 23
- 238000000034 method Methods 0.000 title claims abstract description 20
- 238000004364 calculation method Methods 0.000 abstract description 16
- 238000013135 deep learning Methods 0.000 abstract description 3
- 238000009825 accumulation Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 230000000737 periodic effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明涉及到深度学习硬件加速技术领域,尤其涉及到一种基于FPGA的神经网络卷积运算加速方法。包括使用9个乘法器IP core,在设置时选择调用DSP资源,以3个乘法器为一组,使用两级加法器将三个乘法器的输出结果相加,两级加法器的输出数据送入累加器中,最后再将三个累加器的结果通过后面额外设置的两级加法器再次相加,完成运算加速。本发明可以同时兼容3x3和1x1的卷积核计算,相比于其他方案,它的优点在于节省布线资源和寄存器的使用数量,逻辑也相对简单,并且实现了全流水的操作提高了模块的计算效率。
Description
技术领域
本发明涉及到深度学习硬件加速技术领域,尤其涉及到一种基于FPGA的神经网络卷积运算加速方法。
背景技术
随着深度学习技术的发展,各种图像处理的神经网络纷纷出现,但是在这些网络中经常不可避免要对图像做卷积运算,用于提取图像的特征,多层卷积能够提取更加复杂的图像特征。在现场可编程逻辑门阵列(FieldProgrammableGateArray,以下简称FPGA)上实现卷积运算模块的方法比如有使用FPGA中的DSPslice单元,在数据输入DSP之前需要经过多路选择结构,在DSP内部实现乘法和加法,然后再将DSP的输出结果经过外部的多路选择结构输出,由乘累加器和多路复用结构组成一个计算单元,这样的一个计算单元负责一张输入特征图与一个卷积核的卷积运算。以上实现方法虽然实现了卷积运算的功能,但是对于要在单块FPGA芯片上实现一个完整的神经网络而言,节约硬件资源使用量和提高效率是需要重点考虑的方面,以上提到的方法对LUT资源和寄存器资源的使用量较大,尤其是为了提高网络的运行速度时,增加同时计算的卷积核数量,资源的增加尤其是寄存器的使用量将可能导致布线失败,而且一个乘累加器要负责一个卷积核的运算,当卷积核比较大时,计算的效率明显不够高。
发明内容
为了节约更多的寄存器和布线资源的同时提高计算效率,本发明提供了一种基于FPGA的神经网络卷积运算加速方法,其是一种在FPGA上基于DSPslice单元的卷积运算实现方案,该方案一个卷积核需要使用9个DSPslice单元,同时可以兼容卷积核大小为3x3和1x1的计算,可以控制实现多通道的神经网络卷积运算。
一种基于FPGA的神经网络卷积运算加速方法,其特征在于,所述方法包括:
使用9个乘法器IPcore,在设置时选择调用DSP资源,以3个乘法器为一组,使用两级加法器将三个乘法器的输出结果相加,两级加法器的输出数据送入累加器中,最后再将三个累加器的结果通过后面额外设置的两级加法器再次相加,完成运算加速。
本发明技术方案中,上述的基于FPGA的神经网络卷积运算加速方法,其特征在于,两级加法器IPcore共计设置有三组,每组设置有两个加法器。
本发明技术方案中,上述的基于FPGA的神经网络卷积运算加速方法,其特征在于,累加器设置有三个,分别对应至三组的两级加法器IPcore中。
本发明技术方案中,上述的基于FPGA的神经网络卷积运算加速方法,其特征在于,后面额外设置的两级加法器中也包括有两个加法器。
本发明技术方案中,上述的基于FPGA的神经网络卷积运算加速方法,其特征在于,乘法器IPcore前端设置有FM送数模块和权重缓存模块,所述FM送数模块实现特征图输出功能,所述权重缓存模块实现读使能与地址信号输出功能。
本发明技术方案中,上述的基于FPGA的神经网络卷积运算加速方法,其特征在于,所述乘法器IPcore与各所述加法器共同构成乘累加器。
上述技术方案具有如下优点或有益效果:
本发明基于FPGA的神经网络卷积运算加速方案,可以同时兼容3x3和1x1的卷积核计算,相比于其他方案,它的优点在于节省布线资源和寄存器的使用数量,逻辑也相对简单,并且实现了全流水的操作提高了模块的计算效率,按照同样的思路,一个卷积核内部的乘法器数量可以继续增加,以实现对更多类型卷积核大小的兼容。由于乘法器调用了DSP资源,因此节省了布线资源和LUT的使用,简化了逻辑,由于DSP的周期配置使用的是内部的资源,所以在一定程度上也节省了寄存器。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明及其特征、外形和优点将会变得更加明显。在全部附图中相同的标记指示相同的部分。并未可以按照比例绘制附图,重点在于示出本发明的主旨。
图1是本发明技术方案神经网络卷积运算流程图;
图2是乘累加器以及多路选择结构组合的神经网络卷积运算结构图;
图3是卷积核大小为3x3的卷积运算示例图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
当需要在一块性价比较高的FPGA芯片中实现一个完整的神经网络的时候,开发的各个模块在实现对应功能的前提下尽可能节约芯片内部资源的使用量并且使模块的运行效率尽可能高是两项需要重点追求的目标。当卷积计算模块一次需要计算的卷积核数量很多时,寄存器资源和布线压力将会比较大,为了节约寄存器的使用量和LUT使用量,同时简化计算逻辑,提高计算效率,提出一种新的卷积计算模块架构。
如图1和图2所示,本发明提供了一种基于FPGA的神经网络卷积运算加速方法,具体包括为:
使用9个乘法器IPcore,在设置时选择调用DSP资源,以3个乘法器为一组,使用两级加法器将三个乘法器的输出结果相加,两级加法器的输出数据送入累加器中,最后再将三个累加器的结果通过后面额外设置的两级加法器再次相加,完成运算加速。
本发明技术方案中,两级加法器IPcore共计设置有三组,每组设置有两个加法器;累加器设置有三个,分别对应至三组的两级加法器IPcore中。
优选的,后面额外设置的两级加法器中也包括有两个加法器,本发明中两级加法器中至少有一个加法器连接有寄存器,乘法器IP core与各加法器共同构成乘累加器。
本发明技术方案中,乘法器IPcore前端设置有FM送数模块和权重缓存模块,所述FM送数模块实现特征图输出功能,权重缓存模块实现读使能与地址信号输出功能。
图2中,MAC即乘累加器,单独的乘累加器负责一个卷积核和一张输入特征图的卷积运算,其中,F0-FN与W0-WN分别是FM送数模块的特征图输出与权重缓存模块的读使能与地址信号输出。
如图3所示,本方案是针对卷积神经网络中卷积计算模块的一个卷积核计算而提出的,如果要同时计算多个卷积核,将这个模块并行复制多份就可以。这个模块可以同时兼容3x3的卷积核和1x1的卷积核计算。
运行原理:
3x3运行原理:一个3x3的卷积核需要把一张图片中9个点的数据和同一通道的权重对应相乘,然后将得到的9个乘积相加,完成一个通道的卷积计算(附图3,窗口滑动步长为1),根据有多少个通道,完成多少次同样的计算。9个乘法器分别完成9个点对应的乘积计算,乘法器输出结果相加是将乘积每三个为一组进行相加,累加器是为了完成通道累加,通道累加的结果再相加是为了完成一个3x3窗口的加法,该结果已经是所有通道累加的结果。
1x1运行原理:一个1x1的卷积核需要把一张图片中每个点的数据和同一通道的权重对应相乘,然后再将所有通道累加,就完成了1x1的卷积计算。9个乘法器是为了完成9个通道的累加,如果通道数是偶数,可以补充通道数到9的倍数,补充的通道相乘后的结果为0即可,如果通道数大于9,可以控制后续的累加器完成更多通道的累加,这样一来,累加器后的加法器也是完成通道累加。
本发明基于FPGA的神经网络卷积运算加速方案,可以同时兼容3x3和1x1的卷积核计算,相比于其他方案,它的优点在于节省布线资源和寄存器的使用数量,逻辑也相对简单,并且实现了全流水的操作提高了模块的计算效率,按照同样的思路,一个卷积核内部的乘法器数量可以继续增加,以实现对更多类型卷积核大小的兼容。由于乘法器调用了DSP资源,因此节省了布线资源和LUT的使用,简化了逻辑,由于DSP的周期配置使用的是内部的资源,所以在一定程度上也节省了寄存器。
本领域技术人员应该理解,本领域技术人员在结合现有技术以及上述实施例可以实现所述变化例,在此不做赘述。这样的变化例并不影响本发明的实质内容,在此不予赘述。
以上对本发明的较佳实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,其中未尽详细描述的设备和结构应该理解为用本领域中的普通方式予以实施;任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,都可利用上述揭示的方法和技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例,这并不影响本发明的实质内容。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
Claims (2)
1.一种基于FPGA的神经网络卷积运算加速方法,其特征在于,所述方法包括:使用9个乘法器IP core,在设置时选择调用DSP资源,以3个乘法器为一组,使用两级加法器将三个乘法器的输出结果相加,两级加法器的输出数据送入累加器中,最后再将三个累加器的结果通过后面额外设置的两级加法器再次相加,完成运算加速,两级加法器共计设置有三组,每组设置有两个加法器,累加器设置有三个,分别对应至三组的两级加法器IP core中,后面额外设置的两级加法器中也包括有两个加法器,所述乘法器IP core与各所述加法器共同构成乘累加器。
2.根据权利要求1所述的基于FPGA的神经网络卷积运算加速方法,其特征在于,乘法器IP core前端设置有FM送数模块和权重缓存模块,所述FM送数模块实现特征图输出功能,所述权重缓存模块实现读使能与地址信号输出功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010652922.6A CN111814972B (zh) | 2020-07-08 | 2020-07-08 | 一种基于fpga的神经网络卷积运算加速方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010652922.6A CN111814972B (zh) | 2020-07-08 | 2020-07-08 | 一种基于fpga的神经网络卷积运算加速方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111814972A CN111814972A (zh) | 2020-10-23 |
CN111814972B true CN111814972B (zh) | 2024-02-02 |
Family
ID=72842630
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010652922.6A Active CN111814972B (zh) | 2020-07-08 | 2020-07-08 | 一种基于fpga的神经网络卷积运算加速方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111814972B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112434801B (zh) * | 2020-10-30 | 2022-12-09 | 西安交通大学 | 一种按照比特精度进行权重拆分的卷积运算加速方法 |
CN113672196B (zh) * | 2021-07-16 | 2023-09-15 | 南京大学 | 一种基于单数字信号处理单元的双乘法计算装置和方法 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20100023123A (ko) * | 2008-08-21 | 2010-03-04 | 광운대학교 산학협력단 | 컨볼루션 곱셈결과의 재사용을 위한 역방향 이산 웨이블릿 변환기의 2단 파이프라인 및 버퍼 관리 방법 |
CN102681815A (zh) * | 2012-05-11 | 2012-09-19 | 深圳市清友能源技术有限公司 | 用加法器树状结构的有符号乘累加算法的方法 |
EP2860874A1 (en) * | 2013-10-14 | 2015-04-15 | Syntropy Systems | Apparatuses and methods for linear to discrete quantization conversion with reduced sampling-variation errors |
CN106127302A (zh) * | 2016-06-23 | 2016-11-16 | 杭州华为数字技术有限公司 | 处理数据的电路、图像处理系统、处理数据的方法和装置 |
CN106203621A (zh) * | 2016-07-11 | 2016-12-07 | 姚颂 | 用于卷积神经网络计算的处理器 |
CN106504182A (zh) * | 2016-11-02 | 2017-03-15 | 山东正晨科技股份有限公司 | 一种基于fpga的直线特征提取系统 |
WO2018107476A1 (zh) * | 2016-12-16 | 2018-06-21 | 华为技术有限公司 | 访存设备、计算设备和应用于卷积神经网络运算的设备 |
CN108255463A (zh) * | 2017-12-28 | 2018-07-06 | 深圳市紫光同创电子有限公司 | 一种数字逻辑运算方法、电路和fpga芯片 |
CN109657323A (zh) * | 2018-12-13 | 2019-04-19 | 上海集成电路研发中心有限公司 | 一种小波重构加速电路 |
CN109828744A (zh) * | 2019-01-18 | 2019-05-31 | 东北师范大学 | 一种基于fpga的可配置浮点向量乘法ip核 |
CN110135554A (zh) * | 2019-03-25 | 2019-08-16 | 电子科技大学 | 一种基于fpga的卷积神经网络硬件加速架构 |
CN110765413A (zh) * | 2018-07-25 | 2020-02-07 | 赛灵思公司 | 矩阵求和结构及神经网络计算平台 |
CN110765906A (zh) * | 2019-10-12 | 2020-02-07 | 上海雪湖科技有限公司 | 一种基于关键点的行人检测算法 |
CN111178518A (zh) * | 2019-12-24 | 2020-05-19 | 杭州电子科技大学 | 一种基于fpga的软硬件协同的加速方法 |
CN111242277A (zh) * | 2019-12-27 | 2020-06-05 | 中国电子科技集团公司第五十二研究所 | 一种基于fpga设计的支持稀疏剪枝的卷积神经网络加速器 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10445065B2 (en) * | 2017-09-08 | 2019-10-15 | National Technology & Engineering Solutions Of Sandia, Llc | Constant depth, near constant depth, and subcubic size threshold circuits for linear algebraic calculations |
US10841577B2 (en) * | 2018-02-08 | 2020-11-17 | Electronics And Telecommunications Research Institute | Method and apparatus for video encoding and video decoding based on neural network |
US10853034B2 (en) * | 2018-03-30 | 2020-12-01 | Intel Corporation | Common factor mass multiplication circuitry |
KR20200081044A (ko) * | 2018-12-27 | 2020-07-07 | 삼성전자주식회사 | 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치 |
-
2020
- 2020-07-08 CN CN202010652922.6A patent/CN111814972B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20100023123A (ko) * | 2008-08-21 | 2010-03-04 | 광운대학교 산학협력단 | 컨볼루션 곱셈결과의 재사용을 위한 역방향 이산 웨이블릿 변환기의 2단 파이프라인 및 버퍼 관리 방법 |
CN102681815A (zh) * | 2012-05-11 | 2012-09-19 | 深圳市清友能源技术有限公司 | 用加法器树状结构的有符号乘累加算法的方法 |
EP2860874A1 (en) * | 2013-10-14 | 2015-04-15 | Syntropy Systems | Apparatuses and methods for linear to discrete quantization conversion with reduced sampling-variation errors |
CN106127302A (zh) * | 2016-06-23 | 2016-11-16 | 杭州华为数字技术有限公司 | 处理数据的电路、图像处理系统、处理数据的方法和装置 |
CN106203621A (zh) * | 2016-07-11 | 2016-12-07 | 姚颂 | 用于卷积神经网络计算的处理器 |
CN106504182A (zh) * | 2016-11-02 | 2017-03-15 | 山东正晨科技股份有限公司 | 一种基于fpga的直线特征提取系统 |
WO2018107476A1 (zh) * | 2016-12-16 | 2018-06-21 | 华为技术有限公司 | 访存设备、计算设备和应用于卷积神经网络运算的设备 |
CN108255463A (zh) * | 2017-12-28 | 2018-07-06 | 深圳市紫光同创电子有限公司 | 一种数字逻辑运算方法、电路和fpga芯片 |
CN110765413A (zh) * | 2018-07-25 | 2020-02-07 | 赛灵思公司 | 矩阵求和结构及神经网络计算平台 |
CN109657323A (zh) * | 2018-12-13 | 2019-04-19 | 上海集成电路研发中心有限公司 | 一种小波重构加速电路 |
CN109828744A (zh) * | 2019-01-18 | 2019-05-31 | 东北师范大学 | 一种基于fpga的可配置浮点向量乘法ip核 |
CN110135554A (zh) * | 2019-03-25 | 2019-08-16 | 电子科技大学 | 一种基于fpga的卷积神经网络硬件加速架构 |
CN110765906A (zh) * | 2019-10-12 | 2020-02-07 | 上海雪湖科技有限公司 | 一种基于关键点的行人检测算法 |
CN111178518A (zh) * | 2019-12-24 | 2020-05-19 | 杭州电子科技大学 | 一种基于fpga的软硬件协同的加速方法 |
CN111242277A (zh) * | 2019-12-27 | 2020-06-05 | 中国电子科技集团公司第五十二研究所 | 一种基于fpga设计的支持稀疏剪枝的卷积神经网络加速器 |
Also Published As
Publication number | Publication date |
---|---|
CN111814972A (zh) | 2020-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109886400B (zh) | 基于卷积核拆分的卷积神经网络硬件加速器系统及其计算方法 | |
US11720523B2 (en) | Performing concurrent operations in a processing element | |
CN108229645B (zh) | 卷积加速和计算处理方法、装置、电子设备及存储介质 | |
CN109522052B (zh) | 一种计算装置及板卡 | |
CN109409511B (zh) | 一种用于动态可重构阵列的卷积运算数据流调度方法 | |
CN111814972B (zh) | 一种基于fpga的神经网络卷积运算加速方法 | |
CN103294446B (zh) | 一种定点乘累加器 | |
CN107862378A (zh) | 基于多核的卷积神经网络加速方法及系统、存储介质及终端 | |
WO2022037257A1 (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
CN109284824B (zh) | 一种基于可重构技术的用于加速卷积和池化运算的装置 | |
CN111626405B (zh) | 一种cnn加速方法、加速装置及计算机可读存储介质 | |
CN110147252A (zh) | 一种卷积神经网络的并行计算方法及装置 | |
CN111767994A (zh) | 一种神经元计算模块 | |
CN111931925A (zh) | 基于fpga的二值化神经网络的加速系统 | |
CN111008691B (zh) | 一种权值和激活值都二值化的卷积神经网络加速器架构 | |
WO2022151779A1 (zh) | 卷积运算的实现方法、数据处理方法及装置 | |
CN111222090B (zh) | 卷积计算模块、神经网络处理器、芯片和电子设备 | |
CN116090530A (zh) | 可配置卷积核大小和并行计算数目的脉动阵列结构及方法 | |
CN113128673B (zh) | 数据处理方法、存储介质、神经网络处理器及电子设备 | |
CN111445019B (zh) | 一种分组卷积中通道混洗操作的实现装置及方法 | |
CN110751263B (zh) | 一种高并行度的卷积运算取数方法和电路 | |
US20230039892A1 (en) | Operation apparatus | |
CN108255463A (zh) | 一种数字逻辑运算方法、电路和fpga芯片 | |
Do et al. | A high-accuracy and high-speed 2-D 8x8 discrete cosine transform design | |
CN114185014A (zh) | 一种应用于雷达信号处理的并行卷积方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |