【轉(zhuǎn)載】異步FiFO為什么要用格雷碼

https://blog.csdn.net/qijitao/article/details/50969328
<article class="baidu_pl" style="box-sizing: inherit; outline: 0px; margin: 0px; padding: 16px 0px 0px; display: block; position: relative;">

首先要了解的是異步FIFO使用格雷碼的唯一目的就是“即使在亞穩(wěn)態(tài)進(jìn)行讀寫指針抽樣也能進(jìn)行正確的空滿狀態(tài)判斷”。

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

接下來說說為什么2進(jìn)制指針不適合做空滿判斷娄昆。事實上2進(jìn)制讀指針在增減時,經(jīng)常發(fā)生多位突變缝彬,比如6位地址111111會在下一時刻變成000000萌焰,在實際電路中,這個變化過程要持續(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ā)生改變孵稽。為什么這么說呢?因為當(dāng)只有一個比特發(fā)生改變時十偶,即使在中間狀態(tài)抽樣菩鲜,其結(jié)果也不外乎兩種:遞增前原指針和遞增后新指針。顯然遞增后新指針是最新情況的反映惦积,如果抽樣到這個指針接校,那么和我們的設(shè)計預(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ā)生變化。這么做可以帶來降低功耗的好處稀拐,因為寄存器的翻轉(zhuǎn)是消耗動態(tài)功耗的火邓,而這種編碼將翻轉(zhuǎn)的次數(shù)降到最低,所有有利于降低功耗。

回答二:

你說的降低功耗的前提是铲咨,一個狀態(tài)到下一個狀態(tài)的變化也要遵循格雷碼連續(xù)的變化躲胳,否則,就不成立了纤勒。比如:如你所說坯苹,00<->01<->11<->10這樣的變化,確實是有利于降低功耗摇天;但是粹湃,狀態(tài)的變化不一定就是這樣變化,它有可能是00<->11泉坐,01<->10這樣的變化为鳄,那么你說的有利于降低功耗就不成立。

回答三:

低功耗設(shè)計的內(nèi)容還是很博大精深的腕让。如何合理的選擇信號形式孤钦,以使得系統(tǒng)在發(fā)生狀態(tài)變化時只有少數(shù)信號發(fā)生翻轉(zhuǎn)?所依賴的公式為

P=aCV^2*f

其中a為信號翻轉(zhuǎn)率记某,C為系統(tǒng)等效電容,V為電路驅(qū)動電壓构捡,f為時鐘頻率液南。使用格雷碼降低功耗就是想使a小下來。當(dāng)然如果電路中做不到嚴(yán)格的格雷碼也沒關(guān)系勾徽,只要是有利于減小a的滑凉,就有利于功耗的降低。

期待牛人能對低功耗設(shè)計的內(nèi)容普及一下喘帚。在移動的智能終端上低功耗的問題已經(jīng)越來越受重視了畅姊。

回答四:

主要是為了多比特同步,這個例子中功耗是次要的因素

回答五:

格雷碼有兩個作用吹由,一是消除多個比特同時變化帶來的潛在競爭與冒險若未,二是降低功耗(翻轉(zhuǎn)次數(shù)減少)。在狀態(tài)機(jī)中通常為了簡單起見表示現(xiàn)態(tài)與次態(tài)的狀態(tài)參數(shù)并不使用格雷碼而是二進(jìn)制碼倾鲫,因為一個狀態(tài)的變化可能是發(fā)散的而非單向的粗合,就是說不同的條件對應(yīng)不同的次態(tài),這個時候用格雷碼對狀態(tài)進(jìn)行編碼達(dá)不到一次只變化一位的目的乌昔,除非在特殊情況下隙疚,即狀態(tài)機(jī)的變化是單向的,總是由S0到S1磕道,再到S2供屉,等等,這個時候用格雷碼就能達(dá)到原來的目的。

回答六:

十進(jìn)制計數(shù)容易產(chǎn)生毛刺伶丐,格雷碼則不會產(chǎn)生毛刺悼做。

回答七:

格雷碼每次只有一位跳變,兩級寄存才安全撵割。

回答八:

在異步的FIFO中贿堰,采用格雷碼進(jìn)行計數(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è)計中热押。

回答十:

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市斤寇,隨后出現(xiàn)的幾起案子桶癣,更是在濱河造成了極大的恐慌,老刑警劉巖娘锁,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牙寞,死亡現(xiàn)場離奇詭異,居然都是意外死亡莫秆,警方通過查閱死者的電腦和手機(jī)碎税,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馏锡,“玉大人雷蹂,你說我怎么就攤上這事”溃” “怎么了匪煌?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵责蝠,是天一觀的道長。 經(jīng)常有香客問我萎庭,道長霜医,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任驳规,我火速辦了婚禮肴敛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吗购。我一直安慰自己医男,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布捻勉。 她就那樣靜靜地躺著镀梭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踱启。 梳的紋絲不亂的頭發(fā)上报账,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機(jī)與錄音埠偿,去河邊找鬼透罢。 笑死,一個胖子當(dāng)著我的面吹牛冠蒋,可吹牛的內(nèi)容都是我干的羽圃。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼浊服,長吁一口氣:“原來是場噩夢啊……” “哼统屈!你這毒婦竟也來了胚吁?” 一聲冷哼從身側(cè)響起牙躺,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腕扶,沒想到半個月后孽拷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡半抱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年脓恕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窿侈。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡炼幔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出史简,到底是詐尸還是另有隱情乃秀,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站跺讯,受9級特大地震影響枢贿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刀脏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一局荚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧愈污,春花似錦耀态、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至擎析,卻和暖如春簿盅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揍魂。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工桨醋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人现斋。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓喜最,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庄蹋。 傳聞我的和親對象是個殘疾皇子瞬内,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361