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

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

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

異步FIFO設(shè)計(jì)方案詳解 異步FIFO設(shè)計(jì)的難點(diǎn)在哪里

電子設(shè)計(jì) ? 作者:工程師飛燕 ? 2018-09-10 10:06 ? 次閱讀

無(wú)論是數(shù)據(jù)通訊或者SOC(包括FPGA或者ASIC設(shè)計(jì))設(shè)計(jì),跨時(shí)鐘域(clock domain crossing)處理都是一件讓人很頭疼的事情,無(wú)論是在設(shè)計(jì)的前端或者步入設(shè)計(jì)的后端,都沒(méi)有很好的工具去做保證,只能靠設(shè)計(jì)人員的經(jīng)驗(yàn)進(jìn)行最大的保證,然而這個(gè)問(wèn)題如果處理不好,你的整個(gè)設(shè)計(jì)可能就完全報(bào)廢,而最怕的是你的設(shè)計(jì)時(shí)好時(shí)壞,有時(shí)穩(wěn)定,有時(shí)出錯(cuò),這個(gè)時(shí)候你甚至很難進(jìn)行定位(尤其是上了FPGA開(kāi)發(fā)板或者芯片已經(jīng)tapout了)。

一般而言,處理跨時(shí)鐘域的方法有這么幾種(大家在網(wǎng)上也都能找到資料,這些資料大都來(lái)自幾篇經(jīng)典的論文,中文方面的資料大都是翻譯過(guò)著理解這幾篇論文而來(lái)):少量的數(shù)據(jù)用邊沿檢測(cè)電路,或者脈沖檢測(cè)電路,或者電平檢測(cè)電路,或者兩級(jí)觸發(fā)器;比較多的數(shù)據(jù)時(shí)用異步FIFO。

本文側(cè)重講解本人對(duì)異步FIFO的深入理解,講解兩種經(jīng)典的異步FIFO的設(shè)計(jì)方案,這兩種方案來(lái)自一篇文章《simulation and synthesis techniques for asynchronous FIFO design》,大家可自行下載,設(shè)計(jì)思路這篇文章里面介紹的很詳細(xì),解釋的也很出色,我更多的是談?wù)勎业牟糠掷斫狻?/p>

1、異步FIFO設(shè)計(jì)的難點(diǎn)在哪里

1)寫(xiě)地址和讀地址處于不同的時(shí)鐘域,如何比對(duì)寫(xiě)地址和讀地址才能正確的產(chǎn)生空滿(mǎn)信號(hào);

2)當(dāng)讀寫(xiě)地址相同時(shí),究竟是讀空了還是寫(xiě)滿(mǎn)了(因?yàn)榇嬖谀阕肺亿s的情況,類(lèi)似于一個(gè)圓環(huán))。

2、處理思路

1)對(duì)于難點(diǎn)1大家自然想到采用同步處理的方式,具體為將寫(xiě)地址或者讀地址同步(例如利用兩級(jí)觸發(fā)器)到對(duì)方的時(shí)鐘域中,在相同的時(shí)鐘域中進(jìn)行地址的比對(duì),但是由于寫(xiě)地址和讀地址很多時(shí)候并不止1bit,同時(shí)進(jìn)行同步處理會(huì)增大錯(cuò)誤的概率(如地址按0111->1000跳變,此時(shí)4bit都在變化,DFF進(jìn)行同步時(shí)就很容易出錯(cuò)),因而可以先將地址(二進(jìn)制的)轉(zhuǎn)換為格雷碼(相鄰數(shù)據(jù)之間只有一個(gè)bit在變化),然后再進(jìn)行同步,最后進(jìn)行對(duì)比,這樣會(huì)大大減少錯(cuò)誤的概率。

2)對(duì)于難點(diǎn)2可以在地址前面添加1bit用于標(biāo)志位進(jìn)行區(qū)分,例如復(fù)位時(shí),讀寫(xiě)地址的標(biāo)志位都是0,如果寫(xiě)完1輪而開(kāi)始新的一輪時(shí)就將寫(xiě)地址的標(biāo)志位換為1(讀也同樣道理變換),這樣可以通過(guò)判斷標(biāo)志位加上對(duì)比地址判斷是空還是滿(mǎn),具體為當(dāng)讀寫(xiě)地址的標(biāo)志位相同讀寫(xiě)地址相同時(shí)為讀空,具體為當(dāng)讀寫(xiě)地址的標(biāo)志位不同讀寫(xiě)地址相同時(shí)為寫(xiě)滿(mǎn);另外也可以利用格雷碼的最高兩位00->01->10->11進(jìn)行相位的區(qū)分,具體參考我給出的文章或者網(wǎng)絡(luò)資料,其實(shí)本質(zhì)上和上面的是一個(gè)道理。

3、經(jīng)典FIFO設(shè)計(jì)方案的解讀

