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

文档序号:8339357阅读:来源:国知局
应表项所代表的时钟周期内触发的事件;指向单元,设置为将全局周期指针指向当前时钟周期所对应的表项;以及,当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。
[0030]优选地,该系统包括:剔除单元,设置将从所述事件队列中剔除的事件节点存储在预设的空闲池中。
[0031]优选地,所述数组设置单元设置的所述循环数组的大小,根据所述软件模拟器模拟过程中生成的事件的最大触发延迟时钟周期确定。
[0032]与现有技术相比,本发明的微处理器的软件模拟器的事件队列实现方法及系统的实施例,在事件插入、事件查询和事件剔除方面都具有很高的效率,能够有效减少用于处理事件队列所花费的时间。而且,模拟的微处理器的规模大小和时序精度的要求高低,均不影响模拟的速度和效率。
[0033]本发明的实施例在使用时查询效率高,不需要特殊的查找操作就可以找出一个周期内所有应该被触发的事件。本发明的实施例在使用时插入效率高只需要按照索引进行线性链表的插入操作即可完成事件插入。本发明的实施例在使用时系统开销小,不需要频繁地申请/释放内存空间,能显著加快模拟速度。本发明的实施例在使用时采用事件延迟剔除技术,在每个模拟周期结束后,一次性剔除本周期整个事件线性链表,相比每次剔除一个事件而言,耗时更少,效率更高。
[0034]本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明的技术方案而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构和/或流程来实现和获得。
【附图说明】
[0035]附图用来提供对本发明的技术方案或现有技术的进一步理解,并且构成说明书的一部分。其中,表达本发明实施例的附图与本发明的实施例一起用于解释本发明的技术方案,但并不构成对本发明技术方案的限制。
[0036]图1为本发明的微处理器的软件模拟器的事件队列的管理方法的流程示意图。
[0037]图2为本发明的实施例中的循环数组的原理示意图。
[0038]图3为本发明的实施例中的空闲池的原理示意图。
[0039]图4为本发明的微处理器的软件模拟器的事件队列的管理系统的构造示意图。
【具体实施方式】
[0040]以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成相应技术效果的实现过程能充分理解并据以实施。本发明实施例以及实施例中的各个特征,在不相冲突前提下可以相互结合,所形成的技术方案均在本发明的保护范围之内。
[0041]附图所示出的本发明的实施例的方法所包含的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然本发明的实施例的方法在流程图中示出了逻辑顺序,但是在某些情况下,本发明的实施例的方法也可以以不同于附图所示的顺序执行所示出或描述的步骤。
[0042]如图1所示,本发明的微处理器的软件模拟器的事件队列的管理方法,主要包括如下步骤。
[0043]步骤S110,将事件队列存储在循环数组中。该循环数组中包含多个表项,每个表项对应软件模拟器的一个的时钟周期。
[0044]步骤S120,将该循环数组中的每个表项与预设的线性链表一一对应。每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素。每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件。
[0045]步骤S130,将全局周期指针指向当前时钟周期所对应的表项。
[0046]步骤S140,当一个时钟周期模拟结束后,将全局周期指针前进一个表项。
[0047]如图2所示,事件队列采用循环数组进行存储。本发明的实施例,根据软件模拟器模拟过程中所生成的事件的最大触发延迟时钟周期,来确定该循环数组的大小。
[0048]假设模拟过程中生成的事件的最大触发延迟为m个时钟周期,则该数组大小设为m+1 ;m为大于等于I的整数。该数组中每一个表项对应软件模拟器的一个时钟周期,例如:代表第η个时钟周期的表项索引index = (n-l)mod(m+l),η大于等于I且小于等于m。
[0049]每个表项还与一个线性链表相关联,该线性链表用于存储应该在该表项所对应的时钟周期内触发的事件。每个表项内还包含一个头指针(head)和尾指针(tail),其中头指针指向该线性链表的头元素,尾指针指向该线性链表的尾元素。
[0050]采用全局周期指针指向代表当前模拟周期的事件队列表项。当一个时钟周期模拟结束后,全局周期指针前进一个表项,指向代表下个周期的表项。
[0051]本发明的实施例采用如图3所示的空闲池,来存储从事件队列中剔除下来的事件节点。当空闲池不空时,新生成的事件可以利用空闲池中的空闲事件节点而不必向系统重新申请分配内存。
[0052]本发明的实施例在系统初始化时,分配大小为m+1的事件队列数组,m为模拟过程中生成的事件的最大触发延迟的时钟周期的数量。将全局周期指针指向事件队列的第一个表项。将空闲池头指针置为空。
[0053]对于事件查找,当模拟开始时(模拟周期为η),首先检测全局周期指针指向的事件队列表项。若全局周期指针所指向的当前表项内的头指针不为空,则按序触发头指针所指向的线性链表中的所有事件。若头指针为空,则表明该周期内没有任何要激活的事件。
[0054]对于事件插入,若模拟周期η内生成了新事件E〈P,T, A, C〉,则首先根据事件E的时钟周期A计算出该新事件应该插入到事件队列中哪一个表项所指向的线性链表中。
[0055]事件队列表项索引index的计算根据如下表达式进行:
[0056]index = (A-1) mod (m+1)式(I)
[0057]然后将新事件E插入到所计算出的表项的头指针所指向的线性链表中。
[0058]插入时,首先检查空闲池。若空闲池为空,则向系统申请分配内存,存入新事件,然后通过该所计算出的表项的尾指针将该新事件从链表尾部插入。若空闲池不为空,则可以直接从空闲池头指针处取出一个空闲事件节点来存储新事件,通过所计算出的表项的尾指针将新事件从链表尾部插入。
[0059]对于事件剔除,当时钟周期η的模拟工作全部结束后,所有应在周期η内应触发的事件都已经被处理完毕,此时可以将该当前表项头指针指向的线性链表从头部直接摘除下来,链入空闲池的尾部。然后设置该表项的头尾指针为NULL(空)。这种一次剔除整个链表的方法明显比每触发一个事件后就立即剔除出去更加高效,可以减少绝大部分指针操作,显著提高了模拟器的运行效率。
[0060]如图4所示,本发明的微处理器的软件模拟器的事件队列的管理系统,主要包括有存储单元410、对应单元420以及指向单元430。
[0061]存储单元410,设置为将事件队列存储在循环数组中;所述循环数组中包含多个表项,每个表项对应一个所述软件模拟器的一个时钟周期;
[0062]对应单元420,与存储单元410相连,设置为将所述循环数组中的每个表项与预设的线性链表一一对应,每个表项的头指针和尾指针分别指向对应线性链表的头元素和尾元素;每个线性链表存储应该在对应表项所代表的时钟周期内触发的事件;
[0063]指向单元430,与存储单元410及对应单元420相连,设置为将全局周期指针指向当前时钟周期所对应的表项;以及,当一个时钟周期模拟结束后,将所述全局周期指针前进一个表项。
[
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1