您現在的位置是:首頁 > 攝影首頁攝影

解讀:談談硬體軟體韌體的區別

由 竣達鵬城Steven 發表于 攝影2021-07-10
簡介而微控制器程式設計師寫的程式碼,跟硬體密切相關,而且一旦完成之後,很少需要修改的(不像軟體工程師修改的那麼頻繁),我們稱之為韌體

韌體和軟體有什麼區別

軟體跟硬體之間的界限已經越來越模糊了,那麼處於這個灰色地帶的,就是韌體了。這就分成三類工作者。

1、軟體工程師

一般指做圖形介面的程式設計師,工作內容就是寫C++、JAVA、Web等。

2、硬體工程師

當然是指玩電路板的,工作內容就是畫原理圖、PCB等。

3、韌體工程師

也叫微控制器工程師,既寫程式碼(主要是C語言、彙編)又要畫電路圖。

玩微控制器的人,可能會有個疑問,為什麼我寫的C語言能操作到底層的硬體?其實在《計算機組成原理》已經有很詳細的介紹了。

我這裡粗略地介紹一下,這個原理。

首先你可以搜尋一下“從零開始造電腦”,這位叫Steve的大神,就告訴你,用電晶體可以做出CPU(微控制器也是CPU)。

解讀:談談硬體/軟體/韌體的區別

當然,我們現在可不會落後到需要到電晶體來製造電腦。

接下來,你可以看一部叫《喬布斯》的電影,劇中就給你展示蘋果公司的第一臺計算機。

解讀:談談硬體/軟體/韌體的區別

嘿嘿,看到那些黑色的晶片沒有?還有兩個大大的變壓器。這說明了在大學玩微控制器的時代,就相當於回到蘋果公司的初始時期!是不是很激動人心?

其實你可以用74系列的邏輯IC、微控制器等,來搭建一個屬於自己的計算機。這就是說人們把若干個電晶體整合為一塊74系列的IC,如果整合度更高呢?那就是手機或者桌上型電腦用的多核CPU了。

好,介紹了這些古董之後,就讓你有個認識,計算機本質上是N個電晶體的組合,也是數字邏輯晶片的組合,更高階的,就是一塊數模混合的晶片,具體形式是由你的工藝決定的。現在回到正題,介紹一下數電的基礎知識。

因為CPU主要功能是計算,也就是可以直接運用數學知識來解決問題,這裡就舉個例子介紹一下,CPU如何計算加法,也就是用數電裡的閘電路搭一個加法器。

解讀:談談硬體/軟體/韌體的區別

怎樣用電晶體搭這些與、或、非門就不說了,不懂的,可以翻書。上圖就告訴你,可以用這些閘電路搭一個加法器。

怎樣輸入Ai=0,Bi=1,Ci=0?用74系列的IC的話,可以直接把Ai,Ci接GND,Bi接VCC,就實現加法了。而在CPU內部也是一樣可以這樣做的,但是CPU可沒那麼死板,只算常數的加法。

解讀:談談硬體/軟體/韌體的區別

上圖中,藍色箭頭指向的1,就是接VCC的,而紅色箭頭,就是接GND。

在CPU內部,還有ROM,它可以把你要計算的加數和被加數存進去(ROM輸出的高低電平,跟你接GND和VCC是一樣的效果),而結果則存在暫存器(先暫存,以備後面使用)。

現在有個問題,如果加完之後還要計算乘法(在訊號處理領域的卷積運算的核心單元就是乘加器),怎麼辦?誰來自動完成這個動作?幸好,CPU裡面有個叫ALU(算術邏輯單元)來處理這件事情。

解讀:談談硬體/軟體/韌體的區別

這裡的控制單元,就把ROM裡面的資料取出來,再用選擇器,來呼叫加法器和乘法器,最終把結果存到暫存器中。

如果ROM裡面只存資料,那是無法讓控制單元知道,你要執行加法還是乘法,要解決這個問題,就需要在ROM裡面再劃分一個區域,存放指令碼。

這個指令碼,跟資料是一樣,都是0、1的二進位制數,只是用途不同,所以起了不同的名字。

其實這個指令碼,對應在微控制器裡面的組合語言,就是操作碼(如:MOV);而運算元就是資料(如:01H)。具體的,可以看看微控制器的教材。

根據指令碼的設計方法來分,有四種,分別是CISC、RISC、VLIW、TTA,具體區別可以看計算機組成原理。

而PC(程式計數器)就是控制ROM的地址,現在你要知道PC是不能出錯的,一旦出錯,就意味著微控制器不按照你的程式碼來工作。

現在,我在8位的CPU的ROM裡面,第一個地址存了0x03這個指令碼來代表加法,而在第二、三個地址存了加數和被加數,然後在第四個地址存了0x05代表乘法,在第五、六個地址存了乘數和被乘數。那麼,按照一定的規則來設計控制單元(這個規則可以自己定義的),它就知道0x03是要執行加法。

那麼這個規則如何設計?最簡單的,就是用與門了,然後輸出一個使能訊號,讓加法器工作,就跟上面的74LS160差不多。

但是CPU可沒那麼簡陋,它可以使用狀態機、流水線等,來控制這些基本單元(如:加法器、乘法器),如下圖所示。

解讀:談談硬體/軟體/韌體的區別

說到這裡,你至少應該知道,我們只要改變ROM的內容,就可以操作CPU內部的ALU,從而操作CPU的各個硬體單元了。

下面給個相對完整一點的ALU內部結構圖。

解讀:談談硬體/軟體/韌體的區別

ROM的內容本質上是一些電荷量(電容上有、無電荷,代表二進位制的1和0),也就是韌體、軟體工程師寫的程式碼。而硬體,就是由電晶體搭建的數字、類比電路(如:微控制器內部的比較器、ADC等)。所以硬體是物理器件,不容易更改;而ROM的內容完全可以用燒錄器就輕鬆改變它,修改成本非常低,而且很靈活。

在這裡,你很難表述,這些電荷量是軟體還是硬體,但是CPU的這種結構,導致了兩種不同型別的工作者,我們稱他們為軟體工程師和硬體工程師。而微控制器程式設計師寫的程式碼,跟硬體密切相關,而且一旦完成之後,很少需要修改的(不像軟體工程師修改的那麼頻繁),我們稱之為韌體。