FPGA 工程師的核心競爭力是什麼?


調板子debug的能力。

FPGA工程師大致分兩類:FPGA作為產品的工程師和IC原型驗證工程師

先說前者,不管是RTL design還是做simulation的、上板測試的都算FPGA工程師,並且往往一個工程師者隨著項目進度會從頭做到尾,項目的輸出就是FPGA bitfile作為產品的一部分正常工作,所以導向就是最終上板的結果。從項目時間來看,前面coding和simulation佔據一部分時間,很多代碼還是復用之前項目的,而debug就分單獨模塊驗證、整塊FPGA驗證、軟硬體跨部門驗證、整體系統驗證等,調試佔用的比重越來越大。

而FPGA的特點決定了調試不太容易,相比simulation來說困難多了,出現一個issue先定位是軟體的問題、硬體的問題,還是FPGA的問題?如果是FPGA的問題,容易復現不?如何判斷是哪一部分模塊的問題?大致的問題在哪裡?如何設置debug點,使用identify/chipscope/邏輯分析儀去抓?出一個版本往往按小時算,一次設置trigger信號可能還找不到想找的點,需要多次去抓信號和出版本。這過程中,沒經驗的工程師是趕急趕忙地去出調試版本,或不知從何下手,忙很久卻勞而無功;有經驗的先分析推測問題可能出現的地方,分步驟去驗證問題的原因,能較快地定位在issue所在。這就是核心競爭力!當然要做到這步需要很多的積累,比如對產品架構有整體了解,對具體模塊、FPGA技能很熟悉,對常見協議如AMBA、DDR有一定經驗,要不然你又不是跳大神靠掐指一算就算出問題所在了。

IC原型驗證工程師,如另一答案所說,有的公司就是工程師兼一下把活幹了就行,有的則是正規的team專門做原型驗證,尤其是涉及到多塊大容量FPGA分割方案的。這裡FPGA與simulation相比優點就是在真實的物理環境中運行、運行速度快、能run大量的case進行回歸測試,缺點也很明顯,介入時間晚,移植到FPGA平台花的時間很長、需要處理大量的硬體相關問題如時鐘外圍器件管腳連接、debug困難等。隨著晶元規模擴大,二者各自的優缺點越來越明顯,越來越多公司開始使用Emulator,Emulator更偏向simulator的硬體化,離simulator更近,離FPGA遠多了(本人現在emulator AE)。

同樣,做原型驗證的工程師有什麼核心價值?別人搞不定的問題你能搞定,這就是價值所在,比如需要實際接硬體作為激勵源發某個特殊case才能復現的issue,重要性還很高,simulation搞不定,你在FPGA上搞定了,誰敢小瞧你?要是僅僅跑個流程,能用就行,隨便找個人都能玩通的活,公司又不是傻子給你那麼多錢幹啥?

綜上,你的工資是公司付給你不可替代性的成本,你越不可替代,你的價碼越高,如果太低你會跳槽走人,太高公司也會找機會把你換掉。這其中有普遍性分工的因素(比如普遍性而言design給的錢比原型要高些),也有具體個人的因素(你牛就該拿高價),不宜過分強調哪個極端。

---------------------------------------------

如何提高debug的能力?來個可執行性高的方法:給上司和相關人員發郵件彙報工作,整理思路並記錄過程,同時展示你的工作成果。

比如在系統聯調中出了個bug,先給上司口頭彙報下這個情況,然後去定位,到一個階段或下班前發郵件,先描述下環境配置和現象,讓別人知道是怎麼回事(有些人開頭就說具體現象,聽的人不知所云),然後你定位到這個現象發生了,稍微描寫下發生的問題;

接下來分析可能性,出現這個問題可能的原因,怎樣去確認是哪個環節發生的事情,並且你因此做了哪些操作去確認來進一步縮小範圍;

如果是哪個小範圍的問題,可以做哪些操作去進一步確認問題,比如列印中間變數結果、出測試版本加chipscope信號去抓取數據、bypass某些旁路等;如果一次性沒找到問題的根源,那之前的操作排除了哪些可能,接下來還有哪些操作可以去做去確認,需要做的工作和工作量、時間評估、需要的資源支持評估等;

如果通過debug找到了issue所在,分析下產生的原因在哪裡,是低級錯誤、test case沒覆蓋掉、健壯性不夠、軟硬體配合、還是架構上有問題?如果是簡單地修改該怎麼做,要多少工作量,影響有多少?如果是完全解決這個issue,涉及的範圍有多廣,收益和風險在哪裡,該不該做?提出建議,讓上司等決定。

如果問題一直找不到,那可以採用什麼樣的手段規避掉,收益和風險又在哪裡?

