技術(shù)面:
首先就是自己的一個簡單介紹,然后就問我懂不懂verilog约急,然后就開始了技術(shù)面了伙单。
基本知識
1.verilog關(guān)鍵字考察
如buf凉倚,event健霹,include默色,initial等等
2.綜合情況哮笆,可綜合和不可綜合
Delay菇曲,task沉馆,initial码党,always的列表中有兩個時鐘等
可以參考鏈接:
3.給了一段verilog,改錯斥黑,關(guān)于case的項沒有補全揖盘,產(chǎn)生鎖存器的一個例子
4.基本電路,如二分頻锌奴,四分頻兽狭,五分頻,邊沿檢測電路
發(fā)現(xiàn)面試官喜歡要求直接畫電路圖鹿蜀,而不是叫你用verilog來實現(xiàn)箕慧,平時也沒怎么觀察電路,這個是我面試收獲比較大的地方吧茴恰,一定要關(guān)注自己的一個電路的實現(xiàn)颠焦,要有一個電路的概念,建立硬件設(shè)計的思想往枣。向著最高境界靠攏吧“手中有代碼伐庭,心中有電路粉渠,腦中有時序”
5.如何使用signaltap,(A和X公司的說一種就行)
6.testbench使用
7.reg似忧,sram和dram速度比較
8.STA了解程度
9.IP核如RAM使用渣叛,RAM的IP核的一些對外接口(。盯捌。淳衙。好久沒用了,根本不記得)
10.FPGA的內(nèi)部結(jié)構(gòu)饺著,LUT之類的箫攀。
項目:
我在項目經(jīng)歷中寫到了使用dsp+FPGA來實現(xiàn)一個運動控制系統(tǒng)。
FPGA與dsp通信這塊著重的問題幼衰,這個就是表述清楚了就行靴跛。
技術(shù)面感覺不太好,自己也沒做太多的準備渡嚣,我就是把我知道的盡量告訴他梢睛,PS:第一次參加找工作的面試,也有點小緊張识椰,不過給面試官的感覺就是我確實做過FPGA的開發(fā)绝葡,并且有志于IC前端,后面還和面試官聊起來了腹鹉,他問我如果能進入華為的話怎么工作之類的藏畅,還有就是家在江西,以后準備在外面工作嗎功咒,我說在江西難找到對口的工作愉阎,以后肯定在外面工作的。反正整個下來有將近40min力奋,但是感覺還是過的挺快的榜旦,也順利的進入了綜合面。
綜合面:
首先景殷,也是一個簡單的自我介紹章办。
綜合面就不會問太多的技術(shù)問題,主要是問我的畢業(yè)課題的一些東西滨彻,說為什么要這么做藕届,說說這樣做的優(yōu)點,總之亭饵,把畢業(yè)課題的一些思想說了應(yīng)該就沒什么問題了休偶,綜合面的技術(shù)問題可以忽略了,但是也扯了蠻久的關(guān)于技術(shù)的問題辜羊。
綜合面倒是問了很多生活的問題踏兜,比如词顾,家里兄弟姐妹,家里父母壓力大不大碱妆,為什么選擇讀研究生肉盹,然后綜合面還是比較輕松的。
等了一個禮拜疹尾,終于等來了實習的offer上忍,但導師不同意,哎纳本,算了窍蓝,準備校招吧,還把別人給擠掉了繁成,可能無形之中還把人家想去的給弄下去了吓笙,罪過啊。
在聯(lián)想做了半年的FPGA實習了,也實實在在的做了一個項目巾腕。下周就要離職,所做的項目也基本達到了預(yù)期目標面睛,一些感受趁著現(xiàn)在還記得,寫出來和大家一起分享尊搬。不對之處叁鉴,希望得到大家的指正。我在聯(lián)想研究院做的是一個無線顯示(投影)設(shè)計項目下面的接收端的圖像數(shù)據(jù)的解碼(基本涉及的算法有DPCM, UVLC , RLC 毁嗦,還有行間預(yù)測)亲茅。下面的感觸點是隨性而寫,不是按重要性來排列的回铛。有些感觸只正對FPGA領(lǐng)域有效^_^
1狗准。要和人配合,交流。以我們做代碼上板調(diào)試為例茵肃,調(diào)試的時候需要軟件的配合腔长,一個軟件壓縮發(fā)送,硬件接收解碼的項目調(diào)試沒有軟件的支持是一個很復(fù)雜也很難調(diào)通的工作,調(diào)試都是分步驟的,比如說一開始讓軟件發(fā)送端發(fā)個圖像塊過來看看硬件這邊能不能解碼通過验残。然后發(fā)一個靜態(tài)圖像調(diào)試捞附,最后才讓發(fā)動態(tài)的屏幕。這些步驟修改都要軟件工程師的配合您没,如果你不跟別人交流鸟召,自己一開始上板就調(diào)試動態(tài)圖像,估計出了問題都不知道在哪里氨鹏。其實在軟件工程師那邊這些改動他只要注釋一段代碼或者修改一個判斷條件重新編譯一下就可以給你想要的軟件版本欧募。有時候把出的問題跟軟件組交流一下結(jié)果他們發(fā)現(xiàn)是軟件端出了問題,這樣我這邊也省下好多心仆抵。所以要和人配合跟继,找人交流种冬。多聽聽別人的意見,多說說自己的想法舔糖,這樣必然可以產(chǎn)生新的 know-how 從而加調(diào)試試和開發(fā)的速度娱两,退一步講,至少沒有壞處金吗。
2十兢。有問題就多問,多找自己企業(yè)導師辽聊,就是帶你做項目的那個工程師纪挎。很多問題在你認為是無法解釋的,到了他們眼前就是兩三句話的事情跟匆,這就是經(jīng)驗异袄。不要怕丟面子,這不算什么玛臂,真正丟面子的事情恰好不是這些烤蜕。多向老大匯報最近的進展,雖然老大要求一周匯報一次迹冤,你要有心讽营,一天匯報一次讓他時刻知道你在做什么,進展怎么樣泡徙,不要說的太長他也不會嫌你煩橱鹏。這樣讓他覺得招你這個實習生不是白招的。這樣的好處還有就是當你遇到什么問題卡住了堪藐,他也會來想辦法莉兰,實在沒辦法他也知道你的難處。這樣你的壓力就小了礁竞。懶得向直接老大匯報情況時糖荒,萬一出現(xiàn)進度或者結(jié)果不符,所有責任都需要本人承擔模捂。到時候第一個炒魷魚的就是你捶朵,雖然你覺得其他實習生的水平跟你差不多。如果提前向老大匯報情況并取得許可狂男,則一切后果都在可控范圍內(nèi)综看。
3。前期code仿真很重要岖食。不要急于上板調(diào)試红碑,很多問題可以在仿真階段就可以消除的,等到上板調(diào)試的時候你會發(fā)現(xiàn)很麻煩县耽,花的時間更多句喷。雖然自己寫的 code自己找bug很難镣典,但是要有勇氣去發(fā)現(xiàn)缺點的。不要想當然的認為自己寫的就是這樣那樣的運行下去沒問題唾琼。多載入幾個測試序列就發(fā)現(xiàn)問題了兄春。所以就算有問題,如果不嚴重就藏著掖著锡溯。該改的趁早改了好赶舆。 ( via: unus.cn )
4.仿真過程中的錯誤仿真也很重要。當你仿真到一定程度發(fā)現(xiàn)基本上code沒什么問題的時候祭饭,不妨特意設(shè)置幾個錯誤測試序列載入代碼看看你的code跑的怎么樣芜茵。這就是逆向思維,很多時候你從理想的狀況下仿真是發(fā)現(xiàn)不了問題的倡蝙,然而當你仿了幾個錯誤序列的時候你可能發(fā)現(xiàn)你的狀態(tài)機不知道跑到哪里去了^_^九串。我就是吃了這個虧,后期調(diào)試老是畫面死機寺鸥。如果早期仿真時候多做幾個錯誤序列仿真猪钮,同時寫好錯誤恢復(fù)機制就后期不會這么麻煩的找bug了。
5.多點時間思考胆建。出現(xiàn)問題后烤低,不要急著修改。其實修改問題的時間總是會比思考問題的時間多笆载,為何不多思考一下而節(jié)約大量的修改時間呢扑馁?要思考推測可能的原因,想清楚后把這些可能的原因都用debug pin或者chipscope引出來凉驻。好的code都會引出一些關(guān)鍵信號的debug pin的腻要,就是你不需要用到但是還是引出到上層模塊了,以便觀察沿侈。注意復(fù)用已有的debug pin闯第。很多時候市栗,在測試過程中產(chǎn)生了一大堆測試信號缀拭,但是時間一長就忘了復(fù)用。實際上填帽,當一個問題產(chǎn)生的時候蛛淋,通過反復(fù)觀察已有的debug-pin或許足以發(fā)現(xiàn)問題根源,而無需再引出新的pin篡腌,并浪費時間去綜合和PAR褐荷。
6。同步設(shè)計的重要性嘹悼。數(shù)字電路在時鐘同步的設(shè)計原則下叛甫,其功能通過simulation就可以驗證层宫。simulation的結(jié)果和PAR后產(chǎn)生的 FPGA-image基本等價,老大經(jīng)驗之談其监,其實我也懷疑萌腿。當然FPGA也要遵循同樣的設(shè)計原則:即時鐘同步。所以對于PAR的結(jié)果首先就要確保其時鐘同步的特性抖苦。體現(xiàn)為寄存器之間的path必須在一個時鐘周期內(nèi)完成毁菱。(當然有其他約束的例外。)同時要滿足FPGA器件的setup和hold要求锌历。一旦出現(xiàn)timing-error必須通過各種途徑消除error贮庞,因為error的存在,意味著時鐘同步的大前提已經(jīng)被破壞究西,這時窗慎,simulation取得的結(jié)果和FPGA是不等價的,繼續(xù)調(diào)試也毫無意義了卤材。同步設(shè)計不單單時鐘同步的問題捉邢,復(fù)位信號也要同步,從A時鐘域到B時鐘域的復(fù)位信號最好讓B時鐘域的時鐘打上兩拍商膊。不然綜合發(fā)現(xiàn)關(guān)鍵路徑居然在復(fù)位信號上伏伐,直接暈倒^_^。關(guān)于跨時鐘域的信號最好都參照上面的方法晕拆,其實還有很多注意的地方藐翎,詳細情況有興趣多看看關(guān)于多時鐘域設(shè)計的資料。
7实幕。FPGA的約束要注意不可控的接口部分吝镣。FPGA內(nèi)部的寄存器之間的timing完全可以通過PAR報告來確認是否有問題。但是和外界的接口部分卻充滿了疑問昆庇。我們一般通過假定的input-delay和output-delay來對接口部分進行約束末贾。由于從一開始就施加的是假定的delay,所以即使沒有timing-error整吆,其結(jié)果也存在諸多疑問拱撵。這些問題都是經(jīng)驗的積累,沒多少話說的了表蝙,很多時候你會發(fā)現(xiàn)很多無法解釋的問題拴测,還是找老大問問吧^_^。好的約束文件對設(shè)計性能有很大的幫助府蛇,慢慢去學習吧集索,這方面我自己水平也很低。
8.記得看綜合報告。很多新人估計一開始沒有看綜合報告的習慣务荆,不管是xilinx ISE也好妆距,Quartus 也好都會產(chǎn)生一個很龐大的綜合報告,新人覺得跟自己沒有關(guān)系函匕。我一開始也是這樣毅厚,其實不然。這個綜合報告就是綜合工具對你設(shè)計的code的“評價”浦箱,你不想知道他對你的“評價”是好還是壞嗎吸耿?^_^。綜合報告里面有下面幾個關(guān)鍵信息需要注意:
(1)時鐘頻率酷窥,也就是你code最終能跑多快咽安,這就決定了你的設(shè)計是否存在關(guān)鍵路徑。
這是模塊性能優(yōu)化過程的重頭戲蓬推。
(2)資源占用信息妆棒,看看是否跟當初預(yù)想的基本符合。
(3)warning信息沸伏,很多時候大家都不看warning的糕珊,大一點的報告至少有上千個warning信息,挺耗時的毅糟。但是warning信息里面有一個點需要注意就是你用了的信號沒定義報的warning红选,這個warning引起的后果跟error一樣∧妨恚可以通過查關(guān)鍵字tied找到喇肋。因為用了沒定義的信號將被綜合工具一律tied connect zero。
9.養(yǎng)成良好的code 風格迹辐,形式上的風格我就不說了蝶防。其他方面比如狀態(tài)機編寫,我一般用三段式明吩,不知道大家怎樣间学,三段便于修改和理解,比較經(jīng)典印荔,綜合電路狀態(tài)與data輸出同步低葫。另外復(fù)位無特殊情況我基本用同步。切忌不要在兩個always模塊中對同一個變量賦值躏鱼,這個modelsim仿真一般不會有問題氮采,綜合的時候殷绍,有些綜合工具也會報錯(比如ISE的XST)染苛,這讓我后來大罵XST是垃圾。這個問題造成的結(jié)果是致命的,害我花了一個禮拜才找出沒出圖像的原因茶行。
10.出來實習要端正心態(tài)躯概。學生階段還是以學習為主吧,有機會就多學點吧畔师,抓住一切學習的機會娶靡,以后你回憶的時候你會發(fā)現(xiàn)你收獲真的很多。
11.寫好設(shè)計文檔看锉。一般設(shè)計從寫好設(shè)計文檔開始的姿锭,大的項目都不是讓你急于寫code,都是把文檔寫出來大家討論好才寫code伯铣。很多問題在寫文檔的時候就解決了呻此,不然寫完了code也免不了返工。另外平時最好養(yǎng)成做設(shè)計筆記的習慣腔寡,有什么問題和想法做好筆記焚鲜,你會發(fā)現(xiàn)當你一籌莫展的時候翻翻前面的筆記對你很有用。
寫了這么多放前,其實自己也感覺沒什么頭緒的忿磅,希望對各位有所參考價值,也不枉費我下班后花一個晚上時間把頭腦里面能想到的寫下來^_^凭语〈兴肯定有很多不妥和不太完善的地方,以后繼續(xù)修正補充似扔,歡迎各位指正览效。最后祝愿各位師弟師妹學習進步,將來找到好實習虫几。