检查高速缓存是否命中的方法与流程

文档序号:12597121阅读:3027来源:国知局
检查高速缓存是否命中的方法与流程

本发明涉及验证平台中模拟被测设计行为的方法,特别是涉及一种检查高速缓存是否命中的方法。



背景技术:

当中央处理器(CPU)处理数据时,它会先到高速缓存中去寻找,如果数据因之前的操作已经读取而被暂存其中,称为命中,就不需要再从主存储器中读取数据,而改从高速缓存中取得数据。如未命中,则需要将数据更新进高速缓存当中。高速缓存中没有空的位置时,便淘汰其中的某一组数据以腾出位置存放新调入的数据,这称为替换。确定替换的规则叫替换算法,常用的替换算法有:最近最少使用算法(LRU)、先进先出法(FIFO)和随机法(RAND)等。

由于中央处理器的运行速度一般比主内存的读取速度快,访问主存储器所需要的时间为数个时钟周期。提供高速缓存的目的是为了让数据访问的速度适应中央处理器的处理速度。采用高速缓存对于芯片提升读写速度有着重要意义。

在验证含有高速缓存的设计当中,发送端和检查端都需要一个相对于高速缓存的数字设计部分的参考模型。发送端高速缓存的参考模型主要保证了发出数据的可控性,即发送数据大部分处于命中状态。检查端需要一 个参考模型来验证高速缓存的数字设计是否符合预期。由于激励采用随机方式发出,因此参考模型只需精确到页即可。而检查端需要定位到每个字。如有特殊需求,也可将发送端的参考模型替换为定位到字的模型。

传统验证方法或采用定宽数组的方式,或采用单一队列的方式模拟高速缓存的行为。由于替换算法较为复杂,而定宽数组和单一队列的操作又有一定限制,采用传统方法不仅流程复杂,往往难以理解,不利于代码的升级和维护。



技术实现要素:

本发明要解决的技术问题是提供一种检查高速缓存是否命中的方法,可以快速准确的判断出一次地址操作是否命中高速缓存,流程简单可靠,调用方便。

为解决上述技术问题,本发明的检查高速缓存是否命中的方法,包括如下步骤:

步骤1,定义一个页地址队列,用于记录高速缓存的页信息的命中和替换;定义一个完整地址队列,用于记录每一个进入高速缓存的地址;

步骤2,判断页地址队列是否为空,如果为空,则直接将输入地址的页地址部分压入页地址队列,将输入地址压入完整地址队列;如果不为空,则执行步骤3;

步骤3,检索页地址队列,将其与输入地址的页地址部分对比,判断是否存在相同地址;如果存在,则说明页地址命中,执行步骤5;如不存在, 则执行步骤4;

步骤4,检查页地址队列中储存的地址是否已经达到了高速缓存所能容纳的极限;如果未达到极限,则直接将输入地址的页地址部分压入页地址队列,将输入地址压入完整地址队列;如果达到极限,则先根据当前设计采用的替换算法,删除页地址队列中的一个页地址数据,同时采用查找的方式,在完整地址队列中找出并删除所有符合已删除的页地址的完整地址,然后再将新的输入地址的页地址部分压入页地址队列,将输入地址压入完整地址队列;

步骤5,根据替换算法的不同,改变当前命中的页地址在页地址队列中的位置,然后执行步骤6;

步骤6,检索完整地址队列,将其与输入地址对比,判断是否存在相同地址;如果存在,则说明完整地址命中,输出命中标志信号;如不存在,将输入地址压入完整地址队列。

本发明采用双队列定位查找的方法,根据输入地址判断是否命中,并输出命中标志信号。页地址队列需要处理页地址信息在高速缓存中的位置,因此其中存储数据的顺序有一定的要求,而完整地址队列仅需记录每个进入地址,其中存储的数据顺序并不需要关心。这样只需处理一个页地址队列的存储顺序问题,这比仅采用单一队列存储或者采用定宽数组的方式要简单的多。既利用了队列可以在任何地方增加或删除元素的优点,也解决了单一队列对于单个字地址处理困难的问题。本发明可以快速准确的判断出一次地址操作是否命中高速缓存,流程简单可靠,调用方便。

本发明适用于包含高速缓存功能的验证环境,特别是具有逻辑功能验证的发送端或者接收端。本发明可以减少验证环境开发时间,提升验证代码的可读性,提高验证环境的可维护性,保证验证结果准确。

附图说明

下面结合附图与具体实施方式对本发明作进一步详细的说明:

图1是所述检查高速缓存是否命中的方法一实施例流程图;

图2是页地址队列和完整地址队列为空时,输入地址被压入队列的示意图;

图3是页地址队列未满且无页地址命中时,输入地址被压入队列的示意图(一);

图4是页地址队列未满且页地址命中,完整地址未命中时,输入地址被压入队列的示意图;

图5是页地址队列未满且无页地址命中时,输入地址被压入队列的示意图(二);

