大香伊蕉在人线国产av老女人-午夜欧美理论2019理论-国模无码视频一区二区三区-18成人片黄网站www

你的位置:首頁 > 測試測量 > 正文

博客分享:詳解FPGA四大設計要點

發(fā)布時間:2015-01-06 責任編輯:sherryyu

【導讀】FPGA的用處比我們平時想象的用處更廣泛,原因在于其中集成的模塊種類更多,而不僅僅是原來的簡單邏輯單元本文敘述概括了FPGA應用設計中的要點,包括,時鐘樹、FSM、latch、邏輯仿真四個部分。
 
FPGA的用處比我們平時想象的用處更廣泛,原因在于其中集成的模塊種類更多,而不僅僅是原來的簡單邏輯單元(LE)。
 
早期的FPGA相對比較簡單,所有的功能單元僅僅由管腳、內(nèi)部buffer、LE、RAM構(gòu)建而成,LE由LUT(查找表)和D觸發(fā)器構(gòu)成,RAM也往往容量非常小。
 
現(xiàn)在的FPGA不僅包含以前的LE,RAM也更大更快更靈活,管教IOB也更加的復雜,支持的IO類型也更多,而且內(nèi)部還集成了一些特殊功能單元,包括:
 
DSP:實際上就是乘加器,F(xiàn)PGA內(nèi)部可以集成多個乘加器,而一般的DSP芯片往往每個core只有一個。換言之,F(xiàn)PGA可以更容易實現(xiàn)多個DSP core功能。在某些需要大量乘加計算的場合,往往多個乘加器并行工作的速度可以遠遠超過一個高速乘加器。
 
SERDES:高速串行接口。將來PCI-E、XAUI、HT、S-ATA等高速串行接口會越來越多。有了SERDES模塊,F(xiàn)PGA可以很容易將這些高速串行接口集成進來,無需再購買專門的接口芯片。
 
CPU core:分為2種,軟core和硬core。軟core是用邏輯代碼寫的CPU模塊,可以在任何資源足夠的FPGA中實現(xiàn),使用非常靈活。而且在大容量的FPGA中還可以集成多個軟core,實現(xiàn)多核并行處理。硬core是在特定的FPGA內(nèi)部做好的CPU core,優(yōu)點是速度快、性能好,缺點是不夠靈活。
 
不過,F(xiàn)PGA還是有缺點。對于某些高主頻的應用,F(xiàn)PGA就無能為力了?,F(xiàn)在雖然理論上FPGA可以支持的500MHz,但在實際設計中,往往200MHz以上工作頻率就很難實現(xiàn)了。
 
FPGA設計要點之一:時鐘樹
 
對于FPGA來說,要盡可能避免異步設計,盡可能采用同步設計。
 
同步設計的第一個關(guān)鍵,也是關(guān)鍵中的關(guān)鍵,就是時鐘樹。
 
一個糟糕的時鐘樹,對FPGA設計來說,是一場無法彌補的災難,是一個沒有打好地基的大樓,崩潰是必然的。
 
具體一些的設計細則:
 
1)盡可能采用單一時鐘;
 
2)如果有多個時鐘域,一定要仔細劃分,千萬小心;
 
3)跨時鐘域的信號一定要做同步處理。對于控制信號,可以采用雙采樣;對于數(shù)據(jù)信號,可以采用異步fifo。需要注意的是,異步fifo不是萬能的,一個異步fifo也只能解決一定范圍內(nèi)的頻差問題。
 
4)盡可能將FPGA內(nèi)部的PLL、DLL利用起來,這會給你的設計帶來大量的好處。
 
5)對于特殊的IO接口,需要仔細計算Tsu、Tco、Th,并利用PLL、DLL、DDIO、管腳可設置的delay等多種工具來實現(xiàn)。簡單對管腳進行Tsu、Tco、Th的約束往往是不行的。
 
