当高速 AndesCoreTM 遇上低速 Embedded Flash 的芯片效能提升方法(一)

时间:2013-07-22

  0 引言

  AndesCoreTM除提供AHP,APB,HSMP接口外,亦可通过EILM接口与内存整合,使AndesCoreTM可以不通过AMBA BUS直接通过EILM接口撷取指令。然而,嵌入式闪存(Flash)的执行速度目前并不能赶及AndesCoreTM的工作频率,AndesCoreTM的执行效能将受限于嵌入式闪存的执行速度。此时可通过在AndesCoreTM与闪存间的EILM接口之间加入一个预取模块,减少AndesCoreTM因为闪存指令输出跟不上AndesCoreTM撷取速度,使执行效能下降的影响。文章中所提供的参考预取模块,以数据宽度32字符的闪存为操作对象,预取两道指令(32字符* 2) 提供一预取机制的设计参考。

  本文之目的在提供与介绍一个预取模块的参考设计作为用户设计预取模块的参考。期望能对使用者有所帮助,也希望读者不吝指教提供您宝贵的意见。

  1 Prefetch design界面介绍

  AndesCoreTM通过EILM接口可与外部局部存储器(external local memory)整合,为了通过预取模块根据前一道指令撷取时的地址,以AndesCoreTM将循序撷取指令为预测逻辑来预取下道指令,并储存该指令内容于预取模块,供AndesCoreTM循序撷取指令时使用。我们将原本AndesCoreTM与EILM的整合方式(如图1所示),改为在AndesCoreTM与EILM之间加入预取模块的整合方式(如图2所示)。

  AndesCoreTM通过EILM接口跟预取模块提交请求,预取模块通过eilm_wait告知AndesCoreTM该请求执行是否需要等待,并在对应的时序提供AndesCoreTM欲撷取的指令内容。

  预取模块另有接口与内存(Flash or ROM)整合,通过该接口进行对内存的读取。由于坊间Flashor ROM有各种接口规格,Andes提供的预取参考设计主要专注于提供预取机制的参考设计,内存接口以一虚拟Flash接口为设计对象,用户后续可根据所使用的内存的接口规格进行调整设计。

  1.1区块图

  

  1.2讯号定义

  预取模块的clock与reset,与AndesCoreTM使用相同的clock,reset讯号源作设计,此外有一输入讯号“ratio”用以设定AndesCoreTM与内存工作频率倍率关系。其余讯号,我们分作两个群组“EILM”与“MEM”分别说明。

  

  1.2.1全域讯号

  

  1.2.2. EILM预取模块通过EILM接口与AndesCoreTM整合,依循AndeStar所定义的界面规范与AndesCoreTM沟通。

  以下时序图说明EILM接口Read/Write时的讯号:

  

  1.2.3本次仿真使用的Flash接口的讯号

  预取模块的内存接13以一虚拟闪存接1:3为设计对象。并以此内存的行为模块与预取模块整合后仿真。以下图表介绍此虚拟闪存之讯号与工作之时序。

  2 Prefetch模块的主要功能介绍

  通过预取模块来提升AndesCore EILM撷取指令时的效率,减少AndesCore提出指令请求后,等待读数据自Flash回复有效值的等待时间,来增加AndesCore的执行效能。

  实现方式是以前次AndesCore提出指令请求时,所发出的地址来预测后续AndesCore提出指令请求的地址为递增方式,在AndesCore提出指令请求前,预取模块先将该递增地址的指令内容由闪存取回并储存于预取模块中,当AndesCore提出指令请求的地址确为递增方式,且指令内容已在预取模块中,AndesCore将不需等待,可在下一时序即可自预取模块撷取指令内容。

  若AndesCore提出指令请求的地址为非递增方式,或是AndesCore提出指令请求的频率高过预取模块预取数据的频率,预取模块中已无事先预取的指令内容时,则依然通过等待讯号来延迟AndesCore撷取指令内容。

  

 

  2.1预取功能说明

  图5所示为预取模块自闪存撷取指令内容的功能示意图。

  

  Reset后,预取模块内并无预取的指令内容,于是执行一般常态预取功能,后续当AndesCore提出指令请求为递增方式,若指令已预取完成,则将指令内容传给AndesCore,若指令预取未完成则拉等待讯号来延迟AndesCore撷取指令内容。再以目前请求的地址递增来预取指令。当AndesCore提出指令请求不为递增方式(本文后续称为branch),则等待讯号来延迟AndesCore撷取指令内容,同时预取模块自闪存撷取该指令。当预取模块得到有效数据时,撤回等待讯号,并将有效数据传给AndesCore,再以目前请求的地址递增来预取指令。

  2.2主要程序说明

  以下我们剪辑预取模块RTL程序中几个重要部分来做说明。

  2.2.1 branch判断

  当一个AndesCoreTM请求(instruction fetch)被预取模块接受时,若此时的地址不等于预设的递增地址,表示一个branch发生,预取模块将跟据branch时应有的动作来对闪存读取指令,使用等待讯号来延迟AndesCore,选择read data等。

  相关程序片断:

  

  2.2.2 prefetch判断

  当预取模块处于idle状态时,若需要被预取的指令内容,未储存于预取模块,则进行预取的动作,对闪存读取指令,并存放至预取模块。预取模块预取深度我们设计为2,故我们会预取下一道(1astest_eilm_ifetch_addr_inc 1) 及下下一道(1aste一eilm-ifeteh-addr_inc2)指令。

  相关程序片断:

  

  2.2.3选择执行branch,prefetch或i dle当Branch发生时,不论需要被预取的指令内容是否已储存于预取模块,执行branch时应有的动作。若有预取的动作执行中则放弃。

  当Branch未发生时,需要被预取的指令内容未储存于预取模块,执行预取时应有的动作,若需要被预取的指令内容已储存于预取模块,预取模块处于idle.

  相关程序片断:

  2.2.4选择read data

  若预取模块处在执行branch时应有功能的动作,自闪存于数据有效时撤回等待讯号,选择DO(F1ash read data)作为响应给AndesCore的readdata.若Ande.Core提出指令请求为递增方式,则以预取的指令内容,作为响应给AndesC.re的readdata.

  相关程序片断:

  

  2.2.5储存预取的指令内容

  当进行预取的动作完成时,更新预取的指令内容。

  A_Iatch为进行预取的动作发请求给闪存时所发出的地址,我们以A_latch一个位选择要储存于两个buffer中的哪一个。

  相关程序片断:

  

上一篇:一种应用于PD的高限流保护调节电路
下一篇:HDFS 的多安全级数据销毁机制设计(二)

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料