一种微处理器的软件模拟器的事件队列的管理方法及系统.pdf

上传人:狗** 文档编号:6183042 上传时间:2019-05-18 格式:PDF 页数:11 大小:683KB
返回 下载 相关 举报
摘要
申请专利号:

CN201510081271.9

申请日:

2015.02.15

公开号:

CN104657108A

公开日:

2015.05.27

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/28申请日:20150215|||公开

IPC分类号:

G06F9/28; G06F9/455

主分类号:

G06F9/28

申请人:

北京邮电大学; 国家计算机网络与信息安全管理中心

发明人:

罗浩; 林绅文; 卫冰洁; 吴志刚; 贺欣; 杜雄杰; 张树壮; 李应博; 王啸; 刘成; 袁媛; 房婧; 于贺威

地址:

100876北京市海淀区西土城路10号

优先权:

专利代理机构:

北京聿宏知识产权代理有限公司11372

代理人:

钟日红; 朱绘

PDF下载: PDF下载
内容摘要

本发明公开了一种微处理器的软件模拟器的事件队列的管理方法及系统,克服现有技术中微处理器的软件模拟器的事件队列的效率低下的不足。该方法包括:将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应所述软件模拟器的一个时钟周期;将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件;将全局周期指针指向当前时钟周期所对应的表项;当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。本发明的实施例在事件插入、事件查询和事件剔除方面都具有很高的效率。

权利要求书

权利要求书
1.  一种微处理器的软件模拟器的事件队列的管理方法,包括:
将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应所述软件模拟器的一个时钟周期;
将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件;
将全局周期指针指向当前时钟周期所对应的表项;
当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。

2.  根据权利要求1所述的方法,其中:
根据所述软件模拟器模拟过程中生成的事件的最大触发延迟时钟周期确定所述循环数组的大小。

3.  根据权利要求1所述的方法,其中,该方法包括:
在查找事件时,检测所述全局周期指针指向的当前表项;
若所述全局周期指针所指向的当前表项内的头指针不为空,则按序触发头指针指向的线性链表中的所有事件。

4.  根据权利要求1所述的方法,其中,该方法包括:
在插入新事件时,根据所述新事件的触发周期确定所述新事件所对应的目标表项;将所述新事件插入到所述目标表项所对应的线性链表中。

5.  根据权利要求1所述的方法,其中,该方法包括:
从所述事件队列中剔除的事件节点存储在预设的空闲池中。

6.  根据权利要求5所述的方法,其中,该方法包括:
在插入新事件时,检查所述空闲池;
所述空闲池为空时,申请内存并根据所述新事件的触发周期确定所述新事件所对应的目标表项,将所述新事件插入到所述目标表项所对应的线性链表中;
所述空闲池不为空时,从所述空闲池的头指针处取出一个空闲事件节点存储所述新事件。

7.  根据权利要求5或6所述的方法,其中,该方法包括:
当前时钟周期的模拟结束后,将所述当前时钟周期对应表项所对应的线性链表从头部摘除并链入所述空闲池的尾部,并将所述当前时钟周期对应表项的头指 针和尾指针置为空。

8.  一种微处理器的软件模拟器的事件队列的管理系统,包括:
存储单元,设置为将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应一个所述软件模拟器的一个时钟周期;
对应单元,设置为将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件;
指向单元,设置为将全局周期指针指向当前时钟周期所对应的表项;以及,当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。

9.  根据权利要求8所述的系统,其中,该系统包括:
剔除单元,设置将从所述事件队列中剔除的事件节点存储在预设的空闲池中。

10.  根据权利要求8所述的系统,其中:
所述数组设置单元设置的所述循环数组的大小,根据所述软件模拟器模拟过程中生成的事件的最大触发延迟时钟周期确定。

说明书