如果問題不復現了,可能產生的風險有多大?需要記錄下來,下一次可能又會出現。

如果把一次次的郵件內容同時整理下來,放在word文檔里,適當編輯下格式,加上日期、環境配置等信息加在郵件附件里,更往上點,有專門的issue track平台在上面記錄,那就更好了。


看了幾位回答者的答案,結合自己接觸FPGA一段時間的理解講一下自己的看法。

首先想說一下對於樓主的問題,即FPGA工程師的核心競爭力,其實FPGA工程師在真正工業界還是有細分的,大致可以分為兩部分,做IC原型驗證的(包括design和verification),用FPGA開發產品的,做IC原型驗證大多不需要了解演算法,只是根據設計人員的設計框圖實現邏輯(大公司);做產品開發的可能離具體的應用和演算法更近一些,相當於將特定應用和演算法做硬體實現。

我這裡答案更加側重的是做FPGA實現這類的工程師(包括IC原型驗證的design和產品設計的design)。我將更細緻的給出一些我認為重要的能力。

1,RTL設計實現能力。前面幾個答案大多提到了演算法實現能力,我將這歸結為RTL設計實現能力的一部分,RTL實現是FPGA工程師或者說HDL開發人員的入門首先接觸到的東西,我將其總結為如下幾點:

a,硬體的實現思路,HDL設計實現和軟體實現的思路不同,HDL作為一種描述語言,側重的是對硬體的映射和連接關係的描述,當然也有邏輯、處理的實現,但歸根揭底所有的邏輯都是在硬體上實現的,最終都會映射為加法器,乘法器,狀態機,計數器,編碼器(優先),解碼器等等一些列硬體資源,對於邏輯拆解和抽象能力將直接關係到最終編碼的效率。簡單的來說,好的HDL編碼人員編寫的代碼更容易被編譯器綜合,對於初學者來講,編譯器的綜合(包括後續Map布局布線)時間以及warning數量以及最後綜合出來資源和你預先設計的吻合程度可以做為考量HDL代碼好壞的一種方式。

b,資源和時序的優化能力,資源和時序的優化能力是作為FPGA(ASIC)開發人員進階的能力,這裡就需要大量的經驗和反覆的迭代,不斷對硬體(FPGA底層結構)深入理解才能夠達到。對於FPGA來講和ASIC設計有所不同,ASIC的硬體實現很多是由綜合器決定的(比如用什麼樣的乘法器),但是對於FPGA來講,資源全部是固定的,FPGA資源可以分為三塊,運算邏輯(LUT DSP carry chain等),存儲單元(REG SRL BRAM DRAM),IO(各種高速低速介面),相同的演算法應用可以用不同的資源,不同資源的組合方式來實現,那麼如何用更少的資源,更快的主頻實現某一演算法,這就需要有很強的資源和時序優化能力,通常這種優化是經過多次迭代的,當然通常頂層的設計人員會對系統層次的資源和時序有著較為準確的把握,也會給出各個模塊的設計指標和邊界,但是不同開發人員水平和能力最終設計的結果是不一樣的,好的資源和時序優化能力是FPGA工程師的重要競爭力。

在反過頭來說軟體開發,其實從優化上來講和RTL設計或者說HDL開發沒什麼不同,好的軟體設計人員更了解計算機底層,對於資源(時間,空間)的使用,對於演算法的效率的分析也更加深刻,因此也能寫出更好的軟體代碼,我覺得在這一層面上無論軟體還是硬體開發都是對於邏輯的抽象能力(當然術有所不同)。

2,硬體調試能力。調試能力也是前面答案基本都提到的,我向這也是作為FPGA開發人員和所有從事硬體開發人員都一直認可的能力或者說核心競爭力。舉個例子,在找工作的時候如果你能向別人展示出你無與倫比的調試能力,別人沒有理由不要你。

調試能力需要大量的現場經驗作為積累,同時也需要人的邏輯分析能力,當然還需要耐心,細緻等等人的高尚品質 ,這裡我也做一個小小的總結。

a,FPGA本身調試工具的使用,我想這裡又可以分為兩個階段,模擬和上板調試,模擬我想作為FPGA工程師都不陌生,大型的開發,通常有多個不同層次的模型,基本演算法原理的模型,硬體模擬模型(通過C或matlab做定點模擬),然後再試HDL模擬模型(通過modelsim模擬最後的實現),模擬是一門很大的學問,現在都有專門的verification人員做,但是對於普通FPGA開發人員來京,如何利用模擬這個工具來高效率的調試是一個值得思考的問題,一些非同步的輸入情況如何用模擬來排除問題,上板調試發現問題,根據問題輸入情況模擬排除問題,這些都是利用FPGA模擬工具來調試的手段。