可能說的不是很確切。這里的時鐘樹實際上泛指時鐘方案,主要是時鐘域和PLL等的規(guī)劃,一般情況下不牽扯到走線時延的詳細計算(一般都走全局時鐘網(wǎng)絡和局部時鐘網(wǎng)絡,時延固定),和ASIC中的時鐘樹不一樣。對于ASIC,就必須對時鐘網(wǎng)絡的設計、布線、時延計算進行仔細的分析計算才行。
[page]

FPGA設計要點之二:FSM
 
FSM:有限狀態(tài)機。這個可以說時邏輯設計的基礎。幾乎稍微大一點的邏輯設計,幾乎都能看得到FSM。
 
FSM分為moore型和merly型,moore型的狀態(tài)遷移和變量無關(guān),merly型則有關(guān)。實際使用中大部分都采用merly型。
 
FSM通常有2種寫法:單進程、雙進程。
 
初學者往往喜歡單進程寫法,格式如下:
 
always @( posedge clk or posedge rst )
 
begin
 
if ( rst == 1''b1 )
 
FSM_status <= ......;
 
else
 
case ( FSM_status )
 
......;
 
endcase
 
end
 
簡單的說,單進程FSM就是把所有的同步、異步處理都放入一個always中。
 
優(yōu)點:
 
1)看起來比較簡單明了,寫起來也不用在每個case分支或者if分支中寫全對各個信號和狀態(tài)信號的處理。也可以簡單在其中加入一些計數(shù)器進行計數(shù)處理。
 
2)所有的輸出信號都已經(jīng)是經(jīng)過D觸發(fā)器鎖存了。
 
缺點:
 
1)優(yōu)化效果不佳。由于同步、異步放在一起,編譯器一般對異步邏輯的優(yōu)化效果最好。單進程FSM把同步、異步混雜在一起的結(jié)果就是導致編譯器優(yōu)化效果差,往往導致邏輯速度慢、資源消耗多。
 
2)某些時候需要更快的信號輸出,不必經(jīng)過D觸發(fā)器鎖存,這時單進程FSM的處理就比較麻煩了。
 
雙進程FSM,格式如下:
 
always @( posedge clk or posedge rst )
 
begin
 
if ( rst == 1''b1 )
 
FSM_status_current <= ...;
 
else
 
FSM_status_current <= FSM_status_next;
 
always @(*)
 
begin
 
case ( FSM_status_current )
 
FSM_status_next = ......;
 
endcase
 
end
 
從上面可以看到,同步處理和異步處理分別放到2個always中。其中FSM狀態(tài)變量也采用2個來進行控制。雙進程FSM的原理我這里就不多說了,在很多邏輯設計書中都有介紹。這里描述起來太費勁。
 
優(yōu)點:
 
1)編譯器優(yōu)化效果明顯,可以得到很理想的速度和資源占用率。
 
2)所有的輸出信號(除了FSM_status_current)都是組合輸出的,比單進程FSM快。
 
缺點:
 
1)所有的輸出信號(除了FSM_status_current)都是組合輸出的,在某些場合需要額外寫代碼來進行鎖存。
 
2)在異步處理的always中,所有的if、case分支必須把所有的輸出信號都賦值,而且不能出現(xiàn)在FSM中的輸出信號回送賦值給本FSM中的其他信號的情況,否則會出現(xiàn) latch。
 
latch會導致如下問題:
 
1)功能仿真結(jié)果和后仿不符;
 
2)出現(xiàn)無法測試的邏輯;
 
3)邏輯工作不穩(wěn)定,特別是latch部分對毛刺異常敏感;
 
4)某些及其特殊的情況下,如果出現(xiàn)正反饋,可能會導致災難性的后果。
 
這不是恐嚇也不是開玩笑,我就親眼見過一個小伙把他做的邏輯加載上去后,整個FPGA給炸飛了。后來懷疑可能是出現(xiàn)正反饋導致高頻振蕩,最后導致芯片過熱炸掉(這個FPGA芯片沒有安裝散熱片)。
[page]

