具有非易失性存储器的集成电路以及用于从所述存储器中取数 据的方法
本发明涉及一种集成电路和一种用于从嵌入在集成电路中的非易失性存储器中取数据的方法。
这种集成电路广泛地用于便携式设备中,例如无线模块、蓝牙设备、移动电话、数字无绳设备或个人数字助理(PDA)。在市场上,尺寸和功耗是决定性因素,因此小面积因素变为首要的要求。因此,就降低的部件数量、低管脚输出数量、可布线性和降低的***成本而言,将非易失性存储器集成在基带***的存储控制器(MCU)的管芯上似乎是最好的选择。
另一方面,其他几个方面有助于改善基带片上***(SOC)的性能/价格比。
尽管或多或少取决于结构特点,但是最有效的特征之一是适当选择的存储层次。通过具有不同的访问能力、不同的成本和尺寸的层次来分配存储器资源将导致***性能的整体改善。
图1示出的是一种典型的所谓哈佛结构(HarvardArchitecture)。桥101通过32位总线104连接于高级***总线(ASB)模块105、存储器管理单元(MMU)106、RAM 107和快闪存储器102。高级RISC机(ARM)103连接于MMU 106。桥101通过16位总线108连接于高级***总线(APB)模块109。例如,这些可以是通用串行总线(USB)模块。很明显,就面积而言主要的成本在于存储层次。因此,严格根据所需的性能而明智地选择存储器的大小和类型是设计成功的基础。
对于需要用于哈佛结构中微控制器的某软件层的应用,只读存储器(ROM)一般用于指令存储器(IMEM),而对于数据存储器而言,易失性存储器,例如DRAM或SRAM是最佳的选择。这样做的优点在于有机会将管芯上的引导码存储空间也作为指令存储器使用,由此节省了空间并提高了***的稳定性和安全性。该优点在于利用基线处理而集成的嵌入式ROM不需要专门的技术选择。
令人遗憾的是,这种解决方法需要稳定的软件,从而只适合于最终生产的情形。另一方面,多数应用需要数个软件改进,这使得IMEM的ROM解决方法不适宜。因此,就尺寸和性能而言,将嵌入式快闪存储器用作IMEM可以说是最佳的解决方案。
在现有技术中,Cáceres等人的美国专利5802554描述了一种方法和***,通过在其中传送数据块的同时提供对快闪存储器提供细微粒直接存取来减少存储器存取等待时间。存储器管理单元控制具有来自于存储层次的第一级或第二级的数据的高速缓存的内容。然而,这种解决方案不能将快闪存储器作为IMEM使用。
本发明的第一个目的是提供一种集成电路和一种用于从嵌入集成电路的非易失性存储器中取出数据的方法,利用该集成电路和方法能够减少未命中率,尤其在那些未命中是可预测的情况中。例如,这种情况是,当代码是规则时,其意味着该代码不包括太多的分支或不会跳转到远程地址,但受限的是指令存储器的吞吐量。
本发明的另一目的是获得一个快速访问时间并且同时减少硅面积。
该问题通过具有根据权利要求1的特征的一种集成电路以及通过从具有根据权利要求9的特征的集成电路所嵌入的非易失性存储器中取出数据的方法来解决。
本发明的优点在于非易失性存储器能够用作指令存储器并且适合于ARM或基于微处理器的子***。
根据本发明的集成电路包括处理器,非易失性存储器以及接口,其中所述接口包括一个第一高速缓冲存储器和一个第二高速缓冲存储器并且将所述处理器连接到所述非易失性存储器。接口从非易失性存储器中获得相应于一个被确定地址的数据并且在中间将它们存储在第一或第二高速缓冲存储器中。取决于被请求数据所存储的位置,接口也从第一高速缓冲存储器或从第二高速缓冲存储器中提供数据给所述处理器并且自动地从所述非易失性存储器(602)中取出相应于下一被确定地址的数据。
一种从根据本发明的集成电路所嵌入的非易失性存储器中取出数据的方法,包括以下步骤:
-根据第一和第二标记地址而在两个高速缓冲存储器中缓冲来自于非易失性存储器的一部分数据。
-如果(通过一个请求装置)从所述非易失性存储器中请求数据,那么相应于所述数据的地址将与所述两个标记地址进行比较。
-如果数据地址等于所述两个标记地址之一,那么所述高速缓冲存储器中的地址被发送到所述请求装置并且更新所述另一高速缓冲存储器中的数据。
-否则同时更新两个高速缓冲存储器并且所请求的数据被发送到所述请求装置。
标示在相关权利要求中的特性和特征而引起本发明进一步的有利发展。
有利地,由于容易的实现方式,接口(605)包含一个发送下一被确定地址的地址预测器(610,611),所述下一被确定地址是随后的地址。
在本发明的第一实施例中,非易失性存储器是闪存。
在本发明的第二实施例中,接口包括一个地址比较器,该地址比较器从处理器中得到地址并且将该地址与相应于存储在第一和第二高速缓冲存储器中的数据的两个地址相比较。
有利地,所述地址比较器是固定地址比较器,当来自于处理器的地址与相应于第一高速缓冲存储器所存储数据的地址相等时,该地址比较器发送第一输出信号,并且当来自于处理器的地址与相应于第二高速缓冲存储器所存储数据的地址相等时,该地址比较器发送第二输出信号。
如果相应于第一和第二高速缓冲存储器中所存储数据的两个地址是第一和第二标记,那么能够以简单的方式来实现地址之间的比较。
当数据没有在高速缓冲存储器中缓冲时,接口直接从非易失性存储器发送数据到处理器也是可能的。这样避免了在高速缓冲存储器中进行所有中间存储。
有利地,第一和第二高速缓冲存储器中每一高速缓冲存储器的数据字宽和非易失性存储器中的数据字宽相同。
本发明又一优点是非易失性存储器能够作为指令存储器而被使用。
在根据本发明的方法实例中,通过对非易失性存储器的预读来实现数据更新。
在根据本发明的方法的另一实例中,利用相应于随后地址的数据来更新所述高速缓冲存储器。
随后,利用11个附图来进一步解释本发明。
图1示出了根据现有技术具有嵌入式闪存的基于高级RISC机的子***;
图2示出了***总线和闪存之间的线高速缓冲存储器,具有闪存字宽大于总线宽度;
图3示出了根据本发明的体系结构的框图;
图4a示出了在读存储器过程中,通过根据本发明的体系结构所执行的操作的第一部分流程图表示;
图4b示出了在读存储器过程中,通过根据本发明的体系结构所执行的操作的第二部分流程图表示;
图5示出了读操作中所包括的主信号的时序图,用于以根据本发明的体系结构来取6个指令而没有跳转;
图6示出了读操作中所包括的主信号的时序图,用于以根据本发明的体系结构来取5个指令而具有一次跳转到邻近字;
图7示出了读操作中所包括的主信号的时序图,用于以根据本发明的体系结构来取5个指令而具有一次跳转到未命中指令;
从技术角度来说,例如由于功耗、漏耗或合格性的原因,以及从结构角度来说,例如由于对***进行编程操作的可测性或接口的原因,在集成有微处理器的相同管芯上集成快闪存储器引发了几个问题。此外,如果快闪存储器将被用作处理器的直接IMEM,则难于获得良好的性能激发。事实上,快闪存储器读存取的绝对速度慢于ROM或RAM的读存取速度。这意味着在本应用的关键数据通路中使用快闪存储器将成为整个***的瓶颈。
如上所述,为了实现所需的处理器性能,嵌入式快闪存储器存取时间必须跟上微处理器时钟速率的步调。如图2所示,解决这个问题的方案是介于快闪存储器202和处理器203之间的存储层次中的另一易失性存储器层。所谓的具有控制器的线高速缓存(line cache)201将快闪存储器202接口到高速微控制器总线***204。尽管这个子***最适合用于管理具有多处理器的复杂***、几个易失性高速缓存,而非快闪存储器和几个时钟域,但是其在只具有快闪存储器作为IMEM、并且高度注重于存储器的读性能的典型单一处理器***中是低效率的。
在图2中是示出的基于典型高级RISC机(ARM)的总线子***(AMBA总线)。在典型应用中,如果***时钟周期短于能实现的快闪存储器周期,那么快闪存储器202就会太慢以至于不能用作IMEM。在这种情况下,可能的解决方案是将接口201与快闪存储器202集成,其用于增加快闪存储器202的数据字宽,并用于提供允许使用中间数据存储寄存器作为高速缓冲存储器的地址标记寄存器。由于在几个主机或ARM 203和时钟域之间需要判优,因此除了快闪存储器202对于数据吞吐量之外,这种***又进一步造成了瓶颈。
当然这种解决方案不会作为存储层次中一个完整的新级别而出现,因为在该情况中,使用非易失性存储器作为IMEM不存在优势。这就是为什么高速缓冲存储器的大小必须尽可能的小,以便在带宽和吞吐量方面上得到最好益处的原因。因为***的性能严格地涉及以最高可能速率从IMEM中取指令的能力,在微处理器和闪存之间的易失性接口中的每次未命中表示性能的泄漏。在典型的高速缓冲存储器***中,未命中的可能性主要分成以下未命中:
1.冷启动,这意味着在操作开始时没有有效数据可利用,
2.跳出高速缓冲存储器空间以及
3.没有足够的高速缓冲存储器容量还用于非常规则且有序的代码。
对于前两种可能性,体系结构方案能够在处理器流水线控制单元中发现。对于第三种情况,其不是与应用程序代码相关的高速缓冲存储器的有效大小的问题。当其为IMEM时,总是由于慢的访问速度和闪存的受限带宽。
如上所述,该类***中的方法是在闪存和处理器之间将一接口与n线易失性寄存器相结合,其中处理器能够在命中(hit)情况中以高速率取指令。在其寄存器中的数据未命中期间,接口在闪存上开始读操作,将处理器保持在等待状态,并且立即用从闪存中可读出的最大量的数据来填充寄存器。在该方式中,假设是非常规则的代码,由微处理器取出的下一指令将连续地位于闪存中,并且在第一次未命中之后,已经存在于线高速缓冲存储器中。一旦处理器已经读取高速缓存中存在的所有字,那么由于线高速缓冲存储器中有限数量的字而将存在确定性的未命中情况。遗憾的是,由于一次可从闪存中读取固定数量的字,因此扩大闪存大小将没有什么帮助。所以在该***中再次存在的主要限制是闪存的带宽。同样,如果在接口中集成有n线高速缓冲存储器,那么n线高速缓冲存储器不能够用比在单一闪存读访问中可获得的最大数据还大的多个数据来填充。
接下来,将描述根据本发明的体系结构。
图3示出了根据本发明的体系结构的框图。
在对闪存602访问的第一未命中周期之后,在高速缓冲存储器601.1和601.2中,某一数量的字或指令是可用的,例如x个字。在这一点上,一旦字可用时就有必要将它们传送给微处理器603,其将摆脱等待状态并且在每一时钟周期上持续查询新的指令。在第一x字可用之后,接口中第一级自动立即重新启动查询闪存602,并且自发地增加地址。
问题在于不知道先验的***时钟频率,因此不能够预测处理器603从线高速缓冲存储器601.1和601.2中取全部x个指令而所需的时间。这样意味着如果所述时间大于或小于闪存602的另一异步存取时间,那么它将不可预测。实际上,如果频率是使得逐字地完全读取高速缓冲存储器601.1和601.2,那么在完成对闪存602所进行的第二次自发存取之前,将出现冲突,因为在闪存602上存在处理器未命中请求加上进行中的读操作。况且,如果第一x字中的代码包括跳转,那么将出现相同的现象,这样使得高速缓冲存储器601.1和601.2的内容无效并且当有自发读取进行中时,再一次出现未命中请求。所以尽管所谓的预测方法是一种用于预期闪存602读操作的成功观点,但是对于接口来说并不能直接地自发启动对闪存602查询下一x字。应该注意控制以改善***,而不增加冲突和读等待时间。首先要考虑读操作应当适合于放弃。在该情况中,实际上能够动态地判定以在闪存602中自发地开始预测的新读取,并且最终放弃它并且在另一地址上重新开始。
在图4a和4b中,给出了由图3所示体系结构所执行操作的流程图。在该实施中假设使用2个线高速缓冲存储器,在下文中即所谓A线高速缓冲存储器601.1和B线性高速缓冲存储器601.2,两者具有与闪存带宽(x字)相同的大小。
接下来将描述根据本发明的算法。
由图3所示的体系结构所执行的操作序列在图4a和图4b中描述。图的两部分通过连接点I,II和III而连接在一起。
1.假设如在普通高速缓冲存储器中来自于处理器603的请求启动,接口605用比较器606将地址与两个标记Tag A和Tag B进行比较。无论何时命中发生在两个线高速缓冲器其中之一,即A线高速缓冲存储器601.1或B线高速缓冲存储器601.2,那么另一线高速缓冲存储器将通过预测读取而被填充。在两个线高速缓冲存储器601.1和601.2都未命中的情况中,这意味着Hit A=0和Hit B=0,在闪存602中用于填充A线高速缓冲存储器601.1的读操作将开始。
2.在从闪存602中读取x字之后,接口605填充并且使A线高速缓冲存储器601.1有效,以及发送由处理器603所请求的字。这就是所谓的直写(write through)方法。
3.同时,接口605开始有关下一个的新的预测读取,这表示用于填充B线高速缓冲存储器601.2的闪存的x+1地址。
4.在预测读取期间,接口605仍旧监控来自于微处理器603的请求。在预测读取结束之前,三种情况都是可能的。
a)处理器603执行内部操作并且停止取其他指令。在该情况中,在预测性读取结束时,B线高速缓冲存储器601.2被填充并且第二标记Tag B变为有效。
b)处理器603从A线高速缓冲存储器601.1请求其他字,这意味着Hit A=1。预测性读取继续进行直到结束,填充B线高速缓冲存储器601.2以及使得第二标记TagB有效。
c)处理器603请求一个字,其不存在于A线高速缓冲存储器601.1中,这意味着Hit A=0。该情况既能对于跳转发生,也能够因为处理器603已经取出A线高速缓冲存储器601.1中所有指令而发生。现在接口605将所请求的地址与第二标记Tag B进行比较,同时预测性读取的地址仍旧运行。现在可能出现两种情况。
c.1)地址不相等。在该情况中,预测不正确。两个线高速缓冲存储器A线601.1和B线601.2无效,并且不得不放弃正在运行的读取操作以便开始具有正确地址的新操作。至于冷启动,新读取的字将填充A线高速缓冲存储器601.1,并且然后将开始一个新预测性读取以填充B线高速缓冲存储器601.2。
c.2)地址相等。因为B线601.2仍未准备好,所以同样如果它不是真正命中,那么预测是正确的。在该情况中,很大的优点在于:在该地址上的读取已经开始,并且这将减少微处理器603的等待状态数量和等待时间。所以预测性读取操作变得高效,并且在其结束时,一个新的预测性读取操作将开始以便填充A线高速缓冲存储器601.1。
通过第一预测器610和第二预测器611来增加地址。第一预测器610使用Tag B并且使其递增某一第一值,例如4。第二预测器使用Tag A并且使其递增第二值,该第二值通常与第一值相同。
在图5,6以及7中,给出了主操作的时序表示。在该实例中,闪存访问时间假设大约为3倍于处理器时钟速度,并且在读模式中闪存的字宽、以及两个线高速缓冲存储器A线601.1和B线601.2假设为4个字。
在图5所示的实例中,在未命中周期之后,用于高速缓冲存储器B线601.2的预测性读取允许在最初的4个字之后的不等待读取。
在图6所示的实例中,在未命中周期和另一命中周期之后,在代码中出现跳转,但是被跳转到的地址等于预测地址,并且已经开始了未命中读取操作。这样允许将等待状态的数量从2减少到1。同样该情况如下:当时钟速度更快,且A线性高速缓冲存储器601.1将以小于对B线性高速缓冲存储器601.2的闪存的预测性存取而完全被读取时,也将是这种情况。
在图7所示的实例中,在未命中周期和另一命中周期之后,在代码中出现跳转,在该情况中,被跳转到的地址不同于预测地址,并且对B线高速缓冲存储器601.2的预测读取不得不放弃,并且新的未命中读取不得不开始。在该情况中,尽管没有通过预测性读取操作的收获,但是控制器也没有添加另外的等待时间。
根据该体系结构的描述,本发明的一些优点很明显。以一种完全透明的方式而没有引入另外的控制逻辑的等待状态,接口605既能减少线高速缓冲存储器601.1和601.2中的未命中率,也能够减少对于所预测未命中的等待状态数量。这些结果能够通过控制作为完全关联高速缓冲存储器而使用的寄存器组的有效硬件算法来实现。
硬件算法中所存在的创新意味着显著地减少由于小高速缓冲存储器容量而引起的未命中率,并且适合于在所有那些具有规则串行代码的应用程序中提高***性能。具有其体系结构实施的本发明也适合于所有的应用,在这些应用中,作为主机的单个微处理器使用慢速存取嵌入式闪存作为具有不同字宽的指令存储器。对于所有这些情况,***每指令周期(CPI)和每秒百万次指令的计算性能变得严格地依赖于存储器吞吐量。所以,接口查询闪存越快,性能就越高。
本发明并不限于具有两个线高速缓冲存储器的接口。其取决于技术目的,能够选择对于高速缓冲存储器的线的数量。有时例如三个或四个线性高速缓冲存储器也是有利的。