CN103064948A - 基于散列链表的内容寻址方法及相应的存储器电路 - Google Patents
基于散列链表的内容寻址方法及相应的存储器电路 Download PDFInfo
- Publication number
- CN103064948A CN103064948A CN2012105799168A CN201210579916A CN103064948A CN 103064948 A CN103064948 A CN 103064948A CN 2012105799168 A CN2012105799168 A CN 2012105799168A CN 201210579916 A CN201210579916 A CN 201210579916A CN 103064948 A CN103064948 A CN 103064948A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- content
- storage
- hash
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于散列链表的内容寻址方法及相应的存储器电路,本发明包括存储器单元、控制单元、寄存器接口和数据检索比较接口,采用散列、链表、多字并行存储和比较等方法,解决了现有技术采用专门工艺或器件实现内容寻址存储器的使用限制,以及传统设计方法内容寻址检索速度慢,消耗资源多,不利于内容寻址检索深度和宽度扩展等问题,具有通用性强、检索速度快、硬件利用率高、易于扩展等特点,使用不受流片工艺和FPGA器件所限制。
Description
技术领域
本发明属于计算机硬件技术,涉及一种内容寻址存储器实现方法。
背景技术
内容寻址存储器(Content Addressable Memory,简称CAM)是一种特殊的存储器阵列,它的主要工作机制就是将一个输入数据项与存储在CAM中的所有数据项自动进行比较,并输出该数据项对应的匹配信息,具有检索速度快,使用灵活等特点,被广泛应用于网络通信等领域。现有技术主要采用晶体管级全定制电路设计实现,其优点是检索速度快,缺点是需要专门工艺、成本高昂,不利于大规模使用;目前基于RTL设计的电路一般采用串行、并行、二分法、散列法等设计思路,设计的电路不是检索速度慢,就是消耗资源太多,不利于检索深度和宽度的扩展,无法满足现代网络通信和数据处理对检索深度和速度的使用要求。
发明内容
本发明的目的是提供一种采用RTL设计语言,综合散列查找、链表存储、并行比较等技术的内容寻址存储器电路实现方法。
本发明的解决方案是:
一种基于链接散列的内容寻址方法,其包括以下步骤:
步骤1、用户定义检索关键字和检索深度,其中检索关键字位宽为M,检索关键字关联内容位宽为C,检索深度为2S;
步骤2、取检索关键字最高位作为分支BR,从次高位开始依次取3位作为迷你关键字MKEY,检索关键字剩余位作为散列地址HASHADD;
步骤3、定义检索散列函数,将检索关键字作为散列函数的输入,散列地址HASHADD作为散列函数的结果;
步骤4、构造链表存储器,在链表存储器中动态创建散列函数结果冲突的检索数据链表,其中冲突数目大于1且小于等于4时,创建一级链表存储器,冲突数目大于4时,创建二级链表存储器;链表存储器地址宽度为S/2,存储器数据宽度为W=4×(关键字有效位+迷你关键字+偏移地址),存储4个检索关键字对应的关键字有效位#_VAL、迷你关键字#_MKEY、偏移地址#_OFFSET,所述#_VAL代表3_VAL,2_VAL,1_VAL,0_VAL;所述#_MKEY代表3_MKEY,2_MKEY,1_MKEY,0_MKEY;所述#_OFFSET代表3_OFFSET,2_OFFSET,1_OFFSET,0_OFFSET;
当3_VAL为1时,链表存储器3_VAL、3_MKEY、3_OFFSET字段为一个有效的数据项对应的检索信息;当3_VAL为0且3_MKEY为111时,字段3_OFFSET为一个二级链表指针;当3_VAL为0且3_MKEY为100时,字段3_OFFSET为下一个空闲链表指针;当3_VAL为0且3_MKEY为其他值时,3_MKEY、3_OFFSET字段为无效的数据项;
步骤5、构造链表存储器管理电路,包括位宽为S/2的空闲链表头指针、位宽为S/2的空闲链表尾指针、位宽为S/2+1的空闲链表计数器、位宽为S/2+1的链表使用计数器;
步骤5.1,内容寻址存储器复位后,空闲链表头指针为0,空闲链表尾指针为2S/2-1,空闲链表计数为2S/2,链表初始化状态信号为0,链表使用计数器为2;
步骤5.2,当内容寻址存储器新增数据项的散列结果冲突,且为第2个或第5个冲突数据项,将动态分配空闲链表头指针作为新的散列冲突数据项存储位置;当链表使用计数器小于2S/2时,空闲链表计数器减1,空闲链表头指针加1,链表使用计数器加1;当链表使用计数器大于等于2S/2时,首先按照空闲头指针访问链表存储器,将获取的下一个空闲链表指针作为新的空闲链表头指针,然后空闲链表计数器减1,链表使用计数器不变。
步骤5.3,当内容寻址存储器删除某数据项时,如果删除前该地址散列结果冲突数目为2或5,要求对删除后的散列冲突数据项排列进行移位,释放一个链表存储器地址。并将释放的链表存储器地址作为下一个空闲链表指针写到空闲链表尾指针指向的链表存储器地址,然后将释放的链表存储器地址作为新的空闲链表尾指针,然后空闲链表计数器加1,链表使用计数器不变。
步骤6、构造一个散列存储器,散列存储器地址宽度为(M-4),数据宽度=2×(迷你关键字位宽+检索关键字对应的偏移地址位宽+链表存储器地址位宽+链表指针有效位);存储器数据内容包括位数相等的高字段和低字段,其中高字段对应分支BR=1的数据、低字段对应分支BR=0的数据,字段数据依次为链表指针有效位EXL,一级链表指针LINK,关键字有效位VAL,迷你关键字MKEY,偏移地址OFFSET;
步骤7,构造一个内容存储器,内容存储器地址宽度S,数据宽度为C;
步骤8,构造一个插入检索数据计数器,位宽为S,计数器范围0~2S,复位初始值为0;
步骤9,获取与检索关键字相关的所有数据项:
步骤9.1,将散列函数结果作为散列存储器地址,执行存储器读操作,获取散列存储器存储数据;
步骤9.2,根据检索关键字的分支BR的值,相应选择散列存储器存储数据的高字段或低字段进行判断,具体如下:如果该字段中链表指针有效位EXL为1,按照获取散列存储器存储的一级链表指针访问一级链表存储器,执行步骤9.3;如果该字段中链表指针有效位EXL为0,执行步骤10;
步骤9.3,执行一级链表存储器读操作,如果一级链表存储数据字段3_VAL为0且3_MKEY为111,根据字段3_OFFSET对应的二级链表指针访问二级链表存储器,执行步骤9.4,否则执行步骤10;
步骤9.4,执行二级链表存储器读操作,获取二级链表存储器检索数据;
步骤10,将获取的与检索关键字相关的数据项进行排列和比较:
步骤10.1,如果没有一级链表指针,散列存储器的分支作为第1个排列数据,第2~8个排列数据以无效数据代替;
如果没有二级链表指针,散列存储器的分支作为第1个排列数据,一级链表存储器第0、1、2个数据项分别作为第2、3、4个排列数据,第5~8个排列数据以无效数据代替;
如果有一级链表指针和二级链表指针,散列存储器的分支作为第1个排列数据,一级链表存储器第0、1、2个数据项分别作为第2、3、4个排列数据,二级链表存储器第0、1、2、3个数据项分别作为第5、6、7、8个排列数据,第1个排列数据位于最左边,第8个排列数据位于最右边;
步骤10.2,将检索关键字的迷你关键字段与上述8个排列数据中的迷你关键字段进行比较,如果上述8个排列数据中的迷你关键字段有且只有一个与检索迷你关键字段完全相同,则显示匹配成功,执行步骤10.3,否则,显示匹配失败;
步骤10.3,将匹配成功的排列数据中的偏移地址OFFSET作为内容存储器地址,访问内容存储器,输出内容存储器的数据。
上述方法还包括步骤11;
步骤11,插入操作:
如果插入的是与某个有效的排列数据完全相同的数据项,那么只用更新偏移地址,完成一个覆盖插入操作,插入检索数据计数器不变;否则从8个排列数据中选择排在最前面的、无效的位置进行插入,插入检索数据计数器加1,如果新增的数据项是该散列地址第2个或第5个冲突数据项,则执行5.2步骤,在新分配的链表存储地址第0字段(0_VAL、0_MKEY、0_OFFSET)插入数据项,其余字段赋值为0,同时将新分配的链表指针更新到一级链表指针(对应冲突数为2),置链表指针有效位EXL为1,或者更新二级链表指针(对应冲突数为5),置一级链表存储器第3字段(3_VAL、3_MKEY)为4’b0100;
如果插入之前,插入检索计数器等于2S,显示操作失败,不执行后续操作;
上述方法还包括步骤12,
步骤12,删除操作:
如果删除的数据项与8个排列数据中的有效数据都不相同,那么显示操作失败,插入检索数据计数器不变;否则删除该数据项,插入检索数据计数器减1,并对删除后的排列数据按照原排列顺序进行左移,右边补全0;如果删除的是第1个排列数据,则将左移后的第1个数据更新到散列存储器位置,第2~4个排列数据更新到一级链表存储器(如果有)、第5~7个排列数据更新到二级链表存储器(如果有);如果删除的是第2~4个排列数据,则将左移后的第2~4个排列数据更新到一级链表存储器(如果有)、第5~7个排列数据更新到二级链表存储器(如果有),散列存储器不变;如果删除的是第5~8个排列数据,则将左移后的第5~7个排列数据更新到二级链表存储器,散列存储器、一级链表存储器不变;如果删除前该地址散列结果冲突数目为2或5,则执行步骤5.3。
一种实现内容寻址的存储器电路,包括控制单元、存储器单元、寄存器接口和数据检索比较接口,其特殊之处是:所述存储器单元包括散列存储器、链表存储器、内容存储器,所述的控制单元包括状态机、比较模块、排列模块、链表存储器管理模块和插入检索数据计数器。
散列存储器用于将检索关键字散列到不同的地址空间,用于存储检索数据项以及散列冲突数目大于1的一级链表指针;链表存储器用于存储冲突数大于1的检索数据项以及二级链表指针;内容存储器用于存储检索数据项中的非关键字部分,内容存储器的地址与检索关键字的偏移地址相对应,存储器内容通过写寄存器接口来更新。
状态机用于控制散列存储器、链表存储器、内容存储器的读写、排列模块、比较模块、链表存储器管理模块和插入检索数据计数器的工作;排列模块用于将散列存储器、链表存储器中存储的与检索关键字相关的数据项进行排列;比较模块用于将检索的迷你关键字与排列数据迷你关键字比较,并输出匹配结果和偏移地址OFFSET;链表存储器管理模块用于动态分配和回收链表指针及对应的存储器地址;插入检索数据计数器用于统计成功插入的检索数据数目。
上述内容寻址存储器,其特殊之处在于:具有供处理器访问的寄存器读写接口,寄存器包括配置寄存器、命令寄存器、标志寄存器、关键字寄存器、内容寄存器等,具体设计包括:
a.寄存器读写接口,具有片选信号CS、读写信号WR、寄存器地址总线ADD、输入数据总线DATAIN,输出数据总线,以及时钟CLK和复位RST,时钟上升沿有效;
b.配置寄存器,用来配置内容寻址存储器初始化操作、使能插入和删除操作,显示插入检索数据项数目等信息;
c.命令寄存器,为处理器提供在线检索和删除功能,命令寄存器包括操作命令(检索、删除)和检索关键字、用来对含某关键字的数据项进行检索或删除,写有效,读无意义。
d.标志寄存器,显示最近一次成功检索、删除或插入操作的结果,寄存器内容包括,操作结果(成功或失败)、操作模式(检索、插入、删除)、操作关键字,以及关键字对应的偏移地址,读有效,写无意义。
e.关键字寄存器,用来完成输入数据项中检索关键字的写插入操作,写操作表示插入一个有效检索关键字,读操作显示最后一次成功插入的检索关键字。关键字寄存器是一组寄存器,其地址空间深度表示内容寻址存储器的检索深度,寄存器有效位宽表示检索关键字的位宽,每一个关键字寄存器所在的地址对应一个偏移地址,该偏移地址对应一个或一组内容寄存器。
f.内容寄存器,内容寄存器对应内容存储器,每一个或一组内容寄存器对应一个关键字寄存器和一个偏移地址,内容寄存器读写操作均有效。
上述内容寻址存储器,其特殊之处在于:具有数据检索比较接口,包括检索关键字KEY,检索请求信号REQ,检索完成信号MATCH_COM,检索结果信号MATCH_SUC,检索内容MATCH_CONT。
当检索关键字KEY有效时,使能REQ信号一个周期的高电平脉冲,将启动一次检索操作,检索完成,MATCH_COM信号输出一个高电平脉冲,此时MATCH_SUC和MATCH_CONT信号同时有效,可根据MATCH_SUC信号是否为高,判断检索是否成功。
上述内容寻址存储器,其特殊之处在于:支持在线检索、插入和删除操作,不管是哪种操作,内容寻址存储器都事先对所有数据项进行比较,然后根据比较结果,实时完成内容存储器的更新。
本发明的优点是:
a.通用性强,方便使用:全部采用RTL语言设计,通用性强,不受流片工艺限制,不需要专门进行晶体管版图设计,可在FPGA芯片上实现,对FPGA芯片没有特殊要求;
b.检索速度快,检索周期稳定,最快10个时钟周期,最慢14个时钟周期;
c.硬件利用率高,通过将检索关键字进行分解,分解成散列存储器地址,分支、迷你关键字以及存储内容,大幅压缩存储空间;同时对于散列结果冲突的检索关键字,共享一个链表存储器,进一步提高存储器利用率;
d.易于扩展,内容寻址存储器硬件利用率高,检索速度不受存储器深度和宽度影响,特别适合对检索深度、检索速度和硬件成本都有要求的网络通信电路设计;
e.支持在线插入、删除和检索操作,内容寻址存储器不需要预先配置,可实现在线操作,实时性强。
f.支持初始化操作,初始化操作将存储器中所有有效的存储内容置为无效。
附图说明
图1是内容寻址存储器功能框图;
图2是内容寻址存储器关键字存储结构;
图3是内容寻址存储器寄存器示意图;
图4是内容寻址存储器工作流程图;
图5是链表存储器管理流程图。
具体实施方式
下面从功能架构和工作流程两方面介绍内容寻址存储器电路的具体实现:
1.功能架构
内容寻址存储器电路的功能框图如图1所示,内容寻址的存储器电路,包括控制单元、存储器单元、寄存器接口和数据检索比较接口,具体实现方式如下:
1.1寄存器接口
寄存器读写接口,具有片选信号CS、读写信号WR、寄存器地址总线ADD、输入数据总线DATAIN[31:0],输出数据总线[31:0],时钟CLK和复位RST,以及地址译码和数据选择。
内容寻址存储器寄存器定义如图3所示,包括配置寄存器、命令寄存器、标志寄存器、关键字寄存器和内容寄存器等,具体定义如下:
a.配置寄存器,用来配置CAM初始化操作、使能插入和删除操作,显示插入数据项条目数等信息;
b.命令寄存器,为处理器提供在线检索和删除功能,命令寄存器包括操作命令(检索、删除)和检索关键字、用来对含某关键字的数据项进行检索或删除,写有效,读无意义。
c.标志寄存器,显示最近一次检索、删除或插入操作的结果,寄存器内容包括,操作结果(成功或失败)、操作模式(检索、插入、删除)、操作关键字,以及关键字对应的偏移地址,读有效,写无意义。
d.关键字寄存器,用来完成输入数据项中检索关键字的写插入操作,写操作表示插入一个有效检索关键字,读显示最后一次成功插入的检索关键字。关键字寄存器是一组寄存器,其地址空间深度表示内容寻址存储器的检索深度,寄存器有效位宽表示检索关键字的位宽,每一个关键字寄存器所在的地址对应一个偏移地址,该偏移地址对应一个或一组内容寄存器;
e.内容寄存器,每一个或一组内容寄存器对应一个关键字寄存器,即关键字偏移地址,内容寄存器用来存储检索数据项中的非关键字部分,内容寄存器读写操作均有效。
1.2数据检索比较接口
数据检索比较接口,包括检索关键输入信号KEY,检索请求信号REQ,检索完成信号MATCH_COM,检索结果信号MATCH_SUC,检索内容信号MATCH_CONT。
当检索关键字KEY有效时,使能REQ信号一个周期的高电平脉冲,将启动一次检索操作,待10~14个周期左右,MATCH_COM信号输出一个高电平脉冲,此时MATCH_SUC和MATCH_CONT信号同时有效,可根据MATCH_SUC信号是否为高,判断检索是否成功。
1.3存储器单元
存储器单元包括散列存储器、链表存储器、内容存储器,散列存储器用于将检索关键字散列到不同的地址空间,用于存储检索数据项以及散列冲突数目大于1的一级链表指针,链表存储器用于存储冲突数大于1的检索数据项以及二级链表指针,内容存储器用于存储检索数据项中的非关键字部分,内容存储器的地址与检索关键字的偏移地址相对应,存储器内容通过写寄存器接口来更新。
1.4控制单元
控制单元包括状态机、比较模块、排列模块、链表存储器管理模块和插入检索数据计数器:状态机用于控制散列存储器、链表存储器、内容存储器的读写、排列模块、比较模块、链表存储器管理模块和插入检索数据计数器的工作;排列模块用于将散列存储器、链表存储器中存储的与检索关键字相关的数据项进行排列;比较模块用于将检索的迷你关键字与排列数据迷你关键字比较,并输出匹配结果和偏移地址OFFSET;插入检索数据计数器用于统计成功插入的检索数据数目;链表存储器管理模块用于动态分配和回收链表指针及对应的链表存储器地址,链表存储器管理模块包括空闲链表头指针、空闲链表尾指针、空闲链表计数器、链表使用计数器。
2工作流程
内容寻址存储器工作流程如图4所示,具体工作流程如下
2.1获取与检索关键字相关的检索数据项
a.分解检索关键字,输出散列函数结果、分支BR和检索迷你关键字;
b.将散列函数结果作为散列存储器地址,执行存储器读操作,获取散列存储器存储数据;
c.根据检索关键字的分支BR的值,相应选择散列存储器存储数据的高字段或低字段进行判断,具体如下:如果该字段中链表指针有效位EXL为1,按照获取散列存储器存储的一级链表指针访问一级链表存储器,执行步骤d;如果该字段中链表指针有效位EXL为0,直接跳转至排列比较操作;
d.执行一级链表存储器读操作,如果一级链表存储数据字段3_VAL为0且3_MKEY为111,根据字段3_OFFSET对应的二级链表指针访问二级链表存储器,执行二级链表存储器读操作,获取二级链表存储器检索数据,否则直接跳转至排列比较操作;
2.2排列比较操作
a.将获取的与检索关键字相关的数据项进行排列和比较:
b.如果没有一级链表指针,散列存储器的分支作为第1个排列数据,第2~8个排列数据以无效数据代替;
c.如果没有二级链表指针,散列存储器的分支作为第1个排列数据,一级链表存储器第0、1、2个数据项分别作为第2、3、4个排列数据,第5~8个排列数据以无效数据代替;如果有一级链表指针和二级链表指针,散列存储器的分支作为第1个排列数据,一级链表存储器第0、1、2个数据项分别作为第2、3、4个排列数据,二级链表存储器第0、1、2、3个数据项分别作为第5、6、7、8个排列数据,第1个排列数据位于最左边,第8个排列数据位于最右边;
d.将检索关键字的迷你关键字段与上述8个排列数据中的迷你关键字段进行比较,如果上述8个排列数据中的迷你关键字段有且只有一个与检索迷你关键字段完全相同,则显示匹配成功,执行下一步,否则,显示匹配失败;
e.将匹配成功的排列数据中的偏移地址OFFSET作为内容存储器地址,访问内容存储器,输出内容存储器的数据。
2.3插入操作
如果插入的是与某个有效的排列数据完全相同的数据项,那么只用更新偏移地址,完成一个覆盖插入操作,插入检索数据计数器不变;否则从8个排列数据中选择排在最前面的、无效的位置进行插入,插入检索数据计数器加1;
如果新增的数据项是该散列地址第2个或第5个冲突数据项,则执行链表存储器管理分配操作,在新分配的链表存储地址第0字段(0_VAL、0_MKEY、0_OFFSET)插入数据项,其余字段赋值为0,同时将新分配的链表指针更新到一级链表指针(对应冲突数为2),置链表指针有效位EXL为1,或者更新二级链表指针(对应冲突数为5),置一级链表存储器第3字段(3_VAL、3_MKEY)为4’b0100;
如果插入之前,插入检索计数器等于2S,显示操作失败,不执行后续操作;2.4删除操作
如果删除的数据项与8个排列数据中的有效数据都不相同,那么显示操作失败,插入检索数据计数器不变;否则删除该数据项,插入检索数据计数器减1,并对删除后的排列数据按照原排列顺序进行左移,右边补全0;
如果删除的是第1个排列数据,则将左移后的第1个数据更新到散列存储器位置,第2~4个排列数据更新到一级链表存储器(如果有)、第5~7个排列数据更新到二级链表存储器(如果有);
如果删除的是第2~4个排列数据,则将左移后的第2~4个排列数据更新到一级链表存储器(如果有)、第5~7个排列数据更新到二级链表存储器(如果有),散列存储器不变;
如果删除的是第5~8个排列数据,则将左移后的第5~7个排列数据更新到二级链表存储器,散列存储器、一级链表存储器不变;如果删除前该地址散列结果冲突数目为2或5,则执行链表存储器管理回收操作。
2.5链表存储器管理操作
链表存储器管理操作如图5所示:
a.内容寻址存储器复位后,空闲链表头指针为0,空闲链表尾指针为2S/2-1,空闲链表计数为2S/2,链表初始化状态信号为0,链表使用计数器为2;
b.当内容寻址存储器新增数据项的散列结果冲突,且为第2个或第5个冲突数据项,将动态分配空闲链表头指针作为新的散列冲突数据项存储位置;当链表使用计数器小于2S/2时,空闲链表计数器减1,空闲链表头指针加1,链表使用计数器加1;当链表使用计数器大于等于2S/2时,首先按照空闲头指针访问链表存储器,将获取的下一个空闲链表指针作为新的空闲链表头指针,然后空闲链表计数器减1,链表使用计数器不变。
c.当内容寻址存储器删除某数据项时,如果删除前该地址散列结果冲突数目为2或5,要求对删除后的散列冲突数据项排列进行移位,释放一个链表存储器地址。并将释放的链表存储器地址作为下一个空闲链表指针写到空闲链表尾指针指向的链表存储器地址,然后将释放的链表存储器地址作为新的空闲链表尾指针,然后空闲链表计数器加1,链表使用计数器不变。
Claims (7)
1.一种基于链接散列的内容寻址方法,其特征在于:包括以下步骤:
步骤1、用户定义检索关键字和检索深度,其中检索关键字位宽为M,检索关键字关联内容位宽为C,检索深度为2S;
步骤2、取检索关键字最高位作为分支BR,从次高位开始依次取3位作为迷你关键字MKEY,检索关键字剩余位作为散列地址HASHADD;
步骤3、定义检索散列函数,将检索关键字作为散列函数的输入,散列地址HASHADD作为散列函数的结果;
步骤4、构造链表存储器,在链表存储器中动态创建散列函数结果冲突的检索数据链表,其中冲突数目大于1且小于等于4时,创建一级链表存储器,冲突数目大于4时,创建二级链表存储器;链表存储器地址宽度为S/2,存储器数据宽度为W=4×(关键字有效位+迷你关键字+偏移地址),存储4个检索关键字对应的关键字有效位#_VAL、迷你关键字#_MKEY、偏移地址#_OFFSET,所述#_VAL代表3_VAL,2_VAL,1_VAL,0_VAL;所述#_MKEY代表3_MKEY,2_MKEY,1_MKEY,0_MKEY;所述#_OFFSET代表3_OFFSET,2_OFFSET,1_OFFSET,0_OFFSET;
当3_VAL为1时,链表存储器3_VAL、3_MKEY、3_OFFSET字段为一个有效的数据项对应的检索信息;当3_VAL为0且3_MKEY为111时,字段3_OFFSET为一个二级链表指针;当3_VAL为0且3_MKEY为100时,字段3_OFFSET为下一个空闲链表指针;当3_VAL为0且3_MKEY为其他值时,3_MKEY、3_OFFSET字段为无效的数据项;
步骤5、构造链表存储器管理电路,包括位宽为S/2的空闲链表头指针、位宽为S/2的空闲链表尾指针、位宽为S/2+1的空闲链表计数器、位宽为S/2+1的链表使用计数器;
步骤5.1,内容寻址存储器复位后,空闲链表头指针为0,空闲链表尾指针为2S/2-1,空闲链表计数为2S/2,链表初始化状态信号为0,链表使用计数器为2;
步骤5.2,当内容寻址存储器新增数据项的散列结果冲突,且为第2个或第5个冲突数据项,将动态分配空闲链表头指针作为新的散列冲突数据项存储位置;当链表使用计数器小于2S/2时,空闲链表计数器减1,空闲链表头指针加1,链表使用计数器加1;当链表使用计数器大于等于2S/2时,首先按照空闲头指针访问链表存储器,将获取的下一个空闲链表指针作为新的空闲链表头指针,然后空闲链表计数器减1,链表使用计数器不变;
步骤5.3,当内容寻址存储器删除某数据项时,如果删除前该地址散列结果冲突数目为2或5,要求对删除后的散列冲突数据项排列进行移位,释放一个链表存储器地址。并将释放的链表存储器地址作为下一个空闲链表指针写到空闲链表尾指针指向的链表存储器地址,然后将释放的链表存储器地址作为新的空闲链表尾指针,然后空闲链表计数器加1,链表使用计数器不变;
步骤6、构造一个散列存储器,散列存储器地址宽度为(M-4),数据宽度=2×(迷你关键字位宽+检索关键字对应的偏移地址位宽+链表存储器地址位宽+链表指针有效位);存储器数据内容包括位数相等的高字段和低字段,其中高字段对应分支BR=1的数据、低字段对应分支BR=0的数据,字段数据依次为链表指针有效位EXL,一级链表指针LINK,关键字有效位VAL,迷你关键字MKEY,偏移地址OFFSET;
步骤7,构造一个内容存储器,内容存储器地址宽度S,数据宽度为C;
步骤8,构造一个插入检索数据计数器,位宽为S,计数器范围0~2S,复位初始值为0;
步骤9,获取与检索关键字相关的所有数据项:
步骤9.1,将散列函数结果作为散列存储器地址,执行存储器读操作,获取散列存储器存储数据;
步骤9.2,根据检索关键字的分支BR的值,相应选择散列存储器存储数据的高字段或低字段进行判断,具体如下:如果该字段中链表指针有效位EXL为1,按照获取散列存储器存储的一级链表指针访问一级链表存储器,执行步骤9.3;如果该字段中链表指针有效位EXL为0,执行步骤10;
步骤9.3,执行一级链表存储器读操作,如果一级链表存储数据字段3_VAL为0且3_MKEY为111,根据字段3_OFFSET对应的二级链表指针访问二级链表存储器,执行步骤9.4,否则执行步骤10;
步骤9.4,执行二级链表存储器读操作,获取二级链表存储器检索数据;
步骤10,将获取的与检索关键字相关的数据项进行排列和比较:
步骤10.1,如果没有一级链表指针,散列存储器的分支作为第1个排列数据,第2~8个排列数据以无效数据代替;
如果没有二级链表指针,散列存储器的分支作为第1个排列数据,一级链表存储器第0、1、2个数据项分别作为第2、3、4个排列数据,第5~8个排列数据以无效数据代替;
如果有一级链表指针和二级链表指针,散列存储器的分支作为第1个排列数据,一级链表存储器第0、1、2个数据项分别作为第2、3、4个排列数据,二级链表存储器第0、1、2、3个数据项分别作为第5、6、7、8个排列数据,第1个排列数据位于最左边,第8个排列数据位于最右边;
步骤10.2,将检索关键字的迷你关键字段与上述8个排列数据中的迷你关键字段进行比较,如果上述8个排列数据中的迷你关键字段有且只有一个与检索迷你关键字段完全相同,则显示匹配成功,执行步骤10.3,否则,显示匹配失败;
步骤10.3,将匹配成功的排列数据中的偏移地址OFFSET作为内容存储器地址,访问内容存储器,输出内容存储器的数据。
2.根据权利要求1所述的基于链接散列的内容寻址方法,其特征在于:还包括步骤11;
步骤11,插入操作:
如果插入的是与某个有效的排列数据完全相同的数据项,那么只用更新偏移地址,完成一个覆盖插入操作,插入检索数据计数器不变;否则从8个排列数据中选择排在最前面的、无效的位置进行插入,插入检索数据计数器加1,如果新增的数据项是该散列地址第2个或第5个冲突数据项,则执行5.2步骤,在新分配的链表存储地址第0字段(0_VAL、0_MKEY、0_OFFSET)插入数据项,其余字段赋值为0,同时将新分配的链表指针更新到一级链表指针(对应冲突数为2),置链表指针有效位EXL为1,或者更新二级链表指针(对应冲突数为5),置一级链表存储器第3字段(3_VAL、3_MKEY)为4’b0100;
如果插入之前,插入检索计数器等于2S,显示操作失败,不执行后续操作。
3.根据权利要求1所述的基于链接散列的内容寻址方法,其特征在于:还包括步骤12,
步骤12,删除操作:
如果删除的数据项与8个排列数据中的有效数据都不相同,那么显示操作失败,插入检索数据计数器不变;否则删除该数据项,插入检索数据计数器减1,并对删除后的排列数据按照原排列顺序进行左移,右边补全0;如果删除的是第1个排列数据,则将左移后的第1个数据更新到散列存储器位置,第2~4个排列数据更新到一级链表存储器(如果有)、第5~7个排列数据更新到二级链表存储器(如果有);如果删除的是第2~4个排列数据,则将左移后的第2~4个排列数据更新到一级链表存储器(如果有)、第5~7个排列数据更新到二级链表存储器(如果有),散列存储器不变;如果删除的是第5~8个排列数据,则将左移后的第5~7个排列数据更新到二级链表存储器,散列存储器、一级链表存储器不变;如果删除前该地址散列结果冲突数目为2或5,则执行步骤5.3。
4.一种实现内容寻址的存储器电路,包括控制单元、存储器单元、寄存器接口和数据检索比较接口,其特征在于:
所述存储器单元包括散列存储器、链表存储器、内容存储器,所述的控制单元包括状态机、比较模块、排列模块、链表存储器管理模块和插入检索数据计数器;
散列存储器用于将检索关键字散列到不同的地址空间,用于存储检索数据项以及散列冲突数目大于1的一级链表指针;链表存储器用于存储冲突数大于1的检索数据项以及二级链表指针;内容存储器用于存储检索数据项中的非关键字部分,内容存储器的地址与检索关键字的偏移地址相对应,存储器内容通过写寄存器接口来更新;
状态机用于控制散列存储器、链表存储器、内容存储器的读写、排列模块、比较模块、链表存储器管理模块和插入检索数据计数器的工作;排列模块用于将散列存储器、链表存储器中存储的与检索关键字相关的数据项进行排列;比较模块用于将检索的迷你关键字与排列数据迷你关键字比较,并输出匹配结果和偏移地址OFFSET;链表存储器管理模块用于动态分配和回收链表指针及对应的存储器地址;插入检索数据计数器用于统计成功插入的检索数据数目。
5.根据权利要求4所述的实现内容寻址存储器电路,其特征在于:所述内容寻址存储器,具有供处理器访问的寄存器读写接口;
寄存器包括配置寄存器、命令寄存器、标志寄存器、关键字寄存器、内容寄存器等,具体设计包括:
a.寄存器读写接口,具有片选信号CS、读写信号WR、寄存器地址总线ADD、输入数据总线DATAIN,输出数据总线,以及时钟CLK和复位RST,时钟上升沿有效;
b.配置寄存器,用来配置内容寻址存储器初始化操作、使能插入和删除操作,显示插入检索数据项数目等信息;
c.命令寄存器,为处理器提供在线检索和删除功能,命令寄存器包括操作命令(检索、删除)和检索关键字、用来对含某关键字的数据项进行检索或删除,写有效,读无意义;
d.标志寄存器,显示最近一次成功检索、删除或插入操作的结果,寄存器内容包括,操作结果(成功或失败)、操作模式(检索、插入、删除)、操作关键字,以及关键字对应的偏移地址,读有效,写无意义;
e.关键字寄存器,用来完成输入数据项中检索关键字的写插入操作,写操作表示插入一个有效检索关键字,读操作显示最后一次成功插入的检索关键字。关键字寄存器是一组寄存器,其地址空间深度表示内容寻址存储器的检索深度,寄存器有效位宽表示检索关键字的位宽,每一个关键字寄存器所在的地址对应一个偏移地址,该偏移地址对应一个或一组内容寄存器;
f.内容寄存器,内容寄存器对应内容存储器,每一个或一组内容寄存器对应一个关键字寄存器和一个偏移地址,内容寄存器读写操作均有效。
6.根据权利要求5所述的实现内容寻址的存储器电路,其特征在于:所述内容寻址存储器,具有数据检索比较接口,包括检索关键字KEY,检索请求信号REQ,检索完成信号MATCH_COM,检索结果信号MATCH_SUC,检索内容MATCH_CONT;
当检索关键字KEY有效时,使能REQ信号一个周期的高电平脉冲,将启动一次检索操作,检索完成,MATCH_COM信号输出一个高电平脉冲,此时MATCH_SUC和MATCH_CONT信号同时有效,可根据MATCH_SUC信号是否为高,判断检索是否成功。
7.根据权利要求6所述的实现内容寻址的存储器电路,其特征在于:所述内容寻址存储器,支持在线检索、插入和删除操作,不管是哪种操作,内容寻址存储器都事先对所有数据项进行比较,然后根据比较结果,实时完成内容存储器的更新。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210579916.8A CN103064948B (zh) | 2012-12-27 | 2012-12-27 | 基于散列链表的内容寻址方法及相应的存储器电路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210579916.8A CN103064948B (zh) | 2012-12-27 | 2012-12-27 | 基于散列链表的内容寻址方法及相应的存储器电路 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103064948A true CN103064948A (zh) | 2013-04-24 |
CN103064948B CN103064948B (zh) | 2015-08-19 |
Family
ID=48107578
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210579916.8A Active CN103064948B (zh) | 2012-12-27 | 2012-12-27 | 基于散列链表的内容寻址方法及相应的存储器电路 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103064948B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598194A (zh) * | 2014-12-09 | 2015-05-06 | 中国航空工业集团公司第六三一研究所 | 一种头尾指针链表存储器的初始化方法及电路 |
WO2018099107A1 (zh) * | 2016-12-02 | 2018-06-07 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置、计算机存储介质 |
CN110765156A (zh) * | 2018-07-09 | 2020-02-07 | 慧荣科技股份有限公司 | 链表搜索装置及方法 |
CN111046074A (zh) * | 2019-12-13 | 2020-04-21 | 北京百度网讯科技有限公司 | 流式数据处理方法、装置、设备和介质 |
CN111431806A (zh) * | 2020-03-18 | 2020-07-17 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
CN112699067A (zh) * | 2021-01-04 | 2021-04-23 | 瑞芯微电子股份有限公司 | 一种指令寻址方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101034412A (zh) * | 2007-04-02 | 2007-09-12 | 华为技术有限公司 | 一种信息存储的方法、信息查找的方法及引擎装置 |
US20100287172A1 (en) * | 2009-05-11 | 2010-11-11 | Red Hat, Inc . | Federated Document Search by Keywords |
CN102147798A (zh) * | 2010-02-10 | 2011-08-10 | 华为技术有限公司 | 处理哈希查找冲突问题的方法和装置 |
CN102314485A (zh) * | 2011-07-27 | 2012-01-11 | 中国科学院计算机网络信息中心 | 哈希表添加、查找和删除方法及装置 |
-
2012
- 2012-12-27 CN CN201210579916.8A patent/CN103064948B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101034412A (zh) * | 2007-04-02 | 2007-09-12 | 华为技术有限公司 | 一种信息存储的方法、信息查找的方法及引擎装置 |
US20100287172A1 (en) * | 2009-05-11 | 2010-11-11 | Red Hat, Inc . | Federated Document Search by Keywords |
CN102147798A (zh) * | 2010-02-10 | 2011-08-10 | 华为技术有限公司 | 处理哈希查找冲突问题的方法和装置 |
CN102314485A (zh) * | 2011-07-27 | 2012-01-11 | 中国科学院计算机网络信息中心 | 哈希表添加、查找和删除方法及装置 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598194A (zh) * | 2014-12-09 | 2015-05-06 | 中国航空工业集团公司第六三一研究所 | 一种头尾指针链表存储器的初始化方法及电路 |
CN104598194B (zh) * | 2014-12-09 | 2017-10-24 | 中国航空工业集团公司第六三一研究所 | 一种头尾指针链表存储器的初始化方法及电路 |
WO2018099107A1 (zh) * | 2016-12-02 | 2018-06-07 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置、计算机存储介质 |
CN108153757A (zh) * | 2016-12-02 | 2018-06-12 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置 |
CN108153757B (zh) * | 2016-12-02 | 2020-04-03 | 深圳市中兴微电子技术有限公司 | 一种哈希表管理的方法和装置 |
CN110765156A (zh) * | 2018-07-09 | 2020-02-07 | 慧荣科技股份有限公司 | 链表搜索装置及方法 |
CN111046074A (zh) * | 2019-12-13 | 2020-04-21 | 北京百度网讯科技有限公司 | 流式数据处理方法、装置、设备和介质 |
CN111046074B (zh) * | 2019-12-13 | 2023-09-01 | 北京百度网讯科技有限公司 | 流式数据处理方法、装置、设备和介质 |
CN111431806A (zh) * | 2020-03-18 | 2020-07-17 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
CN111431806B (zh) * | 2020-03-18 | 2022-07-08 | 北京京安佳新技术有限公司 | 一种流表处理方法和设备 |
CN112699067A (zh) * | 2021-01-04 | 2021-04-23 | 瑞芯微电子股份有限公司 | 一种指令寻址方法及装置 |
CN112699067B (zh) * | 2021-01-04 | 2024-05-14 | 瑞芯微电子股份有限公司 | 一种指令寻址方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103064948B (zh) | 2015-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103064948B (zh) | 基于散列链表的内容寻址方法及相应的存储器电路 | |
TWI409695B (zh) | 用於配置裝置之系統、方法及裝置 | |
CN100541455C (zh) | 使用请求调页技术的系统中减少页替换时间的方法和设备 | |
CN101606130B (zh) | 在处理器系统的指令级使能资源分配标识的方法和装置 | |
CN102662869B (zh) | 虚拟机中的内存访问方法和装置及查找器 | |
CN101334758B (zh) | 用于嵌入式系统扩展存储空间的装置和方法 | |
CN100392623C (zh) | 用于从地址高速缓存去除条目的方法和设备 | |
CN108369562A (zh) | 具有增强型访问调度器的智能编码存储器架构 | |
CN114546295B (zh) | 一种基于zns固态硬盘的智能写分配方法和装置 | |
CN103164490A (zh) | 一种不固定长度数据的高效存储实现方法和装置 | |
CN104871144A (zh) | 使用虚拟地址到物理地址跨页缓冲器的推测性寻址 | |
CN104424128A (zh) | 变长指令字处理器系统和方法 | |
CN108959149A (zh) | 一种基于共享内存的多核处理器交互总线设计方法 | |
EP2535820A2 (en) | Method and apparatus for data access by a reprogrammable circuit module | |
CN114385089B (zh) | 一种基于交叉编址的动态bank存储方法、装置及电子设备 | |
CN115938428A (zh) | 用于动态随机存储器的控制器、控制方法、电子设备 | |
CN104142979B (zh) | 一种实现rfid标签存储管理的索引方法 | |
CN108595917A (zh) | 基于fpga的面向基因测序串匹配算法的加速平台及设计方法 | |
CN102663051B (zh) | 搜索内容可寻址存储器的方法和系统 | |
CN102360339A (zh) | 一种提高tlb利用效率的方法 | |
CN112269784A (zh) | 一种基于硬件实现的哈希表结构以及插入、查询和删除方法 | |
CN100527109C (zh) | 存储器访问装置 | |
CN100359491C (zh) | 基于mcs-51架构的16m字节数据存储器寻址空间扩充方法 | |
CN115033500A (zh) | 缓存系统模拟方法、装置、设备和存储介质 | |
CN101819608B (zh) | 一种微处理器指令级随机验证中加速取指的装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20221208 Address after: Room S303, Innovation Building, No. 25, Gaoxin 1st Road, Xi'an, Shaanxi 710075 Patentee after: XI'AN XIANGTENG MICROELECTRONICS TECHNOLOGY Co.,Ltd. Address before: 710068 No. 156 Taibai North Road, Shaanxi, Xi'an Patentee before: 631ST Research Institute OF AVIC |
|
TR01 | Transfer of patent right |