CN102184131B - 片上系统的仿真验证方法及装置 - Google Patents

片上系统的仿真验证方法及装置 Download PDF

Info

Publication number
CN102184131B
CN102184131B CN201110092119.2A CN201110092119A CN102184131B CN 102184131 B CN102184131 B CN 102184131B CN 201110092119 A CN201110092119 A CN 201110092119A CN 102184131 B CN102184131 B CN 102184131B
Authority
CN
China
Prior art keywords
graphical
dut
function
dpi
software module
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
CN201110092119.2A
Other languages
English (en)
Other versions
CN102184131A (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.)
Shenzhen ZTE Microelectronics Technology Co Ltd
Original Assignee
ZTE Corp
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 ZTE Corp filed Critical ZTE Corp
Priority to CN201110092119.2A priority Critical patent/CN102184131B/zh
Publication of CN102184131A publication Critical patent/CN102184131A/zh
Application granted granted Critical
Publication of CN102184131B publication Critical patent/CN102184131B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种片上系统的仿真验证方法及装置。其中,该方法包括:在仿真过程中,被测设备(DUT)通过直接编程接口(DPI)利用软件模块中预设的图形化函数生成需要的图形化可控界面;通过所述图形化可控界面,接收外部设备的输入信息和/或输出仿真信息。通过本发明,可以在DUT的仿真验证过程中输入或输出控制命令,从而提高了仿真验证的可控性。

Description

