专利名称:软硬件协同仿真通信方法
技术领域:
本发明涉及集成电路设计技术领域,特别涉及SOC(system-on-a-chip片上系统)的设计验证技术。
背景技术:
传统的SOC设计中,其过程一般是系统的预研,划分各功能模块(包括软件、硬件),具体模块的实现,然后是各个模块的集合、验证。按照传统的方法,硬件模块和软件模块各自分开验证其功能是否正确,也就是说,它们的验证不在同一个环境之下。这种方法存在很多缺点。首先,硬件和软件模块必须根据系统要求,建立各自的验证环境,这必然导致两个环境的不一致性;同时,额外增加了硬件模拟软件环境和软件模拟硬件环境的仿真模型;另外,仿真模型有别于实际的代码,以至于最后整合时,容易产生不可预期的错误,导致整个设计的反复。软硬件协同验证,则在最大程度上解决了分开验证的缺点,使软件和硬件能够尽早协同运作,让软件调试和硬件调试在同一时间进行,及时发现软件和硬件的错误。
为了解决这个问题,目前业内有一系列的方法最常见的一种是软原型验证,即将硬件设计由HDL仿真器在工作站上模拟,软件模型与硬件仿真器之间通过API接口通信来实现整个系统的软硬件部分的联合仿真,即Co-simulation。这种方法的优点在于整个仿真验证过程的可控性和可监测性很好,成本低;其缺点在于验证能力有限,只能适用于早期测试、接口调试和代码调试方面;且仿真运行速度很慢;此外它只能验证模型在功能上的正确性,没有精确至周期,也没精确至引脚;并且它很难解决外围设备数据同步的要求。另一中方法为快速原型系统,实现途径包括仿效(Emulation)、可重配置原型系统&专用原型系统,它是一种将SOC系统快速映射到基于处理器阵列或基于FPGA器件而构建出来的可重配置的平台来对设计进行验证的方法。这种方法的优点在于仿真速度很快,但仿真过程的可控性和可检测性差,且成本很高。
因此,SOC软硬件联合验证仍是个需要解决的问题。以下列举已有专利及项目提出的一些解决方法。
国内研发的SOC软硬件验证平台的典型案例有浙江大学的媒体处理器软硬件协同仿真验证平台(MPSP)、清华大学微电子所基于Celoxica的RC1000和RC200平台提出了改进型SoC原型验证电路板设计方案等。但是,浙江大学的MPSP专用性过强,可扩展性不能满足SoC系统研发的实际需要,清华大学的SoC原型验证方案还不成熟,不能提供完整的平台。
发明内容
本发明所要解决的技术问题是,为SOC软硬件联合验证提供一种软硬件双方数据通信机制,为联合验证提供通信支持。
本发明解决所述技术问题采用的技术方案是,软硬件协同仿真通信方法,软硬件协同仿真通信方法,其特征在于,在仿真初始化阶段,软件侧和硬件侧之间交换的数据包内包括下列数据方向标识,用于标识本数据包在双方传送的方向;数据类型标识,用于标识本数据包是否为寄存器配置信息;第一数据标识,用于标识本数据包是否为信号使能位;寄存器地址,用于标识需要配置的寄存器的地址;寄存器数据,即向寄存器送出的配置信息;时钟;输入信号使能标识;输出信号使能标识;第一使能标识。
进一步的,数据包内还包括仿真模式类型标识,用于标识属于联合仿真模式还是矢量仿真模式;第一长度标识,用于标识数据包中帧的个数;第二长度标识,用于标识本次通信中数据包的个数。
在仿真运行阶段,硬件侧和软件侧之间交换的数据包内包括下列数据时钟用来定义时钟的,总共可定义8个时钟,最高位为第一个时钟,次位为第二个时钟,依此类推24位为第八个时钟;输入标记用来表述输入信号的值;方向标记用来表述双向信号输入方向的值;第二使能标记输入和双向信号的使能位的值。
数据包是固定长度,如果长度不足,以填充位填满。
本发明的有益效果是,为硬件加速器或仿效器和软件仿真器正确高速的传输数据提供了支持,使软硬件双方协同工作,以完成对整个系统的验证。
以下结合附图和具体实施方式
对本发明作进一步的说明。
图1为本发明的实现软硬件协同仿真通信协议数据包的结构图;图2是本发明的数据包的包头格式示意图;图3是初始化阶段配置寄存器的包体中的一个帧的结构示意图;图4是使能位的包体格式示意图;图5是初始化阶段详细的包体组织格式;图6是仿真运行阶段软件侧传递给硬件侧的包体的格式示意图;图7是仿真运行阶段软件侧传递给硬件侧的详细包头的格式示意图。
图8是由硬件侧传回软件侧的数据包体的格式示意图;图9是详细的数据包体格式示意图;图10是仿真结束阶段具体包体的格式示意图。
图11是本发明的通信方法的工作环境示意图。
具体实施例方式
本发明的的通信方法是基于如下SOC验证机制SOC软硬件一体化设计验证方法,包括以下步骤a、初始化;b、软件侧向硬件侧发送激励数据包;c、硬件侧根据激励数据包进行仿真处理,将处理结果发回软件侧,并为软件侧接收;d、循环步骤b-c直到仿真结束。
以Co-Simulation模式仿真为例。
Co-Simulation模式仿真的基本机理在仿真初始化之后,即可进入仿真运行阶段。仿真运行时,软件先向硬件发送一个激励数据包,然后接收一个来自硬件的响应数据包;接着再发送一个激励数据包,然后接收一个响应数据包;如此循环交替进行下去,直到仿真结束为止。
a)仿真的初始化阶段在仿真的初始化阶段,软件侧通过向硬件侧发送两个数据包,其中第一个数据包中包含硬件侧寄存器的配置信息,通过对硬件侧的寄存器写入相应的值,第二个数据包中对每一个数据位的输入输出方向进行定义。从而完成对硬件侧的初始化。
b)仿真运行阶段在仿真的运行阶段,软硬件数据的通讯以数据包的形式进行传送,数据包包括包头(Packet Header)和包体(Packet Body,对于Co-Simulation模式,一个数据包体就对应一次协同仿真周期的数据),在仿真进行中,在每一个协同仿真周期由软件环境发送一个数据包(由数据包头紧跟着一个负载数据包构成),等待硬件方完成仿真后,将数据包(由数据包头紧跟负载数据包构成)传回后,进行处理后传回给仿真器。在这里给出仿真运行阶段的数据包和负载数据的格式。Co-Simulation模式的仿真过程软件发送第一个激励数据包,读取硬件返回的第一个激励数据包的响应数据包,发送第二个激励数据包,读取硬件返回的第二个激励数据包的响应数据包,如此循环下去,直到仿真结束。即在仿真过程中,从软件侧发送到硬件侧和从硬件侧发送到软件侧的数据包的大小在初始化化完成后是确定的。在仿真期间不允许有变化长度的数据包出现。
c)仿真结束阶段软件侧在仿真结束后,由软件侧向硬件侧发送一个字长为17的32位数据包。通知硬件以结束仿真。其中负载数据包即是关断联合仿真卡所有I/O的方向使能信息(全为‘0’)。
附图1为本发明的实现软硬件协同仿真通信协议数据包的结构图;图中所取为数据流片断,它是由数据包组成,数据包一个个32位的帧构成,帧的个数由具体的数据包类型决定;数据包由包头和包体组成,包头的长度是固定的为一帧,主要用来定义验证模式、数据流的方向、指示数据包体类型、数据包的类型、包体的长度、包头标记位和数据包的个数等,包体由若干个帧构成,它的个数是不固定的,帧的个数由具体的数据包类型决定。
整个软硬件协同仿真过程分为三个阶段仿真初始化、仿真运行和仿真结束;每个仿真阶段的数据包的格式统一定义为图1所示,其中每一格为一个帧,帧的大小是32bit;数据包的第一个帧是数据包的包头,包头后紧跟是包体,包体是由n个帧组成,n是由数据包的类型决定。
在软硬件协同仿真通信协议中统一定义了数据包的包头格式,如图2所示;对于包体,针对不同的仿真阶段有不同的定义格式;包头中每一位的具体意义如下描述DIR方向位,包头帧的第31位,0表示数据包从软件侧传递到硬件侧,1表示数据包从硬件侧传递到软件侧;Type类型位,包头帧的第30位,1表示数据包为寄存器配置信息,0表示数据包为非寄存器配置信息;Mode仿真模式选择位,包头帧的第29位,1表示Co-Simulation模式(联合仿真模式),0表示Vector仿真模式(矢量仿真模式);EN标记位,数据包头的第28位,1表示数据包是信号使能位的信息,0表示数据包不是信号使能位的信息。
SHD关断包位,数据包头的第27位,1表示数据包为关断包,0表示数据包为非关断包;N/A保留位,数据包头的第17位到16位和第26位到24位,留做以后扩展;Length包头的第23到18位,表示数据包中帧的个数(包括包体和包头),以32bit为一个计数单位;NO_FRA表示数据包的个数;包头标记位包头的第9位到0位,为恒定值0x0A5;对于包体的格式定义,我们针对不同的仿真阶段有不同的定义仿真初始化阶段软件侧向硬件侧发送数据,对硬件侧进行初始化;发送的数据含两种类型的数据包,其中一种数据包中包含硬件侧寄存器的配置信息,对硬件侧的寄存器写入相应的初始化值,另一种数据包是用来定义时钟的个数和输入输出信号。根据不同的数据包类型定义不同的包体一种包体用来配置硬件侧中的寄存器,一种用来配置时钟和输入、输出与双向信号信号的使能位。具体包体定义如下
配置寄存器的包体格式(如图3所示为包体中的一个帧)。
ADDR1和ADDR2是要配置的寄存器的地址,DATA1和DATA2是要配置的寄存器的配置信息;对于不足32位的寄存器配置信息,以1作为填充;硬件的软复位实现通过对0x00寄存器写入FF值实现复位。复位的时间由地址为01H寄存器写入的值确定。硬件在复位时间后自动恢复到正常的工作状态。软复位与配置寄存器采用不同的数据包进行发送。
在初始化阶段,需配置的寄存器如下表1所列,地址为0x00~0x0B的12个寄存器
表1用来配置时钟和输入、输出与双向信号信号的使能位的包体格式,如图4所示;包体中帧的数目是可变的,它是由输入、输出和双向信号的个数决定,对于不满32bit的帧以0作填充。详细的包体组织格式如图5所示。
CLOCK用来定义时钟的,总共可定义8个时钟,最高位为第一个时钟,次位为第二个时钟,依此类推24位为第八个时钟;例如启用编号为0和3的时钟时,则clock段的八位为1001000。
INPUT’EN用来定义输入信号的使能位,以1填充,1的个数由输入信号的个数决定;OUTPUT’EN用来定义输出信号的使能位,以1填充,1的个数由输出信号的个数决定;INOUT’EN用来定义双向信号的使能位,以1填充,1的个数由双向信号的个数决定;Padding填充位,用来填充不满32bit的帧;在初始化阶段,发送完以上两个数据包后,就认为硬件的初始化就已经完成,在每一次仿真启动的时候,软件都要对硬件进行初始化。
仿真运行阶段软件侧向硬件侧发送数据对硬件侧施加激励信号,等待硬件侧完成仿真后将数据通过PCI传回软件侧。仿真运行阶段的数据包的包体分为两种一种是由软件侧发送给硬件侧的,它是对硬件施加的激励信号;另一种是由硬件侧传递给软件侧的,它是从硬件读回的仿真数据。具体数据包格式定义发送(由软件侧传递给硬件侧)包体的格式如图6所示。
CLOCK用来定义时钟的,总共可定义8个时钟,最高位为第一个时钟,次位为第二个时钟,依此类推24位为第八个时钟;例如启用编号为0和3的时钟时,则clock段的八位为1001000。
INPUT用来存储输入信号的值;INOUT用来存储双向信号输入方向的值;EN输入和双向信号的使能位的值,1表示使能信号,以1填充,1的个数由输入信号或双向信号的个数决定;Padding填充位,用来填充不满32bit的帧;详细的包头格式如图7所示。
对发送包体格式的几点说明CLOCK时钟位的长度恒为8位,对应于第一个32位数据的31,30....24位依次对应于时钟通道的第0,1,2,3,4,5,6,7个时钟通道。时钟数据为时钟信号当前的实际电平。未启用时钟始终以0填充,比如已启用0通道时钟,则8位CLOCK值为?000_0000(注?代表该已启用时钟信号为当前仿真数据下对应的实际电平)。
CLK,INPUT和INOUT的位数之和如果不为32的整数倍,则在其后面通过引入PADDING信息,将其扩展为32位的整数倍,如上图所示。其中INPUT共有X位。INOUT共有Y位。如8+X+Y=55,则应在后面添加9个1,作为填充位。
EN位,作为发送数据(包括clock,input,inout)位的方向选择信号,1表示对应位为输入(软件传递激励信息硬件);0表示对应发送数据位为输出信号(数据自硬件返回给软件侧)。EN位的每一位数据与发送数据的clock,input,inout位的每一位一一对应,不足32位的整数倍时,在后面添加PADIDNG信息。
关于时钟信号对应的8位EN,当前数据包对应的时钟信号如果发生了跳变,其对应位的EN为‘1’,否则为‘0’,比如,当前数据包是对应编号为3的时钟跳变,则这8位EN编码为0001000。
对于没有INOUT双向数据位时EN位的处理,即为本文档中的Y=0的特殊情况。与Y!=0(有双向数据位时)的处理方法一样。
接收(由硬件侧传回软件侧的)数据包体的格式如图8所示。
INOUT用来存储双向信号输出方向的值OUTPUT用来存储输出信号的值;Padding1和Padding2填充位,用来填充不满32bit的帧;详细的数据包体格式参见图9。
在自硬件侧返回的数据中,包括有PADDING信息,和INOUT位和OUTPUT位。
在仿真过程中,从软件侧发送到硬件侧和从硬件侧发送到软件侧的数据包的大小在初始化化完成后是确定的。在仿真期间不允许有变化长度的数据包出现。
仿真结束阶段仿真结束后,由软件侧向硬件侧发送一个字长为17的32位数据包,以通知硬件以结束仿真。具体包体的格式如图10所示。其中32个32位,全为‘0’。
本发明的工作环境参见图11。采用C语言或硬件描述语言编写的测试激励以及硬件虚拟映射软件(MVP)产生的管脚映射信息,经由第三方仿真工具并通过PL API(HDL应用接口函数)或直接通过文本文件发送到采用C语言编写的基于事务级的打包解包应用程序模块中,该模块根据所述平台的软硬件通信协议将激励信息打成规定格式的数据包,并通过PCI总线发送到硬件(PCI卡的FIFO中),然后硬件通过软硬件通信双握手协议将激励传送到联合仿真板卡的FIFO中,随后由仿真主控模块(或BFM)模块对激励数据包进行解压处理并转换成具体的时钟经准的测试激励信号加载到被测试模块中,待相应仿真周期完成后被测试模块(DUT)将所得的响应信号传回仿真主控模块(或BFM)模块并由它按照软硬件通信协议打包,然后将这些响应数据包存储在联合仿真子板的上行FIFO中,等其软硬件通信模块握手成功后,则将响应数据包传送至PCI卡的FIFO中,最后通过PCI总线按原路传回至采用C语言编写的基于事务级的打包解包应用程序模块中,该模块将收到的响应数据包解压后,通过相应API(Application Programming Interface)函数将响应信息传回第三方仿真工具,或直接以文本形式保存。采用所述平台的这种验证方法的整个过程中用户不会感觉到整个硬件仿真环境的存在,整个仿真操作过程与通常的软件模拟仿真没什么两样,但是仿真速度有极大的提高。
权利要求
1.软硬件协同仿真通信方法,其特征在于,在仿真初始化阶段,软件侧和硬件侧之间交换的数据包内包括下列数据方向标识,用于标识本数据包在双方传送的方向;数据类型标识,用于标识本数据包是否为寄存器配置信息;第一数据标识,用于标识本数据包是否为信号使能位;寄存器地址,用于标识需要配置的寄存器的地址;寄存器数据,即向寄存器送出的配置信息;时钟;输入信号使能标识;输出信号使能标识;第一使能标识。
2.如权利要求1所述的软硬件协同仿真通信方法,其特征在于,数据包内还包括仿真模式类型标识,用于标识属于联合仿真模式还是矢量仿真模式;第一长度标识,用于标识数据包中帧的个数;第二长度标识,用于标识本次通信中数据包的个数。
3.如权利要求1或2所述的软硬件协同仿真通信方法,其特征在于,在仿真运行阶段,硬件侧和软件侧之间交换的数据包内包括下列数据时钟用来定义时钟的,总共可定义8个时钟,最高位为第一个时钟,次位为第二个时钟,依此类推24位为第八个时钟;输入标记用来表述输入信号的值;方向标记用来表述双向信号输入方向的值;第二使能标记输入和双向信号的使能位的值。
4.如权利要求1或2或3所述的软硬件协同仿真通信方法,其特征在于,数据包是固定长度,如果长度不足,以填充位填满。
全文摘要
软硬件协同仿真通信方法,涉及集成电路设计技术领域,特别涉及SOC(system-on-a-chip片上系统)的设计验证技术。本发明在仿真初始化阶段,软件侧和硬件侧之间交换的数据包内包括下列数据方向标识,用于标识本数据包在双方传送的方向;数据类型标识,用于标识本数据包是否为寄存器配置信息;第一数据标识,用于标识本数据包是否为信号使能位;寄存器地址,用于标识需要配置的寄存器的地址;寄存器数据,即向寄存器送出的配置信息;时钟;输入信号使能标识;输出信号使能标识;第一使能标识。本发明为硬件加速器或仿效器和软件仿真器正确高速的传输数据提供了支持,使软硬件双方协同工作,以完成对整个系统的验证。
文档编号G06F17/50GK1928878SQ200610021609
公开日2007年3月14日 申请日期2006年8月17日 优先权日2006年8月17日
发明者李平, 廖永波 申请人:电子科技大学