CN108053855A - 一种基于sdram芯片的矩阵转置方法 - Google Patents
一种基于sdram芯片的矩阵转置方法 Download PDFInfo
- Publication number
- CN108053855A CN108053855A CN201711220592.8A CN201711220592A CN108053855A CN 108053855 A CN108053855 A CN 108053855A CN 201711220592 A CN201711220592 A CN 201711220592A CN 108053855 A CN108053855 A CN 108053855A
- Authority
- CN
- China
- Prior art keywords
- bank
- sdram
- data
- row
- matrix
- 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
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/401—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
- G11C11/4063—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
- G11C11/407—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
- G11C11/408—Address circuits
Landscapes
- Engineering & Computer Science (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Computer Hardware Design (AREA)
- Image Processing (AREA)
- Dram (AREA)
Abstract
本发明公开了一种基于SDRAM芯片的矩阵转置方法,提出了符合SDRAM芯片器件特性的读地址、写地址生成方法。对于采用SDRAM芯片作为大容量存储器件的矩阵转置应用来说,本发明原理简单,易于实现,数据连续输入输出时可以做到无缝对接,且无需进行刷新操作,转置效率可以达到100%。
Description
技术领域
本发明涉及一种基于SDRAM芯片的矩阵转置方法,属于矩阵数据处理技术领域。
背景技术
矩阵转置是多维图像和信号处理中常用的处理过程,矩阵转置可以看做是两个矩阵之间的映射:Xi,j→Xj,i。当应用规模比较小时,整个矩阵可以一次读入到高速存储器中,矩阵转置就非常简单。对于大规模的应用,高速内存容量不够,大量的数据必须存储外部存储器中,转置效率在整个处理过程中就显得非常重要。
同步动态随机存取存储器(以下简称SDRAM)芯片由于存储容量大、速度快、功耗低等优点,是目前应用最广泛的存储器之一。常见的基于SDRAM芯片的矩阵转置方法包括二页式、三页式、矩阵分块式等。中科院的卢世祥等人于2005年发表了论文“合成孔径雷达实时成像转置存储器的两页式结构与实现”,介绍了通过循环对两片SDRAM芯片读写的二页式转置工作原理,但其转置效率仅为49.3%。中科院的谢应科等人于2003年发表了论文“实时SAR成像系统中矩阵转置的设计和实现”,介绍了通过循环对两片SDRAM芯片读写的二页式转置工作原理,但其转置效率仅为64%。采用矩阵分块式转置方法的文章比较多,均通过将原始矩阵分割为多个子矩阵的方式,增加离散操作时每次激活后所能连续访问的次数,以减少SDRAM芯片激活和预充电操作次数,以此减小SDRAM芯片控制命令对访问效率的影响程度,但他们的转置效率或多或少都会受到SDRAM芯片控制命令开销的影响。
无论是二页式、三页式或者矩阵分块式,这些方法在数据输入输出平衡转置方面都很有效,它们的不足之处是:SDRAM芯片在页面跳转(即BANK切换)、读/写、刷新等操作均会产生额外的控制命令开销,这些方法都未能将SDRAM芯片器件特性充分利用起来,从而影响到转置效率,无法做到最优。
发明内容
本发明的技术解决问题是:克服现有技术的不足之处,公开了一种基于SDRAM芯片的矩阵转置方法,提出了符合SDRAM芯片器件特性的读写地址生成方法,极大的提升了转置效率。
本发明的技术解决方案是:提供一种基于SDRAM芯片的矩阵转置方法,采用2组SDRAM芯片,每组SDRAM芯片包括4个BANK,突发长度为b,步骤如下:
(1)获取待转置矩阵的行数M,列数N;
(2)按行连续输入待转置矩阵,并将连续b行数据划分为N/b个b×b子矩阵;
(3)将奇数个b×b子矩阵转置后按行拼接,每个b×b子矩阵存储在第一组SDRAM芯片BANK的同一行中,每写完一个b×b子矩阵自上而下换行;将偶数个b×b子矩阵转置后按行拼接,每个b×b子矩阵存储在第二组SDRAM芯片相同编号BANK的同一行中,每写完一个b×b子矩阵自上而下换行;
每写入b行数据后进行一次BANK切换,4个BANK遍历后按照间隔N/2b个存储行的方式换行写,并在4个BANK之间循环遍历;
(4)在第一组SDRAM芯片中,依次连续读出每个BANK中的b个数据;每读出b个数据进行一次BANK切换,并在4个BANK之间循环遍历,直至读出原始待转置矩阵的b列数据后进行一次SDRAM芯片间切换。
优选的,每个BANK为m行n列,突发长度为b,M和N是能够被b整除的正整数,且M×N≤8×m×n,两组SDRAM芯片中对应的BANK采用相同的方式编号。
优选的,步骤(3)中BANK内部所有行遍历后从左至右从相邻空白处继续写,直至写完。
优选的,步骤(4)中BANK内部数据读取时,每读取b个数据后按照间隔N/2b存储行的方式换行读,行遍历后从左至右从相邻空白处继续读,直至读完。
本发明与现有技术相比的有益效果是:
(1)与采用二页式、三页式或者矩阵分块式转置方法相比,本发明原理简单,易于实现,数据连续输入输出时可以做到无缝对接,同时避免了刷新操作。
(2)本发明的转置方法,能够保证数据总线上为连续的有效数据,可同时实现数据输入和输出,转置效率可以达到100%。
(3)本发明的转置方法易于实现,处理速度快,特别适用于多维图像和信号处理等数据量处理较大的场合。
附图说明
图1为本发明矩阵转置方法;
图2为通用SDRAM芯片存储结构框图;
图3为通用SDRAM芯片刷新操作指令示意图;
图4为采用本发明矩阵转置方法写操作数据流图;
图5为采用本发明矩阵转置方法读操作数据流图;
图6为本发明实施例写入示意图。
具体实施方式
下面结合本发明实施过程中的附图,对本发明实施过程中的技术方案进行清楚地描述。限于篇幅,所描述的写操作和读操作数据流图仅仅是本发明的一部分,而不是全部的应用实例。基于本发明的应用实例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他应用实例,都属于本发明的保护范围。
图1为本发明矩阵转置方法,一种基于SDRAM芯片的矩阵转置方法,步骤如下:
(1)获取待转置矩阵的行数M,列数N;
(2)按行连续输入待转置矩阵,并将连续b行数据划分为N/b个b×b子矩阵;
(3)将奇数个b×b子矩阵转置后按行拼接,每个b×b子矩阵存储在第一组SDRAM芯片BANK的同一行中,每写完一个b×b子矩阵自上而下换行;将偶数个b×b子矩阵转置后按行拼接,每个b×b子矩阵存储在第二组SDRAM芯片相同编号BANK的同一行中,每写完一个b×b子矩阵自上而下换行;
每写入b行数据后进行一次BANK切换,4个BANK遍历后按照间隔N/2b个存储行的方式换行写,并在4个BANK之间循环遍历;
(4)在第一组SDRAM芯片中,依次连续读出每个BANK中的b个数据;每读出b个数据进行一次BANK切换,并在4个BANK之间循环遍历,直至读出原始待转置矩阵的b列数据后进行一次SDRAM芯片间切换。
本发明采用2个SDRAM芯片,每组SDRAM芯片包括4个BANK,每个BANK为m行n列,突发长度为b,M和N是能够被b整除的正整数,且M×N≤8×m×n,两组SDRAM芯片中对应的BANK采用相同的方式编号。
本发明矩阵转置方法步骤(3)中BANK内部所有行遍历后从左至右从相邻空白处继续写,直至写完。
本发明矩阵转置方法步骤(4)中BANK内部数据读取时,每读取b个数据后按照间隔N/2b存储行的方式换行读,行遍历后从左至右从相邻空白处继续读,直至读完。
由于连续进行的读操作或写操作实现了不同行之间的循环遍历,因此不需要执行为保持数据有效性的SDRAM芯片刷新操作。
基于上述方法所设计的读写地址,在连续进行读操作或写操作时可以实现不同行之间的循环遍历,因此不需要执行为保持数据有效性的SDRAM芯片刷新操作。
实施例
以8×8的矩阵转置为例,矩阵内的第i行第j列的数据用aij表示,其中i,j的取值为0~7;b的取值为2。
结合图6,首先将第1个2×2子矩阵按{a00 a10 a01 a11}顺序写入第一组SDRAM芯片BANK0的第1行,然后切换至第二组SDRAM芯片,将第2个2×2子矩阵按{a02 a12 a03 a13}顺序写入BANK0的第1行;返回第一组SDRAM芯片中的BANK0,换行后,将{a04 a14 a05 a15}写入,然后切换至第二组SDRAM芯片,换行后写入{a06 a16 a07 a17},依次类推,直至完成前两行的写入。切换至BANK1,完成第3、4行的撰写,切换至BANK2,完成第5、6行的撰写,切换至BANK3,完成第7、8行的撰写。
参见图6,读取过程首先从第一组SDRAM芯片开始,依次连续读出4个BANK第1行中的前2个数据,得到矩阵转置后的第1列数据;然后依次连续读出4个BANK第1行中的后2个数据,得到矩阵转置后的第2列数据;由于已完成2列矩阵转置数据读取,则切换至第二组SDRAM芯片,用同样的方法读出矩阵转置后的第3、4列数据,依次类推。
图2为通用SDRAM芯片存储结构框图,包括:4个BANK(BANK0~BANK3),每个BANK为m行n列,时钟输入端CLK,双向数据输入输出总线端口DQ,地址输入总线端口Addr,行译码器和列译码器。通用的SDRAM芯片内部一般有4个BANK,输入和输出共享数据总线DQ和地址总线Addr。
在执行读/写操作时,SDRAM芯片的控制命令(COMMAND)顺序为:激活(ACTIVE)—读(READ)/写(WRITE)—预充电(PRECHARGE)。由于存在操作时延,上述控制命令执行期间还需空操作(NOP)指令。为方便说明,下文中的预充电指令用PRE简述。
由于SDRAM芯片的页面跳转、读/写操作均会产生额外的控制命令开销,这些控制命令所占用的总线周期会影响到数据访问效率,从而影响到转置效率。本发明所设计的读/写地址产生方法,可以规避这些影响。
图3为通用SDRAM芯片刷新操作指令示意图,控制命令(COMMAND)顺序为:激活(ACTIVE)—空操作(NOP)—预充电(PRECHARGE)。由于SDRAM芯片所存储的数据有一定的时效性,每隔一段时间必须对所有数据全部进行一次刷新。只有保证在特定时间内对SDRAM芯片的所有行进行一次遍历,那么就不需要发送刷新指令,从而可以有效降低刷新时控制命令对转置效率的影响,提高数据总线利用效率。因此,本发明为了将数据转置效率提升至100%,必须规避刷新操作。
图4为采用本发明矩阵转置方法写操作数据流图。为方便说明,这里取突发访问长度b值为4。写操作过程中,每4个数据进行一次SDRAM1芯片和SDRAM2芯片之间的切换,从而实现了数据连续写入时的无缝对接,写入时无总线周期浪费。同时,连续4个数据对应的写入地址(Addr)以突发访问长度4为单位跳变,在同一个SDRAM芯片内,每写4个数据就执行换行操作。
将连续4行数据写入2个SDRAM芯片中相同编号BANK,每写4行进行一次BANK切换,如此交替写入不同BANK。
图5为采用本发明矩阵转置方法读操作数据流图。突发访问长度b值为4,读操作只需产生待访问数据的首地址即可。由于写入时4行数据矩阵已进行列切换,可直接依次连续读出每个BANK中的4个数据。每读出4个数据进行一次BANK切换,4个BANK遍历后,进行一次SDRAM芯片间切换。BANK内部数据读取时,每读取4个数据后换行,行遍历后从左至右从相邻空白处继续读,直至读完。从图5中可以看出,数据连续读出时实现了无缝对接,无总线周期浪费。
从图4和图5中可以看出,每次读操作或者写操作均包含了控制命令“激活(ACTIVE)—预充电(PRECHARGE)”过程,这意味着每次读操作或者写操作均对当前操作所在行完成了刷新操作。因此,无需引入额外的刷新操作指令。同时,本发明在数据连续输入输出时可以做到无缝对接,实现了原始矩阵的行入列出,转置效率可以达到100%。
图4、图5和图6仅为本发明突发访问长度b值为4或2时的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (4)
1.一种基于SDRAM芯片的矩阵转置方法,采用2组SDRAM芯片,每组SDRAM芯片包括4个BANK,突发长度为b,其特征在于步骤如下:
(1)获取待转置矩阵的行数M,列数N;
(2)按行连续输入待转置矩阵,并将连续b行数据划分为N/b个b×b子矩阵;
(3)将奇数个b×b子矩阵转置后按行拼接,每个b×b子矩阵存储在第一组SDRAM芯片BANK的同一行中,每写完一个b×b子矩阵自上而下换行;将偶数个b×b子矩阵转置后按行拼接,每个b×b子矩阵存储在第二组SDRAM芯片相同编号BANK的同一行中,每写完一个b×b子矩阵自上而下换行;
每写入b行数据后进行一次BANK切换,4个BANK遍历后按照间隔N/2b个存储行的方式换行写,并在4个BANK之间循环遍历;
(4)在第一组SDRAM芯片中,依次连续读出每个BANK中的b个数据;每读出b个数据进行一次BANK切换,并在4个BANK之间循环遍历,直至读出原始待转置矩阵的b列数据后进行一次SDRAM芯片间切换。
2.如权利要求1所述的基于SDRAM芯片的矩阵转置方法,其特征在于,每个BANK为m行n列,突发长度为b,M和N是能够被b整除的正整数,且M×N≤8×m×n,两组SDRAM芯片中对应的BANK采用相同的方式编号。
3.如权利要求1所述的基于SDRAM芯片的矩阵转置方法,其特征在于,步骤(3)中BANK内部所有行遍历后从左至右从相邻空白处继续写,直至写完。
4.如权利要求1所述的基于SDRAM芯片的矩阵转置方法,其特征在于,步骤(4)中BANK内部数据读取时,每读取b个数据后按照间隔N/2b存储行的方式换行读,行遍历后从左至右从相邻空白处继续读,直至读完。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711220592.8A CN108053855B (zh) | 2017-11-29 | 2017-11-29 | 一种基于sdram芯片的矩阵转置方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711220592.8A CN108053855B (zh) | 2017-11-29 | 2017-11-29 | 一种基于sdram芯片的矩阵转置方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108053855A true CN108053855A (zh) | 2018-05-18 |
CN108053855B CN108053855B (zh) | 2021-01-08 |
Family
ID=62120787
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711220592.8A Active CN108053855B (zh) | 2017-11-29 | 2017-11-29 | 一种基于sdram芯片的矩阵转置方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108053855B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020073795A1 (zh) * | 2018-10-08 | 2020-04-16 | 京东方科技集团股份有限公司 | 矩阵转置装置及方法、显示装置 |
CN111045965A (zh) * | 2019-10-25 | 2020-04-21 | 南京大学 | 一种多通道无冲突拆分的硬件实现方法及运行该方法的计算机设备与可读存储介质 |
CN111124300A (zh) * | 2019-12-17 | 2020-05-08 | 深圳忆联信息系统有限公司 | 提高ssd ddr4访问效率的方法、装置、计算机设备及存储介质 |
CN111984563A (zh) * | 2020-09-18 | 2020-11-24 | 西安电子科技大学 | 基于fpga的ddr3读写控制器及矩阵转置实现方法 |
CN115995249A (zh) * | 2023-03-24 | 2023-04-21 | 南京大学 | 一种基于dram的矩阵转置运算装置 |
CN115185859B (zh) * | 2022-09-13 | 2023-06-27 | 北京天地一格科技有限公司 | 一种雷达信号处理系统及低延迟矩阵转置处理装置和方法 |
CN117648026A (zh) * | 2024-01-26 | 2024-03-05 | 深圳市芯科云科技有限公司 | 基于穿戴手表应用的i2c主从芯片切换方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5644517A (en) * | 1992-10-22 | 1997-07-01 | International Business Machines Corporation | Method for performing matrix transposition on a mesh multiprocessor architecture having multiple processor with concurrent execution of the multiple processors |
CN103135096A (zh) * | 2013-01-11 | 2013-06-05 | 北京理工大学 | 一种合成孔径雷达成像处理转置存储方法和数据访问方法 |
CN103412284A (zh) * | 2013-08-29 | 2013-11-27 | 西安电子科技大学 | 基于dsp芯片的sar成像系统中矩阵转置方法 |
CN103761215A (zh) * | 2014-01-15 | 2014-04-30 | 北京新松佳和电子系统股份有限公司 | 基于图形处理器的矩阵转置优化方法 |
CN104598391A (zh) * | 2015-01-21 | 2015-05-06 | 佛山市智海星空科技有限公司 | 一种待转置二维矩阵的分块线性存储读取方法及系统 |
US9213680B2 (en) * | 2005-01-14 | 2015-12-15 | International Business Machines Corporation | Method and structure for fast in-place transformation of standard full and packed matrix data formats |
-
2017
- 2017-11-29 CN CN201711220592.8A patent/CN108053855B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5644517A (en) * | 1992-10-22 | 1997-07-01 | International Business Machines Corporation | Method for performing matrix transposition on a mesh multiprocessor architecture having multiple processor with concurrent execution of the multiple processors |
US9213680B2 (en) * | 2005-01-14 | 2015-12-15 | International Business Machines Corporation | Method and structure for fast in-place transformation of standard full and packed matrix data formats |
CN103135096A (zh) * | 2013-01-11 | 2013-06-05 | 北京理工大学 | 一种合成孔径雷达成像处理转置存储方法和数据访问方法 |
CN103412284A (zh) * | 2013-08-29 | 2013-11-27 | 西安电子科技大学 | 基于dsp芯片的sar成像系统中矩阵转置方法 |
CN103761215A (zh) * | 2014-01-15 | 2014-04-30 | 北京新松佳和电子系统股份有限公司 | 基于图形处理器的矩阵转置优化方法 |
CN104598391A (zh) * | 2015-01-21 | 2015-05-06 | 佛山市智海星空科技有限公司 | 一种待转置二维矩阵的分块线性存储读取方法及系统 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020073795A1 (zh) * | 2018-10-08 | 2020-04-16 | 京东方科技集团股份有限公司 | 矩阵转置装置及方法、显示装置 |
US11204741B2 (en) | 2018-10-08 | 2021-12-21 | Boe Technology Group Co., Ltd. | Device and method for transposing matrix, and display device |
CN111045965A (zh) * | 2019-10-25 | 2020-04-21 | 南京大学 | 一种多通道无冲突拆分的硬件实现方法及运行该方法的计算机设备与可读存储介质 |
CN111124300A (zh) * | 2019-12-17 | 2020-05-08 | 深圳忆联信息系统有限公司 | 提高ssd ddr4访问效率的方法、装置、计算机设备及存储介质 |
CN111984563A (zh) * | 2020-09-18 | 2020-11-24 | 西安电子科技大学 | 基于fpga的ddr3读写控制器及矩阵转置实现方法 |
CN111984563B (zh) * | 2020-09-18 | 2022-08-02 | 西安电子科技大学 | 基于fpga的ddr3读写控制器及矩阵转置实现方法 |
CN115185859B (zh) * | 2022-09-13 | 2023-06-27 | 北京天地一格科技有限公司 | 一种雷达信号处理系统及低延迟矩阵转置处理装置和方法 |
CN115995249A (zh) * | 2023-03-24 | 2023-04-21 | 南京大学 | 一种基于dram的矩阵转置运算装置 |
CN117648026A (zh) * | 2024-01-26 | 2024-03-05 | 深圳市芯科云科技有限公司 | 基于穿戴手表应用的i2c主从芯片切换方法及系统 |
CN117648026B (zh) * | 2024-01-26 | 2024-04-12 | 深圳市芯科云科技有限公司 | 基于穿戴手表应用的i2c主从芯片切换方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108053855B (zh) | 2021-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108053855A (zh) | 一种基于sdram芯片的矩阵转置方法 | |
EP1936628B1 (en) | Memory device, memory controller and memory system | |
US20020196669A1 (en) | Decoding scheme for a stacked bank architecture | |
US20050226082A1 (en) | Method of accessing matrix data with address translation circuit that enables quick serial access in row or column directions | |
JP3280704B2 (ja) | 半導体記憶装置 | |
US8358557B2 (en) | Memory device and method | |
JP2002063069A (ja) | メモリ制御装置、データ処理システム及び半導体装置 | |
TW201619832A (zh) | 半導體裝置及包含該半導體裝置的記憶體系統 | |
KR20110059712A (ko) | 메모리 모듈 및 메모리 모듈 제어 방법 | |
CN108169716B (zh) | 基于sdram芯片的sar成像系统矩阵转置装置和图案交织方法 | |
JP2002216473A (ja) | 半導体メモリ装置 | |
US9361961B2 (en) | Memory device and memory system including the same | |
CN102880552B (zh) | 面向多核多线程处理器的混合地址映射方法 | |
US7995419B2 (en) | Semiconductor memory and memory system | |
CN1877739A (zh) | 具有较低初始延时的随机存取存储器 | |
CN113641625B (zh) | 一种基于fpga的四路并行数据处理转置系统 | |
CN103135096A (zh) | 一种合成孔径雷达成像处理转置存储方法和数据访问方法 | |
TW574710B (en) | DRAM with segmental cell arrays and method of accessing same | |
US8520460B2 (en) | Semiconductor memory device and access method | |
CN102005241A (zh) | 半导体存储器件及其控制方法 | |
US5654912A (en) | Semiconductor memory device with reduced read time and power consumption | |
CN105487988A (zh) | 基于存储空间复用提高sdram总线有效访问速率的方法 | |
US6545936B1 (en) | Pipeline structure of memory for high-fast row-cycle | |
CN102024492A (zh) | 伪静态存储器及其写操作与刷新操作的控制方法 | |
CN102024490A (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 |