本发明属于芯片前端设计技术领域,特别是涉及一种多处理器系统仿真的系统状态监测方法和装置。
背景技术:
随着工艺技术以及应用领域的不断发展,芯片的复杂度不断提高,相对应的,验证工作的复杂度也不断提高,验证工作耗费的事件日益成为芯片研发周期的瓶颈。于是,如何尽可能提高仿真验证的效率,缩短每次仿真验证耗费的事件,成为优化芯片验证工作,缩短芯片研发周期的一个重要方向。
针对报文处理的多处理器系统的仿真验证,往往伴随着大量的监测机制,用来自动化地对系统状态进行检查,并为系统的操作提供逻辑判断的依据。而每个监测机制都涉及到一个或多个触发事件,当系统规模扩大的时候,这些触发事件可能的总数呈指数型增长。
现有技术中的监测机制如下:当仿真中一旦出现触发事件,就需要暂停仿真,开始对触发事件进行处理,结束之后再重启仿真。然而,利用这种方法,在大规模的多处理器系统中,监测机制将耗费大量的资源和仿真时间。
技术实现要素:
为解决上述问题,本发明提供了一种多处理器系统仿真的系统状态监测方法和装置,避免监测机制对每个触发事件都要进行一次“暂停-重启”仿真的操作,能够节省大量的资源和仿真时间。
本发明提供的一种多处理器系统仿真的系统状态监测方法包括:
定义系统中的触发监测的事件;
对所述触发监测的事件的类型,确定统一的存储格式;
构造具有预设深度和预设宽度的事件fifo,所述预设深度不小于系统同一周期出现的最多事件的数量;
当系统仿真过程中出现所述触发监测的事件,将所述触发监测的事件写入所述事件fifo中;
每个时钟周期结束后,如果所述事件fifo不为空,暂停仿真,按照顺序将所述触发监测的事件读出并处理。
优选的,在上述多处理器系统仿真的系统状态监测方法中,在所述定义系统中的触发监测的事件之前,还包括:
定义所述系统中的监测机制。
优选的,在上述多处理器系统仿真的系统状态监测方法中,所述构造具有预设深度和预设宽度的事件fifo包括:
当所述监测机制和所述事件fifo通过软件语言实现时,用抽象化事务级的方式,自定义特定的事件数据类型实现;
否则,对所述事件的类型进行统一的编码,构造出一个固定位宽的事件存储格式。
优选的,在上述多处理器系统仿真的系统状态监测方法中,所述预设深度不小于系统同一周期出现的最多事件的数量具体为:
利用C++语言构造所述事件fifo时,用指针和链表方式构造一个无限大的事件fifo。
优选的,在上述多处理器系统仿真的系统状态监测方法中,所述按照顺序将所述触发监测的事件读出并处理之后还包括:
当处理完毕,重启仿真。
本发明提供的一种多处理器系统仿真的系统状态监测装置包括:
第一定义单元,用于定义系统中的触发监测的事件;
确定单元,用于对所述触发监测的事件的类型,确定统一的存储格式;
构造单元,用于构造具有预设深度和预设宽度的事件fifo,所述预设深度不小于系统同一周期出现的最多事件的数量;
写入单元,用于当系统仿真过程中出现所述触发监测的事件,将所述触发监测的事件写入所述事件fifo中;
处理单元,用于每个时钟周期结束后,如果事件fifo不为空,暂停仿真,按照顺序将所述触发监测的事件读出并处理。
优选的,在上述多处理器系统仿真的系统状态监测装置中,还包括:
第二定义单元,用于定义所述系统中的监测机制。
优选的,在上述多处理器系统仿真的系统状态监测装置中,所述构造单元具体用于:
当所述监测机制和所述事件fifo通过软件语言实现时,用抽象化事务级的方式,自定义特定的事件数据类型实现;
否则,对所述事件的类型进行统一的编码,构造出一个固定位宽的事件存储格式。
优选的,在上述多处理器系统仿真的系统状态监测装置中,所述构造单元具体用于:
利用C++语言构造所述事件fifo时,用指针和链表方式构造一个无限大的事件fifo。
优选的,在上述多处理器系统仿真的系统状态监测装置中,还包括:
重启单元,用于当处理完毕,重启仿真。
通过上述描述可知,本发明提供的上述多处理器系统仿真的系统状态监测方法和装置,由于先定义系统中的触发监测的事件;然后对所述触发监测的事件的类型,确定统一的存储格式;再构造具有预设深度和预设宽度的事件fifo,所述预设深度不小于系统同一周期出现的最多事件的数量;当系统仿真过程中出现所述触发监测的事件,将所述触发监测的事件写入所述事件fifo中;最后,每个时钟周期结束后,如果所述事件fifo不为空,暂停仿真,按照顺序将所述触发监测的事件读出并处理,因此能够避免监测机制对每个触发事件都要进行一次“暂停-重启”仿真的操作,能够节省大量的资源和仿真时间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的第一种多处理器系统仿真的系统状态监测方法的示意图;
图2为本申请实施例提供的第一种多处理器系统仿真的系统状态监测装置的示意图;
图3为基于事件fifo的多处理器系统仿真监测机制基本流程图。
具体实施方式
考虑到在大规模的多处理器系统仿真中,在对系统的状态监测上耗费的资源随着系统规模的扩大呈指数型增长,本发明的核心思想在于提供一种多处理器系统仿真的系统状态监测方法和装置,避免监测机制对每个触发事件都要进行一次“暂停-重启”仿真的操作,能够节省大量的资源和仿真时间。
本发明通过引入事件fifo,以每个时钟周期为单位,对能触发系统状态监测的事件进行保存和统一的处理,然后在当前时钟周期结束时暂停仿真,对事件按顺序进行处理,然后重启仿真,从而在不影响监测机制功能的前提下,将处理触发事件对仿真的暂停次数降到了最低,从而减少了对时间和资源的浪费,缩短了整个仿真的时间。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请实施例提供的第一种多处理器系统仿真的系统状态监测方法如图1所示,图1为本申请实施例提供的第一种多处理器系统仿真的系统状态监测方法的示意图。该方法包括如下步骤:
S1:定义系统中的触发监测的事件;
S2:对所述触发监测的事件的类型,确定统一的存储格式;
S3:构造具有预设深度和预设宽度的事件fifo,所述预设深度不小于系统同一周期出现的最多事件的数量;
具体的,事件fifo的预设深度必须大于等于系统中同周期可能出现的最多事件数量,这个值可以由对系统中触发事件的计算得出。在实际应用中,因为仿真用到的fifo,增加深度的资源耗费非常小,因此对触发事件的数量的计算可以不那么精确,尽量取较大的值就可以。
S4:当系统仿真过程中出现所述触发监测的事件,将所述触发监测的事件写入所述事件fifo中;
具体的,在写入事件fifo时,必须依照触发事件发生的顺序,也就是对监测机制发生影响的顺序写入,从而确保引入fifo的机制不会对监测机制的处理产生影响。
S5:每个时钟周期结束后,如果所述事件fifo不为空,暂停仿真,按照顺序将所述触发监测的事件读出并处理。
具体的,在读出事件fifo时,当fifo不为空时,在仿真完一个时钟周期之后,对事件fifo中的事件按写入顺序,一个一个地读出并处理,在读出和处理的过程中,仿真是暂时停止的。
与传统监测机制相比,在没有发生触发事件的时钟周期中,两种监测机制的时间耗费基本相同;在出现一个触发事件的时钟周期中,二者都需要对仿真进行一次暂停和处理事件的操作,但是因为基于fifo的方式有对fifo的额外操作,因此时间耗费稍微大一点。而对于有多个事件的时钟周期,因为频繁对仿真的暂停和重启对时间的耗费要远大于对fifo的操作(如果fifo是以软件语言的方式实现,这个差距会更加明显),假设读写fifo的时间耗费为i,“暂停-重启”仿真的时间耗费为(i+j),当前时钟周期触发事件为n,那么显然,两种监测方式的对时间的耗费差距是跟事件n成正比的,再加上每个时钟周期内出现的触发事件的期望值基本是随着系统规模扩大而呈指数型增加的。可以得出如下的结论,在平均每周期(除去没有触发事件的周期)触发事件期望值大于1的系统中,使用基于fifo的监测方式将比传统方式节省仿真时间,而节省的时间长度随着系统规模的扩大而几乎呈指数型增加。
通过上述描述可知,本申请实施例提供的上述第一种多处理器系统仿真的系统状态监测方法,由于先定义系统中的触发监测的事件;然后对所述触发监测的事件的类型,确定统一的存储格式;再构造具有预设深度和预设宽度的事件fifo,所述预设深度不小于系统同一周期出现的最多事件的数量;当系统仿真过程中出现所述触发监测的事件,将所述触发监测的事件写入所述事件fifo中;最后,每个时钟周期结束后,如果所述事件fifo不为空,暂停仿真,按照顺序将所述触发监测的事件读出并处理,因此能够避免监测机制对每个触发事件都要进行一次“暂停-重启”仿真的操作,能够节省大量的资源和仿真时间。
本申请实施例提供的第二种多处理器系统仿真的系统状态监测方法,是在上述第一种多处理器系统仿真的系统状态监测方法的基础上,还包括如下技术特征:
在所述定义系统中的触发监测的事件之前,还包括:
定义所述系统中的监测机制。
在这种情况下,需要先定义明确系统中的监测机制,然后才能定义对应的事件。比如先定义有对请求报文是否超时的监测机制,就必须定义相关的请求报文发出的触发事件和报文完成的触发事件。一旦监测机制已经确定,就可以列出触发事件的所有种类。再考虑到事件的特性和系统的规模,也就可以计算出同一时钟周期内触发事件的最大数量和存储单个事件需要的空间,这两个数值就可以作为事件fifo的深度和宽度。
本申请实施例提供的第三种多处理器系统仿真的系统状态监测方法,是在上述第二种多处理器系统仿真的系统状态监测方法的基础上,还包括如下技术特征:
所述构造具有预设深度和预设宽度的事件fifo包括:
当所述监测机制和所述事件fifo通过软件语言实现时,用抽象化事务级的方式,自定义特定的事件数据类型实现;
否则,对所述事件的类型进行统一的编码,构造出一个固定位宽的事件存储格式。
本申请实施例提供的第四种多处理器系统仿真的系统状态监测方法,是在上述第三种多处理器系统仿真的系统状态监测方法的基础上,还包括如下技术特征:
所述预设深度不小于系统同一周期出现的最多事件的数量具体为:
利用C++语言构造所述事件fifo时,用指针和链表方式构造一个无限大的事件fifo。
在这种情况下,就不用考虑具体的事件的数量,更便于操作。
本申请实施例提供的第五种多处理器系统仿真的系统状态监测方法,是在上述第四种多处理器系统仿真的系统状态监测方法的基础上,还包括如下技术特征:
所述按照顺序将所述触发监测的事件读出并处理之后还包括:
当处理完毕,重启仿真。
在这种情况下,整个过程如下:在仿真开始之后,一旦出现触发事件,就将其写入系统唯一的触发事件fifo中,但并不暂停仿真,也不对触发事件做处理,直到当前时钟周期结束,暂停仿真,对fifo中的事件按照写入的顺序串行读出并处理,直到fifo重新为空之后,继续仿真。
本申请实施例提供的第一种多处理器系统仿真的系统状态监测装置如图2所示,图2为本申请实施例提供的第一种多处理器系统仿真的系统状态监测装置的示意图,该装置包括:
第一定义单元201,用于定义系统中的触发监测的事件;
确定单元202,用于对所述触发监测的事件的类型,确定统一的存储格式;
构造单元203,用于构造具有预设深度和预设宽度的事件fifo,所述预设深度不小于系统同一周期出现的最多事件的数量,具体的,事件fifo的预设深度必须大于等于系统中同周期可能出现的最多事件数量,这个值可以由对系统中触发事件的计算得出。在实际应用中,因为仿真用到的fifo,增加深度的资源耗费非常小,因此对触发事件的数量的计算可以不那么精确,尽量取较大的值就可以;
写入单元204,用于当系统仿真过程中出现所述触发监测的事件,将所述触发监测的事件写入所述事件fifo中,具体的,在写入事件fifo时,必须依照触发事件发生的顺序,也就是对监测机制发生影响的顺序写入,从而确保引入fifo的机制不会对监测机制的处理产生影响;
处理单元205,用于每个时钟周期结束后,如果事件fifo不为空,暂停仿真,按照顺序将所述触发监测的事件读出并处理,具体的,在读出事件fifo时,当fifo不为空时,在仿真完一个时钟周期之后,对事件fifo中的事件按写入顺序,一个一个地读出并处理,在读出和处理的过程中,仿真是暂时停止的。
本申请实施例提供的第二种多处理器系统仿真的系统状态监测装置,是在上述第一种多处理器系统仿真的系统状态监测装置的基础上,还包括如下技术特征:
第二定义单元,用于定义所述系统中的监测机制。在这种情况下,需要先定义明确系统中的监测机制,然后才能定义对应的事件。比如先定义有对请求报文是否超时的监测机制,就必须定义相关的请求报文发出的触发事件和报文完成的触发事件。一旦监测机制已经确定,就可以列出触发事件的所有种类。再考虑到事件的特性和系统的规模,也就可以计算出同一时钟周期内触发事件的最大数量和存储单个事件需要的空间,这两个数值就可以作为事件fifo的深度和宽度。
本申请实施例提供的第三种多处理器系统仿真的系统状态监测装置,是在上述第二种多处理器系统仿真的系统状态监测装置的基础上,还包括如下技术特征:
所述构造单元具体用于:
当所述监测机制和所述事件fifo通过软件语言实现时,用抽象化事务级的方式,自定义特定的事件数据类型实现;
否则,对所述事件的类型进行统一的编码,构造出一个固定位宽的事件存储格式。
本申请实施例提供的第四种多处理器系统仿真的系统状态监测装置,是在上述第三种多处理器系统仿真的系统状态监测装置的基础上,还包括如下技术特征:
所述构造单元具体用于:
利用C++语言构造所述事件fifo时,用指针和链表方式构造一个无限大的事件fifo。在这种情况下,就不用考虑具体的事件的数量,更便于操作。
本申请实施例提供的第五种多处理器系统仿真的系统状态监测装置,是在上述第四种多处理器系统仿真的系统状态监测装置的基础上,还包括如下技术特征:
重启单元,用于当处理完毕,重启仿真。
具体的,在仿真开始之后,一旦出现触发事件,就将其写入系统唯一的触发事件fifo中,但并不暂停仿真,也不对触发事件做处理,直到当前时钟周期结束,暂停仿真,对fifo中的事件按照写入的顺序串行读出并处理,直到fifo重新为空之后,继续仿真。
基于上述描述,本申请实施例提供的装置的基本流程如图3所示,图3为基于事件fifo的多处理器系统仿真监测机制基本流程图。根据检测机制定义所有可能的触发事件,然后将可能的触发事件统一存储格式,并以此形成深度足以容纳同一时钟周期内所有触发事件的触发事件fifo,并开始仿真,如果出现触发事件,则写入触发事件fifo,直到当前仿真周期结束之后,如果触发事件fifo不为空,则暂停仿真,依序读出fifo中的触发事件并处理,如果为空,则进入直接判断是否仿真结束,如果未结束,则继续下一个仿真周期,判断是否出现触发事件,并循环上述步骤。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。