发明内容
为克服现有技术在SMBus模块验证中的缺陷问题,本发明提供了一种基于UVM和VIP的SMBus模块级验证系统,实现SMBus模块在不同传输数据格式之间的转换验证,并能有效提升效率。
本发明采用的技术方案如下:一种基于UVM和VIP的SMBus模块级验证系统,包括顶层模块,用于模块例化,顶层模块包括:
DUT模块,由待测的SMBus模块实现,提供SMBus接口;
接口模块,用于将待测的SMBus模块接入验证环境;
测试用例层,用于例化验证环境和配置参数模块,创建测试用例与产生激励;其中,验证环境包括例化的VIP的SMBus验证环境与自定义验证子环境,通过验证环境生成测试用例完成SMBus模块的验证;配置参数模块提供验证环境所需的基本参数。
作为一种优选方案,所述接口模块包括SMBus接口与自定义接口;其中,SMBus接口由VIP提供,直接例化即可;自定义接口根据实际DUT接口在例化的自定义验证子环境中对应设置。
作为一种优选方案,所述自定义验证子环境为除SMBus总线以外的VIP总线自带的验证环境,或为与芯片自定义总线相适配的验证环境,或为仅监控/驱动SMBus模块的验证环境。
作为一种优选方案,所述SMBus验证环境中直接引用了VIP提供的Driver组件、Monitor组件、Sequencer组件,完成测试激励的产生与发送。
作为一种优选方案,所述自定义验证子环境根据需求例化不同的组件。
作为一种优选方案,所述配置参数模块还包括SMBus VIP Config文件的参数配置,包括主机参数及从机参数。
作为一种优选方案,所述配置参数模块中例化有多个子参数配置模块,在同一用例下,使用不同参数配置DUT模块的工作模式,并发起读写事务完成验证。
作为一种优选方案,所述测试用例层还包括RM(Reference Model,参考模型)组件和SCB(Scoreboard,计分板)组件,分别与SMBus验证环境、自定义验证子环境连接;所述RM组件模拟待测的SMBus模块行为并将SMBus验证环境与自定义验证子环境中Monitor组件发送的读或写数据进行处理,再发送给SCB组件,SCB组件将RM组件发送的数据与SMBus验证环境或自定义验证子环境中Monitor组件发过来的数据进行比较,并打印相关信息。
作为一种优选方案,所述RM组件与SCB组件之间、RM组件与Monitor组件之间、SCB组件与Monitor组件之间通过FIFO的方式完成读写数据的传输。
作为一种优选方案,SMBus验证环境的Monitor组件将发出的激励以数据包的形式按协议格式发送到RM和SCB组件,RM和SCB组件将SMBus验证环境的Monitor组件发送过来的数据包转换成读写地址和读写数据。
与现有技术相比,采用上述技术方案的有益效果为:本发明提出的验证系统对于DUT模块重用性较高,能提高SMBus模块验证效率,并且还能在同一用例中实现不同数据传输格式之间的转换。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的模块或具有相同或类似功能的模块。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能理解为对本申请的限制。相反,本申请的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
为克服现有技术在SMBus模块验证中的缺陷问题,本发明实施例基于Synopsys公司的VIP实现,SMBus VIP虽基于I2C VIP,其在具体使用过程中却与I2C VIP有很多不同,这导致部分用I2C VIP验证的方法在SMBus模块验证中无法实现,由此,本实施例提供了一种基于UVM和VIP的SMBus接口模块级验证系统,实现SMBus在不同传输数据格式之间转换验证,提高了SMBus模块验证效率。具体方案如下:
如图1所示,一种基于UVM和VIP的SMBus模块级验证系统,包括顶层模块Top,用于模块例化,顶层模块包括:
DUT模块,由待测的SMBus模块实现,提供SMBus接口;
接口模块,用于将待测的SMBus模块接入验证环境;
测试用例层,用于例化验证环境和配置参数模块,创建测试用例与产生激励;其中,验证环境包括例化的VIP的SMBus验证环境与自定义验证子环境,通过验证环境生成测试用例完成SMBus模块的验证;配置参数模块提供验证环境运行所需的基本参数。
请参见图1,接口模块,包括SMBus接口SMBus_interface和自定义接口My_interface,接口模块用于验证环境与DUT之间的数据通信;SMBus接口为VIP自带的接口,在实际应用中将其引用并例化即可。而自定义接口则是使用者自己创建的接口,根据所创建的自定义验证子环境的情况来定义接口信息。
测试用例层Base_test主要用于创建用例,以产生不同的激励。本实施例中,测试用例层例化了验证环境Environment和配置参数模块Config。验证环境中则例化了VIP的SMBus验证环境SMBus_env和使用者定义的自定义验证子环境My_env。
其中,自定义验证子环境根据实际需求确定,可以是其他VIP总线(除SMBus外)自带的验证环境,可以是与芯片自定义总线相适配的验证环境,也可以是使用者自身编写的仅实现SMBus模块的监控或驱动功能的验证环境。
本实施例中,SMBus验证环境SMBus_env直接引用VIP提供的SMBus_agent组件,SMBus_agent中包含了Driver组件、Monitor组件、Sequencer组件,不再需要使用者创建相应功能组件,直接使用即可。自定义验证子环境My_env则会根据实际需求去实例化My_agent,例如,只需监控DUT输出时,例化My_agent和Monitor组件便可满足验证要求,当DUT另一端接到其他总线如AHB总线时,自定义验证子环境My_env也可为AHB VIP的验证环境,实现DUT另一端总线的驱动和采样。
配置参数模块中包括了验证环境所需的基本参数。需要说明的是,本实施例中,SMBus VIP的参数配置如master_cfg、slave_cfg等也会根据需求在配置参数模块Config中配置好。
在使用Synopsys公司的VIP时,会在Config中事先配置好相应模式下的读写参数,这会限制特定的读写长度,如果SMBus模块涉及两种数据长度的读写模式,在验证环境中无法对VIP master的相应模式配置两套参数,验证两种模式之间切换的读写用例。针对该技术问题,本申请在配置参数模块中例化有多个子参数配置模块,来实现SMBus模块不同数据长度的读写模式切换。
例如,在配置参数模块中例化两个VIP master,其中master_cfg[0]和master_cfg[1]分别配置成两种模式所需要数据长度的参数。在实际发起激励时,同一用例下,第一种模式使用master[0]的Sequencer组件发起读写激励,第二种模式使用master[1]的Sequencer组件发起读写激励,便可实现在同一用例中验证不同传输格式。
参考图1,为了实现验证环境结果的自动比较,在验证环境中还配置的RM(Reference Model,参考模型)组件和SCB(Scoreboard,计分板)组件,分别与SMBus验证环境与自定义验证子环境相连;所述RM组件模拟待测SMBus模块的行为并将SMBus验证环境与自定义验证子环境中Monitor组件发送的读或写数据进行处理,再发送给SCB组件,SCB组件将RM组件发送的数据与SMBus验证环境或自定义验证子环境中Monitor组件发过来的数据进行比较,并打印相关信息。
需要说明的是,本实施例中,所述RM组件与SCB组件之间、RM组件与Monitor组件之间、SCB组件与Monitor组件之间通过FIFO的方式完成读写数据的传输。
为了对本发明提出的验证系统进行进一步说明,本实施例中对DUT同时接入SMBus验证环境和AHB验证环境的验证场景进行进一步说明。
请参见图2,在顶层模块中进行模块例化,引入Synopsys公司的SMBus VIP到验证环境,其顶层下包含以下组件:待测设计DUT,即SMBus模块,实例中的DUT包含SMBus接口与AHB接口;
此时,接口模块包括SMBus接口SMBus_interface和AHB接口AHB_interface,接口用于验证环境与DUT之间的数据通信。将SMBus的VIP自带接口组件实例化得到SMBus_interface,将DUT的SMBus接口和验证环境相连接,而AHB_interface实现DUT输出与AHB总线的连接。
在测试用例层Base_test,基于Base_test的基类创造所需的特定用例,在实际的用例测试中,将所造激励的Sequence指定为子类Test下Sequencer组件中的默认序列default_sequence便可进行用例测试。
同时,测试用例层中的验证环境同时例化了VIP的环境组件,包括:SMBus验证环境和AHB验证环境,配置参数模块则配置了基本参数和SMBus VIP、AHB VIP的配置参数(master_cfg、slave_cfg等)。
SMBus验证环境SMBus_env同样直接引用实例化VIP提供的SMBus_agent组件,SMBus_agent中包含了Driver、Monitor、Sequencer等组件,不再需要使用者创建即可使用相应需求功能。验证环境AHB_env也是由VIP提供并引入,根据SMBus模块实际需求驱动或采样DUT交互的数据。
本实施例中,在配置参数模块中例化了两个VIP master,即master[0]和master[1],其中master_cfg[0].SMBus_block_read_cmd_code配置成在块模式中一个字(word)长度读写的相应参数配置,master_cfg[1].SMBus_block_read_cmd_code配置成在块模式中两个字(word)长度读写的相应参数配置。发起激励时,在同一用例下,先使用master[0]的Sequencer组件发起读写激励,再使用master[1]的Sequencer组件发起读写激励,便可实现在同一Sequence用例中验证了不同传输格式之间转换情况。实际使用中,并不只是块模式下可以例化多个master实现多种读写模式的转换,只要是SMBus VIP所支持的数据传输格式都可以采用此方式,在同一用例下实现不同传输格式之间转换验证。
具体可以参考图3,其示出了配置两个master的情况,对于同一Sequence用例,master[1]发送DUT第一种模式对应的读写事务,以及配置相应的cmd值,其cmd值为DUT支持的第一种工作模式,而master[2]发送DUT第二种模式对应的读写传输事务,以及配置相应的cmd值,其cmd值为DUT支持的第二种工作模式。
RM组件、SCB组件通过WR_FIFO、RD_FIFO与SMBus验证环境中SMBus_agent、AHB验证环境AHB_agent的Monitor组件相连。RM组件会模仿DUT行为将SMBus VIP的Monitor组件发送过来的写或读数据包进行处理,实际收到的每个数据包包含8bit数据,RM组件会收集一次读写传输中VIP发送的所有数据包并按SMBus协议解析出读写命令、读写地址、读写数据,即,将Monitor发送的数据包按DUT实际传输格式以正确的顺序拼接成读写地址和不同长度(例如4byte、8byte、16byte,读写数据长度根据DUT功能决定)的读写数据,再通过WR_FIFO和RD_FIFO将读写地址和读写数据发送给SCB组件。
SCB组件同样会解析Monitor组件发过来的数据,并与RM组件发过来的读写地址、读写数据进行比较(即比较理论的数据和实际的读写数据),并打印相关信息。
需要说明的是,实际数据、理论数据在读和写的过程中是相反的。在写过程中,RM组件将VIP发送的数据拼接为理论写数据,SCB组件通过FIFO得到实际写数据;在读过程中,RM组件将VIP发送的数据拼接为实际读数据,SCB组件通过FIFO得到理论读数据。
本发明提出的验证系统对于DUT模块其重用性较高,提高SMBus模块验证效率,并且实现了在同一用例中实现不同数据传输格式之间的转换。
需要说明的是,在本发明实施例的描述中,除非另有明确的规定和限定,术语“设置”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是直接连接,也可以通过中间媒介间接连接。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义;实施例中的附图用以对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。