FPGA設計要點之三:latch
 
首先回答一下:
 
1)stateCAD沒有用過,不過我感覺用這個東東在構(gòu)建大的系統(tǒng)的時候似乎不是很方便。也許用system C或者system Verilog更好一些。
 
2)同步、異步的叫法是我所在公司的習慣叫法,不太對,不過已經(jīng)習慣了,呵呵。
 
這次講一下latch。
 
latch的危害已經(jīng)說過了,這里不再多說,關(guān)鍵講一下如何避免。
 
1)在組合邏輯進程中,if語句一定要有else!并且所有的信號都要在if的所有分支中被賦值。
 
always @( * ) begin
 
if ( sig_a == 1''b1 ) sig_b = sig_c;
 
end
 
這個是絕對會產(chǎn)生latch的。
 
正確的應該是
 
always @( * ) begin
 
if ( sig_a == 1''b1 ) sig_b = sig_c;
 
else sig_b = sig_d;
 
end
 
另外需要注意,下面也會產(chǎn)生latch。也就是說在組合邏輯進程中不能出現(xiàn)自己賦值給自己或者間接出現(xiàn)自己賦值給自己的情況。
 
always @( * ) begin
 
if ( rst == 1''b1 ) counter = 32''h00000000;
 
else counter = counter + 1;
 
end
 
但如果是時序邏輯進程,則不存在該問題。
 
2)case語句的default一定不能少!
 
原因和if語句相同,這里不再多說了。
 
需要提醒的是,在時序邏輯進程中,default語句也一定要加上,這是一個很好的習慣。
 
3)組合邏輯進程敏感變量不能少也不能多。
 
這個問題倒不是太大,verilog2001語法中可以直接用 * 搞定了。
 
順便提一句,latch有弊就一定有利。在FPGA的LE中,總存在一個latch和一個D觸發(fā)器,在支持DDR的IOE(IOB)中也存在著一個latch來實現(xiàn)DDIO。不過在我們平時的設計中,對latch還是要盡可能的敬而遠之。
 
FPGA設計要點之四:邏輯仿真
 
仿真是FPGA設計中必不可少的一步。沒有仿真,就沒有一切。
 
仿真是一個單調(diào)而繁瑣的工作,很容易讓人產(chǎn)生放棄或者偷工減料的念頭。這時一定要挺住!
 
仿真分為單元仿真、集成仿真、系統(tǒng)仿真。
 
單元仿真:針對每一個最小基本模塊的仿真。單元仿真要求代碼行覆蓋率、條件分支覆蓋率、表達式覆蓋率必須達到100%!這三種覆蓋率都可以通過MODELSIM來查看,不過需要在編譯該模塊時要在Compile option中設置好。
 
集成仿真:將多個大模塊合在一起進行仿真。覆蓋率要求盡量高。
 
系統(tǒng)仿真:將整個硬件系統(tǒng)合在一起進行仿真。此時整個仿真平臺包含了邏輯周邊芯片接口的仿真模型,以及BFM、Testbench等。系統(tǒng)仿真需要根據(jù)被仿真邏輯的功能、性能需求仔細設計仿真測試例和仿真測試平臺。系統(tǒng)仿真是邏輯設計的一個大分支,是一門需要專門學習的學科。
要采購觸發(fā)器么,點這里了解一下價格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
壓控振蕩器 壓力傳感器 壓力開關(guān) 壓敏電阻 揚聲器 遙控開關(guān) 醫(yī)療電子 醫(yī)用成像 移動電源 音頻IC 音頻SoC 音頻變壓器 引線電感 語音控制 元件符號 元器件選型 云電視 云計算 云母電容 真空三極管 振蕩器 振蕩線圈 振動器 振動設備 震動馬達 整流變壓器 整流二極管 整流濾波 直流電機 智能抄表
?

關(guān)閉

?

關(guān)閉