FPGAer升職記!12年工程師從公司、成長、能力、面試剖析,想入行的必看!
本文已獲取「知乎」作者授權,請勿二次轉載,請獲取作者授權。
聲明:本公眾號授權轉載本文僅傳播相關知識,無任何盈利和商業(yè)行為,部分內(nèi)容有刪改。
原文地址:https://zhuanlan.zhihu.com/p/137481604
作者:王yifei
▍導言
▍關于行業(yè)和公司規(guī)模
關于行業(yè)
面試了幾個月,收到了幾百份簡歷,面試的人也有好幾十?;叵胍幌?,投簡歷的大概有以下幾類:
1、完全不懂邏輯的,比如,有網(wǎng)吧的網(wǎng)管,也投簡歷做邏輯驗證工程師
第3類, 做視頻和安防的,面試過幾個,一般這種公司,邏輯的人員規(guī)模都比較小,經(jīng)常有人做個2-3年,就做到邏輯組長了,但是他們一般水平都不高,基本的時序約束都不做,仿真也不做,一般邏輯規(guī)模都比較小,直接上板用signaltap調(diào)試,對整個邏輯研發(fā)的流程也不熟悉。
第4類, asic工程師,這類工程師,一般代碼水平和仿真水平都還可以,整個設計流程也比較嚴謹,但是純粹的asic工程師,如果沒做過fpga,并不適合我們公司,對fpga內(nèi)部器件不了解,對時序約束的經(jīng)驗也不多,而且asic的工期很長,幾年下來,做不了幾個項目。一般純粹做asic的,都難以通過第一面,有一部分做過asic的fpga驗證的,或者中途轉行,既做過asic,也做過fpga的,水平還可以,其中有幾個進入了二面??傮w而言,asic工程師并不太適合轉作fpga。
第5類, 通信行業(yè)的小公司,也面試過一些。一般通信行業(yè)的小公司,里面都有一些人,之前是在華為、中興做過的,整個公司的邏輯水平,還比較好,因此,這一類的求職者,水平也還可以,不過主要是看個人,有一些知識較全面,也有一些懂得并不多
第6類, 這一類,一般就是華為、中興,最近這兩家公司離職的人也較多,面試的有一半以上,都有華為、中興的工作經(jīng)歷。這一類,一般工作年限3年以上的,水平都比較好,知識面比較全,整個流程也比較清楚,而且流程和文檔做的比我們公司要好。但是缺點就是很多人做的比較窄,基本上只做一個點,雖然知識面還好,基本都懂一些,但是很多方向都沒有自己動手,有一些部門,寫代碼一撥人,編譯工程一撥人,仿真驗證一撥人,查bug又一撥人,導致對整個全局把握較少,另外,這些人原本待遇就比較高,尤其是華為,很多人比我工資都高好多。
第7類, 超聲行業(yè),這一類是比較對口的,但是人很少,只面過幾個,對超聲有一些了解,但是邏輯水平確實比M公司要差一些。
關于公司規(guī)模
好多人在一開始找工作的時候,往往面臨一個選擇, 是去一個大公司,還是去一個小公司。 大公司比較正規(guī),可以學到很多知識,小公司機會比較多,說不定過幾年就成領導了。
以上兩種說法都有道理,但是都不全面。
1、大公司
大公司比較正規(guī),流程等也比較正式、全面,技術積累也比較好, 確實可以學到很多,而且都是正規(guī)套路,比如華為,有非常正式的流程,從方案到設計文檔,每個時間段都有嚴格規(guī)定,等到寫代碼的時候,基本已經(jīng)成竹在胸了。比如中興,新人做一個設計,基本上都有非常全面的文檔來告訴你,怎么做,以前出過哪些問題,基本上一個智商正常的人都可以順利完成。
但是大公司也有一些缺點。 首先,分工太細,不僅僅是設計上,也在流程上。比如之前面的一個人,做了5年,一直在做接口,而且是同一個接口,這個地方可能已經(jīng)做的很好了,甚至可以說水平在國內(nèi)都是比較高的了,但是知識面太窄,其他的不了解。還有一些人,只做代碼,連工程都不需要編譯,這樣,就對代碼的器件實現(xiàn)了解不多,實際工程經(jīng)驗也很少。之前面試過一個中興的,主做信號處理,做了3年,基本上完全不知道fpga是啥,只懂信號處理的verilog代碼實現(xiàn),連邏輯基本單元由查找表和寄存器組成都不清楚。
另外,大公司一般項目進度都比較嚴謹,在多年的經(jīng)驗積累中,項目進度一般都定的比較準確,這就意味著你必須每天都在做項目,跟進度,很少能留出時間來自己學習,更不用說拿幾個星期出來,改改邏輯架構,做些自己有興趣的事。不利于個人的提升。
2、小公司
不過,小公司的缺點也是很明顯的。 除非小公司有技術很牛的人,否則,一般都難以有很完善的流程,技術上也很難做到比較精深。很多小公司的,連仿真都不做的,而且只做時鐘頻率約束,管腳的輸出輸出時序約束都完全不做。所以,小公司出來的,一般都不那么正規(guī),而且水平也很難做高。
積累和培訓做的不好?;旧?,我在M公司被培訓到的邏輯知識比較少,有過一些培訓,但是效果并不好,大部分都是在項目實踐當中學到的?;揪蜎]有一個培訓體系,全靠自己悟,自己問。
但是M公司還是一個比較好的起點。首先,邏輯規(guī)模足夠大、足夠多樣、足夠復雜、更改足夠多。規(guī)模大,就會有機會使用比較大,比較高級的芯片,而且,規(guī)模大,對人的掌控能力也有很高的要求。足夠多樣,知識面就會比較廣,當前的邏輯有各種接口,包括transceiver,pcie,spi,uart,i2c,ddr,lvds,ssram,ccir656,rgb等等各種接口。以及相應的各種邏輯。既包括信號處理相關,也包括各種復雜控制,還有視頻相關等。足夠復雜,對于提高邏輯水平有很大幫助,當前有很多邏輯設計都是比較復雜的,比如數(shù)據(jù)緩存,pcie上傳,xx控制等。更改足夠多,就意味著有很多新東西可以做,而且需求的多樣性更改,才能催生一系列的設計思想。軟件就是因為要處理各種復雜、多變的需求,才衍生出了各種思想,如面向對象、設計模式等。
每個人負責的邏輯設計,流程上可以走完整。包括老項目的維護,在研項目的需求、方案、設計、仿真、調(diào)試、debug,以及新項目的預研,都可以全程參與,對邏輯的整個流程會有比較深刻的認識。而且,不僅僅是寫代碼,包括設計的編譯,調(diào)試,debug等工作,可以對負責的邏輯設計,有更加深入的認識,對邏輯的可閱讀性、可復用性、可調(diào)試行等原則有所感觸。
得益于邏輯組一定的流動性,可以將邏輯的各個模塊都做一遍,而不是只能一年一年的只能做同一個設計。我來公司幾年,做過的設計包括 視頻、電源管理、按鍵板、XX、XX管理、newC、pcie上傳、XX、數(shù)據(jù)緩存、信號處理、XX控制,基本上,超聲相關的邏輯,除了xx,其它的,或深或淺的都做過,即使xx,我也曾自己花了2個星期的時間企圖重構過,對其設計也有一定的理解。這在大公司,是不可能的。
由于我們公司的超聲還沒到世界領先水平,以及系統(tǒng)組同事無窮無盡的新想法,每個邏輯設計的方案,都在不同的項目之中變來變?nèi)?,而且不同于通信領域的固定處理方式,我們公司的邏輯基本上是沒有參考的,完全由做邏輯的人來確定,有非常大的發(fā)揮空間。
由于我們公司還比較低級的項目管理水平,項目進度的安排并不怎么合理,有些項目中,是有時間可以做一些事情的,當然,最近一兩年幾乎沒有了。但是前幾年,我曾經(jīng)有幾次,可以抽出幾個星期的時間,并行的做一些我感興趣的事情,比如邏輯重構。
綜上所述,在職場的起點,選擇一家好的公司,是非常重要的。
▍一個邏輯工程師的成長之路
面試了很多人,有些水平高,有些水平低,有一些公司有嚴格的職級,比如華為,完全可以根據(jù)其職級來得知其邏輯水平,而且華為的業(yè)務職級和技術職級還是分開的。我們公司也有職級,但是,不同的公司之間,或者說,邏輯工程師,沒有一個比較普遍、統(tǒng)一的標準來衡量其水平。
我一直比較困惑于這個問題,原因來自于從小受到的教育和長大后經(jīng)??吹男≌f。小時候的學習成績,是非常容易識別和量化的,分高分低,一比就知。成年以后,看過各種小說,武力高低,也是有非常明確的量化的,一個人完全可以非常清楚的知道,自己的級別。比如xxxx,用魂力來表征水平,從1-100,每10個級別為一個大的等級,雖然這不能代表真正實力,但是至少讓讀者可以看到主角的逐步成長。不過,這也只是小說,現(xiàn)實生活中,是沒有這個東西的。
鑒于這些困惑,在本章,按照我自己的簡單的經(jīng)歷和粗淺的認識,對邏輯工程師的水平做一下初步的劃分。
階段特點:這個階段,基本上處于剛剛接觸到verilog代碼一段時間,知道大概的語法,能夠把一個需求用代碼實現(xiàn)出來,并且能夠調(diào)試出來??傮w而言,處于一個能用的位置,可以實現(xiàn),但是并不清楚代碼與實際器件實現(xiàn)的關系,對邏輯的硬件思維基本沒有。
階段評價:此時,尚且不算一個邏輯工程師,因為只會寫代碼,沒有邏輯思維
提高途徑:如果有審美,有需求,自己有內(nèi)部推動力,將開始進入到第二階段(我有見過中興的3年的算法工程師,做了3年只懂算法實現(xiàn),完全沒有邏輯硬件思維,因此,時間長短跟水平并沒有直接關系)
階段特點:這個階段,開始關注代碼風格,開始把自己的代碼寫的風格統(tǒng)一,并且開始關注代碼的硬件實現(xiàn),突出標志就是開始關注rtl視圖,可能還不怎么關注器件視圖。但是基本知道器件的大概結構,知道fpga里面有l(wèi)e,ram,dsp,全局等等。比較能明確的區(qū)分可綜合語句與仿真語句的區(qū)別。
階段評價:這個階段,基本可以稱為是一個邏輯工程師了。能夠完成設計實現(xiàn),仿真,調(diào)試,能夠做出邏輯設計說明。
提高途徑: 此時,一般開始負責一個模塊,如果該模塊在其他項目上復用,并且略有更改,有的人會直接修改,而有些人開始有更多的考慮,由此進入第三階段
階段特點:這個階段,由于上一個階段已經(jīng)可以實現(xiàn)設計,在這個階段,開始考慮設計的復用,開始考慮模塊的劃分,注重模塊接口,平臺化等等。
階段評價: 這個階段,可以認為是一個基本成熟的邏輯工程師了,邏輯所需要掌握的知識方向,基本都有所了解,而且,不僅能夠完成設計,還能在設計之前做出方案,而且做出的設計,模塊的劃分比較合理了。
提高途徑: 此時,一般會開始接手一些比較大的前人的設計,有的人會盡量復用,有些人會有更多的考慮,由此進入第四階段。
階段特點:這個階段,會接手一些比較大的設計,開始有架構的考慮,對于模塊的劃分,模塊接口,模塊職責,整體方案的實現(xiàn),開始有更多的考慮,此時,可以做出比較好的,合理的方案,而且對邏輯的各個方向的知識,都有了比較全面而深入的了解,比如仿真,器件結構,時序約束,模塊劃分等等
階段評價:這個階段,可以認為是一個比較優(yōu)秀的邏輯工程師了。能夠在項目之初給出比較好的邏輯方案,并且能夠快速而高效的完成設計,仿真和驗證。對應可能發(fā)生的時序,等等問題,也有比較好的考慮
提高途徑:此時,如果有機會可以帶領一個團隊,會進入一個不同的領域,能夠接觸到更多的東西,
階段特點:這個階段,會負責一個團隊,或者一個項目的邏輯設計。開始對整體的邏輯架構有所考慮,并且開始準確的劃分邏輯架構,并分配不同的工作任務,由于需要團隊協(xié)作,因此要求對邏輯方案,邏輯進度,邏輯技術,有非常深刻的認識,
階段評價: 可以給團隊制定邏輯代碼規(guī)范,邏輯設計流程
提高途徑:由于本人仍在此階段掙扎,因此,尚不知如何提升。也許可以關注一下板卡,向硬件系統(tǒng)方向發(fā)展,或者補充驗證方法學,向數(shù)字部門方向發(fā)展,或者整合邏輯、軟件、系統(tǒng),向系統(tǒng)方向發(fā)展。在此階段,邏輯本身相關的技術,也許已經(jīng)到達一個瓶頸了。
▍一個邏輯工程師的成長之路-實例篇
上一章的模型,其實就是我自己的經(jīng)歷,大概套一下吧。
第一階段(2008-2009):能用
在我剛進公司時,勉強算是第一階段,嚴格來講,我雖然學過數(shù)字電路設計,但是當時用的教材很老,并沒有講述跟fpga相關。后來在實驗室,買了一塊開發(fā)板,才慢慢開始學習fpga。
剛進公司的時候,完全沒有硬件時鐘的概念,沒有時序約束的概念,剛剛處于能用verilog代碼完成需求的階段。
不過機會很好,當時就趕上了M1項目,負責了電源管理和視頻。比較適合新人的兩個設計。
比較順利的完成了代碼和仿真,調(diào)試的時候,也還比較順利,開關機,屏幕顯示,都按時完成了。
不過,此時并不太明確verilog代碼與fpga器件實現(xiàn)之間的關系,寫代碼時,不是考慮fpga能否實現(xiàn),而是考慮是否符合verilog代碼的語法。
此時大概是2008年下半年和2009年初。
這個階段,寫的代碼其實是比較差的,不管從代碼風格,還是從代碼設計,模塊劃分等。不過鑒于本人良好的重構習慣和對代碼風格的極致追求,這段時期寫的代碼,基本上都看不到了。
第二階段(2009):可用
2009年這段時間,做了xx的一塊板子,M3的鍵盤板,svideo,萬能按鍵板等3個項目。
這段時間,學習了很多關于綜合,關于器件結構等的知識,在網(wǎng)上也搜了很多資料,自己也研究了altera的cyclone3的器件。還曾經(jīng)想寫一個ppt,把邏輯中常用的代碼,對應的綜合結構和布局布線結構都搞清楚,后來做的時候才發(fā)現(xiàn),跟理論值不一致,才作罷。這個階段也看了很多關于時序約束的內(nèi)容,不過此時對時序約束的理解還不深入
第三階段(2010-2011):好用
2010年主要做了兩個設計,一個是M2的發(fā)射邏輯,一個是M4的視頻邏輯。
發(fā)射邏輯是一個比較典型的例子,當時對邏輯設計有了一定的認識,也有了一定的想法。M2的發(fā)射邏輯是基于M1的發(fā)射邏輯的,但是被我完全重構了,此時開始考慮邏輯的模塊劃分,接口時序。
而且由于發(fā)射邏輯扇出較多,開始考慮代碼的布局布線與時序收斂。
同時,對代碼的書寫開始有要求,這個階段的代碼,應該說開始有了自己的風格,而且寫的比較好。這部分的代碼,后來未再修改,還可以在svn上看到。
M2的發(fā)射邏輯是做的比較順利的,在板卡回來之前1個月,基本上設計和仿真就全部完成了,也有一些時間來學習,后來調(diào)試也非常順利,發(fā)射幾乎沒出bug。
由于在M1做了視頻邏輯,M2的視頻由其他人負責,在做M4的視頻邏輯時,水平有了一定的提高,而且時間也比較充足,興趣也比較強烈。在M4的視頻邏輯上,做了很多重構的工作。
其中,lpc總線模塊,就重構過2次,對于狀態(tài)機的寫法進行了深入研究,svn上可以看到M4的lpc代碼和M1的代碼是不一樣的。
svideo部分的代碼,起初是09年xx寫的,后來我接手后,曾經(jīng)重構過一次,把代碼全部整理了一遍,并徹底搞懂。由于M4的視頻需求更改,由一路svideo變成兩路:svideo和dvr,所以又將這部分代碼再次做了顛覆性的重構。
這個階段,可以說對邏輯的架構,已經(jīng)有了初步的認識和一定的經(jīng)驗。而且視頻大多跟外設打交道,此時對時序約束已經(jīng)比較清楚了,有些時序上的問題,已經(jīng)可以比較容易的解決了。
此時寫的代碼,不管是代碼風格,模塊劃分,接口,邏輯架構,都已經(jīng)比較好了。
等待的時間不算太久,10年底到11年初,還做了一個M4的newc,完全是一個全新的邏輯,也算是初步了解了信號處理,而且全部從新的設計,也增加了架構經(jīng)驗。11年中,做了任意波的方案,雖然只做了方案,沒做具體設計,但是此時對于邏輯方案,架構,已經(jīng)有駕輕就熟的感覺了。
很快,機會就來到了。
2011年下半年,開始做M5的pcie上傳邏輯。
這個設計,完全滿足一個架構能力進階的要求。
第四階段(2011-2012):易用
上傳邏輯是一個別人留下的一個中等的、復雜的、功能正常的邏輯,對此做重構,挑戰(zhàn)還是非常大的。之前對此完全沒有了解。不過svideo的重構也為此打好了一定的基礎。
上傳邏輯的重構,應該說是做的比較好的,短時間內(nèi)將一個復雜的設計重構,而且設計上僅出了1個bug。后來該設計復用到后續(xù)所有的項目,M6,M7,M8,M9。
M5的聯(lián)調(diào),也僅用了2個星期,非常順利。然后各種模式的聯(lián)調(diào),也都非常順利的出了。
上傳相關的總結,已經(jīng)放在《pcie協(xié)議介紹,ip介紹,上傳邏輯介紹,上傳設計經(jīng)驗分享.ppt》
這個項目,是將全部的超聲邏輯,都放入到了一片fpga當中,所接觸到的、所能修改的架構,變得更大。也是一個非常好的可以提高水平的設計。
對于其中的xx、xx、數(shù)據(jù)緩存、pcie上傳都做了修改。
不過,之前的重構之路一直很順利,終于在M6上栽了跟頭。重構失敗,最終又退回到老版本。
其中種種,已經(jīng)放在《xx項目總結-邏輯方向.ppt》
經(jīng)過兩個項目的洗禮,對于邏輯設計,器件,時序,架構等等的認識,更加深入了。
第五階段(2013-):邏輯架構師
這個階段,主要主導完成了M7項目和M8項目。
▍邏輯工程師水平的V模型
第3章講述了一個邏輯工程師是如何發(fā)展的,并且給出了各個階段的特征,但是,仍然沒給出清晰的量化,本章,嘗試對這個問題給出一個解決方案。
邏輯工程師應該掌握的各種能力
大概設置了5種能力,每種能力在不同的階段有不同的要求。其中,設計完成能力是最基本的要求。
設計完成能力
第一階段:可以完成設計,基本知道verilog的語法,能夠把一個需求用代碼實現(xiàn)出來,并且能夠調(diào)試出來,經(jīng)常會上網(wǎng)搜索現(xiàn)成的模塊,對邏輯的硬件思維基本沒有
第二階段:開始關注代碼風格,開始把自己的代碼寫的風格統(tǒng)一,并且開始關注代碼的硬件實現(xiàn),突出標志就是開始關注rtl視圖,比較能明確的區(qū)分可綜合語句與仿真語句的區(qū)別
第四階段: 該階段已經(jīng)可以比較輕松的完成一個邏輯設計,而且結構合理,易讀,可復用
第五階段: 可以帶領一個團隊完成比較大規(guī)模的邏輯設計,分配不同的工作任務,可以準確的預估項目的風險,進度,可以準確的做出邏輯的整體方案,仿真方案,調(diào)試方案,對于整體的業(yè)務流有全面而深刻的認識
器件能力
第一階段:知道FPGA的意思,但是基本上不知道fpga的內(nèi)部結構
第二階段: 不怎么關注器件視圖。但是基本知道器件的大概結構,知道fpga里面有l(wèi)e,ram,dsp,全局等等,對邏輯器件有了基本的認識
第三階段: 此時開始關注器件結構,了解fpga的內(nèi)部架構,時鐘網(wǎng)絡,route,對時序約束有了基本的了解
第四階段: 對器件結構有了比較深入的認識,開始認識到不同廠家器件結構的不同
第五階段: 熟知各個廠家的各種邏輯器件的內(nèi)部結構,基本邏輯單元結構,以及由此帶來的代碼風格的相應的改變
時序約束能力
第一階段:基本不知道什么是時序約束
第二階段: 知道時序約束,會做時鐘約束,可以根據(jù)簡單的公式計算輸出輸出約束
第三階段: 懂得時序約束與布線的關系,熟練掌握最基本的常用約束
第四階段: 對時序約束有深刻的認識,可以主動設計整體時鐘和復位系統(tǒng)
第五階段: 熟知時序約束,并且能夠采取各種手段,解決各種時序問題
邏輯架構能力
第一階段:無
第二階段: 有一點點概念,知道大概可以劃分模塊,對模塊的功能,接口沒有要求,一般有需要就直接加一個接口信號,不能在項目開始就主動設計
第三階段: 開始考慮設計的復用,開始考慮模塊的劃分,注重模塊接口,平臺化等等
第四階段: 接手一些比較大的設計,開始有架構的考慮,對于模塊的劃分,模塊接口,模塊職責,整體方案的實現(xiàn),開始有更多的考慮,此時,可以做出比較好的,合理的方案
第五階段: 對整體的邏輯架構有所考慮,并且開始準確的劃分邏輯架構,模塊接口,功能劃分,工作職責,協(xié)同交流
時序收斂能力
第一階段:無
第二階段: 無
第三階段: 開始接觸到時序收斂,有單個時序不過的信號,能夠予以解決
第四階段: 開始主動設計時序,基本可以完成整個設計的時序收斂任務。
第五階段: 對于邏輯的布局,數(shù)據(jù)流走向有深刻的認識,能夠在項目支出就通過設計來保證時序收斂。
接口掌握能力
第一階段:開始接觸簡單的接口,
第二階段: 開始掌握如串口,spi,i2c等簡單的外部接口
第三階段: 開始接觸ddr,ssram,ad,lpc等等略復雜的接口
第四階段: 開始接觸pcie,transceiver,rapid io,phy,等等復雜且?guī)f(xié)議的接口
第五階段: 無,此階段,不需要用掌握接口的多少來衡量
邏輯流程掌握能力
第一階段:基本不知道正規(guī)邏輯流程,基本無設計文檔
第二階段: 能夠根據(jù)已知的流程完成設計,寫出文檔
第三階段: 比較熟練邏輯流程,并且能夠順利完成設計文檔
第四階段: 有比較嚴格的邏輯流程,并且完成各種文檔,對流程的認識比較深刻
第五階段: 可以根據(jù)現(xiàn)狀,制定合理流程和文檔要求
仿真驗證水平
其他
邏輯工程師水平的V模型
根據(jù)以上不同階段對各種能力的要求,可以完成V模型
社招邏輯工程師筆式題庫
最近公司招了很多人,不僅僅硬件在招,軟件也在招人,實際上,我是非常羨慕軟件的面試人員的,因為他們有筆試題。不過是自己出的也好,網(wǎng)上搜的也好,總之軟件的很多知識,是可以通過一份試卷來先考察一下的。我經(jīng)??吹杰浖娜税亚舐氄邘У綍h室,給一份卷子,做完后來面試一下,也許半個小時就面試完了。而我,每次面試都要一兩個小時。
我也在網(wǎng)上搜過邏輯的筆式題,不過,基本都是應屆生的,社招的人,看來早已經(jīng)沒有興致來分享一下自己的面經(jīng)了。
其實,我每次面試,有一半的時間,都是在問每個人同樣的問題,暫時就把這些問題,整理一份試卷吧,同時也參考上一章的V模型。
設計完成
以及畫出的框圖,是否清晰美觀。很多人畫的框圖,面試完后再看,完全看不出是個邏輯框圖。
該設計有多少代碼,方案、代碼、仿真、調(diào)試,分別用了多久
器件結構
時序約束
邏輯架構
時序收斂
接口掌握
邏輯流程
其他
注:(重要)
本文禁止二次轉載,違者必究,請與作者獲取授權。
知乎 -《一個fpga工程師的成長之路》 - yifei
原文鏈接見“閱讀原文”
-END-
推薦閱讀
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!