CN103488597A - 一种先进先出缓存器及其读写数据的方法 - Google Patents
一种先进先出缓存器及其读写数据的方法 Download PDFInfo
- Publication number
- CN103488597A CN103488597A CN201310451428.3A CN201310451428A CN103488597A CN 103488597 A CN103488597 A CN 103488597A CN 201310451428 A CN201310451428 A CN 201310451428A CN 103488597 A CN103488597 A CN 103488597A
- Authority
- CN
- China
- Prior art keywords
- data
- write
- out buffer
- register
- once
- 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
Landscapes
- Information Transfer Systems (AREA)
Abstract
本发明公开了一种先进先出缓存器,包括:寄存器堆,用于存储写入的数据,当先进先出缓存器处于满状态时,继续向先进先出缓存器里写入新的数据,新的数据写入存储前一次写入的数据的寄存器,前一次写入的数据自动被后一次写入的新的数据覆盖掉的同时写入再前一次写入的数据的寄存器,存储前一次写入的数据的寄存器继续存储后一次写入的新的数据,以此类推,最先写入的数据则被后一次写入的数据覆盖掉;写操作控制模块,用于控制写操作地址以及当先进先出缓存器处于满状态生成满标志信号;读操作控制模块,用于控制读操作地址以及当先进先出缓存器处于空状态生成空标志信号。本发明减少了CPU操作先进先出缓存器的负担,提高了CPU的效率。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种先进先出缓存器及其读写数据的方法。
背景技术
当数据在具有不同传输能力的设备之间进行传输时,数据缓存器用来暂存这些数据。例如,电话线、计算机和串口、计算机的数据总线等,其传输速度均不相同,缓存器在每种部件之间平衡数据流,而允许它们以合适的速率传输数据。
数据缓存器可以分为输入缓存器和输出缓存器两种。输入缓存器的作用是将外设送来的数据暂时存放,以便处理器将它取走;输出缓存器的作用是用来暂时存放处理器送往外设的数据。有了数据缓存器,就可以使高速工作的CPU与慢速工作的外设起协调和缓存作用,实现数据传送的同步。
先进先出数据缓存器与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
在系统设计中,先进先出数据缓存器被广泛使用以增加数据传输率、处理大量数据流、匹配具有不同传输率的系统,从而提高了系统性能。先进先出数据缓存器一般用于不同时钟域之间的数据传输,同时也可以作为不同宽度数据之间的接口。在嵌入式系统中,很多部件都使用了先进先出缓存器,像UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器),SPI(Serial Peripheral Interface,同步串行外设接口)等。
现有的先进先出缓存器当处于满状态时,就不能继续往里面写入新的数据;如果想要继续往里面写入新的数据,就必须先进行读操作使先进先出缓存器不处于满状态,而读出的数据有时是没有实际用途的,读操作只是为了使先进先出缓存器腾出存储空间来存储新的数据。
如图3所示:在双向通信中,当CPU想读取外设中的数据时,一般CPU首先会发送读数据命令通知外设,然后再进行读数据操作。当CPU发送读数据命令通知外设时,CPU将读数据命令写入到输出先进先出缓存器中,然后通过传输模块输出给外设,同时,传输模块接收输入的数据然后写入到输入先进先出缓存器,不过这些数据并不是外设发送给CPU的有用数据,CPU也不关心这些数据。但是接下来当CPU对外设进行读数据操作时,外设传输的有效数据须要存储到输入先进先出缓存器中,所以输入先进先出缓存器中之前接收到的没有实际用途的数据必须及时被读走,否则当输入先进先出缓存器存满数据后,后面外设输出的有用数据不能存储到输入先进先出缓存器里面,造成有用数据的丢失。
这样,当CPU对外设进行大量读数据操作时,往往会首先发送读数据命令通知外设,然后再进行读数据操作。为了避免在读数据操作时外设发送给CPU的有用数据不能写入到输入先进先出缓存器中,CPU需要在发送读数据命令通知外设后及时将输入先进先出缓存器里面写入的没有实际用途的数据读走。
这样,每次CPU发送读数据命令通知外设后,都需要将输入先进先出缓存器里面没有实际用途的数据读走。这些读输入先进先出缓存器操作将占用CPU更多的操作时间,增加了CPU的负担,降低了CPU的效率。
目前的先进先出缓存器的工作原理如图4所示:先进先出缓存器复位后,写操作地址和读操作地址都为0,先进先出缓存器处于空状态,此时不能对先进先出缓存器进行读操作,只能进行写操作;当不处于满状态时,每写一个数据,写操作地址自动加1;当不处于空状态时,每读取一个数据,读操作地址自动加1;当写操作地址和读操作地址相等时,如果是写操作引起的,则先进先出缓存器处于满状态,相反,如果是读操作引起的,则先进先出缓存器处于空状态。
当先进先出缓存器不处于满状态时,写入的数据将存储到由写操作地址选择的存储单元中;而当先进先出缓存器处于满状态时,此时不允许往先进先出缓存器写入新的数据,只允许从先进先出缓存器读取数据,如果想继续往先进先出缓存器写入新的数据,则必须首先对先进先出缓存器进行读操作使其不处于满状态,这样先进先出缓存器就会有新的存储空间来存储数据。当先进先出缓存器不处于空状态时,读取的数据则由读操作地址选择的寄存器输出。
发明内容
针对现有的先进先出缓存器当处于满状态时,就不能继续向先进先出缓存器里写入新的数据的问题,本发明实施例提供一种先进先出缓存器读写数据的方法,当先进先出缓存器处于满状态时,可继续往里面写入新的数据,其中之前写入的数据会自动被其之后写入的数据覆盖,从而提高了CPU的效率。
为达到上述目的,本发明解决其技术问题所采用的技术方案是,提供一种先进先出缓存器,包括:
寄存器堆,用于存储写入的数据,当所述先进先出缓存器处于满状态时,继续向所述先进先出缓存器里写入新的数据,所述新的数据写入存储前一次写入的数据的寄存器,所述前一次写入的数据自动被后一次写入的所述新的数据覆盖掉的同时写入再前一次写入的数据的寄存器,所述存储所述前一次写入的数据的寄存器继续存储后一次写入的所述新的数据,以此类推,最先写入的数据则被后一次写入的数据覆盖掉;
写操作控制模块,用于控制写操作地址,以及,当所述先进先出缓存器处于满状态生成满标志信号;
读操作控制模块,用于控制读操作地址,以及,当所述先进先出缓存器处于空状态生成空标志信号。
具体的,当所述先进先出缓存器不处于满状态时,向所述先进先出缓存器里每写入一个数据,所述写操作控制模块令写操作地址加1,写入的所述数据存储到由所述写操作地址选择的寄存器中。
具体的,当所述先进先出缓存器不处于空状态时,向所述先进先出缓存器里每读取一个数据,所述读操作控制模块令读操作地址加1,读取的所述数据由所述读操作地址选择的寄存器输出。
本发明的另一目的在于提供一种先进先出缓存器读写数据的方法,包括以下步骤:
当所述先进先出缓存器处于满状态时,继续向所述先进先出缓存器里写入新的数据,所述新的数据写入存储前一次写入的数据的寄存器,所述前一次写入的数据被后一次写入的所述新的数据覆盖的同时,写入再前一次写入的数据的寄存器,所述存储所述前一次写入的数据的寄存器继续存储后一次写入的所述新的数据,以此类推,最先写入的数据则被后一次写入的数据覆盖掉。
具体的,当所述先进先出缓存器处于空状态时,只进行写操作,不进行读操作。
具体的,当所述写操作地址和所述读操作地址相等时,如果是写操作引起的,则所述先进先出缓存器处于满状态,如果是读操作引起的,则所述先进先出缓存器处于空状态。
具体的,当所述先进先出缓存器不处于满状态时,向所述先进先出缓存器里每写入一个数据,所述写操作地址加1,写入的所述数据存储到由所述写操作地址选择的寄存器中。
具体的,当所述先进先出缓存器不处于空状态时,向所述先进先出缓存器里每读取一个数据,读操作地址加1,读取的所述数据由所述读操作地址选择的寄存器输出。
具体的,所述先进先出缓存器复位后处于空状态。
具体的,读写操作时钟为同步时钟或者异步时钟。
与现有的先进先出缓存器及其读写数据的方法相比,本发明实施例具有如下优点:当CPU对外设进行大量数据读操作时,在CPU发送读数据命令通知外设后,不需要将输入先进先出缓存器里面没有实际用途的数据读走;接下来读操作接收到的数据如果存满了输入先进先出缓存器,会自动依次覆盖掉之前在发送读数据命令时接收到的没有实际用途的数据,减少了CPU操作先进先出缓存器的负担,提高了CPU的效率。
附图说明
图1是本发明实施例提供的一种先进先出缓存器的整体结构图;
图2是本发明实施例提供的一种先进先出缓存器读写数据的方法原理图;
图3是本发明背景技术提供的先进先出缓存器在双向通信工作中场景图;
图4是本发明背景技术提供的现有的先进先出缓存器工作原理图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例的目的之一,在于提供一种先进先出缓存器,如图1所示,包括:
寄存器堆,用于存储写入的数据,当所述先进先出缓存器处于满状态时,继续向所述先进先出缓存器里写入新的数据写入存储前一次写入的数据的寄存器,所述前一次写入的数据自动被后一次写入的所述新的数据覆盖掉的同时写入再前一次写入的数据的寄存器,所述存储所述前一次写入的数据的寄存器继续存储后一次写入的所述新的数据,以此类推,最先写入的数据则会被后一次写入的数据覆盖掉。
写操作控制模块,用于控制写操作地址,以及,当所述先进先出缓存器处于满状态生成满标志信号。
具体的,当所述先进先出缓存器不处于满状态时,向所述先进先出缓存器里每写入一个数据,所述写操作控制模块令写操作地址加1,写入的所述数据存储到由所述写操作地址选择的寄存器中。
读操作控制模块,用于控制读操作地址,以及,当所述先进先出缓存器处于空状态生成空标志信号。
具体的,当所述先进先出缓存器不处于空状态时,向所述先进先出缓存器里每读取一个数据,所述读操作控制模块令读操作地址加1,读取的所述数据由所述读操作地址选择的寄存器输出。
满标志信号和空标志信号都是用来表明先进先出缓存器的状态,现有技术下,当先进先出缓存器满时,CPU就不能对其进行写操作,而当先进先出缓存器空时,CPU就不能对其进行读操作;本发明实施例的新型先进先出缓存器,当先进先出缓存器满时,CPU仍然可以对其进行写操作,而当先进先出缓存器空时,CPU不能对其进行读操作。
生成的满标志信号和空标志信号,可以保存在包含图3所示的传输模块的外设的状态寄存器中,CPU通过查询状态寄存器,对外设中的先进先出缓存器进行相应的操作。
具体的,信号描述如下:
rstn:复位输入信号;
wr_clk:写操作时钟输入信号;
wr_en:写操作时能输入信号;
wr_addr:写操作地址输入信号;
wr_data:写操作数据输入信号;
full:满标志输出信号;
rd_clk:读操作时钟输入信号;
rd_en:读操作时能输入信号;
Rd_addr:读操作地址输入信号;
rd_data:读操作数据输出信号;
empty:空标志输出信号。
本发明实施例的另一目的是提供一种先进先出缓存器读写数据的方法,用于当先进先出缓存器处于满状态时,可继续往里面写入新的数据,从而提高CPU的效率。为达到上述目的,所述的先进先出缓存器读写数据的方法,如图2所示,包括以下步骤:
当所述先进先出缓存器处于满状态时,继续向所述先进先出缓存器里写入新的数据,所述新的数据写入存储前一次写入的数据的寄存器,所述前一次写入的数据被后一次写入的所述新的数据覆盖的同时写入再前一次写入的数据的寄存器,所述存储所述前一次写入的数据的寄存器继续存储后一次写入的所述新的数据,以此类推,最先写入的数据则会被后一次写入的数据覆盖掉。
具体的,例如数据1写入之前存储数据0的寄存器,数据0被数据1覆盖掉,数据2写入之前存储数据1的寄存器,以此类推,数据N写入之前存储数据N-1的寄存器,而之前存储数据的N的寄存器可以继续存储新写入的数据N+1。
具体的,由于上面的覆盖操作是同时完成的,所以先进先出缓存器里面的存储单元只能用寄存器堆实现,不能用SRAM(Static RAM,静态随机存储器)实现,因为SRAM同时只能对某一个存储空间进行写操作。
具体的,先进先出缓存器复位后,写操作地址和读操作地址都为0,所述先进先出缓存器复位后处于空状态,此时,只允许进行写操作,不允许进行读操作。
具体的,当所述先进先出缓存器不处于满状态时,向所述先进先出缓存器里每写入一个数据,写操作地址自动加1,写入的所述数据将存储到由写操作地址选择的寄存器中。
具体的,当所述先进先出缓存器不处于空状态时,向所述先进先出缓存器里每读取一个数据,读操作地址自动加1,读取的所述数据由读操作地址选择的寄存器输出。
具体的,当所述写操作地址和所述读操作地址相等时,如果是写操作引起的,则所述先进先出缓存器处于满状态,满标志信号由写操作控制模块实现,如果是读操作引起的,则所述先进先出缓存器处于空状态,空标志信号由读操作控制模块实现。
具体的,读写操作时钟可以为同步时钟也可以为异步时钟。
本发明实施例具有如下优点:当CPU对外设进行大量数据读操作时,在CPU发送读数据命令通知外设后,不需要将输入先进先出缓存器里面没有实际用途的数据读走;接下来读操作接收到的数据如果存满了输入先进先出缓存器,会自动依次覆盖掉之前在发送读数据命令时接收到的没有实际用途的数据,减少了CPU操作先进先出缓存器的负担,提高了CPU的效率。
通过以上实施例,本领域技术人员可以理解实施例中的系统中的模块可以按照实施例描述分布于实施例的系统中,也可以进行相应变化位于不同于本实施例的一个或多个系统中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台终端设备(可以是手机,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
Claims (10)
1.一种先进先出缓存器,其特征在于,包括以下部分:
寄存器堆,用于存储写入的数据,当所述先进先出缓存器处于满状态时,继续向所述先进先出缓存器里写入新的数据,所述新的数据写入存储前一次写入的数据的寄存器,所述前一次写入的数据自动被后一次写入的所述新的数据覆盖掉的同时写入再前一次写入的数据的寄存器,所述存储所述前一次写入的数据的寄存器继续存储后一次写入的所述新的数据,最先写入的数据则被后一次写入的数据覆盖掉;
写操作控制模块,用于控制写操作地址,以及,当所述先进先出缓存器处于满状态生成满标志信号;
读操作控制模块,用于控制读操作地址,以及,当所述先进先出缓存器处于空状态生成空标志信号。
2.如权利要求1所述的先进先出缓存器,其特征在于,当所述先进先出缓存器不处于满状态时,向所述先进先出缓存器里每写入一个数据,所述写操作控制模块令写操作地址加1,写入的所述数据存储到由所述写操作地址选择的寄存器中。
3.如权利要求1所述的先进先出缓存器,其特征在于,当所述先进先出缓存器不处于空状态时,向所述先进先出缓存器里每读取一个数据,所述读操作控制模块令读操作地址加1,读取的所述数据由所述读操作地址选择的寄存器输出。
4.一种先进先出缓存器读写数据的方法,其特征在于:当所述先进先出缓存器处于满状态时,继续向所述先进先出缓存器里写入新的数据,所述新的数据写入存储前一次写入的数据的寄存器,所述前一次写入的数据被后一次写入的所述新的数据覆盖的同时写入再前一次写入的数据的寄存器,所述存储所述前一次写入的数据的寄存器继续存储后一次写入的所述新的数据,最先写入的数据则被后一次写入的数据覆盖掉。
5.如权利要求4所述的先进先出缓存器读写数据的方法,其特征在于,当所述先进先出缓存器处于空状态时,只进行写操作,不进行读操作。
6.如权利要求4或5所述的先进先出缓存器读写数据的方法,其特征在于,当所述写操作地址和所述读操作地址相等时,如果是写操作引起的,则所述先进先出缓存器处于满状态,如果是读操作引起的,则所述先进先出缓存器处于空状态。
7.如权利要求4或5所述的先进先出缓存器读写数据的方法,其特征在于,当所述先进先出缓存器不处于满状态时,向所述先进先出缓存器里每写入一个数据,所述写操作地址加1,写入的所述数据存储到由所述写操作地址选择的寄存器中。
8.如权利要求4或5所述的先进先出缓存器读写数据的方法,其特征在于,当所述先进先出缓存器不处于空状态时,向所述先进先出缓存器里每读取一个数据,读操作地址加1,读取的所述数据由所述读操作地址选择的寄存器输出。
9.如权利要求4或5所述的先进先出缓存器读写数据的方法,其特征在于,所述先进先出缓存器复位后处于空状态。
10.如权利4所述的先进先出缓存器读写数据的方法,其特征在于,读写操作时钟为同步时钟或者异步时钟。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310451428.3A CN103488597B (zh) | 2013-09-27 | 2013-09-27 | 一种先进先出缓存器及其读写数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310451428.3A CN103488597B (zh) | 2013-09-27 | 2013-09-27 | 一种先进先出缓存器及其读写数据的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103488597A true CN103488597A (zh) | 2014-01-01 |
CN103488597B CN103488597B (zh) | 2017-02-22 |
Family
ID=49828842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310451428.3A Active CN103488597B (zh) | 2013-09-27 | 2013-09-27 | 一种先进先出缓存器及其读写数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103488597B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183665A (zh) * | 2015-09-08 | 2015-12-23 | 福州瑞芯微电子股份有限公司 | 一种数据缓存访问方法和数据缓存控制器 |
CN107844438A (zh) * | 2017-12-07 | 2018-03-27 | 合肥国为电子有限公司 | 用于地震仪主控站cpu与外设数据传输的桥接器及方法 |
CN107861895A (zh) * | 2017-10-23 | 2018-03-30 | 深圳市楠菲微电子有限公司 | 基于分布式仲裁的可编程输入输出pio写合并装置和方法 |
CN111274171A (zh) * | 2018-12-04 | 2020-06-12 | 珠海格力电器股份有限公司 | 一种数据传输装置及方法 |
-
2013
- 2013-09-27 CN CN201310451428.3A patent/CN103488597B/zh active Active
Non-Patent Citations (3)
Title |
---|
WQQ0930: "先进先出FIFO页面置换算法", 《百度文库》 * |
ZZQ19910208: "操作系统先进先出算法", 《百度文库》 * |
冰之樱_26: "先进先出算法", 《百度文库》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183665A (zh) * | 2015-09-08 | 2015-12-23 | 福州瑞芯微电子股份有限公司 | 一种数据缓存访问方法和数据缓存控制器 |
CN105183665B (zh) * | 2015-09-08 | 2018-02-13 | 福州瑞芯微电子股份有限公司 | 一种数据缓存访问方法和数据缓存控制器 |
CN107861895A (zh) * | 2017-10-23 | 2018-03-30 | 深圳市楠菲微电子有限公司 | 基于分布式仲裁的可编程输入输出pio写合并装置和方法 |
CN107861895B (zh) * | 2017-10-23 | 2019-11-19 | 深圳市楠菲微电子有限公司 | 基于分布式仲裁的可编程输入输出pio写合并装置和方法 |
CN107844438A (zh) * | 2017-12-07 | 2018-03-27 | 合肥国为电子有限公司 | 用于地震仪主控站cpu与外设数据传输的桥接器及方法 |
CN107844438B (zh) * | 2017-12-07 | 2023-06-16 | 合肥国为电子有限公司 | 用于地震仪主控站cpu与外设数据传输的桥接器及方法 |
CN111274171A (zh) * | 2018-12-04 | 2020-06-12 | 珠海格力电器股份有限公司 | 一种数据传输装置及方法 |
CN111274171B (zh) * | 2018-12-04 | 2022-02-11 | 珠海格力电器股份有限公司 | 一种数据传输装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103488597B (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101636721B (zh) | 用于处理未知长度传输的dmac | |
CN103064805B (zh) | Spi控制器及通信方法 | |
US10133549B1 (en) | Systems and methods for implementing a synchronous FIFO with registered outputs | |
CN104407933A (zh) | 一种数据的备份方法及装置 | |
CN103488597A (zh) | 一种先进先出缓存器及其读写数据的方法 | |
CN113900974B (zh) | 一种存储装置、数据存储方法及相关设备 | |
CN108958950A (zh) | 电子存储设备的任务管理方法、主机和存储装置 | |
CN113836184A (zh) | 一种业务持久化方法及装置 | |
CN101350218B (zh) | 一种虚拟多端口存储器及其存储和读取数据的方法 | |
CN115113799A (zh) | 主机命令的执行方法及装置 | |
CN103870413A (zh) | 存储系统及包括所述存储系统的片上系统 | |
CN102279728B (zh) | 数据存储设备及数据计算方法 | |
CN102789424B (zh) | 基于fpga的外扩ddr2的读写方法及基于fpga的外扩ddr2颗粒存储器 | |
CN108664335A (zh) | 通过代理进行队列通信的方法与装置 | |
CN101788888A (zh) | 一种实现目标端驱动的方法及该目标端驱动 | |
CN101382877A (zh) | Fat文件数据读取/写入方法、系统和移动通信终端 | |
CN103207843A (zh) | 一种数据行宽度可动态配置的cache结构设计方法 | |
CN115509972A (zh) | 实现dma高效收发报文的方法及应用 | |
CN101661430B (zh) | 一种存储块回收判断装置及存储块管理系统 | |
CN105117353A (zh) | 带有通用数据交互模块的fpga及采用该fpga的信息处理系统 | |
CN101742632B (zh) | 同步方法、主机、移动终端和同步系统 | |
CN101894082A (zh) | 一种存储器装置及智能手机系统 | |
CN106209370A (zh) | 椭圆曲线密码芯片装置、系统及数据缓存控制方法 | |
CN111699468A (zh) | 先入先出存储器的数据存储方法、设备及存储介质 | |
CN104394100A (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 |