對於上板調試,主要就是利用chipsocpe添加調試信號,這裡又涉及到如何利用有限資源(chipsocpe信號數量和深度)來排除問題,通常在上板調試發現問題後,模擬又無法定位解決(模擬是有和硬體不一致的情況的,比如一些RAM衝突的問題),經過分析加入合適的調試信號,設置合適的觸發條件,然後定位排除問題。這些說起來容易,實際還是需要大量的上板經驗,特別是大型系統的調試經歷不斷磨練提升。

此外還有一些應用需要配合外部儀器來獲取更多信息幫助定位問題,包括示波器,譜分析儀,網路分析儀等常用實驗室儀器。

b,問題定位分析能力,上面講的是都是利用工具來進行調試,但是硬體比軟體難得地方就在於其調試的複雜性,很多時候無法利用工具進行問題的定位,比如現象無法復現,輸入條件隨機或者過於複雜,涉及模塊邏輯很多等等情況,這時候去定位問題大多靠想,就是邏輯分析來排出問題。我認為這是FPGA工程師真正的核心競爭力,因為這不僅僅需要經驗的積累,同時還需要很好的邏輯思維和分析能力。

c,系統調試能力,系統調試能力是更加難得一項能力,通常做到系統層次的人員不會再具體的寫代碼或者上手調了,當然對於小團隊小公司還是得自己上手。系統層面的調試能力一方面是對FPGA頂層的調試能力,各個模塊構成的片上系統的問題分析定位能力,通常各個模塊在系統聯調之前都是經過驗證的,但是在聯調的時候還是會出現各種各樣的問題,這時候的問題反饋的信息更加少,設計的邏輯模塊更加多,如何一步步抽絲撥繭定位到問題所在,並且採用什麼樣的方式去解決(這時候通常不是單獨解決一個內部模塊就行的),都需要很深厚的功力。

另外一方面是整個硬體軟體系統層次的調試能力,要看得懂原理圖PCB,懂硬體,了解軟體介面,現在FPGA越來越講究Hardware Software Co-design,軟體硬體這個系統層次的調試能力對人的要求更加高,當然這通常已經遠離了通常FPGA工程師的職責,但是我認為這是作為FPGA工程師上升通道中的重要能力。

3,更加高層次的,寫了很多感覺其實都是其他答案講到過的,只是可能更加細節一些。更加高層次的東西,我個人的理解,還是系統層次的東西。演算法和架構,怎樣將一系列數學公式,轉換為算演算法,在最終形成系統硬體的實現;整個系統採用什麼樣的架構,純FPGA,arm+FPGA,DSP+FPGA,SOC FPGA;FPGA頂層採用什麼架構,通用匯流排還是自定義匯流排,如何考慮通用性和可擴展性等等,再大至什麼樣的應用適合用FPGA實現,什麼樣的問題適合軟體實現,怎樣的組合能更加低成本高效率的解決問題,這一些列問題涉及的東西就很多了,我講的都是以FPGA為核心做開發要面臨的問題,其實其他平台的硬體、軟體產品都是類似,系統層面的問題都是複雜的問題,同時我也認為,從系統層面去優化,解決問題才是最高效率的方式。

自己水平也有限,路還漫漫,希望自己、題主都能一直進步。


據我了解,FPGA工程師的核心競爭力不是FPGA。

FPGA只是一個工具,干任何工作都需要會使用工具。這個只能算前提和基礎。

FPGA工程師的核心競爭力是具體化的。

業務不同,需要的能力不同。其他回答都有具體的說明。

如果你是一個學生或者剛入行的freshman,先把工具用溜了再談其他。

會用工具也不是一天兩天的事情。謹記。


謝邀,這個要看具體的工作內容了,我們公司用FPGA只是做數字演算法驗證,rtl都是asic前端人員寫好的,跨平台的,直接在FPGA上就能跑,所以我們公司壓根就沒有專職FPGA工程師,都是前端人員牽頭,聯合晶元架構師,系統工程師一起來做。反正只是驗證用,管他多糙,能用就行。

如果是基於FPGA開發產品上,核心競爭力應該是數字電路設計,和asic前端類似。


衡量FPGA工程師的競爭力強弱,主要以下幾點:1.應用Verilog或VHDL或其他硬體描述語言實現演算法邏輯的熟練程度;2.對特定領域(比如視頻處理、電機驅動等)背景知識的掌握程度;3.用FPGA來實現的產品的商業模式,客戶需求,對FPGA技術的未來發展的估計等。

