CN102541623A - 一种嵌入式处理器的存储空间模拟方法 - Google Patents

一种嵌入式处理器的存储空间模拟方法 Download PDF

Info

Publication number
CN102541623A
CN102541623A CN2011104332394A CN201110433239A CN102541623A CN 102541623 A CN102541623 A CN 102541623A CN 2011104332394 A CN2011104332394 A CN 2011104332394A CN 201110433239 A CN201110433239 A CN 201110433239A CN 102541623 A CN102541623 A CN 102541623A
Authority
CN
China
Prior art keywords
page
page table
memory
table entry
visited
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
Application number
CN2011104332394A
Other languages
English (en)
Other versions
CN102541623B (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.)
Beijing Institute of Control Engineering
Original Assignee
Beijing Institute of Control Engineering
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 Beijing Institute of Control Engineering filed Critical Beijing Institute of Control Engineering
Priority to CN201110433239.4A priority Critical patent/CN102541623B/zh
Publication of CN102541623A publication Critical patent/CN102541623A/zh
Application granted granted Critical
Publication of CN102541623B publication Critical patent/CN102541623B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

一种嵌入式处理器的存储空间模拟方法,提供了嵌入式处理器的存储空间模拟方法。该方法可以模拟嵌入式处理器的完整存储空间,通过采用分页的方式来模拟大容量的完整存储空间,在分页机制下,只模拟程序中真正使用到的那部分存储空间,从而节省了模拟所需的空间开销;本方明针对不同的地址范围,采用静态模拟和动态模拟相结合的混合模拟方法,实现了一种效率高、开销低的大容量存储空间模拟机制。

Description

