資源描述:
《FPGA工程師面試試題.docx》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、4個FPGA工程師面試題目(經(jīng)歷)??1.FPGA與CPLD內(nèi)部結(jié)構(gòu)區(qū)別???????CPLD?????以altraMAX7000這種PLD為例,可分為三塊結(jié)構(gòu):宏單元(Marocell),可編程連線(PIA)和I/O控制塊。宏單元是PLD的基本結(jié)構(gòu),由它來實現(xiàn)基本的邏輯功能??删幊踢B線負(fù)責(zé)信號傳遞,連接所有的宏單元。I/O控制塊負(fù)責(zé)輸入輸出的電氣特性控制,比如可以設(shè)定集電極開路輸出,擺率控制,三態(tài)輸出等。?????這種基于乘積項(實際就是與或陣列)的PLD基本都是由EEPROM和Flash工藝制造的,一上電就可以工作,無
2、需其他芯片配合。布線方式是全局的,所以延時可預(yù)測。CPLD適合做邏輯設(shè)計。?????FPGA?????FPGA基于LUT,LUT本質(zhì)上就是一個RAM,每一個LUT可以看成一個有4位地址線的16x1的RAM。這也是為什么FPGA需要外接一個rom來上電配置。?????以xilinx的Spartan-II為例,主要包括CLBs,I/O塊,RAM塊和可編程連線。在spartan-II中,一個CLB包括2個Slices,每個slices包括兩個LUT,兩個觸發(fā)器和相關(guān)邏輯。Slices可以看成是SpartanII實現(xiàn)邏輯的最基本結(jié)
3、構(gòu)。??????FPGA的制造工藝確定了FPGA芯片中包含的LUT和觸發(fā)器的數(shù)量非常多,往往都是幾千上萬,PLD一般只能做到512個邏輯單元,而且如果用芯片價格除以邏輯單元數(shù)量,F(xiàn)PGA的平均邏輯單元成本大大低于PLD。所以如果設(shè)計中使用到大量觸發(fā)器,例如設(shè)計一個復(fù)雜的時序邏輯,那么使用FPGA就是一個很好選擇。2.Latch和Register區(qū)別?行為描述中Latch如何產(chǎn)生????本質(zhì)的區(qū)別在于:latch是電平觸發(fā),reg是邊沿觸發(fā)。時序設(shè)計中盡量使用reg觸發(fā)。行為描述中,如果對應(yīng)所有可能輸入條件,有的輸入沒有對應(yīng)
4、明確的輸出,系統(tǒng)會綜合出latch。比如:always@(aorb)?//缺少else語句???????begin??????????if(a==1)????????????q<=b;????????end??3.對競爭冒險的理解,以及如何消除?????在組合邏輯中,由于門的輸入信號通路中經(jīng)過了不同的延時,導(dǎo)致到達(dá)該門的時間不一致叫競爭。產(chǎn)生毛刺叫冒險。如果布爾式中有相反的信號則可能產(chǎn)生競爭和冒險現(xiàn)象。解決方法:一是添加布爾式的消去項,二是在芯片外部加電容。4.用Verilog設(shè)計一個5分頻器。??????5分頻,奇數(shù)分頻
5、都可以類似這么做,只需要改div1和div2的參數(shù)。div1為奇數(shù)分頻除2的余數(shù)。采用上升延和下降延分別觸發(fā)不同波形,最后疊加的方式產(chǎn)生奇數(shù)分頻。moduledivfreq(clk,clk1x,rst,clk1xpose,clk1xnege,coutpose,coutnege);inputclk;inputrst;outputclk1x;outputclk1xpose;outputclk1xnege;output[2:0]coutpose;output[2:0]coutnege;regclk1xpose;regclk1xn
6、ege;reg[2:0]coutpose;reg[2:0]coutnege;parameterdiv1=2,div2=4;?//div1=5/2,div2=5-1assignclk1x=clk1xpose
7、clk1xnege;always@(posedgeclkornegedgerst)?begin?if(!rst)?????clk1xpose=0;??elseif(coutpose==div1)???clk1xpose=~clk1xpose;?elseif(coutpose==div2)???clk1xpose=~clk
8、1xpose;?else????clk1xpose=clk1xpose;?endalways@(negedgeclkornegedgerst)?begin?if(!rst)?????clk1xnege=0;??elseif(coutnege==div1)??clk1xnege=~clk1xnege;?elseif(coutnege==div2)??clk1xnege=~clk1xnege;?else???clk1xnege=clk1xnege;?endalways@(posedgeclkornegedgerst)?begi
9、n?if(!rst)??coutpose=0;?elseif(coutpose==div2)??coutpose=0;?else??coutpose=coutpose+1;?endalways@(negedgeclkornegedgerst)?begin?if(!rst)??coutnege=0;?el