CN110310693B - 具有缓存的In-Line ECC模块 - Google Patents
具有缓存的In-Line ECC模块 Download PDFInfo
- Publication number
- CN110310693B CN110310693B CN201910604755.5A CN201910604755A CN110310693B CN 110310693 B CN110310693 B CN 110310693B CN 201910604755 A CN201910604755 A CN 201910604755A CN 110310693 B CN110310693 B CN 110310693B
- Authority
- CN
- China
- Prior art keywords
- data
- ecc
- unit
- address
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
Abstract
本申请涉及集成电路技术领域,尤其涉及一种为存储设备提供ECC的方法,包括:响应于接收到写命令,若写命令要写入的数据属于第一数据单元的地址范围,则将写命令要写入的数据写入单拍缓存;为单拍缓存存储的数据单元计算校验数据,并得到同第一数据单元对应的第一ECC单元;根据第一数据单元的地址计算第一ECC单元的地址;生成指示第一ECC单元的地址的写命令,以将第一ECC单元写入DRAM。以使用相对便宜的普通的存储器,并同时提供ECC功能;以及降低访问校验数据为存储器访问带来带宽与延迟方面的额外开销,以保证存储器的性能。
Description
技术领域
本申请涉及集成电路技术领域,尤其涉及存储器子系统中使用In-line ECC(在线ECC)提供的错误检查与校正。
背景技术
一些存储器子系统中提供错误检查与校正(Error Checking and Correction,ECC)功能,用来检测存储器中的数据错误,以及可选地,对错误数据进行校正。提供ECC功能的存储器中存储数据以及基于数据计算出的校验数据。数据与其校验数据构成数据保护单元。例如,一个数据保护单元中,校验数据的大小是数据的12.5%。
有多种为存储器中的数据生成校验数据的ECC编码,例如通过XOR(异或)计算产生校验数据,通过汉明码产生校验数据,通过BCH(Bose–Chaudhuri–Hocquenghem)码产生校验数据等。
发明内容
提供ECC功能的存储器价格相对昂贵。希望使用相对便宜的普通的存储器,并同时提供ECC功能。以及访问校验数据将为存储器访问带来带宽与延迟方面的额外开销,希望降低这种开销,以保证存储器的性能。
根据本申请的第一方面,提供了根据本申请第一方面的第一为存储设备提供ECC的方法,包括:响应于接收到写命令,若写命令要写入的数据属于第一数据单元的地址范围,则将写命令要写入的数据写入单拍缓存;为单拍缓存存储的数据单元计算校验数据,并得到同第一数据单元对应的第一ECC单元;根据第一数据单元的地址计算第一ECC单元的地址;生成指示第一ECC单元的地址的写命令,以将第一ECC单元写入DRAM。
根据本申请的第一方面的第一为存储设备提供ECC的方法,提供了根据本申请第一方面的第二为存储设备提供ECC的方法,还包括:响应于写命令要写入的数据属于第一数据单元的地址范围,若存在可用的单拍缓存,则为存储第一数据单元分配单拍缓存。
根据本申请的第一方面的第二为存储设备提供ECC的方法,提供了根据本申请第一方面的第三为存储设备提供ECC的方法,其中,响应于写命令要写入的数据属于第一数据单元的地址范围,若不存在可用的单拍缓存,则为存储第一数据单元分配完整数据缓存。
根据本申请的第一方面的第一至第三为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第四为存储设备提供ECC的方法,其中,完整数据缓存的大小等于总线的最大传输长度。
根据本申请的第一方面的第一至第四为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第五为存储设备提供ECC的方法,其中,单拍缓存的大小能容纳一个数据单元。
根据本申请的第一方面的第一至第五为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第六为存储设备提供ECC的方法,其中,若写命令要写入的数据超过第一数据单元的地址范围,则将写命令要写入的数据写入完整数据缓存。
根据本申请的第一方面的第六为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第七为存储设备提供ECC的方法,还包括:为完整数据缓存中的多个数据单元计算校验数据,并得到同所述多个数据单元对应的多个ECC单元;生成指示所述多个ECC单元存储地址的写命令,以将所述多个ECC单元写入DRAM。
根据本申请的第一方面的第一至第七为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第八为存储设备提供ECC的方法,还包括:响应于接收到写命令,识别写命令是否引起部分写操作;响应于识别出所述写命令引起部分写操作,计算部分写操作访问的数据对应的存储于DRAM中的ECC单元的地址;生成指示存储于DRAM中的所述ECC单元的地址的读命令,以从DRAM中读出所述ECC单元;合并读出的所述ECC单元对应的数据单元与写命令要写入的数据得到单拍缓存或完整数据缓存中存储的要写入的数据单元。
根据本申请的第一方面的第八为存储设备提供ECC的方法,提供了根据本申请第一方面的第九为存储设备提供ECC的方法,其中,根据写命令的地址与数据单元的长度,识别写命令是否引起部分写操作。
根据本申请的第一方面的第九为存储设备提供ECC的方法,提供了根据本申请第一方面的第十为存储设备提供ECC的方法,其中,若写命令访问的地址空间的起始地址与数据单元的边界不对齐,则所述写命令的起始地址处引起部分写操作。
根据本申请的第一方面的第九或第十为存储设备提供ECC的方法,提供了根据本申请第一方面的第十一为存储设备提供ECC的方法,其中,若写命令访问的地址空间的结尾地址与数据单元的边界不对齐,则所述写命令的结尾地址处引起部分写操作。
根据本申请的第一方面的第八为存储设备提供ECC的方法,提供了根据本申请第一方面的第十二为存储设备提供ECC的方法,其中,若写命令指示的总线传输的第一拍数据中的部分数据为无效数据,则写命令指示的总线传输的第一拍引起部分写操作;或若写命令指示的总线传输的最后一拍数据中的部分数据为无效数据,则写命令指示的总线传输的最后一拍引起部分写操作。
根据本申请的第一方面的第八为存储设备提供ECC的方法,提供了根据本申请第一方面的第十三为存储设备提供ECC的方法,其中,若写命令指示的总线传输的第一拍数据中的一份数据为无效数据,则写命令指示的总线传输的第一拍引起部分写操作;或若写命令指示的总线传输的最后一拍数据中的一份数据为无效数据,则写命令指示的总线传输的最后一拍引起部分写操作。
根据本申请的第一方面的第八为存储设备提供ECC的方法,提供了根据本申请第一方面的第十四为存储设备提供ECC的方法,其中,若写命令指示的总线传输的第一拍数据的起始地址是总线传输单元的整数倍,而不是数据单元的整数倍,则写命令指示的总线传输的第一拍引起部分写操作。
根据本申请的第一方面的第八为存储设备提供ECC的方法,提供了根据本申请第一方面的第十五为存储设备提供ECC的方法,其中,若写命令指示的总线传输的最后一拍数据的起始地址是总线传输单元的整数倍,而不是数据单元的整数倍,则写命令指示的总线传输的最后一拍引起部分写操作。
根据本申请的第一方面的第一至第十五为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第十六为存储设备提供ECC的方法,其中,校验数据被附加至数据单元的指定位置以形成ECC单元。
根据本申请的第一方面的第一至第十六为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第十七为存储设备提供ECC的方法,其中,指定位置为数据单元之后。
根据本申请的第一方面的第一或第十七为存储设备提供ECC的方法之一,提供了根据本申请第一方面的第十八为存储设备提供ECC的方法,其中,根据公式 计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为ECC单元的数据长度、M为ECC块中数据单元占用的存储空间大小,S是每个4K跳过的字节数。
根据本申请的第二方面,提供了根据本申请第二方面的第一为存储设备提供ECC的方法,包括:根据读命令要读出的数据对应的数据单元的地址计算数据单元对应的ECC单元的地址;生成指示ECC单元地址的读命令,以从DRAM中读出ECC单元;拆分ECC单元得到校验数据和数据单元;若读命令要读出的数据单元数量小于阈值,,则从读出的数据单元中获取读命令要读出的数据并存储于单拍缓存。
根据本申请的第二方面的第一为存储设备提供ECC的方法,提供了根据本申请第二方面的第二为存储设备提供ECC的方法,其中,若读命令要读出的数据单元数量不小于阈值,则将从读出的数据单元中获取的读命令要读出的数据存储于完整数据缓存。
根据本申请的第二方面的第一或第二为存储设备提供ECC的方法,提供了根据本申请第二方面的第三为存储设备提供ECC的方法,还包括:响应于读命令要读出的数据单元数量小于阈值,若存在可用的单拍缓存,则为存储读命令要读出的数据分配单拍缓存。
根据本申请的第二方面的第三为存储设备提供ECC的方法,提供了根据本申请第二方面的第四为存储设备提供ECC的方法,其中,响应于读命令要读出的数据单元数量小于阈值,若不存在可用的单拍缓存,则响应于读命令要读出的数据单元数量小于阈值分配完整数据缓存。
根据本申请的第二方面的第一至第四为存储设备提供ECC的方法之一,提供了根据本申请第二方面的第五为存储设备提供ECC的方法,其中,完整数据缓存的大小等于总线的最大传输长度。
根据本申请的第二方面的第一至第五为存储设备提供ECC的方法之一,提供了根据本申请第二方面的第六为存储设备提供ECC的方法,其中,单拍缓存的大小能容纳一个数据单元。
根据本申请的第二方面的第一至第六为存储设备提供ECC的方法之一,提供了根据本申请第二方面的第七为存储设备提供ECC的方法,其中,响应于接收到读命令,根据读命令访问的存储空间的起始地址与长度确定从DRAM读出的ECC单元。
根据本申请的第二方面的第七为存储设备提供ECC的方法,提供了根据本申请第二方面的第八为存储设备提供ECC的方法,其中,通过总线传输单元从DRAM读出ECC单元。
根据本申请的第二方面的第七为存储设备提供ECC的方法,提供了根据本申请第二方面的第九为存储设备提供ECC的方法,其中,将读命令要读出的数据的存储空间的起始地址对数据单元的大小取模;将取模得到的结果作为读命令要读出的数据对应的数据单元的起始地址。
根据本申请的第二方面的第一至第九为存储设备提供ECC的方法之一,提供了根据本申请第二方面的第十为存储设备提供ECC的方法,其中,根据公式Addrecc=Addrorg+Addrorg>>N+(Addrorg/M)×16计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的起始地址、N为移位数、M为数据单元占用的存储空间大小。
根据本申请的第二方面的第一至第十为存储设备提供ECC的方法之一,提供了根据本申请第二方面的第十一为存储设备提供ECC的方法,还包括:对拆分ECC单元得到校验数据和数据单元进行ECC校验,响应于校验失败,则向主设备发送存储器访问异常的信息。
根据本申请的第二方面的第一至第十一为存储设备提供ECC的方法之一,提供了根据本申请第二方面的第十二为存储设备提供ECC的方法,其中,校验数据被附加至数据单元的指定位置以形成ECC单元。
根据本申请的第二方面的第十二为存储设备提供ECC的方法,提供了根据本申请第二方面的第十三为存储设备提供ECC的方法,其中,指定位置为数据单元之后。
根据本申请的第二方面的第一至第十三为存储设备提供ECC的方法之一,提供了根据本申请第二方面的第十四为存储设备提供ECC的方法,其中,根据公式 计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为ECC单元的数据长度、M为ECC块中数据单元占用的存储空间大小,S是每个4K跳过的字节数。
根据本申请的第三方面,提供了根据本申请第三方面的第一ECC模块,包括:单拍缓存、ECC编码器、ECC插入单元和地址计算器;单拍缓存存储属于第一数据单元的地址范围的写命令要写入的数据;ECC编码器为单拍缓存存储的数据单元计算校验数据;ECC插入单元将校验数据与单拍缓存存储的数据单元生成同第一数据单元对应的第一ECC单元;地址计算器根据第一数据单元的地址计算存储第一ECC单元的地址。
根据本申请的第三方面的第一ECC模块,提供了根据本申请第三方面的第二ECC模块,还包括:完整数据缓存;完整数据缓存存储访问超过单一数据单元的地址范围的写命令要写入的数据;ECC编码器为完整数据缓存存储的多个数据单元计算多个校验数据;ECC插入单元将多个校验数据与完整数据缓存存储的多个数据单元生成多个ECC单元;地址计算器根据多个数据单元的地址计算存储对应的多个ECC单元的地址。
根据本申请的第三方面的第一或第二ECC模块,提供了根据本申请第三方面的第三ECC模块,其中,完整数据缓存的大小等于总线的最大传输长度。
根据本申请的第三方面的第一至第三ECC模块之一,提供了根据本申请第三方面的第四ECC模块,其中,单拍缓存的大小能容纳一个数据单元。
根据本申请的第三方面的第一至第四ECC模块之一,提供了根据本申请第三方面的第五ECC模块,还包括:部分写检测器和读-修改-写控制器;部分写检测器识别写命令是否引起部分写操作;响应于识别出所述写命令引起部分写操作,地址计算器计算部分写操作访问的数据对应的ECC单元的地址;读-修改-写控制器生成指示所述ECC单元的地址的读命令以从DRAM中读出所述ECC单元,并且合并读出的所述ECC单元对应的数据单元与写命令要写入的数据得到单拍缓存或完整数据缓存中存储的要写入的数据单元。
根据本申请的第三方面的第五ECC模块,提供了根据本申请第三方面的第六ECC模块,其中,部分写检测器根据写命令的地址与数据单元的长度,识别写命令是否引起部分写操作。
根据本申请的第三方面的第六ECC模块,提供了根据本申请第三方面的第七ECC模块,其中,部分写检测器根据写命令访问的地址空间的起始地址与数据单元的边界不对齐得到所述写命令的起始地址处引起部分写操作。
根据本申请的第三方面的第六或第七ECC模块,提供了根据本申请第三方面的第八ECC模块,其中,部分写检测器根据写命令访问的地址空间的结尾地址与数据单元的边界不对齐得到所述写命令的结尾地址处引起部分写操作。
根据本申请的第三方面的第五ECC模块,提供了根据本申请第三方面的第九ECC模块,其中,部分写检测器根据写命令指示的总线传输的第一拍数据中的部分数据为无效数据得到写命令指示的总线传输的第一拍引起部分写操作;或若根据写命令指示的总线传输的最后一拍数据中的部分数据为无效数据得到写命令指示的总线传输的最后一拍引起部分写操作。
根据本申请的第三方面的第五ECC单元,提供了根据本申请第三方面的第十ECC模块,其中,部分写检测器根据写命令指示的总线传输的第一拍数据的起始地址是总线传输单元的整数倍,而不是数据单元的整数倍,得到写命令指示的总线传输的第一拍引起部分写操作。
根据本申请的第三方面的第五ECC模块,提供了根据本申请第三方面的第十一ECC模块,其中,部分写检测器根据写命令指示的总线传输的最后一拍数据的起始地址是总线传输单元的整数倍,而不是数据单元的整数倍,得到写命令指示的总线传输的最后一拍引起部分写操作。
根据本申请的第三方面的第一至第十一ECC模块之一,提供了根据本申请第三方面的第十二ECC模块,还包括:ECC译码器和ECC拆分单元;地址计算器根据读命令要读出的数据对应的数据单元的地址计算数据单元对应的ECC单元的地址;ECC拆分单元将从ECC单元地址读出的ECC单元拆分得到校验数据和数据单元;ECC译码器通过校验数据对数据单元进行校验;单拍缓存存储校验通过后从读命令要读出的数据单元数量小于阈值的读命令所访问的数据单元中获取的读命令要读出的数据;完整数据缓存存储校验通过后从读命令要读出的数据单元数量不小于阈值的读命令所访问的数据单元中获取的读命令要读出的数据。
根据本申请的第三方面的第十二ECC模块,提供了根据本申请第三方面的第十三ECC模块,其中,地址计算器将读命令要读出的数据的存储空间的起始地址对数据单元的大小取模得到读命令要读出的数据对应的数据单元的起始地址。
根据本申请的第三方面的第十三ECC单元,提供了根据本申请第三方面的第十四ECC模块,其中,地址计算器根据公式Addrecc=Addrorg+Addrorg>>N+(Addrorg/M)×16计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的起始地址、N为移位数、M为数据单元占用的存储空间大小。
根据本申请的第三方面的第十二至第十四ECC模块之一,提供了根据本申请第三方面的第十五ECC模块,ECC译码器对校验数据和数据单元进行ECC校验,响应于校验失败,ECC译码器向主设备发送存储器访问异常的信息。
根据本申请的第三方面的第十二至第十五ECC单元之一,提供了根据本申请第三方面的第十六ECC模块,还包括:从设备接口和主设备接口;从设备接口与完整数据缓存、单拍缓存、地址计算器和部分写检测器耦合,并以遵从总线协议的从设备的方式同总线交互;主设备接口与ECC插入单元、ECC拆分单元、地址计算器和读-修改-写控制器耦合,并以遵从总线协议的主设备协议的方式同DRAM控制器交互。
根据本申请的第三方面的第一至第十六ECC单元之一,提供了根据本申请第三方面的第十七ECC模块,其中,地址计算器根据公式计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为ECC单元的数据长度、M为ECC块中数据单元占用的存储空间大小,S是每个4K跳过的字节数。
根据本申请的第四方面,提供了根据本申请第四方面的第一为存储设备提供ECC的方法,包括:为写命令要写入的数据单元计算校验数据,并将校验数据添加至数据单元得到ECC单元;根据写命令指示的数据单元地址计算数据单元对应的ECC单元的存储地址;生成指示ECC单元存储地址的写命令,以将ECC单元写入DRAM。
根据本申请的第四方面的第一为存储设备提供ECC的方法,提供了根据本申请第四方面的第二为存储设备提供ECC的方法,其中,将校验数据附加至数据单元的指定位置以生成ECC单元。
根据本申请的第四方面的第二为存储设备提供ECC的方法,提供了根据本申请第四方面的第三为存储设备提供ECC的方法,其中,指定位置为数据单元之后。
根据本申请的第四方面的第一至第三为存储设备提供ECC的方法之一,提供了根据本申请第四方面的第四为存储设备提供ECC的方法,还包括:响应于接收到写命令,将写命令要写入的数据单元缓存至数据缓存;对缓存至数据缓存的数据单元计算校验数据。
根据本申请的第四方面的第四为存储设备提供ECC的方法,提供了根据本申请第四方面的第五为存储设备提供ECC的方法,其中,数据缓存的大小等于总线的最大传输长度。
根据本申请的第四方面的第一至第五为存储设备提供ECC的方法之一,提供了根据本申请第四方面的第六为存储设备提供ECC的方法,还包括:响应于将ECC单元写入DRAM,向发出写命令的主设备发送写命令处理完成的信息。
根据本申请的第四方面的第一至第六为存储设备提供ECC的方法之一,提供了根据本申请第四方面的第七为存储设备提供ECC的方法,其中,数据单元附加校验数据后不足ECC单元的指定大小的部分,由任意数值填充,其中ECC单元是按字节对齐的、数据单元附加校验数据的存储单元。
根据本申请的第四方面的第一至第七为存储设备提供ECC的方法之一,提供了根据本申请第四方面的第八为存储设备提供ECC的方法,其中,根据公式Addrecc=Addrorg+Addrorg>>N+(Addrorg/M)×16计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为移位数、M为数据单元占用的存储空间大小。
根据本申请的第四方面的第一至第八为存储设备提供ECC的方法之一,提供了根据本申请第四方面的第九为存储设备提供ECC的方法,其中,在ECC块中ECC单元从ECC块的起始地址起首尾相接的排列,其中,ECC块为DRAM中指定大小的存储空间。
根据本申请的第四方面的第九为存储设备提供ECC的方法,提供了根据本申请第四方面的第十为存储设备提供ECC的方法,其中,在ECC块的末尾未被ECC单元占用的存储空间填有指定数据或随机数据。
根据本申请的第四方面的第九或第十为存储设备提供ECC的方法,提供了根据本申请第四方面的第十一为存储设备提供ECC的方法,其中,通过总线传输单元向DRAM写入ECC块的ECC单元。
根据本申请的第四方面的第十一为存储设备提供ECC的方法,提供了根据本申请第四方面的第十二为存储设备提供ECC的方法,其中,指定数量的总线传输单元的大小与一个ECC块的大小相同。
根据本申请的第四方面的第十一或第十二为存储设备提供ECC的方法,提供了根据本申请第四方面的第十三为存储设备提供ECC的方法,其中,在一个时钟周期,向DRAM写入数据的位宽为一个总线传输单元。
根据本申请的第四方面的第十三为存储设备提供ECC的方法,提供了根据本申请第四方面的第十四为存储设备提供ECC的方法,其中,在一个时钟周期,通过信号指示总线传输单元传输的每份数据的有效性。
根据本申请的第四方面的第十三或第十四为存储设备提供ECC的方法,提供了根据本申请第四方面的第十五为存储设备提供ECC的方法,其中,通过数据单元的大小、ECC单元的大小和总线位宽的配置确定完整总线传输的总线传输单元数量,其中,完整总线传输的所有总线传输单元大小与完整总线传输中传输的所有ECC单元的大小相等,且所述所有总线传输单元的每个总线传输单元的每份数据都有效。
根据本申请的第四方面的第一或第十五为存储设备提供ECC的方法之一,提供了根据本申请第四方面的第六为存储设备提供ECC的方法,其中,根据公式 计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为ECC单元的数据长度、M为ECC块中数据单元占用的存储空间大小,S是每个4K跳过的字节数。
根据本申请的第五方面,提供了根据本申请第五方面的第一为存储设备提供ECC的方法,包括:根据读命令指示的数据单元地址计算数据单元对应的ECC单元的存储地址;生成指示ECC单元存储地址读命令,从DRAM中读出ECC单元;拆分ECC单元得到校验数据和数据单元,通过校验数据对数据单元进行校验;若校验通过,读出ECC单元对应的数据单元。
根据本申请的第五方面的第一为存储设备提供ECC的方法,提供了根据本申请第五方面的第二为存储设备提供ECC的方法,还包括:若校验失败,则向主设备发送存储器访问异常的信息。
根据本申请的第五方面的第一为存储设备提供ECC的方法,提供了根据本申请第五方面的第三为存储设备提供ECC的方法,其中,响应于校验通过,将ECC单元对应的数据单元存储于数据缓存,从数据缓存中读出数据单元。
根据本申请的第五方面的第三为存储设备提供ECC的方法,提供了根据本申请第五方面的第四为存储设备提供ECC的方法,其中,数据缓存的大小等于总线的最大传输长度。
根据本申请的第五方面的第一至第四为存储设备提供ECC的方法之一,提供了根据本申请第五方面的第五为存储设备提供ECC的方法,其中,将ECC单元的指定部分作为数据单元,将ECC单元的其他部分作为校验数据,以拆分ECC单元。
根据本申请的第五方面的第一至第五为存储设备提供ECC的方法之一,提供了根据本申请第五方面的第六为存储设备提供ECC的方法,其中,根据公式Addrecc=Addrorg+Addrorg>>N+(Addrorg/M)×16计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为移位数、M为数据单元占用的存储空间大小。
根据本申请的第五方面的第一至第六为存储设备提供ECC的方法之一,提供了根据本申请第五方面的第七为存储设备提供ECC的方法,其中,在ECC块中ECC单元从ECC块的起始地址起首尾相接的排列,其中,ECC块为DRAM中指定大小的存储空间。
根据本申请的第五方面的第七为存储设备提供ECC的方法,提供了根据本申请第五方面的第八为存储设备提供ECC的方法,其中,在ECC块的末尾未被ECC单元占用的存储空间填有指定数据或随机数据。
根据本申请的第五方面的第七或第八为存储设备提供ECC的方法,提供了根据本申请第五方面的第九为存储设备提供ECC的方法,其中,通过总线传输单元从DRAM读出ECC块的ECC单元。
根据本申请的第五方面的第九为存储设备提供ECC的方法,提供了根据本申请第五方面的第十为存储设备提供ECC的方法,其中,指定数量的总线传输单元的大小与一个ECC块的大小相同。
根据本申请的第五方面的第九或第十为存储设备提供ECC的方法,提供了根据本申请第五方面的第十一为存储设备提供ECC的方法,其中,在一个时钟周期,从DRAM读出数据的位宽为一个总线传输单元。
根据本申请的第五方面的第十一为存储设备提供ECC的方法,提供了根据本申请第五方面的第十二为存储设备提供ECC的方法,其中,在一个时钟周期,通过信号指示总线传输单元传输的每份数据的有效性。
根据本申请的第五方面的第十一或第十二为存储设备提供ECC的方法,提供了根据本申请第五方面的第十三为存储设备提供ECC的方法,其中,通过数据单元的大小、ECC单元的大小和总线位宽的配置确定完整总线传输的总线传输单元数量,其中,完整总线传输的所有总线传输单元大小与完整总线传输中传输的所有ECC单元的大小相等,且所述所有总线传输单元的每个总线传输单元的每份数据都有效。
根据本申请的第五方面的第一至第十三为存储设备提供ECC的方法之一,提供了根据本申请第五方面的第十四为存储设备提供ECC的方法,其中,根据公式 计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为ECC单元的数据长度、M为ECC块中数据单元占用的存储空间大小,S是每个4K跳过的字节数。
根据本申请的第六方面,提供了根据本申请第六方面的第一ECC模块,包括:ECC编码器、ECC插入单元和地址计算器;地址计算器根据写命令指示的数据单元地址计算数据单元对应的ECC单元的存储地址;ECC编码器为写命令要写入的数据单元计算校验数据;ECC插入单元将校验数据添加至数据单元得到要存储至ECC单元存储地址的ECC单元。
根据本申请的第六方面的第一ECC模块,提供了根据本申请第六方面的第二ECC模块,其中,ECC插入单元将校验数据附加至数据单元的指定位置以生成ECC单元。
根据本申请的第六方面的第一或第二ECC模块,提供了根据本申请第六方面的第三ECC模块,还包括:ECC译码器和ECC拆分单元;地址计算器根据读命令指示的数据单元地址计算数据单元对应的ECC单元的存储地址;ECC拆分单元将从ECC单元存储地址读出的ECC单元拆分得到校验数据和数据单元;ECC译码器通过校验数据对数据单元进行校验,若校验通过,输出ECC单元对应的数据单元。
根据本申请的第六方面的第三ECC单元,提供了根据本申请第六方面的第四ECC模块,其中,若校验失败,ECC译码器向主设备发送存储器访问异常的信息。
根据本申请的第六方面的第三或第四ECC单元,提供了根据本申请第六方面的第五ECC模块,其中,ECC拆分单元将ECC单元的指定部分作为数据单元,将ECC单元的其他部分作为校验数据,以拆分ECC单元。
根据本申请的第六方面的第一至第五ECC单元之一,提供了根据本申请第六方面的第六ECC模块,还包括:与ECC编码器和/或ECC译码器耦合的数据缓存;数据缓存存储写命令要写入的数据单元,ECC编码器对缓存至数据缓存的数据单元计算校验数据;和/或数据缓存缓存校验通过后读出的数据单元。
根据本申请的第六方面的第一至第六ECC单元之一,提供了根据本申请第六方面的第七ECC模块,其中,地址计算器根据公式Addrecc=Addrorg+Addrorg>>N+(Addrorg/M)×16计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为移位数、M为数据单元占用的存储空间大小。
根据本申请的第六方面的第六或第七ECC单元,提供了根据本申请第六方面的第八ECC模块,还包括:从设备接口和主设备接口;从设备接口与数据缓存和地址计算器耦合,并以遵从总线协议的从设备的方式同总线交互;主设备接口与ECC插入单元、ECC拆分单元和地址计算器耦合,并以遵从总线协议的主设备协议的方式同DRAM控制器交互。
根据本申请的第六方面的第一至第八ECC单元之一,提供了根据本申请第六方面的第九ECC模块,其中,地址计算器根据公式计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为ECC单元的数据长度、M为ECC块中数据单元占用的存储空间大小,S是每个4K跳过的字节数。
根据本申请的第七方面,提供了根据本申请第七方面的第一存储设备,包括:总线、主设备、ECC模块与DRAM控制器;主设备耦合至总线,ECC模块将DRAM控制器耦合至总线;其中,ECC模块接收主设备的读命令/写命令,并执行上述为电子设备提供ECC的方法之一,ECC模块还指示DRAM控制器向DRAM写入数据或从DRAM读出数据。
根据本申请的第七方面的第一存储设备,提供了根据本申请第七方面的第二存储设备,其中,ECC模块与总线按总线协议交互,ECC模块与DRAM控制器按所述总线协议交互。
根据本申请的第七方面的第一或第二存储设备,提供了根据本申请第七方面的第三存储设备,其中,ECC模块包括从设备接口和主设备接口,从设备接口以遵从总线协议的从设备的方式同总线交互,主设备接口以遵从总线协议的主设备协议的方式同DRAM控制器交互。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1展示了根据本申请实施例的电子系统的框图;
图2展示了根据本申请实施例的ECC模块的框图;
图3展示了根据本申请实施例的数据组织的示意图;
图4展示了根据本申请实施例的ECC块与总线传输单元的示意图;
图5展示了根据本申请实施例的总线传输的时序图;
图6为根据本申请实施例的处理写命令与读命令的流程图;
图7展示了根据本申请又一实施例的ECC模块的框图;
图8展示了根据本申请实施例处理读命令的示意图;
图9展示了根据本申请又一实施例的总线传输的时序图;
图10展示了根据本申请又一实施例处理读命令的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为根据本申请实施例的电子系统的框图。
诸如SoC(片上系统,System On Chip)的电子设备包括总线与耦合到总线的设备。通常耦合到总线的设备包括两类设备,主设备与从设备。图1中,CPU 110与DMA单元115作为主设备耦合到总线,而DRAM控制器140作为从设备耦合到总线。总线120是例如AXI(Advanced Extensible Interface)总线。
DRAM(Dynamic Random Access Memory)控制器140将DRAM 150耦合到总线。DRAM控制器140与DRAM 150均不具备ECC功能。ECC模块130将DRAM控制器140耦合到总线120,并桥接总线120与DRAM控制器140。ECC模块130与总线120按例如AXI总线协议交互,而ECC模块130与DRAM控制器140也按总线协议交互,从而无须修改原本直接耦合到总线的DRAM控制器140。可选地,ECC模块130、DRAM控制器140与DRAM150之间按相同或不同的总线协议交互。
ECC模块130为主设备写入DRAM 150的数据单元添加校验数据,得到ECC单元。作为举例,数据单元大小为32字节,而ECC单元大小为34字节。可以理解地,虽然为数据单元生成的ECC单元为34字节,ECC模块130为数据单元生成的校验数据的大小可以介于0-2字节之间。而数据单元附加上校验数据后不足ECC单元(34字节)大小的部分,可由任意数值填充。
ECC模块130与总线120之间按数据单元进行访问与传输,而ECC模块130与DRAM控制器140之间按ECC单元进行访问与传输。从而总线主设备所使用的存储空间为数据单元所填充,而ECC模块130所使用的存储空间为ECC单元所填充。这导致总线主设备与ECC模块130各自使用的存储空间大小不同,并且数据单元与同其对应的ECC单元在存储空间中的地址也不同。ECC模块130还为数据单元与ECC单元进行地址转换。
数据单元同ECC单元一一对应。
图2展示了根据本申请实施例的ECC模块的框图。
ECC模块130将DRAM控制器140耦合到总线120(也参看图1)。
ECC模块130包括从设备接口210与主设备接口270。ECC模块130作为从设备耦合到总线120,从设备接口210以遵从总线协议的从设备协议的方式同总线120交互。ECC模块130作为主设备访问DRAM控制器140,DRAM控制器140作为从设备,主设备接口270以遵从总线协议的主设备协议的方式同DRAM控制器140交互。
从设备接口210从总线120接收对存储器的读命令和/或写命令,并由ECC模块130的其他单元对读命令和/或写命令进行处理。主设备接口270向DRAM控制器140发送对存储器的读命令和/或写命令,并接收DRAM控制器140对读命令和/或写命令的响应。
ECC模块130还包括地址计算器230,用于根据从设备接口210接收并提供的读命令和/或写命令访问的数据单元的地址,计算对应的ECC单元的地址。例如,Addrecc=Addrorg+Addrorg>>4+(Addrorg/3840)×16,其中Addrecc是计算得到的ECC单元的起始地址,而Addrorg是从设备接口210提供的数据单元的地址,以及其中各运算都是整型数运算。
完整数据缓存220用于缓存从设备接口210从总线120接收的写命令对应的数据,或者从主设备接口270接收的读出的数据。完整数据缓存220中存储一个或多个数据单元,而不包括同数据单元对应的校验数据。完整数据缓存220有例如多个,每个完整数据缓存220的大小为例如128字节或256字节。依然可选地,完整数据缓存220的大小等于总线120的最大传输长度(例如,128字节或256字节)。
ECC编码器240与ECC译码器242耦合到完整数据缓存220。ECC编码器240对完整数据缓存220中的数据单元实施错误校正编码并生成校验数据。ECC编码器240将数据单元与生成的校验数据提供给ECC插入单元260。ECC插入单元260将校验数据附加到数据单元的指定位置(例如,追加到数据单元之后),并提供给主设备接口270。
主设备接口270从DRAM控制器140接收的ECC单元,被ECC拆分单元262拆分为数据单元与校验数据。ECC拆分单元262将ECC单元的指定部分(例如,前32字节)作为数据单元,而将ECC单元的其他部分(例如,最后2字节,或者从第31字节开始的若干比特)作为校验数据。ECC拆分单元262将拆分后的数据单元与校验数据提供给ECC译码器242。ECC译码器242根据校验数据对数据单元实施校验。若校验通过,ECC译码器242将数据单元存储在完整数据缓存220之一中(以及丢弃校验数据);若校验失败,ECC译码器242通过从设备接口210向总线120的主设备指示存储器访问异常(例如,ECC校验异常)。
图3展示了根据本申请实施例的数据组织的示意图。
根据本申请的实施例,ECC单元在DRAM 150提供的存储空间中被依次放置,后一个ECC单元被存放在前一个ECC单元结尾的位置。ECC单元包括数据单元与校验数据。从而,若主设备使用Addrorg作为数据单元的起始地址,并且是按照数据单元的大小(例如,32字节)对齐的,则ECC单元的起始地址为Addrecc,其中Addrecc=Addrorg+Addrorg>>N+(Addrorg/M)×16,以及其中各运算都是整型数运算,以及其中N=4(对应右移4位,指示每32字节被填充了2字节校验数据),M=3840(指示每4KB存储空间中,在主设备感知的数据单元的存储空间中只使用3840字节空间(在DRAM存储空间中使用了4080字节),余下的16字节不足以存放完整的ECC单元)。
根据本申请的实施例,将DRAM 150的4KB存储空间称为ECC块。每个ECC块存储了120个ECC单元(以每个ECC单元大小为34字节为例),ECC单元在ECC块中首尾相接的排列,从ECC块的起始地址开始被放置,而ECC块的最后16字节未被ECC单元占用,其中可填入指定数据、随机数或保持为空。
一般地,根据计算ECC单元的存储地址,其中各运算为整型数运算,Addrecc是ECC单元的起始地址、Addrorg是数据单元的地址、N为ECC单元的数据长度、M为ECC块中数据单元占用的存储空间大小,S是每个ECC块中未被ECC单元占据的地址空间大小。ECC块具有例如4KB、8KB或其他大小的存储空间。
图4展示了根据本申请实施例的ECC块与总线传输单元的示意图。
总线传输单元是总线在一拍(beat)中传输的数据。在图4的例子中,总线传输单元的大小是16字节。图4中展示了多个总线传输单元(420、422、424、426……),用于在DRAM控制器140与ECC模块130之间传输数据。
图4中还展示了ECC块410包括多个ECC单元(450、452……)以及填充单元460。每个ECC单元的大小是例如34字节,而填充单元的大小是16字节。图4的例子中,ECC块的数据组织方式同图3一致。
图4还展示了ECC单元被放置在ECC块410中的地址,例如,ECC单元450被放置在从地址0到地址33的存储空间中,而ECC单元452被放置在从地址34到地址67的存储空间中。
而总线传输单元对应于指定的地址范围。在图4的例子中,总线传输单元按16字节对齐,即总线传输单元所传输的数据,总是要来自或写入按16字节对齐的DRAM提供的存储空间。参看图4,总线传输单元420所传输的数据来自地址空间0:15,而总线传输单元422所传输的数据来自地址空间16:31。从而,若要读取地址空间5:10的数据,总线传输单元420的对应于地址空间5:10的部分承载数据,而其对应于地址空间0:4与11:15的部分容纳的不是有效数据,但总线传输单元420所承载的数据量以容纳是16字节。在此情况下,由于非有效数据的存在,总线利用率降低。
图5展示了根据本申请实施例的总线传输的时序图。
从左向右是时间流逝的方向。AXI_CLK代表总线时钟,每个时钟周期,总线传输一拍,一拍内传输例如16字节数据。以时钟周期510为例,在该时钟周期内,AXI_wdata信号传输的数据W0到W7代表了所传输的一拍内的16字节数据,其中数据W0到W7的每个的大小是2字节。AXI_wstrb信号指示当前拍内传输的数据,哪些是有效的。在时钟周期510,AXI_wstrb信号为0xff(8个比特的每个比特都为1),指示当前拍的W0到W7的8份数据都是有效的。
由于ECC单元包括34字节,在图5的例子中,时钟周期510与时钟周期512传输的2拍共32字节数据是数据单元,而时钟周期514在AXI_wdata信号的15:0比特传输“ECC”指示校验单元,该数据单元与该校验单元构成一个ECC单元。而在时钟周期514传输的“ECC”之外的其他数据,属于另一ECC单元。
AXI_wdata信号的位宽是128位(16字节)。AXI_wdata信号的各部分同DRAM提供的存储空间对应。例如,AXI_wdata信号的15:0比特,专用于传输DRAM地址空间中按16字节对齐的单元的前2字节,该2字节的起始地址是16的整数倍。而AXI_wdata信号的31:16比特,所传输的2字节数据,在DRAM地址空间中的起始地址模16的余数为2。
在图5的例子中,通过17拍传输了272字节数据,其中包括16字节的校验数据,并且每一拍中AXI_wdata信号的所有比特传输的都是有效数据。在此情况下,总线利用率被最大化,由校验数据所引起的总线传输效率为256/272=94.12%。因而,将8个数据单元的256字节数据作为整体,在总线上通过17拍(包括8个ECC单元所需的16字节校验数据)完成传输,是在根据本申请实施例中使总线传输效率最大化的配置。将这种传输称为完整总线传输。可以理解地,对于其他数据单元的大小、ECC单元的大小与总线位宽的配置,所属领域技术人员将获知其他使总线传输效率最大化的配置。
图6为根据本申请实施例的处理写命令与读命令的流程图。
主设备(例如,CPU 110、DMA单元115,也参看图1),访问由数据单元所填充的存储空间,而ECC模块130接收主设备的存储空间访问命令,并转换为对由ECC单元所填充的存储空间的访问命令。ECC模块130对来自主设备的存储空间访问命令进行地址转换。对于写命令,还为要写入的数据生成校验数据,以得到ECC单元并指示DRAM控制器140将ECC单元写入DRAM 150。对于读命令,ECC模块130对从DRAM控制器140读出的ECC单元进行数据校验,并提取ECC单元中的数据单元作为对主设备110的读命令的响应。
作为一个例子,ECC模块130对主设备110提供的写命令进行处理。ECC模块130接收并缓存来自主设备的写命令(1)。ECC模块130根据写命令指示的地址,计算对应ECC单元的存储地址。ECC模块130为写命令要写入的数据计算校验数据,写命令要写入的数据与校验数据构成ECC单元。
ECC模块130生成用于将ECC单元写入DRAM的写命令,并发送给DRAM控制器140(2),写命令指示了ECC模块130生成的ECC单元的存储地址。由于ECC单元的数据单元与校验数据在存储空间上连续,由提供给DRAM控制器140的单一命令将ECC单元写入DRAM。
响应于将ECC单元写入DRAM,DRAM控制器140向ECC模块130告知写命令处理完成(3)。继而,ECC模块130向主设备110告知写命令处理完成(4)。
作为又一个例子,ECC模块130对主设备110提供的读命令进行处理。ECC模块130接收来自主设备101的读命令(5)。然后ECC模块130根据读命令指示的地址,计算容纳了要读取数据的ECC单元的存储地址。ECC模块130生成用于从DRAM读出ECC单元的读命令,并发送给DRAM控制器140(6),读命令指示了ECC模块130生成的ECC单元的存储地址。
DRAM控制器140将读出的ECC单元作为对读命令的响应提供给ECC模块(7)。ECC单元中容纳了主设备的读命令要读取的数据与校验数据。ECC模块130对ECC单元进行错误校验,若未发现错误或纠正了存在的错误,ECC单元130将数据提供给主设备110作为对主设备110的读命令的响应(8)。
图7展示了根据本申请又一实施例的ECC模块的框图。
ECC模块130将DRAM控制器140耦合到总线120(也参看图1)。
ECC模块130包括总线从设备接口210与主设备接口270。ECC模块130作为从设备耦合到总线120,从设备接口210以遵从总线协议的从设备协议的方式同总线120交互。ECC模块130作为主设备访问DRAM控制器140,DRAM控制器140作为从设备,主设备接口270以遵从总线协议的主设备协议的方式同DRAM控制器140交互。
ECC模块130还包括地址计算器730,用于根据从设备接口210接收并提供的读/写命令访问的数据单元的地址,计算对应的ECC单元的地址。
ECC模块130还包括完整数据缓存720与单拍缓存725。
完整数据缓存720用于缓存从设备接口210从总线120接收的写命令对应的数据,或者从主设备接口270接收的读出数据。完整数据缓存720中存储一个或多个数据单元,而不包括同数据单元对应的校验数据。完整数据缓存720有例如多个,每个完整数据缓存720的大小为例如128字节或256字节。依然可选地,完整数据缓存720的大小等于总线120的最大传输长度(例如,128字节或256字节)。
单拍缓存725用于缓存从设备接口210从总线120接收的写命令对应的数据,或者从主设备接口270接收的读出数据。单拍缓存725能容纳一个数据单元,并且不存储校验数据。单拍缓存725有例如多个,每个单拍缓存725的大小为例如16字节。依然可选地,单拍缓存725的大小等于总线120的两拍的位宽(例如,32字节)。
CPU 110作为主设备,对存储空间的访问通常访问较小尺寸的数据,例如,1字节、2字节或4字节。用单拍缓存725来容纳来自主设备的访问较小尺寸的数据的读/写命令所访问的数据。从而减少对缓存空间的浪费。DMA单元115作为主设备,对存储空间的访问通常访问较大尺寸的数据,例如,512字节或4KB。用一个或多个完整数据缓存来容纳来自主设备的访问较大尺寸的数据的读/写命令所访问的数据。
ECC模块130根据从设备接口210接收的读命令或写命令所访问的数据的大小,而分配单拍缓存725和/或完整数据缓存720。对于访问小尺寸数据的读/写命令,优先分配单拍缓存725,在单拍缓存725耗尽的情况下,再分配完整数据缓存720。对于访问大尺寸数据(被访问的数据尺寸超过单拍缓存的容量)的读/写命令,优先分配完整数据缓存720。依然可选地,对于来自CPU 110的读/写命令,优先分配单拍缓存725,而对于来自DMA单元115的读/写命令,优先分配完整数据缓存720。可以理解地,对总线上的其他主设备,依据其数据访问的尺寸特征,而为其指定所优先使用的缓存是单拍缓存725还是完整数据缓存720。
ECC编码器240与ECC译码器242耦合到完整数据缓存720与单拍缓存725。
ECC模块130还包括“部分写”检测器780与“读-修改-写”控制器785。
“部分写”是写命令访问的存储空间是数据单元(按32字节对齐)的部分而非全部的写命令。例如,写命令访问0:5字节的地址空间,该写命令将引起“部分写”操作。作为又一个例子,写命令访问28:40字节的地址空间,该地址空间由两个数据单元提供(各自的地址空间分别为0:31字节与32:63字节),该写命令将引起两个“部分写”操作。
“部分写”检测器780根据总线从设备接口210获取的写命令的地址与长度,识别该写命令是否将引起“部分写”操作。例如,若写命令访问的地址空间的起始地址不是在32比特对齐的边界(模32的商不为0),那么在该起始地址处将引起“部分写”操作。又例如,若写命令访问的地址空间的结尾地址不是在32比特对齐的边界之前(模32的商不为31),那么在该结尾地址处将引起“部分写”操作。
响应于“部分写”检测器780识别出“部分写”,“读-修改-写”控制器785处理“部分写”操作。“读-修改-写”控制器785计算出“部分写”操作访问的(32字节对齐的)数据单元的起始地址,通过地址计算器730计算出对应的ECC单元地址,产生读命令请求DRAM控制器140读出该ECC单元,并将该ECC单元的数据单元存储在所分配的完整数据缓存720或单拍缓存725(“读-修改-写”的“读”部分)。“读-修改-写”控制器785用“部分写”操作对应的数据更新所读出的数据单元,更新后的数据单元依然存储在所分配的完整数据缓存720或单拍缓存725(“读-修改-写”的“修改”部分)。以及“读-修改-写”控制器785指示ECC编码器240为更新后的数据单元生成校验数据,并通过ECC插入单元260生成ECC单元,以及将ECC单元写入DRAM(“读-修改-写”的“写”部分)。生成的ECC单元被写入的DRAM 150的地址,是同为该“部分写”操作而从DRAM中读出ECC单元的地址的相同地址。
可选地,在收到写命令时,从设备接口210将写命令要写入的数据缓存在完整数据缓存720或单拍缓存725,而在处理“部分写”操作中,从DRAM控制器140读出的ECC单元对应的数据单元的数据,被用于填充“部分写”操作所对应的在完整数据缓存720或单拍缓存725中的数据单元所缺失的部分数据。
依然可选地,“部分写”检测器780在从设备接口210接收写命令对应的数据的第1拍与最后1拍检测是否存在部分写操作。在一个例子中,对于由总线多拍传输的数据,“部分写”的情形仅可能存在于第1拍或最后1拍。例如,若第1拍或最后1拍时,总线AXI_wstrb信号不是0xff,则识别出存在“部分写”的情形。在又一个例子中,第1拍或最后1拍时,总线AXI_wstrb信号是0xff,但所传输数据的起始地址虽然是16字节的整数倍但不是32字节的整数倍(例如,参看图5,若第1拍对应时钟周期512),则识别出存在“部分写”的情形。
ECC模块130还处理“非对齐读”操作。作为举例,ECC单元的大小是34字节,而总线传输单元的大小是16字节(一拍),从而为读取一个ECC单元,要使用3个总线传输单元。以及由于ECC单元大小为34字节,不是16字节的倍数,从而ECC单元的存储空间往往是非16字节对齐的。ECC模块130对于主设备提供的读命令,根据读命令访问的存储空间的起始地址与长度,确定响应读命令所需要从DRAM 150获取的ECC单元。
图8展示了根据本申请实施例处理读命令的示意图。
作为举例,要访问的数据的地址范围是5:40字节,该地址范围的数据,由两个数据单元提供(地址范围分别是0:31字节与32:63字节)。这两个数据单元各自对应ECC单元810与ECC单元812。为读取ECC单元810与ECC单元812(合计68字节),需要5个总线传输单元(820、822、……830)。
地址计算器要计算出ECC单元810的起始地址。根据要访问数据的地址范围的起始地址“5”,对数据单元的大小(32)取模,得到结果“0”,作为同起始地址“5”对应的数据单元的起始地址。对该数据单元的起始地址,根据Addrecc=Addrorg+Addrorg>>N+(Addrorg/M)×16,其中N=4,M=3840,得到同该数据单元对应的ECC单元810的起始地址Addrecc。以及根据要访问的数据的地址范围的大小是35字节,得到该地址范围由2个数据单元提供(要访问数据的地址范围对数据单元大小求模,结果向上取整),从而得到该地址范围由2个ECC单元提供,从而要从DRAM读出的数据长度是2个ECC单元的大小。从而ECC模块130向DRAM控制器140发出的读命令是从ECC单元810的起始地址Addrecc开始的读取2个ECC单元长度的数据。
作为举例,从ECC单元810的起始地址Addrecc开始的读取2个ECC单元长度的数据,使用5个总线传输单元。而最后的总线传输单元830承载的数据的地址范围(ECC单元地址空间)是64:79字节。而该地址范围中,为ECC单元812所占据的部分是64:67字节。从而总线传输单元830中仅用于承载64:67字节地址范围的部分是有效数据,其他部分无须填充有效数据。
也参看图9,时钟周期910与时钟周期912所对应的拍中传输的是部分数据不是有效数据(由网格阴影指示)。
图10展示了根据本申请又一实施例处理读命令的示意图。
读命令要读取数据的地址范围是5:10字节,该地址范围的数据,由一个数据单元提供(地址范围是0:31字节)。该数据单元对应ECC单元1010。为读取ECC单元1010,需要3个总线传输单元(1020、1022与1024)。通过这三个总线传输单元,从DRAM 150读出ECC单元1010。以及对ECC单元1010的数据单元与校验数据实施错误校正,得到数据单元。并从数据单元中获取在数据单元地址空间中地址范围是5:10字节的部分,存储在单拍缓存中,并作为对读命令的响应。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (9)
1.一种为存储设备提供ECC的方法,其特征在于,包括:
响应于接收到写命令,若写命令要写入的数据属于第一数据单元的地址范围,则将写命令要写入的数据写入单拍缓存;若写命令要写入的数据超过第一数据单元的地址范围,则将写命令要写入的数据写入完整数据缓存,所述单拍缓存仅容纳一个数据单元且不存储校验数据,所述完整数据缓存存储一个或多个数据单元且不包括所述一个或多个数据单元对应的校验数据;所述要写入的数据超过第一数据单元的地址范围包括要写入的数据的数据尺寸超过单拍缓存的容量;
为单拍缓存存储的数据单元计算校验数据,并得到同第一数据单元对应的包括第一数据单元与校验数据的第一ECC单元;
根据第一数据单元的地址计算第一ECC单元的地址;
生成指示第一ECC单元的地址的写命令,以将第一ECC单元写入DRAM。
2.根据权利要求1所述的为存储设备提供ECC的方法,其特征在于,还包括:响应于写命令要写入的数据属于第一数据单元的地址范围,若存在可用的单拍缓存,则为存储第一数据单元分配单拍缓存。
3.根据权利要求2所述的为存储设备提供ECC的方法,其特征在于,响应于写命令要写入的数据属于第一数据单元的地址范围,若不存在可用的单拍缓存,则为存储第一数据单元分配完整数据缓存。
4.根据权利要求1-3所述的为存储设备提供ECC的方法之一,其特征在于,还包括:
响应于接收到写命令,识别写命令是否引起部分写操作;
响应于识别出所述写命令引起部分写操作,计算部分写操作访问的数据对应的存储于DRAM中的ECC单元的地址;
生成指示存储于DRAM中的所述ECC单元的地址的读命令,以从DRAM中读出所述ECC单元;
合并读出的所述ECC单元对应的数据单元与写命令要写入的数据得到单拍缓存或完整数据缓存中存储的要写入的数据单元。
5.一种为存储设备提供ECC的方法,其特征在于,包括:
根据读命令要读出的数据对应的数据单元的地址计算数据单元对应的包括数据单元与校验数据的ECC单元的地址;
生成指示ECC单元地址的读命令,以从DRAM中读出ECC单元;
拆分ECC单元得到校验数据和数据单元;
若读命令要读出的数据单元数量小于阈值,则从读出的数据单元中获取读命令要读出的数据并存储于单拍缓存;
其中若读命令要读出的数据单元数量不小于阈值,则将从读出的数据单元中获取的读命令要读出的数据存储于完整数据缓存。
6.一种ECC模块,其特征在于,包括:单拍缓存、ECC编码器、ECC插入单元和地址计算器;
单拍缓存存储属于第一数据单元的地址范围的写命令要写入的数据;若写命令要写入的数据超过第一数据单元的地址范围,则将写命令要写入的数据写入完整数据缓存;所述要写入的数据超过第一数据单元的地址范围包括要写入的数据的数据尺寸超过单拍缓存的容量;
ECC编码器为单拍缓存存储的数据单元计算校验数据;
ECC插入单元将校验数据与单拍缓存存储的数据单元生成同第一数据单元对应的包括第一数据单元与校验数据的第一ECC单元;
地址计算器根据第一数据单元的地址计算存储第一ECC单元的地址。
7.根据权利要求6所述的ECC模块,其特征在于,还包括:完整数据缓存;
完整数据缓存存储访问超过单一数据单元的地址范围的写命令要写入的数据;
ECC编码器为完整数据缓存存储的多个数据单元计算多个校验数据;
ECC插入单元将多个校验数据与完整数据缓存存储的多个数据单元生成多个ECC单元;
地址计算器根据多个数据单元的地址计算存储对应的多个ECC单元的地址。
8.根据权利要求6或7所述的ECC模块,其特征在于,还包括:部分写检测器和读-修改-写控制器;
部分写检测器识别写命令是否引起部分写操作;
响应于识别出所述写命令引起部分写操作,地址计算器计算部分写操作访问的数据对应的ECC单元的地址;
读-修改-写控制器生成指示所述ECC单元的地址的读命令以从DRAM中读出所述ECC单元,并且合并读出的所述ECC单元对应的数据单元与写命令要写入的数据得到单拍缓存或完整数据缓存中存储的要写入的数据单元。
9.一种存储设备,其特征在于,包括:总线、主设备、ECC模块与DRAM控制器;主设备耦合至总线,ECC模块将DRAM控制器耦合至总线;其中,ECC模块接收主设备的读命令/写命令,并执行上述权利要求1-5所述的为存储设备提供ECC的方法的方法之一,ECC模块还指示DRAM控制器向DRAM写入数据或从DRAM读出数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011452622.XA CN112530509A (zh) | 2018-12-26 | 2019-07-05 | 为存储设备提供ecc的方法、ecc模块及存储设备 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2018116026226 | 2018-12-26 | ||
CN201811602622 | 2018-12-26 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011452622.XA Division CN112530509A (zh) | 2018-12-26 | 2019-07-05 | 为存储设备提供ecc的方法、ecc模块及存储设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110310693A CN110310693A (zh) | 2019-10-08 |
CN110310693B true CN110310693B (zh) | 2021-01-08 |
Family
ID=68078406
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011452622.XA Pending CN112530509A (zh) | 2018-12-26 | 2019-07-05 | 为存储设备提供ecc的方法、ecc模块及存储设备 |
CN201910604755.5A Active CN110310693B (zh) | 2018-12-26 | 2019-07-05 | 具有缓存的In-Line ECC模块 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011452622.XA Pending CN112530509A (zh) | 2018-12-26 | 2019-07-05 | 为存储设备提供ecc的方法、ecc模块及存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN112530509A (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021035811A1 (zh) * | 2019-08-27 | 2021-03-04 | 江苏华存电子科技有限公司 | 一种可变动码率与更正能力内存控制方法 |
CN111913668B (zh) * | 2020-08-07 | 2022-08-02 | 中国电子科技集团公司第五十八研究所 | 一种ip复用下检纠查存储器数据准确性的方法 |
CN113495862A (zh) * | 2021-06-29 | 2021-10-12 | 山东华芯半导体有限公司 | 一种具有ecc功能的总线桥装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1996496A (zh) * | 2006-08-11 | 2007-07-11 | 福昭科技(深圳)有限公司 | 单一ecc电路并行处理多组数据的方法 |
CN101882467A (zh) * | 2010-07-02 | 2010-11-10 | 中颖电子有限公司 | Ecc参数可配置的存储器控制装置 |
CN101930402A (zh) * | 2009-06-23 | 2010-12-29 | 北京芯技佳易微电子科技有限公司 | 具有检错/纠错电路的非挥发存储器及其读写方法 |
CN108351818A (zh) * | 2015-11-02 | 2018-07-31 | 高通股份有限公司 | 用于在存储器中实现纠错码的系统和方法 |
CN108665939A (zh) * | 2017-03-31 | 2018-10-16 | 厦门鑫忆讯科技有限公司 | 为存储器提供ecc的方法与装置 |
CN109036493A (zh) * | 2018-06-11 | 2018-12-18 | 西北工业大学 | 一种具有检错纠错机制的NAND Flash控制器 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425342B (zh) * | 2008-10-29 | 2010-12-08 | 四川和芯微电子股份有限公司 | 针对NAND Flash冗余码的存取方法 |
US8984372B2 (en) * | 2012-11-21 | 2015-03-17 | Nvidia Corporation | Techniques for storing ECC checkbits in a level two cache |
US9362007B2 (en) * | 2013-06-20 | 2016-06-07 | Samsung Electronics Co., Ltd. | Semiconductor memory device |
CN103955430A (zh) * | 2014-03-31 | 2014-07-30 | 深圳市江波龙电子有限公司 | 一种闪存存储设备中数据管理的方法及装置 |
US9436546B2 (en) * | 2014-04-22 | 2016-09-06 | Freescale Semiconductor, Inc. | Apparatus for error detection in memory devices |
CN104461964B (zh) * | 2014-12-12 | 2017-03-15 | 杭州华澜微电子股份有限公司 | 一种存储装置 |
CN108153482B (zh) * | 2016-12-05 | 2021-09-07 | 厦门旌存半导体技术有限公司 | Io命令处理方法与介质接口控制器 |
CN108536475B (zh) * | 2017-12-27 | 2023-08-15 | 贵阳忆芯科技有限公司 | 完整编程命令处理方法与装置 |
CN207611609U (zh) * | 2018-01-12 | 2018-07-13 | 成都信息工程大学 | 一种存储器电路 |
-
2019
- 2019-07-05 CN CN202011452622.XA patent/CN112530509A/zh active Pending
- 2019-07-05 CN CN201910604755.5A patent/CN110310693B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1996496A (zh) * | 2006-08-11 | 2007-07-11 | 福昭科技(深圳)有限公司 | 单一ecc电路并行处理多组数据的方法 |
CN101930402A (zh) * | 2009-06-23 | 2010-12-29 | 北京芯技佳易微电子科技有限公司 | 具有检错/纠错电路的非挥发存储器及其读写方法 |
CN101882467A (zh) * | 2010-07-02 | 2010-11-10 | 中颖电子有限公司 | Ecc参数可配置的存储器控制装置 |
CN108351818A (zh) * | 2015-11-02 | 2018-07-31 | 高通股份有限公司 | 用于在存储器中实现纠错码的系统和方法 |
CN108665939A (zh) * | 2017-03-31 | 2018-10-16 | 厦门鑫忆讯科技有限公司 | 为存储器提供ecc的方法与装置 |
CN109036493A (zh) * | 2018-06-11 | 2018-12-18 | 西北工业大学 | 一种具有检错纠错机制的NAND Flash控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN110310693A (zh) | 2019-10-08 |
CN112530509A (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110310693B (zh) | 具有缓存的In-Line ECC模块 | |
KR100881187B1 (ko) | 하이브리드 하드 디스크 드라이브, 하이브리드 하드 디스크드라이브를 내장하는 컴퓨터 시스템, 그리고 하이브리드하드 디스크 드라이브의 플래시 메모리 dma 회로 | |
KR101500635B1 (ko) | 비-ecc 컴포넌트에서의 ecc 구현 | |
US10127074B2 (en) | Transaction identification synchronization | |
TWI375152B (en) | System and method for data read of a synchronous serial interface nand | |
TWI511150B (zh) | 具儲存有錯誤校正碼資訊的資料之第一部分及儲存無錯誤校正碼資訊的資料之第二部分的記憶體子系統 | |
WO2007136447A2 (en) | Non-volatile memory error correction system and method | |
CN114328316B (zh) | Dma控制器、soc系统及基于dma控制器的数据搬运方法 | |
US20090006899A1 (en) | Error correcting code with chip kill capability and power saving enhancement | |
US8990660B2 (en) | Data processing system having end-to-end error correction and method therefor | |
US20150039968A1 (en) | Error code management in systems permitting partial writes | |
US20100241932A1 (en) | Error detector/corrector, memory controller, and semiconductor memory device | |
US20060080589A1 (en) | Memory interface with write buffer and encoder | |
CN112867993A (zh) | 用于嵌入式ecc保护的方法及系统 | |
US9838045B1 (en) | Apparatus and method for accessing compressed data | |
US7689895B2 (en) | On-the fly error checking and correction CODEC system and method for supporting non-volatile memory | |
US20040225944A1 (en) | Systems and methods for processing an error correction code word for storage in memory components | |
CN108665939B (zh) | 为存储器提供ecc的方法与装置 | |
US9891986B2 (en) | System and method for performing bus transactions | |
CN110299183B (zh) | In-LineECC模块及其实现方法 | |
CN111221746B (zh) | 数据储存系统与其相关方法 | |
CN111913668B (zh) | 一种ip复用下检纠查存储器数据准确性的方法 | |
CN108345514B (zh) | 存储器件、存储系统及其操作方法 | |
US10490243B2 (en) | Memory device and information processing apparatus | |
CN108762975B (zh) | 一种ecc数据存储方法、系统及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20201202 Address after: 200120 Shanghai, Nanhui, new towns around the Lake Road West, No. two, building C, Applicant after: Shanghai Yixin Industry Co., Ltd Address before: 550081 No. 210th, block A, Morgan center, Lin Cheng West Road, Guan Shan Road, Guiyang, Guizhou, China. 1-20 Applicant before: GUIYANG YIXIN TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |