1.1 地址表輸入調(diào)整(fifo_in)
Fifo_in模塊完成兩種操作,對輸入的MAC地址求解hashing索引值(xx_mac_index);間隔4s產(chǎn)生地址表更新信號(upd_en),更新信號為高電平有效,持續(xù)時間由地址表的深度決定,遍歷地址表,一個時鐘周期處理一個表項。
Hashing算法:為了快速的存取地址表項,采用hashing算法[6]建立地址表項索引值與實際MAC地址之間的對應(yīng)關(guān)系(每個MAC地址只能對應(yīng)一個索引值,但是每個索引值有可能對應(yīng)多個MAC地址,即發(fā)生了地址沖突)。
使用復(fù)雜的hashing算法,會延長計算索引的時間,降低地址表的查找速度,增加交換機的包轉(zhuǎn)發(fā)時延。
在交換控制芯片設(shè)計中本項目算法使用CRC-CCITTD多項式 為hashing函數(shù),48位MAC地址由CRC[7-8]校驗方法后的結(jié)果通過hashing函數(shù)求得16位余數(shù),取結(jié)果16位余數(shù)中11個比特用于2KB地址表項索引值。Hashing函數(shù)計算的狀態(tài)機如圖2所示。
?
交換機MAC層容納的地址表大小是有限的,理論上實際的物理地址有2的48次方個,地址表只能記錄其中一個很小的子集,因此hashing函數(shù)不可避免地將不同的MAC地址映射到相同的地址表項索引值。如果以太網(wǎng)中地址表項索引值與MAC地址存在多對一的情況,就是發(fā)生了“地址沖突”。地址沖突的存在也說明總有部分MAC地址丟失,不能被交換機學(xué)習(xí)到。地址沖突的解決方法在1.2中予以實現(xiàn)。
?
地址表組織結(jié)構(gòu)如圖3。圖3左邊列出的是地址表RAM 中每個hashing桶內(nèi)表項0在RAM 中的地址。在開始地址存儲和查找時,通過CRC校驗得到的索引值指向的hashing桶內(nèi)表項0與表項1被讀出,通過對MAC地址域進行比較確定匹配的表項,得到轉(zhuǎn)發(fā)端口的信息。
1.2 地址表處理機制的實現(xiàn)方法(AddrList_Proc)
1.2.1 地址學(xué)習(xí)和查找的實現(xiàn)
以太網(wǎng)幀結(jié)構(gòu)中的源地址(sa_mac)用于地址學(xué)習(xí)。目的地址(da_mac)用于地址查找。
對于較大吞吐量的交換芯片,能做到平均時間復(fù)雜度滿足線性的學(xué)習(xí)和查找。學(xué)習(xí)和查找采用hashing算法,發(fā)生碰撞采用hashing算法,碰撞后采用相鄰空間開放定址法(open?。幔洌洌颍澹螅螅椋睿纭。瑁幔螅瑁椋睿纾郏梗保埃?。
學(xué)習(xí)的過程如下:
(1)根據(jù)hashing索引值sa_index,檢索MAC 地址表。
(2)表項中Valid字段若為1代表該表項已占用,轉(zhuǎn)(3),否則表項空閑,轉(zhuǎn)(7)。
(3)表項內(nèi)容中的MAC地址與sa_mac進行比較,若相同I_Find置1,轉(zhuǎn)(7),否則轉(zhuǎn)(4),此時發(fā)生地址沖突。
(4)sa_index+1表項中Valid字段若為1代表此處表項已占用,轉(zhuǎn)(5),否則表項空閑轉(zhuǎn)(7)。
(5)表項內(nèi)容中的MAC地址與sa_mac進行比較,若相同I_Find置1,轉(zhuǎn)(7),否則轉(zhuǎn)(6),此時發(fā)生地址沖突。
(6)此時有超過兩個不同的MAC地址映射同一索引值,并且先到的寫入sa_index和sa_index+1處。后面到達的MAC地址覆蓋掉sa_index處表項,完成一次學(xué)習(xí)。
(7)寫入該位置,Valid置1,Age置1,完成一次學(xué)習(xí)。
查找的過程如下:
(1)判斷是不是廣播包,若是轉(zhuǎn)(10),否則轉(zhuǎn)(2)。
(2)根據(jù)hashing索引值da_index,檢索MAC 地址表。
評論