片上系统的仿真验证方法及装置
技术领域
本发明涉及数字IC设计技术领域,具体而言,涉及一种片上系统的仿真验证方法及装置。
背景技术
在片上系统(System On Chip,简称为SOC)系统的仿真验证中,经常采用软硬件协同进行仿真验证,从而可以提前进行系统的软件及硬件调试,不需要等到硬件设计完成后才开始软件的调试,从而可以大大缩短开发的周期。
目前,采用软硬件协同进行仿真验证的实现方式中,在设计完成后,在仿真验证过程中,硬件RTL(Register Transfer Level)模块在运行过程中没有设置供外部控制的输入输出接口,因此,硬件RTL模块的仿真运行不接受外部的干预,仿真验证的可控性较低。例如,不能在仿真运行过程中更新被测设备(Design Under Test,简称为DUT)的参数配置,而只能在仿真开始前,在设计时完成。如果根据当前DUT参数配置,仿真运行中发现有某个参数配置错误,也不能在此次仿真中修正参数,而只能采取重新仿真的方式。从而降低了仿真验证的效率,增加反复运行的时间,尤其在网表验证中重新仿真会浪费大量时间。并且,在仿真过程中也不能实现仿真信息的打印等功能,从而降低了仿真的直观性
针对相关技术中由于没有设置供外部控制的输入输出接口而导致仿真验证的可控性较低的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种SOC的仿真验证方法及装置,以至少解决上述问题。
根据本发明的一个方面,提供了一种片上系统的仿真验证方法,包括:在仿真过程中,被测设备(DUT)通过直接编程接口(DPI)利用软件模块中预设的图形化函数生成需要的图形化可控界面;通过所述图形化可控界面,接收外部设备的输入信息和/或输出仿真信息。
优选地,所述图形化可控界面包括:一个或多个视窗。
优选地,在所述图形化可控界面包括多个视窗的情况下,所述DUT通过DPI利用软件模块中预设的图形化函数生成需要的图形化可控界面包括:所述DUT通过所述DPI导入所述图形化函数,其中,所述图形化函数用于建立与所述多个视窗数量相同的视窗;所述DUT调用所述图形化函数,建立所述多个视窗。
优选地,所述方法还可以包括:所述软件模块创建多个进程,每个进程对应于所述多个视窗中的一个视窗,在建立所述多个视窗后,各个所述视窗等待事件触发的各个事件循环在各自对应的进程中循环。
优选地,在所述图形化可控界面包括多个视窗的情况下,所述DUT通过DPI利用软件模块中预设的图形化函数生成需要的图形化可控界面包括:所述DUT通过所述DPI导入所述图形化函数,其中,所述图形化函数用于建立单视窗;所述DUT调用n次所述图形化函数,分别建立所述多个视窗,其中,n为所述多个视窗的数量。
优选地,在建立所述多个视窗之后,所述方法还可以包括:所述DUT通过所述DPI从所述软件模块中导入多个操作函数,其中,每个操作函数用于对所述视窗执行一种操作;所述DUT调用所述操作函数,对所述视窗执行相应的操作;所述DUT将执行的操作生成任务或功能导出到所述软件模块。
优选地,所述多个视窗可以包括:用于显示打印信息的视窗、用于显示仿真中的图像信息的视窗以及用于接收外部设备的输入信息的视窗。
优选地,所述外部设备的输入信息可以包括:DUT参数;在接收到所述外部设备的输入信息之后,所述方法还可以包括:所述DUT将接收到的所述DUT参数通过所述DPI导出到所述软件模块中,所述软件模块利用所述DUT参数对所述DUT进行配置更新。
根据本发明的另一方面,提供了一种片上系统的仿真验证装置,包括:被测设备,用于在仿真过程中通过DPI利用软件模块中的预设的图形化函数生成需要的图形化可控界面,通过所述图形化可控界面,接收外部设备的输入信息和/或输出仿真信息;所述软件模块,用于通过所述DPI提供所述图形化函数。
优选地,所述被测设备采用Verilog描述。
通过本发明,被测设备通过直接编程接口(Direct Programming Interface,简称为DPI)利用软件模块中的图形化函数生成图形化可控界面,从而可以在仿真过程中接收外部的控制,解决了相关技术中由于没有设置供外部控制的输入输出接口而导致仿真验证的可控性较低的问题,进而提高了SOC验证的可控性。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的SOC的仿真验证装置的结构示意图;
图2是根据本发明优选实施例的SOC的仿真验证装置的结构示意图;
图3是根据本发明实施例的SOC的仿真验证方法的流程图;
图4是根据本发明优选实施例的多视窗创建的流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1是根据本发明实施例的SOC的仿真验证装置的结构示意图,如图1所示,该装置主要包括:被测设备(DUT)10,用于在仿真过程中通过DPI利用软件模块20中的预设的图形化函数生成需要的图形化可控界面,通过所述图形化可控界面,接收外部设备的输入信息和/或输出仿真信息;软件模块20,通过DPI与被测设备10通信,用于通过所述DPI提供所述图形化函数。
通过本发明实施例的上述装置,被测设备10在仿真过程中可以通过DPI利用软件模块20中的图形化函数生成图形化可控界面,从而使得外部可以通过图形化函数对仿真过程进行控制,进而提高了验证的可控性。
在本发明实施例的一个优选实施方式中,被测设备10可以由Verilog描述,例如,被测设备10可以为用Verilog描述硬件寄存器传输级(Register Transfer Level,简称为RTL)模块。
在本发明实施例的另一个优选实施方式中,如图2所示,软件模块20可以是C语言实现,提供所述图形化函数。
在本发明实施例的一个优选实施方式中,C语言实现的图形化函数可以调用Xlib库,利用Xlib库提供的基本函式来编写基于X Server的应用函数。将编写的应用函数进行一系列灵活的封装,变成例如创建窗口、创建颜色系、创建字体及等待事件输入等基本的操作函数以供灵活应用。其中,X Window系统是UNIX世界中标准的图形操作接口,采取的是Server/Client的模式运作,Server指的是X Server,是一个完整的图形桌面装置,Client指的是在此Display中执行的所有X Window应用程序,屏幕绘图、接收鼠标及键盘输入等,都必须向X Server发出请求,由X Server代为完成。Server/Client的沟通管道是X Window底层函式库:Xlib。Xlib库给程序提供对X服务器底层的访问,同时为C语言提供的库,因此可以在C软件中调用Xlib库的函数使用。
如图2所示,C中封装好的函数再利用DPI接口导入到Verilog实现的硬件验证环境(包含DUT 10)中,这样可以在Verilog中直接利用C中封装起来的支持X Server的图形化函数,建立起通用的模块夹具。将模块灵活的例化到软硬件协同仿真的验证平台中,就可以在仿真的过程中实现期望的图形化可控界面,实时输出仿真图像等信息,随时更改DUT配置参数等,使整个仿真过程的可控性和直观性得到大幅度的提高。同时模块可以根据具体的需要灵活进行创建和维护,令使用更方便,仿真过程更具可维护性。
根据本发明实施例,还提供了一种SOC的仿真验证方法,该方法可以通过图1或图2所示的装置实现。
图3是根据本发明实施例的SOC的仿真验证方法的流程图,如图3所示,该方法主要包括以下步骤:
步骤S302,在仿真过程中,DUT通过DPI利用软件模块中预设的图形化函数生成需要的图形化可控界面;
其中,图形化可控界面可以包括一个或多个视窗,每个视窗可以用于响应不同的输入,其中,建立单视窗相对简单,建立多个视窗在实际应用中会更加方便和直观一些。例如,可以建立三个视窗:一个视窗用于显示打印信息、一个视窗用于显示仿真中的图像信息,另一个视窗用于接收键盘或鼠标等外部设备的输入信息(包括DUT参数以及绘图等)。
在具体实施过程,对于包括多个视窗的图形化可控界面的建立,包括但不限于以下两种方案:
第一种方案:在软件模块中编写一个用于创建多个视窗的模块(即图形化函数),通过DPI将该模块导入到DUT中,DUT调用该模块,将模块例化进仿真的平台直接创建多个视窗,每个视窗分别循环等待各自的事件触发;
第二种方案:在软件模块中编写一个通用的单视窗的模块(即图形化函数),通过DPI将该模块导入到DUT中,然后根据需要,DUT多次调用该模块,在平台中例化多个这样的模块,创建不同的视窗口,每个视窗单循环等待自己的事件触发。
在实际使用中第一种方案更加方便,第二种方案更加灵活,可以根据不同的需求选择采用的方式。
步骤S304,通过所述图形化可控界面,接收外部设备的输入信息和/或输出仿真信息。
其中,外部设备的输入信息包括:DUT参数,在接收到所述外部设备的输入信息之后,所述DUT将接收到的所述DUT参数通过所述DPI导出到所述软件模块中,所述软件模块利用所述DUT参数对所述DUT进行配置更新,从而使得后续的仿真实现运行在新的DUT配置之上,而无需重新运行仿真,进而提高整个验证过程的效率。
下面以图2所示的装置为例,对本发明优选实施例中建立多视窗的流程进行说明。
实例1
在本实例中,采用上述第二种方案创建多个视窗的方式,如图4所示,在本实例中,首先需要与Xlib库进行链接,编译基于Xlib的软件,例如,可以使用XOpenDisplay()函式得到一个连接到此服务器的display指针,可以封装成连接函数,并得到一个返回值。连接到X服务器后即可以利用Xlib提供的函数创建和初始化一个窗口,创建窗口后可以根据窗口的具体功能来设定窗口的属性。例如,加载字体、颜色,然后设置前景背景色、窗口标题等,这些均可以根据Xlib手册中提供的函式进行灵活的编写和封装然后在窗口使用。下一步是设定窗口的预接收种类,例如,窗口为接收键盘或鼠标的某种操作的响应等。一个视窗设定好之后,整个程序就在其事件循环event_loop中等待相应的事件触发,如果事件得到触发就按照设计去处理这个事件,处理后判断是否仍需要继续等待事件,需要则返回event_loop继续循环等待,不需要则退出并结束,其中,event_loop可以根据需要进行编写。
在本发明实施例的一个优选实施方式中,上述创建视窗的过程可以将每个步骤单独封装成函数,分别import到verilog硬件中依次调用。在另一个优选实施方式中,可以整体封装成创建视窗模块的函数,然后通过DPI导入到硬件环境中使用,均可以实现所需视窗功能。
在本发明实施例中,建立一个通用的单窗口模块的桌面视窗后,可以根据具体需要灵活的例化几个在软硬件协同仿真平台中,这样创建了多个视窗模块,每个模块单独工作在其事件循环中,可以分别响应各自的事件触发。
实例2
对于采用第一种方案创建多个视窗的方式,如果采用单进程创建多视窗模块的方式,在视窗上绘图的刷新效率会比较低,时间上有一定的延迟,从而可能导致一些事件的触发没有得到实时处理,刷新的效果不够好。
例如,如果采用单进程创建三个视窗模块,三个c_task中都存在event_loop循环,三个循环都要利用DPI接口来实时刷新,会出现一个循环抢占了DPI接口导致其它循环的事件在触发时还需要等待DPI接口响应的情况,这样刷新效率比较低,如果一个循环占用DPI接口时其它的循环如果当前处于导出(expose)的状态,则其事件触发将得不到响应,就会丢掉一些事件的处理,并且刷新的效果不好。
在本实例中采用在软件模块中创建多进程编程解决,实现三个视窗等待事件触发的三个event_loop在各自的进程中循环,三个进程互不影响,不再抢占同一个DPI接口,可以避免丢掉事件的情况,并且提高了刷新的效果。
在本发明实施例的优选实施方式中,建立多个视窗响应不同的输入以及各种输出时均可以采用这种多进程的方式实现,可以在RTL硬件环境中例化一个导入(import)进来的软件实现的多视窗模块,仿真中在接收到键盘输入的DUT参数时,对DUT进行配置更新,使得后续的仿真实现运行在新的DUT配置之上,而无需重新运行仿真,提高整个验证过程的效率。
在上述实例1和实例2中,在仿真验证结束并结束掉所有调用后,需要关闭与X Server服务器的连接,例如,可以调用Xlib的XCloseDisplay(display)函式。这样建立的桌面视窗模块根据具体验证的需要进行例化使用,可以实现软硬件协同验证过程的DUT配置可控,并增加输出打印控制信息等直观手段。
从以上的描述中,可以看出,本发明实施例提供一种利用灵活建立图形桌面视窗模块提高验证过程可控性的装置及方法,它具有在软硬件协同验证的过程中可以随时改变仿真DUT参数,实时输出仿真信息,输出仿真图像,更改模块配置等作用,改变仿真验证过程中不可控的缺陷。在硬件中实现图形桌面装置,将此模块作为一个夹具灵活的加入软硬件协同仿真验证平台,可以为验证灵活提供可控的图形桌面视窗,增加验证的可控性和直观性。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种片上系统SOC的仿真验证方法,其特征在于,包括:
在仿真验证过程中,被测设备DUT通过直接编程接口DPI利用软件模块中预设的图形化函数生成需要的图形化可控界面;
通过所述图形化可控界面,接收外部设备的输入信息和/或输出仿真信息;
其中,所述被测设备为用Verilog描述硬件寄存器传输级RTL模块;
所述外部设备的输入信息包括:DUT参数。
2.根据权利要求1所述的方法,其特征在于,所述图形化可控界面包括:一个或多个视窗。
3.根据权利要求2所述的方法,其特征在于,在所述图形化可控界面包括多个视窗的情况下,所述DUT通过DPI利用软件模块中预设的图形化函数生成需要的图形化可控界面包括:
所述DUT通过所述DPI导入所述图形化函数,其中,所述图形化函数用于建立与所述多个视窗数量相同的视窗;
所述DUT调用所述图形化函数,建立所述多个视窗。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:所述软件模块创建多个进程,每个进程对应于所述多个视窗中的一个视窗,在建立所述多个视窗后,各个所述视窗等待事件触发的各个事件循环在各自对应的进程中循环。
5.根据权利要求2所述的方法,其特征在于,在所述图形化可控界面包括多个视窗的情况下,所述DUT通过DPI利用软件模块中预设的图形化函数生成需要的图形化可控界面包括:
所述DUT通过所述DPI导入所述图形化函数,其中,所述图形化函数用于建立单视窗;
所述DUT调用n次所述图形化函数,分别建立所述多个视窗,其中,n为所述多个视窗的数量。
6.根据权利要求5所述的方法,其特征在于,在建立所述多个视窗之后,所述方法还包括:
所述DUT通过所述DPI从所述软件模块中导入多个操作函数,其中,每个操作函数用于对所述视窗执行一种操作;
所述DUT调用所述操作函数,对所述视窗执行相应的操作;
所述DUT将执行的操作生成任务或功能导出到所述软件模块。
7.根据权利要求3至6中任一项所述的方法,其特征在于,所述多个视窗包括:用于显示打印信息的视窗、用于显示仿真中的图像信息的视窗以及用于接收外部设备的输入信息的视窗。
8.根据权利要求1至6中任一项所述的方法,其特征在于,所述外部设备的输入信息包括:DUT参数;在接收到所述外部设备的输入信息之后,所述方法还包括:所述DUT将接收到的所述DUT参数通过所述DPI导出到所述软件模块中,所述软件模块利用所述DUT参数对所述DUT进行配置更新。
9.一种片上系统SOC的仿真验证装置,其特征在于,包括:
被测设备,用于在仿真验证过程中通过DPI利用软件模块中的预设的图形化函数生成需要的图形化可控界面,通过所述图形化可控界面,接收外部设备的输入信息和/或输出仿真信息;
所述软件模块,用于通过所述DPI提供所述图形化函数;
其中,所述被测设备为用Verilog描述硬件寄存器传输级RTL模块;
所述外部设备的输入信息包括:DUT参数。
CN201110092119.2A 2011-04-13 2011-04-13 片上系统的仿真验证方法及装置 Active CN102184131B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110092119.2A CN102184131B (zh) 2011-04-13 2011-04-13 片上系统的仿真验证方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110092119.2A CN102184131B (zh) 2011-04-13 2011-04-13 片上系统的仿真验证方法及装置

