我學習FPGA的總結
一.序 言
1.FPGA的好處
設計工程師不在需要畫繁瑣的原理圖PCB連線,從而將工作重心轉移到功能實現(xiàn)上,極大地提高了工作效;隨著HDL(Hardware Description Language)硬件描述語言語言綜合工具及其它相關工具的推廣已經加大的FPGA的應用普及。
2.工程師們在使用FPGA時的一些壞習慣
任何事務都是一分為二的,有利就有弊。
我們發(fā)現(xiàn)現(xiàn)在越來越多的工程師不關心自己的電路實現(xiàn)形式,以為“我只要將功能描述正確,其它事情交給工具就行了”。
在這種思想影響下,工程師在用HDL語言描述電路時,腦袋里沒有任何電路概念,或者非常模糊;也不清楚自己寫的代碼綜合出來之后是什么樣子,映射到芯片中又會是什么樣子,有沒有充分利用到FPGA的一些特殊資源。遇到問題,首先想到的是換速度更快、容量更大的FPGA器件,導致物料成本上升;更為要命的是,由于不了解器件結構,更不了解與器件結構緊密相關的設計技巧,過分依賴綜合等工具,工具不行,自己也就束手無策,導致問題遲遲不能解決,從而嚴重影響開發(fā)周期,導致開發(fā)成本急劇上升。
3.學好FPGA應該要具備的知識
目前,我們的設計規(guī)模越來越龐大,動輒上百萬門、幾百萬門的電路屢見不鮮。同時我們所采用的器件工藝越來越先進,已經步入深亞微米時代。而在對待深亞微米的器件上,我們的設計方法將不可避免地發(fā)生變化,要更多地關注以前很少關注的線延時(我相信,ASIC設計以后也會如此)。
如果我們不在設計方法、設計技巧上有所提高,是無法面對這些龐大的基于深亞微米技術的電路設計。而且,現(xiàn)在的競爭越來越激勵,從節(jié)約公司成本角度出發(fā),也要求我們盡可能在比較小的器件里完成比較多的功能。
二.談談FPGA的工具幾個關鍵問題
4.關于我們對FPGA工具過分依賴的問題認識
硬件描述語言和綜合工具的產生,極大地提高了工程師的工作效率。然而,隨著它們的普及與推廣,一種不好的現(xiàn)象也在逐步蔓延;在設計過程中,只關注功能是否實現(xiàn),而不考慮或很少考慮電路到底是如何實現(xiàn)的;過分依賴綜合等工具來提高設計性能(如速度、面積等),而不是從設計本身來考慮自己的電路是否最佳。
如果將設計看成是一個化學變化,那么工具只是起到催化劑的作用,我們所掌握的背景知識、電路設計方法及有關技巧,才是參加化學反應的分子,是起決定作用的因素。
因此,設計遇到困難時,不能完全指望工具,更不能怪罪工具。只有我們才是決定設計成敗的關鍵。
5.不管使用何種綜合工具,都包括兩個過程
過程1:是把行為級的描述通過一定的算法轉化為門級的描述,該過程與設計的工藝庫無關、與用戶約束無關。
過程2:是把已經轉化的門級描述在用戶的約束下,通過算法映射到相應的工藝庫中的器件上。對ASIC,是映射到廠商的Gate庫中,對FPGA,是映射到FPGA器件的單元結構中。
從上兩個步驟可知,當設計代碼的的風格不一樣時,則在綜合第一步就已大部分決定了設計的性能(對ASIC來說,因為是轉成Gate, 器件庫一般也是Gate, 相對影響較少)因此,我們不難理解代碼風格對FPGA設計的重要性。
6.說說具體的綜合工具性能
不同綜合工具的針對目標不一致和各綜合工具的不同性能,導致了綜合出來的結果也不同。
目前,綜合工具主要有DC(Design Compiler)、FC2(FPGA Compiler II)、Synplify、Leonardo、Galileo 等綜合工具:
1)DC:主要是用于ASIC的綜合工具
2)FC2:是DC在FPGA綜合方面的增強版
3)Leonardo:是做FPGA綜合工具的先驅
4)Synplify:是目前成長最快的綜合工具(由Synplicity公司出品)
無論哪家綜合工具,對FPGA的綜合,都必須緊密結合各FPGA廠家的FPGA結構,否則無法更好利用FPGA提供的優(yōu)點;從目前來看,優(yōu)選Synplify或Leonardo綜合工具;DA的FPGA綜合性能差但事宜ASIC綜合。
到目前為止第三方的綜合工具都未能很好利用FPGA器件,因為代碼風格沒有跟上,導致無法得到很好的性能。
7.邏輯代碼風格的重要性
因為綜合工具無法最大使用到器件所提供的優(yōu)越性能,導致最終的產品性能變差;若想得到更好的性能,這要求在FPGA設計上,最好對一些設計采用一些Core(但這種基于FPGA器件(特有工藝)的代碼設計,將降低設計代碼的重用性能、以及FPGA設計與ASIC設計的兼容性)。
8.舉例:以Xilinx為例,我們怎樣采取恰當?shù)拇a風格,以提高電路性能:
1) 資源共享的應用限制在同一個module里。這樣,綜合工具才能最大限度地發(fā)揮其資源共享綜合作用。
2) 盡可能將Critical path上所有相關邏輯放在同一個module里。這樣,綜合工具能夠發(fā)揮其最佳綜合效果。
3) Critical path所在的module與其它module分別綜合,對critial path采用速度優(yōu)先的綜合策略,對其它module采用面積優(yōu)先的綜合策略。
4) 盡可能Register所有的Output。做到這一點,對加約束比較方便;同時一條路徑上的組合邏輯不可能分散在各個module里,這對綜合非常有利??梢员容^方便地達到面,積速度雙贏的目的。
5) 一個module的size不能太大。具體大小,由各綜合工具而定。
6) 一個module盡量只有一個時鐘,或者整個設計只有一個時鐘。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論