一种嵌入式处理器的存储空间模拟方法
技术领域
本发明涉及一种嵌入式处理器的存储空间模拟方法,属于嵌入式芯片模拟领域。
背景技术
在设计空间飞行器计算机系统软件时,传统的设计过程是在硬件目标运行平台上进行运行调试和测试,该种方法存在对硬件的过度依赖,并且操作复杂和耗时,为解决这些问题,宜采用基于软件的模拟环境进行嵌入式系统软件的设计与开发。在模拟环境中为了模拟处理器的完整存储空间,针对不同的地址范围,通常采用静态模拟或者动态模拟方法,动态模拟方法开销低,但效率无法保证,静态模拟方法效率高但开销较大。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种嵌入式处理器的存储空间模拟方法,该方法可以模拟嵌入式处理器的完整存储空间,针对不同的地址范围,采用了静态模拟和动态模拟相结合的混合模拟方法,实现了一种效率高、开销低的大容量存储空间模拟机制。
本发明的技术解决方案是:
一种嵌入式处理器的存储空间模拟方法,步骤如下:
(1)在内存中开辟存储空间,之后将开辟出的存储空间划分为多个存储页,每个存储页的大小为预设的固定值;
(2)在内存中构建一个页表的数据结构,所述页表的数据结构是一个多级链表,每一级链表中包含一个页表头和多个页表项,页表项与步骤(1)中划分出来的存储页一一对应,每个页表项包含两部分,一部分为其所对应的存储页的标签信息,另一部分为指向下一个页表项的指针;
(3)在基于步骤(1)和步骤(2)所构建的结构上,进行内存访问。
所述内存访问包括读操作,具体通过如下步骤进行:
(2.1)将所述嵌入式处理器待访问的地址所在的存储页映射到对应的页表头,之后判断该页表头是否为空,若所述页表头为空,则表示没有与该页表头匹配的页表项,从而无法建立存储页和页表头之间的对应关系,返回0作为读操作的结果;若不为空,则进入步骤(2.2);
(2.2)根据页表头获取该页表头所在的链表的第一个页表项,之后判断所述第一个页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从页表头到存储页之间的对应关系已经建立,则直接获取待访问地址所在存储页中的数据作为读操作的结果;
若不一致,则进入步骤(2.3);
(2.3)根据当前页表项中的指向下一个页表项的指针,获得下一个页表项,之后判断该页表项是否为空,若所述页表项为空,则表示没有与该页表项匹配的存储页,从而无法建立存储页和页表项之间的对应关系,返回0作为读操作的结果;若不为空,则进入步骤(2.4);
(2.4)判断所述当前页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从当前页表项到存储页之间的对应关系已经建立,则直接获取待访问地址所在存储页中的数据作为读操作的结果;若不一致,则返回步骤(2.3)。
所述内存访问包括写操作,具体通过如下步骤进行:
(3.1)将所述嵌入式处理器待访问的地址所在的存储页映射到对应的页表头,之后判断该页表头是否为空,若所述页表头为空,则表示没有与该页表头匹配的页表项,未建立存储页和页表头之间的对应关系,之后在内存中申请新的空间作为存储页,并且在该页表头所在的链表中增加相应的页表项,使得所述该页表头、增加的页表项和新申请的存储页形成映射关系,之后将写操作待写入的数据存入所述新申请的存储页中;
若不为空,则进入步骤(3.2);
(3.2)根据页表头获取该页表头所在的链表的第一个页表项,之后判断所述第一个页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从页表头到存储页之间的对应关系已经建立,则直接将写操作待写入的数据写入待访问地址所在存储页中;
若不一致,则进入步骤(3.3);
(3.3)根据当前页表项中的指向下一个页表项的指针,获得下一个页表项,之后判断该页表项是否为空,若所述页表项为空,则表示没有与该页表项匹配的存储页,未建立存储页和页表项之间的对应关系,之后在内存中申请新的空间作为存储页,并且在链表中增加相应的页表项,使得增加的页表项和新申请的存储页形成映射关系,之后将写操作待写入的数据存入所述新申请的存储页中;若不为空,则进入步骤(3.4);
(3.4)判断所述当前页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从当前页表项到存储页之间的对应关系已经建立,则直接将写操作待写入的数据写入待访问地址所在存储页中;若不一致,则返回步骤(3.3)。
所述页表项为空是指该页表项中的标签信息和指向下一个页表项的指针均为空。
本发明与现有技术相比具有如下优点:
1)为了降低模拟开销,本发明中存储空间主要采用动态模拟的方法,具体来讲,主要使用分页的方法来模拟大容量的存储空间,只对那些真正访问到了的存储空间进行模拟,从而减少了模拟所需的空间大小;
2)为了提高模拟空间访问效率,针对常用的地址空间采用了静态的直接模拟,减少了模拟空间访问过程中的转换操作,从而提高了模拟速度。
附图说明
图1为本发明原理图;
图2为动态存储空间模拟机制下的读操作过程流程图;
图3为动态存储空间模拟机制下的写操作过程流程图;
具体实施方式
本发明提供了一种嵌入式处理器的存储空间模拟方法,步骤如下:
(1)在内存中开辟存储空间,之后将开辟出的存储空间划分为多个固定大小的存储页(memory page),每个存储页的大小为预设的固定值;每个页的大小可以自由设定,实际使用中可以设定在1KB~1MB的大小范围,比如,当设定为4KB大小时,4GB的存储空间就可以划分为1M个存储页。
(2)在内存中构建一个页表的数据结构(page table),页表中包含若干项,具体的项数记为MEM_PTAB_SIZE,其大小可以根据实际情况来设定,比如对于AT697的存储空间来说,我们可以设定为1K~64K项即可比较好的满足需要。
所述页表的数据结构是一个多级链表,每一级链表中包含一个页表头和多个页表项,page table中的表项只需要记录每个页表项链表的头(pte_h),链表中每一项都对应一个具体的页表项(pte),页表项与步骤(1)中划分出来的存储页一一对应,每个页表项包含两部分,一部分为其所对应的存储页的标签信息(Tag信息),Tag信息用来和本次访问的物理地址进行比对,以判断是否对应该存储页;另一部分为指向下一个页表项的指针;MEM_PTAB_SIZE较小时,可能存在多个存储页映射到page table中的同一项,因此,对于每一项,需要能够表示多个存储页(可以使用地址的高位来实现存储页到page table每项之间的影射)
(3)在基于步骤(1)和步骤(2)所构建的结构上,进行内存访问。
每次地址访问的过程如下:首先,根据访问的物理地址的高位进行映射,在page table中找到对应的pte_h,然后,从链表头开始遍历整个链表,根据tag信息和访问地址进行比对,判断该链表中每个页表项是否对应该物理地址所在的页,如果比对成功,则成功找到对应存储页,然后再结合地址低位所表示的页内偏移量,在相应地址执行具体的读操作或者写操作,如果遍历链表后匹配不成功,则说明该页还没有被访问过,因此也还没有对其进行模拟,此时,我们分配一个新的模拟存储页,然后添加该页对应的页表项,并插入对应的链表中。
可以看到,在初始阶段,所有的pte_h都为空,没有分配页表项,也即没有对任何的存储空间进行模拟,只有当检测到实际的地址访问操作之后,才会分配对应的存储页进行模拟。考虑到实际程序中用到的地址空间有限,这种模拟方法所需的空间开销很小
内存访问包括读操作和写操作,如图2所示,读操作通过如下步骤进行:
(2.1)将所述嵌入式处理器待访问的地址映射到对应的某个pte_h中,映射方法为:针对待访问地址的部分位进行直接映射,比如,假定存储页大小为1M,那么地址的低20位作为页内偏移地址,假定总共有64项的pte_h,那么需要8位索引,此时可以用地址的bit20-bit27作为索引位用于确定对应到哪个pte_h。pte_h中存在一个指针指向第一个页表项(pte),如果该pte_h还没有对应的pte,则pte_h指针为空,此时说明没有找到匹配的存储页,也即现在访问的页是第一次访问,对于读操作,直接返回0作为读到的值即可(相当于访问一个没有写过的内存地址,初始化值总是0)。之后判断该页表头是否为空,若所述页表头pte_h为空,则表示没有与该页表头匹配的页表项,从而无法建立存储页和页表头之间的对应关系,返回0作为读操作的结果;若不为空,则进入步骤(2.2);
(2.2)如果pte_h不为空,则根据该指针获取第一个页表项(pte),并进行地址比对,如果地址匹配,则这个pte对应的页就是我们要访问的页,也即该页之前访问过,因此在模拟器中有分配空间模拟该页,此时可以直接从pte中读出该页对应的地址并根据地址的低20位的页内偏移读取到页内对应位置的数据。之后判断所述第一个页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从页表头到存储页之间的对应关系已经建立,则直接获取待访问地址所在存储页中的数据作为读操作的结果;
若不一致,则进入步骤(2.3);
(2.3)根据当前页表项中的指向下一个页表项的指针,获得下一个页表项,之后判断该页表项是否为空,若所述页表项为空,则表示没有与该页表项匹配的存储页,从而无法建立存储页和页表项之间的对应关系,返回0作为读操作的结果;若不为空,则进入步骤(2.4);所述页表项为空是指该页表项中的标签信息和指向下一个页表项的指针均为空。
(2.4)判断所述当前页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从当前页表项到存储页之间的对应关系已经建立,则直接获取待访问地址所在存储页中的数据作为读操作的结果;若不一致,则返回步骤(2.3)。
如图3所示,写操作的流程和读操作类似,区别的地方主要在于没有找到地址匹配的pte项时的处理方法有所不同,读操作是直接返回0作为读到的值,而写操作则是需要在内存中分配地址空间来模拟这个新页,分配新的pte项,并将其挂入对应的pte_h链表中。
写操作通过如下步骤进行:
(3.1)将所述嵌入式处理器待访问的地址所在的存储页用2.1中同样的方法映射到对应的页表头,之后判断该页表头是否为空,若所述页表头为空,则表示没有与该页表头匹配的页表项,未建立存储页和页表头之间的对应关系,之后在内存中申请新的空间作为存储页,并且在该页表头所在的链表中增加相应的页表项,使得所述该页表头、增加的页表项和新申请的存储页形成映射关系,之后将写操作待写入的数据存入所述新申请的存储页中;
若不为空,则进入步骤(3.2);
(3.2)根据页表头获取该页表头所在的链表的第一个页表项,之后判断所述第一个页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从页表头到存储页之间的对应关系已经建立,则直接将写操作待写入的数据写入待访问地址所在存储页中;
若不一致,则进入步骤(3.3);
(3.3)根据当前页表项中的指向下一个页表项的指针,获得下一个页表项,之后判断该页表项是否为空,若所述页表项为空,则表示没有与该页表项匹配的存储页,未建立存储页和页表项之间的对应关系,之后在内存中申请新的空间作为存储页,并且在链表中增加相应的页表项,使得增加的页表项和新申请的存储页形成映射关系,之后将写操作待写入的数据存入所述新申请的存储页中;若不为空,则进入步骤(3.4);
(3.4)判断所述当前页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从当前页表项到存储页之间的对应关系已经建立,则直接将写操作待写入的数据写入待访问地址所在存储页中;若不一致,则返回步骤(3.3)。
上述过程为动态存储空间模拟机制下的访存操作执行流程,静态存储空间模拟机制下的访存操作执行流程有较大不同。在静态存储空间模拟机制下,地址是直接访问的,不经过页表转换,其执行流程简单很多。静态模拟的地址范围在模拟器中总是预先分配好空间进行直接模拟,每次读写访问时,直接从模拟存储空间中读出或者写入值即可,速度更快。
此外,本描述采用的是一级页表的机制,在实际使用中,可以根据需要增加页表级数,比如对于地址空间更大的情况,可以采用两级甚至三级的页表机制进行模拟。
本发明本专利中的存储空间方法具有开销小、效率高的特点,能够很好的对嵌入式处理器芯片进行模拟。
本发明未详细说明部分属本领域技术人员公知常识。