1)同步讀寫(xiě)地址(經(jīng)格雷碼轉(zhuǎn)換后)到對(duì)方的時(shí)鐘域

相比于直接同步二信號(hào)進(jìn)制地址(先用握手,然后同步二進(jìn)制地址)好處是格雷碼相鄰數(shù)據(jù)之間只有一個(gè)bit在變化,而二進(jìn)制由于寫(xiě)地址和讀地址很多時(shí)候并不止1bit,同時(shí)進(jìn)行同步處理會(huì)增大錯(cuò)誤的概率(如地址按0111->1000跳變,此時(shí)4bit都在變化,DFF進(jìn)行同步時(shí)就很容易出錯(cuò));利用格雷碼進(jìn)行同步,即使發(fā)生同步的時(shí)出錯(cuò)也不會(huì)造成overrun和underrun的情況(因?yàn)橥胶蟮臄?shù)據(jù)必定小于等于同步前的數(shù)據(jù),即只可能1被同步為0,而不可能0被同步為1),例如當(dāng)前的讀地址到了6,寫(xiě)地址到了8,地址8經(jīng)過(guò)同步后出錯(cuò)而變成了6,這時(shí)會(huì)出現(xiàn)地址相同而判斷為讀空,不過(guò)沒(méi)關(guān)系,讀空則不讀,至少不會(huì)出現(xiàn)underrun的情況,隨著時(shí)間的推移地址8總會(huì)被采樣到;然而格雷碼也有缺點(diǎn),只能連續(xù)變化遞增或者遞減(如果間隔變化就不符合格雷碼的特點(diǎn)了),所以設(shè)計(jì)的深度必須是2的n次冪,如果不是的話(huà),需要重新產(chǎn)生編碼格雷碼,否則也會(huì)出現(xiàn)間隔變化不符合相鄰之間只有1bit變化的特點(diǎn)。

異步FIFO設(shè)計(jì)方案詳解 異步FIFO設(shè)計(jì)的難點(diǎn)在哪里

2)將讀寫(xiě)地址(經(jīng)格雷碼轉(zhuǎn)換后)同步到一個(gè)組合邏輯電路中(異步比較)直接比較空滿(mǎn),然后將空滿(mǎn)信號(hào)同步到各自對(duì)應(yīng)的模塊中

異步FIFO設(shè)計(jì)方案詳解 異步FIFO設(shè)計(jì)的難點(diǎn)在哪里

雖然這種電路會(huì)給fifo帶來(lái)不好的狀態(tài),例如已經(jīng)滿(mǎn)了wfull==1,但是這個(gè)時(shí)候讀走一個(gè)數(shù)據(jù),由于同步的延時(shí)性,導(dǎo)致這一段時(shí)間內(nèi)wfull==1一直不變(如果沒(méi)有同步帶來(lái)的延時(shí)應(yīng)該變?yōu)?的),rempty也會(huì)遇到同樣的問(wèn)題,但是這種電路不會(huì)出現(xiàn)underrun和overrun的情況。

