1.CAM介绍

标准存储器RAM查找方式为通过地址查找相应地址的数据,而CAM为通过数据查找相应地址,实现了更快的数据搜索。
CAM中,每个地址只能存储唯一数据,但特定的数据可以存在多个地址中。
当写入发现地址冲突时,删除原来的旧数据。

2.实现方法

共两种主流实现方法,基于SRL16E和基于RAM实现,本文主要介绍基于RAM的实现方式。
基于RAM的实现思路其实就是将地址与内容互换,将内容作为地址,将地址转换为独热码表示的内容存于RAM(这是为了保证同一数据内容可以同时存在不同地址中,同时保证可以进行CAM并联),假设原RAM位宽为10,深度为32,则相应CAM需要深度为210=1024,宽度也为32。
如下图所示为CAM存储结构。
在这里插入图片描述
此图中,CAM数据000存储在地址1
CAM数据000存储在地址1
CAM数据001存储在地址5
CAM数据011存储在地址3
CAM数据100存储在地址0和7
CAM数据110存储在地址2
CAM数据010、111、101没有被存储在任何地址
CAM地址4、6没有存储任何数据。
注意,CAM的存储宽度和深度不是位宽和位深,CAM输入端口位宽为1,位深为总数据量,这样的目的是当地址为{RAM数据,RAM地址}时,便可实现定位功能。举例说明,在上图中,CAM中在地址{000,1}的数据为1’b1时即可表示RAM中地址1存储数据为000,CAM中在地址{001,5}的数据为1’b1时即可表示RAM中地址5存储数据为001。通过这种方式即可实现数据与地址的互换。

2.1电路实现

电路主要有两个RAM实现,分别是RraseRAM和RAMB,其中RraseRAM存储内容即为查找表内容,RAMB存储为CAM。
【注】RraseRAM需用Distribute RAM实现,此处目的应该是为了在输入地址后,能立刻(类似组合逻辑)输出相应数据。
在本例中,RraseRAM为10x32位RAM,其地址位宽为5,数据位宽为10;则相应CAM为32x1024,即宽32,深1024,RAM输入端口为1x32k(即数据位宽为1,位深为32x1024,因此每次只写一位)
本例中,10bit是数据宽度,32为查找表深度。
在这里插入图片描述
在这里插入图片描述

2.2 写入操作

写入操作共需两个时钟周期。第一周期为擦除操作,目的是擦除原RAM地址对应数据在CAM中的存储,方法是将5位的写入地址输入RraseRAM查找相应10位的数据,再将查得的数据作为CAM地址高位(定位CAM行,也就是CAM地址),写入地址作为CAM地址低位(定位CAM列,也就是CAM数据),CAM输入为0,即可将原CAM数据抹去;第二周期为写入操作,RraseRAM中将写入地址和数据正常输入,CAM中在地址{写入数据,写入地址}写入1‘b1即可。

2.3 读出操作

读取端口位宽和位深与存储器宽度和深度相同,只需将所查数据输入地址端口即可得到独热码的地址信息。

3. CAM存储扩展

3.1 深度扩展

为了实现大于32位的CAM深度,多个基本CAM块被并行组合。如下如所示CAM大小为128位深,10位宽。
在这里插入图片描述

3.2 宽度扩展

为了实现大于10的CAM宽度,需要扩展输入信号DIN的宽度,同时在输出为增加与门将CAM连接,保证高低数据位全部匹配后再输出。
(此时可不可以一个数据多个地址呢?可以,DIN不同,CAM中行不同,但ADDR相同,因此CAM中列相同)
在这里插入图片描述

4. 总结

CAM的实现基于RAM一个非常重要的性质,就是只要保证2地址位宽*2数据位宽=存储量,那么输入输出端口的地址位宽和数据位宽可以随意改变。
此文档根据xilinx开源文档完成,若有错误,欢迎讨论。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