用来存取存储器的电路及相关的存取方法

文档序号:10624714阅读:546来源:国知局
用来存取存储器的电路及相关的存取方法【专利摘要】本发明揭露了一种用来存取一存储器的电路,其中该存储器包含一分散表储存区域以及多个数据储存区域,该分散表储存区域用以储存多个项目,该些项目分别记录该些数据储存区域的起始地址以及大小,且该电路包含有一存取电路以及一快取,其中该快取系储存自该分散表储存区域所读取的一项目;其中当该存取电路需要读取该些数据储存区域的一数据时,该存取电路先发送一读取请求至该快取以从该快取中读取该项目,再根据该项目的内容来判断该数据是否储存在该项目所记录的储存区域中,并据以决定是否根据该项目的内容来读取该存储器以取得该数据。【专利说明】用来存取存储器的电路及相关的存取方法
技术领域
[0001]本发明系有关于存储器存取,尤指一种存取分散式存储器(scattermemory)的电路及相关的存取方法。【
背景技术
】[0002]在传统的分散式存储器中,会储存有一个分散表(scattertable),这个分散表中记录了多个项目(entry),且每个项目记录了存储器中一个数据储存区域的起始地址及大小,其中分散表中所记录的多个项目所分别对应的多个数据储存区域的大小有可能并不一致,且有可能不是连续的地址。在对存储器进行读写的过程中,由于数据储存区域的大小可能不一致且地址不连续,因此,若是需要读取先前在存储器其他数据储存区域中所储存的数据,则需要一个一个的循序读取分散表中所记录的项目,以判断所需要的数据是存放在哪一个数据储存区域中,因此,耗费了存储器的存取时间。【
发明内容】[0003]因此,本发明的目的之一在于提供一种用来存取存储器的电路及相关的存取方法,其可以减少存储器的存取时间,以解决先前技术的问题。[0004]依据本发明一实施例,揭露了一种用来存取一存储器的电路,其中该存储器包含一分散表储存区域以及多个数据储存区域,该分散表储存区域用以储存多个项目(entry),且该些项目分别记录该些数据储存区域的起始地址以及大小,且该电路包含有:一存取电路,耦接于该存储器,用来存取该存储器;以及一快取,耦接于该存取电路以及该存储器,用以读取该分散表储存区域,并储存自该分散表储存区域中所读取的该些项目中的一项目;其中当该存取电路需要读取该些数据储存区域所储存的一数据时,该存取电路先发送一读取请求至该快取以从该快取中读取该项目,再根据该项目所记录的一数据储存区域的大小来判断该数据是否储存在该项目所记录的该数据储存区域中,并据以决定是否根据该项目所记录的该数据储存区域的起始地址来读取该存储器以取得该数据。[0005]依据本发明另一实施例,揭露了一种用来存取一存储器的方法,其中该存储器包含一分散表储存区域以及多个数据储存区域,该分散表储存区域用以储存多个项目,且该些项目分别记录该些数据储存区域的起始地址以及大小,该方法包含有:以一快取读取该分散表储存区域,并以该快取储存自该分散表储存区域中所读取的该些项目中的一项目;以及当需要读取该些数据储存区域所储存的一数据时,先发送一读取请求至该快取以从该快取中读取该项目,再根据该项目所记录的一数据储存区域的大小来判断该数据是否储存在该项目所记录的该数据储存区域中,并据以决定是否根据该项目所记录的该数据储存区域的起始地址来读取该存储器以取得该数据。【附图说明】[0006]图1为一存储器的不意图。[0007]图2所示为依据本发明一实施例的用来存取存储器的电路的示意图。[0008]图3为依据本发明一实施例的用来存取一存储器的方法的流程图。[0009]符号说明[0010]100存储器[0011]110分散表[0012]200电路[0013]210解码电路[0014]220直接存储器存取引擎[0015]230快取[0016]Dl?D4数据储存区域[0017]300?306步骤【具体实施方式】[0018]请参考图1,图1为一存储器100的示意图。如图1所示,存储器100为一分散式存储器,其包含了一分散表(scattertable)110与多个数据储存区域Dl?D4,其中分散表110包含了多个项目,例如图标的项目I?项目4,其中每一个项目对应到存储器100中的一个数据储存区域,且每一个项目均记录了所对应的数据储存区域的起始地址以及大小。以图1所示的例子来说,项目I记录了数据储存区域Dl的起始地址是0x02A00,大小为304个字节(byte);项目2记录了数据储存区域D2的起始地址是0x02000,大小为256个字节;项目3记录了数据储存区域D3的起始地址是0x03000,大小为48个字节;且项目4记录了数据储存区域D4的起始地址是0x02B40,大小为112个字节。需注意的是,图1所示的项目数量、数据储存区域的数量、起始地址及大小仅是为了方便后续解释本【
发明内容】所使用的,而并非作为本发明的限制。[0019]在存储器100的存取操作上,若是有解码电路需要读取其中的数据时,解码电路需要先去读取分散表110中的一个项目,之后再根据该项目中所记录的数据储存区域的起始地址去存储器100中读取数据。举例来说,解码电路会需要先去去读取分散表110中的项目I,得知数据储存区域Dl的起始地址是0x02A00,之后再根据此起始地址0x02A00自存储器100中读取数据储存区域Dl中的数据,或是将数据写入到数据储存区域Dl中。[0020]然而,当解码电路在进行一些解码操作,例如使用蓝培尔-西弗-马可夫链算法(Lempel-Ziv-Markovchain-Algorithm,LZMA)、zlib、LZ77等算法进行解压缩操作时,会需要使用到先前曾经解码完成后的数据来做为解码下一笔数据的参考,举例来说,假设解码电路对一数据串进行解码以持续产生解码后数据,并将所产生的解码后数据循序储存到存储器100中的数据储存区域D1、D2、D3、D4。假设目前正将解码后数据写入至数据储存区域D4的第10个字节,若此时的解码需要使用到位于前150个字节起算的20个字节的解码后数据(亦即,包含前150个字节到前131个字节之间的解码后数据),则在先前技术中,由于在数据储存区域D4中仅写入到第10个字节,前述所需的解码后数据显然不会位于数据储存区域D4中,因此解码电路会先读取项目3并判断所需要的数据是否储存在数据储存区域D3,若是所需要的数据在数据储存区域D3则解码电路会读取数据储存区域D3的所需数据以用来进行目前解压缩操作的参考,而若是所需要的数据没有在数据储存区域D3,则解码电路会再去读取项目2并判断所需要的数据是否储存在数据储存区域D2…并重复以上操作,直到读取到所需的数据为止。[0021]如上所述,先前技术在读取数据时需要一次又一次地去读取分散表110中的项目,直到找到所需要的数据为止,因此,会有下两个缺点:第一,由于存储器100中分散表110与数据储存区域Dl?D4位于不同的地址,故存储器的突发传输读取(readburst)会被中断;第二,因为每一个数据储存区域Dl?D4的大小并不一致,假设解码电路在解码数据时需要使用到位于前150个字节起算的20个字节的解码后数据,则解码电路并无法知道“位于前150个字节起算的20个字节的解码后数据”是位于哪一个项目所对应到的数据储存区域中,因此,解码电路需要一个一个的读取位于分散表110中的项目再加以判断,故很耗费存取时间。[0022]为了解决上述问题,本发明提供了一种用来存取存储器的电路。请参考图2,图2所示为依据本发明一实施例的用来存取存储器100的电路200的示意图。如图2所示,电路200包含了一解码电路210、一存取电路(在本实施例中,该存取电路为一直接存储器存取(DirectMemoryAccess,DMA)引擎220)以及一快取230。在本实施例中,解码电路210包含一解压缩电路,例如使用LZMA、zlib,LZ77等算法进行解压缩操作的解压缩电路,其用来对一数据串进行解压缩以产生解压缩数据,并将所产生的数据串透过直接存储器存取引擎220储存到存储器100中;在本实施例中,存储器100系为动态随机存取存储器(DynamicRandomAccessMemory,DRAM),然而,在其他实施例中,存储器100亦可使用快取或是闪存(flashmemory)来实作;此外,快取230可使用静态随机存取存储器(StaticRandom-AccessMemory,SRAM)来实作。[0023]此外,在图2所示的实施例中,系将直接存储器存取引擎220与快取230描述为两个不同的元件,然而,本领域具有通常知识者应可了解快取230亦可被整合到直接存储器存取引擎220中,只要其功能操作上与本发明实施例中的相同,其电路区块的描述并不以图2所示的实施例为限。[0024]请同时参考图1、2,在电路200的操作上,解码电路210对一数据串进行解码,并将所产生的解码后数据传送到直接存储器存取引擎220,直接存储器存取引擎220透过快取230以自存储器100中的分散表110取得项目I,并根据项目I所记录的起始地址将解码后数据依序写入到数据储存区域Dl中,接着,直接存储器存取引擎220再透过快取230以自存储器100中的分散表110取得项目2,并根据项目2所记录的起始地址将解码后数据依序写入到数据储存区域D2中…以此类推,其中快取230会保留最后几笔提供给直接存储器存取引擎220的项目,当解码电路210后续在解码数据时需要先前已经储存到数据储存区域Dl?数据储存区域D4中的解码后数据时,存储器存取引擎220会发送一请求至快取230以要求取得分散表110中的项目内容,此时,快取230会先直接将本身暂存的项目传送给直接存储器存取引擎220,以供判断所需要的数据是否储存在该项目所对应到的数据储存区域中,若是有的话,直接存储器存取引擎220根据该项目所记录的起始地址自存储器100中读取数据;而若是所需要的数据没有储存在快取230所暂存的该项目所对应到的数据储存区域中时,则直接存储器存取引擎220便要求快取230自存储器100中读取更前面的项目。[0025]举一例子来详细说明电路200的操作,在以下例子中,系假设快取230在不包含目前读取的项目的情形下可暂存的项目数量为两笔,但本发明并不以此为限。同时参考图1、2,解码电路210对一数据串进行解码并产生解码后数据,之后,解码后数据被传送到直接存储器存取引擎220以准备写入到存储器100中。首先,直接存储器存取引擎220会发送一写入请求至快取230,而快取230便自存储器100的分散表110中读取项目I,并将项目I所记录的内容(亦即数据储存区域Dl的起始地址是0x02A00,大小为304个字节)传送到直接存储器存取引擎220,接着,直接存储器存取引擎220便从存储器100的数据储存区域Dl的起始地址0x02A00将解码后数据依序写入;当将304个字节的解码后数据写入到数据储存区域I之后,直接存储器存取引擎220会发送下一个写入请求至快取230,而快取230便自存储器100的分散表110中读取项目2(此时快取230中暂存了项目I的内容),并将项目2所记录的内容(亦即数据储存区域D2的起始地址是0x02000,大小为256个字节)传送到直接存储器存取引擎220,接着,直接存储器存取引擎220便从存储器100的数据储存区域D2的起始地址0x02000将解码后数据依序写入;重复上述步骤,在数据储存区域D2也写满解码后数据之后,解码后数据继续透过直接存储器存取引擎220与快取230写入到存储器100的数据储存区域D3、数据储存区域D4中。[0026]假设目前解码后数据储存到数据储存区域D4的10个字节,而解码电路210在解码下一笔数据时需要使用到前100个字节开始的20个位的解码后数据(亦即,包含前100个字节到前81个字节之间的解码后数据)来帮助解码,因此,解码电路210会发送一个命令到直接存储器存取引擎220,以指示直接存储器存取引擎220回到目前位置的前100个字节的地址,然后读20个字节的数据回来,此时,直接存储器存取引擎220先判断目前所正在写入数据的数据储存区域D4是否有解码电路210所需要的解码后数据,在本实施例中,由于数据储存区域D4目前只写了10个字节的解码后数据,因此数据储存区域4并没有解码电路210所需要的解码后数据;接着,直接存储器存取引擎220会发送一读取请求到快取230中,以请求上一个项目内容,此时,由于快取230中暂存了项目2及项目3,故快取230会先直接将项目3所包含的内容(亦即数据储存区域D3的起始地址及大小)传送到直接存储器存取引擎220,而直接存储器存取引擎220便藉由所接收到的有关于数据储存区域D3的大小信息,来判断数据储存区域D3是否有解码电路210所需要的解码后数据,在本实施例中,由于数据储存区域D3只有48个字节的解码后数据,因此数据储存区域D3也没有解码电路210所需要的解码后数据;接着,直接存储器存取引擎220会再发送一读取请求到快取230中,以请求再上一个项目内容,此时,快取230会先直接将项目2所包含的内容(亦即数据储存区域D2的起始地址及大小)传送到直接存储器存取引擎220,而直接存储器存取引擎220便藉由所接收到的有关于数据储存区域D2的大小信息,来判断数据储存区域D2是否有解码电路210所需要的解码后数据,在本实施例中,由于数据储存区域D2包含了256个字节解码后数据,故解码电路210所需要的解码后数据便是储存在数据储存区域D2中。此时,直接存储器存取引擎220可以藉由数据储存区域D2的起始地址以及目前写入在数据储存区域2?4中的解码后数据的数据量(在本实施例中,数据量为10+48+256=314字节),来计算决定出解码电路210所需要的解码后数据的地址,而直接存储器存取引擎220接着便在存储器100的数据储存区域D2中读取这些解码后数据,并回传给解码电路210。[0027]在另一个状况下,假设目前解码后数据储存到数据储存区域D4的10个字节,而解码电路210在解码下一笔数据时需要使用到前500个字节开始的10个位的解码后数据(亦即,包含前500个字节到前491个字节之间的解码后数据)来帮助解码,与上一段一开始所述的步骤类似,解码电路210会发送一个命令到直接存储器存取引擎220,以指示直接存储器存取引擎220回到目前位置的前500个字节的地址,然后读10个字节的数据回来,此时,由于快取230中暂存了项目2及项目3,因此,直接存储器存取引擎220并自快取230中所取得的项目2及项目3的内容可以知道解码电路210所需要的解码后数据并不在数据储存区域D2及数据储存区域D3之中,因此,直接存储器存取引擎220会再发送一读取请求到快取230中,以请求再上一个项目内容,此时,由于快取230已经没有暂存的项目内容,因此快取230会去存储器100的分散表110中读取项目I的内容(亦即数据储存区域Dl的起始地址及大小),并将项目I的内容传送到直接存储器存取引擎220,而直接存储器存取引擎220便藉由所接收到的有关于数据储存区域Dl的大小信息,来判断数据储存区域Dl是否有解码电路210所需要的解码后数据,在本实施例中,由于数据储存区域Dl包含了304个字节解码后数据,故解码电路210所需要的解码后数据便是储存在数据储存区域Dl中。此时,直接存储器存取引擎220可以藉由数据储存区域Dl的起始地址以及目前写入在数据储存区域Dl?D4中的解码后数据的数据量(在本实施例中,数据量为10+48+256+304=618字节),来计算决定出解码电路210所需要的解码后数据的地址,而直接存储器存取引擎220接着便在存储器100的数据储存区域Dl中读取这些解码后数据,并回传给解码电路210。[0028]如上所述,由于在接收到解码电路210的读取指示,而直接存储器存取引擎220向快取230要求项目内容时,快取230会直接先将目前所暂存的项目内容传送给直接存储器存取引擎220,而不需要每次都去读取存储器100的分散表110,只有在快取230没有所需要的项目内容时才需要去分散表110中读取,因此,可以省下存储器100读写的时间与带宽,且也不会增加太多的制造成本。[0029]此外,在上述的例子中,直接存储器存取引擎220—次只会跟快取230要求一个项目的内容,亦即直接存储器存取引擎220发一个读取请求,快取230回传项目3的内容,而之后直接存储器存取引擎220发下一个读取请求,快取230才会回传项目2的内容。然而,在本发明的另一个实施例中,若是快取230本身采用正反器(flip-flop)来实作时,快取230可以一次就将项目2及项目3的内容回传到直接存储器存取引擎220,以进一步节省存取时间。[0030]此外,需注意的是,上述使用图1来描述电路200的操作仅为一范例说明,而并非是作为本发明的限制,举例来说,快取230中所暂存的项目可以是N笔项目内容,其中N可为任何适合的正整数,快取230中暂存数据的更新机制有可以根据算法做不同的设计,或是当快取230目前没有任何暂存项目时,可以一次从分散表110中读取两个项目的内容,这些设计上的变化均应隶属于本发明的范畴。[0031]此外,在以上的实施例中,由于每一个数据储存区域Dl?D4的大小可能不一样,故直接存储器存取引擎220需要循序的接收项目3、项目2、项目I的内容以判断解码电路210所需要的解码后数据在哪里。然而,在本发明的另一个实施例中,假设每一个数据储存区域的大小一致,例如都是512个字节,则直接存储器存取引擎220可以不需要依序接收项目3、项目2、项目I的内容,而可以根据本身的运算而大概知道所需要的解码后数据位在哪一个数据储存区域中,因此可以直接向快取230要求可能需要的项目内容。举例来说,假设目前直接存储器存取引擎220正在将数据写入到数据储存区域D4中,而此时解码电路210要求前1200个字节开始的10个字节的解码后数据,则直接存储器存取引擎220经由简易计算可以很明显地知道所需要的解码后数据不可能会在数据储存区域D3中,只有可能会在数据储存区域D2或是数据储存区域Dl中。因此,直接存储器存取引擎220可以直接发读取请求至快取230以要求项目2的内容,而跳过了项目3,以进一步节省存取时间。[0032]请参考图3,图3为依据本发明一实施例的用来存取一存储器的方法的流程图。同时参考图1、2、3,流程如下所述:[0033]步骤300:开始。[0034]步骤302:对一数据串进行解码,以产生多个解码后数据,并将该些解码后数据循序储存到该存储器中。[0035]步骤304:以一快取读取该分散表储存区域,并以该快取储存自该分散表储存区域中所读取的该些项目中的一项目。[0036]步骤306:当需要读取该些数据储存区域所储存的一数据时,先发送一读取请求至该快取以从该快取中读取该项目,再根据该项目所记录的一数据储存区域的大小来判断该数据是否储存在该项目所记录的该数据储存区域中,并据以决定是否根据该项目所记录的该数据储存区域的起始地址来读取该存储器以取得该数据。[0037]简要归纳本发明,在本发明的用来存取存储器的电路及相关的存取方法中,系使用一快取来暂存自存储器的分散表中所读取的项目内容,而当直接存储器存取引擎需要读取项目内容时,便可以直接自快取中取得,而不需要每次都要去存储器中的分散表中读取项目内容,因此,可以确实减少存储器存取时间,且存储器的突发传输读取也比较不会被中断。[0038]以上所述仅为本发明的较佳实施例,凡依本发明权利要求所做的均等变化与修饰,皆应属本发明的涵盖范围。【主权项】1.一种用来存取一存储器的电路,其中该存储器包含一分散表储存区域以及多个数据储存区域,该分散表储存区域用以储存多个项目,且该些项目分别记录该些数据储存区域的起始地址以及大小,该电路包含有:一存取电路,耦接于该存储器,用来存取该存储器;以及一快取,耦接于该存取电路以及该存储器,用以读取该分散表储存区域,并储存自该分散表储存区域中所读取的该些项目中的一项目;其中当该存取电路需要读取该些数据储存区域所储存的一数据时,该存取电路先发送一读取请求至该快取以从该快取中读取该项目,再根据该项目所记录的一数据储存区域的大小来判断该数据是否储存在该项目所记录的该数据储存区域中,并据以决定是否根据该项目所记录的该数据储存区域的起始地址来读取该存储器以取得该数据。2.如权利要求1所述的电路,其特征在于,该快取储存自该分散表储存区域中所读取的该些项目中的另一项目,当该存取电路决定不根据该项目所记录的该数据储存区域的起始地址来读取该存储器以取得该数据时,该存取电路发送另一读取请求至该快取以从该快取中读取该另一项目。3.如权利要求1所述的电路,其特征在于,另包含有:一解码电路,耦接于该存取电路,用来对一数据串进行解码,以循序产生多个解码后数据,并透过该存取电路将该些解码后数据循序储存到该存储器中;其中该数据为该解码电路对该数据串进行解码时所需要使用的一部分该些解码后数据。4.如权利要求3所述的电路,其特征在于,当该解码电路透过该存取电路将该些解码后数据循序储存到该存储器时,该存取电路循序发送多个写入请求至该快取,该快取根据该些写入请求读取该分散表储存区域,并将自该分散表储存区域中所读取的第M个到第(M+L)个项目循序传送给该存取电路,该存取电路据以将该些解码后数据循序储存到该存储器中对应于第M个到第(M+L)个项目的第M个到第(M+L)个数据储存区域中;其中该快取储存传送给该存取电路的最后N个项目,M、L、N皆为正整数,且N小于L。5.如权利要求4所述的电路,其特征在于,当该解码电路发送一命令至该存取电路以要求读取该数据时,该存取电路发送至少一读取请求至该快取,且该快取从第(Μ+L-l)个项目开始,循序往回将该些项目的内容传送至该存取电路,直到该存取电路确定该数据在哪一个数据储存区域为止。6.如权利要求5所述的电路,其特征在于,当该快取传送完第(Μ+L-l)到第M个项目的内容至该存取电路,且该存取电路仍未确定该数据在哪一个数据储存区域时,该快取自该分散表储存区域中读取第(M-1)个项目并传送至该存取电路。7.如权利要求3所述的电路,其特征在于,该解码电路为一LZMA解码电路、一zlib解码电路、以及一LZ77解码电路的其中之一。8.一种用来存取一存储器的方法,其中该存储器包含一分散表储存区域以及多个数据储存区域,该分散表储存区域用以储存多个项目,且该些项目分别记录该些数据储存区域的起始地址以及大小,该方法包含有:以一快取读取该分散表储存区域,并以该快取储存自该分散表储存区域中所读取的该些项目中的一项目;以及当需要读取该些数据储存区域所储存的一数据时,先发送一读取请求至该快取以从该快取中读取该项目,再根据该项目所记录的一数据储存区域的大小来判断该数据是否储存在该项目所记录的该数据储存区域中,并据以决定是否根据该项目所记录的该数据储存区域的起始地址来读取该存储器以取得该数据。9.如权利要求8所述的方法,其特征在于,另包含有:以该快取储存自该分散表储存区域中所读取的该些项目中的另一项目;以及当决定不根据该项目所记录的该数据储存区域的起始地址来读取该存储器以取得该数据时,发送另一读取请求至该快取以从该快取中读取该另一项目。10.如权利要求8所述的方法,其特征在于,另包含有:对一数据串进行解码,以循序产生多个解码后数据,并将该些解码后数据循序储存到该存储器中;其中该数据为对该数据串进行解码时所需要使用的一部分该些解码后数据。11.如权利要求10所述的方法,其特征在于,将该些解码后数据循序储存到该存储器中的步骤包含有:依序发送多个写入请求至该快取;该快取根据该些写入请求读取分散表储存区域,并将自该分散表储存区域中所读取的第M个到第(M+L)个项目循序传送给一存取电路,该存取电路据以将该些解码后数据循序储存到该存储器中对应于第M个到第(M+L)个项目的第M个到第(M+L)个数据储存区域中,其中该快取储存传送给该存取电路的最后N个项目,M、L、N皆为正整数,且N小于L。12.如权利要求11所述的方法,其特征在于,该项目为第(Μ+L-l)个项目,该读取该数据的步骤更包含有:该快取从该第(Μ+L-l)个项目开始,循序往回将该些项目的内容传送至该存取电路,直到该存取电路确定该数据在哪一个数据储存区域为止。13.如权利要求12所述的方法,其特征在于,当该快取传送完第(Μ+L-l)到第M个项目的内容至该存取电路,且该存取电路仍未确定该数据在哪一个数据储存区域时,该快取自该分散表储存区域中读取第(M-1)个项目并传送至该存取电路。14.如权利要求8所述的方法,其特征在于,应用于一LZMA解码电路、一zlib解码电路、以及一LZ77解码电路的其中之一。【文档编号】G06F12/08GK105988940SQ201510074173【公开日】2016年10月5日【申请日】2015年2月12日【发明人】曾钰翔,谢镇宇【申请人】晨星半导体股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1