當前位置:首頁 » 硬碟大全 » fifo緩存存入ddr
擴展閱讀
存儲掛載許可權變為問號 2022-06-27 01:02:58
kv3000硬碟救護王 2022-06-27 01:01:25
逍客哪個配置性價比 2022-06-27 01:01:13

fifo緩存存入ddr

發布時間: 2022-05-22 18:43:44

㈠ 如何將數字信號緩存到ram存儲

大部分多媒體產品不僅需要進行信號處理,而且需要使用某種類型的微控制器或處理器來完成指令和控制功能或其它日常任務。對於從最小的消費產品到最大的專業視頻產品的各類多媒體系統,基於FPGA的嵌入式處理器(如Nios II)向設計者提供了靈活地定製各種要求的能力。多媒體系統開發者面臨的一個重大挑戰是選擇合適的(既不降低性能也不減少功能的)處理器。至今有眾多供應商提供了數百種型號的處理器,其外圍設備、存儲器介面和性能特性也各不相同。 FPGA嵌入式處理器可以降低BOM和PCB版圖成本。在需要多個處理器的情況,開發工具將允許用戶創建多處理器系統,進而提升系統的性能或把軟體應用分成更簡單的任務。可以針對最大系統性能或最小邏輯使用率對Nios II內核進行優化,或者在系統性能和邏輯使用率之間取得平衡。該內核可以方便地通過配置實現乘法器、用戶設定的高速緩存、定製指令、硬體調試邏輯等特性以適應特殊的性能需求。 Nios II嵌入式設計套件(EDS)支持創建定製的多內核系統。Nios II處理器與超高密度的FPGA(如Stratix III器件系列產品)相結合可以創建出非常理想的高性能多處理器應用系統。Nios II的典型應用如圖4所示。 圖4:NIOS II嵌入式處理器的典型系統應用。 嵌入式存儲器和外部存儲器介面 存儲器是所有視頻處理應用(如視頻壓縮編碼、2D濾波和縮放)都需要的關鍵構建模塊之一。現在,由於FPGA提供了眾多的內部專用存儲器模塊,因此一個FPGA就可以實現完整的多媒體系統。這些內部存儲器模塊包括RAM、ROM、FIFO、雙埠存儲器和移位寄存器。大多數系統通常需要使用存儲器來滿足各種復雜功能(如通訊、數字信號處理、電子數據處理和控制應用)所需要的不同存儲需求。 Stratix器件中包含的TriMatrix存儲器架構提供了多種不同的存儲器結構,可以實現復雜設計中的各種存儲器功能。在存儲器帶寬不夠充裕時,設計師可以使用較小的M512 RAM模塊實現先入先出(FIFO)和時鍾域緩存功能。M-RAM模塊可以使FPGA滿足大型緩存應用(如知識產權包緩存和系統高速緩存)的需求。M4K模塊非常適合為消費多媒體應用(如數字電視視頻增強)提供中等規模的存儲器應用。另外,Stratix器件也支持DDR2和DDR3 SDRAM及RLDRAM等多種類型的外部存儲器。 高速介面 帶有內建高速差分介面(如LVDS、RSDS、mini-LVDS和PPDS)的FPGA可直接連接到平板LCD或等離子顯示器。典型的平板顯示器通常會聯合運用可編程器件和ASSP在把圖像提供給顯示器之前進行視頻質量增強。 圖5顯示了一個用FPGA實現視頻處理和顯示屏介面的完整LCD模塊。除了差分介面之外,高端FPGA還帶有其它高速串列介面收發器。對於專業視頻應用,串列介面可以是SDI、ASI、PCI Express或Serial Rapid IO。

㈡ 誰能詳細介紹下fifo謝謝!!!

1.什麼是FIFO?
FIFO是英文First In First Out 的縮寫,是一種先進先出的數據緩存器,他與普通存儲器的區別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就是只能順序寫入數據,順序的讀出數據,其數據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。

