硬件知識體系

最近有不少軟件領域的牛人進軍硬件行業,但不知從何處入手。相信每個人面對一個龐大的知識體系時都一樣迷茫。最佳的應對策略就是找一個最貼近自己需求的切入點,然後向四面八方鋪開去逐漸認識整個知識網絡。我隨便寫一個帖子就是爲了讓你在這個知識網裏面找到自己現在的位置,然後有目的有方向地選擇下一步。

  簡單來講硬件的體系像軟件一樣也分層。

  最底層是包含電學現象在內的微觀物理現象,幾乎是純粹的抽象理論集合,能看得見摸得着的實物不多。比如半導體摻雜特定雜質後,其原子核俘獲自由電子的能力增強或減弱。由此帶來的PN結的應用。再比如帶電粒子在磁場中的受力情況(洛侖茲力),由此延伸出陰極射線管、霍爾效應等應用。還有通電導線以及螺線管產生的磁場形狀,這個應用就多了去了。再比如波動的發射源與接收點之間距離變化造成接收到的頻率變化(多普勒效應),由此延伸出測速雷達之類的應用……基本上從初中物理到大學物理,所有與電相關的知識都涵蓋在裏面。物理與數學作爲基礎學科與這些基本物理現象一脈相承,是整個硬件行業乃至軟件行業的基石。現在很多硬件工程師並不熟悉這些基礎學科,這在解決問題時會給他們帶來很大的侷限,一是無法迅速找到最合適的方案,二是無法分析手中的方案來龍去脈是什麼,怎樣優化現有方案。

  向上一層是分立電子元件。電阻、電容、電感、二極管這些稱爲無源器件,三極管、場效應管這些是有源器件,這些器件的特性反應在輸出信號隨着輸入信號變化的特性上,而要這些特性體現出來,必須在輸入信號之外另行提供電源,因此叫做有源器件。分立電子元件是板級硬件工程師選材的基本單位。

  這一層分爲理論和實踐兩個方面,實踐不難,找幾個典型的電子元件摸一摸,拿萬用表測一下。以後看見了能認識就行。理論這方面,合格的模電工程師必須熟練掌握這些元件的自身特性和典型應用。數字硬件工程師往往不太注重這些基本知識,有人不會畫N-MOSFET和P-MOSFET的電路符號,有人不懂計算晶體三極管的靜態工作點。還有人RC電路的零狀態響應理解不夠透徹,不懂怎樣計算數字集成電路的復位阻容網絡時間常數。這些多少都會構成硬傷。學習這一層理論最好參考通用的大學《電工學》教材,高等教育出版社上下冊。如果對上面講過的最底層的物理學有足夠深入的瞭解,會大大增進你對分立電子元件的認識。比如對電阻率、電磁感應的認識能夠幫助你理解爲何簡簡單單的一根導線都要衍伸出雜散電容電感這麼多亂七八糟的問題,到底什麼時候要當作等勢體去看待,什麼時候要考慮它的位置和形狀。高速電路工程師和射頻工程師經常要面對這些問題。你的目標是哪個羣體?

  再上一層是集成電子元件。也就是包含集成電路(IC)和各式集成傳感器在內的電子元件。上述一層的分立元件用導線和電路板連接起來會帶來體積龐大、特性離散、溫度分佈不均、導線距離過長造成信號反射等諸多問題。所以傑克·基爾比和和羅伯特·諾伊思纔想到把它們微縮到很小的半導體基材上。幾乎所有集成電路都是有源器件。集成電子元件有兩個方向,上游的是芯片級的微電子產業,也就是設計、生產電子元器件的。他們側重前面講過的基礎學科。板級硬件工程師選修的課程,對他們而言是必修。比如光繪之類與流片工藝相關的所有知識。細分也有很多不同的職業,這裏不贅述。下游的就是板級硬件工程師,他們是拿着上游產業生產出來的成品去應用的。

  我讀初中的時候翻書看了幾個邏輯門元件說明,就瞎尋思有沒有一本書上面囊括了世界上所有型號的集成電路,那時候我以爲一個合格的工程師必須在腦子裏記住所有集成電路的使用說明才能幹活。而實際上每天都有新的集成電路被研製出來,型號多得那些專門賣元件的網站都很難更新過來。所以總有你不認識的陌生型號,但這不代表你不能做一名合格的工程師。如果你熟練掌握了基本分立元器件的原理和常見電路結構,那麼新的集成電路拿在手裏看,最基本的結構也無非是這些東西,只是重新組合了一遍而已。

  集成電子元件這一層同樣分爲理論與實踐兩個方面,這一層的實踐,初期就是拿幾個常見的芯片認識一下封裝。常見的封裝類別會認就OK了。接下來就要去看理論,最後回過頭來實踐就是針對你所選具體IC的實戰應用了。

  理論方面,上面說的《電工學》那套教材裏也涉及了運算放大器、數字邏輯方面的知識。像邏輯運算式的化簡這些知識無論在使用4000系列邏輯集成電路的時候還是在做CPLD/FPGA設計的時候都會體現出它的重要性,寫程序的時候也少不了邏輯運算。掌握這一層知識,重點除了底層的基礎之外就是英語。你和集成電路打交道的時候多數是在看說明文檔。你需要的東西到底要滿足什麼條件,你選到的東西到底具備什麼條件,怎麼使用,都靠這些。英語對於軟件工程師而言應該不是大問題,畢竟搞軟件的時候多數人都見過RTFM這個詞了,老外對沒頭沒腦的提問者常說的一句話:Read the fucking manual!

  特別指出,集成電路這一層包含了可編程元器件,包括微控制器、CPLD/FPGA、DSP、獨立的處理器(CPU、GPU等)、存儲器以及定製的可編程混合信號電路等等。對於這些可編程器件,就有了更高的一層,也就是硬件抽象層(HAL)。這一層屬於軟件,模擬工程師就不用碰了。但是數字工程師,尤其是嵌入式操作系統工程師操作底層硬件的時候必須和它打交道。寫驅動的工程師有時候不得不翻閱硬件手冊去了解自己所用的硬件模塊具備什麼物理特性,接下來才能繼續編寫自己的代碼。這一層往上就是軟件工程師的地盤了,那個領域枝繁葉茂,我也沒法接着講了。

  多數希望學習硬件的人都是帶着具體需求來的。可能手中有個項目需要做一個平臺,或者是對某個特定的器件非常感興趣。這樣的話最好的切入點就是你手裏這個具體的東西。看一看它屬於上述的哪一層,然後向外輻射開來,瞭解它的來龍去脈。從相關的實物開始建立對整個行業的感性認識。對實物熟悉了再去學習背後的理論。不同的理論最終在大腦裏相互交匯起來組成一套有條理的理論體系。

  很多硬件工程師從小學起就開始學習了,一路動手學過來的。學好硬件,最原始的動力來自於對自然科學的好奇心,還要享受動手的樂趣。這些都不是一夜之間就能掌握的,學個差不多少說要兩三年,而且硬件領域也有不同分支,相互之間有時候甚至可以說隔行如隔山。精力有限,你能掌握多少取決於你有毅力走多遠。              
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章