CN108427829B - 一种具有公共线结构的fpga - Google Patents

一种具有公共线结构的fpga Download PDF

Info

Publication number
CN108427829B
CN108427829B CN201810134291.1A CN201810134291A CN108427829B CN 108427829 B CN108427829 B CN 108427829B CN 201810134291 A CN201810134291 A CN 201810134291A CN 108427829 B CN108427829 B CN 108427829B
Authority
CN
China
Prior art keywords
common line
combination
common
switch
hierarchy
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
Application number
CN201810134291.1A
Other languages
English (en)
Other versions
CN108427829A (zh
Inventor
陈子贤
王海力
马明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jingwei Qili Beijing Technology Co ltd
Original Assignee
Jingwei Qili Beijing Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jingwei Qili Beijing Technology Co ltd filed Critical Jingwei Qili Beijing Technology Co ltd
Priority to CN201810134291.1A priority Critical patent/CN108427829B/zh
Publication of CN108427829A publication Critical patent/CN108427829A/zh
Application granted granted Critical
Publication of CN108427829B publication Critical patent/CN108427829B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/392Floor-planning or layout, e.g. partitioning or placement

Abstract

本发明涉及FPGA芯片布线结构,包括多个功能模块,一个第一公共线组合,多个第一连线,多个第二连线,多个第一开关组合,其中,多个第一连线用于多个功能模块向第一公共线组合发送数据;第一公共线组合用于多个第一连线向多个第二连线传输数据;多个第二连线用于第一公共线组合向多个功能模块向发送数据;第一公共线组合包含多个第一公共线;每个第一连线通过一个第一开关组合与第一公共线组合中每个第一公共线连接,每个第二连线通过一个第一开关组合与第一公共线组合中每个第一公共线连接。本发明通过增加公共线结构和开关组合,实现功能模块之间的数据传输,节省多个模块之间传输数据的线路。

Description

一种具有公共线结构的FPGA
技术领域
本发明涉及现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA)的芯片结构,尤其涉及芯片布线结构领域。
背景技术
传统FPGA中逻辑模块之间传输数据时,在两个需要传输数据的模块之间,都有金属线连接,多个逻辑模块之间存在大量的用于传输数据的线路,这些线路由于数量过多,导致占用面积过大,功耗过高。
发明内容
本发明的目的在于,解决现有技术中存在的上述不足之处,把功能模块连接到公共线组合上,节省多个模块之间传输数据的线路。
为实现上述目的,本发明提供了一种FPGA芯片,该芯片包括多个功能模块,一个第一公共线组合,多个第一连线,多个第二连线,多个第一开关组合,其中,多个第一连线用于多个功能模块向第一公共线组合发送数据;第一公共线组合用于多个第一连线向多个第二连线传输数据;多个第二连线用于第一公共线组合向多个功能模块向发送数据;第一公共线组合包含多个第一公共线;每个第一连线通过一个第一开关组合与第一公共线组合中每个第一公共线连接,每个第二连线通过一个第一开关组合与第一公共线组合中每个第一公共线连接。
优选地,当第一公共线组合所连接的功能模块中的输出端的个数最大值大于或者等于输入端的个数最大值时,第一公共线组合中第一公共线的个数为输出端的个数最大值;当第一公共线组合所连接的功能模块中的输出端的个数最大值小于输入端的个数最大值时,第一公共线组合中第一公共线的个数为输入端的个数最大值。
优选地,第一开关组合包含多个开关,多个开关的个数等于第一公共线组合中第一公共线的个数。
优选地,一个第一公共线组合,连接在第一公共线组合上的多个功能模块,多个第一连线,多个第二连线,多个第一开关组成一个第一层级体系,该FPGA芯片还包括第二层级,该第二层级包括第二公共线组合和第二开关组合,第二层级用于连接多个第一层级体系。
优选地,第二开关包含多个第一开关组合。
本发明实施例将通过设置公共线结构和开关组合,实现任一功能模块到另一功能模块的数据传输,节省了大量的线路。
附图说明
图1为一种预分配管理器与功能模块的连接示意图;
图2A示出了数据由一个功能模块传给另一个功能模块的一种线路;
图2B示出了数据由一个功能模块传给另一个功能模块的另一种线路;
图2C示出了数据由一个功能模块传给另一个功能模块的另一种线路;
图2D示出了数据由一个功能模块传给另一个功能模块的另一种线路;
图3为在L2中每个L1的跨层级功能模块以及平台功能模块的连接示意图;
图4A示出了2个L1与L1的上一层级L2中第二公共线组合的连线线路;
图4B示出了图4A中第二开关组合的具体连接关系;
图5A示出了一个L1中的跨层级功能模块的数据传输给另一个L1中的跨层级功能模块的一种线路连接;
图5B示出了一个L1中的跨层级功能模块的数据传输给另一个L1中的看层级功能模块的另一种线路连接;
图5C示出了一个L1中的跨层级功能模块的数据传输给另一个L1中的看层级功能模块的另一种线路连接;
图6示出了2个不同L1体系中的普通功能模块之间传输数据的一种连接线路。
具体实施方式
下面结合附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明实施例提供的FPGA芯片,增加公共线结构,通过公共线结构将一个功能模块的数控传输给另一个功能模块。该FPGA芯片包含多个功能模块,多个第一连线,多个第二连线,一个公共线组合,多个第一开关组合,每个第一连线或者第二连线都通过一个第一开关组合与第一公共线组合中的每个公共线连接。以2个功能模块为例,比如功能模块A和功能模块B,第一连线用于将功能模块A的数据传输给第一公共线组合,第一公共线组合用于将第一连线的数据传输给第二连线,第二连线用于将第一公共线组合的数据传输给功能模块B。上述公共线组合和多个第一开关组合为最基础的布线结构,标记为第一层级L1,第一连线,第二连线,功能模块和L1构成L1体系。在这里,功能模块可以是查找表(Loop uptable),记忆块(memory block),MAC,乘法累加器(Multiple Accumulator,MAC)等。
在一个示例中,在L1中,第一公共线组合中第一公共线的数量取决于所有功能模块中输出端和输入端的最大值。例如,L1中有3个功能模块,分别为A,B,C,其中功能模块A有3个输入端,4个输出端;功能模块B有5个输入端,3个输出端;功能模块C有3个输入端,6个输出端。输入端最大值为5,输出端最大值为6,取5和6中的最大值,即第一公共线组合中第一公共线的数量为6。
在一个示例中,L1中每个第一开关组合中的开关数量等于第一公共线组合中第一公共线的数量。
通过上述结构,L1中的功能模块中的每个输出端或者输入端都通过开关组合与L1中的公共线组合中的每根公共线连接,经过第一开关组合,任何一个输出端或者输入端可以连接到公共线组合中的任何一根公共线。
图1示出了在L1中,多个功能模块之间的连接线路。如图1,功能模块A的数据传输给功能模块B时,可以选择功能模块A的任何一个输出端,功能模块B的任何一个输入端,公共线组合中的任何一根公共线。下面通过具体实施例进一步说明方案。在本发明的所有附图中,如果是具体的一种导通线路,导通的连线和开关均以加粗的方式示出。
图2A示出了数据由一个功能模块传给另一个功能模块的线路。在图2A中,功能模块A中的数据经由输出端o1传输给L1层级中的公共线L1_B3,公共线L1_B3再将数据经过功能模块B的输入端in3传输给功能模块B。其中,选择导通公共线L1_B3时,需要将公共线L1_B3与功能模块A中的o1端口之间的开关sw3导通,将公共线L1_B3与功能模块B中的in3端口之间的开关sw3导通。
应当理解,同样是功能模块A的o1端口传输给功能模块B的in3端口,还可以经过其它的公共线传输。
图2B示出了数据由一个功能模块传给另一个功能模块的线路。在图2B中,功能模块A中的数据经由输出端o1传输给L1层级中的公共线L1_B1,公共线L1_B1再将数据经过功能模块B的输入端in3传输给功能模块B。其中,选择导通公共线L1_B1时,需要将公共线L1_B1与功能模块A中的o1端口之间的开关sw1导通,将公共线L1_B1与功能模块B中的in3端口之间的开关sw1导通。与图2A相比较,同样是功能模块A的o1端口和功能模块B的in3端口,但是图2B中导通的是公共线L1_B1。
应当理解,任何一根公共线,可以连通任何一个功能模块的任何一个输出端和任何一个功能模块的输入端。
图2C示出了数据由一个功能模块传给另一个功能模块的线路。在图2C中,功能模块A中的数据经由输出端o0传输给L1层级中的公共线L1_B3,公共线L1_B3再将数据经过功能模块B的输入端in0传输给功能模块B。其中,选择导通公共线L1_B3时,需要将公共线L1_B3与功能模块A中的o0端口之间的开关sw3导通,将公共线L1_B3与功能模块B中的in0端口之间的开关sw3导通。与图2A相比较,同样是公共线L1_B3,但图2C连接的是功能模块A的o0端口和功能模块B的in0端口。
图2D示出了数据由一个功能模块传给另一个功能模块的线路。在图2D中,模块B中的数据经由输出端o1传输给L1层级中的公共线L1_B4,公共线L1_B4再将数据经过功能模块A的输入端in0传输给功能模块B。其中,选择导通公共线L1_B3时,只需要将公共线L1_B4与功能模块B中的o1端口之间的开关sw4导通,将公共线L1_B4与功能模块A中的in0端口之间的开关sw4导通。与图2A相比较,图2D示出了功能模块A接收功能模块B的数据的连接线路。
在这里,应当理解,FPGA中还包含一个静态寄存阵列存储器(Static RegistorArray Memory,SRAM)来控制相应开关组合中的开关的选通,保证每次导通一条线路时,第一公共线组合两端所连接的端口只有一种情况:一端连接功能模块的输出端,另一端连接功能模块的输入端;同时保证每个第一开关组合中最多可以导通一个开关。为了便于说明本发明的重点,在本发明的附图中,没有示出上述SRAM。
当FPGA中存在多个L1体系时,本发明实施例提供第二层级L2,包含一个第二公共线组合和一个第二开关组合,该第二开关组合包括多个第一开关组合,该第二层级L2用于连接多个L1体系,例如,一种FPGA芯片,包含一个L2,多个L1体系,L2包含一个第二公共线组合,以及一个第二开关组合,一个L2和多个L1体系构成一个L2体系。其中在上述L1体系中描述的功能模块都是普通的功能模块,在每个L1中设置一个跨层级功能模块,该跨层级功能模块与普通功能模块的区别在于,每个跨层级功能模块都有至少一个输出端和至少一个输入端连接L2。L2与多个L1体系共同构成L2体系。
下面通过具体实施例和附图进一步说明L2体系的结构。
图3为L2中每个L1的跨层级功能模块以及普通功能模块的连接示意图。如图3所示,跨层级功能模M1块有2个输出端o0和o1连接第二开关组合的2个输入端S1和S2,有2个输入端in0和in1连接L2层级的公共线组合,而其它输入端和输出端都通过第一开关组合连接第一公共线组合。
图4A示出了2个L1体系与L1的上一层级L2的连接线路。为方便说明本发明的重点,L1体系中的普通功能模块并未示出,每个L1体系中的跨层级功能模块M1分别有2个输出端连接第二开关组合,每个L1体系中的跨层级功能模块M1分别有2个输入端连接L2层级中的公共线组合。
图4B示出了图4A中的具体连接关系。如图4B所示,每个跨功能模块中连接第二开关组合的输出端连接开关组合的输入端S1、S2、S3、S4,输入端连接L2中的公共线组合,第二开关组合的输出单分别连接L2中的公共线组合。
在图4B中,第二开关组合的任何一个输入端的数据,都可以经由第二开关组合的任何一个输出端输出,而第二开关组合的输出端分别连接L2中的公共线组合,所以任何一个L1体系中的M1的数据都可以经过第二开关组合传输到L2中的公共线组合中。每个L1体系中的跨层级功能模块都有2个输入端连接L2中的公共线组合,L2中的公共线组合中的数据可以传输到任何一个L1体系中的跨层级功能模块。所以任何一个L1体系中的跨层级功能模块的数据可以经由第二开关组合以及L2中公共线组合传输给任何一个L1体系中的跨层级功能模块。
图5A示出了一个L1体系中的跨层级功能模块的数据传输给另一个L1体系中的跨层级功能模块的线路连接。如图5A所示,一个L1体系中的跨层级功能模块M1的数据传输给另一个L1体系中的跨层级功能模块M2。其中,M1的数据经过输出端o1传给第二开关组合中的输入端S2,在第二开关组合中选通输入端S2所连接的第一开关组合中的开关sw1,以及输出端SO4,经过输出端SO4连接到第二公共线组合上的公共线L2_B1,公共线L2_B1在将数据传输给M2中的输入端in1。
图5B示出了一个L1体系中的跨层级功能模块的数据传输给另一个L1体系中的跨层级功能模块的另一种线路连接。如图5B所示,一个L1体系中的中的跨层级功能模块M1的数据传输给另一个L1体系中的跨层级功能模块M2。其中,M1的数据经过输出端o1传给第二开关组合中的输入端S2,在第二开关组合中选通输入端S2所连接的第一开关组合中的开关sw2,以及输出端SO3,经过输出端SO3连接到第二公共线组合上的公共线L2_B2,公共线L2_B2在将数据传输给M2中的输入端in0。
图5C示出了一个L1体系中的跨层级功能模块的数据传输给另一个L1体系中的跨层级功能模块的线路连接。如图5C所示,一个L1体系中的跨层级功能模块M1接收另一个L1体系中的跨层级功能模块M2的数据。其中,M2的数据经过输出端o1传给第二开关组合中的输入端S4,在第二开关组合中选通输入端S4所连接的第一开关组合中的开关sw4,以及输出端SO1,经过输出端SO1连接到第二公共线组合上的公共线L2_B4,公共线L2_B4在将数据传输给M1中的输入端in0。与图5A相比,图5C示出了M1接收M2的数据的连接线路。
前面已经说明了在同一L1体系中,任何一个功能模块的数据经由输出端可以传输给任何一个功能模块的输入端,所以2个不同的L1体系中的2个普通功能模块可以传输数据。图6示出了2个不同L1体系中的普通功能模块之间传输数据的一种连接线路。例如2个不同的L1体系中的2个普通功能模块M1和M2之间传输数据如图6所示出的线路传输:普通功能模块M1的数据先经由同一L1体系中的第一公共线组合传输给同一L1体系中的跨层级功能模块M3,跨层级功能模块M3经由L2中的第二公共线组合以及第二开关组合传输给另一L1体系中的跨层级功能模块M4,跨层级功能模块M4再将数据传输给普通功能模块M2。在图6中,为了方便描述和画图,L1体系中的第一开关组合,没有导通的输入端和输出端所连接的线路没有示出。
上述实施例详细地解释了在同一L1体系中普通功能模块之间的数据传输方式,以及L2体系中不同L1体系中的普通功能模块之间的数据传输方式,在这里,L2体系是L1体系之上更高一级的体系,包含多个L1体系,应当理解,当FPGA芯片中包含多个L2体系时,可以在L2体系之上建立比L2体系更高一级的L3体系,在L3体系中,通过L2体系中普通功能模块的传输方式,来实现不同L2体系中普通功能模块之间数据传输,这里的L1体系,L2体系,L3体系是不同层次的体系,根据需求,依次类推,建立多层次的体系。
以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

