寄存器配置同步方法、验证平台系统及配置方法、装置
技术领域
本申请涉及集成电路验证技术领域,具体而言,涉及一种寄存器配置同步方法、验证平台系统及配置方法、装置。
背景技术
随着集成电路规模的不断增大,IC(Integrated Circuit,集成电路)验证也变成了一项极其复杂的工作。在实际应用中,有时候为了加快项目进度,会复用验证架构的Cmodel(验证过程中使用的用C语言、C++语言开发的功能参考模型)和checker(检查器)等一系列CPP class(C plus plus class,C++类)构成验证环境的CPP env(C plus plusenvironment,C++语言开发的验证环境),然后在DUT(design under test,待测试设计)外部挂上monitor(监视器)组件,将观测到的内容经过DPI(direct program interface,直接编程接口)直接发到CPP env中去进行预测和比较。
目前,DUT的验证环境如附图1所示,其中reg model(CPP)为CPP形式的寄存器模型(reg model:register model,寄存器模型),其结构类似于UVM(Universal VerificationMethodology,通用验证方法学)中的寄存器模型,C model需要根据该模型中寄存器的值进行不同的功能处理;C model为DUT的功能参考模型,与DUT做相同的处理之后得出预测结果,最后交与checker进行比较;checker主要功能是比较预测结果和DUT输出结果是否相同,不同则报告错误供开发者定位;input agent(输入代理)主要功能是给DUT提供各种各样的信号激励;output agent(输出代理)主要功能是监视DUT的处理结果,最后交给checker比较;reg model(SV)是SV(systemverilog)语言形式的寄存器模型,用来简化DUT寄存器的配置并镜像DUT寄存器值;BFM(bus function model,总线功能模型)用来直接配置DUT的寄存器,常见的有AXI(Advanced eXtensible Interface,高级可扩展接口)、APB(Advanced Peripheral Bus,高级外围总线)、AHB(Advanced High Performance Bus,高级高性能总线)等总线形式,内部包含有sequencer(序列器)和driver(驱动器),sequencer接收用户提供的sequence(序列),并通过driver去发送transaction(数据包)。
基于上述验证环境,验证的步骤一般为:1、利用reg model(SV)配置DUT的寄存器;2、配置reg model(CPP)寄存器为前面一样的值,供C model和checker使用;3、通过inputagent给DUT灌入激励信号;同时激励信号还会通过DPI发往C model;4、C model根据regmodel(CPP)处理输入信号,将预测结果交给checker用于比较;5、DUT将实际的信号处理完毕交给output agent,最终通过DPI送达checker用于同C model的预测结果进行比较,错误则报告相应的错误给用户进行调试。
在上述的验证过程中,存在有以下两个问题:1、在通过reg model(SV)配置了DUT的寄存器之后,还需要配置相同的内容给reg model(CPP),如果寄存器很多,那么会存在非常庞大且重复的工作量;2、对于开发好的项目,如果后期要改动某些寄存器,需要同时修改两侧的代码,维护起来非常不容易,而且对于不熟悉的人员,可能只配置了一侧,导致DUT结果和C model预测结果不相同,后期出错需要花费大量时间来调试,严重降低工作效率。
发明内容
本申请实施例的目的在于提供一种寄存器配置同步方法、验证平台系统及配置方法、装置,用以解决上述问题。
本申请实施例提供了一种寄存器配置同步方法,包括:在CPP形式的寄存器模型接收到寄存器配置信息时,按照所述寄存器配置信息配置所述寄存器模型的寄存器;通过直接编程接口DPI将所述寄存器配置信息传输给SV环境中的总线功能模型BFM,以通过所述BFM发送所述寄存器配置信息给待测试设计DUT,进而配置所述DUT的寄存器。
在上述实现过程中,通过在CPP形式的寄存器模型处输入寄存器配置信息,以配置CPP环境中的寄存器。同时,CPP形式的寄存器模型通过DPI实现将寄存器配置信息传输给SV环境中BFM,由于DPI可以实现c语言和SV语言之间的操作转换,因此可以实现CPP环境中相关寄存器配置信息配置操作到SV环境中的转换,从而使得BFM能够获取到CPP形式的寄存器模型处接收到的寄存器配置信息,进而将寄存器配置信息给DUT,配置DUT的寄存器。通过上述方式,可以使得仅需在CPP形式的寄存器模型中输入寄存器配置信息,即可同时实现CPP环境和SV环境中的寄存器配置,从而解决了现有配置方案中,需要在reg model(SV)和regmodel(CPP)两侧分别进行寄存器配置的问题,有效降低了寄存器的配置工作量。此外,对于开发好的项目在需要改动某些寄存器配置时,也只需要在reg model(CPP)一侧进行修改和维护即可,不再需要在reg model(SV)和reg model(CPP)两侧分别进行修改操作,有效降低了工作量,提高了工作效率,且即使对于不熟悉的人员,也不会存在只配置了一侧,导致DUT结果和C model预测结果不相同的情况的发生。
进一步地,通过DPI将所述寄存器配置信息传输给SV环境中的总线功能模型BFM,包括:调用DPI搜索函数在SV环境中搜索出BFM代理;所述BFM代理用于将所述寄存器配置信息转化为符合所述BFM协议要求的格式;将所述寄存器配置信息传入所述BFM代理,以通过所述BFM代理将所述寄存器配置信息发送给所述BFM。
应理解,由于BFM通常是通过序列器来获取符合总线协议的数据包,交给驱动器发送,所以在本申请实施例中可以通过配置BFM代理,从而通过搜索出BFM代理,由BFM代理进行中间转化处理,确保寄存器配置信息能够准确给到BFM,并且使得本方案的适用性更好,无需做其他改动。
进一步地,调用DPI搜索函数在SV环境中搜索出BFM代理,包括:通过语法exportDPI-C导出所述DPI搜索函数;调用导出的所述DPI搜索函数在SV环境中搜索出BFM代理。
在上述实现过程中,通过语法export DPI-C导出DPI搜索函数,从而使得DPI搜索函数可以被CPP环境中的寄存器模型所调用,并在SV环境中实现查找搜索操作,从而准确搜索出BFM代理。
进一步地,通过所述BFM代理将所述寄存器配置信息发送给所述BFM的过程包括:所述BFM代理构建序列,将所述寄存器配置信息转化为符合所述BFM协议要求的数据包;在所述序列中放入所述数据包,并将该序列放入队列中等待发送;检测所述队列的当前序列是否为空;若不为空,将该序列交给所述BFM的序列器。
在上述实现过程中,BFM代理通过构建序列,将寄存器配置信息转化为BFM所能识别的数据包放入到该序列中,从而交给BFM的序列器,使得BFM能够准确接收、获取到寄存器配置信息。
本申请实施例还提供了一种验证平台系统,包括:CPP环境和SV环境;所述CPP环境包括CPP形式的寄存器模型;所述SV环境包括待测试设计DUT、总线功能模型BFM和BFM代理;所述寄存器模型用于在接收到寄存器配置信息时,按照所述寄存器配置信息配置寄存器,并通过直接编程接口DPI将所述寄存器配置信息传输给所述BFM代理;所述BFM代理用于将所述寄存器配置信息转化为符合所述BFM协议要求的格式交给所述BFM;所述BFM用于将所述寄存器配置信息发送给所述DUT,以配置所述DUT的寄存器。
上述验证平台系统,CPP环境中的CPP形式的寄存器模型可以在按照寄存器配置信息配置寄存器的同时,将寄存器配置信息通过DPI传输给BFM代理进行转换,进而交给BFM发送给DUT进行寄存器配置,从而实现从CPP形式的寄存器模型处的寄存器配置信息到DUT的传输与配置。这样,仅需在CPP形式的寄存器模型中输入寄存器配置信息,即可同时实现CPP环境和SV环境中的寄存器配置,从而解决了现有配置方案中,需要在reg model(SV)和regmodel(CPP)两侧分别进行寄存器配置的问题,有效降低了寄存器的配置工作量。此外,对于开发好的项目在需要改动某些寄存器配置时,也只需要在reg model(CPP)一侧进行修改和维护即可,不再需要在reg model(SV)和reg model(CPP)两侧分别进行修改操作,有效降低了工作量,提高了工作效率,且即使对于不熟悉的人员,也不会存在只配置了一侧,导致DUT结果和C model预测结果不相同的情况的发生。
进一步地,所述SV环境中配置有直接编程接口DPI搜索函数;所述DPI搜索函数用于搜索所述BFM代理;所述寄存器模型具体用于通过DPI调用所述DPI搜索函数,以及在搜索到所述BFM代理时,将所述寄存器配置信息传入所述BFM代理。
上述实现方式,通过DPI搜索函数,即可实现CPP环境中的寄存器模型到SV环境中的BFM代理的搜索调用,从而可以确保方案的正确执行。
本申请实施例还提供了一种验证平台系统配置方法,包括:配置总线功能模型BFM代理并例化到SV环境中;所述BFM代理与BFM通信连接,并与CPP形式的寄存器模型通过直接编程接口DPI通信连接;在所述BFM代理中定义功能函数,以在收到所述寄存器模型传来的寄存器配置信息时,将所述寄存器配置信息转换为符合所述BFM协议要求的格式,通过所述BFM发送给待测试设计DUT,以配置所述DUT的寄存器。
通过上述实现过程配置得到的验证平台系统,仅需在CPP形式的寄存器模型中输入寄存器配置信息,即可同时实现CPP环境和SV环境中的寄存器配置,从而解决了现有配置方案中,需要在reg model(SV)和reg model(CPP)两侧分别进行寄存器配置的问题,有效降低了寄存器的配置工作量。此外,对于开发好的项目在需要改动某些寄存器配置时,也只需要在reg model(CPP)一侧进行修改和维护即可,不再需要在reg model(SV)和reg model(CPP)两侧分别进行修改操作,有效降低了工作量,提高了工作效率,且即使对于不熟悉的人员,也不会存在只配置了一侧,导致DUT结果和C model预测结果不相同的情况的发生。
进一步地,所述方法还包括:配置DPI搜索函数;所述DPI搜索函数可被所述寄存器模型调用,以搜索出所述BFM代理,并将所述寄存器配置信息传入所述BFM代理。
本申请实施例还提供了一种寄存器配置同步装置,包括:配置模块和同步模块;所述配置模块,用于在CPP形式的寄存器模型接收到寄存器配置信息时,按照所述寄存器配置信息配置所述寄存器模型的寄存器;所述同步模块,用于通过直接编程接口DPI将所述寄存器配置信息传输给SV环境中的总线功能模型BFM,通过所述BFM发送所述寄存器配置信息给待测试设计DUT,以配置所述DUT的寄存器。
本申请实施例还提供了一种验证平台系统配置装置,包括:配置单元和定义单元;所述配置单元用于配置总线功能模型BFM代理并例化到SV环境中;所述BFM代理与BFM通信连接,并与CPP形式的寄存器模型通过直接编程接口DPI通信连接;所述定义单元用于在所述BFM代理中定义功能函数,以在收到所述寄存器模型传来的寄存器配置信息时,将所述寄存器配置信息转换为符合所述BFM协议要求的格式,通过所述BFM发送给待测试设计DUT,以配置所述DUT的寄存器。
本申请实施例还提供了一种IC验证设备,包括:处理器、存储器及通信总线;所述通信总线用于实现所述处理器和存储器之间的连接通信;所述处理器用于执行存储器中存储的一个或者多个程序,以实现上述任一种的方法。
本申请实施例中还提供了一种可读存储介质,所述可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述任一种的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种传统验证平台系统的结构示意图;
图2为本申请实施例提供的一种寄存器配置同步方法的流程示意图;
图3为本申请实施例提供的一种验证平台系统的结构示意图;
图4为本申请实施例提供的另一种验证平台系统的结构示意图;
图5为本申请实施例提供的一种验证平台系统配置方法的流程示意图;
图6为本申请实施例提供的一种BFM为AXI总线功能模型时的验证平台系统的结构示意图;
图7为本申请实施例提供的一种BFM为AHB总线功能模型时的验证平台系统的结构示意图;
图8为本申请实施例提供的一种BFM为APB总线功能模型时的验证平台系统的结构示意图;
图9为本申请实施例提供的一种寄存器配置同步装置的结构示意图;
图10为本申请实施例提供的一种验证平台系统配置装置的结构示意图;
图11为本申请实施例提供的一种IC验证设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
实施例一:
本申请实施例中提供了一种寄存器配置同步方法,可参见图2所示,包括:
S201:在CPP形式的寄存器模型接收到寄存器配置信息时,按照寄存器配置信息配置寄存器模型的寄存器。
在本申请实施例中,工程师可以将寄存器配置信息输入到CPP形式的寄存器模型中,从而实现对CPP形式的寄存器模型中寄存器的配置。
S202:通过DPI将寄存器配置信息传输给SV环境中的BFM,以通过该BFM发送寄存器配置信息给DUT,进而配置DUT的寄存器。
需要说明的是,由于c语言和SV语言是两种不同的语言,所以CPP环境和SV环境之间不能相互直接操作。而DPI则相当于连接c语言和SV语言的桥梁,经过DPI的转化,c语言和SV语言即可实现相互操作。因此,CPP形式的寄存器模型通过DPI可以将寄存器配置信息给到SV环境中的BFM。
需要理解的是,可参见图1所示,BFM中包含有序列器和驱动器,BFM通过序列器来获取符合总线协议的数据包,进而交给驱动器发送给DUT。为此,在本申请实施例中可以通过配置BFM代理,由BFM代理进行中间转化处理,确保寄存器配置信息能够准确给到BFM,使得本方案的适用性更好,无需做其他改动。
可参见图3所示,CPP形式的寄存器模型可以通过DPI将寄存器配置信息传输入BFM代理中,从而由BFM代理将寄存器配置信息转化为符合BFM协议要求的格式给到BFM。
在本申请实施例中,BFM代理可以通过构建序列,将寄存器配置信息转化为符合BFM协议要求的数据包放入到该序列中,从而交给BFM的序列器,使得BFM能够准确接收、获取到寄存器配置信息。
在本申请实施例中,BFM可以为AXI、APB、AHB等总线功能模型。在BFM为AXI总线功能模型时,对应的协议即为AXI协议;类似的对于APB总线功能模型,对应的协议即为APB协议;对于AHB总线功能模型,对应的协议即为AHB协议。
需要理解的是,在本申请实施例中,由于BFM代理位于SV环境中,CPP形式的寄存器模型要将寄存器配置信息准确传输给该BFM代理,就需要先从SV环境中定位出该BFM代理。
为此,在本申请实施例中,可以配置DPI搜索函数,从而通过DPI搜索函数实现从CPP环境到SV环境中的BFM代理的搜索。
而为了使得DPI搜索函数能够实现被CPP环境中的CPP形式的寄存器模型调用,从而在SV环境中搜索BFM代理,在本申请实施例中,可以通过语法export DPI-C导出DPI搜索函数,从而供CPP形式的寄存器模型调用。
示例性的,本申请实施例中,DPI搜索函数可以为:
export“DPI-C”function SV_send_txn;(将SV_send_txn函数导出供CPP形式的寄存器模型调用)
function void SV_send_txn(longint unsigned addr,int unsigned data);(向SV_send_txn函数中传入地址和数据作为寄存器配置信息)
BFM_proxy BFM_proxy_inst;(声明BFM_proxy(BFM代理)对象)
$cast(BFM_proxy_inst,uvm_top.find({“*”,“BFM_proxy_inst”}));(在UVM树中去搜索BFM_proxy实例并获得指针)
BFM_proxy_inst.send_txn(addr,data);(调用BFM_proxy_inst(BFM_proxy实例)中的send_txn函数(BFM代理中的功能函数)将地址和数据发送给BFM);
endfunction
应当理解的是,以上仅为本申请实施例中所示例的一种可行的DPI搜索函数,但不限定本申请实施例中仅可采用上述代码实现DPI搜索函数。事实上,工程师也可根据自身需求设计该DPI搜索函数,只要能实现本申请实施例中该DPI搜索函数的功能即可。
需要说明的是,在本申请实施例中,可以将BFM代理的唯一标识(如例化名称等)配置在DPI搜索函数中,从而使得DPI搜索函数得以搜索出BFM代理。
应理解,本申请实施例中并不限定只能采用DPI搜索函数实现CPP形式的寄存器模型对于BFM代理的确定。比如可以通过配置BFM代理通过DPI向CPP环境上报位置等方式实现CPP形式的寄存器模型对于BFM代理的确定。事实上,只要能够实现CPP形式的寄存器模型对于BFM代理的确定的方式均可被本申请实施例所采用。
需要说明的是,本申请实施例中的寄存器配置信息可以包括但不限于寄存器的地址、数据等。
而为了实现将寄存器配置信息传输到BFM代理中,在本申请实施例中,可以配置CPP形式的寄存器模型的写函数,从而由写函数以寄存器配置信息为参数,调用DPI搜索函数,从而在DPI搜索函数搜索出BFM代理后,将寄存器配置信息传入BFM代理中。
示例性的,在本申请实施例中,CPP形式的寄存器模型的写函数可以为:
bool Write(uint32 data){
uint64 addr;(声明地址变量用于计算当前寄存器地址)
void*m_BFM_proxy_dpi_scope;(声明DPI scope指针)
addr=GetBaseAddr()+offset;(计算当前寄存器地址为基地址+偏移地址)
m_BFM_proxy_dpi_scope=SVGetScopeFromName(“BFM_proxy_dpi_scope”);(获得DPI scope指针)
SVSetScope(m_BFM_proxy_dpi_scope);(设置DPI scope指针)
SV_send_txn(addr,data);(调用DPI搜索函数将地址数据发送到BFM_proxy中)
return true;(返回写成功)
}
应当理解的是,以上仅为本申请实施例中所示例的一种可行的CPP形式的寄存器模型的写函数,但不限定本申请实施例中仅可采用上述代码实现CPP形式的寄存器模型的写函数。事实上,工程师也可根据自身需求设计该写函数,只要能实现本申请实施例中该写函数的功能即可。
对应的,在本申请实施例中,还提供了一种可以用于实现上述寄存器配置同步方法的验证平台系统和验证平台系统的配置方法。
可以参见图3所示,验证平台系统包括CPP环境和SV环境。在CPP环境中,会包括有CPP形式的寄存器模型,而在SV环境中,则包括有DUT、BFM和BFM代理等模块。
其中:
CPP形式的寄存器模型用于在接收到寄存器配置信息时,按照寄存器配置信息配置寄存器,并通过DPI将寄存器配置信息传输给BFM代理。
BFM代理则用于将寄存器配置信息转化为符合BFM协议要求的格式交给BFM。
而BFM则将所述寄存器配置信息发送给DUT,以配置DUT的寄存器。
而为了使得CPP形式的寄存器模型能够准确在SV环境中找到BFM代理,在本申请实施例中,在SV环境中还可以配置有DPI搜索函数,从而使得CPP形式的寄存器模型能够调用DPI搜索函数搜索到BFM代理,并在搜索到BFM代理时,将寄存器配置信息传入BFM代理中。
在本申请实施例中,为了实现对于数据格式的转换和数据到BFM的传输,在BFM代理中可以定义功能函数,该功能函数通过构建序列,将寄存器配置信息转化为符合BFM协议要求的数据包,并将该序列放入队列中等待发送。从而在检测到队列的当前序列不为空时,将该序列交给BFM的序列器。
示例性的,该功能函数可以为:
virtual function send_txn(longint unsigned addr,int unsigned data);
BFM_request_transaction m_req;(声明BFM协议数据包)
BFM_req_base_seq wrseq;(声明BFM协议数据包序列)
m_req=BFM_request_transaction::type_id::create(“m_req”);(例化BFM协议数据包)
m_req.addr=addr;(将地址传入BFM协议数据包)
m_req.data=data;(将数据传入BFM协议数据包)
wrseq=BFM_req_base_seq::type_id::create(“wrseq”);(例化BFM协议数据包序列)
wrseq.req=m_req;(将BFM协议数据包传入BFM协议数据包序列)
m_wrseq_queue.push_back(wrseq);(将BFM协议数据包序列放入队列中等待发送)
endfunction
virtual task run_phase(uvm_phase phase);(BFM_proxy的run_phase)
BFM_req_base_seq wrseq;(声明BFM协议数据包序列)
forever begin(循环执行下面代码)
wait(m_wrseq_queue.size()>0);(等待序列队列不为空)
wrseq=m_wrseq_queue.pop_front();(取出一条序列)
wrseq.start(wr_master.sequencer);(将该序列启动到BFM的序列器上最终发给DUT)
end
endtask
应当理解的是,以上仅为本申请实施例中所示例的一种可行的BFM代理中定义的功能函数,但不限定本申请实施例中仅可采用上述代码实现BFM代理中定义的功能函数,事实上,工程师也可根据自身需求设计该功能函数,只要能实现本申请实施例中该功能函数的功能即可。
需要理解的是,在本申请实施例所提供的验证平台系统中,SV环境中可以不再配置reg model(SV),从而使得对于两个环境中的寄存器的配置仅能通过CPP形式的寄存器模型实现。
当然,本申请实施例所提供的验证平台系统中,也可以保留reg model(SV),如图4所示,其并不会影响本申请实施例的方案的实施。
对应的,参见图5所示,本申请实施例中的验证平台系统配置方法包括:
S501:配置BFM代理并例化到SV环境中。
其中,BFM代理与BFM通信连接,并与CPP形式的寄存器模型通过DPI通信连接。
S502:在BFM代理中定义功能函数,以在收到CPP形式的寄存器模型传来的寄存器配置信息时,将寄存器配置信息转换为符合BFM协议要求的格式,通过BFM发送给待测试设计DUT,以配置DUT的寄存器。
此外,本配置方法中还可以包括:配置DPI搜索函数;DPI搜索函数可被CPP形式的寄存器模型调用,以搜索出BFM代理。
此外,本配置方法中还可以包括:在CPP形式的寄存器模型中配置写函数,该写函数以寄存器配置信息为参数,可以调用DPI搜索函数,从而在DPI搜索函数搜索出BFM代理后,将寄存器配置信息传入BFM代理中。
需要理解的是,本申请实施例中的上述配置方法可以由工程师手动实现配置,但是也可以通过将相关配置内容保存到电子设备中,并编写配置上述配置方法的各个步骤对应的操作程序,从而通过电子设备实现自动化配置。
还需要理解的是,本申请实施例中的SV环境可以是诸如OVM(Open VerificationMethodology,开放式验证方法学)验证平台的环境,VMM(Verification MethodologyManual,验证方法学手册)验证平台的环境,UVM验证平台的环境等,只要其采用的是SystemVerilog类库为主体实现的环境即可。
在本申请实施例中提供的验证平台系统、验证平台系统配置方法、寄存器配置同步方法中,CPP环境中的CPP形式的寄存器模型可以在按照寄存器配置信息配置寄存器的同时,将寄存器配置信息通过DPI传输给BFM代理进行转换,进而交给BFM发送给DUT进行寄存器配置,从而实现从CPP形式的寄存器模型处的寄存器配置信息到DUT的传输与配置。这样,仅需在CPP形式的寄存器模型中输入寄存器配置信息,即可同时实现CPP环境和SV环境中的寄存器配置,从而解决了现有配置方案中,需要在reg model(SV)和reg model(CPP)两侧分别进行寄存器配置的问题,有效降低了寄存器的配置工作量。此外,对于开发好的项目在需要改动某些寄存器配置时,也只需要在reg model(CPP)一侧进行修改和维护即可,不再需要在reg model(SV)和reg model(CPP)两侧分别进行修改操作,有效降低了工作量,提高了工作效率,且即使对于不熟悉的人员,也不会存在只配置了一侧,导致DUT结果和C model预测结果不相同的情况的发生。
实施例二:
本实施例在实施例一的基础上,在UVM环境中,分别以BFM为AXI总线功能模型、APB总线功能模型和AHB总线功能模型的情况为例,对本申请的方案进行示例说明。
示例一,参见图6所示,图6为本实施例提供的一种BFM为AXI总线功能模型时的验证平台系统。其中:
在axi_proxy(AXI代理,BFM为AXI总线功能模型时的BFM代理)内实现一个功能函数(记为send_txn函数),该函数可以根据传入的寄存器数据和寄存器地址等寄存器配置信息生成axi transaction(符合AXI协议的数据包)和相应的sequence(序列),之后放入axisequence队列中。
axi_proxy在run_phase里检查axi sequence队列中的内容是否为空。在不为空时,取出不为空的sequence的内容,发送到axi_vip(AXI总线功能模型,其中vip为:verification IP,已经申请知识产权保护的验证模块)的sequencer(序列器)上面,最终通过driver(驱动器)去配置DUT的寄存器。
需要说明的是,UVM内部是按照phase机制进行运行的,而run_phase是UVM代码执行的一个中间阶段。
此外,本实施例中可以设计与send_txn函数相对应的SV_send_txn函数(即DPI搜索函数),用语法export DPI-C导出供CPP环境调用。该SV_send_txn函数被调用后,会先去遍历UVM树找到axi_proxy,然后调用axi_proxy的send_txn函数,传入寄存器数据和寄存器地址等寄存器配置信息作为参数。
此外,本实施例中可以设计reg model(CPP)寄存器的write函数(即写函数),该write函数利用寄存器数据和寄存器地址等寄存器配置信息作为参数,调用SV_send_txn函数。
示例性的,假如此刻要配置寄存器A,那么先配置reg model(CPP)中的寄存器A,然后寄存器A自动调用write函数,通过DPI的形式调用SV_send_txn函数,由SV_send_txn函数搜索出axi_proxy,然后进一步去调用axi_proxy的send_txn函数,将寄存器配置信息发送给axi_vip。最后通过axi_vip可以配置到DUT的寄存器A,从而实现寄存器A在CPP环境和UVM环境中的同步配置。
示例二,参见图7所示,图7为本实施例提供的一种BFM为AHB总线功能模型时的验证平台系统。其中:
在ahb_proxy(AHB代理,BFM为AHB总线功能模型时的BFM代理)内实现一个功能函数(记为send_txn函数),该函数可以根据传入的寄存器数据和寄存器地址等寄存器配置信息生成ahb transaction(符合AHB协议的数据包)和相应的sequence(序列),之后放入ahbsequence队列中。
ahb_proxy在run_phase里检查ahb sequence队列中的内容是否为空。在不为空时,取出不为空的sequence的内容,发送到ahb_vip(AHB总线功能模型)的sequencer(序列器)上面,最终通过driver(驱动器)去配置DUT的寄存器。
此外,本实施例中可以设计与send_txn函数相对应的SV_send_txn函数(即DPI搜索函数),用语法export DPI-C导出供CPP环境调用。该SV_send_txn函数被调用后,会先去遍历UVM树找到ahb_proxy,然后调用ahb_proxy的send_txn函数,传入寄存器数据和寄存器地址等寄存器配置信息作为参数。
此外,本实施例中可以设计reg model(CPP)寄存器的write函数(即写函数),该write函数利用寄存器数据和寄存器地址等寄存器配置信息作为参数,调用SV_send_txn函数。
示例性的,假如此刻要配置寄存器A,那么先配置reg model(CPP)中的寄存器A,然后寄存器A自动调用write函数,通过DPI的形式调用SV_send_txn函数,由SV_send_txn函数搜索出ahb_proxy,然后进一步去调用ahb_proxy的send_txn函数,将寄存器配置信息发送给ahb_vip。最后通过ahb_vip可以配置到DUT的寄存器A,从而实现寄存器A在CPP环境和UVM环境中的同步配置。
示例三,参见图8所示,图8为本实施例提供的一种BFM为APB总线功能模型时的验证平台系统。其中:
在apb_proxy(APB代理,BFM为APB总线功能模型时的BFM代理)内实现一个功能函数(记为send_txn函数),该函数可以根据传入的寄存器数据和寄存器地址等寄存器配置信息生成apb transaction(符合APB协议的数据包)和相应的sequence(序列),之后放入apbsequence队列中。
apb_proxy在run_phase里检查apb sequence队列中的内容是否为空。在不为空时,取出不为空的sequence的内容,发送到apb_vip(APB总线功能模型)的sequencer(序列器)上面,最终通过driver(驱动器)去配置DUT的寄存器。
此外,本实施例中可以设计与send_txn函数相对应的SV_send_txn函数(即DPI搜索函数),用语法export DPI-C导出供CPP环境调用。该SV_send_txn函数被调用后,会先去遍历UVM树找到apb_proxy,然后调用apb_proxy的send_txn函数,传入寄存器数据和寄存器地址等寄存器配置信息作为参数。
此外,本实施例中可以设计reg model(CPP)寄存器的write函数(即写函数),该write函数利用寄存器数据和寄存器地址等寄存器配置信息作为参数,调用SV_send_txn函数。
示例性的,假如此刻要配置寄存器A,那么先配置reg model(CPP)中的寄存器A,然后寄存器A自动调用write函数,通过DPI的形式调用SV_send_txn函数,由SV_send_txn函数搜索出apb_proxy,然后进一步去调用apb_proxy的send_txn函数,将寄存器配置信息发送给apb_vip。最后通过apb_vip可以配置到DUT的寄存器A,从而实现寄存器A在CPP环境和UVM环境中的同步配置。
本实施例所提供的方案,可以通过用户传入的寄存器配置信息去自动生成sequence,并通过BFM发送给DUT,为CPP env通过DPI配置DUT寄存器提供了解决方案。使用本实施例所提供的方案,只需要配置一次reg model(CPP)的寄存器值,即可自动化同步配置UVM环境中的DUT寄存器,相较于传统方式中需要对每个寄存器配置两遍的情况而言,本方案只需对每个寄存器配置一遍,极大地减少了配置工作量和后期维护难度。
实施例三:
基于同一发明构思,本申请实施例中还提供了一种寄存器配置同步装置和验证平台系统配置装置。请参阅图9和图10所示,图9示出了与实施例一所示的寄存器配置同步方法对应的寄存器配置同步装置100,图10示出了与实施例一所示的验证平台系统配置方法对应的验证平台系统配置装置200。应理解,装置100和200具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。装置100和200包括至少一个能以软件或固件的形式存储于存储器中或固化在装置100和200的操作系统中的软件功能模块。具体地:
参见图9所示,寄存器配置同步装置100包括:配置模块101和同步模块102。其中:
所述配置模块101,用于在CPP形式的寄存器模型接收到寄存器配置信息时,按照所述寄存器配置信息配置所述寄存器模型的寄存器;
所述同步模块102,用于通过直接编程接口DPI将所述寄存器配置信息传输给SV环境中的总线功能模型BFM,通过所述BFM发送所述寄存器配置信息给待测试设计DUT,以配置所述DUT的寄存器。
在本申请实施例中,所述同步模块102具体用于调用DPI搜索函数在SV环境中搜索出BFM代理;将所述寄存器配置信息传入所述BFM代理,以通过所述BFM代理将所述寄存器配置信息发送给所述BFM。其中,所述BFM代理用于将所述寄存器配置信息转化为符合所述BFM协议要求的格式。
在本申请实施例的一种可行实施方式中,所述同步模块102具体用于通过语法export DPI-C导出所述DPI搜索函数;调用导出的所述DPI搜索函数在SV环境中搜索出BFM代理。
在本申请实施例中,所述同步模块102具体用于采用所述BFM代理构建序列,将所述寄存器配置信息转化为符合所述BFM协议要求的数据包;在所述序列中放入所述数据包,并将该序列放入队列中等待发送;检测所述队列的当前序列是否为空;若不为空,将该序列交给所述BFM的序列器。
参见图10所示,验证平台系统配置装置200包括:配置单元201和定义单元202。其中:
所述配置单元201,用于配置总线功能模型BFM代理并例化到SV环境中;所述BFM代理与BFM通信连接,并与CPP形式的寄存器模型通过直接编程接口DPI通信连接;
所述定义单元202,用于在所述BFM代理中定义功能函数,以在收到所述寄存器模型传来的寄存器配置信息时,将所述寄存器配置信息转换为符合所述BFM协议要求的格式,通过所述BFM发送给待测试设计DUT,以配置所述DUT的寄存器。
在本申请实施例中,所述配置单元201还用于配置DPI搜索函数;所述DPI搜索函数可被所述寄存器模型调用,以搜索出所述BFM代理。
需要理解的是,出于描述简洁的考量,部分实施例一中描述过的内容在本实施例中不再赘述。
实施例四:
本实施例提供了一种IC验证设备,可以参见图11所示,其包括处理器1101、存储器1102及通信总线1103。其中:
通信总线1103用于实现处理器1101和存储器1102之间的连接通信。
处理器1101用于执行存储器1102中存储的一个或多个程序,以实现上述实施例一/二中的相关方法。
可以理解,图11所示的结构仅为示意,IC验证设备还可包括比图11中所示更多或者更少的组件,或者具有与图11所示不同的配置,例如还可以具有输入/输出接口、通信模组等部件。
还应当理解的是,本申请实施例中所述的IC验证设备可以是终端、服务器等可以配置代码的电子设备。
本实施例还提供了一种可读存储介质,如软盘、光盘、硬盘、闪存、U盘、SD(SecureDigital Memory Card,安全数码卡)卡、MMC(Multimedia Card,多媒体卡)卡等,在该可读存储介质中存储有实现上述各个步骤的一个或者多个程序,这一个或者多个程序可被一个或者多个处理器执行,以实现上述实施例一/二中的方法。在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
在本文中,多个是指两个或两个以上。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。