RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

異步fifo詳解

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

異步fifo詳解

一. 什么是異步FIFO

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

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

異步FIFO讀寫分別采用相互異步的不同時(shí)鐘,使用異步FIFO可以在兩個(gè)不同時(shí)鐘系統(tǒng)之間快速而方便地傳輸實(shí)時(shí)數(shù)據(jù)

FIFO的常見參數(shù)

FIFO的寬度:即FIFO一次讀寫操作的數(shù)據(jù)位;

FIFO的深度:指的是FIFO可以存儲(chǔ)多少個(gè)N位的數(shù)據(jù)(如果寬度為N)。

滿標(biāo)志:FIFO已滿或?qū)⒁獫M時(shí)由FIFO的狀態(tài)電路送出的一個(gè)信號(hào),以阻止FIFO的寫操作繼續(xù)向FIFO中寫數(shù)據(jù)而造成溢出(overflow)。

空標(biāo)志:FIFO已空或?qū)⒁諘r(shí)由FIFO的狀態(tài)電路送出的一個(gè)信號(hào),以阻止FIFO的讀操作繼續(xù)從FIFO中讀出數(shù)據(jù)而造成無效數(shù)據(jù)的讀出(underflow)。

讀時(shí)鐘:讀操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來臨時(shí)讀數(shù)據(jù)。

寫時(shí)鐘:寫操作所遵循的時(shí)鐘,在每個(gè)時(shí)鐘沿來臨時(shí)寫數(shù)據(jù)。

二、設(shè)計(jì)原理

2.1結(jié)構(gòu)框圖

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

另外還有寫指針wr_ptr和寫滿標(biāo)志位wr_full產(chǎn)生模塊,讀指針rd_ptr和讀空標(biāo)志位rd_empty產(chǎn)生模塊,以及雙端口存儲(chǔ)RAM模塊。

2.2 二進(jìn)制計(jì)數(shù)器存在的問題

異步FIFO讀寫指針需要在數(shù)學(xué)上的操作和比較才能產(chǎn)生準(zhǔn)確的空滿標(biāo)志位,但由于讀寫指針屬于不同的時(shí)鐘域及讀寫時(shí)鐘相位關(guān)系的不確定性,同步模塊采集另一時(shí)鐘域的指針時(shí),此指針有可能正處在跳變的過程中,如下圖所示,那么采集到的值很有可能是不期望的值,當(dāng)然,不期望的錯(cuò)誤結(jié)果也會(huì)隨之發(fā)生。

上圖中,rd_ptr2sync 3和4以及4和5之間的中間態(tài)是由于到各寄存器的時(shí)鐘rd_clk存在偏差而引起的。二進(jìn)制的遞增操作,在大多數(shù)情況下都會(huì)有兩位或者兩以上的bit位在同一個(gè)遞增操作內(nèi)發(fā)生變化,但由于實(shí)際電路中會(huì)存在時(shí)鐘偏差和不同的路徑延時(shí),二進(jìn)制計(jì)數(shù)器在自增時(shí)會(huì)不可避免地產(chǎn)生錯(cuò)誤的中間結(jié)果,如下圖。

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

