仿真方法及系统 【技术领域】
本发明涉及通信领域,具体而言,涉及一种仿真方法及系统。
背景技术
集成电路或现场可编程门阵列(Field Programable Gate Array,简称为FPGA)都需要在驱动和业务软件的支持下才能实现其特定功能,在芯片开发仿真阶段,如何实现驱动和业务软件的配置管理功能,决定了芯片仿真的充分性和完备性。
目前,常规的做法是在功能开发阶段,采用寄存器传输语言(Register Transfer Language,简称为RTL)或SYSTEMC描述语言编写程序,模拟驱动和业务软件功能,完成对芯片的初始化、配置和管理,完成芯片的功能仿真和验证。在硬件调试阶段,在目标软件环境实现真实的驱动和业务软件。
该方法可以满足功能不多、配置管理相对简单的芯片仿真需求。但是,对于大规模和功能复杂芯片,用RTL实现与实际功能一致的业务软件的工作是一项庞大的工作,在转换成实际驱动和业务软件过程中,会再次消耗大量工作量。模拟程序和实际软件之间的微小差异,将导致硬件调试时遇到的问题无法在仿真环境中的再现。同时真实驱动软件的开发需要在硬件阶段才能完成,导致开发周期的延长。
目前,在芯片仿真阶段,相关技术中缺少完整的跨平台软硬件协同开发方法。
【发明内容】
针对相关技术中的在芯片开发仿真阶段中工作量大、调试复杂、开发周期长的问题而提出本发明,为此,本发明的主要目的在于提供一种仿真方案,以解决上述问题至少之一。
为了实现上述目的,根据本发明的一个方面,提供了一种仿真方法。
根据本发明的仿真方法,用于硬件设备驱动和/或业务软件的开发,包括:设置硬件接口抽象模块,硬件接口抽象模块用于为硬件设备驱动和/或业务软件提供真实的访问接口;设置中央处理器CPU接口抽象模块,CPU接口抽象模块用于与芯片仿真模型连接,产生符合芯片仿真模型的时序;硬件接口抽象模块与CPU接口抽象模块进行报文交互。
优选地,硬件接口抽象模块与CPU接口抽象模块通过虚拟总线连接,并通过虚拟总线进行报文交互。
优选地,硬件接口抽象模块与CPU接口抽象模块通过虚拟总线连接并进行交互包括:硬件接口抽象模块与CPU接口抽象模块通过通讯协议连接,硬件接口抽象模块和CPU接口抽象模块之间交互的数据被封装成通讯协议所要求的格式的数据包。
优选地,硬件接口抽象模块与CPU接口抽象模块通过虚拟总线进行交互包括:硬件接口抽象模块接收来自硬件设备驱动的读/写命令,并将根据以下至少之一产生读/写命令的数据包:读/写命令的地址、读/写命令对应的数据的长度、读/写命令对应的数据的类型;硬件接口抽象模块通过虚拟总线向CPU接口抽象模块发送数据包。
优选地,硬件接口抽象模块与CPU接口抽象模块通过虚拟总线进行交互包括:在硬件接口抽象模块接收来自硬件设备驱动的写命令时,硬件接口抽象模块将写命令对应的待写的数据封装成数据包,并通过虚拟总线发送给CPU接口抽象模块。
优选地,硬件接口抽象模块与CPU接口抽象模块通过虚拟总线进行交互包括:硬件接口抽象模块通过虚拟总线获取来自CPU接口抽象模块的消息,其中,当消息为读返回命令时,则结束硬件设备驱动的读请求,并返回读请求所对应的数据;当命令为来自外部设备的读命令时,则直接发起直接存储寄存器访问DMA读取操作,在读取到读命令对应的数据后,向外部设备返回读取到的数据;当命令为来自外部设备的写命令时,则直接发起DMA写操作,将写命令对应的数据写入内存。
优选地,通讯协议包括传输控制协议。
为了实现上述目的,根据本发明的另一方面,提供了一种仿真系统。
根据本发明的仿真系统,用于硬件设备驱动和/或业务软件的开发包括:硬件接口抽象模块,用于为硬件设备驱动和/或业务软件提供真实的访问接口;CPU接口抽象模块,与芯片仿真模型连接,用于产生符合芯片仿真模型的时序;硬件接口抽象模块与CPU接口抽象模块进行报文交互。
优选地,上述系统还包括:虚拟总线,用于连接硬件接口抽象模块与CPU接口抽象模块,并在硬件接口抽象模块和CPU接口抽象模块之间进行报文交互。
优选地,虚拟总线具体用于通过通讯协议连接硬件接口抽象模块与CPU接口抽象模块,并将硬件接口抽象模块和CPU接口抽象模块之间交互的数据封装成通讯协议所要求的格式的数据包。
通过本发明,采用设置向上层提供硬件操作设置硬件接口抽象模块、硬件抽象接口模块和连接至硬件接口抽象模块的芯片仿真模型,解决了相关技术中的在芯片开发仿真阶段中工作量大、调试复杂、开发周期长的问题,使驱动和业务软件可以无缝移植到实际的软硬件环境,实现并行开发,进而加快了项目开发进度。
【附图说明】
此处所说明的附图用来提供对本发明地进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的仿真方法的流程图;
图2是根据本发明实施例的仿真方法中模块的示意图一;
图3是根据本发明实施例的仿真方法中模块的示意图二;
图4是根据本发明实施例的虚拟总线上的数据报文组成结构的示意图;
图5是根据本发明实施例的硬件接口抽象模块处理驱动硬件操作的功能流程图;
图6是根据本发明实施例的硬件接口抽象模块和虚拟总线之间消息的处理流程图;
图7是根据本发明实施例的硬件接口抽象模块处理虚拟总线报文消息的流程图;
图8是根据本发明实施例的硬件接口抽象模块处理片上总线或芯片外部总线直接存储寄存器访问操作请求和中断处理的流程图;
图9是根据本发明实施例的仿真系统的结构框图。
【具体实施方式】
功能概述
相关技术中的在芯片开发仿真阶段中工作量大、调试复杂、开发周期长的问题,本发明实施例提供了一种仿真方案,通过该方案在仿真模型和软件环境之间建立通信,将软件对硬件访问需求传输到仿真平台中由模型来完成,同时模型执行的结果和模型产生的中断消息以及模型的直接存储寄存器访问(Directory Memory Access,简称为DMA)操作传替给软件环境。虚拟总线屏蔽了硬件的实现细节,提供一个真实的硬件环境给软件,实现虚拟和真实环境的统一。该方案的处理原则如下:设置硬件接口抽象模块,硬件接口抽象模块用于为硬件设备驱动和/或业务软件提供真实的访问接口;设置中央处理器CPU接口抽象模块,CPU接口抽象模块用于与芯片仿真模型连接,产生符合芯片仿真模型的时序;硬件接口抽象模块与CPU接口抽象模块进行报文交互。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
在以下实施例中,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
方法实施例
根据本发明的实施例,提供了一种仿真方法,用于硬件设备驱动和/或业务软件的开发,图1是根据本发明实施例的仿真方法的流程图,如图1所示,该流程包括如下步骤S102至步骤S106:
步骤S102,设置硬件接口抽象模块,硬件接口抽象模块用于为硬件设备驱动和/或业务软件提供真实的访问接口;
步骤S104,设置中央处理器CPU接口抽象模块,CPU接口抽象模块用于与芯片仿真模型连接,产生符合芯片仿真模型的时序;
步骤S106,硬件接口抽象模块与CPU接口抽象模块进行报文交互。
在步骤S106中,硬件接口抽象模块与CPU接口抽象模块通过虚拟总线连接,并通过虚拟总线进行报文交互。
硬件接口抽象模块与CPU接口抽象模块通过通讯协议连接,硬件接口抽象模块和CPU接口抽象模块之间交互的数据被封装成通讯协议所要求的格式的数据包,下面从以下几个方面对此进行详细的描述。
方面一,硬件接口抽象模块接收来自硬件设备驱动的读/写命令,并将根据以下至少之一产生读/写命令的数据包:读/写命令的地址、读/写命令对应的数据的长度、读/写命令对应的数据的类型;硬件接口抽象模块通过虚拟总线向CPU接口抽象模块发送数据包。
方面二,在硬件接口抽象模块接收来自硬件设备驱动的写命令时,硬件接口抽象模块将写命令对应的待写的数据封装成数据包,并通过虚拟总线发送给CPU接口抽象模块。
方面三,硬件接口抽象模块通过虚拟总线获取来自CPU接口抽象模块的消息,其中,当消息为读返回命令时,则结束硬件设备驱动的读请求,并返回读请求所对应的数据;当命令为来自外部设备的读命令时,则直接发起直接存储寄存器访问DMA读取操作,在读取到读命令对应的数据后,返回外部设备的读操作;当上述命令为来自外部设备的写命令时,则直接发起DMA写操作,将写命令对应的数据写入内存。
优选地,通讯协议包括传输控制协议。
下面从四个方面对本实施例进行详细的说明。
方面一
在目标软件(即,业务软件)环境底层实现一个硬件接口抽象模块,该硬件接口抽象模块对上层驱动(即,硬件设备驱动)和业务软件提供基本的硬件操作,其中,硬件操作可以包括但不限于:对硬件寄存器读写访问、系统内存和目标期间的块数据拷贝、响应硬件中断功能等,该模块用于将硬件操作封装成和目标软件系统一致的系统调用,以便上层的硬件设备驱动和/或业务软件进行调用。而在实际硬件环境中,该硬件接口抽象模块被实际硬件提供的硬件操作代替,实际的硬件接口为PCI或者LOCAL BUS,因此,只需要开发接口的驱动,位于基本硬件操作之上的驱动和业务软件无需修改可以直接使用。
方面二
在本实施例中还涉及到一个和芯片仿真模型连接的CPU接口抽象模块。该CPU接口抽象模块连接到芯片内部片上总线或者直接连接到芯片的外部CPU接口总线,实现对内部设备的访问和控制。屏蔽掉CPU侧接口硬件细节,直接连接到软件开发环境。
方面三
在实际的开发中,常用的操作系统平台有vxworks,linux,windows mobile系统等,常用的模型仿真软件有Modelsim,Ncsim,SystemC等。因此,各种仿真平台需要在不同的操作系统环境运行,例如Windows,Linux等。可以采用TCP协议实现跨平台通信,但是不仅仅限于此通信协议,例如,如果仿真和软件环境在同一台计算机上运行,也可以采用共享存贮器方式实现进程间通信,或者在通信要求较高的场合,采用专用硬件来实现跨平台间通信。
方面四
在硬件接口抽象模块和CPU接口抽象模块之间可以采用通信协议进行通讯,该通信协议把硬件接口抽象模块的基本硬件操作封装成数据包传输给芯片仿真平台的CPU接口抽象模块,交给仿真模型执行。需要返回给软件平台的数据由CPU接口抽象模块封装成包后再传输给硬件接口抽象模块,通过基本硬件抽象接口模块传输给软件。模型的中断信号状态也封装成数据包传输给硬件接口抽象模块,交给中断服务程序执行。
下面将结合附图和实施例对本发明进行详细描述。
图2是根据本发明实施例的仿真方法中模块的示意图一,如图2所示,包括:业务软件101,硬件设备驱动程序102(即,硬件设备驱动),硬件接口抽象模块103,CPU接口抽象模块104,虚拟总线105,芯片外部总线106和芯片仿真环境107。
图3是根据本发明实施例的仿真方法中模块的示意图二,如图3所示,包括:业务软件101,硬件设备驱动程序102,硬件接口抽象模块103,CPU接口抽象模块104,虚拟总线105,芯片片上总线106和芯片仿真环境107,与图2不同的是,在图3中CPU接口抽象模块直接和内部总线相连。下面基于图2和图3对本实施例进行说明。
图2和图3中的业务软件101是实现芯片功能对应的应用软件,其功能实现构建在硬件设备驱动程序102的基础上。硬件设备驱动程序102封装了硬件的实现细节,将不同的硬件实现封装成统一的接口。硬件设备驱动程序102调用基本硬件操作来实现对硬件的控制和访问。对新开发的芯片,需要重新开发全部硬件设备驱动程序102和部分业务软件101.
图2和图3中的硬件接口抽象模块用于硬件驱动和仿真模型间的通信。对驱动侧,该接口模拟实际的硬件行为,提供硬件操作接口,并采用虚拟总线105和芯片仿真环境107连接,如果是实际的单板,则采用实际总线连接到芯片。
CPU接口抽象模块104接收来自虚拟总线105的报文,并产生符合芯片接口要求的时序,从而实现对芯片外部或内部总线106的访问。
其中,虚拟总线105是某种跨平台的通信手段,其命令和数据采用封包的方式传输,图4是根据本发明实施例的虚拟总线上的数据报文组成结构的示意图,如图4所示,硬件操作被转换成报文头和可选的数据部分,报文头包括一个报文类型,例如,写命令、读命令、读返回命令、中断状态更新命令等。对于写命令和读返回命令,后面需要有相应的数据部分,其长度由报文头中的长度字段决定。另外定义了一个起始地址字段。但是,实际实现时根据硬件支持的命令会有所增减。
CPU接口抽象模块104和硬件接口抽象模块103需要根据硬件、软件的要求产生相应的命令及数据,并对返回的数据进行处理。下面结合图5至图8对进行详细的说明。
图5是根据本发明实施例的硬件接口抽象模块处理驱动硬件操作的功能流程图,如图5所示,硬件接口抽象模块103如果接收到来自硬件设备驱动(即,驱动层)的读写命令,会根据读写命令的地址,数据长度及类型产生对应的报文头并通过虚拟总线发送给CPU接口抽象模块104,如果是写命令,再把待写的数据也通过虚拟总线105发送给CPU接口抽象模块104。
图6是根据本发明实施例的硬件接口抽象模块和虚拟总线之间消息的处理流程图,如图6所示,硬件接口抽象模块103也不断的监测来自虚拟总线的消息报文。如果是读返回命令,则结束驱动层的都请求,返回数据;如果是来自外部设备(外设)的读写命令,则直接发起DMA操作,对写操作直接把数据写入指定内存,对读操作则从内存取数据,结束外设读操作。如果来自外设的是中断状态切换,则根据中断信号状态决定是否执行驱动程序的中断服务程序。
图7是根据本发明实施例的硬件接口抽象模块处理虚拟总线报文消息的流程图,图8是根据本发明实施例的硬件接口抽象模块处理片上总线或芯片外部总线DMA操作请求和中断处理的流程图,如图7和图8所示,CPU接口抽象模块功能和硬件接口功能基本相似,对于相同的在此不再赘述,不同的在于,CPU接口模块只会产生中断状态更新命令,而硬件接口抽象模块只会响应中断请求。硬件接口抽象模块对驱动软件提供接口,没有时序,而CPU接口抽象模块需要和芯片接口模型通信,其接口时序必须满足设计要求。
综上所述,由图2和图3可见,如果采用真实的硬件单板调试软件,只需要用硬件接口驱动程序代替硬件接口抽象模块,而其他软件模块完全相同。因此,通过本实施例可以实现基于仿真模型基础上的驱动和业务软件开发,移植到实际硬件系统中时只需要增加实际硬件接口的驱动,而硬件驱动和业务软件可以无缝移植。
系统实施例
根据本发明的实施例,提供了一种仿真系统,用于硬件设备驱动和/或业务软件的开发,图9是根据本发明实施例的仿真系统的结构框图,如图9所示,该系统包括:硬件接口抽象模块92、CPU接口抽象模块94,下面对该系统进行详细的描述。
硬件接口抽象模块92,用于为硬件设备驱动和/或业务软件提供真实的访问接口;CPU接口抽象模块94,与芯片仿真模型连接,用于产生符合芯片仿真模型的时序;硬件接口抽象模块与CPU接口抽象模块进行报文交互。
如图8所示,该系统还包括虚拟总线,该虚拟总线用于连接硬件接口抽象模块与CPU接口抽象模块,并在硬件接口抽象模块和CPU接口抽象模块之间进行报文交互。
虚拟总线具体用于通过通讯协议连接硬件接口抽象模块与CPU接口抽象模块,并将硬件接口抽象模块和CPU接口抽象模块之间交互的数据封装成通讯协议所要求的格式的数据包。
综上所述,通过本发明的上述实施例,可以实现基于模型的驱动和业务软件的开发,方便芯片功能的仿真和调试;同时,开发的硬件驱动和业务软件可以无缝移植到实际的软硬件环境中,从而实现了并行开发,加快了项目开发进度。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。