2.什麼情況下用FIFO?
FIFO一般用於不同時鍾域之間的數據傳輸,比如FIFO的一端時AD數據採集,另一端時計算機的PCI匯流排,假設其AD採集的速率為16位 100K SPS,那麼每秒的數據量為100K×16bit=1.6Mbps,而PCI匯流排的速度為33MHz,匯流排寬度32bit,其最大傳輸速率為1056Mbps,在兩個不同的時鍾域間就可以採用FIFO來作為數據緩沖。另外對於不同寬度的數據介面也可以用FIFO,例如單片機位8位數據輸出,而DSP可能是16位數據輸入,在單片機與DSP連接時就可以使用FIFO來達到數據匹配的目的。

3.FIFO的一些重要參數
FIFO的寬度:也就是英文資料里常看到的THE WIDTH,它只的是FIFO一次讀寫操作的數據位,就像MCU有8位和16位,ARM 32位等等,FIFO的寬度在單片成品IC中是固定的,也有可選擇的,如果用FPGA自己實現一個FIFO,其數據位,也就是寬度是可以自己定義的。

FIFO的深度:THE DEEPTH,它指的是FIFO可以存儲多少個N位的數據(如果寬度為N)。如一個8位的FIFO,若深度為8,它可以存儲8個8位的數據,深度為12 ,就可以存儲12個8位的數據,FIFO的深度可大可小,個人認為FIFO深度的計算並無一個固定的公式。在FIFO實際工作中,其數據的滿/空標志可以控制數據的繼續寫入或讀出。在一個具體的應用中也不可能由一些參數算數精確的所需FIFO深度為多少,這在寫速度大於讀速度的理想狀態下是可行的,但在實際中用到的FIFO深度往往要大於計算值。一般來說根據電路的具體情況,在兼顧系統性能和FIFO成本的情況下估算一個大概的寬度和深度就可以了。而對於寫速度慢於讀速度的應用,FIFO的深度要根據讀出的數據結構和讀出數據的由那些具體的要求來確定。
滿標志:FIFO已滿或將要滿時由FIFO的狀態電路送出的一個信號,以阻止FIFO的寫操作繼續向FIFO中寫數據而造成溢出(overflow)。
空標志:FIFO已空或將要空時由FIFO的狀態電路送出的一個信號,以阻止FIFO的讀操作繼續從FIFO中讀出數據而造成無效數據的讀出(underflow)。
讀時鍾:讀操作所遵循的時鍾,在每個時鍾沿來臨時讀數據。
寫時鍾:寫操作所遵循的時鍾,在每個時鍾沿來臨時寫數據。
讀指針:指向下一個讀出地址。讀完後自動加1。
寫指針:指向下一個要寫入的地址的,寫完自動加1。
讀寫指針其實就是讀寫的地址,只不過這個地址不能任意選擇,而是連續的。

4.FIFO的分類
根均FIFO工作的時鍾域,可以將FIFO分為同步FIFO和非同步FIFO。同步FIFO是指讀時鍾和寫時鍾為同一個時鍾。在時鍾沿來臨時同時發生讀寫操作。非同步FIFO是指讀寫時鍾不一致,讀寫時鍾是互相獨立的。

