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

分享

異步FIFO為什么要使用格雷碼(轉(zhuǎn))

 小櫻業(yè)余書吧 2012-10-16
分類:IC技術(shù)文章 首先要了解的是異步FIFO使用格雷碼的唯一目的就是“即使在亞穩(wěn)態(tài)進(jìn)行讀寫指針抽樣也能進(jìn)行正確的空滿狀態(tài)判斷”。


那么典型的判斷方法是怎樣進(jìn)行的呢?以滿狀態(tài)判斷為例,先要對讀指針(屬于讀時鐘域)在寫時鐘域進(jìn)行抽樣,然后才能與寫指針進(jìn)行比較,如果寫指針趕上了讀指針,說明已經(jīng)寫滿,寫操作必須暫停。


接下來說說為什么2進(jìn)制指針不適合做空滿判斷。事實(shí)上2進(jìn)制讀指針在增減時,經(jīng)常發(fā)生多位突變,比如6位地址111111會在下一時刻變成000000,在實(shí)際電路中,這個變化過程要持續(xù)很長一段時間,會由111111經(jīng)歷6個狀態(tài)轉(zhuǎn)移到達(dá)000000。比如 111111 -> 101111 -> 100111 -> 100110 -> 100100 -> 000100 -> 000000。由于寫時鐘與讀時鐘不同步,異步的寫時鐘很可能會在狀態(tài)不穩(wěn)定的中間某個狀態(tài)抽樣,這樣就會得到錯誤的讀指針,進(jìn)而做出錯誤的狀態(tài)判斷,導(dǎo)致系統(tǒng)異常。而且由于多位同時突變,憑借概率論常識可知發(fā)生錯誤的可能性很大。


那么怎樣才能避免這個問題的發(fā)生呢?顯然,在中間狀態(tài)抽樣,這個是不可避免的,這是異步系統(tǒng)天生的缺陷。我們的目標(biāo)是:即使在中間狀態(tài)抽樣,也要不影響空滿狀態(tài)的判斷。符合這個要求的編碼方法是每次只能有1個比特發(fā)生改變。為什么這么說呢?因?yàn)楫?dāng)只有一個比特發(fā)生改變時,即使在中間狀態(tài)抽樣,其結(jié)果也不外乎兩種:遞增前原指針和遞增后新指針。顯然遞增后新指針是最新情況的反映,如果抽樣到這個指針,那么和我們的設(shè)計(jì)預(yù)期是一致的,如果抽樣到遞增前的原指針,會有什么結(jié)果呢?假設(shè)現(xiàn)在抽樣讀指針,那么最壞的情況就是把“不滿”判斷成了“滿”,使得本來被允許的寫操作被禁止了,但是這并不會對邏輯產(chǎn)生影響,只是帶來了寫操作的延遲。同樣的,如果現(xiàn)在抽樣寫指針,那么最壞的情況就是把“不空”判斷成了“空”,使得本來被允許的讀操作被禁止了,但是這也不會對邏輯產(chǎn)生影響,只是帶來了讀操作的延遲。

顯然每次只變化1比特的編碼方案可以有效解決中間狀態(tài)下空滿狀態(tài)的判斷問題,格雷碼就是這樣的一種編碼。   回答一:   格雷碼是的確非常有用。它的特點(diǎn)就是相鄰碼只有一位發(fā)生翻轉(zhuǎn),比如 00->01->11->10->00...
--------------------------------------
在編寫狀態(tài)機(jī)時,我也喜歡用這種相鄰狀態(tài)只發(fā)生一位翻轉(zhuǎn)的編碼。這樣從一個狀態(tài)切換到下一個狀態(tài),就只有一位寄存器發(fā)生變化。這么做可以帶來降低功耗的好處,因?yàn)榧拇嫫鞯姆D(zhuǎn)是消耗動態(tài)功耗的,而這種編碼將翻轉(zhuǎn)的次數(shù)降到最低,所有有利于降低功耗。   回答二:   你說的降低功耗的前提是,一個狀態(tài)到下一個狀態(tài)的變化也要遵循格雷碼連續(xù)的變化,否則,就不成立了。比如:如你所說,00<->01<->11<->10這樣的變化,確實(shí)是有利于降低功耗;但是,狀態(tài)的變化不一定就是這樣變化,它有可能是00<->11,01<->10這樣的變化,那么你說的有利于降低功耗就不成立。   回答三:   低功耗設(shè)計(jì)的內(nèi)容還是很博大精深的。如何合理的選擇信號形式,以使得系統(tǒng)在發(fā)生狀態(tài)變化時只有少數(shù)信號發(fā)生翻轉(zhuǎn)?所依賴的公式為

