小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

異步FIFO中的幾個(gè)難點(diǎn)問題思考與解釋

 myallmy 2021-01-07

今天經(jīng)過與HR的交談意識(shí)到自己對(duì)于異步FIFO的理解還不深,因此回來之后又其結(jié)構(gòu)進(jìn)行了一些理解,于此分享。

異步FIFO的設(shè)計(jì):http://blog.csdn.net/moon9999/article/details/77822606

疑問1:進(jìn)行數(shù)據(jù)空滿的對(duì)比時(shí),讀寫時(shí)鐘域都有讀寫指針,此時(shí)應(yīng)該怎么對(duì)比?為什么?

另外一篇博客中有這樣的話:

同步rd_cntr至clk_write時(shí)鐘域,再與wr_cntr進(jìn)行對(duì)比來決定FIFO是否滿;(判斷滿是wr_cntr - rd_cntr)
同步wr_cntr至clk_read時(shí)鐘域,再與rd_cntr進(jìn)行對(duì)比來決定FIFO是否空;(判斷空是rd_cntr == wr_cntr)

這是結(jié)論,那現(xiàn)在我們必須要仔細(xì)的思考這句話為什么是這么做的。

首先畫個(gè)示意圖。


那現(xiàn)在我們來設(shè)想各種情況下會(huì)發(fā)生什么,在此我們暫時(shí)不考慮亞穩(wěn)態(tài)的事情,認(rèn)為信號(hào)通過同步模塊都被采到了但是會(huì)有信號(hào)丟失。

第一種情況我們假定寫時(shí)鐘特別快,讀時(shí)鐘都采不齊寫指針。

那么此時(shí)空邏輯會(huì)不會(huì)出錯(cuò)呢?假設(shè)寫指針已經(jīng)跑了1 2 3 4 5 6 7 8 9,而讀時(shí)鐘采到了1 2 6 8;那么如果此時(shí)讀指針就在8,兩邊一對(duì)比發(fā)現(xiàn)一樣(當(dāng)然了這只是假設(shè)的一種情況)則會(huì)報(bào)“空”!那么實(shí)際空沒空呢,沒有因?yàn)槲覍懙?了寫進(jìn)去了一個(gè)數(shù),不過沒關(guān)系之后必然會(huì)采到9(或者采到10一類的),狀態(tài)會(huì)很快恢復(fù)正常,或者說沒有空而報(bào)了空我們還可以接受,因?yàn)檫@樣對(duì)于一個(gè)將要空的FIFO會(huì)停止讀數(shù)旋即恢復(fù)正常,不會(huì)使其數(shù)據(jù)發(fā)生紊亂。那會(huì)不會(huì)有空了而報(bào)不空使得讀出數(shù)據(jù)出現(xiàn)問題的情況呢?不會(huì)的,你想想看寫指針跑的比你采樣的快,是趨向與“不空”(越寫數(shù)據(jù)越多嘛)的,因此不會(huì)出現(xiàn)這樣的錯(cuò)誤。

讀指針被同步到寫時(shí)鐘域本身不會(huì)出現(xiàn)漏采的情況,因此“滿”邏輯的判斷不會(huì)出現(xiàn)問題。

第二種情況我們假定讀時(shí)鐘域特別快,寫時(shí)鐘都采不齊讀指針。

此時(shí)的滿邏輯會(huì)出錯(cuò)么?我們來看下。我們同樣假設(shè)讀指針從1跑到了9,而只被采樣到了7。如果此時(shí)寫指針也寫到了7,那么二者一比較發(fā)現(xiàn)寫“滿”了,實(shí)際呢沒有滿,不過此時(shí)也會(huì)停止外部寫入(傳出了滿的信號(hào)),這是不會(huì)對(duì)FIFO中的數(shù)據(jù)產(chǎn)生影響的,并且很快會(huì)恢復(fù)到“不滿”。如果此時(shí)寫指針到了5,那么二者對(duì)比會(huì)得出“不滿”的邏輯傳出,真實(shí)情況呢同樣是不滿,因?yàn)樽x到7就已經(jīng)不滿了真實(shí)情況讀到了9自然更加“不滿”。這樣就解釋清楚了。

寫指針被同步到讀時(shí)鐘域本身不會(huì)出現(xiàn)漏采的情況,因此“空”邏輯的判斷不會(huì)出現(xiàn)問題。

受到HR的點(diǎn)播或許我們可以選擇一種記法:

“滿”邏輯是要給誰的——給寫信號(hào)告訴他你別寫了——那么寫指針能多跑出去么?跑多了不就把數(shù)據(jù)覆蓋了!——所以必須在寫時(shí)鐘域進(jìn)行對(duì)比;

“空”邏輯是要給誰的——給讀信號(hào)告訴他你別讀了——那么讀指針能多跑出去么?跑多了不就讀出來錯(cuò)誤的數(shù)了!——所以在讀時(shí)鐘域進(jìn)行對(duì)比;

我現(xiàn)在先理解到這一步吧。

疑問2:為什么要用格雷碼進(jìn)行同步傳輸?

我覺得使用格雷碼的優(yōu)勢(shì)體現(xiàn)在讀寫時(shí)鐘差異不是特別大的時(shí)候,不能一個(gè)是1000M一個(gè)是10M那誰也救不了了,無限加長(zhǎng)FIFO深度吧。那么我們假定讀寫時(shí)鐘頻率差異沒有過大,例如一個(gè)133M一個(gè)100M這樣的。

我們要知道這個(gè)異步時(shí)鐘采樣,再不經(jīng)過特殊處理的情況下采錯(cuò)了是在所難免的。單個(gè)信號(hào)可能采錯(cuò)或者沒采到,那多個(gè)信號(hào)的讀寫指針就更加有可能出問題了。我們來看下如果此時(shí)的指針是1011(二進(jìn)制=2),那么在向1100(2)跳變時(shí)候,由于信號(hào)走的距離不一樣啦觸發(fā)事件或者邏輯門延時(shí)不同啦等等原因,在另外一段時(shí)鐘域就可能采出多種情況例如1011(2)、1110(2)、1101(2)等,總之每個(gè)信號(hào)都可能是正確值或者未跳變時(shí)候的值。那么在得到“空”“滿”邏輯時(shí)候很大可能概率會(huì)出錯(cuò),這個(gè)我們不能忍。過程如下圖所示。

所以說我們就要選擇格雷碼了,來看下格雷碼發(fā)生了什么事。1011(2)=1110(g),1100(2)=1010(g),因此格雷碼跳變?yōu)?110(g)->1010(g)。同樣考慮采樣出問題了,由于我們提前說好了讀寫時(shí)鐘頻率差距不是太大,因此采樣可能得到兩種情況:1110(g)和1010(g),到另外的時(shí)鐘域后會(huì)轉(zhuǎn)換為二進(jìn)制的1011(2)和1100(2)??吹竭@里是不是想到了什么!你看如果得到的是1100那沒問題呀,這就是真是的值。如果是得到1011呢?我實(shí)際跑到了1100你采到了1011是不是類似于上一個(gè)問題的“指針實(shí)際已經(jīng)跑到了9而你只采到了7,會(huì)不會(huì)出問題”,答案是不會(huì)呀!原因就在于我們進(jìn)行對(duì)比時(shí)時(shí)鐘域的選擇已經(jīng)解決了這個(gè)問題。因此可知使用格雷碼即時(shí)出現(xiàn)了采樣錯(cuò)誤的情況,也不會(huì)時(shí)“空滿”判定出現(xiàn)問題。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多