硬件設計中的30個(gè)錯誤想法和原因分析 一:成本節約 現象一:這些拉高/拉低的電阻用多大的阻值關(guān)系不大,就選個(gè)整數5K吧 點(diǎn)評:市場(chǎng)上不存在5K的阻值,最接近的是 4.99K(精度1%),其次是5.1K(精度5%),其成本分別比精度為20%的4.7K高4倍和2倍。20%精度的電阻阻值只有1、1.5、2.2、3.3、4.7、6.8幾個(gè)類(lèi)別(含10的整數倍);類(lèi)似地,20%精度的電容也只有以上幾種值,如果選了其它的值就必須使用更高的精度,成本就翻了幾 倍,卻不能帶來(lái)任何好處。 現象二:面板上的指示燈選什么顏色呢?我覺(jué)得藍色比較特別,就選它吧 點(diǎn)評:其它紅綠黃橙等顏色的不管大。5MM以下)封裝如何,都已成熟了幾十年,價(jià)格一般都在5毛錢(qián)以下,而藍色卻是近三四年才發(fā)明的東西,技術(shù)成熟度和供貨穩定度都較差,價(jià)格卻要貴四五倍。目前藍色指示燈只用在不能用其它顏色替代的場(chǎng)合,如顯示視頻信號等。 現象三:這點(diǎn)邏輯用74XX的門(mén)電路搭也行,但太土,還是用CPLD吧,顯得高檔多了 點(diǎn)評:74XX的門(mén)電路只幾毛錢(qián),而CPLD至少也得幾十塊,(GAL/PAL雖然只幾塊錢(qián),但公司不推薦使用)。成本提高了N倍不說(shuō),還給生產(chǎn)、文檔等工作增添數倍的工作。 現象四:我們的系統要求這么高,包括MEM、CPU、FPGA等所有的芯片都要選最快的 點(diǎn)評:在一個(gè)高速系統中并不是每一部分都工作在高速狀態(tài),而器件速度每提高一個(gè)等級,價(jià)格差不多要翻倍,另外還給信號完整性問(wèn)題帶來(lái)極大的負面影響。 現象五:這板子的PCB設計要求不高,就用細一點(diǎn)的線(xiàn),自動(dòng)布吧 點(diǎn)評:自動(dòng)布線(xiàn)必然要占用更大的PCB面積,同時(shí)產(chǎn)生比手動(dòng)布線(xiàn)多好多倍的過(guò)孔,在批量很大的產(chǎn)品中,PCB廠(chǎng)家降價(jià)所考慮的因素除了商務(wù)因素外,就是線(xiàn)寬和過(guò)孔數量,它們分別影響到PCB的成品率和鉆頭的消耗數量,節約了供應商的成本,也就給降價(jià)找到了理由。 現象六:程序只要穩定就可以了,代碼長(cháng)一點(diǎn),效率低一點(diǎn)不是關(guān)鍵 點(diǎn)評:CPU的速度和存儲器的空間都是用錢(qián)買(mǎi)來(lái)的,如果寫(xiě)代碼時(shí)多花幾天時(shí)間提高一下程序效率,那么從降低CPU主頻和減少存儲器容量所節約的成本絕對是劃算的。CPLD/FPGA設計也類(lèi)似。 二:低功耗設計 現象一:我們這系統是220V供電,就不用在乎功耗問(wèn)題了 點(diǎn)評:低功耗設計并不僅僅是為了省電,更多的好處在于降低了電源模塊及散熱系統的成本、由于電流的減小也減少了電磁輻射和熱噪聲的干擾。隨著(zhù)設備溫度的降低,器件壽命則相應延長(cháng)(半導體器件的工作溫度每提高10度,壽命則縮短一半) 現象二:這些總線(xiàn)信號都用電阻拉一下,感覺(jué)放心些 點(diǎn) 評:信號需要上下拉的原因很多,但也不是個(gè)個(gè)都要拉。上下拉電阻拉一個(gè)單純的輸入信號,電流也就幾十微安以下,但拉一個(gè)被驅動(dòng)了的信號,其電流將達毫安 級,現在的系統常常是地址數據各32位,可能還有244/245隔離后的總線(xiàn)及其它信號,都上拉的話(huà),幾瓦的功耗就耗在這些電阻上了(不要用8毛錢(qián)一度電 的觀(guān)念來(lái)對待這幾瓦的功耗)。 現象三:CPU和FPGA的這些不用的I/O口怎么處理呢?先讓它空著(zhù)吧,以后再說(shuō) 點(diǎn)評:不用的I/O口如果懸空的話(huà),受外界的一點(diǎn)點(diǎn)干擾就可能成為反復振蕩的輸入信號了,而MOS器件的功耗基本取決于門(mén)電路的翻轉次數。如果把它上拉的話(huà),每個(gè)引腳也會(huì )有微安級的電流,所以最好的辦法是設成輸出(當然外面不能接其它有驅動(dòng)的信號) 現象四:這款FPGA還剩這么多門(mén)用不完,可盡情發(fā)揮吧 點(diǎn)評:FGPA的功耗與被使用的觸發(fā)器數量及其翻轉次數成正比,所以同一型號的FPGA在不同電路不同時(shí)刻的功耗可能相差100倍。盡量減少高速翻轉的觸發(fā)器數量是降低FPGA功耗的根本方法。 現象五:這些小芯片的功耗都很低,不用考慮 點(diǎn) 評:對于內部不太復雜的芯片功耗是很難確定的,它主要由引腳上的電流確定,一個(gè)ABT16244,沒(méi)有負載的話(huà)耗電大概不到1毫安,但它的指標是每個(gè)腳可 驅動(dòng)60毫安的負載(如匹配幾十歐姆的電阻),即滿(mǎn)負荷的功耗最大可達60*16=960mA,當然只是電源電流這么大,熱量都落到負載身上了。 現象六:存儲器有這么多控制信號,我這塊板子只需要用OE和WE信號就可以了,片選就接地吧,這樣讀操作時(shí)數據出來(lái)得快多了。 點(diǎn)評:大部分存儲器的功耗在片選有效時(shí)(不論OE和WE如何)將比片選無(wú)效時(shí)大100倍以上,所以應盡可能使用CS來(lái)控制芯片,并且在滿(mǎn)足其它要求的情況下盡可能縮短片選脈沖的寬度。 現象七:這些信號怎么都有過(guò)沖?只要匹配得好,就可消除了 點(diǎn) 評:除了少數特定信號外(如100BASE-T、CML),都是有過(guò)沖的,只要不是很大,并不一定都需要匹配,即使匹配也并非要匹配得最好。象TTL的輸 出阻抗不到50歐姆,有的甚至20歐姆,如果也用這么大的匹配電阻的話(huà),那電流就非常大了,功耗是無(wú)法接受的,另外信號幅度也將小得不能用,再說(shuō)一般信號 在輸出高電平和輸出低電平時(shí)的輸出阻抗并不相同,也沒(méi)辦法做到完全匹配。所以對TTL、LVDS、422等信號的匹配只要做到過(guò)沖可以接受即可。 現象八:降低功耗都是硬件人員的事,與軟件沒(méi)關(guān)系 點(diǎn) 評:硬件只是搭個(gè)舞臺,唱戲的卻是軟件,總線(xiàn)上幾乎每一個(gè)芯片的訪(fǎng)問(wèn)、每一個(gè)信號的翻轉差不多都由軟件控制的,如果軟件能減少外存的訪(fǎng)問(wèn)次數(多使用寄存 器變量、多使用內部CACHE等)、及時(shí)響應中斷(中斷往往是低電平有效并帶有上拉電阻)及其它爭對具體單板的特定措施都將對降低功耗作出很大的獻。 三:系統效率 現象一:這主頻100M的CPU只能處理70%,換200M主頻的就沒(méi)事了 點(diǎn)評:系統的處理能力牽涉到多種多樣的因素,在通信業(yè)務(wù)中其瓶頸一般都在存儲器上,CPU再快,外部訪(fǎng)問(wèn)快不起來(lái)也是徒勞。 現象二:CPU用大一點(diǎn)的CACHE,就應該快了 點(diǎn) 評:CACHE的增大,并不一定就導致系統性能的提高,在某些情況下關(guān)閉CACHE反而比使用CACHE還快。原因是搬到CACHE中的數據必須得到多次 重復使用才會(huì )提高系統效率。所以在通信系統中一般只打開(kāi)指令CACHE,數據CACHE即使打開(kāi)也只局限在部分存儲空間,如堆棧部分。同時(shí)也要求程序設計 要兼顧CACHE的容量及塊大小,這涉及到關(guān)鍵代碼循環(huán)體的長(cháng)度及跳轉范圍,如果一個(gè)循環(huán)剛好比CACHE大那么一點(diǎn)點(diǎn),又在反復循環(huán)的話(huà),那就慘了。 現象三:這么多任務(wù)到底是用中斷還是用查詢(xún)呢?還是中斷快些吧 點(diǎn) 評:中斷的實(shí)時(shí)性強,但不一定快。如果中斷任務(wù)特別多的話(huà),這個(gè)沒(méi)退出來(lái),后面又接踵而至,一會(huì )兒系統就將崩潰了。如果任務(wù)數量多但很頻繁的話(huà),CPU的 很大精力都用在進(jìn)出中斷的開(kāi)銷(xiāo)上,系統效率極為低下,如果改用查詢(xún)方式反而可極大提高效率,但查詢(xún)有時(shí)不能滿(mǎn)足實(shí)時(shí)性要求,所以最好的辦法是在中斷中查 詢(xún),即進(jìn)一次中斷就把積累的所有任務(wù)都處理完再退出。 現象四:存儲器接口的時(shí)序都是廠(chǎng)家默認的配置,不用修改的 點(diǎn)評:BSP對存儲 器接口設置的默認值都是按最保守的參數設置的,在實(shí)際應用中應結合總線(xiàn)工作頻率和等待周期等參數進(jìn)行合理調配。有時(shí)把頻率降低反而可提高效率,如RAM的 存取周期是70ns,總線(xiàn)頻率為40M時(shí),設3個(gè)周期的存取時(shí)間,即75ns即可;若總線(xiàn)頻率為50M時(shí),必須設為4個(gè)周期,實(shí)際存取時(shí)間卻放慢到了 80ns。 現象五:一個(gè)CPU處理不過(guò)來(lái),就用兩個(gè)分布處理,處理能力可提高一倍 點(diǎn)評:對于搬磚頭來(lái)說(shuō),兩個(gè)人應該比一個(gè)人的效率高一倍;對于作畫(huà)來(lái)說(shuō),多一個(gè)人只能幫倒忙。使用幾個(gè)CPU需對業(yè)務(wù)有較多的了解后才能確定,盡量減少兩個(gè)CPU間協(xié)調的代價(jià),使1+1盡可能接近2,千萬(wàn)別小于1。 現象六:這個(gè)CPU帶有DMA模塊,用它來(lái)搬數據肯定快 點(diǎn) 評:真正的DMA是由硬件搶占總線(xiàn)后同時(shí)啟動(dòng)兩端設備,在一個(gè)周期內這邊讀,那邊些。但很多嵌入CPU內的DMA只是模擬而已,啟動(dòng)每一次DMA之前要做 不少準備工作(設起始地址和長(cháng)度等),在傳輸時(shí)往往是先讀到芯片內暫存,然后再寫(xiě)出去,即搬一次數據需兩個(gè)時(shí)鐘周期,比軟件來(lái)搬要快一些(不需要取指令, 沒(méi)有循環(huán)跳轉等額外工作),但如果一次只搬幾個(gè)字節,還要做一堆準備工作,一般還涉及函數調用,效率并不高。所以這種DMA只對大數據塊才適用。 四:信號完整性 現象一:這些信號都經(jīng)過(guò)仿真了,絕對沒(méi)問(wèn)題 點(diǎn) 評:仿真模型不可能與實(shí)物一模一樣,連不同批次加工的實(shí)物都有差別,就更別說(shuō)模型了。再說(shuō)實(shí)際情況千差萬(wàn)別,仿真也不可能窮舉所有可能,尤其是串擾。曾經(jīng) 有一教訓是某單板只有特定長(cháng)度的包極易丟包,最后的原因是長(cháng)度域的值是0xFF,當這個(gè)數據出現在總線(xiàn)上時(shí),干擾了相鄰的WE信號,導致寫(xiě)不進(jìn)RAM。其 它數據也會(huì )對WE產(chǎn)生干擾,但干擾在可接受的范圍內,可是當8位總線(xiàn)同時(shí)由0邊1時(shí),附近的信號就招架不住了。結論是仿真結果僅供參考,還應留有足夠的余 量。 現象二:100M的數據總線(xiàn)應該算高頻信號,至于這個(gè)時(shí)鐘信號頻率才8K,問(wèn)題不大 點(diǎn)評:數據總線(xiàn)的值一般是由控制信號或時(shí)鐘 信號的某個(gè)邊沿來(lái)采樣的,只要爭對這個(gè)邊沿保持足夠的建立時(shí)間和保持時(shí)間即可,此范圍之外有干擾也罷過(guò)沖也罷都不會(huì )有多大影響(當然過(guò)沖最好不要超過(guò)芯片 所能承受的最大電壓值),但時(shí)鐘信號不管頻率多低(其實(shí)頻譜范圍是很寬的),它的邊沿才是關(guān)鍵的,必須保證其單調性,并且跳變時(shí)間需在一定范圍內。 現象三:既然是數字信號,邊沿當然是越陡越好 點(diǎn)評:邊沿越陡,其頻譜范圍就越寬,高頻部分的能量就越大;頻率越高的信號就越容易輻射(如微波電臺可做成手機,而長(cháng)波電臺很多國家都做不出來(lái)),也就越容易干擾別的信號,而自身在導線(xiàn)上的傳輸質(zhì)量卻變得越差,因此能用低速芯片的盡量使用低速芯片。 現象四:為保證干凈的電源,去偶電容是多多益善 點(diǎn)評:總的來(lái)說(shuō)去偶電容越多電源當然會(huì )更平穩,但太多了也有不利因素:浪費成本、布線(xiàn)困難、上電沖擊電流太大等。去偶電容的設計關(guān)鍵是要選對容量并且放對地方,一般的芯片手冊都有爭對去偶電容的設計參考,最好按手冊去做。 現象五:信號匹配真麻煩,如何才能匹配好呢? 點(diǎn) 評:總的原則是當信號在導線(xiàn)上的傳輸時(shí)間超過(guò)其跳變時(shí)間時(shí),信號的反射問(wèn)題才顯得重要。信號產(chǎn)生反射的原因是線(xiàn)路阻抗的不均勻造成的,匹配的目的就是為了 使驅動(dòng)端、負載端及傳輸線(xiàn)的阻抗變得接近,但能否匹配得好,與信號線(xiàn)在PCB上的拓撲結構也有很大關(guān)系,傳輸線(xiàn)上的一條分支、一個(gè)過(guò)孔、一個(gè)拐角、一個(gè)接 插件、不同位置與地線(xiàn)距離的改變等都將使阻抗產(chǎn)生變化,而且這些因素將使反射波形變得異常復雜,很難匹配,因此高速信號僅使用點(diǎn)到點(diǎn)的方式,盡可能地減少 過(guò)孔、拐角等問(wèn)題。 五:可靠性設計 現象一:這塊單板已小批量生產(chǎn)了,經(jīng)過(guò)長(cháng)時(shí)間測試沒(méi)發(fā)現任何問(wèn)題 點(diǎn)評:硬件設計和芯片應 用必須符合相關(guān)規范,尤其是芯片手冊中提到的所有參數(耐壓、I/O電平范圍、電流、時(shí)序、溫度PCB布線(xiàn)、電源質(zhì)量等),不能光靠試驗來(lái)驗證。公司有不 少產(chǎn)品都有過(guò)慘痛的教訓,產(chǎn)品賣(mài)了一兩年,IC廠(chǎng)家換了個(gè)生產(chǎn)線(xiàn),咱們的板子就不轉了,原因就是人家的芯片參數發(fā)生了點(diǎn)變化,但并沒(méi)有超出手冊的范圍。如 果你以手冊為準,那他怎么變化都不怕,如果參數變得超出手冊范圍了還可找他索賠(假如這時(shí)你的板子還能轉,那你的可靠性就更牛了)。 現象二:這部分電路只要要求軟件這樣設計就不會(huì )有問(wèn)題 點(diǎn)評:硬件上很多電氣特性直接受軟件控制,但軟件是經(jīng)常發(fā)生意外的,程序跑飛了之后無(wú)法預料會(huì )有什么操作。設計者應確保不論軟件做什么樣的操作硬件都不應在短時(shí)間內發(fā)生永久性損壞。 現象三:用戶(hù)操作錯誤發(fā)生問(wèn)題就不能怪我了 點(diǎn)評:要求用戶(hù)嚴格按手冊操作是沒(méi)錯的,但用戶(hù)是人,就有犯錯的時(shí)候,不能說(shuō)碰錯一個(gè)鍵就死機,插錯一個(gè)插頭就燒板子。所以對用戶(hù)可能犯的各種錯誤必須加以保護。 現象四:這板子壞的原因是對端的板子出問(wèn)題了,也不是我的責任 點(diǎn)評:對于各種對外的硬件接口應有足夠的兼容性,不能因為對方信號不正常,你就歇著(zhù)了。它不正常只應影響到與其有關(guān)的那部分功能,而其它功能應能正常工作,不應徹底罷工,甚至永久損壞,而且一旦接口恢復,你也應立即恢復正常。 |
hao |
很好,這些都是很多人常犯的錯誤......... |
謝謝分享。 |
非常好 |
寫(xiě)這帖子的,我拜你為師吧 |
感覺(jué)可靠性中描述的有幾個(gè)問(wèn)題更像是態(tài)度問(wèn)題,不過(guò)這些東西能寫(xiě)出來(lái),應該有很多設計經(jīng)驗。如果有更詳細的設計經(jīng)驗就更好了,還是得謝謝樓主了! |
經(jīng)驗比技術(shù)更值錢(qián)。 |
難得的資料,謝謝 |
非常有用,謝謝分享 |
很好.謝謝分享. |
都是很早或者轉發(fā)的文章 |
謝謝分享,非常有用. |
謝謝! |
學(xué)習了 |
可以看出,都是平時(shí)一點(diǎn)一滴的經(jīng)驗積累呀! |
留個(gè)影吧 |
好,謝謝提醒 |