牛人的FPGA設計經驗分享

2021-09-24 20:55:37 字數 2677 閱讀 8622

在ic工業中有許多不同的領域,ic設計者的特徵也會有些不同。在a領域的乙個好的ic設計者也許會花很長時間去熟悉b領域的知識。在我們職業生涯的開始,我們應該問我們自己一些問題,我們想要成為怎樣的ic設計者?消費?pc外圍?通訊?微處理器或dsp?等等?

ic設計的基本規則和流程是一樣的,無論啥樣的都會加到其中。hdl,fpga和軟體等是幫助我們理解晶元的最好工具。ic的靈魂是知識。因此我們遇到的第乙個挑戰將是獲得設計的相關資訊,然後理解資訊並應用它。

但是有些資訊不是免費的,我們需要加入一些協會或從如ieee/iso等那些組織購買一些文件。設計者應該有很強的背景知識來很快的理解他們,甚至能改進存在的標準或。乙個好的設計者應該應該有足夠的設計技能和工具應用知識並且不斷的積累他們。

例如:8口乙太網轉換hub控制器

需要知識:ieee802.3標準,包括10mhz乙太網和100mhz快速乙太網。

hdl,計算機**和只能解決asic設計流程的數字部分。如果在ic中有任何模擬部分,他將依賴模擬設計者或從另外的廠家購買。甚至一些純數字部分也能從另外一些廠家購買以加速上市時間。那些不是被我們設計的部分稱為ip,包括hdl**,網表,硬核。對於我們設計的技術取決於硬核。一些ip是非常貴的,如在usb2.0中的 phy。一些小的公司沒有足夠的人力和軟體資源來完成有些工作,甚至他們不能在缺貨期預定足夠的晶原,因此涉及服務公司取代了他們的工作。但並不是每個ip都滿足我們的需要,有時我們需要在購買後作一些修改。我們要在設計前決定所要用到的ips。

在設計開始,設計者必須理解所有相關的標準、規範和演算法。但是有許多方法來應用這些規範和演算法。最好的結構是快速和最小晶元尺寸的結合。不幸的是,快速的需求常常和最小晶元尺寸的需求是對立的。因此,在hdl編碼工作前規劃乙個最優的結構也是乙個重要的問題。

例如:1:除法器

除數被固定。最快的方法是查表,但是這個方法需要大的記憶體。我們可以可以從被除數中不斷的減去除數直到新的被除數比除數小。它會花更多的時間但用最少的硬體。還有許多的方法來構建除法器,每種方法都有他自己的優點和缺點。

2:影象處理的動態評估器

從前乙個中發現最相似的8×8模組,在整個電影剪輯中。最基本的有全搜尋和三步搜尋的方法。許多的**已經討論過優化硬體複雜度和速度的結構,這裡我不再祥解釋。

乙個好的設計者應該要被實際經驗培訓和不斷的。我們要在每個設計工作中非常小心和耐心。因為乙個nre將會消耗大量的金錢和數週的時間,如果他不小心犯錯,設計者將會對金錢和計畫失敗負責。經驗和小心也許是來完成乙個成功的設計專案最好的方法。

以下條款是一些對乙個穩步的和成功的設計的建議:(可能有些朋友也指出了其中的部分,我這裡只作簡要說明,可能稍有不同)

命名風格:

1不要用關鍵字做訊號名;

2不要在中用verilog關鍵字做訊號名;

3命名訊號用含義;

4命名i/o口用盡量短的名字;

5不要把訊號用高和低的情況混合命名;

6訊號的第乙個字母必須是a-z是乙個規則;

7使模組名、例項名和檔名相同;

1盡可能多的增加說明語句;

2在乙個設計中固定編碼格式和統一所有的模組,根從專案領導者定義的格式;

3把全部設計分成適合數量的不同的模組或實體;

4在乙個always/process中的所有訊號必須相關;

5不要用關鍵字或一些經常被用來安全綜合的語法;

6不要用複雜邏輯;

7在乙個if語句中的所有條件必須相關;

設計風格

1強烈建議用同步設計;

2在設計時總是記住時序問題;

3在乙個設計開始就要考慮到地電平或高電平復位、同步或非同步復位、上公升沿或下降沿觸發等問題,在所有模組中都要遵守它;

4在不同的情況下用if和case;

5在鎖存乙個訊號或匯流排時要小心;

6確信所有暫存器的輸出訊號能夠被復位/置位;

7永遠不要再寫入之前讀取任何內部儲存器(如sram)

8從乙個時鐘到另乙個不同的時鐘傳輸資料時用資料緩衝,他工作像乙個雙時鐘fifo;

9在vhdl中二維陣列可以使用,它是非常有用的。在verilog中他僅僅可以使用在測試模組中,不能被綜合;

10遵守register-in register-out規則;

11像synopsys的dc的綜合工具是非常穩定的,任何bugs都不會從綜合工具中產生;

12確保fpga版本與asic的版本盡可能的相似,特別是sram型別,若版本一致是最理想的;

13在嵌入式儲存器中使用bist;

14虛單元和一些修正電路是必需的;

15一些簡單的測試電路也是需要的,經常在乙個晶元中有許多測試模組;

16除非低功耗不要用門控時鐘;

17不要依靠指令碼來保證設計。但是在指令碼中的一些好的約束能夠起到更好的效能(例如前向加法器);

18如果時間充裕,通過時鐘做乙個多鎖存器來取代用mux;

19不要用內部tri-state, asic需要匯流排保持器來處理內部tri-state;

20在top level中作pad insertion;

21選擇pad時要小心(如上拉能力,施密特觸發器,5伏耐壓等);

22小心由時鐘偏差引起的問題;

23不要試著產生半週期訊號;

24如果有很多函式要修正,請乙個乙個地作,修正乙個函式檢查乙個函式;

25在乙個計算等式中排列每個訊號的位數是乙個好習慣,即使綜合工具能做;

26不要使用hdl提供的除法器;

27削減不必要的時鐘。它會在設計和布局中引起很多麻煩,大多數fpga有1-4個專門的時鐘通道。

FPGA牛人的經驗分享

fpga牛人的經驗分享 這裡我談談我的一些經驗和大家分享,希望能對ic設計的新手有一定的幫助,能使得他們能少走一些彎路 在ic工業中有許多不同的領域,ic設計者的特徵也會有些不同。在a領域的乙個好的ic設計者也許會花很長時間去熟悉b領域的知識。在我們職業生涯的開始,我們應該問我們自己一些問題,我們想...

FPGA系統設計實戰經驗分享 硬體篇

產品,或者實驗室的師兄們都用那個公司的產品多一些等等。如果自己對那個公司的產品比較熟悉,還是不要輕易更換。因為學習軟體和了解晶元結構還是需要一些時間的,而且也會引入一些設計風險。人一般會有慣性的思維的,往往會把一些經驗帶到新的專案中,而實際上不同廠商的晶元在設計細節方面還是有些不同的,對這個公司的晶...

FPGA設計經驗教訓雜談

做fpga設計的工作也有一段時間了,有過問題迎刃而解的快樂,也有過苦苦尋求結果和答案的痛苦歷程.現在就把我個人曾經在專案中經常遇到的問題和犯的錯誤總結一下.希望對大家有啟示和幫助 1 fpga和其他電路的介面部分的時序要處理好,要考慮到訊號進入fpga之前的線路延遲.要想清楚進入fpga的資料和時鐘...