说明书一种微处理器的软件模拟器的事件队列的管理方法及系统
技术领域
本发明涉及微处理器的模拟技术,尤其涉及一种微处理器的软件模拟器的事件队列的管理方法及系统。
背景技术
在进行微处理器设计时,通常都要先使用软件模拟器来对各种备选方案进行评估。通过对各个部件进行软件建模,精确地模拟微处理器的功能和时序,可以较快地发现设计中的缺陷和谬误。
在模拟过程中,那些需要精确模拟时序的部件将产生大量的、具有一定触发延迟的操作。例如,访存部件频繁地发出数据缓存访问的操作,该操作发出后,经过2个周期到达数据缓存控制器。如果要访问的数据在数据缓存中,则该数据将在12个时钟周期后返回给访存部件。
为简化描述,此类操作都可以使用一个四元组O<P,T,L,C>表示。该四元组的意义为:类型为T的操作请求由部件P产生,经过L个周期后,部件C将收到该操作请求并进行相应的处理。
为方便处理,可以将上述四元组进行了一下变形,变换成E<P,T,A,C>。新四元组的意义如下:类型为T的操作请求由部件P产生,在时钟周期A中,部件C将收到该操作请求并进行处理。可以将这个四元组E称为一个“事件”。
模拟过程中生成的大量四元组事件都被存储到一个或者多个事件队列中。
模拟器在每个周期模拟过程开始时,首先检查事件队列,通过比较当前时钟周期数和事件队列中四元组事件中的时钟周期A,找出所有应在本周期内触发的事件,并调用该事件的部件C进行相应的处理。
模拟过程中产生的四元组事件E的数量,与模拟规模及对部件时序模拟精度要求有关。当进行大规模模拟(例如片上多核模拟),并对各部件时序精度要求较高时,每周期产生和消亡的事件数量将十分惊人。
要在一个庞大的事件队列中快速找出所有应在某个周期内触发的事件并非易事。若事件队列实现方法效率不高,那么大量的模拟时间将会被耗费在对事件 队列的处理上,这将严重影响软件模拟器的运行效率。
现有技术中,事件队列的实现方式较多。
第一种事件队列的实现方式,是使用数组作为事件队列。对于事件插入方法,是将新生成的事件E<P,T,A,C>直接添加到数组尾部。对于事件查找方法,是从事件队列头开始,依次向后查找整个数组,找出并触发所有应在本周期触发的事件。而对于事件剔除方法,则是将已经触发过的事件状态置为“无效”。
但是,使用数组作为事件队列的方式,存在着一些不足。
第一,事件队列大小无法预先得知。如果预先开辟的数组过大,则比较浪费内存资源;如果预先开辟的数组过小,则当产生的事件数量超过事件队列最大容量时,模拟过程将停顿。
第二:查询效率较低。当数组十分巨大时,从数组头开始向后依次找出并触发应该在本周期内触发的事件,这种查询的效率是十分低下的。针对这种情况,一种改进方法是定时清理数组事件,将某些已经发生过的事件从数组中剔除,只保留数组中的有效事件,这样可以压缩数组长度,但频繁的数组移动将带来较大的系统开销。
第二种事件队列的实现方式,是使用线性链表作为事件队列。对于事件插入方法,是新生成的事件E<P,T,A,C>直接被插入到线性链表尾部。对于事件查找方法,是从线性链表头开始依次向后查找整个链表,找出并触发所有应该在本周期内触发的事件。而对于事件剔除方法,则是将已经触发的事件从线性链表中剔除。
但是,使用线性链表作为事件队列的方式,也存在着一些不足。
第一:对于事件剔除而言,由于每次查到一个事件时,这种方法就将该事件从链表中剔除,从而线性链表长度小于第一种方法中的数组长度,从这个角度看本方法的查找效率高于前述使用数组作为事件队列的实现方式。但是,当链表长度较大时,查询效率仍然很低。
第二:每次向线性链表插入事件节点时,需临时向系统申请内存空间;每次从线性链表中剔除事件时,也需要释放该事件节点占用的内存空间。而内存空间的申请与释放都由操作系统控制,需要进行系统调用和一系列的内核处理过程才能完成,这个过程十分耗时。由于在模拟过程中每周期都产生和消亡大量事件,因此,这种频繁的申请/释放内存的操作将严重影响模拟器运行效率。
第三种事件队列的实现方式,是使用堆或者二叉树作为事件队列。
虽然堆排序或者二叉树排序算法的性能要优于前面两种方法的查找性能,但 是,堆或者二叉树这种结构并不适合用于实现事件队列。这主要是因为每个时钟周期内都会有大量的事件插入事件队列,同时又有大量的事件从事件队列中被剔除。在每次有新事件插入或剔除时,都需要对堆或者二叉树进行调整,以保证堆或者二叉树的特性,这就会严重影响模拟器的运行效率。这种频繁调整的代价,要远远大于其高性能搜索算法所带来的好处。因此,虽然可以使用,但使用堆或者二叉树来实现事件队列的应用并不普遍。
发明内容
本发明所要解决的技术问题是为了克服现有技术中微处理器的软件模拟器的事件队列的效率低下的不足。
为了解决上述技术问题,本发明的实施例首先提供了一种微处理器的软件模拟器的事件队列的管理方法,包括:将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应所述软件模拟器的一个时钟周期;将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件;将全局周期指针指向当前时钟周期所对应的表项;当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。
优选地,根据所述软件模拟器模拟过程中生成的事件的最大触发延迟时钟周期确定所述循环数组的大小。
优选地,该方法包括:在查找事件时,检测所述全局周期指针指向的当前表项;若所述全局周期指针所指向的当前表项内的头指针不为空,则按序触发头指针指向的线性链表中的所有事件。
优选地,该方法包括:在插入新事件时,根据所述新事件的触发周期确定所述新事件所对应的目标表项;将所述新事件插入到所述目标表项所对应的线性链表中。
优选地,该方法包括:从所述事件队列中剔除的事件节点存储在预设的空闲池中。
优选地,该方法包括:在插入新事件时,检查所述空闲池;所述空闲池为空时,申请内存并根据所述新事件的触发周期确定所述新事件所对应的目标表项,将所述新事件插入到所述目标表项所对应的线性链表中;所述空闲池不为空时, 从所述空闲池的头指针处取出一个空闲事件节点存储所述新事件。
优选地,该方法包括:当前时钟周期的模拟结束后,将所述当前时钟周期对应表项所对应的线性链表从头部摘除并链入所述空闲池的尾部,并将所述当前时钟周期对应表项的头指针和尾指针置为空。
本发明的实施例还提供了一种微处理器的软件模拟器的事件队列的管理系统,包括:存储单元,设置为将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应一个所述软件模拟器的一个时钟周期;对应单元,设置为将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件;指向单元,设置为将全局周期指针指向当前时钟周期所对应的表项;以及,当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。
优选地,该系统包括:剔除单元,设置将从所述事件队列中剔除的事件节点存储在预设的空闲池中。
优选地,所述数组设置单元设置的所述循环数组的大小,根据所述软件模拟器模拟过程中生成的事件的最大触发延迟时钟周期确定。
与现有技术相比,本发明的微处理器的软件模拟器的事件队列实现方法及系统的实施例,在事件插入、事件查询和事件剔除方面都具有很高的效率,能够有效减少用于处理事件队列所花费的时间。而且,模拟的微处理器的规模大小和时序精度的要求高低,均不影响模拟的速度和效率。
本发明的实施例在使用时查询效率高,不需要特殊的查找操作就可以找出一个周期内所有应该被触发的事件。本发明的实施例在使用时插入效率高只需要按照索引进行线性链表的插入操作即可完成事件插入。本发明的实施例在使用时系统开销小,不需要频繁地申请/释放内存空间,能显著加快模拟速度。本发明的实施例在使用时采用事件延迟剔除技术,在每个模拟周期结束后,一次性剔除本周期整个事件线性链表,相比每次剔除一个事件而言,耗时更少,效率更高。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明的技术方案而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构和/或流程来实现和获得。
附图说明
附图用来提供对本发明的技术方案或现有技术的进一步理解,并且构成说明书的一部分。其中,表达本发明实施例的附图与本发明的实施例一起用于解释本发明的技术方案,但并不构成对本发明技术方案的限制。
图1为本发明的微处理器的软件模拟器的事件队列的管理方法的流程示意图。
图2为本发明的实施例中的循环数组的原理示意图。
图3为本发明的实施例中的空闲池的原理示意图。
图4为本发明的微处理器的软件模拟器的事件队列的管理系统的构造示意图。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成相应技术效果的实现过程能充分理解并据以实施。本发明实施例以及实施例中的各个特征,在不相冲突前提下可以相互结合,所形成的技术方案均在本发明的保护范围之内。
附图所示出的本发明的实施例的方法所包含的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然本发明的实施例的方法在流程图中示出了逻辑顺序,但是在某些情况下,本发明的实施例的方法也可以以不同于附图所示的顺序执行所示出或描述的步骤。
如图1所示,本发明的微处理器的软件模拟器的事件队列的管理方法,主要包括如下步骤。
步骤S110,将事件队列存储在循环数组中。该循环数组中包含多个表项,每个表项对应软件模拟器的一个的时钟周期。
步骤S120,将该循环数组中的每个表项与预设的线性链表一一对应。每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素。每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件。
步骤S130,将全局周期指针指向当前时钟周期所对应的表项。
步骤S140,当一个时钟周期模拟结束后,将全局周期指针前进一个表项。
如图2所示,事件队列采用循环数组进行存储。本发明的实施例,根据软件 模拟器模拟过程中所生成的事件的最大触发延迟时钟周期,来确定该循环数组的大小。
假设模拟过程中生成的事件的最大触发延迟为m个时钟周期,则该数组大小设为m+1;m为大于等于1的整数。该数组中每一个表项对应软件模拟器的一个时钟周期,例如:代表第n个时钟周期的表项索引index=(n-1)mod(m+1),n大于等于1且小于等于m。
每个表项还与一个线性链表相关联,该线性链表用于存储应该在该表项所对应的时钟周期内触发的事件。每个表项内还包含一个头指针(head)和尾指针(tail),其中头指针指向该线性链表的头元素,尾指针指向该线性链表的尾元素。
采用全局周期指针指向代表当前模拟周期的事件队列表项。当一个时钟周期模拟结束后,全局周期指针前进一个表项,指向代表下个周期的表项。
本发明的实施例采用如图3所示的空闲池,来存储从事件队列中剔除下来的事件节点。当空闲池不空时,新生成的事件可以利用空闲池中的空闲事件节点而不必向系统重新申请分配内存。
本发明的实施例在系统初始化时,分配大小为m+1的事件队列数组,m为模拟过程中生成的事件的最大触发延迟的时钟周期的数量。将全局周期指针指向事件队列的第一个表项。将空闲池头指针置为空。
对于事件查找,当模拟开始时(模拟周期为n),首先检测全局周期指针指向的事件队列表项。若全局周期指针所指向的当前表项内的头指针不为空,则按序触发头指针所指向的线性链表中的所有事件。若头指针为空,则表明该周期内没有任何要激活的事件。
对于事件插入,若模拟周期n内生成了新事件E<P,T,A,C>,则首先根据事件E的时钟周期A计算出该新事件应该插入到事件队列中哪一个表项所指向的线性链表中。
事件队列表项索引index的计算根据如下表达式进行:
index=(A-1)mod(m+1)  式(1)
然后将新事件E插入到所计算出的表项的头指针所指向的线性链表中。
插入时,首先检查空闲池。若空闲池为空,则向系统申请分配内存,存入新事件,然后通过该所计算出的表项的尾指针将该新事件从链表尾部插入。若空闲池不为空,则可以直接从空闲池头指针处取出一个空闲事件节点来存储新事件,通过所计算出的表项的尾指针将新事件从链表尾部插入。
对于事件剔除,当时钟周期n的模拟工作全部结束后,所有应在周期n内应 触发的事件都已经被处理完毕,此时可以将该当前表项头指针指向的线性链表从头部直接摘除下来,链入空闲池的尾部。然后设置该表项的头尾指针为NULL(空)。这种一次剔除整个链表的方法明显比每触发一个事件后就立即剔除出去更加高效,可以减少绝大部分指针操作,显著提高了模拟器的运行效率。
如图4所示,本发明的微处理器的软件模拟器的事件队列的管理系统,主要包括有存储单元410、对应单元420以及指向单元430。
存储单元410,设置为将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应一个所述软件模拟器的一个时钟周期;
对应单元420,与存储单元410相连,设置为将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件;
指向单元430,与存储单元410及对应单元420相连,设置为将全局周期指针指向当前时钟周期所对应的表项;以及,当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。
该数组设置单元设置的循环数组的大小,主要是根据软件模拟器模拟过程中生成的事件的最大触发延迟时钟周期来确定。假设模拟过程中生成的事件的最大触发延迟为m个时钟周期,则该数组大小设为m+1;m为大于等于1的整数。
本发明的微处理器的软件模拟器的事件队列的管理系统,还可以包括查找单元,设置为检测全局周期指针指向的当前表项。如果全局周期指针所指向的当前表项内的头指针不为空,则按序触发头指针指向的线性链表中的所有事件。
本发明的微处理器的软件模拟器的事件队列的管理系统,还可以包括用于插入新事件的插入单元。插入单元在插入新事件时,根据新事件的触发周期确定该新事件所对应的目标表项。然后将该新事件插入到该目标表项所对应的线性链表中。
如图4所示,该系统还可以包括剔除单元440,与存储单元410相连,设置将从事件队列中剔除的事件节点存储在预设的空闲池中。
在有空闲池的情况下,插入单元在插入新事件时,首先检查空闲池。在空闲池为空时,向系统申请内存并根据新事件的触发周期来确定新事件所对应的目标表项,将该新事件插入到目标表项所对应的线性链表中。如果空闲池不为空,则从空闲池的头指针处取出一个空闲事件节点来存储该新事件。
当前时钟周期的模拟结束后,该剔除单元将当前时钟周期对应表项所对应的线性链表从头部摘除并链入所述空闲池的尾部,并将当前时钟周期对应表项的头指针和尾指针置为空。
本发明的实施例使用循环数组作为事件队列,根据模拟过程中所有事件的最大触发延迟周期m设置数组大小设为m+1,可以保证模拟过程中生成的所有事件都能够得到处理。因此,本发明的事件队列大小可以预先确定。克服了现有技术中事件队列无法预知大小的不足。
本发明的实施例对于新生成的事件,按照其触发延迟将其插入到相应表项的线性链表中。在每个周期开始,只需按序激活全局周期指针指向的事件队列表项所指向的线性链表就可以了,不需要查找所有线性链表,显著提高了查询效率。
本发明的实施例采用事件延迟剔除技术,大大提高了剔除效率。具体地,在每个模拟周期结束后,一次性剔除本周期整个事件线性链表,大大提高了事件剔除的效率。
本发明的实施例采用空闲池缓存曾经分配过的事件节点,不需要频繁地申请/释放内存,大大减少了申请分配/释放内存块的操作,可以显著地提高模拟速度。
本领域的技术人员应该明白,上述的本发明实施例所提供的系统的各组成部分,以及方法中的各步骤,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上。可选地,它们可以用计算装置可执行的程序代码来实现。从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明技术方案而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

一种微处理器的软件模拟器的事件队列的管理方法及系统.pdf_第1页
第1页 / 共11页
一种微处理器的软件模拟器的事件队列的管理方法及系统.pdf_第2页
第2页 / 共11页
一种微处理器的软件模拟器的事件队列的管理方法及系统.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《一种微处理器的软件模拟器的事件队列的管理方法及系统.pdf》由会员分享,可在线阅读,更多相关《一种微处理器的软件模拟器的事件队列的管理方法及系统.pdf(11页珍藏版)》请在专利查询网上搜索。

本发明公开了一种微处理器的软件模拟器的事件队列的管理方法及系统,克服现有技术中微处理器的软件模拟器的事件队列的效率低下的不足。该方法包括:将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应所述软件模拟器的一个时钟周期;将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1