P=a*C*V^2*f


其中a為信號翻轉(zhuǎn)率,C為系統(tǒng)等效電容,V為電路驅(qū)動電壓,f為時鐘頻率。使用格雷碼降低功耗就是想使a小下來。當(dāng)然如果電路中做不到嚴(yán)格的格雷碼也沒關(guān)系,只要是有利于減小a的,就有利于功耗的降低。
---------------------------------------------------
期待牛人能對低功耗設(shè)計(jì)的內(nèi)容普及一下。在移動的智能終端上低功耗的問題已經(jīng)越來越受重視了。
回答四:   主要是為了多比特同步,這個例子中功耗是次要的因素   回答五:   格雷碼有兩個作用,一是消除多個比特同時變化帶來的潛在競爭與冒險(xiǎn),二是降低功耗(翻轉(zhuǎn)次數(shù)減少)。在狀態(tài)機(jī)中通常為了簡單起見表示現(xiàn)態(tài)與次態(tài)的狀態(tài)參數(shù)并不使用格雷碼而是二進(jìn)制碼,因?yàn)橐粋€狀態(tài)的變化可能是發(fā)散的而非單向的,就是說不同的條件對應(yīng)不同的次態(tài),這個時候用格雷碼對狀態(tài)進(jìn)行編碼達(dá)不到一次只變化一位的目的,除非在特殊情況下,即狀態(tài)機(jī)的變化是單向的,總是由S0到S1,再到S2,等等,這個時候用格雷碼就能達(dá)到原來的目的。   回答六:   十進(jìn)制計(jì)數(shù)容易產(chǎn)生毛刺,格雷碼則不會產(chǎn)生毛刺。   回答七:   格雷碼每次只有一位跳變,兩級寄存才安全。   回答八:   在異步的FIFO中,采用格雷碼進(jìn)行計(jì)數(shù),相鄰的數(shù)據(jù)僅僅只有1bit變化,這樣在兩個時鐘域同步的時候僅僅可能只有1bit產(chǎn)生亞穩(wěn)態(tài),通過同步以后,亞穩(wěn)態(tài)可以消除,最壞的情況是這1bit采錯,但是即使是采錯地址也只是相差1個,這對判斷空滿標(biāo)志不會產(chǎn)生影響。
    如果是采用10十進(jìn)制進(jìn)行編碼,則相鄰的數(shù)據(jù)可能有很多位同時進(jìn)行變化,那么如果多位同時產(chǎn)生亞穩(wěn)態(tài)而且同時采錯數(shù)據(jù),會對寄存器的空滿標(biāo)志做出嚴(yán)重錯誤的判斷,會丟失數(shù)據(jù)或者讀出無用的數(shù)據(jù),使系統(tǒng)出錯。   回答九:   樓上說的都很精彩!順便補(bǔ)充一點(diǎn):

由于跳變減少,可減少功耗,多用于低功耗設(shè)計(jì)中。   回答十:   我在想這個問題,
如果單指gray的話確實(shí)如此
但是在實(shí)際應(yīng)用中,往往是將二進(jìn)制的轉(zhuǎn)換成gray
就是說不管如何二進(jìn)制的數(shù)依然會存在
同時其轉(zhuǎn)換的外加邏輯必然會帶來損耗,
在多比特的情況,功耗是否會跟多呢
gray一般是用在不同時鐘域的連續(xù)數(shù)值的傳送,即數(shù)據(jù)必須是遞增或遞減的
這樣,其主要是在asynchronou fifo中使用
感覺功耗并不會下降

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多