1.一种FPGA芯片,其特征在于,所述FPGA芯片的结构包括多个功能模块,一个第一公共线组合,多个第一连线,多个第二连线,多个第一开关组合,所述多个第一连线用于所述多个功能模块向所述第一公共线组合发送数据;
所述第一公共线组合用于所述多个第一连线向所述多个第二连线传输数据;
所述多个第二连线用于所述第一公共线组合向所述多个功能模块向发送数据;
所述第一公共线组合包含多个第一公共线;
每个第一连线通过一个第一开关组合与所述第一公共线组合中每个第一公共线连接,每个第二连线通过一个第一开关组合与所述第一公共线组合中每个第一公共线连接;
其中,所述多个功能模块中的每个功能模块中的一个端口连接一个所述第一开关组合;
一个第一公共线组合,连接在所述第一公共线组合上的多个功能模块,多个第一连线,多个第二连线,多个第一开关组成一个第一层级体系,所述FPGA芯片还包括第二层级,所述第二层级包括第二公共线组合和第二开关组合,所述第二层级用于连接多个第一层级体系;
其中,在每个第一层级体系中,第一公共线组合中第一公共线的数量取决于所有功能模块中输出端和输入端的最大值;在每个第一层级体系中,每个第一开关组合中的开关数量等于第一公共线组合中第一公共线的数量;在每个第一层级体系中,功能模块中的每个输出端或者输入端都通过开关组合与该第一层级体系中的公共线组合中的每根公共线连接,经过第一开关组合,任何一个输出端或者输入端可以连接到公共线组合中的任何一根公共线。
2.根据权利要求1所述的FPGA芯片,其特征在于,
当第一公共线组合所连接的功能模块中的输出端的个数最大值大于或者等于输入端的个数最大值时,所述第一公共线组合中第一公共线的个数为输出端的个数最大值;
当第一公共线组合所连接的功能模块中的输出端的个数最大值小于输入端的个数最大值时,所述第一公共线组合中第一公共线的个数为输入端的个数最大值。
3.根据权利要求1所述的FPGA芯片,其特征在于,所述第一开关组合包含多个开关,所述多个开关的个数等于所述第一公共线组合中第一公共线的个数。
4.根据权利要求1所述的FPGA芯片,其特征在于,每个第一层级体系包含一个跨层级功能模块,每个跨层级功能模块包含至少一个输出端通过所述第二开关组合与所述第二公共线组合连接,每个跨层级功能模块包含至少一个输入端与所述第二公共线组合连接。
5.根据权利要求4所述的芯片,其特征在于,所述第二开关包含多个第一开关组合。
CN201810134291.1A 2018-02-09 2018-02-09 一种具有公共线结构的fpga Active CN108427829B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810134291.1A CN108427829B (zh) 2018-02-09 2018-02-09 一种具有公共线结构的fpga

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810134291.1A CN108427829B (zh) 2018-02-09 2018-02-09 一种具有公共线结构的fpga

