加入前必須懂<數位IC設計>在做什麼?
IC設計產業中主要分成兩大區塊,數位IC及類比IC
對於電機系學生剛聽到IC設計的人來說,淺意識會認為IC設計需要用到龐大的電子學,
每天的工作內容就是在算cmos電流電壓,小訊號放大器等..
對於這些刻板印象來說是屬於類比IC的工作,
然而數位IC在做的事和上述大不同,
多半的數位IC工程師從入職到退休用到上述公式或觀念的少之又少,
在我進入相關產業後,考研究所時所唸的電子學都忘光了卻依然可以在這個領域中生存,
各位一定很好奇,那真正的數位IC設計工程師主要的技能是甚麼?
對於我來說
第一就是打嘴砲,夠會唬才可以活得久
再來就是寫code,和思考coding架構
嗯??數位ic設計也是在寫code?? 這樣和大家說寫c code 或python有甚麼差異?
在這邊幫忙簡單解答一下我個人的看法,
對於數位ic來說我們通常是寫verilog或是已經幾乎快失傳的HDL,
對於coding這件事來說和c code或python是一樣的,
同樣都是屬於高階語言需要用Compiler幫忙編譯轉換輸出,,同樣為了產出品質優良的程式都需要考慮時間複雜度或空間複雜度
差別差在寫code的邏輯不同,寫完的code輸出的對象不同
那這又是甚麼意思?
舉個實際的例子來說
在這個科技產業中把這件事情切割成了兩部分,大家常聽到的硬體及軟體,
verilog屬於硬體語言,c / python屬於軟體語言,都是在利用coding的技巧描述一些行為,
像for就是要跑迴圈,if就是要做判斷等,都是一樣的意思
差異點以整個系統運作的架構來說
verilog在做的事情是在做cpu本身,想辦法利用verilog寫出一個cpu的功能,輸入一筆instruction(command)就會輸出相對應的動作
c/python在做的事情則是在製造instruction(command)
舉個例子, 我用c/python寫了C=A+B,希望cpu會幫我做A+B的運算,把結果存在C裡面
寫完後會丟給compiler幫我把C=A+B轉成系統可以執行的語言((組合語言)上述的instruction),以後當我執行這個執行檔時只要輸入A和B,cpu就會幫我運算後丟出C的內容
以下圖來說軟體就是負責產生命令(左半部) 幫我把A和B相加後放到C內
硬體就是在接收命令後做出對應的行為 拿A address和B address的內容 相加運算後放到C address內
另外一個觀點來看,
硬體是我們常在主機板,GPU的PCB版上看到一顆一顆黑色外表四四方方很多腳的東西,壞了或有BUG就只能丟掉,一次性的壽命
軟體就是買CPU或GPU的時候通常會付你一張光碟寫著驅動程式,有BUG只需要再下載新版就好,可以無限制的重新安裝
差不多到這邊應該對於數位ic設計和軟體的差異有些微的感覺,
下篇會再介紹一下數位ic和類比ic的差異又是甚麼,晚安祝各位有個好眠