Claims (4)

1.一种嵌入式处理器的存储空间模拟方法,其特征在于步骤如下:
(1)在内存中开辟存储空间,之后将开辟出的存储空间划分为多个存储页,每个存储页的大小为预设的固定值;
(2)在内存中构建一个页表的数据结构,所述页表的数据结构是一个多级链表,每一级链表中包含一个页表头和多个页表项,页表项与步骤(1)中划分出来的存储页一一对应,每个页表项包含两部分,一部分为其所对应的存储页的标签信息,另一部分为指向下一个页表项的指针;
(3)在基于步骤(1)和步骤(2)所构建的结构上,进行内存访问。
2.根据权利要求1所述的一种嵌入式处理器的存储空间模拟方法,其特征在于:所述内存访问包括读操作,具体通过如下步骤进行:
(2.1)将所述嵌入式处理器待访问的地址所在的存储页映射到对应的页表头,之后判断该页表头是否为空,若所述页表头为空,则表示没有与该页表头匹配的页表项,从而无法建立存储页和页表头之间的对应关系,返回0作为读操作的结果;若不为空,则进入步骤(2.2);
(2.2)根据页表头获取该页表头所在的链表的第一个页表项,之后判断所述第一个页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从页表头到存储页之间的对应关系已经建立,则直接获取待访问地址所在存储页中的数据作为读操作的结果;
若不一致,则进入步骤(2.3);
(2.3)根据当前页表项中的指向下一个页表项的指针,获得下一个页表项,之后判断该页表项是否为空,若所述页表项为空,则表示没有与该页表项匹配的存储页,从而无法建立存储页和页表项之间的对应关系,返回0作为读操作的结果;若不为空,则进入步骤(2.4);
(2.4)判断所述当前页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从当前页表项到存储页之间的对应关系已经建立,则直接获取待访问地址所在存储页中的数据作为读操作的结果;若不一致,则返回步骤(2.3)。
3.根据权利要求1所述的一种嵌入式处理器的存储空间模拟方法,其特征在于:所述内存访问包括写操作,具体通过如下步骤进行:
(3.1)将所述嵌入式处理器待访问的地址所在的存储页映射到对应的页表头,之后判断该页表头是否为空,若所述页表头为空,则表示没有与该页表头匹配的页表项,未建立存储页和页表头之间的对应关系,之后在内存中申请新的空间作为存储页,并且在该页表头所在的链表中增加相应的页表项,使得所述该页表头、增加的页表项和新申请的存储页形成映射关系,之后将写操作待写入的数据存入所述新申请的存储页中;
若不为空,则进入步骤(3.2);
(3.2)根据页表头获取该页表头所在的链表的第一个页表项,之后判断所述第一个页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从页表头到存储页之间的对应关系已经建立,则直接将写操作待写入的数据写入待访问地址所在存储页中;
若不一致,则进入步骤(3.3);
(3.3)根据当前页表项中的指向下一个页表项的指针,获得下一个页表项,之后判断该页表项是否为空,若所述页表项为空,则表示没有与该页表项匹配的存储页,未建立存储页和页表项之间的对应关系,之后在内存中申请新的空间作为存储页,并且在链表中增加相应的页表项,使得增加的页表项和新申请的存储页形成映射关系,之后将写操作待写入的数据存入所述新申请的存储页中;若不为空,则进入步骤(3.4);
(3.4)判断所述当前页表项是否与待访问地址所在的存储页一致,若一致,则表示所述待访问地址所在的存储页之前被访问过,即从当前页表项到存储页之间的对应关系已经建立,则直接将写操作待写入的数据写入待访问地址所在存储页中;若不一致,则返回步骤(3.3)。
4.根据权利要求1所述的一种嵌入式处理器的存储空间模拟方法,其特征在于:所述页表项为空是指该页表项中的标签信息和指向下一个页表项的指针均为空。
CN201110433239.4A 2011-12-20 2011-12-20 一种嵌入式处理器的存储空间模拟方法 Active CN102541623B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110433239.4A CN102541623B (zh) 2011-12-20 2011-12-20 一种嵌入式处理器的存储空间模拟方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110433239.4A CN102541623B (zh) 2011-12-20 2011-12-20 一种嵌入式处理器的存储空间模拟方法

