发明内容
基于上述背景技术,本发明的一个目的是提供了一种IP核验证系统,其可以缩短仿真验证时间,且系统集成简单、灵活。
根据本发明的一个方面,提供了一种IP核验证系统,包括:处理器模型,用于在接收到来自仿真工具的使能信号时,运行编写的测试用例并将所述测试用例执行的操作翻译成总线信号,将所述总线信号传输至待验证的IP核;所述待验证的IP核,与所述处理器模型进行通信,接收来自所述处理器模型的所述总线信号并执行所述总线信号对应的操作,将所述待验证的IP核的执行结果与所述测试用例的预期结果进行比较,以确认验证结果。
在上述技术方案中,优选地,所述处理器模型通过AHB Master接口连接至AHB系统总线并通过所述AHB系统总线将所述总线信号传输至所述待验证的IP核。
在上述技术方案中,优选地,所述处理器模型采用类C语言编写而成,所述测试用例采用C语言编写。
在上述技术方案中,优选地,所述类C语言为SystemC语言。
在上述技术方案中,优选地,所述处理器模型还包括应用程序编写接口,供调用以编写所述测试用例。
在上述技术方案中,优选地,所述待验证的IP核为USB主控器,所述USB主控器通过AHB桥连接至AHB系统总线。
在上述技术方案中,优选地,还可以包括:内存模块和内存控制器,所述内存模块连接至所述内存控制器,所述内存控制器连接至所述AHB系统总线;中断控制器,连接至所述AHB系统总线,用于管理中断信号。
在上述技术方案中,优选地,还可以包括:USB物理层模型和USB外设模块,所述USB外设模块连接至所述USB物理层模型,所述USB物理层模型连接至所述USB主控器,以实现USB协议。
在上述技术方案中,优选地,还可以包括:AHB监控器、AXI监控器和USB监控器,所述AHB监控器连接至所述AHB系统总线,所述AXI监控器连接至AXI总线,所述USB监控器设置在所述USB外设模块中,所述AHB监控器、所述AXI监控器和所述USB监控器监测所述USB主控器的工作过程,给出验证报告信息。
在上述技术方案中,优选地,所述处理器模型通过AHB Slave接口对所述USB主控器和内存控制器进行配置。
根据本发明的技术方案,将根据本发明的处理器模型替换片上系统中原有的处理器,将软件对IP核的控制转化成总线时序,整个系统可以采用仿真软件来运行,而不是用硬件仿真IP核部分,系统的其他部分用软件来仿真,例如处理器模型采用类C语言进行编写可以由仿真软件进行仿真,因此基于处理器模型对外提供的API接口编写的测试用例可以方便的移植,并且由于基于本发明的处理器模型编写的测试用例可以方便的移植,在硬件仿真阶段就能调试片上系统软件,不需要等到FPGA系统设计完成或芯片设计完成后才能进行软件调试,从而大大节省了开发时间,并且基于本发明的设计方案,使得调试更加简单,调试人员可以采用抽象层次更高的C语言来进行调试且无需重复编写。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
下面结合图1和图2来详细说明根据本发明的实施例。
图1示出了根据本发明的实施例的IP核验证系统。
如图1所示,根据本发明的实施例的IP核验证系统100,包括:处理器模型102,用于在接收到来自仿真工具200的使能信号时,运行编写的测试用例并将测试用例执行的操作翻译成总线信号,将总线信号传输至待验证的IP核104;待验证的IP核104,与处理器模型102进行通信,接收来自处理器模型102的总线信号并执行总线信号对应的操作,将待验证的IP核104的执行结果与测试用例的预期结果进行比较,以确认验证结果。
在此,应该理解,采用编程语言描述的IP核验证系统100由仿真工具200的宿主处理器运行,仿真工具200的处理器可以是计算机的通用处理器,也可以是专用处理器。
根据本发明的技术方案,将根据本发明的处理器模型替换片上系统中原有的处理器,将软件对IP核的控制转化成总线时序,并且由于基于本发明的处理器模型编写的测试用例可以方便的移植,在硬件仿真阶段就能调试片上系统软件,不需要等到FPGA系统设计完成或芯片设计完成后才能进行软件调试,从而大大节省了开发时间,并且基于本发明的设计方案,使得调试更加简单,调试人员可以采用抽象层次更高的C语言来进行调试且无需重复编写。
图2示出了根据本发明的又一实施例的IP核验证系统。
如图2所示,图2中的CPU模型222对应于图1中的处理器模型102,其能够运行测试用例400,构成联合仿真引擎302。
处理器模型102(或CPU模型222)通过AHB Master接口连接至AHB系统总线300并通过AHB系统总线300将总线信号传输至所述待验证的IP核104。在本实施例中,图1中所示的待验证的IP核104可以为USB主控器204(例如,USB2.0主控器),USB主控器204通过AHB桥212(具有转换协议功能的连接器)连接至AHB系统总线300。
在上述技术方案中,优选地,CPU模型222采用类C语言编写而成,测试用例400采用C语言编写。
在上述技术方案中,优选地,类C语言为System C语言。
在上述技术方案中,优选地,所述处理器模型还包括应用程序编写接口,供调用以编写所述测试用例400。
在上述技术方案中,优选地,IP核验证系统100还可以包括:内存模块218和内存控制器216,内存模块218连接至内存控制器216,内存控制器216(通过AHB桥220)连接至AHB系统总线300。
在上述技术方案中,优选地,还可以包括:支持UTMI+接口的USB物理层模型210和USB外设模块208,USB外设模块208连接至USB物理层模型210,USB物理层模型210连接至USB主控器204,以实现USB协议。
在本实施例中,还可以包括:AHB监控器2062、AXI监控器2064和USB监控器2066,AHB监控器2062连接至AHB系统总线300,AXI监控器2064连接至AXI(Advanced Extensible Interface)总线,所述USB监控器2066设置在USB外设模块208中,AHB监控器2062、AXI监控器2064和USB监控器2066监测USB主控器204的工作过程,给出验证报告信息。
在上述技术方案中,优选地,处理器模型104即CPU模型222通过AHB Slave接口对USB主控器204和内存控制器216进行配置。
在上述技术方案中,优选地,还可以包括:中断控制器214,连接至AHB系统总线300,用于控制和管理例如在运行测试用例400时产生的中断请求。
在此,应该理解,图2中的终端控制器214、AHB监控器、AHB总线、USB主控器204、USB物理层模型、USB外设模块208、USB监控器2066、AXI总线402、AXI监控器2064、内存控制器216、AHB桥220、AHB桥212和内存模块218所采用的编程描述语言包括但不限于Verilog HDL(Verilog Hardware DescriptionLanguage)语言,由仿真工具200所运行。
根据本发明的验证系统弃用了真正的基于指令的CPU,而是采用更高级更抽象的SystemC事物级建模(TLM)的技术构造了一个基于AHB协议的总线功能模型(BFM,即CPU模型222),实现了CPU模型对SOC(System On Chip,片上系统)中其他模块所呈现的AHB Master接口的时序封装,该总线功能模型能和要验证的IP核(即USB模块)进行连接和通信,能够编译并解释基于C语言编写的测试用例,并把这个测试用例要执行的操作翻译成对应的AHB总线信号。
因此,根据本发明的IP核验证系统其在用于验证USB主控器时,只需要为USB主控器该IP核编写基于C的测试用例,因此要求CPU模型能够简单、高效地执行测试用例,CPU模型在SOC中都是直接通过AHB Master接口连接到总线(AHB总线)上,对于SOC中待验证的IP核来讲,CPU模型相当于一个总线控制器(Master),IP核并不关心CPU模型中具有什么指令集,采用何种方式实现。基于此,图2所示的联合仿真引擎302中设计的CPU模型222并没有采用基于特定指令集设计的复杂方法,而是采用更高级更抽象的SystemC事物级建模(TLM)的技术构造了一个基于AHB(Advanced High performance Bus)协议的总线功能模型(BFM),实现了CPU模型对SOC中其他模块所呈现的AHB Master接口的时序封装。通过层次化的封装,根据本发明的联合仿真引擎302把基于时钟时序精度的RTL(Register transfer level,寄存器传输级)的抽象层提升到没有任何时钟和时间概念的软件抽象层。
在此,本领域内的技术人员应该理解,根据本发明的处理器模型222能取代任何CPU,例如SOC中具有MIPS指令集、ARM指令集且真正使用的CPU,或者是内部开发的任意的CPU,这些CPU均能够被根据本发明的联合仿真引擎所替代。同时,由于根据本发明的处理器模型采用类C语言编写,而不是采用真正的基于指令的处理器,避免了在验证IP核时需要将测试用例加载到内存中,在运行时,处理器又从系统的内存中将测试用例读出并执行所占用较多的系统资源的问题,并且由于根据本发明的处理器模型对外提供API接口,可以方便地供测试人员进行测试用例的编写,整个系统可以采用仿真软件来运行,而不是用硬件仿真IP核部分,系统的其他部分用软件来仿真,因此,使得基于联合仿真引擎编写的测试用例可以方便的移植,所以在硬件仿真阶段就能调试SOC系统软件,不需要等到FPGA系统设计完成或芯片设计完成后才能进行软件调试,从而大大节省了项目开发时间。根据本发明的处理器模型也可以用于验证其他IP核,例如各种转换模块、存储模块、检测模块以及处理模块。
从上述可知,联合仿真引擎302的CPU模型222没有实现复杂的指令集,而是采用验证系统仿真使用的工作站或者服务器的宿主CPU(即仿真工具的服务器CPU)来运行验证工程师编写的基于C语言的测试用例,将需要的具体硬件行为通过路径(Channel)向下传送到RTL端(例如图2所示验证系统中的其他模块:USB主控器等)。相对于直接使用SOC中的CPU IP核的RTL仿真,根据本发明的联合仿真引擎省去了CPU IP核取指令和运行指令的复杂的仿真、运算过程,大大节省了仿真运行的时间。同时,根据本发明的联合仿真引擎为软件验证人员和硬件验证人员分别提供了一些总线访问和中断处理的API(应用程序编程接口),为了满足硬件验证的需要,另外还设计了一些API可以实现让验证系统等待一定时钟周期/一定时间、停止或重新开始仿真以及不通过总线而可以快速访问验证系统存储器(内存模块)等功能。USB主控器204和内存控制器216对外提供AHB Slave接口,CPU模型通过该AHB Slave接口对它们进行配置。
在下述各实施例中,将以Verilog HDL仿真器作为仿真工具的一种示例来进行说明根据本发明的技术方案。
下面详细介绍处理器模型222对外提供的应用程序编写接口,供编程测试人员调用来编写测试用例,实现待验证IP核的验证。
通过将对硬件接口的驱动需求抽象为基于C语言程序的API,可以有效提高验证的层次,封装硬件复杂的接口操作,大大方便测试用例的编写。对于验证而言,不管是硬件验证还是软件验证,从使用角度只需关心联合仿真引擎提供的API接口函数和相关的使用功能。以下为联合仿真引擎提供的API的简介。
1)void WriteAHB32(unsigned intaddr,unsigned int data):该函数为C程序(测试用例)提供通过AHB总线写寄存器或者系统存储器的操作。
2)unsigned intReadAHB32(unsigned intaddr):该函数为C程序提供通过AHB总线读寄存器或者系统存储器的操作。
3)intWaitInt(void):等待中断发生,返回。
4)double SimTime(void):获取当前的仿真时间。
5)void WaitNs(unsigned time):等待相应的绝对仿真时间,然后返回。
6)void StopSim(void):通过调用这个函数,C程序中可以直接停止RTL仿真器(仿真工具)并退出。
7)void WaitCycles(unsigned int time):等待指定的周期数。这个周期是以联合仿真引擎所连接的AHB总线的时钟频率为准的。
8)unsignedintDirectReadMem(unsigedintaddr):该函数为C程序提供零时延读系统存储器的操作。相对RTL仿真器而言,是不占仿真时间的,这种方式访问系统存储器不通过系统总线,这种方式可以节省大量的仿真时间。比如仿真结果的查看可以通过这个接口直接在C程序中高效的获取。
9)void DirectWriteMem(unsigned intaddr,unsignedint data):该函数为C程序提供零时延写系统存储器的操作。与DirectReadMem函数类似,使用该函数不占仿真时间,访问存储器不占用系统总线,可以节省仿真时间。比如USB主控器OUT传输需要数据的加载可以通过这个接口直接从C程序加载。
10)void PutIntSignal(unsigned int s):该函数可以置位Verilog HDL仿真器(即RTL仿真器)中的控制信号,触发Verilog HDL仿真器运行。
11)void GetIntSignal(unsigned int s):使用该函数通过读取Verilog HDL仿真器中的控制信号的值,判断Verilog HDL仿真器的控制信号是否有效,当Verilog的控制信号无效时,C程序(测试用例)继续往下运行。
10)和11)两个函数配合使用可以方便的在C和Verilog之间跳转(即联合仿真引擎和Verilog HDL仿真器之间的跳转),方便验证过程的控制。
上面详细描述了根据本发明的IP核验证系统以及CPU模型对外提供的API,下面结合图3详细说明根据本发明的IP核验证系统中的联合仿真引擎与仿真工具的Verilog HDL仿真器的交互过程。
由于使用了上面(例如图2)所描述的联合仿真引擎,测试用例既可以使用Verilog编写,也可以使用C语言编写。在使用C语言编写的测试用例时,需要在仿真工具中预先通过置位使能信号打开联合仿真引擎,该使能信号触发仿真工具(例如NC工具)调用测试用例的主函数software_main(),在C测试用例顺序执行时,整个Verilog HDL仿真器的仿真时间会停在当前时刻。只有当测试用例调用了基本的读写函数、中断响应之类的底层函数,硬件仿真时间才会向前推进,Verilog HDL仿真器继续往前运行。直到Verilog HDL仿真器反馈后,测试用例才会继续往下一行执行。
如图3所示,IP核验证系统的联合仿真引擎与Verilog HDL仿真器交互具体过程包如下:
在步骤302,Verilog HDL仿真器执行Verilog HDL描述的USB的外设模型的初始化过程。以IN传输的初始化过程为例,外设初始化过程包括:建立响应一定传输类型端点的缓冲区,暂存需要传送到USB主控器IP核的数据;配置外设模型的第一个数据包类型,传送数据的多少,默认响应主机的握手包;配置USB监控器监控外设模型与其他模型的通信过程的所需参数,以给出仿真过程的记录信息,方便仿真结果的查看。
在步骤304,联合仿真引擎等待使能信号。
在步骤306,Verilog HDL仿真器使能联合仿真引擎,测试用例进入联合仿真引擎继续执行。
在步骤308,联合仿真引擎初始化待验证的USB主控器,初始化过程如现有的USB主控器的初始化过程,在此不再赘述。
在步骤310,联合仿真引擎使能Verilog HDL仿真器,联合仿真引擎执行特定API函数,测试用例进入Verilog HDL仿真器的仿真过程。
在步骤312,Verilog HDL仿真器调用外设模型attatch命令,使外设模型连接到待验证的USB主控器。
在步骤314,联合仿真引擎等待外设模型连接中断,停止在当前时刻,直到中断有效,检测到USB外设模型连接中断。
在步骤316,联合仿真引擎执行外设模型连接中断处理。测试用例继续执行Verilog HDL仿真器的仿真过程。USB主控器与外设模型按照配置速度,传输类型,传输方向,传送的数据包的速度进行工作。基于C的测试用例进行循环执行,以等待中断信号有效并进行中断处理。
在步骤318,AHB监控器、AXI监控器和USB监控器监测USB主控器在AHB端和USB端的工作,进行协议检查,给出报告信息确认验证结果,在日志文件中记录仿真过程,以方便监测仿真过程。
结合上述流程,下面以DirectWriteMem函数的设计为例来说明处理器模型提供的API的设计及处理器模型与待验证的IP核之间的交互实现。在本实施例中,待验证的IP核是存储器模型。整个软硬件协同仿真环境,包括待验证的IP核和联合仿真引擎可以是在例如NC工具的仿真工具上运行。使用NC-SC仿真器提供的模块引用接口可以控制SystemC(处理器模型)和HDL(Verilog HDL语言描述的硬件)之间直接进行通信,该引用允许SystemC(处理器模型)访问Verilog HDL设计层内部的对象。因此,DirectWriteMem函数通过封装ncsc_hdl_signal_handle类的函数,使得SystemC描述的处理器模型能够直接访问Verilog HDL语言描述的存储器模型,这样,就可以不通过系统总线访问存储器模型,节约仿真时间,加快仿真速度。所使用的ncsc_hdl_signal_handle函数主要有两种:attach_hdl_memory()与write_hdl()。前者可将SystemC描述的处理器模型与Verilog HDL描述的某个存储器模型连接;后者可使SystemC描述的处理器模型往与其连接的存储器模型传输数据,将测试用例的测试结果与测试用例中预期结果进行比对,即可验证该存储器模型的性能。
通过上述技术方案,将验证系统中的处理器模型替代真正基于指令的处理器,省去了真正的处理器取指令和运行指令的复杂仿真过程和运算过程,节省了仿真运行时间,并且测试用例采用抽象层次更高的C语言编写,通过处理器模型对外提供了API完成激励生成与响应检查,方便验证人员进行调试,整个系统可以采用仿真软件来运行,而不是用硬件仿真IP核部分,系统的其他部分用软件来仿真,例如处理器模型采用类C语言进行编写可以由仿真软件进行仿真,因此基于处理器模型对外提供的API接口编写的测试用例可以方便的移植,编写的测试用例可以方便的进行移植,在硬件仿真阶段就能调试SOC系统软件,不需要等到硬件系统设计完成之后才能进行软件调试,节省了项目开发时间。
由于根据本发明的弃用了真正的基于指令的处理器,加快了仿真运行时间;同时不使用FPGA运行硬件部分作为加速,不需要等到FPGA系统搭建完成才能验证整个IP核,节省了开发时间。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。