Publications (2)

Publication Number Publication Date
CN102184131A CN102184131A (zh) 2011-09-14
CN102184131B true CN102184131B (zh) 2015-08-12

Family

ID=44570311

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110092119.2A Active CN102184131B (zh) 2011-04-13 2011-04-13 片上系统的仿真验证方法及装置

Country Status (1)

Country Link
CN (1) CN102184131B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111061629A (zh) * 2019-11-21 2020-04-24 中国航空工业集团公司西安航空计算技术研究所 一种基于Verilog的图形命令预译码单元验证平台

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1577274A (zh) * 2003-07-01 2005-02-09 华为技术有限公司 自动化仿真方法及系统
CN101174283A (zh) * 2007-12-03 2008-05-07 电子科技大学 一种基于网络的软硬件协同仿真平台

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7409602B2 (en) * 2003-11-12 2008-08-05 Lsi Corporation Methodology for debugging RTL simulations of processor based system on chip
US8205174B2 (en) * 2009-08-17 2012-06-19 Hong Kong Applied Science And Technology Research Integrated circuit modeling method and framework tool

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1577274A (zh) * 2003-07-01 2005-02-09 华为技术有限公司 自动化仿真方法及系统
CN101174283A (zh) * 2007-12-03 2008-05-07 电子科技大学 一种基于网络的软硬件协同仿真平台

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于System Verilog DPI 的ARM SoC虚拟调试验证平台的设计;虞致国等;《微电子学与计算机》;20091105;第117-119页、图4 *