Publications (2)

Publication Number Publication Date
CN102541623A true CN102541623A (zh) 2012-07-04
CN102541623B CN102541623B (zh) 2015-02-11

Family

ID=46348588

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110433239.4A Active CN102541623B (zh) 2011-12-20 2011-12-20 一种嵌入式处理器的存储空间模拟方法

Country Status (1)

Country Link
CN (1) CN102541623B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106095788A (zh) * 2016-05-27 2016-11-09 杭州华三通信技术有限公司 一种数据存储方法及装置
CN107609143A (zh) * 2017-09-21 2018-01-19 国电南瑞科技股份有限公司 一种分布式实时内存数据库的分片信息存储方法
CN110267260A (zh) * 2019-06-17 2019-09-20 Oppo广东移动通信有限公司 刷机方法、装置、终端及计算机可读存储介质
CN111831581A (zh) * 2020-07-16 2020-10-27 长江存储科技有限责任公司 数据读取方法、装置及数据存储设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101075214A (zh) * 2007-06-28 2007-11-21 腾讯科技(深圳)有限公司 一种内存管理方法和内存管理系统
CN101246452A (zh) * 2007-02-12 2008-08-20 国际商业机器公司 执行快速的mmu模拟的方法和装置、以及全系统模拟器
CN101853213A (zh) * 2009-04-03 2010-10-06 宏正自动科技股份有限公司 存储器集成装置及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101246452A (zh) * 2007-02-12 2008-08-20 国际商业机器公司 执行快速的mmu模拟的方法和装置、以及全系统模拟器
CN101075214A (zh) * 2007-06-28 2007-11-21 腾讯科技(深圳)有限公司 一种内存管理方法和内存管理系统
CN101853213A (zh) * 2009-04-03 2010-10-06 宏正自动科技股份有限公司 存储器集成装置及方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106095788A (zh) * 2016-05-27 2016-11-09 杭州华三通信技术有限公司 一种数据存储方法及装置
CN107609143A (zh) * 2017-09-21 2018-01-19 国电南瑞科技股份有限公司 一种分布式实时内存数据库的分片信息存储方法
CN110267260A (zh) * 2019-06-17 2019-09-20 Oppo广东移动通信有限公司 刷机方法、装置、终端及计算机可读存储介质
CN111831581A (zh) * 2020-07-16 2020-10-27 长江存储科技有限责任公司 数据读取方法、装置及数据存储设备
CN111831581B (zh) * 2020-07-16 2021-05-14 长江存储科技有限责任公司 数据读取方法、装置及数据存储设备

