a Method Thereof”的美國專利申請[代理人案號XPL-01200]中討論了示例性溢出FIFO,其內(nèi)容通過引用以其整體被并入于此。當(dāng)級別的層級中的最高級別中的行溢出時(shí),使用溢出FIFO 210。溢出FIF0210可以被存儲(chǔ)在SRAM中。備選地,溢出FIFO 210是固定功能硬件。溢出FIFO 210通常由最高級別中的所有N個(gè)計(jì)數(shù)器共享和使用。
[0058]當(dāng)行開始在最高級別(例如,圖2B中的級別2)中溢出時(shí),溢出FIFO 210將存儲(chǔ)正在溢出的所有計(jì)數(shù)器的相關(guān)聯(lián)的計(jì)數(shù)器標(biāo)識(shí)符。通常,只要任何級別2計(jì)數(shù)器205b中的任何計(jì)數(shù)器開始溢出,則溢出的計(jì)數(shù)器的相關(guān)聯(lián)的計(jì)數(shù)器標(biāo)識(shí)符和溢出寬度將被推入到溢出FIFO 210中。中斷被發(fā)送給CPU以讀取溢出FIFO 210以及讀取和重置或清除每個(gè)級別中的溢出計(jì)數(shù)器(例如,圖2B中的計(jì)數(shù)器C)。
[0059]圖3A圖示了根據(jù)本發(fā)明一些實(shí)施例的更新計(jì)數(shù)器的流程圖300。假設(shè)分級統(tǒng)計(jì)多路復(fù)用計(jì)數(shù)器包括兩個(gè)級別。進(jìn)一步假設(shè)計(jì)數(shù)器C包括為init_value的當(dāng)前值并且將用B的值來被更新,這可以導(dǎo)致不溢出、級別1溢出或者級別1溢出和級別2都溢出。
[0060]計(jì)數(shù)器C將用值B來被遞增(步驟305)。確定是否存在計(jì)數(shù)器C所在的行的級別1的行溢出(步驟310)。如果在步驟310處確定不存在級別1的行溢出,則級別1計(jì)數(shù)器C被遞增(步驟315)。如果必要,則級別1計(jì)數(shù)器C通過與另一可用子計(jì)數(shù)器級聯(lián)而被擴(kuò)展。并且,完成了計(jì)數(shù)器更新過程。在更新之后,級別1計(jì)數(shù)器值為leVel_l_init_ValUe+B。
[0061]另一方面,如果在步驟310處確定存在級別1的行溢出,則級別1計(jì)數(shù)器C帶環(huán)繞地被遞增并且如果初始使用多于一個(gè)子計(jì)數(shù)器則級別1計(jì)數(shù)器C被收縮(步驟320)。當(dāng)計(jì)數(shù)器被收縮時(shí),一個(gè)或多個(gè)子計(jì)數(shù)器被釋放用于重新分配。壓縮使得相同行中的其他計(jì)數(shù)器能夠自己擴(kuò)展或者該計(jì)數(shù)器能夠適應(yīng)自身。
[0062]然后,確定是否存在計(jì)數(shù)器C所在的行的級別2的行溢出(步驟325)。如果在步驟325處確定不存在級別2的行溢出,則級別2計(jì)數(shù)器C被遞增(步驟330)。如果必要,則級別2計(jì)數(shù)器C通過與另一可用子數(shù)器級聯(lián)而被擴(kuò)展。
[0063]另一方面,如果在步驟325處確定存在級別2的行溢出,則級別2計(jì)數(shù)器C帶環(huán)繞地被遞增并且通過移除一個(gè)或多個(gè)子計(jì)數(shù)器而被收縮(步驟335)。計(jì)數(shù)器C的計(jì)數(shù)器標(biāo)識(shí)符和溢出寬度被推入溢出FIFO中(步驟340)。
[0064]在更新計(jì)數(shù)器之后,級別1計(jì)數(shù)器值是(level_l_imt_value+B) % 2(rl+kl)0如果不存在級別2溢出,則級別2計(jì)數(shù)器值是level_2_init_value+(level_l_init_value+B) ? (rl+kl)。如果存在級別2溢出,則級別2計(jì)數(shù)器值是(level_2_init_value+ (level_l_init_value+B) ? (rl+kl)) % 2(f2+k2),而溢出的計(jì)數(shù)器的計(jì)數(shù)器標(biāo)識(shí)符和溢出寬度被推入溢出FIFO中。
[0065]應(yīng)該注意,更新多于兩個(gè)級別的層級中的計(jì)數(shù)器的過程類似于圖3A中所示的過程。例如,圖3B圖示了更新J個(gè)級別的層級中的計(jì)數(shù)器的流程圖350。
[0066]圖4圖示了根據(jù)本發(fā)明一些實(shí)施例的計(jì)數(shù)器更新示例400。假設(shè)分級統(tǒng)計(jì)多路復(fù)用計(jì)數(shù)器包括兩個(gè)級別。進(jìn)一步假設(shè)rl = kl = r2 = k2 = 4并且計(jì)數(shù)器將被遞增1。初始地,級別1計(jì)數(shù)器C使用兩個(gè)程序塊,其具有12’ hFFF的初始值,以及級別2計(jì)數(shù)器C使用兩個(gè)程序塊,其具有12’hFFF的初始值,而相同行中的其他磚已經(jīng)被利用(即,不可用)。計(jì)數(shù)器C的初始值是12’ hFFF*2s+12’ hFFF = ’ hlOOEFF。在更新之后,計(jì)數(shù)器C的值應(yīng)該是 ’hlOOFOO。
[0067]在更新期間,級別1計(jì)數(shù)器C需要三個(gè)程序塊,因?yàn)樾枰鎯?chǔ)13’hl000(=12’hFFF+l)的值,但是級別1計(jì)數(shù)器C不能被擴(kuò)展。這樣,級別1的行溢出發(fā)生。級別1計(jì)數(shù)器C環(huán)繞并且收縮到一個(gè)程序塊,留下8’h00。5’hl0(= 13’hl000>>(4+4))的值需要被添加到級別2計(jì)數(shù)器C。
[0068]級別2計(jì)數(shù)器C需要三個(gè)程序塊,因?yàn)樾枰鎯?chǔ)13’ hl00F( = 12’ hFFF+5’ hlO)的值,但是級別2計(jì)數(shù)器C不能被擴(kuò)展。這樣,級別2的行溢出發(fā)生。級別2計(jì)數(shù)器C環(huán)繞并且收縮到一個(gè)程序,留下8’ hOF,同時(shí)計(jì)數(shù)器C的計(jì)數(shù)器標(biāo)識(shí)符和12位的溢出寬度被推入到溢出FIFO中。
[0069]最終的計(jì)數(shù)器值可以被重新構(gòu)造為:溢出FIFO值+級別2值+級別1值。溢出FIFO值是用于溢出FIFO中的計(jì)數(shù)器標(biāo)識(shí)的所有發(fā)生的總和級別2值是level_2_ctr*2(rl+kl),其中,level_2_ctr是級別2計(jì)數(shù)器的值。級別1值是leVel_l_Ctr,其是級別1計(jì)數(shù)器的值。在示例400中,計(jì)數(shù)器C的最終計(jì)數(shù)器值是(l-entry*212+8’h0F)*2s+8’h00 = ’hlOOFOO。
[0070]如上所述,每一行中的開銷包括子計(jì)數(shù)器到基礎(chǔ)計(jì)數(shù)器的S位映射。繼續(xù)以上示例,由于存在8個(gè)子計(jì)數(shù)器,所以使用8位映射。假設(shè)S位映射為8’bl0010101,其中映射中的“1”界定計(jì)數(shù)器邊界。8’bl0010101映射指示基礎(chǔ)計(jì)數(shù)器ctr_0與子計(jì)數(shù)器0相關(guān)聯(lián)(基于映射中的第0位),基礎(chǔ)計(jì)數(shù)器ctr_l與子計(jì)數(shù)器1和子計(jì)數(shù)器2相關(guān)聯(lián)(基于映射中的第1位和第2位),基礎(chǔ)計(jì)數(shù)器ctr_2與子計(jì)數(shù)器3和子計(jì)數(shù)器4相關(guān)聯(lián)(基于映射中的第3位和第4位),以及基礎(chǔ)計(jì)數(shù)器ctr_3與子計(jì)數(shù)器5、子計(jì)數(shù)器6和子計(jì)數(shù)器7相關(guān)聯(lián)(基于映射中的第5位、第6位和第7位)。8’ bl0010101映射指示每個(gè)子計(jì)數(shù)器的移位量?;谶@種移位,第7位(或第75個(gè)子計(jì)數(shù)器)可以潛在地被移動(dòng)很多位,這是硬件密集的。在一些實(shí)施例中,為了使移位量最小,使用了移位和纏繞(twisting)技術(shù)。
[0071]圖5圖示了根據(jù)本發(fā)明一些實(shí)施例的將子計(jì)數(shù)器映射到基礎(chǔ)計(jì)數(shù)器的示例500。為了成為硬件友好地,對于如何將子計(jì)數(shù)器映射到基礎(chǔ)計(jì)數(shù)器施加限制。在一些實(shí)施例中,該限制為每個(gè)基礎(chǔ)計(jì)數(shù)器被分配至少一個(gè)子計(jì)數(shù)器但是不多于預(yù)定數(shù)量的子計(jì)數(shù)器。在一些實(shí)施例中,每個(gè)基礎(chǔ)計(jì)數(shù)器被分配q個(gè)子計(jì)數(shù)器,其中1 < q < 4。這樣,當(dāng)計(jì)數(shù)器需要被擴(kuò)展超過子計(jì)數(shù)器的最大允許的數(shù)量時(shí),引入了行溢出的第二機(jī)制。
[0072]移位網(wǎng)絡(luò)包括下移網(wǎng)絡(luò)和上移網(wǎng)絡(luò)。基礎(chǔ)計(jì)數(shù)器被分開在下移網(wǎng)絡(luò)和上移網(wǎng)絡(luò)之間。典型地,下基礎(chǔ)計(jì)數(shù)器與下移網(wǎng)絡(luò)相關(guān)聯(lián)以將子計(jì)數(shù)器向上移位。通常,上基礎(chǔ)計(jì)數(shù)器與上移網(wǎng)絡(luò)相關(guān)聯(lián)以將子計(jì)數(shù)器向下移位。如果子計(jì)數(shù)器的排名小于P/2,則子計(jì)數(shù)器通常被向上移位,而如果子計(jì)數(shù)器的排名大于或等于P/2,則子計(jì)數(shù)器通常被向下移位。
[0073]如圖5所示,使用偏移和纏繞技術(shù),S位映射為8’ 0010_1101o S位映射從右側(cè)讀取用于下部P/2個(gè)基礎(chǔ)計(jì)數(shù)器以及從左側(cè)讀取用于上部P/2個(gè)基礎(chǔ)計(jì)數(shù)器。映射中的“1”界定計(jì)數(shù)器邊界。通過從右側(cè)讀取,該映射中的第0位指示子計(jì)數(shù)器0被映射到基礎(chǔ)計(jì)數(shù)器ctr_0。該映射中的第2位指示子計(jì)數(shù)器1和子計(jì)數(shù)器2被映射到基礎(chǔ)計(jì)數(shù)器ctr_l。由于已經(jīng)存在兩個(gè)計(jì)數(shù)器,因此對于其他(上)兩個(gè)計(jì)數(shù)器來說,從左側(cè)讀取。通過從左側(cè)讀取,該映射中的第3位指示子計(jì)數(shù)器3和子計(jì)數(shù)器4被映射到基礎(chǔ)計(jì)數(shù)器ctr_2。該映射中的第5位指示子計(jì)數(shù)器5、6和7被映射到基礎(chǔ)計(jì)數(shù)器ctr_3?;谠摷夹g(shù),計(jì)數(shù)器被擴(kuò)展到全寬度,使得減少了移位的全范圍。在示例500中,通過鏡像移位邏輯來消除移位的整個(gè)層。
[0074]如果子計(jì)數(shù)器的排名小于P/2,則該子計(jì)數(shù)器與下移網(wǎng)絡(luò)相關(guān)聯(lián),而如果子計(jì)數(shù)器的排名多P/2,則該子計(jì)數(shù)器與上移網(wǎng)絡(luò)相關(guān)聯(lián)。下移網(wǎng)絡(luò)將下部子計(jì)數(shù)器i向上移位4*rank(i)+dist(i)-1,其中rank(i)是低位中從最低有效位開始的1的數(shù)量,以及dist⑴是從來自低位的1的最后一位以后0的數(shù)量。例如,子計(jì)數(shù)器0被映射到base ctr_0 (4*0+0-0 = 0,其對應(yīng)于基礎(chǔ)計(jì)數(shù)器0的擴(kuò)展),子計(jì)數(shù)器1被映射到basectr_l (4*1+0-1 = 3,其對應(yīng)于基礎(chǔ)計(jì)數(shù)器1的擴(kuò)展),以及子計(jì)數(shù)器2被映射到basectr_l (4*1+1-2 = 3,其對應(yīng)于基礎(chǔ)計(jì)數(shù)器1的擴(kuò)展)。
[0075]上移網(wǎng)絡(luò)將上子計(jì)數(shù)器i向下移位稍微不同的公式,即,4*reverSe_rank (i) +reverse_dist (i) - (S-l-1),其中 rev