Publications (2)

Publication Number Publication Date
CN108427829A CN108427829A (zh) 2018-08-21
CN108427829B true CN108427829B (zh) 2022-11-08

Family

ID=63156731

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810134291.1A Active CN108427829B (zh) 2018-02-09 2018-02-09 一种具有公共线结构的fpga

Country Status (1)

Country Link
CN (1) CN108427829B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5742181A (en) * 1996-06-04 1998-04-21 Hewlett-Packard Co. FPGA with hierarchical interconnect structure and hyperlinks
JP2008123358A (ja) * 2006-11-14 2008-05-29 Casio Comput Co Ltd スイッチマトリクス回路、および、スイッチマトリクス回路の走査方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5457410A (en) * 1993-08-03 1995-10-10 Btr, Inc. Architecture and interconnect scheme for programmable logic circuits
EP1162746B1 (en) * 1994-04-14 2005-11-30 Btr, Inc. Architecture and interconnect scheme for programmable logic circuits
CN1117432C (zh) * 1995-05-03 2003-08-06 Btr公司 可缩放的多层互联结构
US5894565A (en) * 1996-05-20 1999-04-13 Atmel Corporation Field programmable gate array with distributed RAM and increased cell utilization
US6084429A (en) * 1998-04-24 2000-07-04 Xilinx, Inc. PLD having a window pane architecture with segmented and staggered interconnect wiring between logic block arrays
US6191612B1 (en) * 1998-11-19 2001-02-20 Vantis Corporation Enhanced I/O control flexibility for generating control signals
US6496969B2 (en) * 2001-03-27 2002-12-17 Lattice Semiconductor Corporation Programming programmable logic devices using hidden switches
US7028281B1 (en) * 2002-07-12 2006-04-11 Lattice Semiconductor Corporation FPGA with register-intensive architecture
CN101494455B (zh) * 2009-02-26 2011-02-16 电子科技大学 多层次fpga
CN105634468B (zh) * 2014-10-30 2018-11-06 京微雅格(北京)科技有限公司 一种fpga的布线方法和宏单元
CN107431487B (zh) * 2015-03-12 2019-12-24 美高森美SoC公司 基于紧凑ReRAM的FPGA

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5742181A (en) * 1996-06-04 1998-04-21 Hewlett-Packard Co. FPGA with hierarchical interconnect structure and hyperlinks
JP2008123358A (ja) * 2006-11-14 2008-05-29 Casio Comput Co Ltd スイッチマトリクス回路、および、スイッチマトリクス回路の走査方法

