CAM(Content ADDRessable Memory,內容可尋址存儲器)是一種特殊的存儲陣列。它通過(guò)將輸入數據與CAM中存儲的所有數據項同時(shí)進(jìn)行比較,迅速判斷出輸入數據是否與CAM中的存儲數據項相匹配,并給出匹配數據項的對應地址和匹配信息。CAM以其高速查找、大容量等特點(diǎn)而被廣泛地應用于電訊、網(wǎng)絡(luò )等領(lǐng)域。 本文介紹一種用Verilog HDL設計CAM的方案。該方案以移位寄存器為核心,具有可重新置改變字長(cháng)、易于擴展、匹配查找速度快等特點(diǎn)。 1 CAM功能描述 CAM的基本框圖如圖1所示。 與RAM相似,CAM是將數據項存儲在一個(gè)陣列中。每個(gè)數據項的位數叫做字寬,CAM中所有數據項的條數叫做CAM的深度。通過(guò)字寬和深度可以表征CAM中容量。 在寫(xiě)CAM模式(配置)時(shí),WRITE_E信號有效,MATCH_E信號無(wú)效,此時(shí)通過(guò)地址線(xiàn)ADDR選擇DATA_IN輸入的數據將要被寫(xiě)放哪一個(gè)單元;在讀CAM模式(查找匹配)時(shí),WRITE_E信號無(wú)效,MATCH_E信號有效,CAM將不使用地址線(xiàn),而是直接將DATA_IN讀入的數據與CAM中存儲的各條數據項進(jìn)行并行比較。如果CAM中含有與此時(shí)輸入數據相匹配的存儲數據項,CAM將從MATCH_ADDR輸出此存儲數據項的地址,并且通過(guò)MATH_OK輸出匹配成功的信息。在查找匹配模式時(shí),由于CAM是將輸入數據與存儲數據項并行比較,所以速度極快。同時(shí),由于不需要通過(guò)地址線(xiàn)來(lái)尋址數據項,CAM將不受地址線(xiàn)寬度的限制,容易擴展。 2 基于移位寄存器的CAM的設計 為了說(shuō)明設計方案,以一個(gè)寬度為4位、深度為1的基本CAM存儲單元為例。利用這樣一個(gè)基本存儲單元,通過(guò)適當級聯(lián),可以構成任意字寬和深度的CAM。該基本單元采用一個(gè)16位的移位寄存器、一個(gè)4位的比較器,外加16位的計數器和一個(gè)"二選一"的選擇器構成。如圖2所示。 在寫(xiě)CAM模式時(shí),WRITE_E信號有效,DATA_IN輸入的是將要寫(xiě)入數據存儲項的4位數據。計數器進(jìn)行從"1111"到"0000"的減計數,并將計數輸出值與DATA_IN輸入值進(jìn)行比較。若二者相同,比較器輸出"1"到移位寄存器中;不同則輸出"0"到移位寄存器中。在16個(gè)時(shí)鐘周期之后,將完成DATA_IN輸入數據與計數器輸出的所有情況的比較。這樣,移位寄存器中將存入15個(gè)"0"和一個(gè)"1"。 在讀CAM模式時(shí),MATCH_IN為"1",此時(shí),DATA_IN輸入的數據直接送到移位寄存器的地址端,它將決定移位寄存器輸出其16個(gè)位中的哪一位。如果該位輸出"1",則表示此時(shí)DATA_IN與原來(lái)寫(xiě)入該單元的數據相同,即發(fā)生匹配;反之則輸出"0",表示無(wú)匹配項。 以上討論只是針對4位字寬的數據項的讀寫(xiě),而對于更長(cháng)字寬的數據項,必須進(jìn)行字寬擴展?捎枚鄠(gè)比較器和移位寄存器組成的存儲數據項并聯(lián)在一起,組成一個(gè)字結構,即把輸入的數據按每4位分為一組,每組對應一套比較器和移位寄存器,每組只產(chǎn)生一個(gè)最終的MTACH_OUT信號。例如,對于16位的數據項,就需要4組這樣的結構。這4組基本結構中的讀和寫(xiě)可以同時(shí)完成。只有4組都產(chǎn)生匹配信號,最終的MATCH_OUT輸出才有"1",表明讀入的16位DATA_IN數據與存儲的數據項匹配。 CAM只需要存儲多個(gè)數據項,因此需要多個(gè)字結構的深度擴展。將這些字結構中的比較器和移位寄存器分別組合在一起,構成比較器陣列和移位寄存器陣列。為了在寫(xiě)CAM時(shí)進(jìn)行寫(xiě)入數據的定位,還需要一個(gè)地址譯碼模塊來(lái)指出是對哪一個(gè)數據項進(jìn)行寫(xiě)操作。在讀CAM時(shí),得到輸入數據與各個(gè)存儲數據項的匹配信息之后,還要對這些匹配信息進(jìn)行編碼,得到最后要輸出的相匹配的存儲數據項的地址MATCH_ADDR和是否發(fā)生匹配的信息MATCH_OK。 完整的CAM結構框圖見(jiàn)圖3。 3 基于移位寄存器的CAM的Verilog HDL實(shí)現 硬件描述語(yǔ)言VerilogHDL是一種應用于電路設計的描述語(yǔ)言,具有行為級、寄存器傳輸級、邏輯門(mén)級和開(kāi)關(guān)級等多層次描述。它簡(jiǎn)單易讀,描述與工藝無(wú)關(guān),并且得到許多EDA工具的支持。利用Verilog HDL語(yǔ)言進(jìn)行電路設計可以大大節省設計時(shí)間和成本。 本設計以一個(gè)數據項字寬為16位、深度為8的CAM為例,進(jìn)行Verilog HDL設計,并利用Xilinx Virtex系列中XCV1000器件進(jìn)行綜合。綜合后的仿真分析表明,該方案是合理可行的。 圖4為匹配查找的時(shí)序仿真結果,CAM中預先放入了0019H,001AH,…,001DH五個(gè)數據。CLK為系統時(shí)鐘,DATA_IN為數據輸入,MATCH_ENABLE為讀CAM(查找)允許信號,GLOBAL_RST為全局清零信號,R_MATCH_ADDR為匹配地址輸出信號,R_MATCH_OK為是否發(fā)生匹配信號。從仿真波形可以看出,輸入數據經(jīng)過(guò)兩個(gè)時(shí)鐘周期,輸出匹配信息,包括是否匹配和相匹配的存儲數據項的地址。如果不匹配,是否匹配的信號為0,而輸出地址線(xiàn)不變。 本方案以移位寄存器設計CAM,在寫(xiě)模式下需要16個(gè)時(shí)鐘周期完成一個(gè)數據項的寫(xiě)入;讀模式僅需一個(gè)時(shí)鐘周期。它具有速度快、易于重新配置、易于擴展等特點(diǎn)。本方案中的CAM利用Xilinx Virtex系列器件實(shí)現,時(shí)鐘最高頻率可達80MHz以上。以本方案為基礎,擴展到32位、36位的實(shí)用化CAM已運用于網(wǎng)絡(luò )協(xié)處理器的仿真測試中,并取得了較好的效果。 |