代碼看不懂,邏輯理不清,尤其是控制信號加上時序電路就蒙了,有時候還會鑽牛角尖。我的基礎感覺就是會寫個狀態機,會畫時序圖。現在我每天都很茫然,而且感覺自己越來越笨了。我到底該怎麼辦?


這個問題讓我想起了才入行的自己,那時候我也不過是一個才入坑的新人,估計跟樓主情況差不多,對任何協議任何經典架構都沒有什麼認識,研究生實習了一兩年就入了坑,什麼也沒想,什麼前途如何,薪資如何等等。那時候的IC行業根本沒有現在火爆,隔壁互聯網行業如火如荼,IC產業也只是很多人口中的「夕陽產業」。

只是我覺得自己腦容量有限,不想考慮十幾年過後的事情,腦子裡面只有一個好奇的事情,我就想知道所謂的數字電路究竟裡面是怎麼樣的?就選擇了這個行業,僅此而已。

言歸正傳,我自己有一套比較成熟的復盤體系,早期的一些總結裡面的一些話我覺得很適合送給你作為參考。

1,細節迷宮

新手最容易犯的錯誤就是上來就啃代碼,這是一個非常大的錯誤。這個錯誤的危害之大是很多不會總結的人直到職業生涯結束都沒法悟透的問題。接手一個新的task,第一件事情應該是尋找spec或者做過的同事尋求幫助和具體指導。如果是一個對公司來說都是完全陌生的新業務那麼需要尋找更高層演算法或者架構師的幫助,總之,代碼只是表徵數字電路模型運行的表相,歸根到底是designer們對演算法的理解的向外表達。具體說,在看懂架構讀懂並理解演算法要做什麼事情之前,和大致步驟之前,RTL是完全不能碰的。一旦你觸碰了代碼並陷於其中,你會被細節鎖死在前任designer設計的「細節迷宮」當中。直到心態爆炸為止。應該就是題主的狀態。

2,邏輯沼澤

所謂」邏輯沼澤「是指在對設計不熟悉的情況下閱讀RTL,因為追尋一個細節信號,把自己陷入由邏輯構成了沼澤當中,最終的結果就是在沼澤中"追兔子",把自己徹底陷死為止 。具體的說,需要等你自己不看spec或者尋求前任幫助就可以大概在腦中刻畫出演算法的準確步驟和一些重要細節過後,這時候你才可以開始接觸RTL,切記在新接到的陌生設計中,最重要的就是要避開"邏輯沼澤",抓大放小。你前期的知識儲備就是你在這個沼澤中的地圖,從具體RTL中找到演算法的那些重要步驟的體現,再以此為主線對細節進行梳理。這個順序非常重要,絕不能改變。

3.復盤

很多新入行的或者才開始工作的朋友會忽略復盤的重要性,我另一篇回答中分析過這個能力。這一點的重要程度一點不比前兩點弱,甚至更重要。如果你一股腦的向前沖,很容易偏離路線而不自知,你的知識體系只是在苟且中累積。具體到細節就是說在一段時間過後,(間隔長短根據各自的情況有所不同)全面回看前一段時間的所有事務,並形成書面文字總結下來,主要內容最少要包括技術方面,時間把握方面,知識儲備方面,或者一些經驗性質的總結以及後續彌補的措施等等。需要注意一點就是,總結不要過於流水賬,要至少3個月的時間間隔,但不能長於半年。

最後,送題主一句話,識不足則多慮,威不足則多怒,信不足則多言。

希望題主你不要想太多,混亂狀態只是暫時的,每個人都會遇到,如果遇到這麼點困難就輕易轉行或者退縮,總有一天會無路可退。


1)首先對數字電路有一個基本的概念:全並行,想像你面前的代碼就是一堆分立元件,同時工作。

2)數字電路對比高級語言,加上一個時間維度,每個單位時間(時鐘周期)是一個單位。

3)在每個單位時間之間,也就是時鐘的edge,這一堆代碼,觸發一次,各自動一下,隨後的整個單位時間就保持不變。

搞清楚上面之後,再到如何看代碼,理邏輯。

先看總體功能,做了什麼事;再去看代碼,理時序,一般Spec文檔不會把工作時序寫的特別詳細,這就需要慢慢看懂了,數據如何進入,中間如何處理等等。最好能要個波形對著看,就比較容易明白。


小弟也是剛入行不久,學生時代也做過一些晶元,可能稍微有點經驗,就當心得分享一下。

1.理解需求

不要被數字電路的外表迷惑了,以為這是個寫代碼的工作。它本質上還是電路設計,只不過你用行為級的方法描述了出來。所以理解電路的需求就非常重要。首先要清楚你的電路從哪來,到哪去,你用它想做什麼,實現了什麼功能,前面大佬說的好,這些一般都會在spec中體現,spec看不明白不要緊,交給你的同事大多都會了解一些,多請教。當你徹底搞明白你用這個電路要幹嘛後,開始分析RTL就會有一種豁然開朗的感覺。

2.找尋主幹

剛接觸數字電路很容易犯的錯誤就是:從頭看代碼 看到一個不懂的邏輯 開始研究 陷入迷茫。顯然這是錯誤的,卡住你的這個部分,很可能只是整個module中的一小塊,可能只管一個輸出,或者僅僅是一個bit位校驗。

那正確的看代碼方式是什麼呢?其實看代碼就跟語文閱讀理解一樣,先找主幹,很可能是一個/幾個關鍵的狀態機,如果你覺得找這個很困難,建議先順著top的interface開始看,把interface的信號捋清。主幹看明白,再去填補細枝末節,就eazy多了

3.細節實現

看明白主幹,到RTL的具體實現,演算法的具體實現上,還有很多技巧,這個靠悟我覺得比較難,主要還是多看,多學別人的寫法,遇到好的實現,就記錄下來。一個模塊你寫出來的和別人寫出來的,功能可能一樣,但綜合出來面積功耗可能天差地別,這時候就要想一想,代碼里這個地方為什麼他要這樣實現?我的寫法行不行?如果行,那優劣各在哪?比較的多了,你就會明白很多東西。

以上也是我個人的一點經驗,可能有謬誤的地方,希望大佬們指出,輕噴,謝謝!


沒事,做個幾年,會發現更迷茫了,然後就改行去做互聯網了~


慢慢啃,這是個長一期努力的工作,祝你成功。


堅持下去,轉任CEO,迎娶白富美,指日可待


跑一遍模擬試試,加速理解


有個HDL語法練習的網站


推薦閱讀:
相关文章