当前位置: 首页 > 专利查询>浙江大学专利>正文

一种基于延迟槽补偿的DSP流水线模拟方法技术

技术编号:15791742 阅读:55 留言:0更新日期:2017-07-09 21:54
本发明专利技术公开了一种基于延迟槽补偿的DSP流水线模拟方法,通过按照流水线的效果来模拟,弥补了传统的按照流水线行为来模拟的方法带来的程序执行效率低下的缺点。本发明专利技术的主要思想是:(1)通过剪裁模拟的流水线,加速流水线的流动,从而加快负载程序的执行速度;(2)通过延迟槽补偿机制,在流水线被剪裁的情况下,保证软件流水与硬件流水的效果一致,从而保证程序的正确执行。

【技术实现步骤摘要】
一种基于延迟槽补偿的DSP流水线模拟方法
本专利技术涉及CPU流水线模拟,尤其涉及一种基于延迟槽补偿的DSP流水线模拟方法。
技术介绍
用软件来模拟硬件,可以带来许多好处。比如硬件的生产需要成本,而且硬件易损坏,而软件在被正确开发之后,就几乎不再需要成本。用来模拟计算机的软件,模拟器,其出现给软件的开发、调试带来了巨大的效率提升,比如有了安卓模拟器,当程序员在开发安卓软件的时候,只需在PC上进行程序开发,然后由模拟器来直接运行,而不需要把开发的程序下载到真实的安卓机上。对于计算机来说,核心是处理器(CPU),而CPU的核心可以说是流水线,流水线驱动着CPU的工作。所以模拟器最重要也最困难的任务就是CPU流水线的模拟。对于DSP流水线的模拟,传统上是按行为来模拟流水线,比如DSP流水线有PG、PS、PW、PR、DP、DC、E1、E2……E10等共16个阶段,即一个时钟内流水线做了16种不同的工作,对于硬件来说,这16种工作是并行的,流水线越深,在一定程度上程序就跑得越快,而对软件模拟来说,是串行执行的,流水线越深,需要模拟的行为就越多,效率就越低。
技术实现思路
本专利技术的目的是针对传统的DSP流水线模拟方法的不足,提供一种基于延迟槽补偿的DSP流水线模拟方法。本专利技术的目的是通过以下技术方案来实现的:一种基于延迟槽补偿的DSP流水线模拟方法,具体包括如下步骤:(1)解析目标文件,得到代码段和程序入口点,把代码段加载到模拟内存中。(2)对代码段的指令进行译码,保存译码后的信息,得到PC到译码后的信息的映射关系。(3)初始化延迟槽,初始化PC为程序入口点,清空延迟槽内的所有结点。(4)令CPU向前迭代一个时钟,根据当前的PC值,通过步骤(2)得到的映射关系,得到当前指令对应的译码后的信息,解释执行当前指令,如果该指令在非E1阶段写回,则在延迟槽中新增一个结点,该结点保存了需要写回的目的寄存器、写回的结果值以及写回的时间(CPU时钟数);如果该指令在E1阶段写回,则直接将结果写回寄存器;(5)检查延迟槽内所有结点写回的时间是否与当前时间一致,若结点写回的时间与当前时间保持一致,则将结点记录的信息进行写回,然后移除该结点。(6)循环步骤(4)-步骤(5),直到最后一条指令执行完毕,完成了流水线的模拟。进一步的,在所述步骤(3)中初始化延迟槽,即初始化一个含空结点的链表或哈希表,将其作为指令结果写回的暂存结构。本专利技术的有益效果是,在保证正确性的基础上,大大加快了流水线模拟方法的效率,加快了目标程序执行的速度:(1)剪裁了模拟中的流水线,提高了负载程序的执行速度。(2)通过延迟槽补偿机制,在流水线剪裁的情况下,保证流水线的正确流动。附图说明图1是本专利技术的流程图。具体实施方式下面结合附图对本专利技术做进一步的说明。如图1所示,一种基于延迟槽补偿的DSP流水线模拟方法,具体包括如下步骤:(1)加载目标文件,根据目标文件的格式进行解析,得到程序入口点、代码段等信息。代码段是指令的目标码集合,将代码段加载到模拟内存中。对每条指令目标码进行译码,将译码后的结构保存起来,得到一个指令到指令译码后的一个映射。(2)对代码段的指令进行译码,保存译码后的信息,得到PC到译码后的信息的映射关系。(3)初始化延迟槽,即初始化一个含空结点的链表或哈希表,将其作为指令结果写回的暂存结构,初始化PC为程序入口点,清空延迟槽内的所有结点。(4)令CPU向前迭代一个时钟,根据当前的PC值,通过步骤(2)得到的映射关系,索引得到当前指令对应的译码后的信息,解释执行当前指令,如果该指令在非E1阶段写回,如Branch等指令,则在延迟槽中新增一个结点,该结点保存了需要写回的目的寄存器、写回的结果值以及写回的时间(CPU时钟数);如果该指令在E1阶段写回,如ABS、MV等指令,则直接将结果写回寄存器;(5)检查延迟槽内所有结点写回的时间是否与当前时间一致,若结点写回的时间与当前时间保持一致,则将结点记录的信息进行写回,然后移除该结点。延迟槽可用队列或者哈希表来实现。队列是一个一维的线性结构,是一个链表,只能在表尾插入,任何位置可删除。延迟队列是延迟事件的容器,一个延迟事件包含了要延迟写回的寄存器名,以及要写回的值,以及当前延迟事件在延迟队列中的存活期。延迟队列每个时钟更新一次,每次更新遍历队列中的所有结点一次,并把每个结点的存活期减一,当存活期为零时,把该结点从延迟队列中移除,并把结果写回到寄存器。在指令执行时,根据当前指令的延迟槽个数来确定延迟事件的存活期。哈希表是一个二维数组,它也是每个时钟更新一次,但与延迟列队不同。延迟哈希表相当于是延迟队列的一维数组,是延迟队列的容器。但延迟哈希表里的延迟列队所包含的延迟事件的存活期是相同的,也就是在增加延迟事件时,延迟哈希表根据当前延迟事件的存活期将其加入到具体的某个队列中。比如当前队列为0,延迟为2,则加入到(0+2)%N的队列中,其中N是延迟哈希表的长度,即二维数组的第一维长度。然后不断的对当前队列+1并对N取余即可。当前队列就表示当前存活期为0的延迟队列了。延迟哈希表在性能上要优先延迟队列。(6)循环步骤(4)‐步骤(5),直到最后一条指令执行完毕,完成了流水线的模拟。本文档来自技高网...
一种基于延迟槽补偿的DSP流水线模拟方法