5.FIFO設計的難點
FIFO設計的難點在於怎樣判斷FIFO的空/滿狀態。為了保證數據正確的寫入或讀出,而不發生益處或讀空的狀態出現,必須保證FIFO在滿的情況下,不能進行寫操作。在空的狀態下不能進行讀操作。怎樣判斷FIFO的滿/空就成了FIFO設計的核心問題。由於同步FIFO幾乎很少用到,這里只描述非同步FIFO的空/滿標志產生問題。
在用到觸發器的設計中,不可避免的會遇到亞穩態的問題(關於亞穩態這里不作介紹,可查看相關資料)。在涉及到觸發器的電路中,亞穩態無法徹底消除,只能想辦法將其發生的概率將到最低。其中的一個方法就是使用格雷碼。格雷碼在相鄰的兩個碼元之間只由一位變換(二進制碼在很多情況下是很多碼元在同時變化)。這就會避免計數器與時鍾同步的時候發生亞穩態現象。但是格雷碼有個缺點就是只能定義2^n的深度,而不能像二進制碼那樣隨意的定義FIFO的深度,因為格雷碼必須循環一個2^n,否則就不能保證兩個相鄰碼元之間相差一位的條件,因此也就不是真正的各雷碼了。第二就是使用冗餘的觸發器,假設一個觸發器發生亞穩態的概率為P,那麼兩個及聯的觸發器發生亞穩態的概率就為P的平方。但這回導致延時的增加。亞穩態的發生會使得FIFO出現錯誤,讀/寫時鍾采樣的地址指針會與真實的值之間不同,這就導致寫入或讀出的地址錯誤。由於考慮延時的作用,空/滿標志的產生並不一定出現在FIFO真的空/滿時才出現。可能FIFO還未空/滿時就出現了空/滿標志。這並沒有什麼不好,只要保證FIFO不出現overflow or underflow 就OK了。
很多關於FIFO的文章其實討論的都是空/滿標志的不同演算法問題。
在Vijay A. Nebhrajani的《非同步FIFO結構》一文中,作者提出了兩個關於FIFO空/滿標志的演算法。
第一個演算法:構造一個指針寬度為N+1,深度為2^N位元組的FIFO(為便方比較將格雷碼指針轉換為二進制指針)。當指針的二進制碼中最高位不一致而其它N位都相等時,FIFO為滿(在Clifford E. Cummings的文章中以格雷碼表示是前兩位均不相同,而後兩位LSB相同為滿,這與換成二進製表示的MSB不同其他相同為滿是一樣的)。當指針完全相等時,FIFO為空。這也許不容易看出,舉個例子說明一下:一個深度為8位元組的FIFO怎樣工作(使用已轉換為二進制的指針)。FIFO_WIDTH=8,FIFO_DEPTH= 2^N = 8,N = 3,指針寬度為N+1=4。起初rd_ptr_bin和wr_ptr_bin均為「0000」。此時FIFO中寫入8個位元組的數據。wr_ptr_bin =「1000」,rd_ptr_bin=「0000」。當然,這就是滿條件。現在,假設執行了8次的讀操作,使得rd_ptr_bin =「1000」,這就是空條件。另外的8次寫操作將使wr_ptr_bin 等於「0000」,但rd_ptr_bin 仍然等於「1000」,因此FIFO為滿條件。
顯然起始指針無需為「0000」。假設它為「0100」,並且FIFO為空,那麼8個位元組會使wr_ptr_bin =「1100」,, rd_ptr_bin 仍然為「0100」。這又說明FIFO為滿。
在Vijay A. Nebhrajani的這篇《非同步FIFO結構》文章中說明了怎樣運用格雷碼來設置空滿的條件,但沒有說清為什麼深度為8的FIFO其讀寫指針要用3+1位的格雷碼來實現,而3+1位的格雷碼可以表示16位的深度,而真實的FIFO只有8位,這是怎麼回事?而這個問題在Clifford E. Cummings的文章中得以解釋。三位格雷碼可表示8位的深度,若在加一位最為MSB,則這一位加其他三位組成的格雷碼並不代表新的地址,也就是說格雷碼的0100表示表示7,而1100仍然表示7,只不過格雷碼在經過一個以0位MSB的循環後進入一個以1為MSB的循環,然後又進入一個以0位MSB的循環,其他的三位碼仍然是格雷碼,但這就帶來一個問題,在0100的循環完成後,進入1000,他們之間有兩位發生了變換,而不是1位,所以增加一位MSB的做法使得該碼在兩處:0100~1000,1100~0000有兩位碼元發生變化,故該碼以不是真正的格雷碼。增加的MSB是為了實現空滿標志的計算。Vijay A. Nebhrajani的文章用格雷碼轉二進制,再轉格雷碼的情況下提出空滿條件,僅過兩次轉換,而Clifford E. Cummings的文章中直接在格雷碼條件下得出空滿條件。其實二者是一樣的,只是實現方式不同罷了。

第二種演算法:Clifford E. Cummings的文章中提到的STYLE #2。它將FIFO地址分成了4部分,每部分分別用高兩位的MSB 00 、01、 11、 10決定FIFO是否為going full 或going empty (即將滿或空)。如果寫指針的高兩位MSB小於讀指針的高兩位MSB則FIFO為「幾乎滿」,

若寫指針的高兩位MSB大於讀指針的高兩位MSB則FIFO為「幾乎空」。