Also Published As

Publication number Publication date
CN108427829A (zh) 2018-08-21

Similar Documents

Publication Publication Date Title
CA1245305A (en) Full-duplex one-sided cross-point switch
US3984819A (en) Data processing interconnection techniques
US8189603B2 (en) PCI express to PCI express based low latency interconnect scheme for clustering systems
CN101848154B (zh) 基于高级电信计算架构的系统
EP1548607B1 (en) Method of providing a microcontroller having an N-bit data bus width and a number of pins being equal or less than N
JPS6360579B2 (zh)
US8160061B2 (en) Redundant network shared switch
CN101281453B (zh) 存储设备级联方法、存储系统及存储设备
CN101009542B (zh) 一种数据网络节点设备端口的扩展装置
WO2022179105A1 (zh) 一种多路服务器及多路服务器信号互联系统
CN214225912U (zh) 一种串口电平内部选择切换设备及系统
CN108427829B (zh) 一种具有公共线结构的fpga
US20020159445A1 (en) Non-blocking switching system and switching method thereof
TWI771952B (zh) 利用基板管理控制器進行韌體更新動作的伺服器系統
CN103763165A (zh) 适用于级联连接的Crossbar总线结构
CN113900713A (zh) 一种粗粒度可重构阵列并行指令配置装置及处理器
CN104618121A (zh) 交换器及服务器系统
US4133029A (en) Data processing system with two or more subsystems having combinational logic units for forming data paths between portions of the subsystems
CN114067860B (zh) 存储系统
CN108287935B (zh) 一种包含可预分配布线结构的可编程器件
CN219811188U (zh) 桥接电路、桥接电路集成装置及硅基板
CN100525153C (zh) 多任务器结构的基础组件及对应多任务器组件
US7460529B2 (en) Interconnection fabric using switching networks in hierarchy
US7426205B2 (en) No-addressing modular-assembly Ethernet switch with a G.Link
CN108363672A (zh) PCIe接头

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