图6是页地址队列未满且页地址命中,完整地址命中时,输入地址被压入队列的示意图;

图7是页地址队列满且无页地址命中,完整地址未命中时,输入地址被压入队列的示意图。

具体实施方式

结合图1所示,所述检查高速缓存是否命中的方法,包括如下步骤。

步骤1,定义一个页地址队列,用于记录高速缓存的页信息的命中和替 换;定义一个完整地址队列,用于记录每一个进入高速缓存的地址。其中页地址队列深度与高速缓存的深度一致,完整地址队列深度不作限制。

步骤2,判断页地址队列是否为空,如果为空,则直接将输入地址的页地址部分压入页地址队列,将输入地址压入完整地址队列;如果不为空,则执行步骤3。

步骤3,检索页地址队列,将其与输入地址的页地址部分对比,判断是否存在相同地址;如果存在,则说明页地址命中,执行步骤5;如不存在,则执行步骤4。

步骤4,检查页地址队列中储存的地址是否已经达到了高速缓存所能容纳的极限;如果未达到极限,则直接将输入地址的页地址部分压入页地址队列,将输入地址压入完整地址队列;如果达到极限,则先根据当前设计采用的替换算法,删除页地址队列中的一个页地址数据,同时采用查找的方式,在完整地址队列中找出并删除所有符合已删除的页地址的完整地址,然后再将新的输入地址的页地址部分压入页地址队列,将输入地址压入完整地址队列。

步骤5,根据替换算法的不同,改变当前命中的页地址在页地址队列中的位置,然后执行步骤6。

步骤6,检索完整地址队列,将其与输入地址对比,判断是否存在相同地址;如果存在,则说明完整地址命中,输出命中标志信号;如不存在,将输入地址压入完整地址队列。也就是说,输入完整地址即可判断出该地址是否命中高速缓存,并给出命中标志信号。

高速缓存的深度和宽度可以参数化,这样所述检查高速缓存是否命中的方法可以适用于不同大小的高速缓存。

以下是一具体实施例:

替换算法采用LRU,将最近一段时间内最少被访问过的地址替换掉。

在测试环境顶层定义高速缓存的深度为64个页。

定义两个队列:一个存储页地址,深度与高速缓存的深度一致,为64个页;一个存储完整地址,深度不作限制。

定义输入地址adr[31:0],其中adr[15:8]表示页地址。

由于替换算法采用了LRU,命中后需要将命中地址在高速缓存中的位置更新,使之处于最新状态,这样不容易被后续命中的地址挤掉。

输入第一个地址adr1=32’hFFFF_FFFF,adr1[15:8]=8’hFF表示页地址,此时页地址队列和完整地址队列均为空,因此直接将8’hFF压入页地址队列,将32’hFFFF_FFFF压入完整地址队列,如图2所示。

输入第二个地址adr2=32’hFFFF_FCFF,adr2[15:8]=8’hFC表示页地址,此时页地址队列未满,且页地址队列中无重复数据,因此直接将8’hFC压入页地址队列,将32’hFFFF_FCFF压入完整地址队列,如图3所示。

输入第三个地址adr3=32’hFFFF_FFFC,adr3[15:8]=8’hFF表示页地址,此时页地址队列未满,但页地址队列中有重复数据8’hFF。完整地址队列中无重复数据。这表示页地址命中,而完整地址未命中。根据LRU算法,将8’hFF更新至队尾。然后将32’hFFFF_FFFC压入完整地址队列,如图4所示。

上述代码描述了更新页地址队列的实施过程。

输入第四个地址adr4=32’hFFFF_FDFF,adr4[15:8]=8’hFD表示页地址,此时页地址队列未满,且页地址队列中无重复数据,因此直接将8’hFD压入页地址队列,将32’hFFFF_FDFF压入完整地址队列,如图5所示。

输入第五个地址adr5=32’hFFFF_FFFF,adr5[15:8]=8’hFF表示页地址,此时页地址队列未满,但页地址队列中有重复数据8’hFF。完整地址队列中有重复数据。这表示页地址命中,而完整地址命中,输出命中标志信号。根据LRU算法,将8’hFF更新至队尾,如图6所示。

输入第n个地址adrn=32’h1111_1111,adrn[15:8]=8’h11表示页地址,此时页地址队列已满,且页地址队列中无重复数据,根据LRU算法,将最旧页地址8’hFC踢出页地址队列,在完整地址队列中查找并踢出符合最旧页地址8’hFC的数据32’hFFFF_FCFF和32’h1234_FC56。最后将8’h11压入页地址队列,将32’h1111_1111压入完整地址队列,如图7所示。

上述代码描述了更新页地址队列和完整地址队列的实施过程。

本发明采用双队列定位查找的方法,可精确到字。

以上通过具体实施方式对本发明进行了详细的说明,但这些并非构成对本发明的限制。在不脱离本发明原理的情况下,本领域的技术人员还可做出许多变形和改进,这些也应视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1