博客分享:詳解FPGA四大設計要點
發布時間:2015-01-06 責任編輯:sherryyu
【導讀】FPGA的用處比我們平時想象的用處更廣泛,原因在於其中集成的模塊種類更多,而不僅僅是原來的簡單邏輯單元本文敘述概括了FPGA應用設計中的要點,包括,時鍾樹、FSM、latch、邏輯仿真四個部分。
FPGA的用處比我們平時想象的用處更廣泛,原因在於其中集成的模塊種類更多,而不僅僅是原來的簡單邏輯單元(LE)。
早期的FPGA相對比較簡單,所有的功能單元僅僅由管腳、內部buffer、LE、RAM構建而成,LE由LUT(查找表)和D觸發器構成,RAM也往往容量非常小。
現在的FPGA不僅包含以前的LE,RAM也更大更快更靈活,管教IOB也更加的複雜,支持的IO類型也更多,而且內部還集成了一些特殊功能單元,包括:
DSP:實際上就是乘加器,FPGA內部可以集成多個乘加器,而一般的DSP芯片往往每個core隻有一個。換言之,FPGA可以更容易實現多個DSP core功能。在某些需要大量乘加計算的場合,往往多個乘加器並行工作的速度可以遠遠超過一個高速乘加器。
SERDES:高速串行接口。將來PCI-E、XAUI、HT、S-ATA等高速串行接口會越來越多。有了SERDES模塊,FPGA可以很容易將這些高速串行接口集成進來,無需再購買專門的接口芯片。
CPU core:分為2種,軟core和硬core。軟core是用邏輯代碼寫的CPU模塊,可以在任何資源足夠的FPGA中實現,使用非常靈活。而且在大容量的FPGA中還可以集成多個軟core,實現多核並行處理。硬core是在特定的FPGA內部做好的CPU core,優點是速度快、性能好,缺點是不夠靈活。
不過,FPGA還是有缺點。對於某些高主頻的應用,FPGA就無能為力了。現在雖然理論上FPGA可以支持的500MHz,但在實際設計中,往往200MHz以上工作頻率就很難實現了。
FPGA設計要點之一:時鍾樹
對於FPGA來說,要盡可能避免異步設計,盡可能采用同步設計。
同步設計的第一個關鍵,也是關鍵中的關鍵,就是時鍾樹。
一個糟糕的時鍾樹,對FPGA設計來說,是一場無法彌補的災難,是一個沒有打好地基的大樓,崩潰是必然的。
具體一些的設計細則:
1)盡可能采用單一時鍾;
2)如果有多個時鍾域,一定要仔細劃分,千萬小心;
3)跨時鍾域的信號一定要做同步處理。對於控製信號,可以采用雙采樣;對於數據信號,可以采用異步fifo。需要注意的是,異步fifo不是萬能的,一個異步fifo也隻能解決一定範圍內的頻差問題。
4)盡可能將FPGA內部的PLL、DLL利用起來,這會給你的設計帶來大量的好處。
5)對於特殊的IO接口,需要仔細計算Tsu、Tco、Th,並利用PLL、DLL、DDIO、管腳可設置的delay等多種工具來實現。簡單對管腳進行Tsu、Tco、Th的約束往往是不行的。
可能說的不是很確切。這裏的時鍾樹實際上泛指時鍾方案,主要是時鍾域和PLL等的規劃,一般情況下不牽扯到走線時延的詳細計算(一般都走全局時鍾網絡和局部時鍾網絡,時延固定),和ASIC中的時鍾樹不一樣。對於ASIC,就必須對時鍾網絡的設計、布線、時延計算進行仔細的分析計算才行。
[page]
FPGA設計要點之二:FSM
FSM:有限狀態機。這個可以說時邏輯設計的基礎。幾乎稍微大一點的邏輯設計,幾乎都能看得到FSM。
FSM分為moore型和merly型,moore型的狀態遷移和變量無關,merly型則有關。實際使用中大部分都采用merly型。
FSM通常有2種寫法:單進程、雙進程。
初學者往往喜歡單進程寫法,格式如下:
always @( posedge clk or posedge rst )
begin
if ( rst == 1''b1 )
FSM_status <= ......;
else
case ( FSM_status )
......;
endcase
end
簡單的說,單進程FSM就是把所有的同步、異步處理都放入一個always中。
優點:
1)看起來比較簡單明了,寫起來也不用在每個case分支或者if分支中寫全對各個信號和狀態信號的處理。也可以簡單在其中加入一些計數器進行計數處理。
2)所有的輸出信號都已經是經過D觸發器鎖存了。
缺點:
1)優化效果不佳。由於同步、異步放在一起,編譯器一般對異步邏輯的優化效果最好。單進程FSM把同步、異步混雜在一起的結果就是導致編譯器優化效果差,往往導致邏輯速度慢、資源消耗多。
2)某些時候需要更快的信號輸出,不必經過D觸發器鎖存,這時單進程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狀態變量也采用2個來進行控製。雙進程FSM的原理我這裏就不多說了,在很多邏輯設計書中都有介紹。這裏描述起來太費勁。
優點:
1)編譯器優化效果明顯,可以得到很理想的速度和資源占用率。
2)所有的輸出信號(除了FSM_status_current)都是組合輸出的,比單進程FSM快。
缺點:
1)所有的輸出信號(除了FSM_status_current)都是組合輸出的,在某些場合需要額外寫代碼來進行鎖存。
2)在異步處理的always中,所有的if、case分支必須把所有的輸出信號都賦值,而且不能出現在FSM中的輸出信號回送賦值給本FSM中的其他信號的情況,否則會出現 latch。
latch會導致如下問題:
1)功能仿真結果和後仿不符;
2)出現無法測試的邏輯;
3)邏輯工作不穩定,特別是latch部分對毛刺異常敏感;
4)某些及其特殊的情況下,如果出現正反饋,可能會導致災難性的後果。
這不是恐嚇也不是開玩笑,我就親眼見過一個小夥把他做的邏輯加載上去後,整個FPGA給炸飛了。後來懷疑可能是出現正反饋導致高頻振蕩,最後導致芯片過熱炸掉(這個FPGA芯片沒有安裝散熱片)。
[page]
FPGA設計要點之三:latch
首先回答一下:
1)stateCAD沒有用過,不過我感覺用這個東東在構建大的係統的時候似乎不是很方便。也許用system C或者system Verilog更好一些。
2)同步、異步的叫法是我所在公司的習慣叫法,不太對,不過已經習慣了,嗬嗬。
這次講一下latch。
latch的危害已經說過了,這裏不再多說,關鍵講一下如何避免。
1)在組合邏輯進程中,if語句一定要有else!並且所有的信號都要在if的所有分支中被賦值。
always @( * ) begin
if ( sig_a == 1''b1 ) sig_b = sig_c;
end
這個是絕對會產生latch的。
正確的應該是
always @( * ) begin
if ( sig_a == 1''b1 ) sig_b = sig_c;
else sig_b = sig_d;
end
另外需要注意,下麵也會產生latch。也就是說在組合邏輯進程中不能出現自己賦值給自己或者間接出現自己賦值給自己的情況。
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觸發器,在支持DDR的IOE(IOB)中也存在著一個latch來實現DDIO。不過在我們平時的設計中,對latch還是要盡可能的敬而遠之。
FPGA設計要點之四:邏輯仿真
仿真是FPGA設計中必不可少的一步。沒有仿真,就沒有一切。
仿真是一個單調而繁瑣的工作,很容易讓人產生放棄或者偷工減料的念頭。這時一定要挺住!
仿真分為單元仿真、集成仿真、係統仿真。
單元仿真:針對每一個最小基本模塊的仿真。單元仿真要求代碼行覆蓋率、條件分支覆蓋率、表達式覆蓋率必須達到100%!這三種覆蓋率都可以通過MODELSIM來查看,不過需要在編譯該模塊時要在Compile option中設置好。
集成仿真:將多個大模塊合在一起進行仿真。覆蓋率要求盡量高。
係統仿真:將整個硬件係統合在一起進行仿真。此時整個仿真平台包含了邏輯周邊芯片接口的仿真模型,以及BFM、Testbench等。係統仿真需要根據被仿真邏輯的功能、性能需求仔細設計仿真測試例和仿真測試平台。係統仿真是邏輯設計的一個大分支,是一門需要專門學習的學科。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 2026藍牙亞洲大會暨展覽在深啟幕
- 新市場與新場景推動嵌入式係統研發走向統一開發平台
- 維智捷發布中國願景
- 2秒啟動係統 • 資源受限下HMI最優解,米爾RK3506開發板× LVGL Demo演示
- H橋降壓-升壓電路中的交替控製與帶寬優化
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
接口IC
介質電容
介質諧振器
金屬膜電阻
晶體濾波器
晶體諧振器
晶體振蕩器
晶閘管
精密電阻
精密工具
景佑能源
聚合物電容
君耀電子
開發工具
開關
開關電源
開關電源電路
開關二極管
開關三極管
科通
可變電容
可調電感
可控矽
空心線圈
控製變壓器
控製模塊
藍牙
藍牙4.0
藍牙模塊
浪湧保護器


