多用户模式下的寄存器建模方法、装置、设备及介质
技术领域
本发明涉及寄存器领域,具体而言,涉及一种多用户模式下的寄存器建模方法、装置、设备及介质。
背景技术
通常数字芯片里包含有一系列的寄存器,比如用于指示工作模式的配置寄存器,用于指示工作状态的状态寄存器,用于统计内部有效指令个数的计数寄存器,还有用于处理异常的中断寄存器等。为了对相关寄存器的功能进行建模,需要在验证环境中建立寄存器模型(RAL,Register AbstractionLayer)。使用UVM提供的寄存器模型可以非常方便的对待测设计(DUT)中的寄存器进行建模,并且提供了一系列的寄存器访问接口方法来方便的对DUT中寄存器的读写访问以及其功能进行验证。
由于数字芯片中往往包含成百上千的寄存器,如果全部用人工手写的方式去建立寄存器模型将会非常耗时耗力且容易出错,因此业界往往采用寄存器模型生成器或者自定义的脚本来替代手写的方式来自动生成寄存器模型。
常用的EDA供应商及对应工具如下:
Synopsys–ralgen
Mentor Graphics–register assistant
Cadence–irelGen
Agnisys–IDesignSpec
以上寄存器生成器支持的输入文件格式包括有XML、IP-XACT、SystemRDL或RALF中的一种或多种,用户只需要提供上述格式的文件用来描述需要产生的寄存器属性信息,然后导入到生成器中按照UVM的寄存器模型的语法进行自动生成即可。通常用户会先准备excel表格文件用于描述芯片所包含的寄存器属性信息,然后通过编写脚本将其转换为寄存器模型生成器支持的格式XML、IP-XACT、SystemRDL或RALF中的一种,然后再导入生成器去产生寄存器模型,如图1所示。
以上方案在一般情况下是可行的,然而有些时候需要根据用户使用场景或者出于对信息安全的角度考虑,芯片中的寄存器需要根据配置的用户模式来确定是否有权限对其中的域段进行读写访问。比如说有以下三种用户模式:
(1)配置模式:用于配置芯片所采用的模式。
(2)用户模式:芯片正常运行期间所采用的模式。
(3)调试模式:芯片调试时所采用的模式。
在这三种用户模式下,对各个寄存器中域段的读写访问权限是不一样的,如何在基于UVM寄存器模型的基础上实现对多种用户权限模式的支持是现有方案需要解决的问题。
此外,要解决这个问题,除了需要考虑通过寄存器模型来实现对DUT寄存器的前门和后门读写访问以外,还要考虑通过适配器来完成寄存器模型序列和实际寄存器总线序列的转换,并且需要及时更新寄存器模型中的镜像值,从而与DUT中实际寄存器的值保持同步。
发明内容
有鉴于此,本发明的目的在于提供一种多用户模式下的寄存器建模方法、装置、设备及介质,以改善上述问题。
本发明实施例提供了一种多用户模式下的寄存器建模方法,其包括:
读取寄存器属性描述文件;其中,所述寄存器属性描述文件包括寄存器基本属性描述信息、多种用户模式及与每种用户模式对应的寄存器读写访问的掩膜值;
基于寄存器属性描述文件,调用预设的脚本自动生成寄存器模型;所述寄存器模型包括寄存器设计和验证模型文件以及多用户模式下的寄存器读写访问的掩膜文件;
调用所述寄存器模型提供的寄存器读写访问方法对寄存器进行读写访问;其中,所述寄存器模型的读写访问事务请求数据类型被寄存器模型适配器转换为寄存器总线能够接收的事务数据类型,然后经由寄存器总线代理以及其内部的驱动器,监测器,序列器组件转换从而将寄存器读写访问请求最终驱动到寄存器总线上,以最终完成对DUT中实际寄存器的读写访问;
将寄存器读写访问请求数据发送给预先创建的寄存器模型预测器,以经由所述寄存器模型预测器根据多用户模式下的寄存器的掩膜值对寄存器模型中的镜像值进行预测更新,从而完成与DUT中实际寄存器值的同步。
优选地,所述寄存器基本属性描述信息包括寄存器总线宽度、基地址、各个寄存器的类型、名称、宽度、复位值以及各个域段的名称。
优选地,所述寄存器设计和验证模型文件通过如下方式生成:
创建模板文件;其中模板文件包含模板宏文件和调用该宏的模板文件;
通过python脚本对所述寄存器基本属性描述信息进行解析,然后调用jinjia2模块对所述模板文件进行渲染,生成最终的寄存器设计文件和寄存器模型。
优选地,多用户模式下的寄存器读写访问的掩膜文件通过在寄存器模型掩膜值类reg_mask_block中使用关联数组对寄存器掩膜值进行建模生成;所述掩膜文件提供配置和获取寄存器掩膜值的接口方法,以供寄存器模型预测器调用。
优选地,所述寄存器模型适配器至少用于实现如下两个接口方法:
reg2bus()方法,其用于将寄存器模型发起的寄存器读写访问数据类型转换为寄存器总线接口上能够接受的格式类型;
bus2reg()方法,其用于当监测到寄存器总线接口上有对寄存器的访问操作时,将监测收集到的总线事务类型转换为寄存器模型能够接受的格式类型。
优选地,将寄存器读写访问请求数据发送给预先创建的寄存器模型预测器,以经由所述寄存器模型预测器根据多用户模式下的寄存器的掩膜值对寄存器模型中的镜像值进行预测更新,从而完成与DUT中实际寄存器值的同步具体包括:
在UVM验证方法学提供的预测器基类uvm_reg_predictor中预留可在子类重载实现的用于根据配置的寄存器掩膜值来对寄存器模型的镜像值进行更新预测的接口方法predict_mask;
将所述接口方法predict_mask放置到uvm_reg_predictor基类内部的用于接收总线事务的端口bus_in的接收后处理write方法中调用do_predict方法对寄存器模型镜像值进行预测之前的位置;
对所述基类uvm_reg_predictor进行派生,得到寄存器模型预测器predictor子类,然后在该子类中重载实现在基类中预留的接口方法predict_mask;
在所述接口方法predict_mask获取用于标识用户模式的寄存器,然后读取该寄存器的值从而得到用户模式,接着调用之前的寄存器模型掩膜值类reg_mask_block中提供的接口方法来获取当前要访问的寄存器的掩膜值;
将要更新预测的镜像值与获取的所述掩膜值进行与运算操作,从而完成与DUT中实际寄存器值的同步。
本发明实施例还提供了一种多用户模式下的寄存器建模装置,其包括:
读取单元,用于读取寄存器属性描述文件;其中,所述寄存器属性描述文件包括寄存器基本属性描述信息、多种用户模式及与每种用户模式对应的寄存器读写访问的掩膜值;
建模单元,用于基于寄存器属性描述文件,调用预设的脚本自动生成寄存器模型;所述寄存器模型包括寄存器设计和验证模型文件以及多用户模式下的寄存器读写访问的掩膜文件;
适配单元,用于调用所述寄存器模型提供的寄存器读写访问方法对寄存器进行读写访问;其中,所述寄存器模型的读写访问事务请求数据类型被寄存器模型适配器转换为寄存器总线能够接收的事务数据类型,然后经由寄存器总线代理以及其内部的驱动器,监测器,序列器组件转换从而将寄存器读写访问请求最终驱动到寄存器总线上,以最终完成对DUT中实际寄存器的读写访问;
预测单元,用于将寄存器读写访问请求数据发送给预先创建的寄存器模型预测器,以经由所述寄存器模型预测器根据多用户模式下的寄存器的掩膜值对寄存器模型中的镜像值进行预测更新,从而完成与DUT中实际寄存器值的同步。
本发明实施例还提供了一种多用户模式下的寄存器建模设备,其包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的多用户模式下的寄存器建模生成。
本发明实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的多用户模式下的寄存器建模方法。
综上所述,本实施例提供的多用户模式下的寄存器建模方法,其具有如下有益效果:
(1)可以自动生成芯片中寄存器设计文件和寄存器验证模型,以替代手工编写的方式,从而提升开发效率;
(2)支持多用户模式下对寄存器进行建模,实现根据配置的用户模式来决定用户对各个寄存器中的域段读写的访问权限,从而达到根据用户使用场景或者出于对信息安全角度考虑的应用目的;
(3)通过寄存器模型适配器以及预测器完成寄存器模型序列和实际寄存器总线序列的转换,并且能够及时更新寄存器模型中的镜像值,从而与DUT中实际寄存器的值保持同步。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是现有的建立寄存器模型的方案示意图。
图2是本发明第一实施例提供的多用户模式下的寄存器建模方法的流程示意图。
图3是本发明实施例提供的多用户模式下的寄存器建模方法的工作原理图。
图4是本发明第二实施例提供的多用户模式下的寄存器建模装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了更好的理解本发明的技术方案,下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
下面结合附图与具体实施方式对本发明作进一步详细描述:
请参阅图2及图3,本发明第一实施例提供了一种多用户模式下的寄存器建模方法,其可由多用户模式下的寄存器建模设备(以下简称建模设备)来执行,特别的,由所述建模设备内的一个或者多个处理器来执行,以实现如下步骤:
S101,读取寄存器属性描述文件;其中,所述寄存器属性描述文件包括寄存器基本属性描述信息、多种用户模式及与每种用户模式对应的寄存器读写访问的掩膜值。
在本实施例中,优选地,所述寄存器属性描述文件为yaml格式文件,yaml格式文件具有简单易读,且可以利用python中的yaml模块来方便地对该类型文件进行解析。当然,也可以采用其他格式来编写所述寄存器属性描述文件,本发明在此不做具体限定。
在本实施例中,所述寄存器基本属性描述信息包括寄存器总线宽度、基地址、各个寄存器的类型、名称、宽度、复位值以及各个域段的名称。
S102,基于寄存器属性描述文件,调用预设的脚本自动生成寄存器模型;所述寄存器模型包括寄存器设计和验证模型文件以及多用户模式下的寄存器读写访问的掩膜文件。
其中,具体地,所述寄存器设计和验证模型文件通过如下方式生成:
创建模板文件;其中模板文件包含模板宏文件和调用该宏的模板文件;
通过python脚本对所述寄存器基本属性描述信息进行解析,然后调用jinjia2模块对所述模板文件进行渲染,生成最终的寄存器设计和验证模型文件。
其中,具体地,多用户模式下的寄存器读写访问的掩膜文件通过在寄存器模型掩膜值类reg_mask_block中使用关联数组对寄存器掩膜值进行建模生成;所述掩膜文件提供配置和获取寄存器掩膜值的接口方法,以供寄存器模型预测器调用。
S103,调用所述寄存器模型提供的寄存器读写访问方法对寄存器进行读写访问;其中,所述寄存器模型的读写访问事务请求数据类型被寄存器模型适配器转换为寄存器总线能够接收的事务数据类型,然后经由寄存器总线代理以及其内部的驱动器,监测器,序列器组件转换从而将寄存器读写访问请求最终驱动到寄存器总线上,以最终完成对DUT中实际寄存器的读写访问。
其中,具体地,为了实现上述功能,在本实施例中,所述寄存器模型适配器至少实现如下两个接口方法:
reg2bus()方法,其用于将寄存器模型发起的寄存器读写访问数据类型转换为寄存器总线接口上能够接受的格式类型。
bus2reg()方法,其用于当监测到寄存器总线接口上有对寄存器的访问操作时,将监测收集到的总线事务类型转换为寄存器模型能够接受的格式类型。
S104,将寄存器读写访问请求数据发送给预先创建的寄存器模型预测器,以经由所述寄存器模型预测器根据多用户模式下的寄存器的掩膜值对寄存器模型中的镜像值进行预测更新,从而完成与DUT中实际寄存器值的同步。
具体地,步骤S104包括:
首先,在UVM验证方法学提供的预测器基类uvm_reg_predictor中预留可在子类重载实现的用于根据配置的寄存器掩膜值来对寄存器模型的镜像值进行更新预测的接口方法predict_mask;
然后,将所述接口方法predict_mask放置到uvm_reg_predictor基类内部的用于接收总线事务的端口bus_in的接收后处理write方法中调用do_predict方法对寄存器模型镜像值进行预测之前的位置;
接着,对所述基类uvm_reg_predictor进行派生,得到寄存器模型预测器predictor子类,然后在该子类中重载实现在基类中预留的接口方法predict_mask;
再接着,在所述接口方法predict_mask获取用于标识用户模式的寄存器,然后读取该寄存器的值从而得到用户模式,接着调用之前的寄存器模型掩膜值类reg_mask_block中提供的接口方法来获取当前要访问的寄存器的掩膜值;
最后,将要更新预测的镜像值与获取的所述掩膜值进行与运算操作,从而完成与DUT中实际寄存器值的同步。
综上所述,本实施例提供的多用户模式下的寄存器建模方法,其具有如下有益效果:
(1)可以自动生成芯片中寄存器设计文件和寄存器验证模型,以替代手工编写的方式,从而提升开发效率;
(2)支持多用户模式下对寄存器进行建模,即可以实现根据配置的用户模式来决定用户对各个寄存器中的域段读写的访问权限,从而达到根据用户使用场景或者出于对信息安全角度考虑的应用目的;
(3)通过寄存器模型适配器以及预测器完成寄存器模型序列和实际寄存器总线序列的转换,并且能够及时更新寄存器模型中的镜像值,从而与DUT中实际寄存器的值保持同步。
请参阅图4,本发明第二实施例还提供了一种多用户模式下的寄存器建模装置,其包括:
读取单元210,用于读取寄存器属性描述文件;其中,所述寄存器属性描述文件包括寄存器基本属性描述信息、多种用户模式及与每种用户模式对应的寄存器读写访问的掩膜值;
建模单元220,用于基于寄存器属性描述文件,调用预设的脚本自动生成寄存器模型;所述寄存器模型包括寄存器设计和验证模型文件以及多用户模式下的寄存器读写访问的掩膜文件;
适配单元230,用于调用所述寄存器模型提供的寄存器读写访问方法对寄存器进行读写访问;其中,所述寄存器模型的读写访问事务请求数据类型被寄存器模型适配器转换为寄存器总线能够接收的事务数据类型,然后经由寄存器总线代理以及其内部的驱动器,监测器,序列器组件转换从而将寄存器读写访问请求最终驱动到寄存器总线上,以最终完成对DUT中实际寄存器的读写访问;
预测单元240,用于将寄存器读写访问请求数据发送给预先创建的寄存器模型预测器,以经由所述寄存器模型预测器根据多用户模式下的寄存器的掩膜值对寄存器模型中的镜像值进行预测更新,从而完成与DUT中实际寄存器值的同步。
本发明第三实施例还提供了一种多用户模式下的寄存器建模设备,其包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如上述的多用户模式下的寄存器建模生成。
本发明第四实施例还提供了一种计算机可读存储介质,其存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如上述的多用户模式下的寄存器建模方法。
在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。