1、?問:您認為想學FPGA的話,先學好什么才最重要? Andrew:我們玩FPGA的通常就是跟數字電路打交道,要想玩得轉,必須先學習并掌握最最基礎的數字電路和HDL硬件描述語言,當然這只是入門必備,實際上遠遠不夠。個人拙見,要入行除了至少掌握一種FPGA的仿真及開發調試流程之外;起碼還要了解一些模擬電路知識,掌握諸如電源紋波、時鐘抖動、信號質量等經常需要測量的硬件參數的測試方法;起碼還要掌握一種原理圖和Layout設計軟件,能夠查看分析調試電路板上的電路模塊,如電源、時鐘、存儲器、配置、I/O和高速收發器等模塊;起碼還要掌握一種單片機的開發流程,項目中難免有一些需要配置控制的需求,使用外置單片機或者內置ARM硬核或者其他軟CPU來實現,簡單又方便;由于本人水平有限,其他方面這里就不再贅述。 那么,針對FPGA入門學習的一般流程,簡單總結一下,供朋友們參考,有經驗的大牛可以繞道:
首先要有開發平臺,把該準備的都準備好,磨刀不誤砍柴工。
比如ALTERA的Quartus II軟件、開發板和配置調試工具USB Blaster,以及仿真軟件Modelsim SE。軟件可以從網上下載,入門功能的許可的和諧方法一大堆;開發板和USB Blaster可以借,可以買,動手能力強的朋友,自己畫一塊也行。對于初學者,建議找一塊有詳細配套教程的開發板。
對于新手來講,按部就班地學習往往就是最快的學習方法。
照貓畫虎盡管囫圇吞棗一知半解,但起碼能把開發流程摸熟,能跑起來。剛拿到開發板,肯定是丈二和尚摸不著頭腦。這個時候,建議先根據開發板的配套教程,把原理圖上的各項模塊功能厘清,把FPGA 周圍的電源、時鐘、復位、配置、GPIO 和連接器等的電路原理理一理分析分析。再按照配套教程中介紹的流程,把配套的測試工程跑通,在這個階段,把FPGA開發所涉及的RTL輸入,綜合、前仿真、布局布線、后仿真、配置調試的流程摸清楚。學習新東西的過程中,難免會出現一些不熟悉的“疑難雜癥”,切莫灰心,堅持就是勝利。當然,往往這個時候,有些朋友開始嫌棄教程寫得冗長、寫得爛,或者碰到英文教程推辭看不懂,就開始閉門造車,天天碰壁,逐漸喪失興趣和信心,當開發板上面落滿了灰,你還好意思在跳槽的時候吹牛有過如何豐富FPGA 經驗嗎?
熟悉了開發流程。
接下來就可以分析或者改寫原教程中的代碼或者模塊,有針對性地去實現一些功能模塊,并且通過一些軟件自帶的調試組件來輔助驗證結果是否符合預期,如SignalTap II 等。無論是原廠的單板,還是FPGA 愛好者做的單板,配套例程都會有一些經典的電路實現案例,比如基本的分頻器,簡單的I2C 通信、SRAM 讀寫控制,以及稍微復雜的SDRAM 讀寫控制等,認真分析別人如何寫代碼實現所觀測到的時序,與此同時,閱讀相應模塊手冊或者器件內部組件文檔中的時序描述章節來對比分析,查閱網上別人分享的調試心得博客、論文等,直到理解并掌握為止,并且適當地做些筆記歸納總結,所謂時常記記,以防忘記,給其他人或者給以后的自己參考。
光靠自己研究,有時會被一些問題阻塞思緒,大腦會卡殼。
那么,加入一些學習小組、專業的討論圈子是有必要的,是利大于弊的,比如電子發燒友論壇、FPGA 產業圈QQ 群,分享心得,咨詢問題,探討人生。這個過程,也有可能誤入歧途,有些朋友可能過分享受社交的愉悅,迷戀于灌水的浪潮中。建議在學習工作的時候,把精力主要放到學習研究中,切莫墮入無聊的灌水大軍中。除了線上交流,大家也可以參加電子發燒友等社區組織的線下沙龍活動,面對面地交流學習,探討問題的同時還可能交往一些好朋友。跟別人討論問題,目的是為了解決問題,處理過程需要一些技巧,建議盡量把已經遇到的問題的器件型號軟件版本、觀測到的癥狀、仿真調試的波形、已嘗試的方法和已分析的可能原因先羅列出來,讓能幫你且有時間有心情幫你的朋友快速及時地分析出原因并給出解決方法,這是一個簡單的討論問題的方法論。別人幫你是恩德,不是義務。如果沒有人幫到你,不要灰心,繼續想其他辦法。?
有一點基礎了,就可以適時選擇一些項目練手。
不僅可以鍛煉FPGA 開發能力,還可以增強信心,沉淀經驗,獲取價值體現。老是拿著開發板玩,思維容易囿于開發板所涉及的小小“圈套”,其實開發板只是個學習工具,開發板玩得再熟,也只是熟悉那上面的幾個小模塊而已。FPGA 應用廣泛,相關產品層出不窮,大把的就業及市場機會,如果光學不練,那真是白瞎了時光,浪費了生命。? ?
2、?問:從事FPGA 開發工作有些什么要求呢? Andrew:坦白地講,這個問題很難回答,不同的公司、不同的產品、不同的項目組、不同的研發人員需求千差萬別。不過,可以討論討論。公司與研發之間是雙向選擇,公司要求產品具有一定的技術優勢和穩定度,能夠及時上市覆蓋一定的細分行業,研發需要公司按照合同提供合理的待遇和福利。大公司人員分工相對比較清晰,FPGA 工程師需要配合系統工程師、算法工程師、軟件工程師、硬件工程師和測試工程師完成產品單板的功能設計和穩定性測試,因為不是一個人在戰斗,所以更需要注重團隊合作。而且大公司往往與芯片的供應商有戰略合作關系,獲取相應的支持資源在力度和速度的優先級上遠遠高于一般公司,這對FPGA 技術層面的修煉是大有裨益的。 ?
在這樣的公司里工作,竊以為需要培養:
自我學習能力
公司如果有相關培訓,抓住機會好好學習;如果沒有,平時在工作之余要加強專業知識充電,把自己打造成不可或缺的人才。另外要注意公司不是學校,公司要的是能干實事的員工,不是夸夸其談紙上談兵的趙括,不能天天想著學習而不干活。
溝通協調能力
遇到疑難問題要及時發起團體討論診斷,切莫蒙頭自己死扛,一來自己壓力大,二來影響項目開發進度,必要時要及時把芯片供應商的支持團隊拉進來共同討論分析。要意識到自己的不足,尊重團隊中其他成員的意見和建議,經常鍛煉自己的溝通協調能力,為以后自己帶團隊做準備。
抗壓能力
FPGA 開發的難度高居主控芯片(CPU,DSP,FPGA,專用芯片等)的榜首,芯片廠家為了配合市場需求,連年不斷升級器件軟件,這對于研發來講就是災難,但是為了提升最終產品的競爭力,提升我們自身的價值,我們不得不去學習掌握。另外公司項目往往嚴格按照預期進度開展,如果遇到難題,加班加點是必須的。所以我們平時一定要多鍛煉身體,多看書,培養一定的興趣愛好,以排解項目開發中的苦悶。像某為那樣,只注重工作效率,把研發當作加班的機器,時不時就有報道研發跳樓的新聞,簡直就是業界的恥辱。
職業生涯規劃能力
大公司職業任務單一,對專業深度要求高。要逐步規劃調整自己未來的路,往專業深度走,做技術專家;往專業廣度上走,做系統工程師;往技術之外的崗位走,轉行。工作要積極主動,選好的路就好好走下去,切忌朝三暮四,濫竽充數,人浮于事,碰到好光景,還可以混日子;碰到諸如當前這種外企裁人潮,諾基亞、思科、微軟等公司紛紛大裁員,老大不小的南郭處士再就業難度就比較大。凡事都逃不過因果關系,給公司努力工作,就是為自己的未來努力工作。只要有能力,將來還是有機會出去自創企業,創造更多社會價值。 小公司自由度高,單獨的FPGA 工程師的職位設置不太常見,往往圍繞著項目的需求,工程師既要當爹又要當媽,硬件軟件邏輯機械模型一起搞。從表面上看,要做的事情比較雜,新人往往感覺在打醬油,跑龍套。有一些朋友耐心比較差,容易陷入經常跳槽的怪圈。其實呢,小公司有小公司的好,產品的復雜度相對來講不高,研發出項目的速度比較快,數目也比較多,容易積累自身的成就感,這感受和大公司里面有時的無力感有天壤之別。再者小公司由于企業規模小的原因,直接做平臺與大公司競爭的可能性不大,往往都是做一些圍繞大公司平臺的配套產品,或者做一些大公司不愿意做或者尚未注意到的新的細分產品。作為研發,能夠直接或間接接觸終端行業應用,對產品的功能理解直觀透徹,對行業也有一定的調研,將來很容易出去創業,做出更加細分的行業產品。 在小公司工作,竊以為需要鍛煉:
產品設計的全局觀
主動去研究產品的應用需求,整合現有的方案,揣摩可能改進的部分,將其開發設計為產品的亮點,贏得細分行業的市場。產品本身技術含量不高,所以我們也沒有必要糾結一些技術細節,只要能實現能出產品,就是研發的價值體現。
技術的廣度
多了解一些常用的芯片平臺,熱門的實現方案。產品在設計過程中,盡量選擇成熟的芯片平臺和結構,降低產品研發的風險和投資。
溝通能力
小公司的老板一般不太注重研發,對研發的投入力度有限,研發團隊里往往只有光桿司令幾人。長期欠缺溝通,有些朋友可能表現得比較木訥,比較悶騷,其實對今后的職業生涯是有害處的。一定要找機會與公司其他部門的人溝通交流,不要給自己畫圈。平時要積極參加一些線下沙龍,活動,鍛煉自身的溝通能力。
耐心。
人生漫漫,來日方長,剩者為王。所謂干一行愛一行,機會永遠留給有準備的朋友。? ?
3、?問:初級工程師應具備哪些專業技能? Andrew:至于FPGA 工程師的所需的專業技能,仁者見仁,智者見智,我在第一個問題的回答中也提到若干。這里專門羅列一下我個人淺見,僅供參考:
時序的設計和仿真能力
時序是設計出來的,一些常見的電路模塊必須要掌握,如流水線操作,狀態機,localbus 接口,存儲器讀寫等電路的時序設計。FPGA 相關的著作多如牛毛,這里推薦兩本:《FPGA Prototyping by Verilog Examples》,美籍華人Pong P. Chu 針對Xilinx Spatran3E 開發套件編著的Verilog 基礎教材,可以在網上下載英文版的pdf,可以自行打印成冊參考;另外一本有中譯本出版,可以在Amazon 購買,作者克里茲,孟憲元翻譯的《高級FPGA 設計 結構、實現和優化》,書很好很薄,翻譯得有待改進。這兩本可以作為學習FPGA 方法論的“紅寶書”。
電路調試能力
穩定的產品是建立在不斷調試改進的基礎上的。熟練使用常用的測試工具,如萬用表、示波器、邏輯分析儀等。熟悉FPGA 廠家提供的調試工具,對于FPGA設計事半功倍,如前面提到的SignalTap II。一些輔助的調試工具最好也能夠掌握,如串口、網絡報文分析工具等等。電子設計相關的小工具有很多,根據自己的工作需要適當選擇。
文檔閱讀和編寫能力。
作為一名FPGA 工程師,免不了與器件軟件的英文文檔打交道,閱讀文檔要先是搞清楚幾條:讀哪些文檔哪個章節,在哪里找這些文檔。我想這些一時半會也講不完,我曾經在某論壇發了一個關于ALTERA FPGA 資料列表的帖子,很受歡迎,至今仍然在熱帖之中。建議經常主動與相關芯片廠家的FAE 溝通,獲取有效的直接的技術支持;當然文檔是需要自己讀的,別人不能永遠幫你讀。再一個,公司內部技術積累,編寫文檔也是必要的,有一些工具需要掌握,如畫波形的TimeGen 或者Timing Designer,字處理軟件Word或者WPS 等。關于文檔建設,有些公司不太重視,其實文檔很重要很必要,對團隊內部審閱討論,對未來的自己參考都是有用的。
演講溝通的能力。
俗話說,光說不練假把式,光練不說傻把式,又說又練真把式。團隊內部討論產品需求,方案規劃,問題診斷,都需要演講溝通。甚至請求老板加薪,羅列自己的成果也需要一定的演講溝通能力。可以適當地借用工具來輔助,比如PPT。?
? 4、?問:自從業以來,遇到最大的困難與挑戰是什么?能否給我們分享些您的經驗以及心路歷程? Andrew:對我個人而言,在學習FPGA 的道路上所遇到的最大的困難和挑戰是在大學期間發生的。由于高中階段過分著迷于網頁設計,疏忽了學業,結果只考上一所不太有名的工科大學。大一結束的暑假,沒有回家,被老鄉介紹到當時由某老師組織的DSP 小組中打雜。小組里有兩撥人,一撥人研究基于TI DSP 的指紋識別,另外一撥人研究ALTERA FPGA,基于友晶的DE1 開發板。當時剛剛念完《電路》,比較好奇附錄章節的MATLAB 實驗,所以玩過一陣子MATLAB,用來解電路的習題。那個時候對DSP 和數字電路都不懂,剛好小組里研究DSP 的人比較多,FPGA 小組還有名額,我就被分到FPGA 小組。短短兩個月暑假,老師給我們分配了MIT 的《基于MATLAB 的數字信號處理實驗》中的一些習題任務,同時我們也自學了《數字電路》中的部分章節,學會了 Quartus II 的基本操作流程。
大二上學期,我基本把DE1 開發板所配套的僅有的幾個實驗例程都跑通了,算是入門了。那時也不曉得FPGA能干啥,反正就是比較著迷。老師平時給我們介紹一些學習方法,布置一些實驗任務,剩下的就是自我學習完成。好景不長,不曉得什么原因,我們那個老師失蹤了,至今我都沒有他的音信。加上學校懂FPGA 的人屈指可數,我請教過很多老師,但都是玩單片機和DSP 的居多。也郵件聯系過駿龍科技和艾睿電子,最終都是石沉大海,沒有回信。所以從大二開始,我對FPGA 純粹就是獨自在學習。這對我來講,是FPGA 學習道路上最大的困難和挑戰。 還好我在網上發現了蕭鴻森 oomusou 的博客,他以前搞軟件的,當時他30 多歲在臺大讀研究生同時負責本科FPGA 實驗的助教,他寫了上百篇基于友晶DE 系列開發板的實驗步驟及心得的博文。
我幾乎把蕭老師的大部分博文都深入研究實驗過,蕭老師寫的博文主要是為了帶臺大本科的FPGA 實驗課,行文完全按照寫論文的格式,論述深入淺出,對實現原理和代碼的解說非常詳盡,所引用的內容也一一標出。這段自學經歷對我有深遠的影響。再后來我認真研究過SOPC 系統和Nios II 軟核處理器,加入了著名的“SOPC 技術聯盟”QQ 群,群主騰龍大哥,張景秀,是《SOPC 系統設計與實踐》的作者。在此群中我認識了很多FPGA 愛好者,一直相處到如今。所以我認為網絡的力量是無窮的,不論身在何方,只要感興趣,可以自學任何技術,我個人的經歷就是生動的案例。 最后我拿楊振寧老先生解說過的“真情妙悟著文章”來總結一下FPGA 的研習心得。首先要存真情,要有興趣去學習,去摸索,興趣是第一老師;然后如果能夠在學習研究的同時獨立或者與別人合作完成一些小成果,比如參加電子競賽實現一些力所能及并且能體現自己想法的功能模塊,這就是妙語,有自己的積累和閃光點;最后著文章,就是經年累月,在項目實踐中學習總結,逐步沉淀為一定的專業修養,將自己的思想凝結在產品的開發設計中。? ?
5、?問:您認為從“Junior”工程師成長為“Senior”工程師的過程有哪幾個階段呢? Andrew:這個話題有難度有深度,恐怕我個人能力不夠,不好駕馭。竊以為從產品設計的層面上講,初級工程師也許只能覆蓋一些基本的指定的功能模塊開發設計,可能還比較吃力,過程中可能還需要向先進請教,工作的獨立性也需要逐步加強,所開發的產品可能考慮得不全面。但是他們有優勢,年輕好學,積極主動,沒有明顯的過時的思維慣式和不良的工作習慣,欠缺的只是工作經驗,如果公司內部有好的人才培養機制,那么成為高級工程師是早晚的事。相比較于初級工程師,高級工程師更加擅長于系統架構層面的工作,可能具體的執行層面不一定比初級工程師熟練,但是他們身經百戰,對行業應用了如指掌,能夠敏感地挖掘出行業潛在的需求,并及時轉化到產品項目的研發架構及計劃中。他們是戰略性人才,是研發型公司不可或缺的頂梁柱。 一般來講,在初級工程師階段,所能做的就是打打下手,做一些別人指派的工作,研究實現某些具體的簡單的可能有參考的項目模塊,同時逐步積累一些已經驗證過的項目模塊的開發經驗。然后下一步就是自己能夠獨立承接并完成一些有規劃的有指標要求的項目,有一些獨特的見解和專業的沉淀,這個過程可能對于不同公司不同產品在時間跨度上各有差別。那么最終就是量變導致質變,項目開發的多了,對行業應用的認知就越來越清晰,自然而然就升華蛻變為高級工程師。 ?
6、?問:在您生命中曾經有哪些人對你造成過影響?給你的啟示又是什么呢? Andrew:很多人,主要是我不同時期的老師們和朋友們。給我的啟示就是學習別人的長處,正視自己的短處,展示自己的特別之處 ?
7、?問:身為一名資深FAE 不知道您對這個崗位又有怎樣的看法呢? Andrew:有一個小故事,大家可能耳熟能詳。從前有個人去看醫生,他說自己很沮喪,生活無情而殘酷,在這充滿威脅世上覺得非常孤獨。醫生說:“不要緊,城里的馬戲團有位著名的小丑,會說所有笑話。看了他的表演,你就不會再煩惱了。”那個人哭著說:“可是醫生,我就是那個小丑。”這個故事可能有些夸張,但我認為也在一定層面上反映了咨詢支持從業人員的現狀,FAE 可能也概莫能外吧。 FAE 是研發人員最真誠的朋友!他們給研發人員推介最先進最合適的技術方案,幫助解決一個又一個已經遇到的技術難題,并且及時指出可能出現問題的規避方法;在加快研發產品速度的同時,也間接地直接的被傳導了一些研發壓力,那么當不同方向的壓力傳導到單個FAE 的身上,FAE 的壓力也在倍增。他們可能有時沒有及時回復你的郵件,沒有接你的電話,那是因為太忙了,請不要罵娘,請耐心等待。
FAE 是一份極具挑戰的工作!尤其是主動器件的FAE。需要時刻保持積極主動的學習精神,第一時間把芯片廠商的最新技術學習消化并及時傳播給研發朋友們;需要良好的腦力和體力,才能夠在短時間內響應及回復來自于不同公司、不同項目、不同研發人員的不同層面的技術問題。
FAE 是一份幸運的工作!他們能夠接觸各種各樣的行業應用,能夠向各種各樣的研發人員學習,領略他們寶貴的絢爛的開發設計思想。
編輯:黃飛
?
評論
查看更多