3)2)相比1)可能會(huì)節(jié)省面積,因?yàn)?)同步wptr[n-1:0]和rptr[n-1:0],2)只需要同步afull_n,aempty_n;1)的速率可能較2)會(huì)快些,2)中存在異步且組合邏輯比較,不利于時(shí)序的優(yōu)化。

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

    關(guān)注

    3

    文章

    382

    瀏覽量

    43403
  • 數(shù)據(jù)通訊
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    11749
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA器件實(shí)現(xiàn)異步FIFO讀寫(xiě)系統(tǒng)的設(shè)計(jì)

    是這個(gè)問(wèn)題的一種簡(jiǎn)便、快捷的解決方案,使用異步 FIFO 可以在兩個(gè)不同時(shí)鐘系統(tǒng)之間快速而方便地傳輸實(shí)時(shí)數(shù)據(jù)。
    發(fā)表于 07-16 17:41 ?1172次閱讀
    基于FPGA器件實(shí)現(xiàn)<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>讀寫(xiě)系統(tǒng)的設(shè)計(jì)

    異步FIFO的設(shè)計(jì)難點(diǎn)是什么,怎么解決這些難點(diǎn)?

    異步FIFO介紹異步FIFO的設(shè)計(jì)難點(diǎn)是什么,怎么解決這些難點(diǎn)?
    發(fā)表于 04-08 06:08

    怎么解決異步FIFO設(shè)計(jì)的難點(diǎn)?

    FIFO的基本結(jié)構(gòu)和工作原理異步FIFO設(shè)計(jì)中的問(wèn)題與解決辦法FPGA內(nèi)部軟異步FIFO設(shè)計(jì)
    發(fā)表于 04-08 07:07

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

    首先介紹異步FIFO 的概念、應(yīng)用及其結(jié)構(gòu),然后分析實(shí)現(xiàn)異步FIFO難點(diǎn)問(wèn)題及其解決辦法; 在傳統(tǒng)設(shè)計(jì)的基礎(chǔ)上提出一種新穎的電路結(jié)構(gòu)并對(duì)其
    發(fā)表于 04-16 09:25 ?46次下載

    高速異步FIFO的設(shè)計(jì)與實(shí)現(xiàn)

    本文主要研究了用FPGA 芯片內(nèi)部的EBRSRAM 來(lái)實(shí)現(xiàn)異步FIFO 設(shè)計(jì)方案,重點(diǎn)闡述了異步FIFO 的標(biāo)志信號(hào)——空/滿(mǎn)狀態(tài)的設(shè)計(jì)思路
    發(fā)表于 01-13 17:11 ?40次下載

    Camera Link接口的異步FIFO設(shè)計(jì)與實(shí)現(xiàn)

    介紹了異步FIFO在Camera Link接口中的應(yīng)用,將Camera Link接口中的幀有效信號(hào)FVAL和行有效信號(hào)LVAL引入到異步FIFO的設(shè)計(jì)中。分析了FPGA中設(shè)計(jì)
    發(fā)表于 07-28 16:08 ?32次下載

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

    摘要:首先介紹異步FIFO的概念、應(yīng)用及其結(jié)構(gòu),然后分析實(shí)現(xiàn)異步FIFO難點(diǎn)問(wèn)題及其解決辦法;在傳統(tǒng)設(shè)計(jì)的基礎(chǔ)上提出一種新穎的電路結(jié)構(gòu)并對(duì)
    發(fā)表于 06-20 12:46 ?3804次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>結(jié)構(gòu)及FPGA設(shè)計(jì)

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

    異步FIFO結(jié)構(gòu)及FPGA設(shè)計(jì),解決亞穩(wěn)態(tài)的問(wèn)題
    發(fā)表于 11-10 15:21 ?4次下載

    異步FIFO的設(shè)計(jì)分析及詳細(xì)代碼

    本文首先對(duì)異步 FIFO 設(shè)計(jì)的重點(diǎn)難點(diǎn)進(jìn)行分析,最后給出詳細(xì)代碼。 一、FIFO簡(jiǎn)單講解 FIFO的本質(zhì)是RAM, 先進(jìn)先出 重要參數(shù):
    發(fā)表于 11-15 12:52 ?8443次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>的設(shè)計(jì)分析及詳細(xì)代碼

    基于FPGA的異步FIFO設(shè)計(jì)方法詳解

    在現(xiàn)代電路設(shè)計(jì)中,一個(gè)系統(tǒng)往往包含了多個(gè)時(shí)鐘,如何在異步時(shí)鐘間傳遞數(shù)據(jù)成為一個(gè)很重要的問(wèn)題,而使用異步FIFO可以有效地解決這個(gè)問(wèn)題。異步FIFO
    發(fā)表于 07-17 08:33 ?8215次閱讀
    基于FPGA的<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>設(shè)計(jì)方法<b class='flag-5'>詳解</b>

    基于異步FIFO結(jié)構(gòu)原理

    問(wèn)題一種簡(jiǎn)便、快捷的解決方案。使用異步FIFO可以在兩個(gè)不同時(shí)鐘系統(tǒng)之間快速而方便地傳輸實(shí)時(shí)數(shù)據(jù)。在網(wǎng)絡(luò)接口、圖像處理等方面,異步FIFO
    發(fā)表于 02-07 14:22 ?0次下載
    基于<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>結(jié)構(gòu)原理

    異步FIFO之Verilog代碼實(shí)現(xiàn)案例

    同步FIFO的意思是說(shuō)FIFO的讀寫(xiě)時(shí)鐘是同一個(gè)時(shí)鐘,不同于異步FIFO,異步FIFO的讀寫(xiě)時(shí)鐘
    發(fā)表于 11-01 09:58 ?1446次閱讀

    異步fifo詳解

    異步fifo詳解 一. 什么是異步FIFO FIFO即First in First out的英文
    的頭像 發(fā)表于 12-12 14:17 ?3843次閱讀

    FIFO設(shè)計(jì)—異步FIFO

    異步FIFO主要由五部分組成:寫(xiě)控制端、讀控制端、FIFO Memory和兩個(gè)時(shí)鐘同步端
    發(fā)表于 05-26 16:17 ?1452次閱讀
    <b class='flag-5'>FIFO</b>設(shè)計(jì)—<b class='flag-5'>異步</b><b class='flag-5'>FIFO</b>

    同步FIFO異步FIFO的區(qū)別 同步FIFO異步FIFO各在什么情況下應(yīng)用

    同步FIFO異步FIFO的區(qū)別 同步FIFO異步FIFO各在什么情況下應(yīng)用? 1. 同步
    的頭像 發(fā)表于 10-18 15:23 ?1465次閱讀