晶元在哪些方面不能代替軟體?

"數理邏輯是一個系統的靈魂,一旦完成系統里所有的演算法設計,把其中複雜的軟體演算法變成微電路就成晶元了。海思半導體就這麼誕生的。"這句話是不是說軟體能做到的,理論上硬體都可以做到?


科學原理上,軟體能做的,硬體理論上都能做。這是理論上的,但是實際上,我們要知道硬體是人類設計的,人的大腦是有局限的,所以硬體沒法做設計者無法預知的事情。簡單的講: err handle。

一個系統對,只有一種方式;但是一個系統錯,可以有無數的方式。所以確定的演算法,協議都可以用硬體來做,也很適合用硬體來做加速。但是還不確定的,無法預知的,就不適合用硬體來做,只能留給軟體。這是軟硬劃分的基本原則。

硬體適合做對的事情,一旦出錯,硬體不適合繼續往下做任何事情。硬體應該做的是保持現場,然後打中斷通知軟體來處理,由軟體來分析錯誤的原因,並恢復系統。


「是不是軟體能做到的,理論上硬體都可以做到?」

——這個問法讓我一時語塞不知道該怎麼吐槽……能問出這種神奇問題,顯然連最基本的「軟體是什麼」都沒搞清楚,或者是某企業的托。我看了一下題主頁面不像是後者,姑且本著善意認為題主是真不懂吧……

所以「軟體」是什麼呢?軟體是程序和數據,或者用更簡單的話講:本質上,它就是一套「規則」,硬體按照這套規則來完成指定任務。軟體沒有實體,離開了記錄載體、執行主體(硬體),它必然什麼也做不了。

打個比方,你的問題就類似「是不是法律能做到的,警察都可以做到?」「是不是菜譜能做到的,廚師都可以做到?」這樣荒謬。

雖然軟體作為一種信息是無形的,但它可以通過載體表現出來。對於電子計算機,各種形式的軟體都是電路結構,無論你用什麼載體保存它,ROM晶元、RAM晶元、磁碟、磁帶、光碟、打孔紙帶……當你執行這個軟體的時候,它都會反映在電路結構上。換言之,只要你的硬體電路是這個邏輯結構,執行任務出來就應該是這個結果。這個結構(門電路排列組合規則)就稱作軟體。

注意,邏輯相同的結構可以有不同的劃分方式,哪些部分用PCB走線、哪些部分燒進ROM、哪些部分存在外存儲器,這是設計問題。現代語境下的「硬體」其實有點含糊,往往除了硬體實體本身外還包括Firmware,即固化在晶元中的底層軟體。我們做上層應用的說的「應用程序」對於Firmware這個底層程序來講只是一些「數據」。 @馮敬堯 的答案說的主要就是這一塊。

極端情況下,你可以想像一個集成度極高的單片機,ROM中燒了巨複雜的固件,這一個晶元加上電源和輸入輸出設備就構成完整的系統,能玩憤怒小鳥英雄聯盟,理論上這是可能的。只不過,工業上這種設計不一定划算。


成本。

差1萬倍。


不是把複雜的軟體演算法變成電路,而是把軟體演算法分解之後重複次數多的部分變成電路。


數字邏輯想必很多有些微電子學基礎的人都知道,與,非,或?相應的硬體三極體也有與,非,或相應的電路。也就是演算法與硬體上的一一對應關係。現在的數字電路,在演算法邏輯確定的前提下是可以基本靠電腦完成硬體版圖化的。這也就是你提到海思的硬體編譯。

但是硬體的速度是有限的,也就是0,1變化的速度在三極體中也是有極限的。硬體的的速度一般影響的因素有天生製造時的偏差(溝道長短的誤差),運行溫度的變化以及供電電壓的變化。於是數字電路最大的敵人就產生了那就是時序誤差,明明要一起出的信號卻有了先後之分。

