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...