CN110941185A - 一种用于二值神经网络的双字线6tsram单元电路 - Google Patents
一种用于二值神经网络的双字线6tsram单元电路 Download PDFInfo
- Publication number
- CN110941185A CN110941185A CN201911326403.4A CN201911326403A CN110941185A CN 110941185 A CN110941185 A CN 110941185A CN 201911326403 A CN201911326403 A CN 201911326403A CN 110941185 A CN110941185 A CN 110941185A
- Authority
- CN
- China
- Prior art keywords
- 6tsram
- blb
- neural network
- control terminal
- bit lines
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05B—CONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
- G05B13/00—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion
- G05B13/02—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion electric
- G05B13/04—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion electric involving the use of models or simulators
- G05B13/042—Adaptive control systems, i.e. systems automatically adjusting themselves to have a performance which is optimum according to some preassigned criterion electric involving the use of models or simulators in which a parameter or coefficient is automatically adjusted to optimise the performance
Landscapes
- Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Automation & Control Theory (AREA)
- Semiconductor Memories (AREA)
Abstract
本发明公开了一种用于二值神经网络的双字线6TSRAM单元电路,其中:PMOS晶体管M1和M2为预充电管,M1和M2的源极共同接到电源Vdd,M1的漏级接在位线BLB上,M2的漏级接在位线BL上;且M1和M2的栅极共同连接到控制端sw2;PMOS晶体管M3为一列6TSRAM单元阵列共用的平衡电压管,M3的源级、漏级分别与位线BLB、BL相连接,用于平衡两条位线BL和BLB上面的电压;且M3的栅极连接到控制端sw1;电容C0和C1为位线BLB和BL上的寄生电容。该电路结构减少了面积和功耗,改善了线性度,同时将模拟域的运算与数字域的运算相结合,减少了模拟域的计算量与电路的复杂性。
Description
技术领域
本发明涉及集成电路设计技术领域,尤其涉及一种用于二值神经网络(BinaryNeural Networks)的双字线6TSRAM单元电路。
背景技术
目前,深度学习在学术界和工业界的关注度越来越高,深度神经元网络(DeepNeural Networks)是一种常用于人工智能的场景实现高精度识别和预测功能的模型,然而在当前的冯-诺依曼计算架构下,数据存储在存储器中,计算时再从存储阵列中把数据传输给ALU运算单元,这种情况下消耗在数据传输上的时间远远高于数据运算的时间,因此数据传输效率也成为限制深度学习发展的一个重要的因素。存内计算CIM(Computing-In-Memory)的出现,将逻辑运算嵌入到存储器中以减少处理器和存储器之间的数据传输,因此成为解决冯-诺依曼计算架构缺点的一种可行性途径,同时也是助力深度学习发展的一种重要的方法,被认为是人工智能算法硬件加速的未来主流趋势之一。
虽然目前深度学习已经在人工智能、模式识别、图像处理等领域得到了广泛的应用,但是由于深度学习需要大量的数据样本用于对建立的模型进行训练,所处理的数据量是非常巨大的,所以使得深度学习的发展受硬件计算能力的限制,但是二值神经网络的出现,极大的改善了这个问题,二值神经网络在卷积神经网络的基础上,将输入和滤波器(Filter)其中的数值二值化,输入Neuron可以二值化为(1/0)或者(+1/-1),滤波器(Filter)中权重weight二值化为(+1/-1)。众多实验表明在极小地损失模型精度的情况下,二值神经网络可以极大地降低模型的复杂度,减少功耗和模型训练时间。现有技术中一般采用8TSRAM单元阵列实现二值神经网络,大多数是输入Neuron(+1/-1)和权重weight(+1/-1)的二值神经网络,但该实现方案的电路复杂、计算量大,使得面积和功耗增大,制约了深度学习的发展。
发明内容
本发明的目的是提供一种用于二值神经网络的双字线6TSRAM单元电路,该电路结构减少了面积和功耗,改善了线性度,同时将模拟域的运算与数字域的运算相结合,减少了模拟域的计算量与电路的复杂性。
本发明的目的是通过以下技术方案实现的:
一种用于二值神经网络的双字线6TSRAM单元电路,所述电路包括多个6TSRAM单元组成的一列6TSRAM单元阵列、三个PMOS晶体管M1、M2和M3、两个电容C0和C1,其中:
PMOS晶体管M1和M2为预充电管,M1和M2的源极共同接到电源Vdd,M1的漏级接在位线BLB上,M2的漏级接在位线BL上;且M1和M2的栅极共同连接到控制端sw2,用于输入控制M1和M2导通的控制信号;
PMOS晶体管M3为一列6TSRAM单元阵列共用的平衡电压管,M3的源级、漏级分别与位线BLB、BL相连接,用于平衡两条位线BL和BLB上面的电压;且M3的栅极连接到控制端sw1,用于输入控制M3导通的控制信号;
电容C0和C1为位线BLB和BL上的寄生电容。
由上述本发明提供的技术方案可以看出,上述电路结构减少了面积和功耗,改善了线性度,同时将模拟域的运算与数字域的运算相结合,减少了模拟域的计算量与电路的复杂性,达到提高深度学习运算速度的目的。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
图1为本发明实施例提供的用于二值神经网络的双字线6TSRAM单元电路的结构示意图;
图2为本发明实施例所提供的由多列6TSRAM单元阵列组成的存储阵列的结构示意图;
图3为本发明实施例所提供的一列6TSRAM单元阵列的放电个数与位线电压的曲线示意图;
图4为本发明实施例所提供的一列6TSRAM单元阵列的放电个数与INL指数的曲线示意图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
下面将结合附图对本发明实施例作进一步地详细描述,如图1所示为本发明实施例提供的用于二值神经网络的双字线6TSRAM单元电路的结构示意图,所述电路包括多个6TSRAM单元组成的一列6TSRAM单元阵列、三个PMOS晶体管M1、M2和M3、两个电容C0和C1,其中:
PMOS晶体管M1和M2为预充电管,M1和M2的源极共同接到电源Vdd,M1的漏级接在位线BLB上,M2的漏级接在位线BL上;且M1和M2的栅极共同连接到控制端sw2,用于输入控制M1和M2导通的控制信号;
PMOS晶体管M3为一列6TSRAM单元阵列共用的平衡电压管,M3的源级、漏级分别与位线BLB、BL相连接,用于平衡两条位线BL和BLB上面的电压;且M3的栅极连接到控制端sw1,用于输入控制M3导通的控制信号;
电容C0和C1为位线BLB和BL上的寄生电容。
具体实现中,上述一列6TSRAM单元阵列中的6TSRAM单元的个数为M,该M值的大小由卷积操作所需要滤波器的规模决定。
在一列6TSRAM单元阵列进行运算时:
首先将各6TSRAM单元中的字线WL和WLB设置为高电平,控制端sw1和sw2设置为高电平,通过位线BL和BLB将权重weight以Q/QB的组合形式写入到各6TSRAM单元中;
一列中所有6TSRAM单元的数据写入后,将所有字线WL和WLB上的电压设置为低电平,然后将控制端sw2设置为低电平,控制端sw1设置为高电平,对电容C0和C1进行充电,持续一段时间后,将控制端sw2设置为高电平,控制端sw1仍为高电平不变;
再将要输入的Neuron(已经二值化后的像素值或者经过上一层卷积后的结果)以字线WL和WLB组合的形式分别设置为高低电平,此时如果输入Neuron和权重weight的乘积是-1,则位线BLB或者BL上的电荷就会被放电;乘积如果是+1,则位线BL和BLB上的电荷就不会被放电;
随后将控制端sw1置为低电平一段时间,将电容C0和C1上的电荷通过PMOS晶体管M3进行平衡,使电容C0和C1储存的电荷相同;
最后通过测量位线BL或者BLB上的电压得到所述一列6TSRAM单元阵列的运算结果和。
这里,若最后测量到的位线BLB或BL上的电压为Vb,电源电压为Vdd,且所述一列6TSRAM单元阵列中的6TSRAM单元的个数为M,则所述一列6TSRAM单元阵列的运算结果和的计算公式为:
M-[4*(Vdd-Vb)/△v]
其中,△v是一个模拟电压量,△v的确定跟字线开启时的电压有关,同时也与位线BL和BLB放电的线性度有关。
上述公式的推导过程具体为:
由于两条位线BL和BLB上的放电电压被PMOS晶体管M3平衡了,所以乘以2可以得到平衡后的位线BL和BLB上总放电量(Vdd-Vb)*2;[(Vdd-Vb)*2]/△v通过对△v的量化可以得到真值表中乘积结果为-1的总和,乘积结果只有+1和-1两种情况,所以如果知道了乘积为-1的个数后,就可以推算出乘积为+1的个数。
这里,假设一列6TSRAM单元阵列中的6TSRAM单元的个数为M,容易得到其中乘积为+1的个数就是M-[(Vdd-Vb)*2]/△v个,而一列6TSRAM单元阵列乘积运算的和可以直接用乘积为+1的个数减去乘积为-1的个数,也就是:
M-[(Vdd-Vb)*2]/△v-[(Vdd-Vb)*2]/△v=M-[4*(Vdd-Vb)/△v]
通过上述公式可以看出:本实施例只需要在模拟域中计算出Vdd-Vb电压差,通过(Vdd-Vb)/△v量化电压差,然后将(Vdd-Vb)/△v量化后的数值直接传输给数字电路进行M-[4*(Vdd-Vb)/△v]数字域的计算,这样就可以得到输入Neuron和权重weight的乘积,从而将模拟量的运算和数字量的运算结合起来,不仅可以减少模拟电路运算的复杂性(因为要在模拟电路中进行运算,所需要的电路是非常复杂的),而且可以减少运算时间。
进一步,如图2所示为本发明实施例所提供的由多列6TSRAM单元阵列组成的存储阵列的结构示意图,通过M*M个6TSRAM单元组成6TSRAM单元存储阵列,该M值的大小由卷积操作所需要滤波器的规模决定;通过所述6TSRAM单元存储阵列的运算,得到一次卷积convolution的结果,将运算后的结果通过激活函数后再次存在各6TSRAM单元内,并改变输入Neuron的值进行下一次卷积操作;通过多次迭代后,得到卷积神经网络的结果。
为了更加清晰地展现出本发明所提供的技术方案及所产生的技术效果,下面结合附图对本发明方案的效果进行详细说明:
在本实例中,线性度是决定模型准确度的最为关键的因素,如图3所示为本发明实施例所提供的一列6TSRAM单元阵列的放电个数与位线电压的曲线示意图,图3中:字线开启电压分别设置为700mv、600mv、500mv,在700mv、600mv、500mv时,放电个数从1到64个时位线BL和BLB上面的剩余位线电压曲线,可以看出3条曲线都是趋于线性的,线性度较好,符合存内计算的线性度要求。
如图4所示为本发明实施例所提供的一列6TSRAM单元阵列的放电个数与INL指数的曲线示意图,图4中测试了在字线开启电压分别为700mv、600mv、500mv时的INL指数,INL指数可以直观地描述所设计电路的线性度,INL指数越低说明误差越小,线性度越理想。通过各个仿真与性能对比,本发明实施例所述电路符合工程应用的实际要求。
值得注意的是,本发明实施例中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (5)
1.一种用于二值神经网络的双字线6TSRAM单元电路,其特征在于,所述电路包括多个6TSRAM单元组成的一列6TSRAM单元阵列、三个PMOS晶体管M1、M2和M3、两个电容C0和C1,其中:
PMOS晶体管M1和M2为预充电管,M1和M2的源极共同接到电源Vdd,M1的漏级接在位线BLB上,M2的漏级接在位线BL上;且M1和M2的栅极共同连接到控制端sw2,用于输入控制M1和M2导通的控制信号;
PMOS晶体管M3为一列6TSRAM单元阵列共用的平衡电压管,M3的源级、漏级分别与位线BLB、BL相连接,用于平衡两条位线BL和BLB上面的电压;且M3的栅极连接到控制端sw1,用于输入控制M3导通的控制信号;
电容C0和C1为位线BLB和BL上的寄生电容。
2.根据权利要求1所述用于二值神经网络的双字线6TSRAM单元电路,其特征在于,
所述一列6TSRAM单元阵列中的6TSRAM单元的个数为M,该M值的大小由卷积操作所需要滤波器的规模决定。
3.根据权利要求1所述用于二值神经网络的双字线6TSRAM单元电路,其特征在于,在所述一列6TSRAM单元阵列进行运算时:
首先将各6TSRAM单元中的字线WL和WLB设置为高电平,控制端sw1和sw2设置为高电平,通过位线BL和BLB将权重weight以Q/QB的组合形式写入到各6TSRAM单元中;
一列中所有6TSRAM单元的数据写入后,将所有字线WL和WLB上的电压设置为低电平,然后将控制端sw2设置为低电平,控制端sw1设置为高电平,对电容C0和C1进行充电,持续一段时间后,将控制端sw2设置为高电平,控制端sw1仍为高电平不变;
再将要输入的Neuron以字线WL和WLB组合的形式分别设置为高低电平,此时如果输入Neuron和权重weight的乘积是-1,则位线BLB或者BL上的电荷就会被放电;乘积如果是+1,则位线BL和BLB上的电荷就不会被放电;
随后将控制端sw1置为低电平一段时间,将电容C0和C1上的电荷通过PMOS晶体管M3进行平衡,使电容C0和C1储存的电荷相同;
最后通过测量位线BL或者BLB上的电压得到所述一列6TSRAM单元阵列的运算结果和。
4.根据权利要求3所述用于二值神经网络的双字线6TSRAM单元电路,其特征在于,
若最后测量到的位线BLB或BL上的电压为Vb,电源电压为Vdd,且所述一列6TSRAM单元阵列中的6TSRAM单元的个数为M,则所述一列6TSRAM单元阵列的运算结果和的计算公式为:
M-[4*(Vdd-Vb)/△v]
其中,△v是一个模拟电压量,△v的确定跟字线开启时的电压有关,同时也与位线BL和BLB放电的线性度有关。
5.根据权利要求3所述用于二值神经网络的双字线6TSRAM单元电路,其特征在于,进一步通过M*M个6TSRAM单元组成6TSRAM单元存储阵列,该M值的大小由卷积操作所需要滤波器的规模决定;
通过所述6TSRAM单元存储阵列的运算,得到一次卷积convolution的结果,将运算后的结果通过激活函数后再次存在各6TSRAM单元内,并改变输入Neuron的值进行下一次卷积操作;通过多次迭代后,得到卷积神经网络的结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911326403.4A CN110941185B (zh) | 2019-12-20 | 2019-12-20 | 一种用于二值神经网络的双字线6tsram单元电路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911326403.4A CN110941185B (zh) | 2019-12-20 | 2019-12-20 | 一种用于二值神经网络的双字线6tsram单元电路 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110941185A true CN110941185A (zh) | 2020-03-31 |
CN110941185B CN110941185B (zh) | 2022-06-07 |
Family
ID=69912745
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911326403.4A Active CN110941185B (zh) | 2019-12-20 | 2019-12-20 | 一种用于二值神经网络的双字线6tsram单元电路 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110941185B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112232501A (zh) * | 2020-12-11 | 2021-01-15 | 中科院微电子研究所南京智能技术研究院 | 一种存内计算装置 |
CN113627601A (zh) * | 2020-05-08 | 2021-11-09 | 深圳市九天睿芯科技有限公司 | 子单元、mac阵列、位宽可重构的模数混合存内计算模组 |
WO2021232949A1 (zh) * | 2020-05-18 | 2021-11-25 | 深圳市九天睿芯科技有限公司 | 子单元、mac阵列、位宽可重构的模数混合存内计算模组 |
CN114743575A (zh) * | 2022-06-13 | 2022-07-12 | 中科南京智能技术研究院 | 一种用于存内计算的位线电压求差电路 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104320610A (zh) * | 2014-10-09 | 2015-01-28 | 韩立亮 | 小型哺乳动物(鼠类)智能识别系统 |
CN105930903A (zh) * | 2016-05-16 | 2016-09-07 | 浙江大学 | 一种数模混合神经网络芯片体系结构 |
US20190130255A1 (en) * | 2017-11-02 | 2019-05-02 | Samsung Electronics Co., Ltd. | Method and apparatus for generating fixed-point type neural network |
CN110209375A (zh) * | 2019-05-30 | 2019-09-06 | 浙江大学 | 一种基于radix-4编码和差分权重存储的乘累加电路 |
-
2019
- 2019-12-20 CN CN201911326403.4A patent/CN110941185B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104320610A (zh) * | 2014-10-09 | 2015-01-28 | 韩立亮 | 小型哺乳动物(鼠类)智能识别系统 |
CN105930903A (zh) * | 2016-05-16 | 2016-09-07 | 浙江大学 | 一种数模混合神经网络芯片体系结构 |
US20190130255A1 (en) * | 2017-11-02 | 2019-05-02 | Samsung Electronics Co., Ltd. | Method and apparatus for generating fixed-point type neural network |
CN110209375A (zh) * | 2019-05-30 | 2019-09-06 | 浙江大学 | 一种基于radix-4编码和差分权重存储的乘累加电路 |
Non-Patent Citations (1)
Title |
---|
张小红 等: ""变参数细胞神经网络的分数阶可切换多元电路设计及仿真"", 《电子学报》, vol. 44, no. 4, 30 April 2016 (2016-04-30), pages 933 - 943 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113627601A (zh) * | 2020-05-08 | 2021-11-09 | 深圳市九天睿芯科技有限公司 | 子单元、mac阵列、位宽可重构的模数混合存内计算模组 |
WO2021223547A1 (zh) * | 2020-05-08 | 2021-11-11 | 深圳市九天睿芯科技有限公司 | 子单元、mac阵列、位宽可重构的模数混合存内计算模组 |
CN113627601B (zh) * | 2020-05-08 | 2023-12-12 | 深圳市九天睿芯科技有限公司 | 子单元、mac阵列、位宽可重构的模数混合存内计算模组 |
WO2021232949A1 (zh) * | 2020-05-18 | 2021-11-25 | 深圳市九天睿芯科技有限公司 | 子单元、mac阵列、位宽可重构的模数混合存内计算模组 |
US11948659B2 (en) | 2020-05-18 | 2024-04-02 | Reexen Technology Co., Ltd. | Sub-cell, mac array and bit-width reconfigurable mixed-signal in-memory computing module |
CN112232501A (zh) * | 2020-12-11 | 2021-01-15 | 中科院微电子研究所南京智能技术研究院 | 一种存内计算装置 |
CN114743575A (zh) * | 2022-06-13 | 2022-07-12 | 中科南京智能技术研究院 | 一种用于存内计算的位线电压求差电路 |
CN114743575B (zh) * | 2022-06-13 | 2022-08-30 | 中科南京智能技术研究院 | 一种用于存内计算的位线电压求差电路 |
Also Published As
Publication number | Publication date |
---|---|
CN110941185B (zh) | 2022-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110941185B (zh) | 一种用于二值神经网络的双字线6tsram单元电路 | |
US11948659B2 (en) | Sub-cell, mac array and bit-width reconfigurable mixed-signal in-memory computing module | |
Chen et al. | CAP-RAM: A charge-domain in-memory computing 6T-SRAM for accurate and precision-programmable CNN inference | |
US11783875B2 (en) | Circuits and methods for in-memory computing | |
CN110209375B (zh) | 一种基于radix-4编码和差分权重存储的乘累加电路 | |
CN112151091B (zh) | 一种8t sram单元及存内计算装置 | |
CN112581996A (zh) | 基于磁性随机存储器的时域存内计算阵列结构 | |
CN113255904B (zh) | 电压裕度增强型电容耦合存算一体单元、子阵列及装置 | |
US20220276835A1 (en) | Sub-cell, Mac array and Bit-width Reconfigurable Mixed-signal In-memory Computing Module | |
Su et al. | Two-way transpose multibit 6T SRAM computing-in-memory macro for inference-training AI edge chips | |
CN113257306A (zh) | 一种基于静态随机存取存储器的存算一体阵列及加速装置 | |
Choi et al. | Content addressable memory based binarized neural network accelerator using time-domain signal processing | |
CN113467751A (zh) | 一种基于磁性随机存储器的模拟域存内计算阵列结构 | |
Mu et al. | SRAM-based in-memory computing macro featuring voltage-mode accumulator and row-by-row ADC for processing neural networks | |
Sharma et al. | A reconfigurable 16Kb AND8T SRAM macro with improved linearity for multibit compute-in memory of artificial intelligence edge devices | |
Sharma et al. | AND8T SRAM macro with improved linearity for multi-bit in-memory computing | |
Lin et al. | A review on SRAM-based computing in-memory: Circuits, functions, and applications | |
Lee et al. | A charge-sharing based 8t sram in-memory computing for edge dnn acceleration | |
CN115080501A (zh) | 基于局部电容电荷共享的sram存算一体芯片 | |
Cheon et al. | A 2941-TOPS/W charge-domain 10T SRAM compute-in-memory for ternary neural network | |
CN114300012A (zh) | 一种解耦合sram存内计算装置 | |
US20230297235A1 (en) | Sram-based cell for in-memory computing and hybrid computations/storage memory architecture | |
CN115691613B (zh) | 一种基于忆阻器的电荷型存内计算实现方法及其单元结构 | |
Xiao et al. | A 128 Kb DAC-less 6T SRAM computing-in-memory macro with prioritized subranging ADC for AI edge applications | |
US20220319596A1 (en) | Compute-in-memory array and module, and data computing method |
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 |