Also Published As

Publication number Publication date
CN102541623B (zh) 2015-02-11

Similar Documents

Publication Publication Date Title
CN104750619B (zh) 数据储存装置以及快闪存储器控制方法
CN105830022B (zh) 访问文件的方法和装置
CN101203838B (zh) 直接存储器存取转换的地址窗口支持
CN102819496B (zh) 闪存ftl的地址转换方法
KR101944876B1 (ko) 파일 액세스 방법 및 장치 및 스토리지 디바이스
CN105677879B (zh) 内存关系数据库的数据组织及访问方法
CN103049397B (zh) 一种基于相变存储器的固态硬盘内部缓存管理方法及系统
CN103425600B (zh) 一种固态盘闪存转换层中的地址映射方法
US20140223089A1 (en) Method and device for storing data in a flash memory using address mapping for supporting various block sizes
CN104346284B (zh) 一种内存管理方法及内存管理设备
US9436751B1 (en) System and method for live migration of guest
CN106354658B (zh) 一种降低混合映射算法中映射表内存资源占用的方法
CN105283855A (zh) 一种寻址方法及装置
CN108664523A (zh) 一种虚拟磁盘文件格式转换方法和装置
CN103942159A (zh) 一种基于混合存储设备的数据读写方法与装置
CN103488523A (zh) 一种页的访问方法和页的访问装置、服务器
CN102541623B (zh) 一种嵌入式处理器的存储空间模拟方法
CN106201329B (zh) 循环区块模式下的数据存取方法以及使用该方法的装置
CN102662869A (zh) 虚拟机中的内存访问方法和装置及查找器
CN110019248A (zh) 用于动态多存储格式数据库访问的技术
CN103365786A (zh) 数据存储方法、装置和系统
CN101308701A (zh) 管理非易失性存储器的映射表的设备和方法
CN101944011B (zh) 运行程序的装置、芯片和方法
CN102999441A (zh) 一种细粒度内存访问的方法
US20190187964A1 (en) Method and Apparatus for Compiler Driven Bank Conflict Avoidance

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