內容可定址記憶體(content-addressable memory, CAM) 是一種特殊類型的電腦記憶體，用於某些超高速搜尋應用程式。它也稱為關聯記憶體或關聯儲存，將輸入搜尋資料與儲存資料表進行比較，並返回匹配資料的位址。 

資料字辨識單元是由 Dudley Allen Buck 達德利・艾倫・巴克於 1955 年提出的。

CAM 經常用於網路裝置中，它可以加速轉發資訊庫和路由表操作。這種關聯記憶體也用於高速緩衝記憶體。在相聯高速緩衝記憶體中，位址和內容並排儲存。當位址匹配時，從快取中取出相應的內容。



硬體相聯陣列

標準電腦記憶體隨機存取記憶體 (RAM) 工作方式為使用者提供記憶體位址，RAM 返回儲存在該位址的資料字。而 CAM 與 RAM 不同。CAM 的設計使得使用者提供資料字，而 CAM 搜尋其整個記憶體，檢視該資料字是否存在。如果找到資料字，CAM 會返回一個包含一個或多個找到該字的儲存位址的列表。因此，CAM 是軟體術語中稱為關聯陣列的硬體體現。



標準

CAM 和其他網路搜尋引擎的主要介面定義在網路處理器論壇開發的稱為 Look-Aside Interface（LA-1 和 LA-1B）的互操作性協定中指定。Integrated Device Technology 、賽普拉斯半導體 、IBM、博通有限等公司已經生產了許多符合互操作性協定的裝置。2007 年 12 月 11 日，OIF 發布了串行後備（SLA）介面協定。



半導體實現

在資料搜尋應用程式中，CAM 比 RAM 快得多。然而，CAM 存在成本劣勢。與具有簡單儲存單元的 RAM 晶片不同，完全並列 CAM 中的每個單獨的儲存位都必須有自己的比較電路，以檢測儲存位和輸入位之間的匹配。此外，必須組合資料字中每個單元的匹配輸出以產生完整的資料字匹配訊號。額外的電路增加了 CAM 晶片的物理尺寸和製造成本。額外的電路還增加了功耗，因為每個比較電路在每個時鐘周期都處於活動狀態。因此，CAM 僅適合於無法使用成本較低的方法實現搜尋速度的專用應用場景。一個成功的早期實施是通用關聯處理器 IC 和系統。

在 2000 年代初期，包括賽普拉斯半導體 、IDT、Netlogic 、Sibercore 和 MOSAID 在內的幾家半導體公司推出了針對網路應用的 CAM 產品。這些產品包裝為網路搜尋引擎（NSE）、網路搜尋加速器（NSA）和基於知識處理器 （KBP），但本質上是具有針對網路最佳化的專用介面和功能的 CAM。目前， 博通有限提供多個 KBP 家族。



替代實現

為了在速度、記憶體大小和成本之間實現平衡，一些實現通過在硬體中使用標準樹搜尋或雜湊設計來類比 CAM 的功能，使用複製或管線等硬體技巧來加速有效效能。這些設計通常用於路由器。呂勒奧演算法是 Internet 路由表中所需的最長字首匹配搜尋的有效實現。



三元 CAM

二進位 CAM 是最簡單的 CAM 類型，使用完全由 1 與 0 組成的搜尋詞。 三元 CAM (Ternary CAM, TCAM) 允許在儲存的字中對一個或多個位元一種使用 _X_ 或 _無關_ 的 三值邏輯 進行搜尋， 因此增強了搜尋的靈活性。

例如，三元 CAM 中儲存的字 「10XX0」 與 「10000」、「10010」、「10100」、「10110」 這四個搜尋詞均能匹配。 與二進位 CAM 相比，由於搜尋靈活性的增加帶來了額外的成本，因為內部儲存單元現在必須編碼 3 種可能的狀態，而不是二進位 CAM 的 2 種。 這些附加狀態通常通過向每個儲存單元添加遮罩位（「相關」或「無關」位）來實現。



應用範例

可定址內容記憶體通常用於電腦網路裝置。例如，當網路交換機從其埠之一接收資料框，它會使用影格的源 MAC 位址和接收它的埠更新內部表，然後它在表中尋找目標 MAC 位址以確定影格需要轉發到哪個埠，並在該埠上將其傳送出去。MAC 位址表通常使用二元 CAM 實現，因此可以非常快速地找到目標埠，從而減少交換機的延遲。

三元 CAM 通常用於網路路由器，其中每個位址都有兩部分：網路字首（大小取決於子網路組態），以及占據其餘位的主機位址。每個子網路都有一個網路遮罩，用於指定位址的哪些位是網路字首，哪些位是主機位址。路由是通過查詢由路由器維護的路由表來完成的，該表包含每個已知的目的地網路字首、相關的網路遮罩以及將封包路由到該目的地所需的資訊。在簡單的軟體實現中，路由器將要路由的封包的目標位址與路由表中的每個條目進行比較，對網路遮罩執行按位元與運算，並將其與網路字首進行比較。如果相等，則使用相應的路由資訊轉發封包。路由表使用三元 CAM 使尋找過程非常高效。位址使用不關心位址的主機部分儲存，因此在 CAM 中尋找目標位址會立即檢索正確的路由條目；封鎖和比較都是由 CAM 硬體完成的。如果（a）條目按網路遮罩長度遞減的順序儲存，並且（b）硬體僅返回第一個匹配條目，則此方法有效；因此，使用具有最長網路遮罩的匹配（最長字首匹配）。 

CAM 的其他應用包括：


* 全相聯快取控制器和轉譯後備緩衝區

* 資料庫引擎

* 資料壓縮硬體

* 人工神經網路

* 入侵防禦系統

* 網路處理器

* 一些客製化電腦，如固特異 STARAN ，使用 CAM 實現。



參見


* 內容定址網路

* 內容定址並列處理器

* 內容定址儲存

* 稀疏分散式記憶體

* 元組空間



參考資料



參考書目


* Anargyros Krikelis, Charles C. Weems (editors) (1997). _Associative Processing and Processors_, IEEE Computer Science Press. ISBN 0-8186-7661-2ISBN 0-8186-7661-2

* 6823434

* Pagiamtis, K.; Sheikholeslami, A. Content-Addressable Memory (CAM) Circuits and Architectures: A Tutorial and Survey (PDF). IEEE Journal of Solid-State Circuits. 2006, 41 (3): 712–727 [2022-12-23]. Bibcode:2006IJSSC..41..712P. doi:10.1109/JSSC.2005.864128. （原始內容存檔 (PDF) 於 2022-12-23）.

* Stormon, C.D.; Troullinos, N.B.; Saleh, E.M.; Chavan, A.V.; Brule, M.R.; Oldfield, J.V.; A general-purpose CMOS associative processor IC and system, Coherent Research Inc., East Syracuse, NY, USA, IEEE Micro, Dec. 1992, Volume: 12 Issue:6.

* TRW Computer Division. (1963). _First interim report on optimum utilization of computers and computing techniques in shipboard weapons control systems_. (BuWeps-Project RM1004 M88-3U1). Alexandria, Virginia:Defence Documentation Center for Scientific and Technical Information.



外部連結


* CAM Primer （頁面存檔備份，存於網際網路檔案館）

* Arithmetic Processing using Associative memory