<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

異步fifo詳解

h1654155355.6033 ? 來源:未知 ? 作者:朱常 ? 2022-12-12 14:17 ? 次閱讀

異步fifo詳解

一. 什么是異步FIFO

FIFO即First in First out的英文簡稱,是一種先進先出的數據緩存器,與普通存儲器的區別在于沒有外部讀寫的地址線,缺點是只能順序的讀取和寫入數據(對于大型數據存儲,在性能上必然緩慢),其數據地址是由內部讀寫指針自動加一完成的,不能像普通的存儲器一樣,由地址線決定讀取或者寫入某個特定地址的數據,按讀寫是否為相同時鐘域分為同步和異步FIFO,這里主要介紹異步FIFO,主要用于跨時鐘域傳輸數據。

FIFO是一種數據緩沖器,用來實現數據先入先出的讀/寫方式。FIFO有一個寫端口和一個讀端口,外部無需使用者控制地址,使用方便。FIFO與普通的Block RAM有一個很明顯的區別就是使用Block RAM來做數據緩存處理,使用者必須自己控制讀和寫地址的管理,必須保證寫的數據不把Block RAM中未被讀出的內容覆蓋掉從而造成數據錯誤,同時保證讀的時候要讀出未被寫入的地址。而采用FIFO時,只需要關注FIFO控制器給出的空滿狀態信號即可知道當前有沒有錯誤的操作了FIFO,使FIFO的數據寫溢出或讀空。

異步FIFO讀寫分別采用相互異步的不同時鐘,使用異步FIFO可以在兩個不同時鐘系統之間快速而方便地傳輸實時數據

FIFO的常見參數

FIFO的寬度:即FIFO一次讀寫操作的數據位;

FIFO的深度:指的是FIFO可以存儲多少個N位的數據(如果寬度為N)。

滿標志:FIFO已滿或將要滿時由FIFO的狀態電路送出的一個信號,以阻止FIFO的寫操作繼續向FIFO中寫數據而造成溢出(overflow)。

空標志:FIFO已空或將要空時由FIFO的狀態電路送出的一個信號,以阻止FIFO的讀操作繼續從FIFO中讀出數據而造成無效數據的讀出(underflow)。

讀時鐘:讀操作所遵循的時鐘,在每個時鐘沿來臨時讀數據。

寫時鐘:寫操作所遵循的時鐘,在每個時鐘沿來臨時寫數據。

二、設計原理

2.1結構框圖

如上圖所示的同步模塊synchronize to write clk,其作用是把讀時鐘域的讀指針rd_ptr采集到寫時鐘(wr_clk)域,然后和寫指針wr_ptr進行比較從而產生或撤消寫滿標志位wr_full;類似地,同步模塊synchronize to read clk的作用是把寫時鐘域的寫指針wr_ptr采集到讀時鐘域,然后和讀指針rd_ptr進行比較從而產生或撤消讀空標志位rd_empty。

另外還有寫指針wr_ptr和寫滿標志位wr_full產生模塊,讀指針rd_ptr和讀空標志位rd_empty產生模塊,以及雙端口存儲RAM模塊。

2.2 二進制計數器存在的問題

異步FIFO讀寫指針需要在數學上的操作和比較才能產生準確的空滿標志位,但由于讀寫指針屬于不同的時鐘域及讀寫時鐘相位關系的不確定性,同步模塊采集另一時鐘域的指針時,此指針有可能正處在跳變的過程中,如下圖所示,那么采集到的值很有可能是不期望的值,當然,不期望的錯誤結果也會隨之發生。

上圖中,rd_ptr2sync 3和4以及4和5之間的中間態是由于到各寄存器的時鐘rd_clk存在偏差而引起的。二進制的遞增操作,在大多數情況下都會有兩位或者兩以上的bit位在同一個遞增操作內發生變化,但由于實際電路中會存在時鐘偏差和不同的路徑延時,二進制計數器在自增時會不可避免地產生錯誤的中間結果,如下圖。

由于rd_clk上升沿到達三寄存器的時間各不相同,這就導致了rd_ptr2sync的值從3’b011跳變3’b100的過程中經歷了3’b111和3’b101,直到最后一個時鐘(rd_clk0)沿的到來后rd_ptr2sync才跳變到正確結果3’b100。中間結果的持續的時間雖然相對短暫,但是這些不正確的中間結果完全有可能被其它時鐘域的同步模塊采集到而產生錯誤的動作,見上圖。

由此可見,要避免中間結果的產生,其中一個可行的方案就是使被同步模塊采集的數據遞變時,每次只有一個bit位發生改變。格雷碼計數器就是一個不錯的選擇。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • fifo
    +關注

    關注

    3

    文章

    371

    瀏覽量

    43139