在Vijay A. Nebhrajani的《非同步FIFO結構》第三部分的文章中也提到了一種方法,那就是方向標志與門限。設定了FIFO容量的75%作為上限,設定FIFO容量的25%為下限。當方向標志超過門限便輸出滿/空標志,這與Clifford E. Cummings的文章中提到的STYLE #2可謂是異曲同工。他們都屬於保守的空滿判斷。其實這時輸出空滿標志FIFO並不一定真的空/滿。
說到此,我們已經清楚地看到,FIFO設計最關鍵的就是產生空/滿標志的演算法的不同產生了不同的FIFO。但無論是精確的空滿還是保守的空滿都是為了保證FIFO工作的可靠。

6.關於FIFO的一點的思考

關於FIFO丟數據的問題,其實各位對同一個問題的理解有偏差,才造成了相互誤解。如果在理想狀況下(時鍾同步不回出現錯碼),FIFO由讀寫指針控制是不會丟數的,(這不是廢話嗎,現實中哪來的理想狀況!)且慢,我的意思是說丟數據並不是讀寫誰快誰慢造成的,在正確的設置空滿標志演算法的情況下,數據的overflow 和underflow 是不會發生的。而往往現實中因為亞穩態的存在,才出現了丟數的情況,也就是說是只要讀寫時鍾不同步,在采樣的過程中采樣出錯,使得本該是0100的變成了1101等等,就會出現讀寫的錯誤,我們稱其為丟數,其原因就是在時鍾同步指針的時候出現亞穩態,由於二進制碼加1的時候很多位同時變化,所以很容易出現亞穩態。因此才用格雷碼將此問題發生的概率比降到最小,其次用多餘的觸發器使其概率進一步降低,也就是說錯誤難免,但我們可以將其發生的概率降到最低,並且在出現錯誤時也不會錯的態離譜(詳見Vijay A. Nebhrajani的《非同步FIFO結構》第二篇)。
二進制碼指針並非不好用,在前面也提到了它有自身的優勢,由於通過設置握手信號,指針可以有多位同時變化,二進制指針每次移動可以跳躍過任意的長度,這樣給FIFO的某些功能的實現帶來了方便(例如,硬體直接控制FIFO從緩存的數據流中丟棄一個出錯的包);而格雷碼指針一般只能做遞增或遞減的移動。設置握手信號雖然可以保證指針不出錯,但這樣你來我往的經過三四個回合才能開始傳數據,所以對於高速的場合就不適用了。

㈢ fifo是什麼意思

fifo的意思:FIFO是First In/First-Out的縮寫,是先入先出的意思。由於微電子技術的飛速發展,新一代FIFO晶元容量越來越大,體積越來越小,價格越來越便宜。

作為一種新型大規模集成電路,FIFO晶元以其靈活、方便、高效的特性,逐漸在高速數據採集、高速數據處理、高速數據傳輸以及多機處理系統中得到越來越廣泛的應用。

FIFO存儲器的功能:

1、對連續的數據流進行緩存,防止在進機和存儲操作時丟失數據。

2、數據集中起來進行進棧和存儲,可避免頻繁的匯流排操作,減輕CPU的負擔。

3、允許系統進行DMA操作,提高數據的傳輸速度。這是至關重要的一點,如果不採用DMA操作,數據傳輸將達不到傳輸要求,而且大大增加CPU的負擔,無法同時完成數據的存儲工作。

㈣ 用FPGA,FIFO,SDRAMz做數據緩存時,怎麼確定FIFO的深度位寬和SDRAM的各項指標數據傳入傳出的速度已知

當讀速率F2慢於寫速率F1時,FIFO便可被用作系統中的緩沖元件或隊列。因此FIFO的大小基本上暗示了所需緩存數據的容量,該容量取決於讀寫數據的速率。

FIFO深度計算=B-B*F2/(F1*I), B為突發數據塊大小

SDRAM選型根據位寬,已經容量大小來選型

㈤ 同步FIFO和非同步FIFO各在什麼情況下應用

當你的設計中只有一個時鍾信號的時候,所有的寄存器都使用同一個時鍾,他們之間不會產生傳輸速度不匹配的情況;而當你的設計中存在多個時鍾信號,並且需要在這幾個時鍾域之間傳輸數據的時候,寄存器會由於時鍾信號的頻率不匹配而產生數據丟失等情況,這個時候需要用非同步FIFO來進行緩存,保證數據能夠正確傳輸,因此一般非同步FIFO會包含一個雙埠的RAM,用於數據記錄,詳細地可以參考FIFO的相關資料。這里的非同步指的是不同頻率/不同相位的時鍾信號。而同步FIFO一般只用來作buffer。 大概就是這樣子。 2.FIFO是不會實現數據位數的變換的。它只是實現了數據能被正確的傳遞。 同步就不用說了,非同步時,當寫滿和讀空時都有相應的信號告訴發送和接受模塊, 這樣就不會用沖突了

