4個FPGA工程師面試題目

2021-06-20 12:42:41 字數 2648 閱讀 4397

fpga與cpld內部結構區別?

cpld

以altramax7000這種pld為例,可分為三塊結構:巨集單元(marocell),可程式設計連線(pia)和i/o控制塊。巨集單元是pld的基本結構,由它來實現基本的邏輯功能。可程式設計連線負責訊號傳遞,連線所有的巨集單元。i/o控制塊負責輸入輸出的電氣特性控制,比如可以設定集電極開路輸出,擺率控制,三態輸出等。

這種基於乘積項(實際就是與或陣列)的pld基本都是由eeprom和flash工藝製造的,一上電就可以工作,無需其他晶元配合。佈線方式是全域性的,所以延時可**。cpld適合做邏輯設計。

fpga

fpga基於lut,lut本質上就是乙個ram,每乙個lut可以看成乙個有4位位址線的16x1的ram。這也是為什麼fpga需要外接乙個rom來上電配置。

以xilinx的spartan-ii為例,主要包括clbs,i/o塊,ram塊和可程式設計連線。在spartan-ii中,乙個clb包括2個slices,每個slices包括兩個lut,兩個觸發器和相關邏輯。 slices可以看成是spartanii實現邏輯的最基本結構。

fpga的製造工藝確定了fpga晶元中包含的lut和觸發器的數量非常多,往往都是幾千上萬,pld一般只能做到512個邏輯單元,而且如果用晶元**除以邏輯單元數量,fpga的平均邏輯單元成本大大低於pld。 所以如果設計中使用到大量觸發器,例如設計乙個複雜的時序邏輯,那麼使用fpga就是乙個很好選擇。

2.latch和register區別?行為描述中latch如何產生?

本質的區別在於:latch是電平觸發,reg是邊沿觸發。時序設計中盡量使用reg觸發。

行為描述中,如果對應所有可能輸入條件,有的輸入沒有對應明確的輸出,系統會綜合出latch。

比如:always@( a or b) //缺少else語句

begin

if(a==1)

q <= b;

end

3.對競爭冒險的理解,以及如何消除?

在組合邏輯中,由於門的輸入訊號通路中經過了不同的延時,導致到達該門的時間不一致叫競爭。產生毛刺叫冒險。如果布林式中有相反的訊號則可能產生競爭和冒險現象。解決方法:一是新增布林式的消去項,二是在晶元外部加電容。

4.用verilog設計乙個5分頻器。

5分頻,奇數分頻都可以類似這麼做,只需要改div1和div2的引數。div1為奇數分頻除2的餘數。採用上公升延和下降延分別觸發不同波形,最後疊加的方式產生奇數分頻。

module divfreq(clk, clk1x, rst, clk1xpose, clk1xnege, coutpose, coutnege);

input clk;

input rst;

output clk1x;

output clk1xpose;

output clk1xnege;

output[2:0] coutpose;

output[2:0] coutnege;

reg clk1xpose;

reg clk1xnege;

reg[2:0] coutpose;

reg[2:0] coutnege;

parameter div1 = 2 , div2 = 4; // div1 = 5 / 2, div2 = 5 - 1

assign clk1x = clk1xpose | clk1xnege;

always@(posedge

clk or negedge rst)

begin

if(!rst)

clk1xpose = 0;

else if(coutpose == div1)

clk1xpose = ~clk1xpose;

else if(coutpose == div2)

clk1xpose = ~clk1xpose;

else 

clk1xpose = clk1xpose;

end

always@(negedge

clk or negedge rst)

begin

if(!rst)

clk1xnege = 0;

else if(coutnege == div1)

clk1xnege = ~clk1xnege;

else if(coutnege == div2)

clk1xnege = ~clk1xnege;

else 

clk1xnege = clk1xnege;

end

always@(posedge

clk or negedge rst)

begin

if(!rst)

coutpose = 0;

else if(coutpose == div2)

coutpose = 0;

else

coutpose = coutpose + 1;

end

always@(negedge

clk or negedge rst)

begin

if(!rst)

coutnege = 0;

else if(coutnege == div2)

coutnege = 0;

else

coutnege = coutnege + 1;

end

endmodule

FPGA工程師筆試面試題(二)

1 ic設計中同步復位與非同步復位的區別 同步復位在時鐘沿才復位訊號,完成復位動作。非同步復位不管時鐘,只要復位訊號滿足條件,就完成復位動作。非同步復位對復位訊號要求比較高,不能有毛刺,如果其與時鐘關係不確定,也可能出現亞穩態。2 moore 與 mealy狀態機的特徵 兩種典型的狀態機是摩爾 mo...

c 工程師面試題目及答案

路由器是接外網的,路由器是接內網的。工作層次不同 交換機主要工作在資料鏈路層 第二層 路由器工作在網路層 第三層 依據不同 交換機主要用於組建區域網,而路由主要功能是將由交換機組好的區域網相互連線起來,或者接入internet。交換機能做的,路由都能做。交換機不能分割廣播域,路由可以。路由還可以提供...

新浪php工程師面試題

1 cookie session的聯絡和區別,多台web伺服器如何共享session?2 http協議中的post和get有何區別?3 一段php 寫出輸出結果 這個程式 a 0 b 0 if a 3 0 b 3 0 4 reqiure的include都可包含檔案,二者的區別何在?5 php中web...