數字IC設計,有必要自己造輪子么?
01-14
最近在做MCU,寫了一些硬體加速器掛載匯流排上。然後想到,雖然ARM提供了這些匯流排協議的代碼,拿來用就行了,但是總感覺很紙上談兵,合上手冊就完全說不出來協議的實現過程。所以在想,搞IC的,用不用像碼農那樣,時不時要求自己實現個什麼東西?
那是你搞得不夠多。搞IC的,看過幾遍代碼,還沒調過任何bug,就要能夠清晰的說出各個模塊的數據流向和處理過程,這是基本功。要能從代碼中提取關鍵信號和關鍵信號的跳變條件,關鍵輸出是什麼,模塊和模塊之間關鍵信號是怎麼握手的。而且,你連手冊都有,這已經很輕鬆了,好的IC狗看完手冊就能明白很多東西,手冊狡猾的地方在於不會解釋為什麼這麼規定,但是任何spec的定稿都有spec制定者極其深入的思考,其規定是極其自洽的,從spec本身反思spec定義者的構思能讓你學到很多東西。一般IC狗接手一個模塊根本沒有數據手冊,全靠自己啃代碼。那酸爽,比你這個難多了。
像我們的team leader,搞了近10年design,只需要看看數據手冊,代碼都不用看就能深入跟你討論設計細節,有時候能把你問倒,這就是功力。我曾今問過我們老大,為什麼你們不負責具體的module,卻似乎有時候比module的owner更懂design。他說他懂得不是design,他跟別人討論的不是一個design事實上是怎麼做的,而是一個design應該怎麼做,如果一個design不是這麼做的,那麼多半做的就是有問題的。
舉個spc例子,我之前調試公司的SATA通過一個非常變態的測試(ulink測試),這個sata模塊用了多年,十分穩定。但是遇到一個叫soft reset測試的時候經常過不了。我調了幾天感覺SATA協議本身似乎有點缺陷,可能handle不了,就翻了翻數據手冊,發現spec定義的傳輸層狀態機有一個跳轉條件寫得比較含糊,designer當時並沒有理解spec所說的這個條件到底指啥,又覺得沒有必要,就根據自己的理解將其省略掉了,導致寫得代碼與spec有一線差別。誰知就是這一線差別導致了bug的存在,直到我調到soft reset 才知道為什麼spec有此規定,那時我才感嘆這幫spec定義者到底還是高明得多。能力要全面,真正上了項目,只會嫌自己學得少
打個比方吧,
Lego給了各式各樣的積木和Demo,就是為了讓你臨摹學習並加上自己的創造力和想像力拚出更NB的作品啊。題主何必去糾結積木到底怎麼做出來的呢?
你以為碼農知道自己寫的程序在哪個物理地址?
我只想說,千萬不要,你挖的坑需要十倍時間去填
推薦閱讀:
※開關電源的嘯叫原因是什麼?
※IC後端工程師如何轉為IC前端工程師?
※IC驗證工程師心得有哪些?
※美國RF IC/mems博士未來發展如何?相比於CS的master?
※開一個半導體設計公司的門檻有多高?