专利名称:一种高效读取的串行Flash缓冲器控制电路的制作方法
技术领域:
本发明涉及于一种闪存控制技术,尤其是一种用于高速读取数据或直接运行代码的串行Flash缓冲器控制电路。
背景技术:
在现有系统设计中,存储控制方案是必须考虑的部分。传统的SRAM技术访问速度可以达到非常高的水平,但问题是数据没办法保存下来,一旦断电所有数据都将丢失。对于一个稳定成熟的系统来说,数据(代码)的保存是必须的。解决这个问题的技术目前基本有两种,一种是ROM技术,一种是Flash技术。ROM能很好的保存代码,而且访问速率也很高,但存在一个缺点,对于那些只能烧写一次的ROM,代码一旦烧写就不能再修改。另一种是 Flash技术,它很好的解决了在线擦写的需求,而且并行Flash的访问速率相当快了,但随着现代芯片工艺尺寸的急速减小,65nm、40nm已经变得很常见了,20nm、15nm也开始面市, 而Flash制造工艺却跟不上芯片小尺寸工艺的需求,导致Flash没法随晶片集成在一起。如果采用片外并行Flash,那将导致芯片必须提供大量用于访问并行Flash的I^ad,对于低功耗小面积的设计,往往其Pad数量会超过芯片所有其它Pad之和,这是系统设计者难以接受的;如果采用片外串行Flash,虽然Pad的数量可以减下来,但访问速率遇到了瓶颈,因为一般这种串行接口(经常是SPI)受其本身协议限制和串行的原因,通讯效率非常低,不适合代码的直接运行。发明内容
本发明的目的是提供一种能够在串行Flash上直接运行代码的高效率的缓存器控制电路,解决传统串行Flash访问效率不高,难以直接运行代码的问题。
本发明提供一种高效读取的串行Flash缓冲器控制电路,包括缓冲器模块,用于 Flash数据的预读取和缓存,所述控制电路还包括地址命中算法逻辑模块,用于判断处理器访问的数据是否存在于缓冲器模块内;数据有效算法逻辑模块,用于判断缓冲器模块中数据是否有效。
更进一步,所述缓冲器控制电路,还有一个用于对串行Flash进行连续读操作的访问控制电路模块。
更进一步,所述缓冲器模块中每个字节单元具有相应的数据有效标志位。
更进一步,所述地址命中算法逻辑模块包括地址实命中算法和地址虚命中算法。
更进一步,所述数据有效算法逻辑模块用于计算数据是否有效,并写入所述数据有效标志位。
更进一步,所述串行Flash缓冲器控制电路所在地址被所述处理器设为Cache工作区。
更进一步,所述缓冲器模块从所述串行Flash连续预读取和缓存数据后,所述处理器向所述串行Flash缓冲器控制电路发起读操作,首先由所述地址命中算法逻辑模块中所述地址实命中算法判断所述读操作需要的数据是否实命中,是则直接从所述缓冲器模块读取数据,完成所述读操作;否则,继续由所述地址虚命中算法判断所述读操作需要的数据是否虚命中,是则等待数据有效后即返回,否则由所述缓冲器模块从所述串行Flash连续读取并返回所述处理器,由所述数据有效算法逻辑模块对所述缓冲器模块中数据进行有效性判断和标记。
采用本发明的技术方案后,解决传统串行Flash访问效率不高,难以直接运行代码的问题,且节省了 RAM和Pad额外的开销,从而降低了芯片设计成本。
图1是本发明实施例的结构示意图;图2是本发明实施例中缓冲器模块结构示意图; 图3是本发明实施例读取操作流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1是本发明实施例的结构示意图,在本实施中,串行Flash缓冲器控制电路包括,地址命中算法逻辑模块101,用于判断处理器访问的数据是否存在于缓冲器模块内; 数据有效算法逻辑模块102,用于判断缓冲器模块中数据是否有效;缓冲器模块103,用于 Flash数据的预读取和缓存;缓冲器模块到串行Flash的访问控制电路104,用于对串行 Flash进行连续读操作。
图2是本发明实施例中缓冲器模块结构示意图,在本实施中,缓冲器模块103除存储数据的字节单元201外,每个字节单元还配备了一个数据有效标志位202。目前的系统大部分的地址空间是按字节来计算的,为了方便起见,这里假设最小系统中所用的处理器使用了大小为N (2的整数次幂)字节一行的Cache,则对应的缓冲器模块大小是N字节,也就最多拥有N个字节地址。最简单的情况是,缓冲器模块103内的N个地址都是连续的,那缓冲器模块103需要记录的初始地址就只有一个;而最极端的情况,缓冲器模块103内的N 个地址都是随机的,这样就需要记录N个初始地址。
地址命中算法逻辑模块包括地址实命中算法和地址虚命中算法两部分,前者是以缓冲器模块的N个字节地址为依据判断当前总线访问索取的数据是否存在于缓冲器模块内的,后者是以已经发起的串行Flash访问操作的地址范围与当前总线访问地址相比较而进行命中判断。地址实命中算法的具体实现是如果总线所发地址与其长度所确定的地址范围(例如按字对齐的总线访问实际有4个连续的字节地址)可以被包括在这N个字节地址内,则称为地址全实命中;如果只有部分被包括,则称为地址部分实命中;如果全部不被包括,则称为地址未实命中。虚命中算法是在地址部分实命中和地址未实命中两种情况下对未实命中现象的补充判断,如果地址全实命中,则不触发虚命中算法,否则启动虚命中算法。虚命中算法的具体实现是如果当前总线访问地址或一个地址范围虽然不能被包括在缓冲器模块内,但如果可以被全部包括在已经发起的串行Flash读操作的地址范围内,则称为地址全虚命中;如果部分被包括,则称为地址部分虚命中;如果全部不被包括,则称为地址未虚命中。
根据地址命中算法逻辑模块给出的判断结果,Flash控制器会以相应的方式工作。 如果把实命中和虚命中判断结果组合起来,当前总线访问地址范围就可以分成实命中部分、虚命中部分和未命中部分。对于实命中部分,则不需要访问串行Flash,数据从缓冲器模块中直接获取,可以达到很快的速度;对于虚命中部分,只需要等待相应数据有效(数据有效算法将在后面详述)后即可返回;对于未命中部分,数据需要从串行Flash中读取,所花费时间跟SPI读操作周期数相关。如果当前总线访问前有已经发起但未完成的串行Flash 访问操作,则根据是否影响当前访问来选择终止与否。终止该串行Flash访问操作的充分条件是,虚命中部分访问已经完成且该操作会覆盖实命中部分缓存区的数据。
由于SPI从串行Flash读取单个字节的数据需要较多的周期数,因此为了提高访问效率,应当尽可能的减少这种只取单个字节的SPI操作。基于这种思路,本串行Flash缓冲器控制电路结合处理器的行缓存工作特性,实现了一个从缓冲器模块到串行Flash的访问控制电路,让每次发起的对串行Flash的操作转变成某一长度的连续读操作,具体长度根据具体需求和当前缓存状况来定。这样通过连续读操作就提高了 SPI访问的平均速率, 同时预取的数据缓存在缓冲器模块内,可以为下次的总线读操作提供无需等待即时返回的数据。特别的,这种已发起的连续预取操作是可以在数据返回阶段被终止的,即,如果当前的预取操作的返回数据阶段还没有完成时,再次发生了地址未命中,则当前预取操作将会被立即终止,并发起访问新地址的下一轮操作。
由于本串行Flash缓冲器控制电路支持预取操作,支持未完成终止,而缓冲器模块容量小且可能有多个缓冲器模块初始地址,这些都影响着缓冲器模块的工作效率,为了保证从缓冲器模块返回的数据是有效的并最大化利用缓冲器模块的缓存功能,设计了数据有效算法逻辑模块。数据有效算法逻辑模块包括三个方面第一,判断当前数据是否准备好。如果某个缓冲器模块单元被判断为地址实命中,则它的数据必须是已经准备好的;如果被判断为虚命中,则总线必须等到它的数据准备好后才能返回,即先要从串行Flash获得数据。
第二,标定无效的缓冲器模块单元。由于未完成终止的发生,缓冲器模块初始地址就会增多,一旦达到实现时设定的最大个数,那下一次未完成终止就会产生无效的缓冲器模块单元,因为它已经不具有能识别的缓冲器模块地址。无效的缓冲器模块单元是下一次数据缓存的首选区域。
第三,为当前Flash数据在缓冲器模块内选择合适的缓存区域。由于每一个从串行Flash读取的数据必须要存放在缓冲器模块内,而缓冲器模块的容量是相当有限的,这就需要在有限的缓冲器模块内寻找最适合替换的单元。
替换的优先方法是首先是寻找无效的缓冲器模块单元,可以提高缓冲器模块的利用效率又不会影响其他数据;其次是寻找初始地址超过Cache容量大小的,如果多个满足则选最远的,因为相距太远最近被访问的概率较小;再次是寻找初始地址小于当前总线访问地址的,如果多个满足则选最远的,因为处理器一般是向前取指令的;最后是寻找最远的,因为相距较远最近被访问的概率较小。在选定了被替换的初始地址后,由于该地址区域通常存在不止一个地址,因此还要选择该区域内离初始地址最远的缓冲单元依次替换。为了标定缓冲器模块中数据是否有效,按字节为单位,给每个字节的数据设置了一个数据有效标志位,即N个字节对应N个有效位。通过数据有效算法,可以避免重新从Flash读取已经存在于缓冲器模块内的数据,最大限度保留缓冲器模块内已有的缓冲数据,从而降低对串行Flash操作的频繁度,提高缓冲器模块的利用效率。
图3是本发明实施例读取操作流程图,在本实施中,总线读操作开始301,发起一次针对Flash控制电路的读操作,Flash控制电路内部的地址命中算法逻辑模块将会对当前访问地址进行地址命中类型判断302 如果地址命中类型是实命中,则直接从缓冲器模块获取数据303,总线读操作结束309 ;如果地址命中类型是虚命中,则等待从Flash读取数据304,完成总线读操作310 ;如果地址命中类型是未命中,则对串行Flash发起SPI读操作 306,从Flash读取数据304,总线读操作结束309。发起SPI读操作305后,数据有效算法逻辑模块判断缓冲器模块数据有效性307,并根据判断结果设置/清除数据有效位308,从而为下一次往缓冲器模块存入数据提供覆盖位置。另外,从Flash读取数据304得到的数据还会存入缓冲器模块306,数据一旦存入缓冲器模块,会触发数据有效算法逻辑判断缓冲器模块数据有效性,并设置/清除数据有效位308。
需要特别说明的是,本图3读取操作流程图仅就单个地址的单次读取做了说明, 而实际上总线读取操作301和通过SPI对串行Flash的读操作305都可以是连续多次的, 连续多次的多操作可能会按照本流程图示意的方式并行叠加发生。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种高效读取的串行Flash缓冲器控制电路,包括缓冲器模块,用于Flash数据的预读取和缓存,其特征在于,所述控制电路还包括地址命中算法逻辑模块,用于判断处理器访问的数据是否存在于缓冲器模块内;数据有效算法逻辑模块,用于判断缓冲器模块中数据是否有效。
2.根据权利要求1所述的串行Flash缓冲器控制电路,其特征在于,所述缓冲器控制电路,还有一个用于对串行Flash进行连续读操作的访问控制电路模块。
3.根据权利要求1所述的串行Flash缓冲器控制电路,其特征在于,所述缓冲器模块中每字节单元具有相应的数据有效标志位。
4.根据权利要求1所述的串行Flash缓冲器控制电路,其特征在于,所述地址命中算法逻辑模块包括地址实命中算法和地址虚命中算法。
5.根据权利要求1和3所述的串行Flash缓冲器控制电路,其特征在于,所述数据有效算法逻辑模块用于计算数据是否有效,并写入所述数据有效标志位。
6.根据权利要求1至5所述的串行Flash缓冲器控制电路,其特征在于,所述串行 Flash缓冲器控制电路所在地址被所述处理器设为Cache工作区。
7.根据权利要求1至6所述的串行Flash缓冲器控制电路,其特征在于,所述缓冲器模块从所述串行Flash连续预读取和缓存数据后,所述处理器向所述串行Flash缓冲器控制电路发起读操作,首先由所述地址命中算法逻辑模块中所述地址实命中算法判断所述读操作需要的数据是否实命中,是则直接从所述缓冲器模块读取数据,完成所述读操作;否则, 继续由所述地址虚命中算法判断所述读操作需要的数据是否虚命中,是则等待数据有效后即返回,否则由所述缓冲器模块从所述串行Flash读取并返回所述处理器,由所述数据有效算法逻辑模块对所述缓冲器模块中数据进行有效性判断和标记。
全文摘要
一种高效读取的串行Flash缓冲器控制电路,包括缓冲器模块,用于Flash数据的预读取和缓存,所述控制电路还包括地址命中算法逻辑模块,用于判断处理器访问的数据是否存在于缓冲器模块内;数据有效算法逻辑模块,用于判断缓冲器模块中数据是否有效。采用本发明的技术方案后,解决传统串行Flash访问效率不高,难以直接运行代码的问题,且节省了RAM和Pad额外的开销,从而降低了芯片设计成本。
文档编号G11C16/08GK102543187SQ201110453419
公开日2012年7月4日 申请日期2011年12月30日 优先权日2011年12月30日
发明者吴加兴 申请人:东莞市泰斗微电子科技有限公司