㈥ 有人有設計DDR3存儲器介面設計的經驗沒 ,ISE用MIG內核,是不是必須要有FIFO緩沖啊

時鍾比為4:1 MIG內核輸出的

㈦ 什麼是FIFO緩存隊列

FIFO是英文First In First Out 的縮寫,是一種先進先出的數據緩存器,他與普通存儲器的區別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就是只能順序寫入數據,順序的讀出數據,其數據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。 FIFO一般用於不同時鍾域之間的數據傳輸,比如FIFO的一端時AD數據採集,另一端時計算機的PCI匯流排,假設其AD採集的速率為16位 100K SPS,那麼每秒的數據量為100K×16bit=1.6Mbps,而PCI匯流排的速度為33MHz,匯流排寬度32bit,其最大傳輸速率為1056Mbps,在兩個不同的時鍾域間就可以採用FIFO來作為數據緩沖。另外對於不同寬度的數據介面也可以用FIFO,例如單片機位8位數據輸出,而DSP可能是16位數據輸入,在單片機與DSP連接時就可以使用FIFO來達到數據匹配的目的。 3.FIFO的一些重要參數 FIFO的寬度:也就是英文資料里常看到的THE WIDTH,它只的是FIFO一次讀寫操作的數據位,就像MCU有8位和16位,ARM 32位等等,FIFO的寬度在單片成品IC中是固定的,也有可選擇的,如果用FPGA自己實現一個FIFO,其數據位,也就是寬度是可以自己定義的。 FIFO的深度:THE DEEPTH,它指的是FIFO可以存儲多少個N位的數據(如果寬度為N)。如一個8位的FIFO,若深度為8,它可以存儲8個8位的數據,深度為12 ,就可以存儲12個8位的數據,FIFO的深度可大可小,個人認為FIFO深度的計算並無一個固定的公式。在FIFO實際工作中,其數據的滿/空標志可以控制數據的繼續寫入或讀出。在一個具體的應用中也不可能由一些參數算數精確的所需FIFO深度為多少,這在寫速度大於讀速度的理想狀態下是可行的,但在實際中用到的FIFO深度往往要大於計算值。一般來說根據電路的具體情況,在兼顧系統性能和FIFO成本的情況下估算一個大概的寬度和深度就可以了。而對於寫速度慢於讀速度的應用,FIFO的深度要根據讀出的數據結構和讀出數據的由那些具體的要求來確定。 滿標志:FIFO已滿或將要滿時由FIFO的狀態電路送出的一個信號,以阻止FIFO的寫操作繼續向FIFO中寫數據而造成溢出(overflow)。 空標志:FIFO已空或將要空時由FIFO的狀態電路送出的一個信號,以阻止FIFO的讀操作繼續從FIFO中讀出數據而造成無效數據的讀出(underflow)。 讀時鍾:讀操作所遵循的時鍾,在每個時鍾沿來臨時讀數據。 寫時鍾:寫操作所遵循的時鍾,在每個時鍾沿來臨時寫數據。 讀指針:指向下一個讀出地址。讀完後自動加1。 寫指針:指向下一個要寫入的地址的,寫完自動加1。 讀寫指針其實就是讀寫的地址,只不過這個地址不能任意選擇,而是連續的。 4.FIFO的分類 根均FIFO工作的時鍾域,可以將FIFO分為同步FIFO和非同步FIFO。同步FIFO是指讀時鍾和寫時鍾為同一個時鍾。在時鍾沿來臨時同時發生讀寫操作。非同步FIFO是指讀寫時鍾不一致,讀寫時鍾是互相獨立的。 5.FIFO設計的難點 FIFO設計的難點在於怎樣判斷FIFO的空/滿狀態。為了保證數據正確的寫入或讀出,而不發生益處或讀空的狀態出現,必須保證FIFO在滿的情況下,不能進行寫操作。在空的狀態下不能進行讀操作。怎樣判斷FIFO的滿/空就成了FIFO設計的核心問題。由於同步FIFO幾乎很少用到,這里只描述非同步FIFO的空/滿標志產生問題。 補充: 在用到觸發器的設計中,不可避免的會遇到亞穩態的問題(關於亞穩態這里不作介紹,可查看相關資料)。在涉及到觸發器的電路中,亞穩態無法徹底消除,只能想辦法將其發生的概率將到最低。其中的一個方法就是使用格雷碼。格雷碼在相鄰的兩個碼元之間只由一位變換(二進制碼在很多情況下是很多碼元在同時變化)。這就會避免計數器與時鍾同步的時候發生亞穩態現象。但是格雷碼有個缺點就是只能定義2^n的深度,而不能像二進制碼那樣隨意的定義FIFO的深度,因為格雷碼必須循環一個2^n,否則就不能保證兩個相鄰碼元之間相差一位的條件,因此也就不是真正的各雷碼了。第二就是使用冗餘的觸發器,假設一個觸發器發生亞穩態的概率為P,那麼兩個及聯的觸發器發生亞穩態的概率就為P的平方。但這回導致延時的增加。亞穩態的發生會使得FIFO出現錯誤,讀/寫時鍾采樣的地址指針會與真實的值之間不同,這就導致寫入或讀出的地址錯誤。由於考慮延時的作用,空/滿標志的產生並不一定出現在FIFO真的空/滿時才出現。可能FIFO還未空/滿時就出現了空/滿標志。這並沒有什麼不好,只要保證FIFO不出現overflow or underflow 就OK了。 很多關於FIFO的文章其實討論的都是空/滿標志的不同演算法問題。 在Vijay A. Nebhrajani的《非同步FIFO結構》一文中,作者提出了兩個關於FIFO空/滿標志的演算法。 第一個演算法:構造一個指針寬度為N+1,深度為2^N位元組的FIFO(為便方比較將格雷碼指針轉換為二進制指針)。當指針的二進制碼中最高位不一致而其它N位都相等時,FIFO為滿(在Clifford E. Cummings的文章中以格雷碼表示是前兩位均不相同,而後兩位LSB相同為滿,這與換成二進製表示的MSB不同其他相同為滿是一樣的)。當指針完全相等時,FIFO為空。這也許不容易看出,舉個例子說明一下:一個深度為8位元組的FIFO怎樣工作(使用已轉換為二進制的指針)。FIFO_WIDTH=8, 補充: FIFO_DEPTH= 2^N = 8,N = 3,指針寬度為N+1=4。起初rd_ptr_bin和wr_ptr_bin均為「0000」。此時FIFO中寫入8個位元組的數據。wr_ptr_bin =「1000」,rd_ptr_bin=「0000」。當然,這就是滿條件。現在,假設執行了8次的讀操作,使得rd_ptr_bin =「1000」,這就是空條件。另外的8次寫操作將使wr_ptr_bin 等於「0000」,但rd_ptr_bin 仍然等於「1000」,因此FIFO為滿條件。 顯然起始指針無需為「0000」。假設它為「0100」,並且FIFO為空,那麼8個位元組會使wr_ptr_bin =「1100」,, rd_ptr_bin 仍然為「0100」。這又說明FIFO為滿。若寫指針的高兩位MSB大於讀指針的高兩位MSB則FIFO為「幾乎空」。 在Vijay A. Nebhrajani的《非同步FIFO結構》第三部分的文章中也提到了一種方法,那就是方向標志與門限。設定了FIFO容量的75%作為上限,設定FIFO容量的25%為下限。當方向標志超過門限便輸出滿/空標志,這與Clifford E. Cummings的文章中提到的STYLE #2可謂是異曲同工。他們都屬於保守的空滿判斷。其實這時輸出空滿標志FIFO並不一定真的空/滿。 說到此,我們已經清楚地看到,FIFO設計最關鍵的就是產生空/滿標志的演算法的不同產生了不同的FIFO。

