本發(fā)明涉及集成電路
技術(shù)領(lǐng)域:
:,具體的說(shuō),是一種分布式動(dòng)態(tài)二層轉(zhuǎn)發(fā)表的維護(hù)方法。
背景技術(shù):
::二層轉(zhuǎn)發(fā)即網(wǎng)絡(luò)通信七層模型中的數(shù)據(jù)鏈路層轉(zhuǎn)發(fā)一般在集成電路芯片中完成,常見(jiàn)的二層轉(zhuǎn)發(fā)電路采用一個(gè)存儲(chǔ)器來(lái)實(shí)現(xiàn)轉(zhuǎn)發(fā)表的功能,同時(shí)采用一個(gè)哈希函數(shù)完成查詢信息與儲(chǔ)存器地址的轉(zhuǎn)換。哈希映射容易出現(xiàn)沖突,即兩個(gè)查詢信息被轉(zhuǎn)換到同一個(gè)存儲(chǔ)器地址。為了避免表項(xiàng)地址的沖突,一般在同一地址采用冗余的方式預(yù)留多個(gè)表項(xiàng),這就需要存儲(chǔ)器為同一個(gè)地址準(zhǔn)備多個(gè)存儲(chǔ)空間來(lái)減小沖突的影響,因此會(huì)造成存儲(chǔ)空間的浪費(fèi)。為了提高集成度,可以將二層轉(zhuǎn)發(fā)的功能采用fpga來(lái)實(shí)現(xiàn)。二層單播轉(zhuǎn)發(fā)功能的核心在于二層轉(zhuǎn)發(fā)表的維護(hù)與查詢,而在fpga的二層轉(zhuǎn)發(fā)功能實(shí)現(xiàn)中,出于成本以及電路板設(shè)計(jì)復(fù)雜度的考慮,往往采用fpga內(nèi)部的bram來(lái)實(shí)現(xiàn)轉(zhuǎn)發(fā)表,而bram在fpga內(nèi)部的資源是受限的,不能像外部存儲(chǔ)器那樣不用太關(guān)心冗余帶來(lái)的空間浪費(fèi)。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的在于提供一種分布式動(dòng)態(tài)二層轉(zhuǎn)發(fā)表的維護(hù)方法,用于解決現(xiàn)有技術(shù)中二層轉(zhuǎn)發(fā)電路中外部存儲(chǔ)器采用冗余的方式預(yù)留多個(gè)表項(xiàng)來(lái)減小哈希映射的沖突,從而導(dǎo)致外部存儲(chǔ)器空間利用率不高、讀寫速率不高的問(wèn)題以及采用fpga內(nèi)部的bram來(lái)實(shí)現(xiàn),存在bram在fpga內(nèi)部資源受限的問(wèn)題。為了達(dá)到上述目的,本發(fā)明通過(guò)下述技術(shù)方案實(shí)現(xiàn):一種分布式動(dòng)態(tài)二層轉(zhuǎn)發(fā)表的維護(hù)方法,包括轉(zhuǎn)發(fā)表的訓(xùn)練、轉(zhuǎn)發(fā)表的查詢和轉(zhuǎn)發(fā)表的老化,所述轉(zhuǎn)發(fā)表的訓(xùn)練包括步驟:s1)fpga在上電啟動(dòng)時(shí),外部輸入n個(gè)互異的真隨機(jī)數(shù)r,在有限域中表示為gf(r),保存在頂層控制模塊的寄存器中,所述寄存器連接哈希計(jì)算模塊的輸入端口,所述n為fpga內(nèi)部bram中轉(zhuǎn)發(fā)表的數(shù)目,所述轉(zhuǎn)發(fā)表的表項(xiàng)包括:mac:存儲(chǔ)的源地址sa;vlan:與mac關(guān)聯(lián)的vlanid;port:與mac關(guān)聯(lián)的端口號(hào);vld:該表項(xiàng)有效標(biāo)志,“1”表示有效,“0”表示無(wú)效;age:計(jì)數(shù)項(xiàng),用于記錄老化計(jì)數(shù),老化控制電路每隔一個(gè)固定的時(shí)間控制age減“1”;s2)交換電路發(fā)送數(shù)據(jù)信息寫入fifo電路緩存,訓(xùn)練電路每隔一個(gè)時(shí)鐘周期從fifo電路中讀取一個(gè)數(shù)據(jù)信息,如果此時(shí)fifo為空,則讀取出來(lái)的數(shù)據(jù)有效標(biāo)志為0,所述數(shù)據(jù)信息包括源地址sa、虛擬局域網(wǎng)信息vlan和端口號(hào)port,訓(xùn)練控制模塊將源地址sa和虛擬局域網(wǎng)信息vlan送入哈希計(jì)算模塊,將源地址sa、虛擬局域網(wǎng)信息vlan和端口號(hào)port放入延遲模塊;s3)將所述步驟s1)中的真隨機(jī)數(shù)gf(r)和所述步驟s2)中源地址sa和虛擬局域網(wǎng)信息vlan的結(jié)合即sa_vlan,同時(shí)分別輸入n個(gè)并行計(jì)算的訓(xùn)練控制電路進(jìn)行哈希計(jì)算,運(yùn)算結(jié)果為所述sa_vlan在轉(zhuǎn)發(fā)表中待寫入的地址;所述哈希計(jì)算產(chǎn)生訓(xùn)練地址train_addr和訓(xùn)練地址有效train_addr_vld,并傳遞至流水線讀寫電路,所述流水線讀寫電路包括鎖存電路、判斷電路和延遲模塊;s4)所述判斷電路讀取所述地址對(duì)應(yīng)的表項(xiàng)的有效標(biāo)志vld以及所述訓(xùn)練地址train_addr和訓(xùn)練地址有效train_addr_vld,所述判斷電路產(chǎn)生可寫指示match_vld,若存在以下三個(gè)條件之一:哈希計(jì)算模塊輸出的訓(xùn)練地址有效train_addr_vld=0或在判斷電路中發(fā)現(xiàn)train_addr跟當(dāng)前寫入表項(xiàng)的地址相等或在判斷電路中欲寫入的表項(xiàng)的有效標(biāo)志vld=1但是所述表項(xiàng)的sa_vlan與欲寫入表項(xiàng)的sa_vlan不相等,則將欲寫使能信號(hào)pw_ena_1x被置為無(wú)效,即可寫指示match_vld和訓(xùn)練地址有效train_addr_vld均置為“0”即無(wú)效狀態(tài),此表項(xiàng)不再寫入;s5)轉(zhuǎn)發(fā)表優(yōu)先選擇電路搜集所述地址對(duì)應(yīng)的表項(xiàng)的欲寫使能信號(hào)pw_ena_1x即可寫指示match_vld和訓(xùn)練地址有效train_addr_vld,設(shè)置轉(zhuǎn)發(fā)表的優(yōu)先級(jí),向具有優(yōu)先級(jí)的轉(zhuǎn)發(fā)表發(fā)送寫使能信號(hào)wr_ena_1x,在sel電路中將wr_ena_1x為有效的轉(zhuǎn)發(fā)表的表項(xiàng)寫入sa_vlan和端口port,并將age置于最大值,同時(shí)表項(xiàng)的vld被置為高;s6)將要查詢的轉(zhuǎn)發(fā)端口的數(shù)據(jù)信息輸入查詢電路,用于與所述步驟s3)中的真隨機(jī)數(shù)gf(r)經(jīng)過(guò)與所述步驟s3)中相同的哈希計(jì)算,計(jì)算得出所述數(shù)據(jù)信息在轉(zhuǎn)發(fā)表中的地址,從該表項(xiàng)中的port讀出要查詢的轉(zhuǎn)發(fā)端口。fifo電路每隔一個(gè)時(shí)鐘周期讀取一個(gè)sa_vlan與端口號(hào)port,并與鎖存在寄存器中互異且保持不變的真隨機(jī)數(shù)做哈希計(jì)算,若源地址sa中不包含虛擬局域網(wǎng)信息vlan,則只將源地址sa與互異的真隨機(jī)數(shù)做哈希計(jì)算。由于真隨機(jī)數(shù)互異即哈希計(jì)算的哈希算子參數(shù)互異,可以得到sa_vlan和端口號(hào)port映射到轉(zhuǎn)發(fā)表的表項(xiàng)的地址,訓(xùn)練控制模塊將sa_vlan送入哈希計(jì)算模塊,將sa_vlan、端口號(hào)port放入延遲模塊。判斷電路讀取所述地址對(duì)應(yīng)的表項(xiàng)的有效標(biāo)志vld,如果有效標(biāo)志vld=1,且表項(xiàng)中存儲(chǔ)的sa_vlan與想要寫入的sa_vlan不一樣時(shí),則放棄此次寫入,當(dāng)有效標(biāo)志vld=0時(shí),判斷從哈希計(jì)算電路生成的訓(xùn)練地址train_addr在傳遞的過(guò)程中,是否train_addr地址對(duì)應(yīng)的表項(xiàng)被寫入,如果有,則train_addr被置為無(wú)效,將欲寫使能信號(hào)即可寫指示match_vld和訓(xùn)練地址有效train_addr_vld均置為0,放棄此次寫操作。如果在傳遞的過(guò)程中,表項(xiàng)沒(méi)有被寫入,則訓(xùn)練地址train_addr、訓(xùn)練地址有效train_addr_vld和可寫指示match_vld均為有效,繼續(xù)向下傳遞。在傳遞至sel電路之前,由轉(zhuǎn)發(fā)表優(yōu)先選擇電路對(duì)上述信號(hào)進(jìn)行設(shè)定優(yōu)先級(jí),在sel電路,則根據(jù)表項(xiàng)的優(yōu)先級(jí),將信息寫入優(yōu)先級(jí)別較高的轉(zhuǎn)發(fā)表的表項(xiàng)。當(dāng)需要查詢待發(fā)送的數(shù)據(jù)包的轉(zhuǎn)發(fā)端口號(hào)時(shí),由數(shù)據(jù)包的目的地址da和虛擬局域網(wǎng)信息vlan即da_vlan,與來(lái)自頂層控制模塊的寄存器中的真隨機(jī)數(shù)做哈希計(jì)算,如果目的地址da中不包含虛擬局域網(wǎng)信息vlan,則只將da與真隨機(jī)數(shù)做哈希計(jì)算。所述真隨機(jī)數(shù)是由頂層控制模塊一起接入轉(zhuǎn)發(fā)表訓(xùn)練模塊和轉(zhuǎn)發(fā)表查詢模塊的哈希計(jì)算電路中,并且由于此時(shí)的da_vlan,即轉(zhuǎn)發(fā)表訓(xùn)練電路中的sa_vlan,因此哈希計(jì)算的規(guī)則相同,因此哈希計(jì)算的結(jié)果即為轉(zhuǎn)發(fā)表訓(xùn)練過(guò)程中映射到表項(xiàng)的地址,找到所述地址對(duì)應(yīng)的轉(zhuǎn)發(fā)表的表項(xiàng),讀取表項(xiàng)中的sa_vlan的內(nèi)容,與查詢的da_vlan比較,如果相同,則讀取表項(xiàng)中的port的內(nèi)容,即找到轉(zhuǎn)發(fā)該數(shù)據(jù)包的端口號(hào)。優(yōu)選地,所述s4)具體步驟為:每隔一個(gè)時(shí)鐘周期,哈希計(jì)算模塊將輸出一個(gè)訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld,若train_adr_vld=0,不做任何動(dòng)作,當(dāng)train_adr_vld=1時(shí),sa_vlan和端口號(hào)port會(huì)在流水線讀寫電路傳遞,通過(guò)訓(xùn)練地址train_addr讀取表項(xiàng),將這個(gè)地址對(duì)應(yīng)的sa_vlan與表項(xiàng)相互比較:a)讀取的表項(xiàng)沒(méi)有被占即表項(xiàng)的vld=0,則訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld原樣向下傳遞;b)讀取的表項(xiàng)已經(jīng)被占用,但是占用該表項(xiàng)mac的內(nèi)容與需要訓(xùn)練的sa_vlan不符合,則訓(xùn)練地址有效train_adr_vld=0,不做任何動(dòng)作;c)讀取的表項(xiàng)已經(jīng)被占用,并且占領(lǐng)的mac與需要訓(xùn)練的sa_vlan相同,則train_adr_vld原樣向下傳遞;d)流水線讀寫電路新置一個(gè)可寫指示match_vld,當(dāng)所述c)中的條件出現(xiàn)時(shí),設(shè)置可寫指示match_vld=1用于指示當(dāng)前可寫入的轉(zhuǎn)發(fā)表,同一時(shí)間內(nèi)表項(xiàng)的可寫指示match_vld為“1”的轉(zhuǎn)發(fā)表不超過(guò)一個(gè);e)在訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld的向下傳遞過(guò)程,若訓(xùn)練地址train_addr對(duì)應(yīng)的表項(xiàng)被執(zhí)行了一次寫入操作,則設(shè)置所述表項(xiàng)的訓(xùn)練地址有效train_adr_vld=0,設(shè)置可寫指示match_vld=0,此表項(xiàng)不再被寫入。流水線讀寫電路中的鎖存電路0的電路根據(jù)tarin_addr產(chǎn)生一個(gè)讀請(qǐng)求發(fā)送給sel電路,被sel電路選中,發(fā)送到轉(zhuǎn)發(fā)表,信息繼續(xù)向下傳,經(jīng)過(guò)鎖存電路1,鎖存電路2,判斷電路1,到達(dá)判斷電路2,判斷電路2新產(chǎn)生可寫信號(hào)match_vld,鎖存電路0讀取的信息在3個(gè)時(shí)鐘周期后返回判斷電路2,同時(shí)訓(xùn)練地址train_addr也傳遞到判斷電路2。判斷電路2查看讀回來(lái)的表項(xiàng)的有效標(biāo)志vld和訓(xùn)練地址有效train_addr_vld是不是有效,如果二者有一個(gè)無(wú)效,則設(shè)置可寫指示match_vld=0,判斷電2路直接將訓(xùn)練地址train_addr、可寫指示match_vld跟著訓(xùn)練信息向下傳遞到判斷電路3;如果二者都有效,則需要判斷讀回來(lái)的sa_vlan跟想要寫入的源地址sa_vlan是否一致,如果一致,將可寫指示match_vld設(shè)置為1,跟其他信息一起向下傳到判斷電路3。如果不一樣,則表明此地址已經(jīng)被其他的sa_vlan占據(jù),將可寫指示match_vld與訓(xùn)練地址有效train_addr_vld設(shè)置為0,設(shè)置train_addr_vld=0,跟其他信息一起向下傳到判斷電路3。判斷電路中的判斷電路1和判斷電路3,用于時(shí)刻監(jiān)視本時(shí)鐘周期內(nèi)sel電路對(duì)轉(zhuǎn)發(fā)表的寫操作。如果sel電路對(duì)轉(zhuǎn)發(fā)表本周期沒(méi)有一個(gè)有效的寫操作,則不做任何動(dòng)作,信息直接向下傳遞。如果有一個(gè)有效的寫操作,則提取寫操作的地址,與傳遞至判斷電路1或判斷電路3的打算寫入的地址進(jìn)行比較,如果不相同,則不做任何操作,信息向下傳遞;如果相同,則需將信息中的可寫指示match_vld與訓(xùn)練地址有效train_addr_vld同時(shí)置于0,表明本次的訓(xùn)練無(wú)效。在判斷電路中,如果欲寫入信息的轉(zhuǎn)發(fā)表的表項(xiàng)被占用或者當(dāng)前希望寫入的地址已經(jīng)或正在被sel電路進(jìn)行寫操作,保證了轉(zhuǎn)發(fā)表的寫入不會(huì)產(chǎn)生沖突和重復(fù)。流水線讀寫電路采用奇偶時(shí)隙對(duì)轉(zhuǎn)發(fā)表進(jìn)行讀和寫的操作,提升了轉(zhuǎn)發(fā)表的最大包轉(zhuǎn)發(fā)率。優(yōu)選地,所述s5)具體步驟為:s51)訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld以及可寫指示match_vld向下傳至轉(zhuǎn)發(fā)表優(yōu)先選擇電路,所述轉(zhuǎn)發(fā)表優(yōu)先選擇電路做優(yōu)先級(jí)判斷:match_vld=1的表項(xiàng)優(yōu)先級(jí)設(shè)置為最高;否則,判斷train_adr_vld=1的幾個(gè)表項(xiàng),序號(hào)最小的轉(zhuǎn)發(fā)表的表項(xiàng),優(yōu)先級(jí)別設(shè)置為高級(jí);s52)轉(zhuǎn)發(fā)表優(yōu)先選擇電路將優(yōu)先級(jí)別最高或高級(jí)的轉(zhuǎn)發(fā)表的表項(xiàng)的寫使能指示wr_ena_1x置為1,其他表項(xiàng)的寫使能指示wr_ena_1x置為0;s53)sel電路根據(jù)寫使能指示wr_ena_1x來(lái)決定是否sa_vlan和端口號(hào)port寫入訓(xùn)練地址train_addr對(duì)應(yīng)的表項(xiàng),同時(shí),表項(xiàng)中age也會(huì)被寫入最大值max_age_times,有效標(biāo)志vld設(shè)置為1。判斷電路3的輸出pw_ena_1x就是指match_vld以及train_addr_vld,發(fā)送到轉(zhuǎn)發(fā)表優(yōu)先選擇電路,轉(zhuǎn)發(fā)表優(yōu)先選擇電路判斷轉(zhuǎn)發(fā)表的優(yōu)先級(jí)別,向優(yōu)先級(jí)別最高的轉(zhuǎn)發(fā)表發(fā)送寫使能信號(hào)wr_ena_1x。這樣可以保證在訓(xùn)練轉(zhuǎn)發(fā)表的過(guò)程中,每次最多只有一個(gè)轉(zhuǎn)發(fā)表的表項(xiàng)被選中,因此可以保證以太包的轉(zhuǎn)發(fā)信息被寫入轉(zhuǎn)發(fā)表中的表項(xiàng)是唯一的。優(yōu)選地,還包括老化控制電路,所述老化控制電路設(shè)置有age地址age_addr和老化周期age_period,所述老化控制電路的工作過(guò)程包括:m1):初始化age地址age_addr=0;m2):判斷age地址age_addr是否大于轉(zhuǎn)發(fā)表的深度table_deep,如果大于,結(jié)束老化過(guò)程;否則進(jìn)入下一步;m3):讀取age地址age_addr,獲得表項(xiàng)中的age計(jì)數(shù),將其減“1”,如果age≤1,則將表項(xiàng)的有效標(biāo)志vld設(shè)置為“0”即當(dāng)前轉(zhuǎn)發(fā)表的該表項(xiàng)狀態(tài)為可寫入狀態(tài);m4):將減“1”后的age寫入age地址age_addr;m5):age地址加1:age_addr=age_addr+1,返回步驟m2)。轉(zhuǎn)發(fā)表的表項(xiàng)在寫入信息之后,age這一項(xiàng)將被寫入最大老化次數(shù)max_age_times在每個(gè)時(shí)隙即timeslot,采用遍歷的方法對(duì)轉(zhuǎn)發(fā)表的每個(gè)表項(xiàng)的age計(jì)數(shù)進(jìn)行減“1”。當(dāng)表項(xiàng)的age計(jì)數(shù)為“0”,表明該表項(xiàng)為空,該表項(xiàng)的狀態(tài)為可寫入狀態(tài)。這樣實(shí)現(xiàn)了轉(zhuǎn)發(fā)表的動(dòng)態(tài)更新。優(yōu)選地,所述老化控制電路用于表項(xiàng)的老化過(guò)程,所述老化過(guò)程具體為:每過(guò)一個(gè)老化周期age_period的時(shí)間,老化控制電路將依次讀取轉(zhuǎn)發(fā)表中的每一個(gè)表項(xiàng),然后判斷,如果所述轉(zhuǎn)發(fā)表的表項(xiàng)中age≤1,設(shè)置表項(xiàng)的有效標(biāo)志vld=0;如果age>1,age=age-1,返回。轉(zhuǎn)發(fā)表中表項(xiàng)的內(nèi)容經(jīng)過(guò)最大老化次數(shù)max_age_times的老化周期age_period后,如果還沒(méi)有相同的訓(xùn)練信息來(lái)刷新這個(gè)表項(xiàng),那么這個(gè)表項(xiàng)的信息將刪除,通過(guò)將表項(xiàng)中的vld置“0”表示表項(xiàng)內(nèi)容為空,為可寫入狀態(tài)。優(yōu)選地,所述步驟s1)中fpga在上電啟動(dòng)時(shí),外部輸入n個(gè)互異的真隨機(jī)數(shù)r,保存在頂層控制模塊的寄存器的具體步驟包括:s1.1)系統(tǒng)上電:上電后由初始狀態(tài)轉(zhuǎn)換到鎖存真隨機(jī)數(shù)的狀態(tài);s1.2)鎖存真隨機(jī)數(shù):從外部端口鎖存一個(gè)真隨機(jī)數(shù),然后進(jìn)入下一步;s1.3)相異檢查:把當(dāng)前鎖存的真隨機(jī)數(shù)與已經(jīng)保存好的真隨機(jī)數(shù)gf(r)依次對(duì)比,如果互不相同,進(jìn)入下一步;否則,返回步驟s1.2)以鎖定一個(gè)新的真隨機(jī)數(shù)進(jìn)來(lái);s1.4)真隨機(jī)數(shù)計(jì)數(shù):記錄當(dāng)前已經(jīng)鎖存的真隨機(jī)數(shù)的數(shù)量,如果當(dāng)前真隨機(jī)數(shù)的數(shù)量與轉(zhuǎn)發(fā)表的數(shù)量相同,則進(jìn)入下一步,否則,返回步驟s1.2)以鎖定一個(gè)新的真隨機(jī)數(shù)進(jìn)來(lái)。當(dāng)前隨機(jī)數(shù)的數(shù)量少于轉(zhuǎn)發(fā)表的數(shù)量時(shí),繼續(xù)鎖存輸入的隨機(jī)數(shù),當(dāng)鎖存的隨機(jī)數(shù)的數(shù)量與轉(zhuǎn)發(fā)表的數(shù)量相同是,進(jìn)入工作狀態(tài),可以進(jìn)行正常的訓(xùn)練與查詢。采用這樣隨機(jī)確定映射參數(shù)方式,使轉(zhuǎn)發(fā)表的性能穩(wěn)定,避免由于極端的輸入組合,造成哈希映射的惡化。優(yōu)選地,所述轉(zhuǎn)發(fā)表的訓(xùn)練包括mux電路、fifo電路、訓(xùn)練控制模塊、轉(zhuǎn)發(fā)表和轉(zhuǎn)發(fā)表優(yōu)先選擇電路,所述轉(zhuǎn)發(fā)表的查詢包括mux電路、fifo電路、查詢控制模塊和輸出電路比較電路,其中:mux電路:為fpga二選一電路,用以實(shí)現(xiàn)在電路處于初始狀態(tài)與鎖存真隨機(jī)數(shù)狀態(tài)時(shí)候,轉(zhuǎn)發(fā)表電路不接受外部的訓(xùn)練與查詢信息;fifo電路緩存所述數(shù)據(jù)信息源地址sa、虛擬局域網(wǎng)vlan和端口號(hào)port,每隔一個(gè)時(shí)鐘周期提取一條信息并輸入下游電路;訓(xùn)練控制模塊:用于接收f(shuō)ifo電路輸入的訓(xùn)練信息,包括哈希計(jì)算電路,以及由鎖存電路與判斷電路組成的讀寫流水控制電路,根據(jù)讀寫流水控制電路的判決來(lái)控制sa_vlan與端口號(hào)port的關(guān)聯(lián)信息寫入轉(zhuǎn)發(fā)表;轉(zhuǎn)發(fā)表優(yōu)先選擇電路:用于控制各個(gè)轉(zhuǎn)發(fā)表被寫入表項(xiàng)的優(yōu)先級(jí),當(dāng)某一個(gè)sa_vlan與端口號(hào)port的關(guān)聯(lián)信息可以被寫入多個(gè)轉(zhuǎn)發(fā)表中時(shí)候,此電路根據(jù)優(yōu)先級(jí)確定只有最高優(yōu)先級(jí)的轉(zhuǎn)發(fā)表能寫入此關(guān)聯(lián)信息;查詢控制模塊:包括哈希計(jì)算電路、老化控制電路和時(shí)隙控制電路,用于接收f(shuō)ifo電路輸入的查詢信息,并選擇轉(zhuǎn)發(fā)表讀取數(shù)據(jù)并輸出至輸出比較電路,同時(shí)由老化控制電路完成表項(xiàng)的老化功能;輸出比較電路:由比較器組成,所述比較器的數(shù)量與轉(zhuǎn)發(fā)表的數(shù)量相同,首先判斷轉(zhuǎn)發(fā)表輸出表項(xiàng)內(nèi)容是否有效,如果有效,則判斷輸出的sa_vlan是否與輸入的da_vlan一致,如果一致則輸出查詢結(jié)果。優(yōu)選地,所述查詢控制模塊包括:時(shí)隙控制電路:所述時(shí)隙控制電路在奇時(shí)隙選擇查詢模塊對(duì)轉(zhuǎn)發(fā)表進(jìn)行讀取操作,偶時(shí)隙選擇age控制模塊的對(duì)轉(zhuǎn)發(fā)表進(jìn)行讀寫操作;老化控制電路:用于轉(zhuǎn)發(fā)表的表項(xiàng)的老化;哈希計(jì)算電路:用于轉(zhuǎn)發(fā)表的訓(xùn)練和轉(zhuǎn)發(fā)表的查詢中,真隨機(jī)數(shù)與da_vlan的哈希計(jì)算。外部交換電路收到一個(gè)數(shù)據(jù)包,會(huì)將數(shù)據(jù)包的da_vlan,與真隨機(jī)數(shù)經(jīng)過(guò)哈希計(jì)算,計(jì)算出一個(gè)地址。如果需要轉(zhuǎn)發(fā)的數(shù)據(jù)包中不包含虛擬局域網(wǎng)vlan,則只將目的地址da與真隨機(jī)數(shù)進(jìn)行哈希計(jì)算。如果轉(zhuǎn)發(fā)表的數(shù)量為n,則將同時(shí)計(jì)算n個(gè)地址,并且查詢出n個(gè)表項(xiàng)的內(nèi)容。這n個(gè)表項(xiàng)中,如果其中一個(gè)表項(xiàng)滿足:表項(xiàng)有效并且表項(xiàng)的sa_vlan與查詢的da_vlan相同,則查詢成功,將此表項(xiàng)中的端口號(hào)作為數(shù)據(jù)包的轉(zhuǎn)發(fā)端口發(fā)送出去。否則,顯示查詢失敗。老化控制電路和哈希計(jì)算電路輸出至?xí)r隙控制電路的控制信號(hào)包括轉(zhuǎn)發(fā)表表項(xiàng)地址addr和讀寫控制信號(hào)rw_ena。優(yōu)選地,所述哈希計(jì)算為:將輸入的從以太包中提取的sa_vlan或da_vlan由數(shù)據(jù)分段電路分割為n個(gè)m比特,分別為gf(k1),gf(k2),…,gf(kn),與輸入的隨機(jī)數(shù)gf(r)的計(jì)算公式為:再將h做crc運(yùn)算。采用同一個(gè)哈希計(jì)算規(guī)則gf(r),輸入不同的參數(shù)構(gòu)造成不同的哈希算子。同時(shí)采用隨機(jī)數(shù)作為哈希算子的參數(shù)來(lái)增加不同哈希映射之間的不相干性。本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn)及有益效果:(1)本發(fā)明采用多個(gè)小的轉(zhuǎn)發(fā)表配合工作,來(lái)實(shí)現(xiàn)轉(zhuǎn)發(fā)的功能,采用同一個(gè)哈希計(jì)算規(guī)則,即哈希算子,不同的參數(shù)構(gòu)造成不同的哈希映射規(guī)則。采用隨機(jī)數(shù)作為哈希算子的參數(shù)來(lái)增加不同哈希映射之間的不相干性,每個(gè)表使用不同的哈希映射,取得遠(yuǎn)高于通常的一張統(tǒng)一的轉(zhuǎn)發(fā)表的表項(xiàng)負(fù)載率,并且大大節(jié)約fpga內(nèi)部珍貴的bram資源。(2)整個(gè)電路工作在奇與偶兩個(gè)時(shí)隙上,其中奇數(shù)時(shí)隙用于外部mac的查詢;偶數(shù)時(shí)隙用于轉(zhuǎn)發(fā)表的老化控制電路,訓(xùn)練電路的奇時(shí)隙寫入與老化控制電路的時(shí)隙錯(cuò)開(kāi)來(lái),這樣就可以避免出現(xiàn)同時(shí)對(duì)雙口ram一個(gè)地址進(jìn)行操作的沖突。流水線讀寫電路采用奇偶時(shí)隙對(duì)轉(zhuǎn)發(fā)表進(jìn)行讀和寫的操作,提升了轉(zhuǎn)發(fā)表的最大包轉(zhuǎn)發(fā)率。(3)本發(fā)明采用了時(shí)分復(fù)用的方式來(lái)控制轉(zhuǎn)發(fā)表的讀和寫以及老化控制電路的老化功能,提高了并行處理的效率。(4)每次上電或者接收外部初始化的請(qǐng)求,都會(huì)觸發(fā)對(duì)真隨機(jī)數(shù)的重新選取,即每個(gè)哈希表在重新上電或者初始化后,其映射的規(guī)則都不相同,這樣避免采用固定的哈希映射規(guī)則,使得對(duì)于某些特殊的mac或sa_vlan學(xué)習(xí)組合,轉(zhuǎn)發(fā)表訓(xùn)練和轉(zhuǎn)發(fā)表查詢效果劣化的問(wèn)題。附圖說(shuō)明圖1為本發(fā)明的系統(tǒng)原理框圖;圖2為哈希計(jì)算電路的原理圖;圖3為讀寫控制流水線的原理圖;圖4為查詢控制模塊的原理圖。具體實(shí)施方式下面結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步地詳細(xì)說(shuō)明,但本發(fā)明的實(shí)施方式不限于此。實(shí)施例1:結(jié)合附圖1所示,一種分布式動(dòng)態(tài)二層轉(zhuǎn)發(fā)表的維護(hù)方法,包括轉(zhuǎn)發(fā)表的訓(xùn)練、轉(zhuǎn)發(fā)表的查詢和轉(zhuǎn)發(fā)表的老化,所述轉(zhuǎn)發(fā)表的訓(xùn)練包括步驟:s1)fpga在上電啟動(dòng)時(shí),外部輸入n個(gè)互異的真隨機(jī)數(shù)r,在有限域中表示為gf(r),保存在頂層控制模塊的寄存器中,所述寄存器連接哈希計(jì)算模塊的輸入端口,所述n為fpga內(nèi)部bram中轉(zhuǎn)發(fā)表的數(shù)目,所述轉(zhuǎn)發(fā)表的表項(xiàng)包括:mac:存儲(chǔ)的源地址sa;vlan:與mac關(guān)聯(lián)的vlanid;port:與mac關(guān)聯(lián)的端口號(hào);vld:該表項(xiàng)有效標(biāo)志,“1”表示有效,“0”表示無(wú)效;age:計(jì)數(shù)項(xiàng),用于記錄老化計(jì)數(shù),老化控制電路每隔一個(gè)固定的時(shí)間控制age減“1”;s2)交換電路發(fā)送數(shù)據(jù)信息寫入fifo電路緩存,訓(xùn)練電路每隔一個(gè)時(shí)鐘周期從fifo電路中讀取一個(gè)數(shù)據(jù)信息,如果此時(shí)fifo為空,則讀取出來(lái)的數(shù)據(jù)有效標(biāo)志為0,所述數(shù)據(jù)信息包括源地址sa、虛擬局域網(wǎng)信息vlan和端口號(hào)port,訓(xùn)練控制模塊將源地址sa和虛擬局域網(wǎng)信息vlan送入哈希計(jì)算模塊,將源地址sa、虛擬局域網(wǎng)信息vlan和端口號(hào)port放入延遲模塊;s3)將所述步驟s1)中的真隨機(jī)數(shù)gf(r)和所述步驟s2)中源地址sa和虛擬局域網(wǎng)信息vlan的結(jié)合即sa_vlan,同時(shí)分別輸入n個(gè)并行計(jì)算的訓(xùn)練控制電路進(jìn)行哈希計(jì)算,運(yùn)算結(jié)果為所述sa_vlan在轉(zhuǎn)發(fā)表中待寫入的地址;所述哈希計(jì)算產(chǎn)生訓(xùn)練地址train_addr和訓(xùn)練地址有效train_addr_vld,并傳遞至流水線讀寫電路,所述流水線讀寫電路包括鎖存電路、判斷電路和延遲模塊;s4)所述判斷電路讀取所述地址對(duì)應(yīng)的表項(xiàng)的有效標(biāo)志vld以及所述訓(xùn)練地址train_addr和訓(xùn)練地址有效train_addr_vld,所述判斷電路產(chǎn)生可寫指示match_vld,若存在以下三個(gè)條件之一:哈希計(jì)算模塊輸出的訓(xùn)練地址有效train_addr_vld=0或在判斷電路中發(fā)現(xiàn)train_addr跟當(dāng)前寫入表項(xiàng)的地址相等或在判斷電路中欲寫入的表項(xiàng)的有效標(biāo)志vld=1但是所述表項(xiàng)的sa_vlan與欲寫入表項(xiàng)的sa_vlan不相等,則將欲寫使能信號(hào)pw_ena_1x被置為無(wú)效,即可寫指示match_vld和訓(xùn)練地址有效train_addr_vld均置為“0”即無(wú)效狀態(tài),此表項(xiàng)不再寫入;s5)轉(zhuǎn)發(fā)表優(yōu)先選擇電路搜集所述地址對(duì)應(yīng)的表項(xiàng)的欲寫使能信號(hào)pw_ena_1x即可寫指示match_vld和訓(xùn)練地址有效train_addr_vld,設(shè)置轉(zhuǎn)發(fā)表的優(yōu)先級(jí),向具有優(yōu)先級(jí)的轉(zhuǎn)發(fā)表發(fā)送寫使能信號(hào)wr_ena_1x,在sel電路中將wr_ena_1x為有效的轉(zhuǎn)發(fā)表的表項(xiàng)寫入sa_vlan和端口port,并將age置于最大值,同時(shí)表項(xiàng)的vld被置為高;s6)將要查詢的轉(zhuǎn)發(fā)端口的數(shù)據(jù)信息輸入查詢電路,用于與所述步驟s3)中的真隨機(jī)數(shù)gf(r)經(jīng)過(guò)與所述步驟s3)中相同的哈希計(jì)算,計(jì)算得出所述數(shù)據(jù)信息在轉(zhuǎn)發(fā)表中的地址,從該表項(xiàng)中的port讀出要查詢的轉(zhuǎn)發(fā)端口。fifo電路每隔一個(gè)時(shí)鐘周期讀取一個(gè)sa_vlan與端口號(hào)port,并與鎖存在寄存器中互異且保持不變的真隨機(jī)數(shù)做哈希計(jì)算,若源地址sa中不包含虛擬局域網(wǎng)信息vlan,則只將源地址sa與互異的真隨機(jī)數(shù)做哈希計(jì)算。由于真隨機(jī)數(shù)互異即哈希計(jì)算的哈希算子參數(shù)互異,可以得到sa_vlan和端口號(hào)port映射到轉(zhuǎn)發(fā)表的表項(xiàng)的地址,訓(xùn)練控制模塊將sa_vlan送入哈希計(jì)算模塊,將sa_vlan、端口號(hào)port放入延遲模塊。判斷電路讀取所述地址對(duì)應(yīng)的表項(xiàng)的有效標(biāo)志vld,如果有效標(biāo)志vld=1,且表項(xiàng)中存儲(chǔ)的sa_vlan與想要寫入的sa_vlan不一樣時(shí),則放棄此次寫入,當(dāng)有效標(biāo)志vld=0時(shí),判斷從哈希計(jì)算電路生成的訓(xùn)練地址train_addr在傳遞的過(guò)程中,是否train_addr地址對(duì)應(yīng)的表項(xiàng)被寫入,如果有,則train_addr被置為無(wú)效,將欲寫使能信號(hào)即可寫指示match_vld和訓(xùn)練地址有效train_addr_vld均置為0,放棄此次寫操作。如果在傳遞的過(guò)程中,表項(xiàng)沒(méi)有被寫入,則訓(xùn)練地址train_addr、訓(xùn)練地址有效train_addr_vld和可寫指示match_vld均為有效,繼續(xù)向下傳遞。在傳遞至sel電路之前,由轉(zhuǎn)發(fā)表優(yōu)先選擇電路對(duì)上述信號(hào)進(jìn)行設(shè)定優(yōu)先級(jí),在sel電路,則根據(jù)表項(xiàng)的優(yōu)先級(jí),將信息寫入優(yōu)先級(jí)別較高的轉(zhuǎn)發(fā)表的表項(xiàng)。當(dāng)需要查詢待發(fā)送的數(shù)據(jù)包的轉(zhuǎn)發(fā)端口號(hào)時(shí),由數(shù)據(jù)包的目的地址da和虛擬局域網(wǎng)信息vlan即da_vlan,與來(lái)自頂層控制模塊的寄存器中的真隨機(jī)數(shù)做哈希計(jì)算,如果目的地址da中不包含虛擬局域網(wǎng)信息vlan,則只將da與真隨機(jī)數(shù)做哈希計(jì)算。所述真隨機(jī)數(shù)是由頂層控制模塊一起接入轉(zhuǎn)發(fā)表訓(xùn)練模塊和轉(zhuǎn)發(fā)表查詢模塊的哈希計(jì)算電路中,并且由于此時(shí)的da_vlan,即轉(zhuǎn)發(fā)表訓(xùn)練電路中的sa_vlan,因此哈希計(jì)算的規(guī)則相同,因此哈希計(jì)算的結(jié)果即為轉(zhuǎn)發(fā)表訓(xùn)練過(guò)程中映射到表項(xiàng)的地址,找到所述地址對(duì)應(yīng)的轉(zhuǎn)發(fā)表的表項(xiàng),讀取表項(xiàng)中的sa_vlan的內(nèi)容,與查詢的da_vlan比較,如果相同,則讀取表項(xiàng)中的port的內(nèi)容,即找到轉(zhuǎn)發(fā)該數(shù)據(jù)包的端口號(hào)。值得說(shuō)明的是,步驟s3)-s6)在fpga電路中是同時(shí)進(jìn)行的,因此大大縮短了計(jì)算時(shí)間,提高了效率。實(shí)施例2:在實(shí)施例1的基礎(chǔ)上,結(jié)合附圖1和圖3所示,所述s4)具體步驟為:每隔一個(gè)時(shí)鐘周期,哈希計(jì)算模塊將輸出一個(gè)訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld,若train_adr_vld=0,不做任何動(dòng)作,當(dāng)train_adr_vld=1時(shí),sa_vlan和端口號(hào)port會(huì)在流水線讀寫電路傳遞,通過(guò)訓(xùn)練地址train_addr讀取表項(xiàng),將這個(gè)地址對(duì)應(yīng)的sa_vlan與表項(xiàng)相互比較:a)讀取的表項(xiàng)沒(méi)有被占即表項(xiàng)的vld=0,則訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld原樣向下傳遞;b)讀取的表項(xiàng)已經(jīng)被占用,但是占用該表項(xiàng)mac的內(nèi)容與需要訓(xùn)練的sa_vlan不符合,則訓(xùn)練地址有效train_adr_vld=0,不做任何動(dòng)作;c)讀取的表項(xiàng)已經(jīng)被占用,并且占領(lǐng)的mac與需要訓(xùn)練的sa_vlan相同,則train_adr_vld原樣向下傳遞;d)流水線讀寫電路新置一個(gè)可寫指示match_vld,當(dāng)所述c)中的條件出現(xiàn)時(shí),設(shè)置可寫指示match_vld=1用于指示當(dāng)前可寫入的轉(zhuǎn)發(fā)表,同一時(shí)間內(nèi)表項(xiàng)的可寫指示match_vld為“1”的轉(zhuǎn)發(fā)表不超過(guò)一個(gè);e)在訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld的向下傳遞過(guò)程,若訓(xùn)練地址train_addr對(duì)應(yīng)的表項(xiàng)被執(zhí)行了一次寫入操作,則設(shè)置所述表項(xiàng)的訓(xùn)練地址有效train_adr_vld=0,設(shè)置可寫指示match_vld=0,此表項(xiàng)不再被寫入。流水線讀寫電路中的鎖存電路0的電路根據(jù)tarin_addr產(chǎn)生一個(gè)讀請(qǐng)求發(fā)送給sel電路,被sel電路選中,發(fā)送到轉(zhuǎn)發(fā)表,信息繼續(xù)向下傳,經(jīng)過(guò)鎖存電路1,鎖存電路2,判斷電路1,到達(dá)判斷電路2,判斷電路2新產(chǎn)生可寫信號(hào)match_vld,鎖存電路0讀取的信息在3個(gè)時(shí)鐘周期后返回判斷電路2,同時(shí)訓(xùn)練地址train_addr也傳遞到判斷電路2。判斷電路2查看讀回來(lái)的表項(xiàng)的有效標(biāo)志vld和訓(xùn)練地址有效train_addr_vld是不是有效,如果二者有一個(gè)無(wú)效,則設(shè)置可寫指示match_vld=0,判斷電2路直接將訓(xùn)練地址train_addr、可寫指示match_vld跟著訓(xùn)練信息向下傳遞到判斷電路3;如果二者都有效,則需要判斷讀回來(lái)的sa_vlan跟想要寫入的源地址sa_vlan是否一致,如果一致,將可寫指示match_vld設(shè)置為1,跟其他信息一起向下傳到判斷電路3。如果不一樣,則表明此地址已經(jīng)被其他的sa_vlan占據(jù),將可寫指示match_vld與訓(xùn)練地址有效train_addr_vld設(shè)置為0,設(shè)置train_addr_vld=0,跟其他信息一起向下傳到判斷電路3。判斷電路中的判斷電路1和判斷電路3,用于時(shí)刻監(jiān)視本時(shí)鐘周期內(nèi)sel電路對(duì)轉(zhuǎn)發(fā)表的寫操作。如果sel電路對(duì)轉(zhuǎn)發(fā)表本周期沒(méi)有一個(gè)有效的寫操作,則不做任何動(dòng)作,信息直接向下傳遞。如果有一個(gè)有效的寫操作,則提取寫操作的地址,與傳遞至判斷電路1或判斷電路3的打算寫入的地址進(jìn)行比較,如果不相同,則不做任何操作,信息向下傳遞;如果相同,則需將信息中的可寫指示match_vld與訓(xùn)練地址有效train_addr_vld同時(shí)置于0,表明本次的訓(xùn)練無(wú)效。在判斷電路中,如果欲寫入信息的轉(zhuǎn)發(fā)表的表項(xiàng)被占用或者當(dāng)前希望寫入的地址已經(jīng)或正在被sel電路進(jìn)行寫操作,保證了轉(zhuǎn)發(fā)表的寫入不會(huì)產(chǎn)生沖突和重復(fù)。優(yōu)選地,所述s5)具體步驟為:s51)訓(xùn)練地址train_addr與訓(xùn)練地址有效train_adr_vld以及可寫指示match_vld向下傳至轉(zhuǎn)發(fā)表優(yōu)先選擇電路,所述轉(zhuǎn)發(fā)表優(yōu)先選擇電路做優(yōu)先級(jí)判斷:match_vld=1的表項(xiàng)優(yōu)先級(jí)設(shè)置為最高;否則,判斷train_adr_vld=1的幾個(gè)表項(xiàng),序號(hào)最小的轉(zhuǎn)發(fā)表的表項(xiàng),優(yōu)先級(jí)別設(shè)置為高級(jí);s52)轉(zhuǎn)發(fā)表優(yōu)先選擇電路將優(yōu)先級(jí)別最高或高級(jí)的轉(zhuǎn)發(fā)表的表項(xiàng)的寫使能指示wr_ena_1x置為1,其他表項(xiàng)的寫使能指示wr_ena_1x置為0;s53)sel電路根據(jù)寫使能指示wr_ena_1x來(lái)決定是否sa_vlan和端口號(hào)port寫入訓(xùn)練地址train_addr對(duì)應(yīng)的表項(xiàng),同時(shí),表項(xiàng)中age也會(huì)被寫入最大值max_age_times,有效標(biāo)志vld設(shè)置為1。判斷電路3的輸出pw_ena_1x就是指match_vld以及train_addr_vld,發(fā)送到轉(zhuǎn)發(fā)表優(yōu)先選擇電路,轉(zhuǎn)發(fā)表優(yōu)先選擇電路判斷轉(zhuǎn)發(fā)表的優(yōu)先級(jí)別,向優(yōu)先級(jí)別最高的轉(zhuǎn)發(fā)表發(fā)送寫使能信號(hào)wr_ena_1x。這樣可以保證在訓(xùn)練轉(zhuǎn)發(fā)表的過(guò)程中,每次最多只有一個(gè)轉(zhuǎn)發(fā)表的表項(xiàng)被選中,因此可以保證以太包的轉(zhuǎn)發(fā)信息被寫入轉(zhuǎn)發(fā)表中的表項(xiàng)是唯一的。實(shí)施例3:在實(shí)施例1的基礎(chǔ)上,結(jié)合附圖1和圖4所示,還包括老化控制電路,所述老化控制電路設(shè)置有age地址age_addr和老化周期age_period,所述老化控制電路的工作過(guò)程包括:m1):初始化age地址age_addr=0;m2):判斷age地址age_addr是否大于轉(zhuǎn)發(fā)表的深度table_deep,如果大于,結(jié)束老化過(guò)程;否則進(jìn)入下一步;m3):讀取age地址age_addr,獲得表項(xiàng)中的age計(jì)數(shù),將其減“1”,如果age≤1,則將表項(xiàng)的有效標(biāo)志vld設(shè)置為“0”即當(dāng)前轉(zhuǎn)發(fā)表的該表項(xiàng)狀態(tài)為可寫入狀態(tài);m4):將減“1”后的age寫入age地址age_addr;m5):age地址加1:age_addr=age_addr+1,返回步驟m2)。轉(zhuǎn)發(fā)表的表項(xiàng)在寫入信息之后,age這一項(xiàng)將被寫入最大老化次數(shù)max_age_times在每個(gè)時(shí)隙即timeslot,采用遍歷的方法對(duì)轉(zhuǎn)發(fā)表的每個(gè)表項(xiàng)的age計(jì)數(shù)進(jìn)行減“1”。當(dāng)表項(xiàng)的age計(jì)數(shù)為“0”,表明該表項(xiàng)為空,該表項(xiàng)的狀態(tài)為可寫入狀態(tài)。這樣實(shí)現(xiàn)了轉(zhuǎn)發(fā)表的動(dòng)態(tài)更新。優(yōu)選地,所述老化控制電路用于表項(xiàng)的老化過(guò)程,所述老化過(guò)程具體為:每過(guò)一個(gè)老化周期age_period的時(shí)間,老化控制電路將依次讀取轉(zhuǎn)發(fā)表中的每一個(gè)表項(xiàng),然后判斷,如果所述轉(zhuǎn)發(fā)表的表項(xiàng)中age≤1,設(shè)置表項(xiàng)的有效標(biāo)志vld=0;如果age>1,age=age-1,返回。轉(zhuǎn)發(fā)表中表項(xiàng)的內(nèi)容經(jīng)過(guò)一個(gè)老化周期age_period,如果還沒(méi)有相同的訓(xùn)練信息來(lái)刷新這個(gè)表項(xiàng),那么這個(gè)表項(xiàng)的信息將刪除,通過(guò)將表項(xiàng)中的vld置“0”表示表項(xiàng)內(nèi)容為空,為可寫入狀態(tài)。轉(zhuǎn)發(fā)表訓(xùn)練過(guò)程會(huì)將表項(xiàng)的age刷新到最大值,老化控制電路是將age不斷減小到0.老化控制電路的目的是將表項(xiàng)的有效標(biāo)志vld置為“0”,age刷新的過(guò)程是為了將表項(xiàng)保持有效標(biāo)志vld=1。實(shí)施例4:在實(shí)施例1的基礎(chǔ)上,結(jié)合附圖1所示,所述步驟s1)中fpga在上電啟動(dòng)時(shí),外部輸入n個(gè)互異的真隨機(jī)數(shù)r,保存在頂層控制模塊的寄存器的具體步驟包括:s1.1)系統(tǒng)上電:上電后由初始狀態(tài)轉(zhuǎn)換到鎖存真隨機(jī)數(shù)的狀態(tài);s1.2)鎖存真隨機(jī)數(shù):從外部端口鎖存一個(gè)真隨機(jī)數(shù),然后進(jìn)入下一步;s1.3)相異檢查:把當(dāng)前鎖存的真隨機(jī)數(shù)與已經(jīng)保存好的真隨機(jī)數(shù)gf(r)依次對(duì)比,如果互不相同,進(jìn)入下一步;否則,返回步驟s1.2)以鎖定一個(gè)新的真隨機(jī)數(shù)進(jìn)來(lái);s1.4)真隨機(jī)數(shù)計(jì)數(shù):記錄當(dāng)前已經(jīng)鎖存的真隨機(jī)數(shù)的數(shù)量,如果當(dāng)前真隨機(jī)數(shù)的數(shù)量與轉(zhuǎn)發(fā)表的數(shù)量相同,則進(jìn)入下一步,否則,返回步驟s1.2)以鎖定一個(gè)新的真隨機(jī)數(shù)進(jìn)來(lái)。當(dāng)前隨機(jī)數(shù)的數(shù)量少于轉(zhuǎn)發(fā)表的數(shù)量時(shí),繼續(xù)鎖存輸入的隨機(jī)數(shù),當(dāng)鎖存的隨機(jī)數(shù)的數(shù)量與轉(zhuǎn)發(fā)表的數(shù)量相同是,進(jìn)入工作狀態(tài),可以進(jìn)行正常的訓(xùn)練與查詢。采用這樣隨機(jī)確定映射參數(shù)方式,使轉(zhuǎn)發(fā)表的性能穩(wěn)定,避免由于極端的輸入組合,造成哈希映射的惡化。實(shí)施例5:在實(shí)施例1的基礎(chǔ)上,結(jié)合附圖1、圖3和圖4所示,所述轉(zhuǎn)發(fā)表的訓(xùn)練包括mux電路、fifo電路、訓(xùn)練控制模塊、轉(zhuǎn)發(fā)表和轉(zhuǎn)發(fā)表優(yōu)先選擇電路,所述轉(zhuǎn)發(fā)表的查詢包括mux電路、fifo電路、查詢控制模塊和輸出電路比較電路,其中:mux電路:為fpga二選一電路,用以實(shí)現(xiàn)在電路處于初始狀態(tài)與鎖存真隨機(jī)數(shù)狀態(tài)時(shí)候,轉(zhuǎn)發(fā)表電路不接受外部的訓(xùn)練與查詢信息;fifo電路緩存所述數(shù)據(jù)信息源地址sa、虛擬局域網(wǎng)vlan和端口號(hào)port,每隔一個(gè)時(shí)鐘周期提取一條信息并輸入下游電路;訓(xùn)練控制模塊:用于接收f(shuō)ifo電路輸入的訓(xùn)練信息,包括哈希計(jì)算電路,以及由鎖存電路與判斷電路組成的讀寫流水控制電路,根據(jù)讀寫流水控制電路的判決來(lái)控制sa_vlan與端口號(hào)port的關(guān)聯(lián)信息寫入轉(zhuǎn)發(fā)表;轉(zhuǎn)發(fā)表優(yōu)先選擇電路:用于控制各個(gè)轉(zhuǎn)發(fā)表被寫入表項(xiàng)的優(yōu)先級(jí),當(dāng)某一個(gè)sa_vlan與端口號(hào)port的關(guān)聯(lián)信息可以被寫入多個(gè)轉(zhuǎn)發(fā)表中時(shí)候,此電路根據(jù)優(yōu)先級(jí)確定只有最高優(yōu)先級(jí)的轉(zhuǎn)發(fā)表能寫入此關(guān)聯(lián)信息;查詢控制模塊:包括哈希計(jì)算電路、老化控制電路和時(shí)隙控制電路,用于接收f(shuō)ifo電路輸入的查詢信息,并選擇轉(zhuǎn)發(fā)表讀取數(shù)據(jù)并輸出至輸出比較電路,同時(shí)由老化控制電路完成表項(xiàng)的老化功能;輸出比較電路:由比較器組成,所述比較器的數(shù)量與轉(zhuǎn)發(fā)表的數(shù)量相同,首先判斷轉(zhuǎn)發(fā)表輸出表項(xiàng)內(nèi)容是否有效,如果有效,則判斷輸出的sa_vlan是否與輸入的da_vlan一致,如果一致則輸出查詢結(jié)果。優(yōu)選地,所述查詢控制模塊包括:時(shí)隙控制電路:所述時(shí)隙控制電路在奇時(shí)隙選擇查詢模塊對(duì)轉(zhuǎn)發(fā)表進(jìn)行讀取操作,偶時(shí)隙選擇age控制模塊的對(duì)轉(zhuǎn)發(fā)表進(jìn)行讀寫操作;老化控制電路:用于轉(zhuǎn)發(fā)表的表項(xiàng)的老化;哈希計(jì)算電路:用于轉(zhuǎn)發(fā)表的訓(xùn)練和轉(zhuǎn)發(fā)表的查詢中,真隨機(jī)數(shù)與da_vlan的哈希計(jì)算。外部交換電路收到一個(gè)數(shù)據(jù)包,會(huì)將數(shù)據(jù)包的da_vlan,與真隨機(jī)數(shù)經(jīng)過(guò)哈希計(jì)算,計(jì)算出一個(gè)地址。如果需要轉(zhuǎn)發(fā)的數(shù)據(jù)包中不包含虛擬局域網(wǎng)vlan,則只將目的地址da與真隨機(jī)數(shù)進(jìn)行哈希計(jì)算。如果轉(zhuǎn)發(fā)表的數(shù)量為n,則將同時(shí)計(jì)算n個(gè)地址,并且查詢出n個(gè)表項(xiàng)的內(nèi)容。這n個(gè)表項(xiàng)中,如果其中一個(gè)表項(xiàng)滿足:表項(xiàng)有效并且表項(xiàng)的sa_vlan與查詢的da_vlan相同,則查詢成功,將此表項(xiàng)中的端口號(hào)作為數(shù)據(jù)包的轉(zhuǎn)發(fā)端口發(fā)送出去。否則,顯示查詢失敗。fifo電路將數(shù)據(jù)包的mac和vlan提取出來(lái),然后與真隨機(jī)數(shù)經(jīng)過(guò)哈希計(jì)算,計(jì)算出一個(gè)地址。如果轉(zhuǎn)發(fā)表的數(shù)量為n,則將同時(shí)計(jì)算n個(gè)地址,并且查詢出n個(gè)表項(xiàng)的內(nèi)容。這n個(gè)表項(xiàng)中,如果其中一個(gè)表項(xiàng)滿足:表項(xiàng)是有效的且表項(xiàng)內(nèi)的mac和vlan與查詢的目的mac和vlan一樣,則查詢成功,將此表項(xiàng)中的端口號(hào)作為數(shù)據(jù)包的轉(zhuǎn)發(fā)端口發(fā)送出去。否則,顯示查詢失敗。fpga的bram有兩個(gè)接口,這兩個(gè)接口可以同時(shí)訪問(wèn),其中一個(gè)接口給轉(zhuǎn)發(fā)表訓(xùn)練電路專用,而另外一個(gè)接口給查詢功能以及老化控制電路按照時(shí)隙輪流使用。當(dāng)一個(gè)數(shù)據(jù)包需要轉(zhuǎn)發(fā),fifo電路會(huì)提取mac或sa_vlan,然后發(fā)送給轉(zhuǎn)發(fā)表,轉(zhuǎn)發(fā)表查詢模塊收到一個(gè)mac或sa_vlan后,會(huì)先緩存于fifo電路中,每到奇計(jì)數(shù)時(shí)鐘周期,一個(gè)mac或sa_vlan會(huì)被讀取出來(lái),經(jīng)過(guò)哈希計(jì)算,計(jì)算的結(jié)果是一個(gè)表項(xiàng)的地址,記作ki(i=1,2,3,…n),這樣n個(gè)表的地址ki(i=1,2,3,…n)對(duì)應(yīng)的表項(xiàng)都會(huì)被讀取出來(lái),然后送入輸出比較電路,判斷哪個(gè)有效表項(xiàng)中的mac或sa_vlan與待查詢能對(duì)應(yīng)上,則表項(xiàng)中的端口號(hào)就是要輸出的端口。實(shí)施例6:在以上實(shí)施例的基礎(chǔ)上,結(jié)合附圖1-4所示,所述哈希計(jì)算為:將輸入的從以太包中提取的sa_vlan或da_vlan由數(shù)據(jù)分段電路分割為n個(gè)m比特,分別為gf(k1),gf(k2),…,gf(kn),與輸入的隨機(jī)數(shù)gf(r)的計(jì)算公式為:再將h做crc運(yùn)算。采用同一個(gè)哈希計(jì)算規(guī)則gf(r),輸入不同的參數(shù)構(gòu)造成不同的哈希算子。同時(shí)采用隨機(jī)數(shù)作為哈希算子的參數(shù)來(lái)增加不同哈希映射之間的不相干性。以上所述,僅是本發(fā)明的較佳實(shí)施例,并非對(duì)本發(fā)明做任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡(jiǎn)單修改、等同變化,均落入本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)12當(dāng)前第1頁(yè)12