對不同階段的FPGA工程師,他/她的核心競爭力是不同的。

初級工程師,只看他的編程調試能力。中級工程師,看背景行業知識儲量和演算法水平。高級工程師,看統籌各項資源的能力,包括人脈、管理水平等,那時候已經不太自己編碼了。


個人認為FPGA工程師的核心競爭力主要是兩方面:編程調試經驗和演算法實現能力。

前者,任何一個看過相關教材或者有FPGA設計經驗的工程師都知道編程能力和調試經驗對一個FPGA工程師來說有多麼重要,從需求分析出發,程序頂層介面設計,功能劃分,模塊編程實現,再到個體模擬分析,全局模擬,實現以及後期調試debug,都需要日積月累和反覆實踐,說白了都是時間換來的。

後者,研究一些演算法在FPGA上的實現性個人覺得是FPGA未來發展的一個方向,尤其是一些並行運算能提升效率的演算法。這樣做FPGA才能不僅局限於硬體,在FPGA與ARM等通用處理晶元的融合越來越廣泛的未來,一個FPGA工程師也許就不僅僅局限於FPGA了。


核心競爭力就是電路的實現能力,給你一個演算法或者協議,怎樣快速理解它並快速實現而且能做到資源和性能的最優,或者在性能滿足的情況下做到資源最優,這些才是最重要的。資源最優有時候需要從整體架構上去把握,架構的改良而產生的資源節省是最直接的,有時候又需要從細節著手,一個電路unit被例化很多份,每一點節省合起來就是大節省,又或者是否可以考慮資源共享多路資源變一路資源。對於一些資源多的細節電路,是否有辦法把資源搞下來,因為這些都是實實在在的硬體實實在在的錢


FPGA工程師的核心競爭力是出差交付產品。

因為上到HDL+C,下到外圍硬體PCB,都得懂一點。而每次出了問題,一般都是FPGA的bug。


外設很多啊,這屬於硬體範疇了。你希望了解什麼呢


FPGA 只是工具,達到目的是關鍵。演算法最重要


沒有相應專業背景的FPGA工程師,是走不遠的


急缺FPGA工程師呀,歡迎推薦自薦!待遇從優,全員持股!無人船行業,極具競爭性,潛力無限的平台。簡歷收取郵箱: jiayi.wang@yunzhou-tech.com


還在學校···感覺體會還比較少~~做FPGA嘛···核心競爭力。。。第一點~~是會用對吧~~FPGA作為一個控制晶元··功能都不知道就不好了····能用FPGA控制存儲期間,輸出輸出信號格式,實現各種協議等等···FPGA特點就是並行操作。。咱快啊···實時性圖像處理加顯示你用軟體試試看··DSP的延遲都受不了·對吧··只要還沒有能突破這個有點的·咱做FPGA的就還下不了崗····做硬體分做邏輯和真做硬體(我們一般戲稱實驗室的默默奉獻畫PCB做布局布線的「畫板子的」···這裡不艾特了···師兄放過我···)做邏輯就是要熟悉FPGA工作原理···以最少的資源佔用和最少的時間延遲實現需要的邏輯功能···當然由於FPGA本身局限性(比如不好做浮點運算啦···不好做開方啦這種····也不是不好做啦···就是代價太大了···做個簡單計算耗用那麼多資源太不值得了···)··這就看經驗了靈光一閃了···奇技淫巧解決問題能力?~~(好吧··反正我不具備~~調個驅動能弄一個月的廢柴就是我~~~)畫板子的嘛···不懂···不過感覺很高端··考慮線長··考慮在小型化的板子上布局···反正「畫板子的」都是大神··嗯··師兄不會打我了···多層板子設計等等··這個更需要經驗了···所以畫板子的老手都是寶~~飄過···以後再寫把···跟寫網文一樣挺好玩的···


快速debug定位問題


看了很多人都說debug的能力 然而我不是怎麼看 作為一個FPGA老手 從V4器件玩到V7器件 一直都是一個人從架構編碼一直玩到最後的燒flash,五年下來到現在,其實我花在debug上的時間已經比較少了,基本上搭框架和編碼的時候就會知道那些地方容易出問題需要上晶元看一下,如何會方便上晶元觀測,所所以我現在上晶元的時候大部分的花銷只是用來驗證一下而不是找問題了

怎麼就沒人談談搭在FPGA上的各種外設器件呢


推薦閱讀:

十年前的 ASIC/SoC 設計跟現在的 ASIC/SoC 設計,發生了哪些變化?

TAG:現場可編輯邏輯門陣列FPGA | 數字電路 | ASIC | 數字集成電路 | 晶元設計 |