㈧ 請問FIFO是什麼意思

FIFO( First Input First Output)簡單說就是指先進先出。由於微電子技術的飛速發展,新一代FIFO晶元容量越來越大,體積越來越小,價格越來越便宜。作為一種新型大規模集成電路,FIFO晶元以其靈

活、方便、高效的特性,逐漸在高速數據採集、高速數據處理、高速數據傳輸以及多機處理系統中得到越來越廣泛的應用。

在系統設計中,以增加數據傳輸率、處理大量數據流、匹配具有不同傳輸率的系統為目的而廣泛使用FIFO存儲器,從而提高了系統性能。FIFO存儲器是一個先入先出的雙口緩沖器,即第一個進入其

內的數據第一個被移出,其中一個存儲器的輸入口,另一個口是存儲器的輸出口。對於單片FIFO來說,主要有兩種結構:觸發導向結構和零導向傳輸結構。觸發導向傳輸結構的FIFO是由寄存器陣列

構成的,零導向傳輸結構的FIFO是由具有讀和寫地址指針的雙口RAM構成。

(8)fifo緩存存入ddr擴展閱讀:

FIFO存儲器是系統的緩沖環節,如果沒有FIFO存儲器,整個系統就不可能正常工作,它主要有幾方面的功能:

1、對連續的數據流進行緩存,防止在進機和存儲操作時丟失數據;

