專利名稱:一種實現(xiàn)預讀式fifo的方法和預讀式fifo的制作方法
技術領域:
本發(fā)明涉及存儲器技術,特別涉及一種實現(xiàn)預讀式FIFO的方法和預讀式FIFO。
背景技術:
在現(xiàn)場可編程門陣列(FPGA)設計中,先入先出寄存器(FIFO)是最常用的功能模 塊之一,按照對接口時序要求的不同,F(xiàn)IFO可以分為預讀式FIFO和非預讀式FIFO兩種,其 中,預讀式FIFO能夠提高后級模塊的處理效率,因此在高速設計中經(jīng)常使用。預讀式FIFO與非預讀式FIFO的區(qū)別主要在于預讀式FIFO中,在有數(shù)據(jù)的情 況下,數(shù)據(jù)已經(jīng)準備在總線上,即用戶在發(fā)起讀請求之前數(shù)據(jù)已經(jīng)有效,當用戶發(fā)起讀請求 后,能夠在當前時鐘周期讀出數(shù)據(jù),而非預讀式FIFO需要在下一時鐘周期讀出數(shù)據(jù)。其中, 預讀式FIFO的讀時序圖如圖1所示,其中,rdclk為讀時鐘,empty為FIFO空信號,rd為用 戶讀請求的讀信號,rdata為FIFO讀出的數(shù)據(jù)。從時序圖可以看出,在FIFO有數(shù)據(jù)的情況 下,數(shù)據(jù)已經(jīng)準備在總線上;當用戶發(fā)起讀請求后,能夠在當前時鐘周期立即讀出數(shù)據(jù)0, 并在后續(xù)時鐘周期依次讀出數(shù)據(jù)1和數(shù)據(jù)2。為了更清楚地說明預讀式FIFO,參見圖2所示的預讀式FIFO的邏輯結(jié)構(gòu),主要包 括FIFO控制器、輸入寄存器和隨機存儲器(RAM),其中,輸入寄存器和RAM同屬于RAM硬 核中的存儲資源。FIFO控制器用于完成對讀地址(rcLaddr)、寫地址(Wr_addr)、空信號 (empty)和滿信號(full)的管理。FIFO控制器通過輸入寄存器設置RAM的rd_addr指向 當前數(shù)據(jù)的地址(非預讀式FIFO中rcLaddr指向讀取的上一數(shù)據(jù)的地址),也就是說,當 RAM內(nèi)有數(shù)據(jù)時,輸出FIFO控制器將RAM的讀地址預先加1,將數(shù)據(jù)準備好。當接收到用戶 的讀請求,即讀信號(rd)有效時,能夠立即在當前時鐘周期從RAM讀取當前數(shù)據(jù),即rdata 輸出當前數(shù)據(jù)。然而,在上述過程中,RAM的輸出到后續(xù)用戶邏輯單元在一個時鐘周期內(nèi)執(zhí)行,這 顯然對RAM的邏輯時序影響較大,其中,RAM輸出所帶來的時延影響較為突出,特別是在諸 如時鐘頻率較高、邏輯利用率較高或者后級組合邏輯處理復雜等對時序要求較高的場合, 現(xiàn)有預讀式FIFO往往不能滿足時序要求。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種實現(xiàn)預讀式FIFO的方法和預讀式FIFO,以便于使預 讀式FIFO更好的滿足時序要求。一種預讀式先入先出寄存器FIFO,該FIFO包括FIFO控制器、輸入寄存器和隨機存 儲器RAM ;還包括輸出寄存器和使能控制器,且所述輸出寄存器、輸入寄存器和RAM均屬于 RAM硬核中的存儲資源;所述使能控制器,用于確定所述RAM為非空狀態(tài)且所述輸出寄存器為空狀態(tài),或 者接收到讀請求時,使輸入所述FIFO控制器的讀信號有效,并使能所述輸出寄存器輸出數(shù) 據(jù);否則,使輸入所述FIFO控制器的讀信號無效,并鎖存所述輸出寄存器;
所述FIFO控制器,用于沒有收到有效的讀信號時,通過所述輸入寄存器設置所述 RAM的讀地址指向RAM中當前待讀取的數(shù)據(jù);收到有效的讀信號時,通過所述輸入寄存器設 置所述RAM的讀地址指向RAM中下一待讀取的數(shù)據(jù);所述RAM,用于按照讀時鐘和被設置的讀地址,以先入先出的方式輸出被寫入的數(shù) 據(jù)給所述輸出寄存器;所述輸出寄存器,用于在被使能時,按照讀時鐘輸出寄存的數(shù)據(jù)。一種實現(xiàn)預讀式FIFO的方法,在包含F(xiàn)IFO控制器、輸入寄存器和RAM的FIFO中 增設輸出寄存器和使能控制器,其中,所述輸出寄存器、輸入寄存器和RAM均屬于RAM硬核 中的存儲資源;所述使能控制器確定所述RAM為非空狀態(tài)且所述輸出寄存器為空狀態(tài),或者接收 到讀請求時,使輸入所述FIFO控制器的讀信號有效,并使能所述輸出寄存器輸出數(shù)據(jù);否 則,使輸出所述FIFO控制器的讀信號無效,并鎖存所述輸出寄存器;所述FIFO控制器在沒有收到有效的讀信號時,通過所述輸入寄存器設置所述RAM 的讀地址指向RAM中當前待讀取的數(shù)據(jù);收到有效的讀信號時,通過所述輸入寄存器設置 所述RAM的讀地址指向RAM中下一待讀取的數(shù)據(jù);所述RAM按照讀時鐘和被設置的讀地址,以先入先出的方式輸出被寫入的數(shù)據(jù)給 所述輸出寄存器;所述輸出寄存器在被使能時,按照讀時鐘輸出寄存的數(shù)據(jù)。由以上技術方案可以看出,在本發(fā)明中,為了減小RAM的時延,在包含F(xiàn)IFO控制 器、輸入寄存器和RAM的FIFO中增設輸出寄存器和使能控制器,其中,輸出寄存器的設置使 得原來由RAM輸出和后續(xù)用戶邏輯單元的操作構(gòu)成的關鍵路徑被打破,輸出通過單獨的寄 存器完成,輸出延遲減小,從而使預讀式FIFO更好地滿足時序要求,解決時序緊張的問題。 另外,使能控制器在確定RAM為非空狀態(tài)且輸出寄存器為空狀態(tài),或者接收到讀請求時,使 輸入FIFO控制器的讀信號有效,并使能輸出寄存器輸出數(shù)據(jù);否則,使輸出FIFO控制器的 讀信號無效,并鎖存輸出寄存器,通過該方式,使能控制器能夠保證在增加一級寄存器的基 礎上,仍能夠保證預讀方式的準確實現(xiàn)。并且,輸出寄存器充分使用了 RAM硬核中已有的寄 存器資源,從而節(jié)約了 FPGA的寄存器資源。
圖1為預讀式FIFO的讀時序圖;圖2為預讀式FIFO的邏輯結(jié)構(gòu)示意圖;圖3為本發(fā)明提供的預讀式FIFO的邏輯結(jié)構(gòu)示意圖;圖4為輸出寄存器采用的寄存器示意圖;圖5為RAM和輸出寄存器在RAM實例化模塊中的結(jié)構(gòu)示意圖。
具體實施例方式為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對 本發(fā)明進行詳細描述。圖3為本發(fā)明提供的預讀式FIFO的邏輯結(jié)構(gòu)示意圖,如圖3所示,該預讀式FIFO可以包括FIFO控制器、輸入寄存器、RAM、使能控制器和輸出寄存器。其中,F(xiàn)IFO控制器、 輸入寄存器和RAM是現(xiàn)有單元,而使能控制器和輸出寄存器是增設的單元。輸出寄存器也 是RAM硬核上已有的寄存器資源,現(xiàn)有技術中沒有被預讀式FIFO加以利用,而在本發(fā)明中 采用。其中,使能控制器,用于確定RAM為非空狀態(tài)且輸出寄存器為空狀態(tài),或者接收到 讀請求時,使輸入FIFO控制器的讀信號有效,并使能輸出寄存器輸出數(shù)據(jù);否則,使輸入 FIFO控制器的讀信號無效,并鎖存輸出寄存器。FIFO控制器,用于沒有收到有效的讀信號時,通過輸入寄存器設置RAM的讀地址 指向RAM中當前待讀取的數(shù)據(jù);收到有效的讀信號時,通過輸入寄存器設置RAM的讀地址指 向RAM中下一待讀取的數(shù)據(jù)。RAM,用于按照讀時鐘和被設置的讀地址,以先入先出的方式輸出被寫入的數(shù)據(jù)給 輸出寄存器。輸出寄存器,用于在被使能時,按照讀時鐘輸出寄存的數(shù)據(jù)。在該預讀式FIFO結(jié)構(gòu)中,利用了 RAM硬核內(nèi)部寄存器資源的鎖存功能,即輸出寄 存器的鎖存功能。通常,寄存器的結(jié)構(gòu)可以如圖4所示,當寄存器的時鐘使能(EN)端無效 時,寄存器被鎖存,其數(shù)據(jù)輸出(Q)端保持數(shù)據(jù)不變;當寄存器的EN端有效時,寄存器被使 能從Q端正常輸出數(shù)據(jù)。圖中的D端為數(shù)據(jù)輸入端。由于單純增加一個輸出寄存器會使得FIFO輸出的數(shù)據(jù)晚一個讀時鐘周期,這樣 就無法達到預讀的功能要求,為此,上述預讀式FIFO中額外增加了使能控制器。使能控制 器控制對輸出寄存器的鎖存和使能輸出,主要包括以下三種情況當使能控制器沒有收到讀請求(圖3中的rd),且RAM和輸出寄存器都處于非空狀 態(tài)或都處于空狀態(tài)時,使能控制器使輸入FIFO控制器的讀信號(圖3中的rd_buf)無效, 且通過時鐘使能信號(圖3中的oe_en)鎖定輸出寄存器。使得輸出寄存器保持上一輸出 數(shù)據(jù)的狀態(tài),不輸出新的數(shù)據(jù)。當使能控制器沒有讀請求(圖3中的rd),RAM為非空狀態(tài)且輸出寄存器為空狀態(tài) 時,使輸入FIFO控制器的讀信號(圖3中的rd_buf)有效,并通過時鐘使能信號(圖3中 的oe_en)使能輸出寄存器輸出數(shù)據(jù)。也就是說,只要RAM中有數(shù)據(jù),就預先向輸出寄存器 輸出數(shù)據(jù),保證在RAM中有數(shù)據(jù)的情況下輸出寄存器非空。這種情況下,如果當前待發(fā)送的 數(shù)據(jù)地址為rdataO,則如果沒有收到讀信號且RAM中有數(shù)據(jù),則FIFO控制器設置RAM的讀 地址為rdata0+l,RAM輸出rdataO給輸出寄存器。當使能控制器接收到讀請求時,同樣使能輸入FIFO控制器的讀信號有效,并使能 輸出寄存器輸出數(shù)據(jù);FIFO控制器在讀信號有效時,更新RAM的讀地址為rdataO+2,RAM在 當前讀時鐘周期輸出地址為rdataO+1的數(shù)據(jù)給輸出寄存器,輸出寄存器在當前讀時鐘周 期輸出地址為rdataO的數(shù)據(jù)。通過上述三種情況可見,通過使能控制器對FIFO控制器的讀信號和輸出寄存器 的時鐘使能信號的控制,可以同樣完成FIFO的預讀功能。對于預讀式FIFO輸出的空信號,現(xiàn)有技術中的預讀式FIFO的空信號是由FIFO 控制器通過比較RAM的讀地址和寫地址產(chǎn)生,在本發(fā)明提供的上述預讀式FIFO中,空信號 (圖3中的empty)由使能控制器直接根據(jù)輸出寄存器的狀態(tài)產(chǎn)生,如果輸出寄存器為空狀
6態(tài),則使能控制器輸出空信號,如果輸出寄存器為非空狀態(tài),則使能控制器輸出非空信號。 原有FIFO控制器輸出的空信號(圖3中的empty_buf)用于向使能控制器通知RAM是否處 于空狀態(tài),而不作為預讀式FIFO的空信號輸出。也就是說,F(xiàn)IFO控制器檢測RAM的空狀態(tài)或非空狀態(tài),將檢測結(jié)果通知使能控制 器。使能控制器檢測輸出寄存器是否處于空狀態(tài),并在輸出寄存器處于空狀態(tài)時,輸出空信號。對于該預讀式FIFO控制器中寫數(shù)據(jù)的過程并沒有發(fā)生變化,即仍然由FIFO控制 器控制數(shù)據(jù)寫入RAM的地址。即FIFO控制器接收到有效的寫信號(圖3中的wr)時,通過 輸入寄存器設置RAM的寫地址(圖3中的wr_addr)。相應地,RAM按照寫時鐘,根據(jù)被設置的寫地址(圖3中的wr_addr)接收被寫入 的數(shù)據(jù)(圖3中的wdata)。另外,為了保證數(shù)據(jù)的正常寫入和讀取,需要保證輸出寄存器和RAM的位寬相同, 例如,如果預讀式FIFO的頂層封裝模塊采用字節(jié)級同步FIFO,RAM的深度為1 位,數(shù)據(jù)位 寬為32位,則輸出寄存器的數(shù)據(jù)位寬也為32位。由圖3中可見,在上述預讀式FIFO中,讀時鐘對輸出寄存器是單獨進行時序控制 的,原來由RAM輸出和后續(xù)用戶邏輯單元的操作構(gòu)成的關鍵路徑被打破,輸出通過單獨的 寄存器完成,輸出延遲減小,顯然相比較現(xiàn)有技術而言更好地滿足時序要求,解決時序緊張 的問題,能夠在此基礎上提高預讀式FIFO的時鐘頻率。另外,輸出寄存器充分使用了 RAM 硬核中已有的寄存器資源,從而節(jié)約了 FPGA的寄存器資源,特別在FIFO位寬較寬時,優(yōu)點 更加突出。 另外,本發(fā)明提供的上述預讀式FIFO基于原有FIFO控制器,且利用的信號都可以 基于原有FIFO中的信號生成,充分利用了 FPGA內(nèi)部已有資源,對原有預讀式FIFO的改動 很小。本發(fā)明提供的預讀式FIFO中RAM和輸出寄存器在RAM實例化模塊中的結(jié)構(gòu)可以如 圖5所示。圖5中,oe_en信號只作為輸出寄存器的輸入信號,該oe_en信號在RAM例化模 塊中可以直接使用,而其它信號均是已有信號,沒有發(fā)生變動。 以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內(nèi)。
權利要求
1.一種預讀式先入先出寄存器FIFO,該FIFO包括FIFO控制器、輸入寄存器和隨機存 儲器RAM;其特征在于,還包括輸出寄存器和使能控制器,且所述輸出寄存器、輸入寄存器 和RAM均屬于RAM硬核中的存儲資源;所述使能控制器,用于確定所述RAM為非空狀態(tài)且所述輸出寄存器為空狀態(tài),或者接 收到讀請求時,使輸入所述FIFO控制器的讀信號有效,并使能所述輸出寄存器輸出數(shù)據(jù); 否則,使輸入所述FIFO控制器的讀信號無效,并鎖存所述輸出寄存器;所述FIFO控制器,用于沒有收到有效的讀信號時,通過所述輸入寄存器設置所述RAM 的讀地址指向RAM中當前待讀取的數(shù)據(jù);收到有效的讀信號時,通過所述輸入寄存器設置 所述RAM的讀地址指向RAM中下一待讀取的數(shù)據(jù);所述RAM,用于按照讀時鐘和被設置的讀地址,以先入先出的方式輸出被寫入的數(shù)據(jù)給 所述輸出寄存器;所述輸出寄存器,用于在被使能時,按照讀時鐘輸出寄存的數(shù)據(jù)。
2.根據(jù)權利要求1所述的預讀式FIFO,其特征在于,所述輸出寄存器和所述RAM的數(shù) 據(jù)位寬相同。
3.根據(jù)權利要求1或2所述的預讀式FIFO,其特征在于,所述FIFO控制器,還用于向 所述使能控制器通知所述RAM是否處于空狀態(tài);所述使能控制器,還用于檢測所述輸出寄存器是否處于空狀態(tài),并在所述輸出寄存器 處于空狀態(tài)時,輸出空信號。
4.根據(jù)權利要求1或2所述的預讀式FIFO,其特征在于,所述FIFO控制器,還用于在 接收到有效的寫信號時,通過所述輸入寄存器設置所述RAM的寫地址;所述RAM,還用于按照寫時鐘,根據(jù)被設置的寫地址接收被寫入的數(shù)據(jù)。
5.一種實現(xiàn)預讀式FIFO的方法,其特征在于,在包含F(xiàn)IFO控制器、輸入寄存器和RAM 的FIFO中增設輸出寄存器和使能控制器,其中,所述輸出寄存器、輸入寄存器和RAM均屬于 RAM硬核中的存儲資源;所述使能控制器確定所述RAM為非空狀態(tài)且所述輸出寄存器為空狀態(tài),或者接收到讀 請求時,使輸入所述FIFO控制器的讀信號有效,并使能所述輸出寄存器輸出數(shù)據(jù);否則,使 輸出所述FIFO控制器的讀信號無效,并鎖存所述輸出寄存器;所述FIFO控制器在沒有收到有效的讀信號時,通過所述輸入寄存器設置所述RAM的讀 地址指向RAM中當前待讀取的數(shù)據(jù);收到有效的讀信號時,通過所述輸入寄存器設置所述 RAM的讀地址指向RAM中下一待讀取的數(shù)據(jù);所述RAM按照讀時鐘和被設置的讀地址,以先入先出的方式輸出被寫入的數(shù)據(jù)給所述 輸出寄存器;所述輸出寄存器在被使能時,按照讀時鐘輸出寄存的數(shù)據(jù)。
6.根據(jù)權利要求5所述的方法,其特征在于,所述輸出寄存器和所述RAM的數(shù)據(jù)位寬相同。
7.根據(jù)權利要求5或6所述的方法,其特征在于,所述使能控制器確定所述RAM為非空 狀態(tài)且所述輸出寄存器為空狀態(tài)具體包括所述FIFO控制器檢測所述RAM的狀態(tài),并將檢測結(jié)果通知給所述使能控制器;所述使能控制器對輸出寄存器的狀態(tài)進行檢測,根據(jù)自身的檢測結(jié)果和所述FIFO控制器的通知,確定是否所述RAM為非空狀態(tài)且所述輸出寄存器為空狀態(tài)。
8.根據(jù)權利要求5或6所述的方法,其特征在于,所述FIFO控制器在接收到有效的寫 信號時,通過所述輸入寄存器設置所述RAM的寫地址;所述RAM按照寫時鐘,根據(jù)被設置的寫地址接收被寫入的數(shù)據(jù)。
全文摘要
本發(fā)明提供了一種實現(xiàn)預讀式先入先出存儲器(FIFO)的方法和預讀式FIFO,其中,輸出寄存器的設置使得原來由RAM輸出和后續(xù)用戶邏輯單元的操作構(gòu)成的關鍵路徑被打破,輸出通過單獨的寄存器完成,輸出延遲減小,從而使預讀式FIFO更好地滿足時序要求。另外,使能控制器在確定RAM為非空狀態(tài)且輸出寄存器為空狀態(tài),或者接收到讀請求時,使輸入FIFO控制器的讀信號有效,并使能輸出寄存器輸出數(shù)據(jù);否則,使輸出FIFO控制器的讀信號無效,并鎖存輸出寄存器,通過該方式,使能控制器能夠保證在增加一級寄存器的基礎上,仍能夠保證預讀方式的準確實現(xiàn)。
文檔編號G06F5/10GK102117193SQ20101000152
公開日2011年7月6日 申請日期2010年1月4日 優(yōu)先權日2010年1月4日
發(fā)明者林暉 申請人:杭州華三通信技術有限公司