【技术保护点】
一种基于延迟槽补偿的DSP流水线模拟方法,其特征在于,具体包括如下步骤:(1)解析目标文件,得到代码段和程序入口点,把代码段加载到模拟内存中。(2)对代码段的指令进行译码,保存译码后的信息,得到PC到译码后的信息的映射关系。(3)初始化延迟槽,初始化PC为程序入口点,清空延迟槽内的所有结点。(4)令CPU向前迭代一个时钟,根据当前的PC值,通过步骤(2)得到的映射关系,得到当前指令对应的译码后的信息,解释执行当前指令,如果该指令在非E1阶段写回,则在延迟槽中新增一个结点,该结点保存了需要写回的目的寄存器、写回的结果值以及写回的时间(CPU时钟数);如果该指令在E1阶段写回,则直接将结果写回寄存器。(5)检查延迟槽内所有结点写回的时间是否与当前时间一致,若结点写回的时间与当前时间保持一致,则将结点记录的信息进行写回,然后移除该结点。(6)循环步骤(4)‑步骤(5),直到最后一条指令执行完毕,完成了流水线的模拟。

【技术特征摘要】
1.一种基于延迟槽补偿的DSP流水线模拟方法,其特征在于,具体包括如下步骤:(1)解析目标文件,得到代码段和程序入口点,把代码段加载到模拟内存中。(2)对代码段的指令进行译码,保存译码后的信息,得到PC到译码后的信息的映射关系。(3)初始化延迟槽,初始化PC为程序入口点,清空延迟槽内的所有结点。(4)令CPU向前迭代一个时钟,根据当前的PC值,通过步骤(2)得到的映射关系,得到当前指令对应的译码后的信息,解释执行当前指令,如果该指令在非E1阶段写回,则在延迟槽中新增一个结点,该结点保存了需要写...

【专利技术属性】
技术研发人员:卢建鹏
申请(专利权)人:浙江大学
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1