2、數據集中起來進行進機和存儲,可避免頻繁的匯流排操作,減輕CPU的負擔;

3、允許系統進行DMA操作,提高數據的傳輸速度。這是至關重要的一點,如果不採用DMA操作,數據傳輸將達不到傳輸要求,而且大大增加CPU的負擔,無法同時完成數據的存儲工作。

參考資料來源:網路-FIFO存儲器

㈨ FIFO調度演算法和LRU演算法

FIFO:先進先出調度演算法
LRU:最近最久未使用調度演算法

兩者都是緩存調度演算法,經常用作內存的頁面置換演算法。

打一個比方,幫助你理解。

你有很多的書,比如說10000本。
由於你的書實在太多了,你只能放在地下室裡面。
你看書的時候不會在地下室看書,而是在書房看書。
每次,你想看書都必須跑到地下室去找出來你想看的書,
然後抱回來放到書桌上,之後才開始看。
還有就是,有一些書你會反復的看,今天看了也許過幾天又要看。
總之,你自己是不知道你哪天會需要看哪本書的。
你的老師每天下課的時候會給你布置一個書單,讓你晚上回去去看哪本書。
(假設你老師讓你看的書在你的地下室裡面都有)

跑地下室當然是非常麻煩的,所以你希望你的經常看的那些書最好放在書桌上。
但是你的書房的書桌同時只能擺放10本書(這個是假設的啊)。
那麼,問題來了。
到底把哪些說留在書桌上最好呢?
這里說的最好,就是說你盡量少的跑地下室去找書。

為了解決這個問題,人們發明了很多的演算法。
其中,比較常見的就是上面這兩種:FIFO演算法和LRU演算法。

FIFO演算法
很簡單,我把書桌上的10本書按照放置時間先後堆放成一堆。
這里的放置時間,就是說這本書在我的書桌上放了幾天了。
每次要看書的時候,我先在書桌上找,找到就直接可以讀了。
讀完之後放回原來的位置就可以,不打亂順序。
如果書桌上面沒有我要讀的書,就去地下室找。
找來之後,我就把書桌上放的時間最長的那本(也就是
書堆裡面最下面的那本書)放回地下室。
然後把我今天需要看的這本書放在書堆的最上面。

LRU演算法
也不難,我把書桌上的10本書按照閱讀時間先後堆放成一堆。
這里的閱讀時間,就是說我最近一次讀這本書是幾天之前。
每次要看書的時候,我先在書桌上找,找到就直接可以讀了。
讀完之後放在書堆的最上面。
如果書桌上面沒有我要讀的書,就去地下室找。
找來之後,我就把書桌上最久沒有閱讀的那本
(也就是書堆裡面最下面的那本書)放回地下室。
然後把我今天需要看的這本書放在書堆的最上面。

上面這個比方,相信你可以看明白吧。
這里的地下室對應內存,書桌對應緩存,書對應頁面。

㈩ 一般是直接寫ddr 還是通過fifo

你的FIFO代碼沒問題就一樣了 一般存儲數據用個RAM FIFO 一般用來緩存數據或隔離時鍾域