所以很明顯的相同的演算法,硬體完成還是軟體的完成,風險不言而喻。肯定是軟體完成出錯的機率更低(前提:軟體需要完美的硬體運算載體)。聰明的人肯定發現了如果有這個前提,那軟體其實還是要面對硬體會面對的問題。所以說單是從這個方面比較還是不夠的。我們要從問題的源頭說起,才能更清楚我們需要比較的是什麼。

在三極體運算出現的早期是沒有軟體的,那時的運算都是硬體運算,也就是最簡單的邏輯門的堆砌,隨著三極體製程的發展,三極體越做越小,集成度越來越高,運算的變化也越來越複雜,固化的硬體運算的弊端也日益展現,雖然採用了模塊化的設計,但是當時的編程都是物理變成,靠重新連接模塊實現硬體運算的變化。剛算完炮彈的軌跡,想算衛星的軌道就要忙上好幾天到好幾個星期。於是設計萬能的硬體,然後依靠軟體完成運算的變化就成為當時計算機發展的趨勢。於是也就有了硬體運算和軟體運算的區別。那理論上軟體運算應該能完全代替硬體運算咯。但歷史總是喜歡反覆的。隨著移動運算終端的發展,硬體需要更省電更小。這恰恰是硬體運算的優勢,於是對於相對標準化的模塊,就採用硬體運算的方式減小功耗以及晶元面積。而對於處理信息的模塊仍使用萬能硬體(cpu),軟體計算的方式。

所以如果比較軟硬體運算的優劣,現在看來是各有所長的。需要根據不同的需求選擇不同的運算方式。

PS:我知道海思的那句話是想說自己硬體編譯的能力。但鑑於題主也不是很清楚想問什麼,所以我就從姑且從軟硬體運算的角度來答一下這個問題。


客戶改需求的時候


所有運算邏輯通過硬體都可以直接實現,但是如果為每一個運算邏輯都單獨搭設一個硬體的話,一是成本太高,二是太占面積。所以問什麼不搭建一個通用的硬體平台,而通過一個一個的軟體調用硬體,實現特定功能呢?這就是軟體和硬體的關係了。

學過《數字邏輯》這門課的童鞋都應該知道這個邏輯的。


理論上足夠給力的晶元可以做軟體能做的事,但晶元是固化的,不像軟體可以改,可以安裝卸載。

電子計算機發展史上,最早的機器是硬體邏輯,硬體連接編程。

後來工程師們發現,每次解決新的問題都要重新連接硬體,不划算,且電路連接容易出問題。

因此有了存儲程序原理的通用計算機,控制相應硬體做的步驟被稱為指令什麼的,保存在存儲器里,這樣一台計算機只需執行不同的指令,就可以做不同的工作。

指令,軟體,邏輯什麼的,都是人為定義的辭彙符號,用來表示我們讓計算機做的事的一個個步驟。


老實說,我沒看懂你的問題。到底是你問錯了還是你知識量不足以理解?


理論上真沒有,樓上說的那些自我學習的東西其實也可以,因為大腦就可以看出硬體電路


專用硬體速度快,通用硬體用處廣。

x86 和 arm 在一些專用場合的確有一定的局限性,但是他們在大部分時候都可以滿足用戶的需求,因此使用最廣泛。

一些專用硬體,如數字信號處理晶元, NAT 硬體轉發晶元主要是出現在有相應需求的場合。

題主問題沒問好,不知道是不是問得這個意思。


理論上來說是這樣,但操作量會難以想像


什麼叫演算法?

放大的過程是不是演算法?

你脫離硬體來放大我看看啊?連最簡單的電平搬移都做不到。

廣告是不能深究的


硬體比較難做到在使用中不斷自我學習來完善自身吧


推薦閱讀:

如何閱讀datasheet?

TAG:晶元集成電路 | 晶元設計 | 晶元市場 | 基帶晶元 | 數字信號處理晶元 |