由此可見,要避免中間結(jié)果的產(chǎn)生,其中一個(gè)可行的方案就是使被同步模塊采集的數(shù)據(jù)遞變時(shí),每次只有一個(gè)bit位發(fā)生改變。格雷碼計(jì)數(shù)器就是一個(gè)不錯(cuò)的選擇。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    387

    瀏覽量

    43646
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FIFO Generator的Xilinx官方手冊(cè)

    FIFO作為FPGA崗位求職過程中最常被問到的基礎(chǔ)知識(shí)點(diǎn),也是項(xiàng)目中最常被使用到的IP,其意義是非常重要的。本文基于對(duì)FIFO Generator的Xilinx官方手冊(cè)的閱讀與總結(jié),匯總主要知識(shí)點(diǎn)
    的頭像 發(fā)表于 11-12 10:46 ?332次閱讀
    <b class='flag-5'>FIFO</b> Generator的Xilinx官方手冊(cè)

    FIFO的深度應(yīng)該怎么計(jì)算

    FIFO是FPGA/IC設(shè)計(jì)中經(jīng)常使用到的模塊,它經(jīng)常被用在兩個(gè)模塊之間進(jìn)行數(shù)據(jù)的緩存,以避免數(shù)據(jù)在傳輸過程中丟失。同時(shí)FIFO也經(jīng)常被用在跨時(shí)鐘域處理中。
    的頭像 發(fā)表于 10-25 15:20 ?285次閱讀
    <b class='flag-5'>FIFO</b>的深度應(yīng)該怎么計(jì)算

    Efinity FIFO IP仿真問題 -v1

    Efinity目前不支持聯(lián)合仿真,只能通過調(diào)用源文件仿真。 我們生成一個(gè)fifo IP命名為fifo_sim 在Deliverables中保留Testbench的選項(xiàng)。 在IP的生成目錄下會(huì)有以下
    的頭像 發(fā)表于 10-21 11:41 ?979次閱讀
    Efinity <b class='flag-5'>FIFO</b> IP仿真問題 -v1

    具有FIFO的雙異步通信元件TL16C552A數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《具有FIFO的雙異步通信元件TL16C552A數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 06-26 11:28 ?0次下載
    具有<b class='flag-5'>FIFO</b>的雙<b class='flag-5'>異步</b>通信元件TL16C552A數(shù)據(jù)表

    異步永磁電機(jī)工作原理 永磁電機(jī)有異步的嗎

    異步永磁電機(jī)是一種將永磁材料與異步電機(jī)技術(shù)相結(jié)合的新型電機(jī),它具有效率高、結(jié)構(gòu)簡(jiǎn)單、體積小、重量輕、維護(hù)方便等優(yōu)點(diǎn),在工業(yè)、農(nóng)業(yè)、交通運(yùn)輸?shù)阮I(lǐng)域得到了廣泛應(yīng)用。本文將詳細(xì)介紹異步永磁電機(jī)的工作原理
    的頭像 發(fā)表于 06-13 10:03 ?977次閱讀

    同步FIFO異步FIFO區(qū)別介紹

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

    DMA產(chǎn)生FIFO error interrupt錯(cuò)誤的原因?

    DMA用于接收采集AD轉(zhuǎn)化數(shù)據(jù),而且AD每間隔50us采集一次,DMA配置成單次模式,并收數(shù)長(zhǎng)度50次,未啟用FIFO模式,但是當(dāng)外部中斷非常頻繁時(shí),DMA不知怎么回事,產(chǎn)生了FIFO 錯(cuò)誤,按道理
    發(fā)表于 05-15 06:34

    關(guān)于同步FIFO異步FIFO的基礎(chǔ)知識(shí)總結(jié)

    FIFO是一種先進(jìn)先出數(shù)據(jù)緩存器,它與普通存儲(chǔ)器的區(qū)別是沒有外部讀寫地址線,使用起來非常簡(jiǎn)單,缺點(diǎn)是只能順序讀寫,而不能隨機(jī)讀寫。
    的頭像 發(fā)表于 04-09 14:23 ?3218次閱讀
    關(guān)于同步<b class='flag-5'>FIFO</b>和<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>的基礎(chǔ)知識(shí)總結(jié)

    FIFO漫談之異步FIFO空滿信號(hào)的產(chǎn)生位置

    格雷碼的事聊完了,后面順理成章的就是讀寫通路模塊的設(shè)計(jì)。不過在讀寫控制通路之前還要明確下另一個(gè)問題,就是空滿信號(hào)的產(chǎn)生位置的事情。
    的頭像 發(fā)表于 03-19 13:37 ?666次閱讀
    <b class='flag-5'>FIFO</b>漫談之<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>空滿信號(hào)的產(chǎn)生位置

    cy7c68013a slave fifo寫數(shù)據(jù)出現(xiàn)異常的原因有哪些?如何解決?

    我使用68013A和MCU采用Slave Fifo 異步方式進(jìn)行通訊,EP2為AUTOOUT,EP6為AUTOIN,16位?,F(xiàn)在有一個(gè)奇怪的現(xiàn)象出現(xiàn),當(dāng)通過mcu發(fā)送0x00 00 ff ff 00
    發(fā)表于 02-29 07:00

    如何清除SPI通信中的TX_FIFO和RX_FIFO?

    你好, 如何清除 SPI通信中的 TX_FIFO 和 RX_FIFO?是否有任何 API 可以清除接收數(shù)據(jù)緩沖區(qū)。
    發(fā)表于 02-27 07:16

    同步級(jí)聯(lián)和異步級(jí)聯(lián)的區(qū)別 異步級(jí)聯(lián)和同步級(jí)聯(lián)分別要注意什么

    指與同步級(jí)聯(lián)相對(duì)應(yīng)的,異步級(jí)聯(lián)是一種不同的級(jí)聯(lián)方式。在異步級(jí)聯(lián)中,級(jí)聯(lián)模塊之間不需要等待前一個(gè)模塊完全執(zhí)行完畢才能開始執(zhí)行下一個(gè)模塊。相反,每個(gè)模塊都可以獨(dú)立運(yùn)行,并在完成之后通知下一個(gè)模塊開始執(zhí)行
    的頭像 發(fā)表于 02-22 13:40 ?1803次閱讀

    異步FIFO結(jié)構(gòu)設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《異步FIFO結(jié)構(gòu)設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 02-06 09:06 ?0次下載

    異步整流是什么 異步整流優(yōu)點(diǎn)介紹

    異步整流主要由一個(gè)高邊MOS管和一個(gè)續(xù)流二極管構(gòu)成。這種整流方式之所以被稱為異步,是因?yàn)槠淅m(xù)流過程是自然發(fā)生的,與同步整流相比,它具有不同的工作原理。 對(duì)于同步降壓電路的構(gòu)造,它相當(dāng)于一個(gè)柵極半橋
    的頭像 發(fā)表于 01-12 15:26 ?894次閱讀
    <b class='flag-5'>異步</b>整流是什么 <b class='flag-5'>異步</b>整流優(yōu)點(diǎn)介紹

    異步電機(jī)應(yīng)用類型有哪些?該如何分類?

    作電動(dòng)機(jī)運(yùn)行的異步電機(jī)。因其轉(zhuǎn)子繞組電流是感應(yīng)產(chǎn)生的,又稱感應(yīng)電動(dòng)機(jī)。異步電動(dòng)機(jī)是各類電動(dòng)機(jī)中應(yīng)用最廣、需要量最大的一種。各國(guó)的以電為動(dòng)力的機(jī)械中,約有90%左右為異步電動(dòng)機(jī),其中小型異步
    的頭像 發(fā)表于 01-09 08:36 ?837次閱讀
    <b class='flag-5'>異步</b>電機(jī)應(yīng)用類型有哪些?該如何分類?
    RM新时代网站-首页