收藏 人收藏

    評論

    相關推薦

    同步FIFO異步FIFO區別介紹

    ,并且間隔時間長,也就是突發寫入。那么通過設置一定深度的FIFO,可以起到數據暫存的功能,且使得后續處理流程平滑。 時鐘域的隔離:主要用異步FIFO。對于不同時鐘域的數據傳輸,可以通過FIFO
    的頭像 發表于 06-04 14:27 ?95次閱讀
    同步<b class='flag-5'>FIFO</b>和<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>區別介紹

    關于同步FIFO異步FIFO的基礎知識總結

    FIFO是一種先進先出數據緩存器,它與普通存儲器的區別是沒有外部讀寫地址線,使用起來非常簡單,缺點是只能順序讀寫,而不能隨機讀寫。
    的頭像 發表于 04-09 14:23 ?788次閱讀
    關于同步<b class='flag-5'>FIFO</b>和<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>的基礎知識總結

    異步FIFO結構設計

    電子發燒友網站提供《異步FIFO結構設計.pdf》資料免費下載
    發表于 02-06 09:06 ?0次下載

    FPGA學習-異步FIFO原型設計與驗證

    ? 點擊上方 藍字 關注我們 ? 第一節:fifo基礎 ? ? 內容: 1. 掌握FPGA設計中關于數據緩存的使用 2. 掌握FIFO工作原理
    的頭像 發表于 11-17 14:00 ?266次閱讀

    FIFO為什么不能正常工作?

    FIFO為什么不能正常工作?復位信號有效長度不夠,接口時序不匹配,可看下面這篇文章。 本文將介紹: 非DFX工程如何確保異步FIFO自帶的set_max_delay生效? DFX工程如何確保
    的頭像 發表于 11-02 09:25 ?632次閱讀
    <b class='flag-5'>FIFO</b>為什么不能正常工作?

    異步FIFO設計之格雷碼

    相鄰的格雷碼只有1bit的差異,因此格雷碼常常用于異步fifo設計中,保證afifo的讀地址(或寫地址)被寫時鐘(或讀時鐘)采樣時最多只有1bit發生跳變。
    的頭像 發表于 11-01 17:37 ?902次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>設計之格雷碼

    請問異步FIFO的溢出操作時怎么樣判斷的?

    請問異步FIFO的溢出操作時怎么樣判斷的? 異步FIFO是數據傳輸的一種常用方式,在一些儲存器和計算機系統中,常常會用到異步
    的頭像 發表于 10-18 15:28 ?433次閱讀

    同步FIFO異步FIFO的區別 同步FIFO異步FIFO各在什么情況下應用

    同步FIFO異步FIFO的區別 同步FIFO異步FIFO各在什么情況下應用? 1. 同步
    的頭像 發表于 10-18 15:23 ?1132次閱讀

    為什么異步fifo中讀地址同步在寫時鐘域時序分析不通過?

    為什么異步fifo中讀地址同步在寫時鐘域時序分析不通過? 異步FIFO中讀地址同步在寫時鐘域時序分析不通過的原因可能有以下幾個方面: 1. 讀地址同步在寫時鐘域時序分析未覆蓋完全 在時
    的頭像 發表于 10-18 15:23 ?413次閱讀

    采用格雷碼異步FIFO跟標準FIFO有什么區別

    異步FIFO包含"讀"和"寫“兩個部分,寫操作和讀操作在不同的時鐘域中執行,這意味著Write_Clk和Read_Clk的頻率和相位可以完全獨立。異步FIFO
    的頭像 發表于 09-14 11:21 ?642次閱讀
    采用格雷碼<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>跟標準<b class='flag-5'>FIFO</b>有什么區別

    異步FIFO-格雷碼

    很多人在面試時被問到為什么異步FIFO中需要用到格雷碼,可能大部分的答案是格雷碼可以消除亞穩態。這種回答比較模糊,今天我們就針對這個來深入探討一下。
    的頭像 發表于 08-26 14:20 ?673次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>-格雷碼

    跨時鐘設計:異步FIFO設計

    在ASIC設計或者FPGA設計中,我們常常使用異步fifo(first in first out)(下文簡稱為afifo)進行數據流的跨時鐘,可以說沒使用過afifo的Designer,其設計經歷是不完整的。廢話不多說,直接上接口信號說明。
    的頭像 發表于 07-31 11:10 ?1481次閱讀
    跨時鐘設計:<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>設計

    同步FIFO設計詳解及代碼分享

    FIFO (先入先出, First In First Out )存儲器,在 FPGA 和數字 IC 設計中非常常用。 根據接入的時鐘信號,可以分為同步 FIFO異步 FIFO 。
    發表于 06-27 10:24 ?1475次閱讀
    同步<b class='flag-5'>FIFO</b>設計<b class='flag-5'>詳解</b>及代碼分享

    FPGA零基礎學習之Vivado-FIFO使用教程

    的,這也是它的一大特點,通常用來做數據的緩存,或者用來解決高速異步數據的交互,即解決了跨時鐘域的問題。此外,FIFO還有一個特點,就是數據被讀出之后就不存在了,不像RAM和ROM一樣,數據被讀出后還存在
    發表于 06-16 17:50

    FPGA零基礎學習之Vivado-FIFO使用教程

    用來做數據的緩存,或者用來解決高速異步數據的交互,即解決了跨時鐘域的問題。此外,FIFO還有一個特點,就是數據被讀出之后就不存在了,不像RAM和ROM一樣,數據被讀出后還存在。所以我們如果想進行多次的讀,那么就需要進行同樣次數的寫。
    的頭像 發表于 06-09 09:38 ?2646次閱讀
    FPGA零基礎學習之Vivado-<b class='flag-5'>FIFO</b>使用教程
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>