本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法及數(shù)據(jù)處理系統(tǒng)。
背景技術(shù):
在設(shè)計以太網(wǎng)交換芯片時,通常需要使用大容量的多端口存儲器,例如2讀1寫(同時支持2個讀端口和1個寫端口)存儲器、1讀2寫存儲器、2讀2寫存儲器或者更多端口的存儲器。
通常情況下,供應(yīng)商一般只提供1個讀或者寫存儲器、1讀1寫存儲器和2個讀或者寫存儲器,如此,設(shè)計者僅能基于上述基本存儲器單元構(gòu)建多個端口的存儲器。
報文緩存是一類特殊的多端口存儲器,其寫入是可控的,亦即,順序?qū)懭耄亲x出卻是隨機(jī)的。用戶的其中一種需求中,單向交換容量為2.4Tbps的以太網(wǎng)交換芯片,為了做到線速寫入和讀出,每個最小報文(64字節(jié))花費的時間只有280ps,需要核心頻率高達(dá)3.571GHz,該種需求目前在現(xiàn)有的半導(dǎo)體工藝上無法實現(xiàn)。為了實現(xiàn)上述目標(biāo),通常的做法是,把整個芯片分割成多個獨立的報文轉(zhuǎn)發(fā)和處理單元并行進(jìn)行處理,報文轉(zhuǎn)發(fā)和處理單元的英文名稱為Slice,例如分割成4個Slice并行處理,每個Slice需要處理的數(shù)據(jù)帶寬就降低,對核心頻率的要求也會降低到原核心頻率的1/4。相應(yīng)的,實現(xiàn)該方案過程中,對于報文緩存需要同時提供8個端口供4個Slice訪問,其中4個是讀端口,4個是寫端口。
另外,多端口存儲器不僅要考慮到設(shè)計的移植性,還需要考慮到設(shè)計的可擴(kuò)展性,設(shè)計的存儲架構(gòu)能夠很方便的從4個slice擴(kuò)展到6個,8個或者更多slice的架構(gòu)。
一般的,在SRAM的端口類型為1個讀或者寫,2個讀或者寫,以及1寫或者2讀的基礎(chǔ)上,通過定制設(shè)計,例如:修改存儲單元的辦法,以及算法設(shè)計來增加SRAM的端口數(shù)量。
定制設(shè)計的周期一般比較長,需要做spice仿真,還要提供存儲器編譯器,以生成不同大小和類型的SRAM,對于供應(yīng)商來說,一般需要6~9個月的時間,才能提供一個新型的SRAM的類型,而且這樣的定制設(shè)計是與具體的工藝(例如GlobalFoundries 14nm, 28nm還是TSMC的28nm,16nm)強(qiáng)相關(guān)的,工藝一旦改變,定制設(shè)計的SRAM庫需要重新設(shè)計。
算法設(shè)計是基于廠家提供的現(xiàn)成的SRAM類型,通過算法來實現(xiàn)多端口存儲器,最大的好處是避免定制設(shè)計,縮短時間,同時設(shè)計與廠家?guī)鞜o關(guān),可以很容易的在不同的廠家?guī)熘g移植。
如圖1所示,一種通過算法設(shè)計的方式,設(shè)計一個支持4個slice訪問的4讀4寫的存儲架構(gòu),該實施方式中,采用1R1W的SRAM2D設(shè)計大容量的2R2W的SRAM,邏輯上總共需要4塊65536深度2304寬度大小的SRAM2D,由于單個物理SRAM2D的容量無法滿足上述需求,需要把1塊65536深度2304寬度的邏輯SRAM切割成多塊物理SRAM,例如:可以切割成32塊16384深度288寬度的物理塊,這樣總共需要32x4=128塊物理塊;以上述2R2W SRAM為基本單元,搭建18M字節(jié)大小的4R4W SRAM。
結(jié)合圖2所示,邏輯上總共需要4塊65536深度2304寬度大小的2R2W的SRAM,即:需要SRAM2D(16384深度288寬度)的物理塊的個數(shù)為512塊;根據(jù)現(xiàn)有數(shù)據(jù)可知: 14nm工藝條件下,一塊16384深度288寬度大小SRAM2D物理塊的大小是0.4165平方厘米,功耗是0.108Watts(核心電壓=0.9V,結(jié)溫=125攝氏度,工藝條件是最快);上述采用廠家?guī)焯峁┑幕締卧猄RAM復(fù)制多份拷貝,構(gòu)建更多端口SRAM的方法,雖然設(shè)計原理上顯而易見,但是面積開銷非常大,以上述方案為例,單單18M字節(jié)4讀4寫SRAM的面積就占用了213.248平方厘米,總的功耗為55.296Watts,這里還沒有考慮到插入Decap和DFT以及布局布線的開銷,通過此種算法設(shè)計方式設(shè)計出的多端口SRAM,其占用面積以及總功耗均十分龐大;
同時這樣的設(shè)計擴(kuò)展性很差,如果要支持例如8個slice的架構(gòu),需要有16個端口,其中8個讀端口和8個寫端口,SRAM需要做成8讀8寫,SRAM所占用的面積和功耗是成倍的增長。
如圖3A所示,現(xiàn)有技術(shù)中,另外一種算法設(shè)計方式,以2R2W的SRAM為基本單元,通過空間上的分割實現(xiàn)多個端口的報文緩存,以4個slices的報文緩存架構(gòu)為例,每個X?Y?是一個CCE,其英文全稱為Criss-Cross Element,中文譯文為:縱橫內(nèi)存單元;橫向的2個CCE構(gòu)成一個CCHG,所述CCHG的英文全稱為:Criss-Cross Horizontal Group,中文譯文為:縱橫內(nèi)存水平分組;縱向的2個CCE構(gòu)成一個CCVG,所述CCVG的英文全稱為:Criss-Cross Vertical Group,中文譯文為:縱橫內(nèi)存垂直分組。
現(xiàn)有算法設(shè)計中,每個CCE均為2R2W的SRAM邏輯塊,大小是4.5M字節(jié),總共有4塊這樣的SRAM邏輯塊,構(gòu)成4R4W SRAM,大小是18M字節(jié)(4.5Mx4=18M)。
其中,S0、S1、S2、S3代表4個slice,每個slice舉例來說包含有6個100GE端口,從slice0或者slice1輸入去往slice0或者slice1的報文存入X0Y0, 從slice0或者slice1輸入去往slice2或者slice3的報文存入X1Y0,從slice2或者slice3輸入去往slice0或者slice1的報文存入X0Y1, 從slice2或者slice3輸入去往slice2或者slice3的報文存入X1Y1;對于組播報文,從Slice0或者Slice1來的組播報文同時存入X0Y0和X1Y0中;進(jìn)一步的,讀取報文的時候,slice0或者slice1將從X0Y0或者X0Y1中讀取報文,slice2或者slice3將從X1Y0或者X1Y1中讀取報文。
結(jié)合圖3B所示,基于2R2W構(gòu)建8R8W存儲器時,每個CCE同樣均為2R2W的SRAM邏輯塊,大小是4.5M字節(jié),總共有(8/2)2,共16塊這樣的SRAM邏輯塊,構(gòu)成8R8W SRAM,其寫入及讀出數(shù)據(jù)與上述4R4W存儲器相類似,在此不做詳細(xì)贅述。
結(jié)合圖4所示,現(xiàn)有技術(shù)中算法設(shè)計的每一個CCE的架構(gòu)圖,一個X?Y?邏輯上需要4塊16384深度2304寬度的SRAM,每一個邏輯上16384深度和2304寬度的SRAM可以切割成8塊16384深度和288寬度的物理SRAM2D;這樣一個18M字節(jié)的報文緩存總共需要4x4x8=128塊16384深度和288寬度的物理SRAM2D,總的面積為51.312平方厘米,總的功耗是13.824Watts(核心電壓=0.9V,結(jié)溫=125攝氏度,工藝條件是最快)
上述第二種算法設(shè)計的面積和功耗開銷只有上述第一種算法設(shè)計的1/4,然而,其擴(kuò)展性卻仍然得不到很好的滿足。
結(jié)合圖5所示,基于2R2W SRAM設(shè)計多端口的報文緩存存在可擴(kuò)展性問題,基于2R2W存儲器實現(xiàn)的CCE個數(shù)= (Slice個數(shù)/2) ^2,即CCE的個數(shù)是slice個數(shù)除以2再做2的平方得到,隨著slice的個數(shù)增加,CCE的個數(shù)將多到無法實現(xiàn),對于6個slice、8個slice以及更多的端口擴(kuò)展,CCE的個數(shù)逐級增長,導(dǎo)致系統(tǒng)難以負(fù)荷。
技術(shù)實現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明的目的在于提供一種可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法及處理系統(tǒng)。
為實現(xiàn)上述發(fā)明目的之一,本發(fā)明一實施方式提供的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法,所述多端口存儲器為2讀n寫的多端口存儲器單元,n為偶數(shù);
所述方法包括:
將2個2R1W存儲器并行拼裝為一個Bank存儲單元;
將n/2個Bank存儲單元在深度上拼裝為一個2讀n寫的多端口存儲器單元的硬件框架;
一個時鐘周期下,當(dāng)數(shù)據(jù)通過n個寫端口寫入到2讀n寫的多端口存儲器單元時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述方法還包括:
一個時鐘周期下,當(dāng)數(shù)據(jù)從2讀n寫的多端口存儲器單元的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù)。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述方法還包括:
基于n/2個所述2讀n寫的多端口存儲器單元直接形成n讀n寫存儲器的硬件框架;
一個時鐘周期下,當(dāng)數(shù)據(jù)通過n個寫端口寫入到n讀n寫的多端口存儲器時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則根據(jù)數(shù)據(jù)的目的端口將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,根據(jù)數(shù)據(jù)的目的端口將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述方法還包括:
一個時鐘周期下,當(dāng)數(shù)據(jù)從n讀n寫的多端口存儲器的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù)。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述方法還包括:
根據(jù)2R1W存儲器的深度和寬度選擇2m+1塊具有相同深度及寬度的SRAM2P存儲器構(gòu)建2R1W存儲器的硬件框架,m為正整數(shù);
每個SRAM2P存儲器均具有M個指針地址,其中,多個所述SRAM2P存儲器中的一個為輔助存儲器,其余均為主存儲器;
當(dāng)數(shù)據(jù)寫入2R1W存儲器和/或從所述2R1W存儲器讀出時,根據(jù)數(shù)據(jù)的當(dāng)前指針位置,關(guān)聯(lián)主存儲器以及輔助存儲器中的數(shù)據(jù),對其做異或運算,完成數(shù)據(jù)的寫入和讀出。
為了實現(xiàn)上述發(fā)明目的之一,本發(fā)明一實施方式提供一種可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理系統(tǒng),所述多端口存儲器為2讀n寫的多端口存儲器單元,n為偶數(shù);所述系統(tǒng)包括:數(shù)據(jù)構(gòu)建模塊,數(shù)據(jù)處理模塊;
所述數(shù)據(jù)構(gòu)建模塊具體用于:將2個2R1W存儲器并行拼裝為一個Bank存儲單元;
將n/2個Bank存儲單元在深度上拼裝為一個2讀n寫的多端口存儲器單元的硬件框架;
所述數(shù)據(jù)處理模塊具體用于:當(dāng)確定一個時鐘周期下,數(shù)據(jù)通過n個寫端口寫入到2讀n寫的多端口存儲器單元時;
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述數(shù)據(jù)處理模塊還用于:
當(dāng)確定一個時鐘周期下,數(shù)據(jù)從2讀n寫的多端口存儲器單元的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù)。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述數(shù)據(jù)構(gòu)建模塊還用于:基于n/2個所述2讀n寫的多端口存儲器單元直接形成n讀n寫存儲器的硬件框架;
所述數(shù)據(jù)處理模塊還用于:當(dāng)確定一個時鐘周期下,數(shù)據(jù)通過n個寫端口寫入到n讀n寫的多端口存儲器時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則根據(jù)數(shù)據(jù)的目的端口將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,根據(jù)數(shù)據(jù)的目的端口將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述數(shù)據(jù)處理模塊還用于:
當(dāng)確定一個時鐘周期下,數(shù)據(jù)從n讀n寫的多端口存儲器的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù)。
作為本發(fā)明一實施方式的進(jìn)一步改進(jìn),所述數(shù)據(jù)構(gòu)建模塊還用于:根據(jù)2R1W存儲器的深度和寬度選擇2m+1塊具有相同深度及寬度的SRAM2P存儲器構(gòu)建2R1W存儲器的硬件框架,m為正整數(shù);
每個SRAM2P存儲器均具有M個指針地址,其中,多個所述SRAM2P存儲器中的一個為輔助存儲器,其余均為主存儲器;
當(dāng)數(shù)據(jù)寫入2R1W存儲器和/或從所述2R1W存儲器讀出時,所述數(shù)據(jù)處理模塊還用于:根據(jù)數(shù)據(jù)的當(dāng)前指針位置,關(guān)聯(lián)主存儲器以及輔助存儲器中的數(shù)據(jù),對其做異或運算,完成數(shù)據(jù)的寫入和讀出。
與現(xiàn)有技術(shù)相比,本發(fā)明的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法及處理系統(tǒng),基于現(xiàn)有的SRAM類型,通過算法的方式搭建更多端口的SRAM,僅僅用最小的代價便可以最大限度的支持多端口SRAM;其實現(xiàn)過程中,避免采用復(fù)雜的控制邏輯和額外的多端口SRAM或者寄存器陣列資源,利用報文緩存的特殊性,通過空間分割和時間分割,僅需要簡單的異或運算就可實現(xiàn)多個端口的報文緩存,同時,通過本發(fā)明實現(xiàn)的多端口存儲器,其所有緩存資源可以在任意輸入端口之間實現(xiàn)完全共享,邏輯上采用更少的CCE即可以構(gòu)建多端口存儲器,容易實現(xiàn)端口的擴(kuò)展,本發(fā)明具有更低的功耗,更快的處理速度,以及節(jié)省更多的資源或面積,其報文緩存架構(gòu)具有更好的擴(kuò)展性,實現(xiàn)簡單,節(jié)約人力及物質(zhì)成本。
附圖說明
圖1是現(xiàn)有技術(shù)中,基于1R1W存儲器采用算法設(shè)計實現(xiàn)的2R2W存儲器的報文緩存邏輯單元示意圖;
圖2是現(xiàn)有技術(shù)中,基于2R2W存儲器采用算法設(shè)計實現(xiàn)的4R4W存儲器的報文緩存邏輯單元示意圖;
圖3A是現(xiàn)有技術(shù)中,基于2R2W存儲器采用另一種算法設(shè)計實現(xiàn)的4R4W存儲器的報文緩存架構(gòu)示意圖;
圖3B是現(xiàn)有技術(shù)中,基于2R2W存儲器采用另一種算法設(shè)計實現(xiàn)的8R8W存儲器的報文緩存架構(gòu)示意圖;
圖4是圖3中其中一個CCE的報文緩存邏輯單元示意圖;
圖5是現(xiàn)有技術(shù)中,基于2R2W存儲器采用算法設(shè)計擴(kuò)展存儲器端口時,2R2W存儲器與CCE數(shù)量對比關(guān)系示意圖;
圖6是本發(fā)明一實施方式中2讀n寫的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法的流程示意圖;
圖7是本發(fā)明第一實施方式中,通過定制設(shè)計形成的2R1W存儲器的數(shù)字電路結(jié)構(gòu)示意圖;
圖8是本發(fā)明第二實施方式的,通過定制設(shè)計形成的2R1W存儲器讀寫分時操作示意圖;
圖9是本發(fā)明第三實施方式中,采用算法設(shè)計形成的2R1W存儲器的報文緩存邏輯單元示意圖;
圖10a是本發(fā)明第四實施方式中,采用算法設(shè)計形成的2R1W存儲器的報文緩存邏輯單元示意圖;
圖10b是對應(yīng)圖10a存儲器塊編號映射表的結(jié)構(gòu)示意圖;
圖11是本發(fā)明第五實施方式中,提供的2R1W存儲器的數(shù)據(jù)處理方法的流程示意圖;
圖12是本發(fā)明第五實施方式中,提供的2R1W存儲器的的報文緩存邏輯單元示意圖;
圖13是本發(fā)明是一具體實施方式中,2個Bank的報文緩存架構(gòu)示意圖;
圖14是本發(fā)明一實施方式中n讀n寫的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法的流程示意圖;
圖15A是本發(fā)明是一具體實施方式中,4R4W存儲器的報文緩存架構(gòu)示意圖;
圖15B是本發(fā)明是一具體實施方式中,8R8W存儲器的報文緩存架構(gòu)示意圖;
圖16是本發(fā)明是具體實施方式中,基于2讀n寫的存儲器擴(kuò)展存儲器端口時,2讀n寫存儲器與CCE數(shù)量對比關(guān)系示意圖;
圖17是本發(fā)明一實施方式中提供的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理系統(tǒng)的模塊示意圖。
具體實施方式
以下將結(jié)合附圖所示的各實施方式對本發(fā)明進(jìn)行詳細(xì)描述。但這些實施方式并不限制本發(fā)明,本領(lǐng)域的普通技術(shù)人員根據(jù)這些實施方式所做出的結(jié)構(gòu)、方法、或功能上的變換均包含在本發(fā)明的保護(hù)范圍內(nèi)。
結(jié)合圖6所示,本發(fā)明一實施方式提供的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法,該實施方式中,所述多端口存儲器為2讀n寫的多端口存儲器單元,n為偶數(shù)。
所述方法包括:
將2個2R1W存儲器并行拼裝為一個Bank存儲單元;
將n/2個Bank存儲單元在深度上拼裝為一個2讀n寫的多端口存儲器單元的硬件框架;
一個時鐘周期下,當(dāng)數(shù)據(jù)通過n個寫端口寫入到2讀n寫的多端口存儲器單元時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
一個時鐘周期下,當(dāng)數(shù)據(jù)從2讀n寫的多端口存儲器單元的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù)。
本發(fā)明優(yōu)選實施方式中,建立所述2R1W存儲器有五種方法。
如圖7所示,第一種實施方式中,在6T SRAM的基礎(chǔ),把一根字線分割成左右兩個,這樣可以做成2個讀端口同時操作或者1個寫端口,這樣從左邊MOS管讀出的數(shù)據(jù)和右邊MOS管讀出的數(shù)據(jù)可以同時進(jìn)行,需要注意的是,右邊MOS管讀出的數(shù)據(jù)需要反相之后才可以用,同時為了不影響數(shù)據(jù)讀取的速度,讀出的感應(yīng)放大器需要用偽差分放大器。這樣,6T SRAM面積不變,唯一的代價是增加一倍的字線,從而保證總體的存儲密度基本不變。
如圖8所示,第二種實施方式中,通過定制設(shè)計形成的2R1W存儲器讀寫操作流程示意圖;
通過定制設(shè)計可以增加SRAM的端口,把一個字線切割成2個字線,將讀端口增加到2個;還可以通過分時操作的技術(shù),即讀操作在時鐘的上升沿進(jìn)行,而寫操作在時鐘的下降沿完成,這樣也可以把一個基本的1讀或者1寫的SRAM擴(kuò)展成1讀和1寫的SRAM類型,即1個讀和1個寫操作可以同時進(jìn)行,存儲密度基本不變。
如圖9所示,第三種實施方式中本發(fā)明一實施方式中采用算法設(shè)計形成的2R1W存儲器讀寫操作流程示意圖;
本實施方式中,以SRAM2P為基礎(chǔ)構(gòu)建2R1W的SRAM為例,所述SRAM2P是一種能夠支持1讀和1讀/寫的SRAM類型,即可以對SRAM2P同時進(jìn)行2個讀操作,或者1個讀和1個寫操作。
本實施方式中,通過復(fù)制一份SRAM以SRAM2P為基礎(chǔ)構(gòu)建2R1W的SRAM;該示例中,右邊的SRAM2P_1是左邊SRAM2P_0的拷貝,具體操作的時候,把兩塊SRAM2P作為1讀和1寫存儲器來使用;其中,寫入數(shù)據(jù)時,同時往左右兩個SRAM2P寫入數(shù)據(jù),讀出數(shù)據(jù)時,A固定從SRAM2P_0讀取,數(shù)據(jù)B固定從SRAM2P_1讀取,這樣就可以實現(xiàn)1個寫操作和2個讀操作并發(fā)進(jìn)行。
如圖10a、10b所示,第四種實施方式中,為另一實施方式中采用算法設(shè)計形成的2R1W存儲器讀寫操作流程示意圖;
該實施方式中,把邏輯上一整塊的16384深度的SRAM分割成邏輯上4塊4096深度的SRAM2P,編號依次為為0、1、2、3,再額外增加一塊4096深度的SRAM,編號為4,作為解決讀寫沖突用,對于讀數(shù)據(jù)A和讀數(shù)據(jù)B,永遠(yuǎn)保證這2個讀操作可以并發(fā)進(jìn)行,當(dāng)2個讀操作的地址是處于不同的SRAM2P中時,因為任何一個SRAM2P都可以配置成1R1W類型,所以讀寫不會有沖突;當(dāng)2個讀操作的地址處于同一塊SRAM2P中時,例如:均處于SRAM2P_0中,由于同一個SRAM2P最多只能提供2個端口同時操作,此時,其端口被2個讀操作占用,如果恰好有一個寫操作要寫入SRAM2P_0,那么這時就把這個數(shù)據(jù)寫入存儲器第4塊SRAM2P_4中。
該種實施方式中,需要有一個存儲器塊映射表記錄哪一個存儲器塊存放有效數(shù)據(jù),如圖10b所示,存儲器塊映射表的深度和一個存儲器塊的深度相同,即都是4096個深度,每一個條目中在初始化后依次存放每個存儲器塊的編號,從0到4,圖10a示例中,由于SRAM2P_0在寫入數(shù)據(jù)的時候發(fā)生讀寫沖突,數(shù)據(jù)實際上是寫入到SRAM2P_4中,此時,讀操作同時會讀取存儲器映射表中對應(yīng)的內(nèi)容,原始內(nèi)容為{0, 1, 2, 3, 4},修改之后變成{4, 1, 2, 3, 0},第一個塊編號和第4個塊編號對調(diào),表示數(shù)據(jù)實際寫入到SRAM2P_4中,同時SRAM2P_0變成了備份條目。
當(dāng)讀取數(shù)據(jù)的時候,需要首先讀對應(yīng)地址的存儲器塊編號映射表,查看有效數(shù)據(jù)存放在哪一個存儲器塊中,例如當(dāng)要讀取地址5123的數(shù)據(jù),那么首先讀取存儲塊編號映射表地址1027(5123-4096=1027)存放的內(nèi)容,根據(jù)第二列的數(shù)字編號去讀取對應(yīng)存儲塊的地址1027的內(nèi)容。
對于寫數(shù)據(jù)操作,需要存儲器塊編號映射表提供1讀和1寫端口,對于2個讀數(shù)據(jù)操作,需要存儲器塊編號映射表提供2個讀端口,這樣總共需要存儲器塊編號映射表提供3個讀端口和1個寫端口,而且這4個訪問操作必須是同時進(jìn)行。
如圖11所示,第五種實施方式,即本發(fā)明的優(yōu)選實施方式中,2R1W存儲器的構(gòu)建方法包括:
根據(jù)所述2R1W存儲器的深度和寬度選擇2m+1塊具有相同深度及寬度的SRAM2P存儲器構(gòu)建2R1W存儲器的硬件框架,m為正整數(shù);
多個所述SRAM2P存儲器按照排列順序依次為SRAM2P(0)、SRAM2P(1)……、SRAM2P(2m),每個SRAM2P存儲器均具有M個指針地址,其中,多個所述SRAM2P存儲器中的一個為輔助存儲器,其余均為主存儲器;
該發(fā)明的優(yōu)選實施方式中,每塊SRAM2P存儲器的深度與寬度的乘積=(2R1W存儲器的深度與寬度乘積)/2m。
以下為了描述方便,對m取值為2、2R1W存儲器為16384深度、128寬度的SRAM存儲器進(jìn)行詳細(xì)描述。
則在該具體示例中,多個所述SRAM2P存儲器按照排列順序依次為SRAM2P(0)、SRAM2P(1)、SRAM2P(2)、SRAM2P(3)、SRAM2P(4),其中,SRAM2P(0)、SRAM2P(1)、SRAM2P(2)、SRAM2P(3)為主存儲器,SRAM2P(4)為輔助存儲器,每個SRAM2P存儲器的深度和寬度分別為4096和128,相應(yīng)的,每個SRAM2P存儲器均具有4096個指針地址;如果對每個SRAM2P存儲器的指針地址均獨立標(biāo)識,則每個SRAM2P存儲器的指針地址均為0~4095,若將全部的主存儲器的地址依次排列,則全部的指針地址范圍為: 0 ~ 16383。該示例中,SRAM2P(4)用于解決端口沖突,且在該實施方式中,無需增加存儲器塊編號映射表即可以滿足需求。
進(jìn)一步的,在上述硬件框架基礎(chǔ)上,所述方法還包括:
當(dāng)數(shù)據(jù)寫入2R1W存儲器和/或從所述2R1W存儲器讀出時,根據(jù)數(shù)據(jù)的當(dāng)前指針位置,關(guān)聯(lián)主存儲器以及輔助存儲器中的數(shù)據(jù),對其做異或運算,完成數(shù)據(jù)的寫入和讀出。
本發(fā)明優(yōu)選實施方式中,其數(shù)據(jù)寫入過程如下:
獲取當(dāng)前數(shù)據(jù)的寫入地址為W(x,y),x表示寫入數(shù)據(jù)所處于的SRAM2P存儲器的排列位置,0≤x<2m,y表示寫入數(shù)據(jù)所處于的SRAM2P存儲器中的具體的指針地址,0≤y≤M;
獲取與寫入地址具有相同指針地址的其余主存儲器中的數(shù)據(jù),將其同時與當(dāng)前寫入數(shù)據(jù)做異或運算,并將異或運算結(jié)果寫入到輔助存儲器的相同指針地址中。
結(jié)合圖12所示,本發(fā)明一具體示例中,本發(fā)明一具體示例中,將數(shù)據(jù)128比特全“1”寫入到SRAM2P(0)中的指針地址“5”,即當(dāng)前數(shù)據(jù)的寫入地址為W(0,5),在寫入數(shù)據(jù)過程中,除了直接將數(shù)據(jù)128比特全“1”寫入到指定位置SRAM2P(0)中的指針地址“5”外,同時,需要讀取其余主存儲器在相同指針地址的數(shù)據(jù),假設(shè)從SRAM2P(1)中的指針地址“5”讀出的數(shù)據(jù)為128比特全“1”,從SRAM2P(2)中的指針地址“5”讀出的數(shù)據(jù)為128比特全“0”,從SRAM2P(3)中的指針地址“5”讀出的數(shù)據(jù)為128比特全“1”,則將數(shù)據(jù)128比特全“1”、128比特全“0”、 128比特全“1”、 128比特全“1”做異或運算,并將其異或運算的結(jié)果“1”同時寫入到SRAM2P(4)中的指針地址“5”。如此,以保證2R1W存儲器的2個讀端口和1個寫端口同時操作。
進(jìn)一步的,本發(fā)明優(yōu)選實施方式中,其數(shù)據(jù)讀出過程如下:
若當(dāng)前兩個讀出數(shù)據(jù)的讀出地址處于相同的SRAM2P存儲器中,則
分別獲取兩個讀出數(shù)據(jù)的讀出地址為R1(x1,y1),R2(x2,y2),x1、y1均表示讀出數(shù)據(jù)所處于的SRAM2P存儲器的排列位置,0≤x1<2m,0≤x2<2m,y1、y2均表示讀出數(shù)據(jù)所處于的SRAM2P存儲器中的具體的指針地址,0≤y1≤M,0≤y2≤M;
任選其中一個讀出地址R1(x1,y1)中存儲的讀出數(shù)據(jù),從當(dāng)前的指定讀出地址中直接讀出當(dāng)前存儲的數(shù)據(jù);
獲取與另一個讀出地址具有相同指針地址的其余主存儲器、以及輔助存儲器中存儲的數(shù)據(jù),并對其做異或運算,將異或運算結(jié)果作為另一個讀出地址的存儲數(shù)據(jù)進(jìn)行輸出。
接續(xù)圖12所示,本發(fā)明一具體示例中,讀出的數(shù)據(jù)為2個,其指針地址分別為SRAM2P(0)中的指針地址“2”,以及SRAM2P(0)中的指針地址“5”,即當(dāng)前數(shù)據(jù)的讀出地址為R(0,2)和R(0,5);
在從2R1W存儲器讀出數(shù)據(jù)過程中,由于每一個SRAM2P只能保證1個讀端口和1個寫端口同時操作,讀端口直接從SRAM2P(0)中的指針地址“2”中讀取數(shù)據(jù),但是另一讀端口的請求無法滿足。相應(yīng)的,本發(fā)明采用異或運算的方式解決兩個讀端口同時讀出數(shù)據(jù)的問題。
對于R(0,5)中的數(shù)據(jù),分別讀取其他三個主存儲器以及輔助存儲器的指針地址“5”的數(shù)據(jù)并對其做異或運算,接續(xù)上例,從SRAM2P(1)中的指針地址“5”讀出的數(shù)據(jù)為“1”,從SRAM2P(2)中的指針地址“5”讀出的數(shù)據(jù)為“0”, 從SRAM2P(3)中的指針地址“5”讀出的數(shù)據(jù)為128比特全“1”,從SRAM2P(4)中的指針地址“5”讀出的數(shù)據(jù)為128比特全“1”,將數(shù)據(jù)128比特全“1”、128比特全“1”、 128比特全“0”、 128比特全“1”做異或運算,得到128比特“1”,并將其異或運算的結(jié)果128比特全“1”作為SRAM2P(0)中的指針地址“5”的存儲數(shù)據(jù)進(jìn)行輸出,通過上述過程得到的數(shù)據(jù),其結(jié)果與SRAM2P(0)中的指針地址“5”中存儲的數(shù)據(jù)完全一致,如此,根據(jù)數(shù)據(jù)的當(dāng)前指針位置,關(guān)聯(lián)主存儲器以及輔助存儲器中的數(shù)據(jù),對其做異或運算,完成數(shù)據(jù)的寫入和讀出。
本發(fā)明一實施方式中,若當(dāng)前兩個讀出數(shù)據(jù)的讀出地址處于不同的SRAM2P存儲器中,則直接獲取不同SRAM2P存儲器中對應(yīng)指針地址的數(shù)據(jù)分別獨立進(jìn)行輸出。
接續(xù)圖12所示,本發(fā)明一具體示例中,讀出的數(shù)據(jù)為2個,其指針地址分別為SRAM2P(0)中的指針地址“5”,以及SRAM2P(1)中的指針地址“10”,即當(dāng)前數(shù)據(jù)的讀出地址為R(0,5)和R(1,10);
在從2R1W存儲器讀出數(shù)據(jù)過程中,由于每一個SRAM2P均能保證1個讀端口和1個寫端口同時操作,故,讀出數(shù)據(jù)過程中,直接從SRAM2P(0)中的指針地址“5”讀取數(shù)據(jù),以及直接從SRAM2P(1)中的指針地址“10”讀出數(shù)據(jù),如此,以保證2R1W存儲器的2個讀端口和1個寫端口同時操作,在此不做詳細(xì)贅述。
需要說明的是,如果邏輯上把每一個SRAM2P進(jìn)一步切分,比如切分成4m個具有相同深度的SRAM2P,那么只需要增加額外1/4m的存儲器面積就可以構(gòu)建上述2R1W類型的SRAM;相應(yīng)的,物理上SRAM的塊數(shù)也增加了近2倍,在實際的布局布線中會占用不少的面積開銷;當(dāng)然,本發(fā)明并不以上述具體實施方式為限,其它采用異或運算以擴(kuò)展存儲器端口的方案也包括在本發(fā)明的保護(hù)范圍內(nèi),在此不做詳細(xì)贅述。
結(jié)合圖13所示,對于本發(fā)明的2讀n寫的多端口存儲器單元,以下為了描述方便,接續(xù)上述示例,對n取值為4進(jìn)行詳細(xì)描述。該示例中,以2個16384深度和1152寬度的2R1W類型的SRAM并行拼裝成一個Bank,一個Bank的容量大小是4.5M字節(jié),總共有2個bank組成一個9M字節(jié)的2R4W多端口存儲器單元。
該示例中,數(shù)據(jù)寫入2讀n寫的多端口存儲器單元過程中,需要同時支持4個slice的同時寫入,假設(shè),每個slice的數(shù)據(jù)總線位寬是1152bits,同時每個slice支持6個100GE端口線速轉(zhuǎn)發(fā);在數(shù)據(jù)通道上最差的情況,對于小于等于144字節(jié)長度的報文數(shù)據(jù),需要核心時鐘頻率跑到892.9MHz,對于大于144字節(jié)長度的報文,需要核心時鐘頻率跑到909.1MHz。
一個時鐘周期下,若寫入數(shù)據(jù)的位寬小于等于144字節(jié),同時,需要滿足4個Slice同時寫入,才能滿足帶寬需求;如此,通過2個Slice的寫入數(shù)據(jù)分別寫入到1個Bank的2個2R1W存儲器中,另外2個Slice的寫入數(shù)據(jù)分別寫入到其余另一個Bank的2個2R1W存儲器中,如此,寫入數(shù)據(jù)不會發(fā)生沖突。
一個時鐘周期下,若寫入數(shù)據(jù)的位寬大于144字節(jié),同時,需要滿足4個Slice同時寫入,才能滿足帶寬需求;即:通過每個Slice的數(shù)據(jù)均需要占用整個Bank;如此,對于每個Slice而言,只需要在2個時鐘周期下,采用乒乓操作即可以滿足需求,例如:一個時鐘周期下,將其中的兩個數(shù)據(jù)分別寫入到2個Bank中,第二個周期到來時,將另外兩個數(shù)據(jù)分別寫入到2個Bank中;其中,每個Bank中的兩個2R1W存儲器,分別對應(yīng)存儲任一個大于144字節(jié)的數(shù)據(jù)的高位和底位,在此不做詳細(xì)贅述。如此,寫入數(shù)據(jù)不會發(fā)生沖突。
其讀取過程與寫入過程相類似,該示例中,每個時鐘周期下,僅支持兩個數(shù)據(jù)的讀出;
一個時鐘周期下,若讀出數(shù)據(jù)的位寬小于等于144字節(jié),最壞情況下,讀出數(shù)據(jù)存儲于同一個Bank的同一個2R1W存儲器中,由于本發(fā)明的每個2R1W存儲器均可以同時支持兩個讀出請求,故無論在什么情況下,數(shù)據(jù)均可以從指定端口直接讀出。
一個時鐘周期下,若讀出數(shù)據(jù)的位寬大于144字節(jié),最壞情況下,讀出數(shù)據(jù)存儲于同一個Bank中,與寫入過程相類似,僅需要在兩個時鐘周期下,采用乒乓操作,即可以滿足讀出請求,在此不做詳細(xì)贅述。
進(jìn)一步的,結(jié)合圖14所示,本發(fā)明一優(yōu)選實施方式中,基于上述2讀n寫的存儲器單元構(gòu)建n讀n寫的存儲器的硬件架構(gòu)。
本發(fā)明一具體實施方式中,所述方法包括:
基于n/2個所述2讀n寫的多端口存儲器單元直接形成n讀n寫存儲器的硬件框架;
一個時鐘周期下,當(dāng)數(shù)據(jù)通過n個寫端口寫入到n讀n寫的多端口存儲器時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則根據(jù)數(shù)據(jù)的目的端口將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,根據(jù)數(shù)據(jù)的目的端口將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
一個時鐘周期下,當(dāng)數(shù)據(jù)從n讀n寫的多端口存儲器的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù)。
上述n讀n寫的多端口存儲器的數(shù)據(jù)寫入及讀出過程均與2讀n寫的多端口存儲器單元的寫入及讀出過程相類似,其區(qū)別僅在于,寫入數(shù)據(jù)過程中,需根據(jù)寫入數(shù)據(jù)的轉(zhuǎn)發(fā)端口匹配其寫入位置,其他不在詳細(xì)贅述。
結(jié)合圖15A所示,本發(fā)明一具體示例中,n的取值為4,該具體示例中,X0Y0以及X1Y1的結(jié)構(gòu)均與圖13所示相同,數(shù)據(jù)寫入及讀出過程中,需根據(jù)其對應(yīng)的轉(zhuǎn)發(fā)端口進(jìn)行存儲,例如:S0、S1的數(shù)據(jù)僅能寫入到X0Y0中,而S2、S3的數(shù)據(jù)僅能寫入到X1Y1中,其寫入過程不在具體贅述。
結(jié)合圖15B所示,本發(fā)明一具體示例中,n的取值為8,該具體示例中,X0Y0、X1Y1、X2Y2以及X3Y3的結(jié)構(gòu)均與圖13所示結(jié)構(gòu)相類似相同,其區(qū)別在于,在圖13所示結(jié)構(gòu)基礎(chǔ)上再增加2個Bank以構(gòu)成2R8W存儲器,數(shù)據(jù)寫入及讀出過程中,需根據(jù)其對應(yīng)的轉(zhuǎn)發(fā)端口進(jìn)行存儲,例如:S0、S1的數(shù)據(jù)僅能寫入到X0Y0中,S2、S3的數(shù)據(jù)僅能寫入到X1Y1中,S4、S5的數(shù)據(jù)僅能寫入到X2Y2中,而S6、S7的數(shù)據(jù)僅能寫入到X3Y3中,其寫入過程不在具體贅述。
結(jié)合圖16所示,本實施方式中,當(dāng)需要對存儲器的端口進(jìn)行擴(kuò)展時,僅基于n/2個2讀n寫的多端口存儲器單元即可以實現(xiàn)n讀n寫的存儲器的硬件框架,相較于傳統(tǒng)的基于2R2W存儲器對存儲器的端口進(jìn)行擴(kuò)展的方法,便于實現(xiàn)更多Slice的擴(kuò)展。
另外,以4R4W存儲器和14nm集成電路工藝為例進(jìn)行說明,采用本發(fā)明獲得的4R4W存儲器,其邏輯上總共個需要40個4096深度1152寬度的SRAM2P,總共占用面積22.115平方厘米,總的功耗為13.503Watts(核心電壓=0.9V,結(jié)溫=125攝氏度,工藝條件是最快),同時,不需要復(fù)雜的控制邏輯,只需要簡單的異或運算就可實現(xiàn)多個讀端口的操作;另外,也不需要額外的存儲器塊映射表和控制邏輯。
結(jié)合圖17所示,本發(fā)明一實施方式提供的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理系統(tǒng),該實施方式中,所述多端口存儲器為2讀n寫的多端口存儲器單元,n為偶數(shù)。
所述系統(tǒng)包括:數(shù)據(jù)構(gòu)建模塊100,數(shù)據(jù)處理模塊200;
所述數(shù)據(jù)構(gòu)建模塊100具體用于:將2個2R1W存儲器并行拼裝為一個Bank存儲單元;
將n/2個Bank存儲單元在深度上拼裝為一個2讀n寫的多端口存儲器單元的硬件框架;
所述數(shù)據(jù)處理模塊200具體用于:當(dāng)確定一個時鐘周期下,數(shù)據(jù)通過n個寫端口寫入到2讀n寫的多端口存儲器單元時;
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
所述數(shù)據(jù)處理模塊200還用于:當(dāng)確定一個時鐘周期下,數(shù)據(jù)從2讀n寫的多端口存儲器單元的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇2讀n寫的多端口存儲器單元中匹配的讀端口直接讀出數(shù)據(jù)。
本發(fā)明優(yōu)選實施方式中,數(shù)據(jù)構(gòu)建模塊100采用5種方式建立所述2R1W存儲器。
如圖7所示,第一種實施方式中,在6T SRAM的基礎(chǔ),數(shù)據(jù)構(gòu)建模塊100把一根字線分割成左右兩個,這樣可以做成2個讀端口同時操作或者1個寫端口,這樣從左邊MOS管讀出的數(shù)據(jù)和右邊MOS管讀出的數(shù)據(jù)可以同時進(jìn)行,需要注意的是,右邊MOS管讀出的數(shù)據(jù)需要反相之后才可以用,同時為了不影響數(shù)據(jù)讀取的速度,讀出的感應(yīng)放大器需要用偽差分放大器。這樣,6T SRAM面積不變,唯一的代價是增加一倍的字線,從而保證總體的存儲密度基本不變。
如圖8所示,第二種實施方式中,數(shù)據(jù)構(gòu)建模塊100通過定制設(shè)計可以增加SRAM的端口,把一個字線切割成2個字線,將讀端口增加到2個;還可以通過分時操作的技術(shù),即讀操作在時鐘的上升沿進(jìn)行,而寫操作在時鐘的下降沿完成,這樣也可以把一個基本的1讀或者1寫的SRAM擴(kuò)展成1讀和1寫的SRAM類型,即1個讀和1個寫操作可以同時進(jìn)行,存儲密度基本不變。
如圖9所示,第三種實施方式中,以SRAM2P為基礎(chǔ)構(gòu)建2R1W的SRAM為例,所述SRAM2P是一種能夠支持1讀和1讀/寫的SRAM類型,即可以對SRAM2P同時進(jìn)行2個讀操作,或者1個讀和1個寫操作。
本實施方式中,數(shù)據(jù)構(gòu)建模塊100通過復(fù)制一份SRAM以SRAM2P為基礎(chǔ)構(gòu)建2R1W的SRAM;該示例中,右邊的SRAM2P_1是左邊SRAM2P_0的拷貝,具體操作的時候,把兩塊SRAM2P作為1讀和1寫存儲器來使用;其中,寫入數(shù)據(jù)時,同時往左右兩個SRAM2P寫入數(shù)據(jù),讀出數(shù)據(jù)時,A固定從SRAM2P_0讀取,數(shù)據(jù)B固定從SRAM2P_1讀取,這樣就可以實現(xiàn)1個寫操作和2個讀操作并發(fā)進(jìn)行。
如圖10a、10b所示,第四種實施方式中,數(shù)據(jù)構(gòu)建模塊100把邏輯上一整塊的16384深度的SRAM分割成邏輯上4塊4096深度的SRAM2P,編號依次為為0、1、2、3,再額外增加一塊4096深度的SRAM,編號為4,作為解決讀寫沖突用,對于讀數(shù)據(jù)A和讀數(shù)據(jù)B,永遠(yuǎn)保證這2個讀操作可以并發(fā)進(jìn)行,當(dāng)2個讀操作的地址是處于不同的SRAM2P中時,因為任何一個SRAM2P都可以配置成1R1W類型,所以讀寫不會有沖突;當(dāng)2個讀操作的地址處于同一塊SRAM2P中時,例如:均處于SRAM2P_0中,由于同一個SRAM2P最多只能提供2個端口同時操作,此時,其端口被2個讀操作占用,如果恰好有一個寫操作要寫入SRAM2P_0,那么這時就把這個數(shù)據(jù)寫入存儲器第4塊SRAM2P_4中。
該種實施方式中,需要有一個存儲器塊映射表記錄哪一個存儲器塊存放有效數(shù)據(jù),如圖10b所示,存儲器塊映射表的深度和一個存儲器塊的深度相同,即都是4096個深度,每一個條目中在初始化后依次存放每個存儲器塊的編號,從0到4,圖10a示例中,由于SRAM2P_0在寫入數(shù)據(jù)的時候發(fā)生讀寫沖突,數(shù)據(jù)實際上是寫入到SRAM2P_4中,此時,讀操作同時會讀取存儲器映射表中對應(yīng)的內(nèi)容,原始內(nèi)容為{0, 1, 2, 3, 4},修改之后變成{4, 1, 2, 3, 0},第一個塊編號和第4個塊編號對調(diào),表示數(shù)據(jù)實際寫入到SRAM2P_4中,同時SRAM2P_0變成了備份條目。
當(dāng)讀取數(shù)據(jù)的時候,需要首先讀對應(yīng)地址的存儲器塊編號映射表,查看有效數(shù)據(jù)存放在哪一個存儲器塊中,例如當(dāng)要讀取地址5123的數(shù)據(jù),那么首先讀取存儲塊編號映射表地址1027(5123-4096=1027)存放的內(nèi)容,根據(jù)第二列的數(shù)字編號去讀取對應(yīng)存儲塊的地址1027的內(nèi)容。
對于寫數(shù)據(jù)操作,需要存儲器塊編號映射表提供1讀和1寫端口,對于2個讀數(shù)據(jù)操作,需要存儲器塊編號映射表提供2個讀端口,這樣總共需要存儲器塊編號映射表提供3個讀端口和1個寫端口,而且這4個訪問操作必須是同時進(jìn)行。
如圖11所示,第五種實施方式,即本發(fā)明的優(yōu)選實施方式中,數(shù)據(jù)構(gòu)建模塊100根據(jù)所述2R1W存儲器的深度和寬度選擇2m+1塊具有相同深度及寬度的SRAM2P存儲器構(gòu)建2R1W存儲器的硬件框架,m為正整數(shù);
多個所述SRAM2P存儲器按照排列順序依次為SRAM2P(0)、SRAM2P(1)……、SRAM2P(2m),每個SRAM2P存儲器均具有M個指針地址,其中,多個所述SRAM2P存儲器中的一個為輔助存儲器,其余均為主存儲器;
每塊SRAM2P存儲器的深度與寬度的乘積=(2R1W存儲器的深度與寬度乘積)/2m。
以下為了描述方便,對m取值為2、2R1W存儲器為16384深度、128寬度的SRAM存儲器進(jìn)行詳細(xì)描述。
則在該具體示例中,多個所述SRAM2P存儲器按照排列順序依次為SRAM2P(0)、SRAM2P(1)、SRAM2P(2)、SRAM2P(3)、SRAM2P(4),其中,SRAM2P(0)、SRAM2P(1)、SRAM2P(2)、SRAM2P(3)為主存儲器,SRAM2P(4)為輔助存儲器,每個SRAM2P存儲器的深度和寬度分別為4096和128,相應(yīng)的,每個SRAM2P存儲器均具有4096個指針地址;如果對每個SRAM2P存儲器的指針地址均獨立標(biāo)識,則每個SRAM2P存儲器的指針地址均為0~4095,若將全部的主存儲器的地址依次排列,則全部的指針地址范圍為: 0 ~ 16383。該示例中,SRAM2P(4)用于解決端口沖突,且在該實施方式中,無需增加存儲器塊編號映射表即可以滿足需求。
進(jìn)一步的,在上述硬件框架基礎(chǔ)上,當(dāng)數(shù)據(jù)寫入2R1W存儲器和/或從所述2R1W存儲器讀出時,數(shù)據(jù)處理模塊200具體用于:根據(jù)數(shù)據(jù)的當(dāng)前指針位置,關(guān)聯(lián)主存儲器以及輔助存儲器中的數(shù)據(jù),對其做異或運算,完成數(shù)據(jù)的寫入和讀出。
本發(fā)明優(yōu)選實施方式中,其數(shù)據(jù)寫入過程如下:
獲取當(dāng)前數(shù)據(jù)的寫入地址為W(x,y),x表示寫入數(shù)據(jù)所處于的SRAM2P存儲器的排列位置,0≤x<2m,y表示寫入數(shù)據(jù)所處于的SRAM2P存儲器中的具體的指針地址,0≤y≤M;
獲取與寫入地址具有相同指針地址的其余主存儲器中的數(shù)據(jù),將其同時與當(dāng)前寫入數(shù)據(jù)做異或運算,并將異或運算結(jié)果寫入到輔助存儲器的相同指針地址中。
進(jìn)一步的,本發(fā)明優(yōu)選實施方式中,數(shù)據(jù)處理模塊200讀出數(shù)據(jù)過程如下:
若當(dāng)前兩個讀出數(shù)據(jù)的讀出地址處于相同的SRAM2P存儲器中,則
數(shù)據(jù)處理模塊200具體用于:分別獲取兩個讀出數(shù)據(jù)的讀出地址為R1(x1,y1),R2(x2,y2),x1、y1均表示讀出數(shù)據(jù)所處于的SRAM2P存儲器的排列位置,0≤x1<2m,0≤x2<2m,y1、y2均表示讀出數(shù)據(jù)所處于的SRAM2P存儲器中的具體的指針地址,0≤y1≤M,0≤y2≤M;
數(shù)據(jù)處理模塊200具體用于:任選其中一個讀出地址R1(x1,y1)中存儲的讀出數(shù)據(jù),從當(dāng)前的指定讀出地址中直接讀出當(dāng)前存儲的數(shù)據(jù);
數(shù)據(jù)處理模塊200具體用于:獲取與另一個讀出地址具有相同指針地址的其余主存儲器、以及輔助存儲器中存儲的數(shù)據(jù),并對其做異或運算,將異或運算結(jié)果作為另一個讀出地址的存儲數(shù)據(jù)進(jìn)行輸出。
本發(fā)明一實施方式中,若當(dāng)前兩個讀出數(shù)據(jù)的讀出地址處于不同的SRAM2P存儲器中,數(shù)據(jù)處理模塊200則直接獲取不同SRAM2P存儲器中對應(yīng)指針地址的數(shù)據(jù)分別獨立進(jìn)行輸出。
需要說明的是,如果邏輯上把每一個SRAM2P進(jìn)一步切分,比如切分成4m個具有相同深度的SRAM2P,那么只需要增加額外1/4m的存儲器面積就可以構(gòu)建上述2R1W類型的SRAM;相應(yīng)的,物理上SRAM的塊數(shù)也增加了近2倍,在實際的布局布線中會占用不少的面積開銷;當(dāng)然,本發(fā)明并不以上述具體實施方式為限,其它采用異或運算以擴(kuò)展存儲器端口的方案也包括在本發(fā)明的保護(hù)范圍內(nèi),在此不做詳細(xì)贅述。
進(jìn)一步的,本發(fā)明一優(yōu)選實施方式中,所述數(shù)據(jù)構(gòu)建模塊100基于上述2讀n寫的存儲器單元構(gòu)建n讀n寫的存儲器的硬件架構(gòu)。
本發(fā)明一具體實施方式中,所述數(shù)據(jù)構(gòu)建模塊100基于n/2個所述2讀n寫的多端口存儲器單元直接形成n讀n寫存儲器的硬件框架;
所述數(shù)據(jù)處理模塊200還用于:當(dāng)確定一個時鐘周期下,數(shù)據(jù)通過n個寫端口寫入到n讀n寫的多端口存儲器時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則根據(jù)數(shù)據(jù)的目的端口將數(shù)據(jù)分別寫入不同的2R1W存儲器中;
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,根據(jù)數(shù)據(jù)的目的端口將寫入數(shù)據(jù)的高低位分別寫入到一個Bank存儲單元的2個2R1W存儲器中。
所述數(shù)據(jù)處理模塊200還用于:當(dāng)確定一個時鐘周期下,數(shù)據(jù)從n讀n寫的多端口存儲器的其中2個讀端口讀出時,
若數(shù)據(jù)的大小小于等于所述2R1W存儲器的位寬,則選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù);
若數(shù)據(jù)的大小大于所述2R1W存儲器的位寬,則等待第二個時鐘周期,當(dāng)?shù)诙€時鐘周期到來時,選擇n讀n寫的多端口存儲器中匹配的讀端口直接讀出數(shù)據(jù)。
上述n讀n寫的多端口存儲器的數(shù)據(jù)寫入及讀出過程均與2讀n寫的多端口存儲器單元的寫入及讀出過程相類似,其區(qū)別僅在于,寫入數(shù)據(jù)過程中,需根據(jù)寫入數(shù)據(jù)的轉(zhuǎn)發(fā)端口匹配其寫入位置,其他不在詳細(xì)贅述。
結(jié)合圖15A所示,本發(fā)明一具體示例中,n的取值為4,該具體示例中,X0Y0以及X1Y1的結(jié)構(gòu)均與圖13所示相同,數(shù)據(jù)寫入及讀出過程中,需根據(jù)其對應(yīng)的轉(zhuǎn)發(fā)端口進(jìn)行存儲,例如:S0、S1的數(shù)據(jù)僅能寫入到X0Y0中,而S2、S3的數(shù)據(jù)僅能寫入到X1Y1中,其寫入過程不在具體贅述。
結(jié)合圖15B所示,本發(fā)明一具體示例中,n的取值為8,該具體示例中,X0Y0、X1Y1、X2Y2以及X3Y3的結(jié)構(gòu)均與圖13所示結(jié)構(gòu)相類似相同,其區(qū)別在于,在圖13所示結(jié)構(gòu)基礎(chǔ)上再增加2個Bank以構(gòu)成2R8W存儲器,數(shù)據(jù)寫入及讀出過程中,需根據(jù)其對應(yīng)的轉(zhuǎn)發(fā)端口進(jìn)行存儲,例如:S0、S1的數(shù)據(jù)僅能寫入到X0Y0中,S2、S3的數(shù)據(jù)僅能寫入到X1Y1中,S4、S5的數(shù)據(jù)僅能寫入到X2Y2中,而S6、S7的數(shù)據(jù)僅能寫入到X3Y3中,其寫入過程不在具體贅述。
結(jié)合圖16所示,本實施方式中,當(dāng)需要對存儲器的端口進(jìn)行擴(kuò)展時,僅基于n/2個2讀n寫的多端口存儲器單元即可以實現(xiàn)n讀n寫的存儲器的硬件框架,相較于傳統(tǒng)的基于2R2W存儲器對存儲器的端口進(jìn)行擴(kuò)展的方法,便于實現(xiàn)更多Slice的擴(kuò)展。
綜上所述,本發(fā)明的可擴(kuò)展的多端口存儲器的數(shù)據(jù)處理方法及處理系統(tǒng),基于現(xiàn)有的SRAM類型,通過算法的方式搭建更多端口的SRAM,僅僅用最小的代價便可以最大限度的支持多端口SRAM;其實現(xiàn)過程中,避免采用復(fù)雜的控制邏輯和額外的多端口SRAM或者寄存器陣列資源,利用報文緩存的特殊性,通過空間分割和時間分割,僅需要簡單的異或運算就可實現(xiàn)多個端口的報文緩存,同時,通過本發(fā)明實現(xiàn)的多端口存儲器,其所有緩存資源可以在任意輸入端口之間實現(xiàn)完全共享,邏輯上采用更少的CCE即可以構(gòu)建多端口存儲器,容易實現(xiàn)端口的擴(kuò)展,本發(fā)明具有更低的功耗,更快的處理速度,以及節(jié)省更多的資源或面積,其報文緩存架構(gòu)具有更好的擴(kuò)展性,實現(xiàn)簡單,節(jié)約人力及物質(zhì)成本。
為了描述的方便,描述以上裝置時以功能分為各種模塊分別描述。當(dāng)然,在實施本發(fā)明時可以把各模塊的功能在同一個或多個軟件和/或硬件中實現(xiàn)。
以上所描述的裝置實施方式僅僅是示意性的,其中所述作為分離部件說明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理模塊,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)模塊上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施方式方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
應(yīng)當(dāng)理解,雖然本說明書按照實施方式加以描述,但并非每個實施方式僅包含一個獨立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說明書作為一個整體,各實施方式中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實施方式。
上文所列出的一系列的詳細(xì)說明僅僅是針對本發(fā)明的可行性實施方式的具體說明,它們并非用以限制本發(fā)明的保護(hù)范圍,凡未脫離本發(fā)明技藝精神所作的等效實施方式或變更均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。