電子工程師與軟體工程師眼中的CPU有什麼不同?
是否存在如下情形:電子工程師看到的是晶體管、門電路,更像一個城市的交通圖,看到得更多的是不同部件之間的「聯繫」部分,知道每一個功能單元是怎樣實現的,粒度更小;而軟體工程師看到的是寄存器、匯流排,像是一個個黑盒子,更抽象,粒度更大,知道它有什麼作用,而不去在意它的實現。
說下我看藍牙方面的IC吧 軟體工程師: 1 看晶元手冊 寄存器框架 2看SDK架構 開放程度 代碼逼格 周邊工具逼格。 3看射頻特性硬體特性。
不至於全部黑盒 :
1 會看它自校準晶體的能力,對自校正的原理是黑盒,但大體知道會有類似模糊印象的跟隨 自反饋 等大學課堂的知識框架。2 看射頻發射接受電路的打開關閉時間,比如協議做到理論值接收需要300us的 它提前多久打開了,好點的晶元公司設計是多久打開,它提前打開的原因是在穩定電路? 大概會模糊印象出一個射頻發射接收的幾級結構 什麼鎖頻啊 PA啊 但是是模糊的,只有大體框架圖。3會看它的開機電流: 這個時候大體什麼在上電,晶振穩定了嗎 這個點貌似從晶元內部的RC切換到了外部晶體。4 有時候為了幫助理解一些內容 會把一些大學的時候單片機課程的 寄存器操作過程指令流過程拿過來用,雖然知道很多時候是錯誤的牽強的為了搞懂一些東西強項聯繫起來,但確實幫助了記憶理解。
5. 由於藍牙的晶元一般HCI層以下的很大部分(不是全部)都是硬體實現,會去想哪些功能的哪些部分它應該是硬體處理的,哪些是軟體處理的邏輯。6 IO口啊 高低電平啊 ,還是多多少少能想到一些推挽啊 上下拉啊 之類的。每每這個時候 以上這些時候 ,都非常後悔為什麼不把那些本專業開的課程好好學好呢?學好了不至於全是模糊的,本來都可以很好的理解這些的....而且這些黑魔法比軟體的黑魔法有意思多了。但也就是想想而已。很多這個時候我都會有一種想去學習一些這方面知識的衝動,剛畢業那會兒還真干過,還下了一些射頻模擬軟體想計算各種天線啊 射頻電路啊 的特性參數,後來被生活各種打臉,為了及時扼殺這種亂點技能樹的念頭,我專門在oschina 的team管理裡面開了個項目,亂點技能樹,把想點亮的速度寫出來,讓自己高潮下,高潮完了,爽也爽了,穿好褲子繼續專心自己的軟體...
軟體工程師看到的是寄存器、匯流排,像是一個個黑盒子,更抽象,粒度更大,知道它有什麼作用,而不去在意它的實現。
確實是個黑盒子,更抽象顆粒更大,不是不去在意,而是不能去在意,EE硬體工程師做好的黑盒子送給EE軟體工程師,軟體工程師還得繼續做黑盒子送給CS的工程師,你看誰在意的最少?誰又賺的最多? 作為碼農(最近開始知乎上承認了嵌入式寫代碼的也算碼農),我在時刻扼殺自己的拆黑盒子的衝動.
有點跑題。。。。軟體工程師是壓根不懂CPU的,充其量是數據手冊看得熟,知道怎麼用而已,只有硬體工程師才懂CPU。硬體工程師看到了某硬體的feature list,會點點頭心領神會。作為一名IC工程師,看到指令集結構,就能知道解碼器和運算器怎麼做。根據各種指令的編碼格式,操作碼的值是多少,操作碼和操作數怎麼分布的,位寬多少,後續很容易推斷出來。再比如說,看ARM的AHB高性能片內匯流排介紹:AHB主要用於高性能模塊(如CPU、DMA和DSP等)之間的連接,作為SoC的片上系統匯流排,它包括以下一些特性:單個時鐘邊沿操作;非三態的實現方式;支持突發傳輸;支持分段傳輸;支持多個主控制器;可配置32位~128位匯流排寬度;支持位元組、半位元組和字的傳輸。
軟體工程師看完:feature好多啊,好像很牛逼。
硬體工程師看完:就是一個很簡單的匯流排設計,支持多個主機接入同一個設備,每個主機的請求可以是1DW~4DW,多個主機同時訪問時會做仲裁,如果是多個DW,有可能在訪問時被其他主機打斷,所以要支持分段傳輸。說實話,還不如我公司的ADS-NA匯流排牛逼,簡直弱爆了。我就說說GPU。
軟體工程師: 這片子TBR,那個片子TBDR。
硬體工程師:TBDR?WTF?問了一下市場。哦!WTF!電子設計(IP核)中一般採用RTL(寄存器傳輸)級別描述 或者是信號流級別 門級描述和晶體管級實在太細緻了 就像軟體工程師看機器碼一樣 門級一般採用軟體綜合得到 硬體設計也是十分自動化的 設計和驗證也是要寫verilog的 並託大量的CAD程序 而程序員則只關心程序員可見的部分 例如寄存器 寄存器里的東西代表著程序的變數 31號寄存器保存棧指針 過程的執行會把變數換出到緩存或內存等 知道這些當然在對晶元編程的時候有用 這是程序員可以看見的部分 再比如匯流排 可一不去管仲裁實現 握手協議等 但根據地址的哪幾個bit仲裁 外設佔用那些地址就是可見的 否則怎麼向外設中輸出數據呢 而程序員不必關心CPU流水線中的數據冒險問題,bypass,和分支跳轉丟了幾個指令等 這些都是不可見的 對指令的影響通過硬體屏蔽掉了 對程序員來說可見的是指令都是順序執行的 電子範圍應該很大的 軟體都有這麼多分支呢 以上只針對計算機中方面的電子 總結下 實現功能的抽象層次決定了需要了解多少
看你問題的是什麼軟體,如果你說的是OS之上的軟體,我甚至懷疑他能不能看到CPU,還是僅僅看到OS提供的介面。如果你是應用程序級別,有一大堆內存地址寄存器之類你是看不到訪問不了的,有的是OS不提供,有的是硬體根本不允許你訪問。從做硬體的角度,我們管BIOS已經開始稱為軟體了,到了應用程序級別,我懷疑我是不是能夠看見你在做什麼。你的程序對於我來說會變成低級的指令,比如訪問一個寄存器,你可能有延遲的要求,可能沒有訪問許可權,可能來訪問得太早,可能會鎖死,我要怎麼報錯。
軟體工程師也分好多種的。除了彙編工程師很少有人直接操作寄存器啦。搞多線程開發的把cpu看做多個運算器,線程輪流在cpu執行
電子工程師也是個很大的範圍
推薦閱讀:
※機電工程師、機械工程師、電子工程師、結構工程師、模具設計師選擇考哪個含金量高些?.
※通信工程專業轉模擬電路設計是怎樣一種感受?是不是跨度會很大?希望有大神來談談。?
※學電子工程的有什麼比較好的中文教材啊 ?
※在電子電路中那本入門教材最好,特別是對零基礎的初學者。?
※為什麼在中國電子工程師的發展明顯不如軟體工程師方向?