TWI528322B - 折疊先進先出記憶體產生器 - Google Patents
折疊先進先出記憶體產生器 Download PDFInfo
- Publication number
- TWI528322B TWI528322B TW102142096A TW102142096A TWI528322B TW I528322 B TWI528322 B TW I528322B TW 102142096 A TW102142096 A TW 102142096A TW 102142096 A TW102142096 A TW 102142096A TW I528322 B TWI528322 B TW I528322B
- Authority
- TW
- Taiwan
- Prior art keywords
- memory
- fifo
- buffer
- data
- stored
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
- G06F5/10—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
- G06F5/12—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
- G06F5/14—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
- G06F5/10—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2205/00—Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F2205/06—Indexing scheme relating to groups G06F5/06 - G06F5/16
- G06F2205/065—With bypass possibility
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2205/00—Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F2205/06—Indexing scheme relating to groups G06F5/06 - G06F5/16
- G06F2205/066—User-programmable number or size of buffers, i.e. number of separate buffers or their size can be allocated freely
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Logic Circuits (AREA)
- Communication Control (AREA)
- Multi Processors (AREA)
Description
本發明之具體實施例一般係關於設計先進先出(FIFO,“First-in first-out”)記憶體,更具體而言係關於折疊FIFO記憶體之深度和寬度以識別對應的記憶體元件之尺寸。
設計來處理資料的積體電路在處理階段之間通常使用FIFO記憶體儲存資料。這些FIFO記憶體可具有不同的寬度、深度和不同的輸入及輸出時脈頻率。產生可合成代碼的產生器已用於產生FIFO記憶體之不同的變化例。然而,FIFO記憶體之不同的物理特性可導致無效率。舉例來說,為回應請求,該產生器可產生對應於128x1 FIFO(亦即具有每個皆1位元的128個條目的FIFO)的可合成代碼。然而,若此FIFO使用隨機存取記憶體(RAM)實行,則RAM晶胞(cell)之寬度可至少8位元寬。據此,深128的FIFO會需求每個皆8位元寬的128列之RAM。由於每個條目皆僅儲存一位元,因此該列之其他七位元未使用。此無效率可導致硬體系統消耗額外的功率並佔用所必要更多的空間。
本發明之具體實施例說明一種方法和電腦可讀取儲存媒體,其接收將第一資料部分儲存於FIFO記憶體中的請求。該方法和儲存媒體將該第一資料部分儲存於該FIFO記憶體中的緩衝區中。該方法和儲存媒體接收將第二資料部分儲存於FIFO記憶體中的請求,並判定將該第二資料部分儲存於該緩衝區中會超過緩衝區之容量。該方法和儲存媒體將緩衝區之內容儲存於FIFO記憶體中的單一記憶體元件列中,其中記憶體元件中的每一列皆按大小分類以儲存多個資料部分。
本發明之另一具體實施例說明一種FIFO記憶體,包括一緩
衝區,其用於儲存與該FIFO記憶體所接收到的寫入請求相關聯的複數個資料部分。該FIFO記憶體亦包括一記憶體元件,其耦合於該緩衝區,其中該記憶體元件中的每一列皆按大小分類以儲存多個資料部分。該FIFO記憶體包括選徑邏輯,其配置成判定將下一個資料部分儲存於該緩衝區中會超過緩衝區之容量,並將緩衝區之內容儲存於單一記憶體元件列中。
藉由折疊FIFO記憶體之深度和寬度以識別對應的記憶體元件之尺寸,本具體實施例可改良能源效率和硬體系統所需要的面積。具體而言,相對於用於尺寸未經折疊的FIFO的記憶體元件,所產生的記憶體元件可縮減未使用的記憶體晶胞之數量。
100‧‧‧運算系統;系統
105‧‧‧處理器
110‧‧‧系統記憶體;記憶體
115‧‧‧FIFO(先進先出記憶體)代碼產生器;FIFO產生器;產生器
120‧‧‧可合成代碼
200‧‧‧硬體系統
210‧‧‧FIFO
215‧‧‧FIFO邏輯
220‧‧‧封套資料
225‧‧‧折疊隨機存取記憶體(RAM);折疊RAM;RAM
301‧‧‧位元
302、buff‧‧‧緩衝區
305‧‧‧記憶體選擇器
306‧‧‧多工器
307、buff_d‧‧‧延遲緩衝區
310、313、365‧‧‧多工器
315‧‧‧第九位元;輸入位元;位元
320‧‧‧所請求的資料;所請求
的資料位元;所請求的位元;位元
360、375、380‧‧‧箭頭
370‧‧‧接收到的資料;接收到的位元;資料
400‧‧‧封套資料
500‧‧‧方法
505、510、515、520、525、530、535‧‧‧區塊
600‧‧‧封套資料
605、605A-D、605A、605B、605C、605D‧‧‧緩衝區
610‧‧‧折疊RAM;RAM
612A-612D、612A、612B‧‧‧邏輯分區;部分
615、615A-D‧‧‧緩衝區讀取邏輯
620、630、635‧‧‧多工器
625‧‧‧列選擇邏輯;邏輯
di‧‧‧封套資料220之輸入(di)
we‧‧‧寫入致能(we)信號
wa‧‧‧寫入位址(wa)
re‧‧‧讀取致能(re)信號
ra‧‧‧讀取位址(ra)
Addresses‧‧‧位址1-8;位址1-8
use_buff_d‧‧‧延遲緩衝區控制信號(use_buff_d)
dout‧‧‧封套資料220之輸出(dout)
ra_f‧‧‧列選擇信號(ra_f)
ro_d‧‧‧位元偏移信號(ro_d)
same_addr_write_and_read‧‧‧控制信號(same_addr_write_and_read)
Threads‧‧‧執行緒0、1、2和3
wa0‧‧‧寫入位址wa0
wa1‧‧‧寫入位址wa1
ra0,ra1,ra2,and ra3‧‧‧讀取位址(ra0、ra1、ra2和ra3)
ro_d0,ro_d1,ro_d2,and ro_d3‧‧‧位元偏移信號(ro_d0、ro_d1、ro_d2和ro_d3)
因此藉由參照其中一些例示於所附圖式中的具體實施例,可具有以上簡要總結於其中可以詳細理解本發明之以上所陳述特徵的方式、本發明之更具體的說明。然而,應注意所附圖式僅例示本發明之一般具體實施例,故因此不應被視為其範疇之限制,因為本發明可承認其他同樣有效的具體實施例。
根據本發明之一個具體實施例,第一圖例示包括一FIFO代碼產生器的運算裝置之區塊圖。
根據本發明之一個具體實施例,第二圖例示包括具有折疊記憶體單元的一FIFO的硬體系統之區塊圖。
根據本發明之各具體實施例,第三A至三G圖例示寫入一種FIFO記憶體和從其讀取。
根據本發明之各具體實施例,第四A至四B圖例示將資料寫入FIFO記憶體中相同的記憶體位址和從其讀取資料。
根據本發明之一個具體實施例,第五圖係一種用於判定何時折疊FIFO之記憶體元件的方法。
根據本發明之一個具體實施例,第六圖例示多個執行緒所存取的FIFO之硬體系統。
為了促進理解,已在適用之處使用相同的參考號碼標定圖示共有的相同元件。應可列入考慮在一個具體實施例中所揭示的元件可利於
在其他的具體實施例上運用而無需具體詳述。
為了更有效使用將資料儲存於FIFO中的記憶體元件,代碼產生器可產生讓FIFO能使用具有與FIFO之尺寸不同的尺寸(亦即深度和寬度)的記憶體元件的封套資料(wrapper)。舉例來說,封套資料讓深128、1位元寬的FIFO能將資料儲存於具有每個皆儲存8位元的16列的記憶體元件中。對於與FIFO通信的任何系統,即使FIFO使用16x8記憶體元件實現,但FIFO仍皆表現得像是128x1 FIFO。在一個具體實施例中,FIFO之尺寸判定對應的記憶體元件之尺寸來折疊。舉例來說,假設代碼產生器被要求配置具有每個皆1位元寬的128個條目的FIFO(128x1)。然而,若記憶體元件之個別列限制於8位元之最小值,則用於此FIFO的實際記憶體元件可能係128x8(亦即每一列9個記憶體晶胞的128列)而無需折疊記憶體元件之尺寸。在這樣的具體實施例中,每一列上的七位元可能未使用。反之,產生器可折疊所需求的FIFO之尺寸,由此縮減記憶體元件之深度並增加其寬度對應的量,以維持記憶體元件之總儲存大小。舉例來說,以因子2折疊的128x1 FIFO可由64x2記憶體元件實行。
代碼產生器可產生讓折疊記憶體元件能表現得像是未經折疊的記憶體元件的封套資料。尤其是,該封套資料包括邏輯,其控制資料如何讀入和讀出該折疊記憶體元件。使用128x1 FIFO作為範例,封套資料可以8位元塊(chunks)將資料儲存於折疊16x8記憶體元件中。以此方式,記憶體元件中的每個儲存位置皆可使用。折疊記憶體元件之尺寸不僅確實改良了儲存效率,所產生的記憶體元件相對於使用未折疊記憶體元件亦可需求較少面積(例如在積體電路中具有較小的底面積)。延續以上範例,折疊16x8記憶體元件僅需要足以儲存128位元的面積,而128x8記憶體元件則需要儲存1024位元所必要的面積。
根據本發明之一個具體實施例,第一圖例示包括一FIFO代碼產生器115的運算系統100之區塊圖。具體而言,系統100包括一處理器105和一系統記憶體110。FIFO產生器115可能係儲存於記憶體110中的程式或應用程式。當由處理器105執行時,產生器115產生代表FIFO記
憶體的可合成代碼120。可合成代碼120可與其他的代碼結合、由產生器程式產生或由程式設計師編寫,以為了積體電路而產生可合成代碼。可合成代碼120可以熟習此項技術者已習知的Verilog、VHDL(超高速積體電路硬體描述語言)或其他的硬體描述語言撰寫。可合成代碼120可使用諸如Synopsys(美商新思科技)所製作的Design Compiler®(設計編譯器)和Synplicity(美商昕博科技)所製作的Synplify®的商用合成工具合成,以產生定義積體電路之組件和接線的網路連線表。在一個具體實施例中,該網路連線表可用於設計和製造可用於諸如桌上型電腦、膝上型電腦、行動電話、伺服器和此類的運算裝置中的圖形處理單元(GPU,“Graphics processing unit”)中的FIFO記憶體。
根據本發明之一個具體實施例,第二圖例示包括具有折疊記憶體單元的一FIFO的硬體系統200之區塊圖。硬體系統200可能係積體電路(例如GPU或中央處理單元(CPU))、現場可程式閘陣列(FPGA)、記憶體、固定於共享印刷電路板(PCB)上的硬體單元。硬體系統包括一FIFO 210,其至少部分使用來自第一圖的可合成代碼產生。亦即,FIFO 210包括一個或多個硬體元件,其功能由FIFO代碼產生器所產生的可合成代碼定義。FIFO 210包括FIFO邏輯215,其包括用於執行FIFO操作(例如儲存和取回)所必要的邏輯。FIFO邏輯215亦可負責從硬體系統200中的其他組件接收資料儲存請求,以及將所請求的資料傳輸至這些組件。FIFO 210包括封套資料220,其讓FIFO邏輯215能與折疊隨機存取記憶體(RAM)225互動。舉例來說,FIFO邏輯215可將資料和對應的寫入位址輸入封套資料220,其隨後控制如何將該資料寫入折疊RAM 225中。使用封套資料220,FIFO邏輯215可配置成如同FIFO邏輯215係耦合於未折疊記憶體元件而非折疊記憶體元件般執行。在一個具體實施例中,FIFO邏輯215可能係即使FIFO 210包括一未折疊記憶體元件但仍會使用的相同邏輯。據此,為了在FIFO 210中使用折疊記憶體,僅需要將封套資料220加入FIFO 210,而FIFO邏輯215之其餘部分可在基本上保持不變。
折疊RAM 225係具有與描述FIFO 210之尺寸不同的深度和寬度尺寸的記憶體元件。在一個具體實施例中,即使尺寸可不同,但總儲
存空間仍可相同(雖然此並非必要條件)。至於總儲存容量可不同的範例,使用者所需可能是每個儲存3位元的128個條目的FIFO(亦即384位元之最大容量)。由於與RAM相關聯的物理或設計限制,因此折疊RAM 225之尺寸可能係會與128x3 FIFO之容量匹配的64x8(512位元之最大容量),而非舉例來說32x6。因此,折疊RAM 225可包括儲存位置,其在FIFO 210之操作期間未使用。儘管如此,即使一些位置未使用,但折疊RAM 225仍可較使用未折疊記憶體元件(例如128x8 RAM)更加節能和/或面積效率高。雖然RAM在本發明之各具體實施例中例示為FIFO 210之記憶體元件,但本發明不因此而受限。在其他的具體實施例中,記憶體元件可由正反器、暫存器、閂鎖器來實施。
根據本發明之各具體實施例,第三A至三G圖例示使用封套資料220和折疊RAM 225寫入一種FIFO記憶體和從其讀取。具體而言,封套資料220包括一緩衝區302(buff)和折疊RAM 225。緩衝區302係與折疊RAM 225分開的記憶體元件,且可由複數個正反器、閂鎖器、暫存器組成。緩衝區302之輸入耦合於封套資料220之輸入(di),且在此範例中係8位元寬。對於第三A至三G圖,假設FIFO係使用16x8折疊RAM 225實行的深128乘1位元寬的記憶體。
如在第三A圖中所顯示,根據時脈信號(例如前緣或後緣),封套資料220如寫入致能(enable)(write enable,we)信號所指示接收即將儲存於FIFO中的位元301。FIFO邏輯(未顯示)可將位元301發送至封套資料220,以及控制寫入致能信號。如在第三B圖中所顯示,封套資料220根據寫入位址(wa)將接收到的位元儲存於緩衝區302中。在此時,位元301並未儲存於折疊RAM 225(亦即FIFO之主要儲存元件)中。反之,位元301保持儲存於緩衝區302中。在一個具體實施例中,寫入過程可描述為接收到位元301並隨後儲存於緩衝區302中的兩步驟。寫入過程可在兩個連續的時脈週期期間或在相同週期之上升邊緣與下降邊緣期間進行。
如在第三C圖中所顯示,寫入過程重複直到緩衝區302已滿。舉例來說,FIFO可接收FIFO邏輯傳輸至封套資料220對應於每個命令的位元的八個儲存命令。封套資料220將這些位元儲存於緩衝區302中。
隨著封套資料220將第八接收到的位元儲存於緩衝區302中,讀取致能(read enable,re)信號指示FIFO應輸出最初儲存於FIFO中的資料位元。
第三D圖例示讓封套資料220能從緩衝區302或折疊RAM 225任一者讀取資料以滿足讀取請求的邏輯。具體而言,封套資料220包括一記憶體選擇器305,其配置成判定所請求的資料儲存於緩衝區302或折疊RAM 225任一者中。若資料在緩衝區302中,則記憶體選擇器305使用三位元信號,其可依據讀取位址(ra)從緩衝區302選擇對應的位元。舉例來說,緩衝區302中的每個記憶體位置皆可耦合於八輸入/一輸出多工器(multiplexer)306或多工器(mux),其中三位元信號用於選擇儲存位置之一。若資料儲存於折疊RAM 225中,則記憶體選擇器305可將四位元列位址信號(其選擇於其上資料所定位的列)傳輸至折疊RAM 225。以下將更詳細討論從RAM 225讀取的過程。
由於對應於在第三D圖中所提供的讀取位址的資料(亦即位元301)儲存於緩衝區302中,因此記憶體選擇器305將此資料之副本傳輸至延遲緩衝區307(buff_d)。亦即,在一個具體實施例中,位元301儲存於延遲緩衝區307中而無需從緩衝區302被逐出。即使位元302保持儲存於封套資料220中的記憶體元件中,但在封套資料之外部的FIFO邏輯仍可使對應於位元301的記憶體位址(亦即Address(位址)1)無效。因此,在取回操作期間,被讀出的資料可在邏輯上從FIFO逐出,而實際的資料可保持儲存於FIFO中。延續此範例,Address 2變成FIFO記憶體之頂部。因此,若FIFO被要求執行另一取回操作,則FIFO邏輯所提供的新的讀取位址將變成Address 2。據此,在此具體實施例中,管理資料可由在封套資料220外部的FIFO邏輯執行。在其他的具體實施例中,然而,封套資料220自身可具有對於管理和儲存資料兩者皆必要的電路。
由於所請求的資料可來自緩衝區302或折疊RAM 225任一者,因此封套資料220包括多工器313,其由延遲緩衝區控制信號(use_buff_d)控制。如在此所顯示,若此信號為低位準(low)時,則封套資料220之輸出(dout)係延遲緩衝區307之輸出。若信號為高(high)位準時,則輸出位元由折疊RAM 225提供。
在第三E圖,封套資料220如寫入致能信號所指示在輸入接收第九位元315。儲存接收到的資料之前,封套資料220可將儲存於緩衝區302中的資料之至少一部分傳送至折疊RAM 225。在一個具體實施例中,封套資料220可使用寫入致能信號和現有寫入位址之結合來判定緩衝區302中的內容之至少一些是否應傳送。舉例來說,若寫入致能信號係在高位凖且寫入位址具有對應於緩衝區302之儲存容量之倍數的值,則封套資料220將緩衝區302中的資料傳送至折疊RAM 225中。
如在第三F圖中所顯示,緩衝區302之內容儲存於折疊RAM 225(例如第一列)中。此外,輸入位元315儲存於現在是空的緩衝區302中。雖然顯示為同時發生,但在另一具體實施例中,在第三F圖中所例示的過程可在舉例來說不同的時脈週期上發生。隨著更多資料儲存於FIFO中,封套資料220可持續填滿緩衝區302。一旦此記憶體元件再次填滿,則封套資料物220可將資料傳送至折疊RAM 225。在一個具體實施例中,封套資料220可在判定緩衝區302已滿時傳送資料而無需等到接收到新的資料才進行上述傳送資料的動作。
在一個具體實施例中,若FIFO之容量超過(在此範例中當FIFO被要求儲存多於128位元之資料時發生),則在封套資料220之外部的FIFO邏輯可判定接下來所採取的動作。若被要求儲存多於FIFO之容量,則在一個具體實施例中,若發送者可停止運轉(stallable)則FIFO邏輯可反壓(backpressure)發送者。而且,FIFO邏輯可持續判定對應於FIFO之頂部(top)的位址。假設舉例來說FIFO儲存128位元之資料並讀出最初8位元。由於FIFO中的資料係順序存取,因此儲存於Addresses 1-8的最初8位元之資料由FIFO邏輯使其無效。若FIFO邏輯隨後將額外的8位元資料發送儲存,則封套資料220隨意將這些位元儲存於先前由所讀出的位元占用的儲存位置(亦即Address 1-8)中。FIFO佇列之頂部將係Address 9,而Address 8係FIFO之底部。以此方式,FIFO可以更新而無需在緩衝區302和折疊RAM 225中逐出和移位資料以回應取回資料的請求。
請回到第三E圖,封套資料220將位元315儲存於緩衝區302中的同時,讀取致能信號可指示FIFO邏輯正在請求封套資料220執行
另一讀取操作。對照所請求的資料儲存於緩衝區302中的第三D圖,在第三G圖中,封套資料220從折疊RAM 225取回所請求的資料302。在一個具體實施例中,記憶體選擇器305判定所請求的資料320儲存於緩衝區302或折疊RAM 225中。舉例來說,依據讀取位址,記憶體選擇器305可判定所請求的資料320先前是否已從緩衝區302移動至折疊RAM 225。由於所請求的資料位元320在第三F圖中移動至RAM 225中,因此記憶體選擇器305使用列選擇信號(ra_f)來啟動對應於所請求的位元320的折疊RAM 225中的列。該列中的資料可隨後由折疊RAM 225輸出。
封套資料220包括一位元偏移信號(ro_d),其選擇折疊RAM之八位元輸出之特定位元。具體而言,位元偏移信號用作讓多工器310從列選擇正確位元的控制信號。用於多工器313的選擇信號隨後控制使得來自多工器310的輸出用作封套資料220之輸出,而忽略延遲緩衝區307之輸出。位元320從封套資料220輸出(亦即透過多工器310和313)時所採取的一般路徑由箭頭360顯示。在一個具體實施例中,從折疊RAM 225取回所請求的資料320並從封套資料220輸出該資料可能僅僅需要一個週期,而在其他的具體實施例中,該讀取過程可能需要多個週期方可完成。雖然第三A至三G圖例示僅一位元寬的FIFO條目,但封套資料可配置成儲存和取回具有任何位元數的FIFO條目,例如具有2位元寬的64個條目的FIFO。
根據本發明之各具體實施例,第四A至四B圖例示將資料寫入FIFO記憶體中相同的記憶體位址和從其讀取資料。具體而言,第四A圖例示致能並行寫入和讀取相同的FIFO記憶體位址的FIFO記憶體中的封套資料400。亦即,除了能同時讀取和寫入不同的位址之外,在第四A至四B圖中所顯示的FIFO記憶體還可以同時對相同的位址執行讀取和寫入。為了對相同的位址執行讀取和寫入,故把寫入和讀取致能信號兩者皆設置成高位凖。而且,封套資料400包括一資料路徑,其讓接收到的資料370能略過緩衝區302。如所顯示,多工器365控制接收到的資料位元是否容許略過緩衝區302而即將直接儲存於延遲緩衝區307中。多工器365由依據至相同位址的寫入致能和讀取致能信號的控制信號
(same_addr_write_and_read)控制。若寫入致能與讀取致能信號兩者皆在高位凖,則用於多工器365的控制信號如箭頭380所顯示將在封套資料之輸入所接收到的資料選徑(routes)至延遲緩衝區307。若並非如此,則多工器365將儲存於緩衝區302中的資料位元傳送至延遲緩衝區307中。不論多工器365是否容許接收到的資料370略過緩衝區302,箭頭375例示接收到的位元370皆為了儲存而傳輸至緩衝區302。雖然未顯示,但封套資料可包括用於在第三G圖中所討論相同的記憶體選擇器從緩衝區302取回所請求的資料。
第四B圖例示當接收到的資料輸出時封套資料400之狀態。封套資料400控制多工器313使得延遲緩衝區307之輸出(亦即接收到的位元370)變成封套資料400之輸出。以此方式,在一個週期中所接收到的資料可以在下一個週期中輸出。若封套資料400不包括多工器365,則可需求額外的時脈週期,讓資料370從緩衝區302取回。因此,在同時寫入和讀取相同的位址係所需的具體實施例中,封套資料400的使用可能會被多數人採用。雖然未顯示,但封套資料400可包括額外的邏輯,其如以上在第三A至三G圖中所討論用於存取並取回儲存於折疊RAM 225中的資料。
表一例示用於產生折疊FIFO的可合成代碼。具體而言,表一例示可由在第一圖中所例示的FIFO產生器產生的可合成代碼500。當合成時,表一中的代碼配置硬體邏輯(例如在第三A至三G圖和第四A至四B圖中所顯示的邏輯)以形成用於折疊FIFO的封套資料。亦即,合成後的代碼產生具有以上所討論的功能的折疊FIFO。為了清楚表示,故在第三A至三G圖和第四A至四B圖中所顯示的信號和電路包括與在表一和表二中所提供的代碼相同的變量名稱。
表二例示配置成實行諸如在第三A至三G圖中所顯示的折疊RAM 225的折疊記憶體元件的可合成代碼。在一個具體實施例中,表二中的可合成代碼由在第一圖中所例示的FIFO產生器產生。或者,FIFO產生器可將FIFO之折疊尺寸傳輸至配置成產生用於記憶體元件(例如RAM)的可合成代碼的分開的應用程式或模組。
根據本發明之一個具體實施例,第五圖係一種用於判定何時折疊FIFO之記憶體元件的方法500。具體而言,FIFO產生器可使用方法500來判定用於以硬體實行FIFO的記憶體元件之尺寸。在區塊(block)505,
FIFO產生器接收FIFO之所需深度和寬度。在一個具體實施例中,這些尺寸由使用者提供。FIFO產生器將所提供的深度與第一預定臨界值相較。若深度低於第一預定臨界值,則在區塊510,FIFO產生器可使用特殊的記憶體陣列將資料儲存於FIFO中。換言之,若FIFO很小(例如少於32個條目),則FIFO產生器可使用經客製化符合FIFO之尺寸的閂鎖陣列來實施FIFO。然而,若深度超過第一預定臨界值,則FIFO產生器可使用具有與FIFO之尺寸不匹配的尺寸的記憶體元件。如以上所討論,在一個具體實施例中,FIFO可使用記憶體列中的記憶體晶胞數具有預定最小值的RAM記憶體。在一個具體實施例中,FIFO產生器可為了產生用於配置記憶體元件的可合成代碼而呼叫(call)分開的軟體應用程式(例如RAM產生器)。
若FIFO之所需深度超過臨界值,則在區塊515,FIFO產生器判定FIFO之所需寬度是否少於一第二預定臨界值。在一個具體實施例中,第二預定臨界值可依據記憶體元件中的列之最小儲存容量而設定。舉例來說,若RAM中的列至少係8個晶胞,則FIFO產生器只有在所需寬度少於5位元寬時折疊FIFO。若非如此,則不折疊如區塊520所顯示FIFO之尺寸,即使這麼做會導致記憶體晶胞未被使用,但這樣做可更有效。在另一具體實施例中,第二預定臨界值可設定成與記憶體元件中的列之最小寬度匹配。當然,所提供用於第一和第二預定臨界值的值僅係為了例示目的,兩者可依所需要配置。
在區塊520,FIFO產生器折疊FIFO之尺寸直到寬度少於或等於第一最小寬度臨界值。FIFO產生器可以任何數量之方式折疊產生器。在一個具體實施例中,FIFO產生器配置成折疊FIFO使得條目數除以二而每一列之寬度加倍。折疊之後,若寬度仍低於第一最小寬度臨界值,則FIFO產生器可藉由再次將列數減半並加倍列寬度而折疊FIFO。舉例來說,若第一最小寬度臨界值為10且所需FIFO尺寸係64x3,則FIFO產生器可折疊這些尺寸兩次以產生16x12。然而,任何折疊因子皆可使用,舉例來說,FIFO產生器可將深度除以四而寬度乘以四。
在區塊525,FIFO產生器可折疊FIFO直到寬度少於第二最小寬度臨界值且折疊FIFO之深寬比大於臨界值深寬比。如於文中所使用,
該深寬比係FIFO中的列數與每一列之寬度之間的比值(亦即除以寬度的列數)。如所例示,具有128x1之尺寸的FIFO具有128之深寬比,而以因子2折疊FIFO產生64x2之尺寸和32之深寬比。依據深寬比折疊FIFO尺寸讓FIFO產生器能控制用於實行FIFO的記憶體元件之形狀(亦即列與行之間的關係)。舉例來說,深寬比可能被設定成不小於1(亦即行數不超過列數)。在一個具體實施例中,FIFO產生器可配置成折疊尺寸以維持寬度少於10和至少32之深寬比;然而,在其他的具體實施例中,這些臨界值可依需要設定。
如在方法500中所顯示,不論FIFO在另一步驟中是否折疊,區塊520或區塊525皆可執行。亦即,若在區塊520中使用者所設定的FIFO之寬度超過第一最小寬度臨界值,則FIFO產生器仍可依據在區塊525的第二最小寬度臨界值和深寬比臨界值折疊FIFO尺寸,且反之亦然。換言之,在區塊520和525中所規定的摺疊條件可獨立於彼此執行。因此,FIFO之尺寸可在兩者步驟都折疊、僅在一個步驟或在兩步驟皆不折疊。而且,在其他的具體實施例中,方法500可僅包括這些步驟之一。舉例來說,FIFO之尺寸可僅依據區塊520折疊而無需判定所產生的深寬比和列寬度是否滿足區塊525之標準。
在一個具體實施例中,在區塊520和525中所建立的折疊標準可重寫。具體而言,FIFO產生器可包括一手動折疊因子輸入值。當使用者指示產生器產生FIFO時,使用者可定義FIFO之尺寸應折疊的次數。這樣做可造成FIFO產生器略過在方法500中所顯示的區塊之一個或多個。
在區塊530,假設FIFO之尺寸在區塊520或525折疊,則FIFO產生器依據改變後的尺寸配置記憶體元件。在一個具體實施例中,FIFO產生器可為了產生具有折疊尺寸的RAM而呼叫分開的軟體應用程式(例如RAM產生器)。RAM產生器可產生用於依據折疊尺寸實行FIFO之RAM的可合成代碼。舉例來說,若方法500將FIFO尺寸從128x1改變成16x8,則後者尺寸傳輸至產生對應於RAM的可合成代碼的RAM產生器。儘管如此,即使基本的(underlying)記憶體元件具有不同的尺寸,但FIFO仍可準確描述為128x1 FIFO。
在一個具體實施例中,FIFO產生器或RAM產生器可進一步改變折疊尺寸。亦即,折疊尺寸可依據與RAM相關聯的限制或效能因子進一步最佳化。舉例來說,RAM可限制成具有某些尺寸的列寬度(例如在每一列中僅偶數晶胞數)。若方法500產生32x11之折疊尺寸,則FIFO產生器或RAM產生器可將尺寸從32x11改變成32x12以滿足記憶體元件之限制或增加RAM之效能。
根據本發明之一個具體實施例,第六圖例示多個執行緒所存取的FIFO中的封套資料600。具體而言,封套資料600包括一折疊RAM 610,其讓多個執行緒能存取單一FIFO。如所顯示,折疊RAM 610為四個不同的執行緒(Threads 0、1、2和3)所存取的512x1 FIFO提供儲存。折疊RAM 610分成每個皆與執行緒之一相關聯的四個邏輯分區612A至612D。舉例來說,Thread 0被分配RAM 610之最初16列中的晶胞位置、Thread 1被分配RAM 610之下一個16列中的晶胞位置,依此類推。因此,每個執行緒皆可以將128位元儲存於折疊RAM 610中。
封套資料600亦包括一緩衝區605和用於每個執行緒的緩衝區讀取邏輯615。在一個具體實施例中,緩衝區605A-D和緩衝區讀取邏輯615A-D可用於執行在第三A至三G圖中所討論相同的任務。舉例來說,每個執行緒皆可使用多工/共享輸入或各自輸入將資料傳輸至其各自緩衝區605A-D。若執行緒隨後對儲存於緩衝區605中的資料傳輸讀取請求,則封套資料600可使用各自緩衝區讀取邏輯615從該緩衝區605取回資料。雖然未顯示,但封套資料600可包括額外的邏輯,其容許緩衝區讀取邏輯615A-D所取回的資料即將選徑至封套資料600之輸出。而且,封套資料600包括一多工器620,其允許緩衝區605A-D傳輸即將儲存於折疊RAM 610中的8位元之群組。每個執行緒皆可具有用作對於多工器620的選擇信號的各自執行緒識別碼(ID)。舉例來說,當緩衝區605A已滿且封套資料600需要接納來自Thread 0的請求儲存新的資料位元,則封套資料600可使用對應於Thread 0的執行緒ID來控制多工器620使得緩衝區605A之內容儲存於折疊RAM 610中。
封套資料600亦包括列選擇邏輯625,其用於指示從緩衝區
605所接收到的哪個列資料應儲存。多工器620,列選擇邏輯625可使用執行緒ID來選擇哪個寫入位址應使用(亦即寫入位址wa0對應於從Thread 0所接收到的資料、寫入位址wa1對應於從Thread 1所接收到的資料,依此類推)。延續先前的範例,為了將緩衝區605A之內容儲存於RAM 610中,列選擇邏輯625指示折疊RAM 610將內容儲存於寫入位址wa0。在一個具體實施例中,寫入位址可用於直接指示使用最顯著(significant)位元的列。或者,列選擇邏輯625可依據寫入位址和現有執行緒ID導出該列。舉例來說,列選擇邏輯625可使用七位元寫入位址之四個最顯著位元從0-15判定列。使用執行緒ID,列選擇邏輯625可判定加入寫入位址所指定的列的列偏移。舉例來說,若封套資料600正在儲存緩衝區605B之內容,則列選擇邏輯625可將16列偏移值加入從寫入位址wa1所導出的列。因此,若寫入位址wa1指定使用執行緒ID儲存緩衝區605B之內容的正確列是列2(其在分配給Thread 0的折疊RAM 610之部分612A中),則列選擇邏輯625指示折疊RAM 610將資料反而儲存於列18(其在分配給Thread 1的部分612B中)。若封套資料600正將內容從緩衝區605C或605D寫入RAM 610,則列選擇邏輯625可分別使用32或48列之偏移。或者,在封套資料600之外部的FIFO邏輯可維持隨後供應給將不需要執行該偏移的封套資料600的絕對寫入位址。不論所使用的定址架構為何,分開的同步執行緒皆可將資料寫入共享記憶體元件。
為了從折疊RAM 610讀取資料,封套資料600使用列選擇邏輯625來選擇折疊RAM 610中的特定列。然而,列選擇邏輯625依據讀取位址(ra0、ra1、ra2和ra3)識別該列,而非使用寫入位址。舉例來說,邏輯625可使用以上所說明類似的過程來識別從折疊RAM 610讀出的列(亦即該列可從讀取位址或藉由將讀取位址與執行緒ID結合而直接導出)。一旦折疊RAM 610輸出正確列,則封套資料610使用多工器630和多工器635來判定該列中的哪個位元係輸出位元。具體而言,多工器635接收與各自執行緒相關聯的位元偏移信號(ro_d0、ro_d1、ro_d2和ro_d3)。依據執行緒ID,多工器635輸出隨後用作多工器630之選擇信號的正確位元偏移信號。舉例來說,若封套資料正在取回與Thread 3相關聯的資料,則列選擇邏輯625
使用讀取位址ra3來選擇與Thread 3相關聯的RAM 610中的特定列(亦即列48-63)。只要執行緒ID設定成對應於Thread 3的值,則多工器635輸出隨後由多工器630用於從折疊RAM 610之輸出選擇正確位元的Thread 3之位元偏移信號(ro_d3)。
在一個具體實施例中,封套資料600用於僅容許對儲存於FIFO中的資料順序存取的同步FIFO中。而且,在一個具體實施例中,折疊RAM 610之尺寸與FIFO之尺寸匹配使得記憶體元件不包括任何未使用的記憶體晶胞。在此,分配給每個執行緒的列數係每一列之寬度之倍數。此可防止用於將與一個執行緒相關聯的資料碰撞(colliding)並儲存於折疊RAM 610之一部分中被分配給不同的執行緒的緩衝區。
總結來說,為了更有效使用將資料儲存於FIFO中的記憶體元件,代碼產生器可產生讓FIFO能使用具有與FIFO之尺寸不同的尺寸(亦即深度和寬度)的記憶體元件的封套資料。舉例來說,封套資料讓深128、1位元寬的FIFO能將資料儲存於具有每個皆儲存8位元的16列的記憶體元件中。對於與FIFO通信的任何系統,即使FIFO使用16x8記憶體元件實行,但FIFO仍皆表現得像是128x1 FIFO。代碼產生器可產生讓折疊記憶體元件能表現得像是未經折疊的記憶體元件的封套資料。尤其是,該封套資料包括邏輯,其控制資料如何讀入和讀出該折疊記憶體元件。使用128x1 FIFO作為範例,封套資料可以8位元塊將資料儲存於折疊16x8記憶體元件中。以此方式,記憶體元件中的每個儲存位置皆可使用。折疊記憶體元件之尺寸不僅確實改良了儲存效率,所產生的記憶體元件相對於使用未折疊記憶體元件亦可需求較少面積(例如在積體電路中具有較小的底面積)。
本發明之一個具體實施例可實行為用於與電腦系統一起使用的程式產品。該程式產品之程式定義各具體實施例(包括於文中所說明的方法)之作用,且可包含於多種電腦可讀取儲存媒體上。例示性電腦可讀取儲存媒體包括,但不限於:(一)於其上永久儲存資訊的無法寫入儲存媒體(例如電腦內的唯讀記憶體裝置,諸如唯讀光碟機(CD-ROM drive)可讀取的唯讀光碟(CD-ROM disks)、快閃記憶體、唯讀記憶體(ROM)晶片或任何類型
之固態非揮發性半導體記憶體);以及(二)於其上儲存可改變資訊的可寫入儲存媒體(例如磁碟機或硬碟機內的軟性磁碟或任何類型之固態隨機存取半導體記憶體)。
雖然前述係針對本發明之具體實施例,但可設計本發明之其他與進一步的具體實施例而不悖離其基本範疇,且其範疇由以下諸申請專利範圍判定。
600‧‧‧封套資料
605、605A-D、605A、605B、605C、605D‧‧‧緩衝區
610‧‧‧折疊RAM;RAM
612A-612D、612A、612B‧‧‧邏輯分區;部分
615、615A-D‧‧‧緩衝區讀取邏
輯
620、630、635‧‧‧多工器
625‧‧‧列選擇邏輯;邏輯
wa‧‧‧寫入位址(wa)
ra‧‧‧讀取位址(ra)
ro_d‧‧‧位元偏移信號(ro_d)
Claims (10)
- 一種方法,包含:接收將一第一資料部分儲存於一先進先出(FIFO,“First-in first-out”)記憶體中的一請求;將一緩衝區中的該第一資料部分儲存於該FIFO記憶體中;接收將一第二資料部分儲存於該FIFO記憶體中的一請求;判定將該第二資料部分儲存於該緩衝區中會超過該緩衝區之一容量;以及將該緩衝區之內容儲存於該FIFO記憶體中的一記憶體元件的一單一列中,其中該記憶體元件中的每一列皆按大小分類以儲存多個資料部分。
- 如申請專利範圍第1項之方法,更包含:接收從該FIFO記憶體取回一已儲存資料部分的一讀取請求;判定該已儲存資料部分在該緩衝區內或在該記憶體元件內;若該已儲存資料部分在該緩衝區內,則從該緩衝區取回該已儲存資料部分而無需存取該記憶體元件;或者若該已儲存資料部分在該記憶體元件內,則從該記憶體元件取回該已儲存資料部分而無需存取該緩衝區。
- 如申請專利範圍第1項之方法,更包含:接收至相同記憶體位址的一同時讀取請求和寫入請求:經由略過該緩衝區和該記憶體元件的一資料路徑將與該同時讀取請求和寫入請求相關聯的一第三資料部分選徑(routing)至該FIFO記憶體之一輸出;以及將該第三資料部分儲存於該緩衝區中,其中該第三資料部分同時經由該資料路徑選徑並儲存於該緩衝區中。
- 一種FIFO記憶體,包含:一緩衝區,其用於儲存與該FIFO記憶體所接收到的寫入請求相關聯的複數個資料部分;一記憶體元件,其耦合於該緩衝區,其中該記憶體元件中的每一列 皆按大小分類以儲存多個資料部分;以及選徑邏輯,其配置成判定將一下一個資料部分儲存於該緩衝區中會超過該緩衝區之一容量,並將該緩衝區之內容儲存於該記憶體元件的一單一列中。
- 如申請專利範圍第4項之FIFO記憶體,更包含選擇邏輯,其配置成下列以回應取回一已儲存資料部分的一讀取請求:判定該已儲存資料部分在該緩衝區內或在該記憶體元件內;若該已儲存資料部分在該緩衝區內,則從該緩衝區取回該已儲存資料部分而無需存取該記憶體元件;或者若該已儲存資料部分在該記憶體元件內,則從該記憶體元件取回該已儲存資料部分而無需存取該緩衝區。
- 如申請專利範圍第5項之FIFO記憶體,其中該選擇邏輯包含一延遲緩衝區,其設置於該緩衝區與該FIFO記憶體之一輸出之間的一資料路徑中,且該延遲緩衝區配置成在該已儲存資料部分從該FIFO記憶體輸出之前,儲存從該緩衝區所取回的該已儲存資料部分。
- 如申請專利範圍第5項之FIFO記憶體,其中該選擇邏輯包含一多工器,其設置於該記憶體元件與該FIFO記憶體之一輸出之間的一資料路徑中,且該多工器配置成從儲存於該一記憶體元件列內的複數個資料部分選擇該已儲存資料部分。
- 如申請專利範圍第4項之FIFO記憶體,其中該記憶體元件中的一總列數少於該FIFO記憶體之一總深度。
- 如申請專利範圍第4項之FIFO記憶體,其中該記憶體元件之一列寬度藉由改變該FIFO記憶體之深度和寬度尺寸直到對應於該等改變後的尺寸的該寬度尺寸少於或等於一最小寬度臨界值而選擇。
- 如申請專利範圍第4項之FIFO記憶體,其中該記憶體元件包含一隨機存取記憶體(RAM,“Random access memory’’),且其中該第一資料部分儲存於該RAM之一個或多個記憶體晶胞(cells)中。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/707,408 US9189199B2 (en) | 2012-12-06 | 2012-12-06 | Folded FIFO memory generator |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201435796A TW201435796A (zh) | 2014-09-16 |
TWI528322B true TWI528322B (zh) | 2016-04-01 |
Family
ID=50778229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW102142096A TWI528322B (zh) | 2012-12-06 | 2013-11-19 | 折疊先進先出記憶體產生器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9189199B2 (zh) |
CN (1) | CN103853522A (zh) |
DE (1) | DE102013019278A1 (zh) |
TW (1) | TWI528322B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106502922B (zh) * | 2016-10-28 | 2020-02-18 | 青岛海信电器股份有限公司 | 一种fifo数据缓存器的数据读写方法及数据缓存器 |
US10713189B2 (en) | 2017-06-27 | 2020-07-14 | Qualcomm Incorporated | System and method for dynamic buffer sizing in a computing device |
CN109408276A (zh) * | 2018-10-25 | 2019-03-01 | 江苏华存电子科技有限公司 | 一种纠正码中规律交错器低延迟平行化架构位址绕线机制 |
CN113485647A (zh) * | 2021-07-13 | 2021-10-08 | 湖南国科微电子股份有限公司 | 数据写入方法、数据读出方法及先进先出存储器 |
CN113485672B (zh) * | 2021-09-07 | 2021-11-19 | 苏州浪潮智能科技有限公司 | 基于fifo存储器的信息生成方法、装置、设备及介质 |
CN116991330A (zh) * | 2023-09-25 | 2023-11-03 | 苏州元脑智能科技有限公司 | 数据存储装置、数据读写方法及电子设备 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6081147A (en) * | 1994-09-29 | 2000-06-27 | Fujitsu Limited | Timing controller and controlled delay circuit for controlling timing or delay time of a signal by changing phase thereof |
US5804986A (en) * | 1995-12-29 | 1998-09-08 | Cypress Semiconductor Corp. | Memory in a programmable logic device |
US6052757A (en) | 1997-12-18 | 2000-04-18 | Real 3D, Inc. | Content addressable memory FIFO with and without purging |
JP2000043347A (ja) * | 1998-08-03 | 2000-02-15 | Canon Inc | データ処理方法及びデータ処理装置並びに画像記録装置 |
US5995415A (en) * | 1998-09-23 | 1999-11-30 | Advanced Micro Devices, Inc. | Simultaneous operation flash memory device with a flexible bank partition architecture |
CN1159646C (zh) | 1999-07-28 | 2004-07-28 | 印芬龙科技股份有限公司 | 用于对缓冲存储器进行写入和读出的方法和装置 |
US7072998B2 (en) | 2003-05-13 | 2006-07-04 | Via Technologies, Inc. | Method and system for optimized FIFO full conduction control |
JP4520952B2 (ja) * | 2006-02-14 | 2010-08-11 | セイコーインスツル株式会社 | 音楽練習支援機器 |
US20080008019A1 (en) * | 2006-07-06 | 2008-01-10 | Texas Instruments Incorporated | High Speed Read-Only Memory |
DE102006035612B4 (de) | 2006-07-31 | 2011-05-05 | Qimonda Ag | Speicherpuffer, FB-DIMM und Verfahren zum Betrieb eines Speicherpuffers |
TWI419160B (zh) | 2009-01-07 | 2013-12-11 | Univ Nat Chiao Tung | 靜態隨機存取記憶體裝置 |
CN101566941B (zh) | 2009-06-03 | 2013-08-07 | 北京中星微电子有限公司 | 一种基于静态存储器的fifo存储单元 |
US8364889B2 (en) * | 2010-05-28 | 2013-01-29 | International Business Machines Corporation | Dynamic row-width memory |
US8611173B1 (en) * | 2011-12-02 | 2013-12-17 | Altera Corporation | Buffer circuitry with multiport memory cells |
-
2012
- 2012-12-06 US US13/707,408 patent/US9189199B2/en active Active
-
2013
- 2013-11-19 TW TW102142096A patent/TWI528322B/zh active
- 2013-11-19 DE DE102013019278.1A patent/DE102013019278A1/de not_active Withdrawn
- 2013-12-06 CN CN201310658886.4A patent/CN103853522A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN103853522A (zh) | 2014-06-11 |
DE102013019278A1 (de) | 2014-06-12 |
TW201435796A (zh) | 2014-09-16 |
US20140164655A1 (en) | 2014-06-12 |
US9189199B2 (en) | 2015-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6530815B2 (ja) | ハイブリッドメモリシステムの動作を制御するための回路および方法 | |
TWI528322B (zh) | 折疊先進先出記憶體產生器 | |
JP6564375B2 (ja) | 高スループットのキーバリューストアの実現のためのメモリ構成 | |
JP3853736B2 (ja) | ユーザによる構成可能なオンチップメモリシステム | |
US6522167B1 (en) | User configurable on-chip memory system | |
US8923089B2 (en) | Single-port read multiple-port write storage device using single-port memory cells | |
EP2917844B1 (en) | Configurable embedded memory system | |
JP7138190B2 (ja) | ネットワークスイッチのキュー | |
CN109891397A (zh) | 用于固态装置中的操作系统高速缓冲存储器的设备及方法 | |
JP5609326B2 (ja) | クロック分周回路 | |
CN101825997A (zh) | 一种异步先入先出存储器 | |
CN108701102A (zh) | 直接存储器访问控制器、数据读取方法和数据写入方法 | |
US9478272B1 (en) | Configurable storage blocks with embedded first-in first-out and last-in first-out circuitry | |
US9837133B1 (en) | Address arithmetic on block RAMs | |
US8547758B2 (en) | Semiconductor memory device and method of operating the same | |
US6961280B1 (en) | Techniques for implementing address recycling in memory circuits | |
JP5499131B2 (ja) | デュアルポートメモリおよびその方法 | |
EP1585024B1 (en) | An improved on-chip storage memory for storing variable data bits | |
JP6493044B2 (ja) | マルチプロセッサシステム | |
US20140250252A1 (en) | First-in First-Out (FIFO) Modular Memory Structure | |
US8339887B2 (en) | Double line access to a FIFO | |
EP2587485A1 (en) | A dual-port memory and a method thereof |