這段時間去面試了幾家公司,,發(fā)現(xiàn)比較大的公司相對于重視基礎(chǔ)問題,。這里邊又有幾個問題特別的突出,。他們是:同步時鐘設(shè)計、亞穩(wěn)態(tài),、異步FIFO??梢哉f,,這些個問題要是弄清楚了,就至少滿足了技術(shù)方面1/3的要求,,另外的2/3是什么,我就說不清楚了,。又有人發(fā)了競爭冒險毛刺的問題,,不過,對于采用同步設(shè)計方法的系統(tǒng),,這些問題一般不會遇到,。下面就談?wù)勎覍@些問題的看法,要是你覺得看這些東西覺得類似一堆狗屎,,那么恭喜你,,你面試成功的機(jī)會增加了1/3;要是你你覺得阿,,什么樣的牛人拉了一堆牛屎,,那么不好意思,還是再去補(bǔ)補(bǔ)課把,。這里推薦一本《數(shù)字設(shè)計——原理和實踐》(John F.Wakerly)的書,,仔細(xì)看一遍吧。
同步時鐘設(shè)計 簡單說就是一個系統(tǒng)中(或系統(tǒng)中的一部分)都采用同一個時鐘觸發(fā),。系統(tǒng)中的(D)觸發(fā)器全部都連接到一個時鐘,,而且只控制觸發(fā)器的同步端(輸入,同步置位,,同步復(fù)位),。這樣的系統(tǒng)是相對于異步系統(tǒng)而言的,異步系統(tǒng)并不是不同的觸發(fā)器時鐘端連接到不同的時鐘信號的系統(tǒng)(一般的這樣叫做跨時鐘系統(tǒng),,是相對幾個較小的同步系統(tǒng)的組合),,而是更本沒有了時鐘的概念,依靠和觸發(fā)器構(gòu)造一樣的反饋電路組成,。相對于異步系統(tǒng),,同步系統(tǒng)更好設(shè)計(異步設(shè)計則象一個魔術(shù),類似于匯編和高級語言的關(guān)系),更容易進(jìn)行時序分析(為什么要用D觸發(fā)器而不用D鎖存器)——在這里組合邏輯的競爭冒險毛刺問題都不存在了,。應(yīng)該說,,同步系統(tǒng)最大的問題在于時鐘的偏斜(skew)。同步時鐘系統(tǒng)也存在一些涉及的技巧,,這些技巧一般圍繞著降低關(guān)鍵路徑的延時和時間和空間的平衡,。這些都是平衡的藝術(shù)(了解了基本的部件之后,,剩下的工作就是一個字"平衡"),這里邊的方法就太具體,而且本人也知道得不多,,不敢亂說了,。不過,只要你用過一種方法,,就可以體會到其中的精神了,。
亞穩(wěn)態(tài) 這是跨時鐘設(shè)計中最基礎(chǔ)的一個問題(宏觀的問題是FIFO),按照我的觀察,,上論壇問問題多的一般不明白這個,,請一定要注意了。 什么是亞穩(wěn)態(tài),?數(shù)字電路中的簡單雙穩(wěn)態(tài)電路就是兩個反相器首尾相連組成(加一些控制邏輯變成了鎖存器,,觸發(fā)器),然而并不像名字顯示的,,這種電路其實還有第三種半穩(wěn)定態(tài)——就是當(dāng)兩個反相器都處于中間值得情況——這稱之為亞穩(wěn)態(tài),。我們知道反相器在非邏輯值范圍的反饋系數(shù)是相當(dāng)大的,一旦因為干擾或者噪音離開了這個中心點,,就會很快地進(jìn)入邏輯值范圍(穩(wěn)態(tài)),。數(shù)學(xué)分析,從亞穩(wěn)態(tài)進(jìn)入穩(wěn)態(tài),,正如放射元素的衰變,,是一個指數(shù)的規(guī)律(為什么是指數(shù)的規(guī)律?你要是想不明白,,說明你還沒有搞明白亞穩(wěn)態(tài)),。那么,亞穩(wěn)態(tài)的危害到底是什么呢,?消耗功率,;),其實不是(雖然亞穩(wěn)態(tài)消耗很大的功率),,亞穩(wěn)態(tài)的問題在于其電平并不處于有效邏輯電平范圍內(nèi),,而且在變化。這就導(dǎo)致與其相連其他數(shù)字部件將其作出不同的判斷(注意,,不同),,有的作為'1',有的作為'0',有的也進(jìn)入了亞穩(wěn)態(tài),,數(shù)字部件就會邏輯混亂,。那么究竟如何避免(或者減小)亞穩(wěn)態(tài)的危險呢?注意到亞穩(wěn)態(tài)的觸發(fā)器繼續(xù)停留在亞穩(wěn)態(tài)的幾率按照指數(shù)減少,,那么辦法就是等——等足夠長的時間,,直到這個幾率變得小的實際上不會發(fā)生,。到底需要有多長呢?有的廠商有一個數(shù)據(jù),,有的沒有,,按照普通的做法,至少等一個時鐘周期——這也就是所謂的異步數(shù)據(jù)要用兩個觸發(fā)器打一下,。這一段有點糊涂,,不容易說明白,你看了要是覺得云里霧里,,不知所云,,那們你只有找一本書學(xué)習(xí)了;要是覺得作者表達(dá)不清,,那么恭喜你,面試通過了的幾率增加了,。關(guān)于這個問題有很多糊涂的認(rèn)識,,要是你的主考官和你爭論,你就順著他的意思,,畢竟沒有人想找一個管教不了的手下,。
異步FIFO 異步FIFO是跨時鐘域設(shè)計方法的集中體現(xiàn),體現(xiàn)了很多的方法,。不過,,其中最重要的有兩點,一個就是亞穩(wěn)態(tài),,一個就是和亞穩(wěn)態(tài)類似但不相同的——多個控制/狀態(tài)信號的跨時鐘傳遞,。具體地說,就是當(dāng)你把一組信號傳遞到另外一個時鐘域的話,,這一組信號可能因為延遲不同,,這樣到達(dá)新時鐘域之后,得到的數(shù)據(jù)相差一個老時鐘域的時鐘周期,。興好,,對于FIFO,需要傳遞的是一個計數(shù)器,,這個計數(shù)器可以編碼成格雷碼(gray code),,這樣的編碼每次只變化一個位,正好解決了上面的問題(要是沒有畫過圖,,最好畫一個圖看一下),。真不清楚這是怎么發(fā)明的!注意,,這里其實還對格雷碼的相對延遲和相關(guān)的時鐘周期有一個要求,。這就是異步FIFO中最關(guān)鍵的一點,,至于指針如何控制,稍微考慮一下都很容易清楚,。需要注意的事,,這些東西不是用嘴能說清楚的,最好畫一個示意圖,,不要因為沒有說清楚,,讓主考官覺得你沒有清楚。
當(dāng)然,,除此之外還有很多很多的東西,。比如組合邏輯的設(shè)計技巧,俺就沒有研究,。比如高速布線信號完整性問題,,俺也不敢多說。至于整個系統(tǒng)的設(shè)計思想,,更不敢妄語,。不過如果只要你有一個問題了解到了相當(dāng)?shù)纳疃龋嘈拍愫苋菀赘闱宄渌麊栴},。