Also Published As

Publication number Publication date
CN102184131A (zh) 2011-09-14

Similar Documents

Publication Publication Date Title
CN1105353C (zh) 测试一个面向对象程序的系统组成部分的方法
CN104821954B (zh) 一种跨平台远程过程调用方法
CN104216715A (zh) 一种Web App开发框架及方法
US8504344B2 (en) Interface between a verification environment and a hardware acceleration engine
CN105740139B (zh) 一种基于虚拟环境的嵌入式软件调试方法
CN106406266A (zh) 一种模拟由核电站dcs系统控制的设备的方法
CN103092732A (zh) 利用脚本动态监控设备的系统
CN103152433B (zh) 一种分布式服务端的使用、交互和请求处理方法
CN105487403A (zh) 一种基于can的运动控制系统建立及其仿真建模方法
CN103678099B (zh) 一种实现硬件平台与软件平台通讯的方法以及装置
CN102184131B (zh) 片上系统的仿真验证方法及装置
CN108228139B (zh) 基于html5浏览器框架的单片机开发系统及装置
CN106896956B (zh) 一种“道”系统下多点触控的实现方法
CN102033751A (zh) Osd屏显的软件适配方法、系统及多媒体终端
CN105740039A (zh) 基于rtx与vmic的gnc实时仿真系统构建方法
CN105630513A (zh) 框架的搭建方法及装置
CN104951346A (zh) 一种用于嵌入式系统的进程管理方法及系统
CN111930628B (zh) 一种安全级显示模块图形组态仿真系统及其仿真方法
CN103530227B (zh) 一种开放式脚本编程系统
CN112526966A (zh) 一种控制器hil自动化测试方法及系统
CN111090430A (zh) 一种嵌入式系统下的应用软件开发系统
CN111400190A (zh) 自动化测试流程生成方法、装置及计算机可读存储介质
CN107358010B (zh) 基于模型的航电仿真构型控制系统体系结构设计方法
CN116909894B (zh) 一种虚实融合的混合动态测试平台设计方法
CN114896919B (zh) 一种基于fpga的集成电路原型验证系统及方法

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
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20151109

Address after: Dameisha Yantian District of Shenzhen City, Guangdong province 518085 Building No. 1

Patentee after: SHENZHEN ZTE MICROELECTRONICS TECHNOLOGY CO., LTD.

Address before: 518057 Nanshan District science and technology, Guangdong Province, South Road, No. 55, No.

Patentee before: ZTE Corporation

EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20110914

Assignee: Xi'an Chris Semiconductor Technology Co. Ltd.

Assignor: SHENZHEN ZTE MICROELECTRONICS TECHNOLOGY CO., LTD.

Contract record no.: 2019440020036

Denomination of invention: Simulation verification method and device for SoC (system on a chip)

Granted publication date: 20150812

License type: Common License

Record date: 20190619

EE01 Entry into force of recordation of patent licensing contract