(杭州電子科技大學(xué)電子信息學(xué)院,浙江 杭州310018)
內(nèi)容可尋址存儲器(Content Addressable Memory,CAM)是一種特殊的存儲器件,不僅能存儲數(shù)據(jù),而且能將輸入數(shù)據(jù)與內(nèi)部所有數(shù)據(jù)進(jìn)行比較,從而判定輸入數(shù)據(jù)是否已經(jīng)存在于存儲器內(nèi)。CAM可以在單個時鐘周期內(nèi)并行完成所有比較查找運算,相比其他基于硬件或軟件的搜索系統(tǒng),具有更高的查找效率,因而被廣泛運用于網(wǎng)絡(luò)協(xié)議包分類與發(fā)送、數(shù)據(jù)包內(nèi)容檢測過濾、高速緩存和數(shù)據(jù)加密等眾多領(lǐng)域[1]。傳統(tǒng)CAM的設(shè)計與實現(xiàn)通常依靠專用集成電路技術(shù)(Application Specific Integrated Circuit,ASIC),相關(guān)產(chǎn)品具有容量大、集成度高、速度快等優(yōu)點,但也存在價格昂貴、功耗偏高等不足[1-3],這顯然不利于在更多的場合靈活地應(yīng)用CAM的強(qiáng)大功能。近年來,多種基于現(xiàn)場可編程邏輯陣列(Field Programmable Logic Array,F(xiàn)PGA)的CAM 等效功能塊構(gòu)建方案[4-6]出現(xiàn)。大多數(shù)方案成功模擬實現(xiàn)了傳統(tǒng)CAM 器件的高速查找特性,但在實用中卻普遍存在片內(nèi)資源開銷過多的缺點。本文在一種現(xiàn)有電路[5]的基礎(chǔ)上進(jìn)行了改進(jìn),提出了一種新穎的等效邏輯電路。電路簡潔易行,可根據(jù)實際存儲的單位數(shù)據(jù)字長和數(shù)據(jù)控制精度調(diào)整數(shù)據(jù)寄存器與狀態(tài)寄存器的組成比例,從而在實現(xiàn)CAM 功能的同時減少邏輯資源的開銷。
單個CAM 單元實現(xiàn)兩種功能:1)存儲1 bit 預(yù)設(shè)數(shù)據(jù);2)將當(dāng)前輸入數(shù)據(jù)與預(yù)設(shè)數(shù)據(jù)進(jìn)行比較并輸出比較結(jié)果。在傳統(tǒng)電路模型中,一般使用單個SRAM 單元實現(xiàn)功能1,再在此基礎(chǔ)上額外添加若干晶體管實現(xiàn)功能2,如圖1所示。圖1中,兩個背靠背的反相器即構(gòu)成了一個SRAM 存儲單元,晶體管M1和M3以及晶體管M2和M4 分別構(gòu)成了兩條互補的查找電路,分別用于查找存儲在SRAM 單元中的數(shù)據(jù)“1”和數(shù)據(jù)“0”。查找成功時,數(shù)據(jù)匹配線ML為高電平,反之則為電平。由于SRAM 中預(yù)設(shè)存儲數(shù)據(jù)非‘0’即‘1’,該類CAM 單元總處于兩種狀態(tài)之一,因此通常被稱為二態(tài)內(nèi)容可尋址存儲器(Binary Content Addressable Memory,BCAM)。BCAM 只能存儲查找固定長度的數(shù)據(jù),為了避免為同時存儲不同長度的數(shù)據(jù)而反復(fù)搭建不同長度規(guī)格的BCAM 電路,可以使用長度規(guī)格統(tǒng)一的三態(tài)內(nèi)容可尋址存儲器(Ternary Content Addressable Memory,TCAM)。TCAM 相比BCAM,優(yōu)勢在于多出一個“無關(guān)”狀態(tài),即從“二態(tài)”變?yōu)榱恕叭龖B(tài)”。被設(shè)置為“無關(guān)”狀態(tài)的TCAM 單元不會對最終匹配結(jié)果產(chǎn)生影響,因此通過靈活調(diào)整設(shè)置不同TCAM 單元滿足對不同長度數(shù)據(jù)的存儲與查找需求。典型的TCAM 單元結(jié)構(gòu)電路如圖2所示。圖2中,當(dāng)兩個SRAM 單元中存儲數(shù)據(jù)不一致時,分別表示BCAM 中已存在的兩種數(shù)據(jù)存儲狀態(tài);當(dāng)兩個數(shù)據(jù)同時為“1”時,表示TCAM 特有的“無關(guān)”狀態(tài);不允許兩個數(shù)據(jù)同時為“0”。
圖1 BCAM 單元傳統(tǒng)結(jié)構(gòu)電路
圖2 TCAM 單元傳統(tǒng)結(jié)構(gòu)電路
本文提出一種CAM 基于FPGA的等效邏輯電路,電路在實現(xiàn)傳統(tǒng)TCAM 單元邏輯功能的同時,根據(jù)不同數(shù)據(jù)單位字長和數(shù)據(jù)控制精度要求優(yōu)化對寄存器和組合邏輯函數(shù)等片內(nèi)邏輯資源的開銷,從而獲得更高的資源利用效率。
等效邏輯電路主要包含:預(yù)存數(shù)據(jù)寄存器組、“無關(guān)”狀態(tài)寄存器、“已使用”狀態(tài)寄存器、數(shù)據(jù)比較器、掩碼電路和查找結(jié)果輸出寄存器。預(yù)存數(shù)據(jù)寄存器組的中寄存器的數(shù)量等于單位數(shù)據(jù)的字長,還可按照實際需求進(jìn)行調(diào)整;數(shù)據(jù)比較器用于判定輸入待查找數(shù)據(jù)和預(yù)存數(shù)據(jù)的是否相同;“無關(guān)”狀態(tài)寄存器指示該CAM 單元的數(shù)據(jù)寄存器中相應(yīng)數(shù)據(jù)段是否處于“無關(guān)”狀態(tài),其中數(shù)據(jù)為“1”表示處于“無關(guān)”狀態(tài),“0”表示處于“相關(guān)”狀態(tài);“已使用”狀態(tài)寄存器記錄指示當(dāng)前CAM 單元是否已被啟用,即是否被寫入了有效數(shù)據(jù),從而避免將未啟用單元中的初始數(shù)據(jù)誤認(rèn)為有效數(shù)據(jù),進(jìn)而導(dǎo)致查找錯誤;掩碼電路對數(shù)據(jù)比較器的輸出和“無關(guān)”狀態(tài)寄存器中內(nèi)容進(jìn)行求“或”運算,再將結(jié)果與“已使用”狀態(tài)寄存器中內(nèi)容求“與”,只有在當(dāng)前CAM 單元已被啟用,且輸入數(shù)據(jù)與預(yù)設(shè)數(shù)據(jù)完全相同,或者不同部分已被設(shè)為“無關(guān)”,才會計算得出匹配成功的結(jié)果;最后的計算結(jié)果經(jīng)查找結(jié)果輸出寄存器寄存后,作為該CAM 單元的最終查找匹配結(jié)果輸出。
相比文獻(xiàn)[5]中的電路,新電路的改進(jìn)在于數(shù)據(jù)寄存器與“無關(guān)”狀態(tài)寄存器的數(shù)量比值不再被固定為1∶1,而是可以根據(jù)實際應(yīng)用需求靈活調(diào)整,該比值被稱為“無關(guān)”狀態(tài)寄存器的控制粒度。控制粒度越大,表示單個“無關(guān)”狀態(tài)寄存器可以控制更多的數(shù)據(jù)寄存器,從而減少“無關(guān)”狀態(tài)寄存器的數(shù)量?,F(xiàn)有電路的控制粒度固定為1,每個“無關(guān)”狀態(tài)寄存器只控制一個數(shù)據(jù)寄存器,控制精度達(dá)到最高,但卻未必是所有應(yīng)用都需要的。例如使用CAM 查找字符串,由ASCII 碼描述的單個字符的字長為8 bit,一旦將CAM 中某字符串的一個字符設(shè)置為“無關(guān)”,則相應(yīng)的8 bit數(shù)據(jù)總是同時受到掩蔽,因此完成上述功能只需使用一個“無關(guān)”狀態(tài)寄存器??梢允褂每刂屏6葹?的新CAM 單元實現(xiàn)相同的功能,每個CAM 單元中,“無關(guān)”狀態(tài)寄存器的數(shù)量只相當(dāng)于現(xiàn)有單元電路中數(shù)量的1/8。圖3中顯示了一個經(jīng)綜合后生成的控制粒度為8,單位數(shù)據(jù)字?jǐn)?shù)為4的新型CAM 單元,新電路中每1 bit“無關(guān)”狀態(tài)碼都可以通過或門(虛線框內(nèi)所示)掩蔽8 bit數(shù)據(jù)碼的比較結(jié)果,而現(xiàn)有電路中則只能掩蔽1 bit數(shù)據(jù)碼的比較結(jié)果,因此節(jié)省了邏輯資源開銷。
圖3 新型CAM 單元實例
綜合生成1個控制粒度為n,單位數(shù)據(jù)字?jǐn)?shù)為k的新型CAM 單元所需的寄存器總量Areg為:
組合邏輯函數(shù)的開銷總量Alut可通過以下經(jīng)驗歸納公式得到近似估算:
首先執(zhí)行電路復(fù)位。執(zhí)行寫入操作時,讀寫模式使能端wren 置為高電平,使能預(yù)存數(shù)據(jù)寄存器組、“無關(guān)”狀態(tài)寄存器和“已使用”狀態(tài)寄存器,然后在下一個時鐘上升沿到來時通過預(yù)存數(shù)據(jù)輸入端wdata和“無關(guān)”狀態(tài)設(shè)置端dncare 對二者中數(shù)據(jù)進(jìn)行更新,“已使用”狀態(tài)寄存器中寫入“1”,表示該CAM 單元以得到使用,其中存儲的數(shù)據(jù)有效;同時通過掩碼電路中的多路選擇器,將查找匹配結(jié)果鎖定在低電平,表示未執(zhí)行查找操作;執(zhí)行查找操作時,wren 置為低電平,允許掩碼電路正常工作,然后從查找數(shù)據(jù)輸入端sdata 寫入數(shù)據(jù),在下一個時鐘上升沿到來時,查找匹配結(jié)果輸出端mhit 輸出相應(yīng)的查找結(jié)果,高、低電平分別表示“找到”和“未找到”。對圖3中電路執(zhí)行寫入操作和查找操作的功能時序如圖4所示。其中,執(zhí)行寫入操作1時未將CAM 單元中任何數(shù)據(jù)段置為“無關(guān)”狀態(tài),因此執(zhí)行查找操作1時CAM 單元報告只能找到數(shù)據(jù)“abcd”而未找到數(shù)據(jù)“abce”;執(zhí)行寫入操作2時將CAM 單元中最后8 bit數(shù)據(jù)置為“無關(guān)”狀態(tài),因此執(zhí)行查找操作2時CAM 單元報告既可以找到數(shù)據(jù)“abcd”也可以找到數(shù)據(jù)“abce”。
圖4 實例CAM 單元的操作功能時序圖
完整的CAM 功能模塊主要包括:CAM 單元矩陣、預(yù)設(shè)數(shù)據(jù)寄存器、預(yù)設(shè)地址譯碼器、命中信號生成器和查找地址編碼器。CAM 單元矩陣用于存儲特定規(guī)格的預(yù)設(shè)數(shù)據(jù),它的列數(shù)即為預(yù)設(shè)單位數(shù)據(jù)的字長,行數(shù)即為預(yù)設(shè)單位數(shù)據(jù)的最大可能存儲量,行內(nèi)CAM 單元的數(shù)據(jù)匹配線級聯(lián),行內(nèi)所有CAM 單元的同時匹配成功才等價于當(dāng)前完整輸入數(shù)據(jù)的匹配成功,行間CAM 單元并聯(lián),以實現(xiàn)對所有行的并行查找;數(shù)據(jù)寄存器用于在預(yù)設(shè)數(shù)據(jù)和查找數(shù)據(jù)時暫時寄存輸入內(nèi)容;預(yù)設(shè)地址譯碼器工作于預(yù)設(shè)數(shù)據(jù)階段,它將輸入的二進(jìn)制地址轉(zhuǎn)變?yōu)楠殶岽a,然后激活相應(yīng)的CAM 單元行,使之接受數(shù)據(jù)寫入操作;命中信號生成器和查找地址編碼器都工作于數(shù)據(jù)查找階段,前者指示當(dāng)前輸入內(nèi)容是否得到匹配,后者負(fù)責(zé)將CAM 單元矩陣輸出的獨熱碼轉(zhuǎn)變?yōu)槎M(jìn)制地址輸出。完整的CAM 模塊圖如圖5所示。
圖5 完整的m×n CAM 模塊圖
為了分析構(gòu)建本文提出的新電路所需的資源開銷及其性能,使用Altera 公司出品的Quartus II 12.0軟件在該公司生產(chǎn)的FPGA 芯片EP2C35F484C8 上構(gòu)建規(guī)格為m×128的完整CAM 模塊,其中m 分別取值為8 bit、16 bit、24 bit和32 bit,“無關(guān)”狀態(tài)寄存器的控制粒度g 分別取值為2、4、8。同時,使用文獻(xiàn)[5]的方法,在同一芯片上構(gòu)建相同規(guī)格的CAM 模塊以供比較。電路分析和綜合的過程中選擇的優(yōu)化策略都為“平衡”。不同規(guī)模下寄存器、組合邏輯函數(shù)和邏輯單元(Logic element,LE)等3種資源的開銷對比顯示在圖6、圖7和圖8中,最高工作時鐘頻率的比較則記錄在表1中。
通過分析上述圖表中的數(shù)據(jù)可知,實現(xiàn)相同規(guī)格的CAM 模塊,新電路的邏輯資源消耗明顯少于現(xiàn)有電路,且隨著控制粒度g的增大,優(yōu)勢愈發(fā)明顯。此外,經(jīng)過相同強(qiáng)度的時鐘約束優(yōu)化,新電路的最高工作時鐘頻率也普遍高于現(xiàn)有電路,且不會隨著g值變化出現(xiàn)較大的起伏,具有較好的穩(wěn)定性。當(dāng)單位數(shù)據(jù)字長為32 且g=8時,新電路的最高工作時鐘頻率為152.74 MHz,電路的最高吞吐量可達(dá)到4.9 Gbps,足以滿足大部分應(yīng)用需求。上述數(shù)據(jù)分析表明,新電路特別適合于存儲和查找具有較大單位數(shù)據(jù)字長且所需控制精度不高的數(shù)據(jù),如ASCII 字符和字符串。
圖6 寄存器開銷對比
圖7 組合邏輯函數(shù)開銷對比
圖8 邏輯單元開銷對比
表1 最高工作時鐘頻率比較
本文提出了一種內(nèi)容可尋址存儲器的等效邏輯電路。本電路可以根據(jù)實際數(shù)據(jù)字長需求靈活地調(diào)節(jié)基本單元的電路組成,在實現(xiàn)CAM 功能的同時顯著減少寄存器等邏輯資源的開銷,提高FPGA 片內(nèi)邏輯資源的使用效率,同時還可以運行在較高的工作頻率,在較高的工作頻率,因此具有一定的工程實用價值。
[1]Kostas P,Ali S.Content-addressable memory (CAM)circuits and architectures:a tutorial and survey[J].IEEE Journal of Solid-State Circuits,2006,41(3):712-727.
[2]Yang B D,Lee Y K,Sung S W,et al.A low power content addressable memory using low swing search lines[J].IEEE Transactions on Circuits and Systems,2011,58(12):2 849-2 858.
[3]Igor A,Travis H,Daniel D,et al.A 32 nm 0.58-fJ/bit/search 1-GHz tenary content addressable memory compiler using silicon-aware early predict late-correct sensing with embedded deep-trench capacitor noise mitigation[J].IEEE Journal of Solid-State Circuits,2013,48(4):932-939.
[4]Brelet J L.Using Block RAM for High Performance Read/Write CAMs[EB/OL].http://www.xilinx.com/support/documentation/application_notes/xapp204.pdf,2000-05-02.
[5]Altera Corporation.Advanced Synthesis Cookbook[EB/OL].www.altera.com/literature/manual/stx_cookbook.pdf,2011-07-01.
[6]Zahid U,Kim I,Sanghyeon B.Hybrid Partitioned SRAM-based ternary content addressable memory[J].IEEE Transactions on Circuits and Systems,2012,59(12):2 969-2 979.